diff --git a/Cargo.lock b/Cargo.lock index a1c2bd82..8b164de0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1213,6 +1213,7 @@ dependencies = [ "async-trait", "commit-boost", "eyre", + "serde", "tokio", "tracing", ] @@ -1278,7 +1279,7 @@ dependencies = [ "toml", "tracing", "tracing-subscriber", - "tree_hash 0.8.0", + "tree_hash 0.9.1", ] [[package]] @@ -1328,7 +1329,7 @@ dependencies = [ "tracing", "tracing-appender", "tracing-subscriber", - "tree_hash 0.8.0", + "tree_hash 0.9.1", "tree_hash_derive", "unicode-normalization", "url", @@ -1364,6 +1365,7 @@ dependencies = [ "parking_lot", "prometheus", "reqwest", + "serde", "serde_json", "thiserror 1.0.61", "tokio", @@ -1392,7 +1394,7 @@ dependencies = [ "thiserror 1.0.61", "tokio", "tracing", - "tree_hash 0.8.0", + "tree_hash 0.9.1", "tree_hash_derive", "uuid 1.8.0", ] @@ -1411,7 +1413,7 @@ dependencies = [ "tokio", "tracing", "tracing-subscriber", - "tree_hash 0.8.0", + "tree_hash 0.9.1", "url", ] @@ -1555,7 +1557,7 @@ dependencies = [ "eyre", "tokio", "tracing", - "tree_hash 0.8.0", + "tree_hash 0.9.1", "tree_hash_derive", ] @@ -2109,17 +2111,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "ethereum_ssz" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e999563461faea0ab9bc0024e5e66adcee35881f3d5062f52f31a4070fe1522" -dependencies = [ - "alloy-primitives", - "itertools 0.13.0", - "smallvec", -] - [[package]] name = "ethereum_ssz" version = "0.8.0" @@ -4066,18 +4057,17 @@ dependencies = [ [[package]] name = "ssz_types" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0719d2b86ac738a55ae71a8429f52aa2741da988f1fd0975b4cc610fd1e08" +checksum = "22bc24c8a61256950632fb6b68ea09f6b5c988070924c6292eb5933635202e00" dependencies = [ - "derivative", "ethereum_serde_utils 0.7.0", - "ethereum_ssz 0.7.1", + "ethereum_ssz 0.8.0", "itertools 0.13.0", "serde", "serde_derive", "smallvec", - "tree_hash 0.8.0", + "tree_hash 0.9.1", "typenum", ] @@ -4627,20 +4617,22 @@ dependencies = [ [[package]] name = "tree_hash" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373495c23db675a5192de8b610395e1bec324d596f9e6111192ce903dc11403a" +checksum = "6c58eb0f518840670270d90d97ffee702d8662d9c5494870c9e1e9e0fa00f668" dependencies = [ "alloy-primitives", "ethereum_hashing 0.7.0", + "ethereum_ssz 0.8.0", "smallvec", + "typenum", ] [[package]] name = "tree_hash_derive" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0857056ca4eb5de8c417309be42bcff6017b47e86fbaddde609b4633f66061e" +checksum = "699e7fb6b3fdfe0c809916f251cf5132d64966858601695c3736630a87e7166a" dependencies = [ "darling", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 1bf3de64..20789811 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ alloy = { version = "0.8.0", features = [ "getrandom", "providers", ] } -ssz_types = "0.8" +ssz_types = "0.10" ethereum_serde_utils = "0.7.0" # networking @@ -69,8 +69,8 @@ prometheus = "0.13.4" # crypto blst = "0.3.11" -tree_hash = "0.8" -tree_hash_derive = "0.8" +tree_hash = "0.9.1" +tree_hash_derive = "0.9" eth2_keystore = { git = "https://github.com/sigp/lighthouse", rev = "9e12c21f268c80a3f002ae0ca27477f9f512eb6f" } k256 = "0.13" aes = "0.8" diff --git a/benches/pbs/src/main.rs b/benches/pbs/src/main.rs index 19a79687..6a20e162 100644 --- a/benches/pbs/src/main.rs +++ b/benches/pbs/src/main.rs @@ -3,7 +3,7 @@ use std::time::{Duration, Instant}; use alloy::{primitives::B256, rpc::types::beacon::BlsPublicKey}; use cb_common::{ config::RelayConfig, - pbs::{GetHeaderResponse, RelayClient, RelayEntry}, + pbs::{DenebSpec, GetHeaderResponse, RelayClient, RelayEntry}, signer::BlsSecretKey, types::Chain, utils::blst_pubkey_to_alloy, @@ -63,7 +63,7 @@ async fn main() { .expect("failed to decode response"); assert!( - serde_json::from_slice::(&res).is_ok(), + serde_json::from_slice::>(&res).is_ok(), "invalid header returned" ); @@ -146,7 +146,7 @@ async fn start_mock_relay(chain: Chain, relay_config: RelayConfig) { let relay_port = relay_config.entry.url.port().expect("missing port"); let mock_relay = MockRelayState::new(chain, signer); - start_mock_relay_service(mock_relay.into(), relay_port) + start_mock_relay_service::(mock_relay.into(), relay_port) .await .expect("failed to start mock relay"); } diff --git a/bin/pbs.rs b/bin/pbs.rs index cb47ceb6..9bf4213f 100644 --- a/bin/pbs.rs +++ b/bin/pbs.rs @@ -1,5 +1,6 @@ use cb_common::{ config::load_pbs_config, + pbs::DenebSpec, utils::{initialize_pbs_tracing_log, wait_for_signal}, }; use cb_pbs::{DefaultBuilderApi, PbsService, PbsState}; @@ -20,7 +21,7 @@ async fn main() -> Result<()> { PbsService::init_metrics(pbs_config.chain)?; let state = PbsState::new(pbs_config); - let server = PbsService::run::<_, DefaultBuilderApi>(state); + let server = PbsService::run::<_, DenebSpec, DefaultBuilderApi>(state); tokio::select! { maybe_err = server => { diff --git a/bin/src/lib.rs b/bin/src/lib.rs index 55961348..88d24d56 100644 --- a/bin/src/lib.rs +++ b/bin/src/lib.rs @@ -9,7 +9,9 @@ pub mod prelude { load_builder_module_config, load_commit_module_config, load_pbs_config, load_pbs_custom_config, LogsSettings, StartCommitModuleConfig, }, - pbs::{BuilderEvent, BuilderEventClient, OnBuilderApiEvent}, + pbs::{ + BuilderEvent, BuilderEventClient, DenebSpec, ElectraSpec, EthSpec, OnBuilderApiEvent, + }, signer::{BlsPublicKey, BlsSignature, EcdsaPublicKey, EcdsaSignature}, types::Chain, utils::{ diff --git a/crates/common/src/pbs/event.rs b/crates/common/src/pbs/event.rs index 015de714..c7609b82 100644 --- a/crates/common/src/pbs/event.rs +++ b/crates/common/src/pbs/event.rs @@ -1,4 +1,4 @@ -use std::net::SocketAddr; +use std::{marker::PhantomData, net::SocketAddr}; use alloy::{primitives::B256, rpc::types::beacon::relay::ValidatorRegistration}; use async_trait::async_trait; @@ -16,7 +16,8 @@ use tracing::{error, info, trace}; use url::Url; use super::{ - GetHeaderParams, GetHeaderResponse, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, + EthSpec, GetHeaderParams, GetHeaderResponse, SignedBlindedBeaconBlock, + SubmitBlindedBlockResponse, }; use crate::{ config::{load_optional_env_var, BUILDER_URLS_ENV}, @@ -24,13 +25,13 @@ use crate::{ }; #[derive(Debug, Clone, Serialize, Deserialize)] -pub enum BuilderEvent { +pub enum BuilderEvent { GetHeaderRequest(GetHeaderParams), - GetHeaderResponse(Box>), + GetHeaderResponse(Box>>), GetStatusEvent, GetStatusResponse, - SubmitBlockRequest(Box), - SubmitBlockResponse(Box), + SubmitBlockRequest(Box>), + SubmitBlockResponse(Box>), MissedPayload { /// Hash for the block for which no payload was received block_hash: B256, @@ -69,7 +70,7 @@ impl BuilderEventPublisher { .transpose() } - pub fn publish(&self, event: BuilderEvent) { + pub fn publish(&self, event: BuilderEvent) { for endpoint in self.endpoints.clone() { let client = self.client.clone(); let event = event.clone(); @@ -94,21 +95,30 @@ impl BuilderEventPublisher { } } -pub struct BuilderEventClient { +pub struct BuilderEventClient +where + T: OnBuilderApiEvent + Clone + Send + Sync + 'static, + S: EthSpec + Clone + Send + Sync + 'static + for<'de> Deserialize<'de>, +{ pub port: u16, pub processor: T, + _phantom: PhantomData, } -impl BuilderEventClient { +impl BuilderEventClient +where + T: OnBuilderApiEvent + Clone + Send + Sync + 'static, + S: EthSpec + Clone + Send + Sync + 'static + for<'de> Deserialize<'de>, +{ pub fn new(port: u16, processor: T) -> Self { - Self { port, processor } + Self { port, processor, _phantom: PhantomData } } pub async fn run(self) -> eyre::Result<()> { info!("Starting builder events server on port {}", self.port); let router = axum::Router::new() - .route(BUILDER_EVENTS_PATH, post(handle_builder_event::)) + .route(BUILDER_EVENTS_PATH, post(handle_builder_event::)) .with_state(self.processor); let address = SocketAddr::from(([0, 0, 0, 0], self.port)); let listener = TcpListener::bind(&address).await?; @@ -119,10 +129,14 @@ impl BuilderEventClient } } -async fn handle_builder_event( +async fn handle_builder_event( State(processor): State, - Json(event): Json, -) -> Response { + Json(event): Json>, +) -> Response +where + T: OnBuilderApiEvent + Clone + Send + Sync + 'static, + S: EthSpec + Clone + Send + Sync + 'static + for<'de> Deserialize<'de>, +{ trace!("Handling builder event"); processor.on_builder_api_event(event).await; StatusCode::OK.into_response() @@ -130,6 +144,9 @@ async fn handle_builder_event( #[async_trait] /// This is what modules are expected to implement to process BuilderApi events -pub trait OnBuilderApiEvent { - async fn on_builder_api_event(&self, event: BuilderEvent); +pub trait OnBuilderApiEvent +where + T: EthSpec + Clone + Send + Sync + 'static + for<'de> Deserialize<'de>, +{ + async fn on_builder_api_event(&self, event: BuilderEvent); } diff --git a/crates/common/src/pbs/types/beacon_block.rs b/crates/common/src/pbs/types/beacon_block.rs index e17f1f8a..4880259d 100644 --- a/crates/common/src/pbs/types/beacon_block.rs +++ b/crates/common/src/pbs/types/beacon_block.rs @@ -3,43 +3,45 @@ use serde::{Deserialize, Serialize}; use super::{ blinded_block_body::BlindedBeaconBlockBody, blobs_bundle::BlobsBundle, - execution_payload::ExecutionPayload, spec::DenebSpec, utils::VersionedResponse, + execution_payload::ExecutionPayload, spec::EthSpec, utils::VersionedResponse, }; #[derive(Debug, Default, Clone, Serialize, Deserialize)] /// Sent to relays in submit_block -pub struct SignedBlindedBeaconBlock { - pub message: BlindedBeaconBlock, +pub struct SignedBlindedBeaconBlock { + pub message: BlindedBeaconBlock, pub signature: BlsSignature, } -impl SignedBlindedBeaconBlock { +impl SignedBlindedBeaconBlock { pub fn block_hash(&self) -> B256 { self.message.body.execution_payload_header.block_hash } } #[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct BlindedBeaconBlock { +#[serde(bound = "T: EthSpec")] +pub struct BlindedBeaconBlock { #[serde(with = "serde_utils::quoted_u64")] pub slot: u64, #[serde(with = "serde_utils::quoted_u64")] pub proposer_index: u64, pub parent_root: B256, pub state_root: B256, - pub body: BlindedBeaconBlockBody, + pub body: BlindedBeaconBlockBody, } /// Returned by relay in submit_block -pub type SubmitBlindedBlockResponse = VersionedResponse; +#[allow(type_alias_bounds)] +pub type SubmitBlindedBlockResponse = VersionedResponse>; #[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct PayloadAndBlobs { - pub execution_payload: ExecutionPayload, - pub blobs_bundle: Option>, +pub struct PayloadAndBlobs { + pub execution_payload: ExecutionPayload, + pub blobs_bundle: Option>, } -impl SubmitBlindedBlockResponse { +impl SubmitBlindedBlockResponse { pub fn block_hash(&self) -> B256 { self.data.execution_payload.block_hash } @@ -50,12 +52,15 @@ mod tests { use serde_json::json; use super::{SignedBlindedBeaconBlock, SubmitBlindedBlockResponse}; - use crate::utils::test_encode_decode; + use crate::{ + pbs::{DenebSpec, ElectraSpec}, + utils::test_encode_decode, + }; #[test] // this is from the builder api spec, but with sync_committee_bits fixed to // deserialize correctly - fn test_signed_blinded_block() { + fn test_signed_blinded_block_deneb() { let data = r#"{ "message": { "slot": "1", @@ -250,12 +255,12 @@ mod tests { "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" }"#; - test_encode_decode::(&data); + test_encode_decode::>(&data); } #[test] // this is from mev-boost test data - fn test_signed_blinded_block_fb() { + fn test_signed_blinded_block_fb_deneb() { let data = r#"{ "message": { "slot": "348241", @@ -564,13 +569,13 @@ mod tests { "signature": "0x8c3095fd9d3a18e43ceeb7648281e16bb03044839dffea796432c4e5a1372bef22c11a98a31e0c1c5389b98cc6d45917170a0f1634bcf152d896f360dc599fabba2ec4de77898b5dff080fa1628482bdbad5b37d2e64fea3d8721095186cfe50" }"#; - test_encode_decode::(&data); + test_encode_decode::>(&data); } #[test] // this is from the builder api spec, but with blobs fixed to deserialize // correctly - fn test_submit_blinded_block_response() { + fn test_submit_blinded_block_response_deneb() { let blob = alloy::primitives::hex::encode_prefixed([1; 131072]); let data = json!({ @@ -622,6 +627,85 @@ mod tests { } }).to_string(); - test_encode_decode::(&data); + test_encode_decode::>(&data); + } + + #[test] + // test vector from mev-boost + fn test_signed_blinded_block_electra() { + let data = r#"{ + "message": { + "slot": "252288", + "proposer_index": "4295", + "parent_root": "0x9a8eef2096477e645150fee1a2ce13190382179a0ea843f31173715a1a14e074", + "state_root": "0x4c033e0b4a34c0eb8e0caba126fae3ed303a83254fe39f8daaa673125f4042cc", + "body": { + "randao_reveal": "0xa7a74e03d8ef909abc75b9452d167e15869180fb4b19db79a1136b510495f02d6ae480ee4ad6a2a9e41af866a9a54c681601a3a1dee30f676e93e6c6b3eb3e880c2cb8d32bd730ca9e7def92877c70da09bfc52a531f1be15619c8a3bb38bdf6", + "eth1_data": { + "deposit_root": "0x0cacd599c9cdcee8398b40ef045baf2c137bed4d2b02a465a0414b04015f861d", + "deposit_count": "216773", + "block_hash": "0xd75a680056c50b4e339eda2f91ccd33badc5d59feab830526e342c5ec68d8dce" + }, + "graffiti": "0x6c69676874686f7573652d6e65746865726d696e642d33000000000000000000", + "proposer_slashings": [], + "attester_slashings": [], + "attestations": [ + { + "aggregation_bits": "0xf8fbff9093195acfebcff69cdfef71fbd9eaf19777f7dfb1f9233faf08be7e463a675cefef2d9e03", + "data": { + "slot": "252287", + "index": "0", + "beacon_block_root": "0x9a8eef2096477e645150fee1a2ce13190382179a0ea843f31173715a1a14e074", + "source": { + "epoch": "7682", + "root": "0x83900465836d88fbd48a829ca207db86e32aa7797966df1b0c886128c72a1a0b" + }, + "target": { + "epoch": "7883", + "root": "0x6e20c4503b853781327d750ee818651e5493b04f5ea0f2699725eecb1e0c3ddf" + } + }, + "signature": "0xb8fb8248ce16152eb41f88803445ef64c33da86de7bfd398b12e745a449013f9454c38b42a658291e344e3eb11d1c3ec03d692b9ed299aff0f599ea9145596b5195d11ff49f83a573519616c8b76c9459a1ed5f869e1c5c6bad176adbd3b689c", + "committee_bits": "0x0300000000000000" + } + ], + "deposits": [], + "voluntary_exits": [], + "sync_aggregate": { + "sync_committee_bits": "0xde98bcde844ff76e87b94cfff1cbcc3dfbf93fdf3ee9b994764fafe484f762eb1562e7fa28e96f5d7a887bff689ffb932d5eff467e668d137bc565d37e3fa7fd", + "sync_committee_signature": "0x93a611fb577d17674242e42de06958513013b0cb07d1f284e993ed7d63ac43bbc234e54a886ca9cb979e76eabeeb6ee603556234b7d661bdb7a7ac98813028faf8060e5e9271d4f25de199ce5e2ecc2a6762a49c41bf366b1c4c54bc185c62f9" + }, + "execution_payload_header": { + "parent_hash": "0x98b62322edaa4d91ecc0847fe2f7debc89dec5e808d7e369aa9b535543227f60", + "fee_recipient": "0xf97e180c050e5ab072211ad2c213eb5aee4df134", + "state_root": "0x3b6b594d5cbe7ff4c8bdca04f080c57a18fffdaf1c8e700e69b86f7425ed8d73", + "receipts_root": "0x04deb4be6955e1a300123be48007597f67e4229f8ce70f4f10388de6fd3fa267", + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "prev_randao": "0x83612b3de54001f74bf36234e373c1fca95dab5e4645bc3faf7108345cf82e34", + "block_number": "220275", + "gas_limit": "30000000", + "gas_used": "84000", + "timestamp": "1732296378", + "extra_data": "0x4e65746865726d696e64", + "base_fee_per_gas": "7", + "block_hash": "0xb65b77e52407ff25f7fcd3f455c991ae67be1bc10cb7ec992a659698cf88870f", + "transactions_root": "0xb1fcd304d8ba402be6e76346395ea7641fbb4c83663b697a0e88ab115d859d3f", + "withdrawals_root": "0x792930bbd5baac43bcc798ee49aa8185ef76bb3b44ba62b91d86ae569e4bb535", + "blob_gas_used": "0", + "excess_blob_gas": "0" + }, + "bls_to_execution_changes": [], + "blob_kzg_commitments": [], + "execution_requests": { + "deposits": [], + "withdrawals": [], + "consolidations": [] + } + } + }, + "signature": "0x94cd72a70a0b424f68145115a9a52f6c8557fb40ec8b67c26cbb9b324b72756624a59e8bbe11b78acbbb8e9c606035d10c0dab9a3f4177d7e6954f8ea1863d0b0b00007fb420b4b4cf52e065bda0ad32af0d3a71bd6938180bab6dd1af754d2f" + }"#; + + test_encode_decode::>(&data); } } diff --git a/crates/common/src/pbs/types/blinded_block_body.rs b/crates/common/src/pbs/types/blinded_block_body.rs index ded4f215..0d68b646 100644 --- a/crates/common/src/pbs/types/blinded_block_body.rs +++ b/crates/common/src/pbs/types/blinded_block_body.rs @@ -6,11 +6,13 @@ use serde::{Deserialize, Serialize}; use ssz_types::{typenum, BitList, BitVector, FixedVector, VariableList}; use super::{ - execution_payload::ExecutionPayloadHeader, kzg::KzgCommitments, spec::EthSpec, utils::*, + execution_payload::ExecutionPayloadHeader, execution_requests::ExecutionRequests, + kzg::KzgCommitments, spec::EthSpec, utils::*, }; use crate::utils::as_str; #[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[serde(bound = "T: EthSpec")] pub struct BlindedBeaconBlockBody { pub randao_reveal: BlsSignature, pub eth1_data: Eth1Data, @@ -25,6 +27,8 @@ pub struct BlindedBeaconBlockBody { pub bls_to_execution_changes: VariableList, pub blob_kzg_commitments: KzgCommitments, + #[serde(skip_serializing_if = "Option::is_none")] + pub execution_requests: Option>, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] @@ -73,6 +77,7 @@ pub struct ProposerSlashing { } #[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[serde(bound = "T: EthSpec")] pub struct AttesterSlashing { pub attestation_1: IndexedAttestation, pub attestation_2: IndexedAttestation, @@ -83,7 +88,7 @@ pub struct AttesterSlashing { pub struct IndexedAttestation { /// Lists validator registry indices, not committee indices. #[serde(with = "quoted_variable_list_u64")] - pub attesting_indices: VariableList, + pub attesting_indices: VariableList, pub data: AttestationData, pub signature: BlsSignature, } @@ -111,9 +116,11 @@ pub struct Checkpoint { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(bound = "T: EthSpec")] pub struct Attestation { - pub aggregation_bits: BitList, + pub aggregation_bits: BitList, pub data: AttestationData, pub signature: BlsSignature, + #[serde(skip_serializing_if = "Option::is_none")] + pub committee_bits: Option>, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] diff --git a/crates/common/src/pbs/types/execution_requests.rs b/crates/common/src/pbs/types/execution_requests.rs new file mode 100644 index 00000000..73b71782 --- /dev/null +++ b/crates/common/src/pbs/types/execution_requests.rs @@ -0,0 +1,40 @@ +use alloy::{ + primitives::{Address, B256}, + rpc::types::beacon::{BlsPublicKey, BlsSignature}, +}; +use serde::{Deserialize, Serialize}; +use ssz_types::VariableList; +use tree_hash_derive::TreeHash; + +use super::spec::EthSpec; + +#[derive(Debug, Default, Clone, Serialize, Deserialize, TreeHash)] +#[serde(bound = "T: EthSpec")] +pub struct ExecutionRequests { + pub deposits: VariableList, + pub withdrawals: VariableList, + pub consolidations: VariableList, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, TreeHash)] +pub struct DepositRequest { + pub pubkey: BlsPublicKey, + pub withdrawal_credentials: B256, + pub amount: u64, + pub signature: BlsSignature, + pub index: u64, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, TreeHash)] +pub struct WithdrawalRequest { + pub source_address: Address, + pub validator_pubkey: BlsPublicKey, + pub amount: u64, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, TreeHash)] +pub struct ConsolidationRequest { + pub source_address: Address, + pub source_pubkey: BlsPublicKey, + pub target_pubkey: BlsPublicKey, +} diff --git a/crates/common/src/pbs/types/get_header.rs b/crates/common/src/pbs/types/get_header.rs index ebffa946..508d9f55 100644 --- a/crates/common/src/pbs/types/get_header.rs +++ b/crates/common/src/pbs/types/get_header.rs @@ -3,11 +3,10 @@ use alloy::{ rpc::types::beacon::{BlsPublicKey, BlsSignature}, }; use serde::{Deserialize, Serialize}; -use tree_hash_derive::TreeHash; use super::{ - execution_payload::ExecutionPayloadHeader, kzg::KzgCommitments, spec::DenebSpec, - utils::VersionedResponse, + execution_payload::ExecutionPayloadHeader, kzg::KzgCommitments, utils::VersionedResponse, + EthSpec, ExecutionRequests, }; #[derive(Debug, Serialize, Deserialize, Clone, Copy)] @@ -21,9 +20,10 @@ pub struct GetHeaderParams { } /// Returned by relay in get_header -pub type GetHeaderResponse = VersionedResponse; +#[allow(type_alias_bounds)] +pub type GetHeaderResponse = VersionedResponse>; -impl GetHeaderResponse { +impl GetHeaderResponse { pub fn block_hash(&self) -> B256 { self.data.message.header.block_hash } @@ -38,32 +38,67 @@ impl GetHeaderResponse { } #[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct SignedExecutionPayloadHeader { - pub message: ExecutionPayloadHeaderMessage, +pub struct SignedExecutionPayloadHeader { + pub message: ExecutionPayloadHeaderMessage, pub signature: BlsSignature, } -#[derive(Debug, Default, Clone, Serialize, Deserialize, TreeHash)] -pub struct ExecutionPayloadHeaderMessage { - pub header: ExecutionPayloadHeader, - pub blob_kzg_commitments: KzgCommitments, +#[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[serde(bound = "T: EthSpec")] +pub struct ExecutionPayloadHeaderMessage { + pub header: ExecutionPayloadHeader, + pub blob_kzg_commitments: KzgCommitments, + #[serde(skip_serializing_if = "Option::is_none")] + pub execution_requests: Option>, #[serde(with = "serde_utils::quoted_u256")] pub value: U256, pub pubkey: BlsPublicKey, } +impl tree_hash::TreeHash for ExecutionPayloadHeaderMessage { + fn tree_hash_type() -> tree_hash::TreeHashType { + tree_hash::TreeHashType::Container + } + + fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { + unreachable!("Struct should never be packed.") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("Struct should never be packed.") + } + + fn tree_hash_root(&self) -> tree_hash::Hash256 { + let leaves = 4 + usize::from(self.execution_requests.is_some()); + let mut hasher = tree_hash::MerkleHasher::with_leaves(leaves); + let _ = hasher.write(self.header.tree_hash_root().as_slice()); + let _ = hasher.write(self.blob_kzg_commitments.tree_hash_root().as_slice()); + if let Some(reqs) = &self.execution_requests { + let _ = hasher.write(reqs.tree_hash_root().as_slice()); + } + let _ = hasher.write(self.value.tree_hash_root().as_slice()); + let _ = hasher.write(self.pubkey.tree_hash_root().as_slice()); + // Note expect() is how the tree_hash_derive crate handles errors. + // https://docs.rs/tree_hash_derive/latest/src/tree_hash_derive/lib.rs.html#138 + hasher.finish().expect("tree hash derive should not have a remaining buffer") + } +} + #[cfg(test)] mod tests { use alloy::primitives::U256; use super::GetHeaderResponse; use crate::{ - constants::APPLICATION_BUILDER_DOMAIN, signature::verify_signed_message, types::Chain, + constants::APPLICATION_BUILDER_DOMAIN, + pbs::{DenebSpec, ElectraSpec}, + signature::verify_signed_message, + types::Chain, utils::test_encode_decode, }; #[test] - fn test_get_header() { + fn test_get_header_deneb() { let data = r#"{ "version": "deneb", "data": { @@ -102,7 +137,7 @@ mod tests { } }"#; - let parsed = test_encode_decode::(&data).data; + let parsed = test_encode_decode::>(&data).data; assert_eq!(parsed.message.value, U256::from(4293912964927787u64)); @@ -115,4 +150,64 @@ mod tests { ) .is_ok()) } + + #[test] + fn test_get_header_electra() { + let data = r#"{ + "version": "electra", + "data": { + "message": { + "header": { + "parent_hash": "0x114d1897fefa402a01a653c21a7f1f1db049d1373a5e73a2d25d7a8045dc02a1", + "fee_recipient": "0x1268ad189526ac0b386faf06effc46779c340ee6", + "state_root": "0x53ffe6d7d4bbcc5ef71429ce82b3d7bbfffddaed89d53979bf4dca7af0dbe94c", + "receipts_root": "0x3d67a1bb141379c352c95126c4dd06a4fe086efdc00b6e919b050c84d79f4df2", + "logs_bloom": "0x05440404082f80182749948b189406732c7da48ce83013f11c02562c0d10cc714002025f21c1c64b21293e4c40c5b58e5404aed7922104002008019258ad7020097424e0b01d41eb474dc0cd26c0c9298c640692260452e27104ac808a050a0dc47187f40386108058b301007229b82f0d30bb082c72410043005e32a42c841841184260c0d744a4a9a190840048a4590011e00084ca62a8ce3a030d640350214fbedf09f041823266c491b128800802a200eb1048341000fa810323c4825804643b68ca2301c559881c0e944334c843016e0874010c81009100348a1900e0546014239b02e956940d1408c1824847516850d8de4a110495f3d9a4d8c00808a0", + "prev_randao": "0x0fde820be6404bcb71d7bbeee140c16cd28b1940a40fa8a4e2c493114a08b38a", + "block_number": "1598034", + "gas_limit": "30000000", + "gas_used": "21186389", + "timestamp": "1716481836", + "extra_data": "0x546974616e2028746974616e6275696c6465722e78797a29", + "base_fee_per_gas": "1266581747", + "block_hash": "0xef2ebdec55b9fa68137c0a3133c0010963bfe1dfbb45139c7d2def06f0591c6b", + "transactions_root": "0x6b2db9b2be28599e0bf11b31c9a91c238c190f49072421b3fdb0734117e97b45", + "withdrawals_root": "0x2daccf0e476ca3e2644afbd13b2621d55b4d515b813a3b867cdacea24bb352d1", + "blob_gas_used": "786432", + "excess_blob_gas": "95158272" + }, + "blob_kzg_commitments": [ + "0xa20c71d1985996098aa63e8b5dc7b7fedb70de31478fe309dad3ac0e9b6d28d82be8e5e543021a0203dc785742e94b2f", + "0x94f367b25711d95dda009bdd4b055b8f433dc61a426e5f1ec70688b4c5fdd01c632c7fa4c71688161166f5ec6d90f9c9", + "0xb0d6874218fd27607effcd790eeb873d7114b9909942b9e7ccbbb78f02ddcb6f627c7cdfb91b0eb7e3982ba0d0024a2a", + "0x9576d096bb8bf8a6184afa070eac8ed92f2209be20b5ea46e2360653a9556d614e5f0779dbd9cedbc8e2933f74433c0c", + "0xa20c71d1985996098aa63e8b5dc7b7fedb70de31478fe309dad3ac0e9b6d28d82be8e5e543021a0203dc785742e94b2f", + "0xa20c71d1985996098aa63e8b5dc7b7fedb70de31478fe309dad3ac0e9b6d28d82be8e5e543021a0203dc785742e94b2f" + ], + "execution_requests": { + "deposits": [], + "withdrawals": [], + "consolidations": [] + }, + "value": "4293912964927787", + "pubkey": "0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f" + }, + "signature": "0x8468517fd5ae1807d6b13a2c91e4d1d12b7249db0c63861095e054dfd801968c61b86ac270ac0dafcf84b486ee628d8e145cba65dcf126000f225d9adfe3e252a59d6e91b7fea9df6b7e6dfbb030567d4405e4522349c8f6eddf0f37afa2619e" + } + }"#; + + let parsed = test_encode_decode::>(&data).data; + + assert_eq!(parsed.message.value, U256::from(4293912964927787u64)); + + // todo uncomment when there is a test vector with a valid signature + // assert!(verify_signed_message( + // Chain::Holesky, + // &parsed.message.pubkey.into(), + // &parsed.message, + // &parsed.signature, + // APPLICATION_BUILDER_DOMAIN + // ) + // .is_ok()) + } } diff --git a/crates/common/src/pbs/types/mod.rs b/crates/common/src/pbs/types/mod.rs index f4a2f175..86dbe08e 100644 --- a/crates/common/src/pbs/types/mod.rs +++ b/crates/common/src/pbs/types/mod.rs @@ -2,6 +2,7 @@ mod beacon_block; mod blinded_block_body; mod blobs_bundle; mod execution_payload; +mod execution_requests; mod get_header; mod kzg; mod spec; @@ -13,11 +14,12 @@ pub use execution_payload::{ ExecutionPayload, ExecutionPayloadHeader, Transaction, Transactions, Withdrawal, EMPTY_TX_ROOT_HASH, }; +pub use execution_requests::ExecutionRequests; pub use get_header::{ ExecutionPayloadHeaderMessage, GetHeaderParams, GetHeaderResponse, SignedExecutionPayloadHeader, }; pub use kzg::{ KzgCommitment, KzgCommitments, KzgProof, KzgProofs, BYTES_PER_COMMITMENT, BYTES_PER_PROOF, }; -pub use spec::{DenebSpec, EthSpec}; +pub use spec::{DenebSpec, ElectraSpec, EthSpec}; pub use utils::{Version, VersionedResponse}; diff --git a/crates/common/src/pbs/types/spec.rs b/crates/common/src/pbs/types/spec.rs index 09a1afb3..fd7ce19c 100644 --- a/crates/common/src/pbs/types/spec.rs +++ b/crates/common/src/pbs/types/spec.rs @@ -1,41 +1,105 @@ +use std::fmt::Debug; + use serde::{Deserialize, Serialize}; -use ssz_types::typenum; - -pub trait EthSpec { - type MaxProposerSlashings: typenum::Unsigned + std::fmt::Debug; - type MaxValidatorsPerCommittee: typenum::Unsigned + std::fmt::Debug; - type MaxAttesterSlashings: typenum::Unsigned + std::fmt::Debug; - type MaxAttestations: typenum::Unsigned + std::fmt::Debug; - type MaxDeposits: typenum::Unsigned + std::fmt::Debug; - type MaxVoluntaryExits: typenum::Unsigned + std::fmt::Debug; - type SyncCommitteeSize: typenum::Unsigned + std::fmt::Debug; - type BytesPerLogsBloom: typenum::Unsigned + std::fmt::Debug; - type MaxExtraDataBytes: typenum::Unsigned + std::fmt::Debug; - type MaxBlsToExecutionChanges: typenum::Unsigned + std::fmt::Debug; - type MaxBlobCommitmentsPerBlock: typenum::Unsigned + std::fmt::Debug; - type MaxWithdrawalsPerPayload: typenum::Unsigned + std::fmt::Debug; - type MaxBytesPerTransaction: typenum::Unsigned + std::fmt::Debug; - type MaxTransactionsPerPayload: typenum::Unsigned + std::fmt::Debug; - type BytesPerBlob: typenum::Unsigned + std::fmt::Debug; +use ssz_types::typenum::{ + Unsigned, U0, U1, U1048576, U1073741824, U128, U131072, U134217728, U16, U2, U2048, U256, + U262144, U32, U4096, U512, U6, U64, U8, U8192, U9, +}; + +pub trait EthSpec: 'static + Default + Clone + Debug + Send + Sync + Serialize { + type MaxProposerSlashings: Unsigned + Clone + Debug + Send + Sync; + type MaxValidatorsPerCommittee: Unsigned + Clone + Debug + Send + Sync; + type MaxAttesterSlashings: Unsigned + Clone + Debug + Send + Sync; + type MaxAttestations: Unsigned + Clone + Debug + Send + Sync; + type MaxDeposits: Unsigned + Clone + Debug + Send + Sync; + type MaxVoluntaryExits: Unsigned + Clone + Debug + Send + Sync; + type SyncCommitteeSize: Unsigned + Clone + Debug + Send + Sync; + type BytesPerLogsBloom: Unsigned + Clone + Debug + Send + Sync; + type MaxExtraDataBytes: Unsigned + Clone + Debug + Send + Sync; + type MaxBlsToExecutionChanges: Unsigned + Clone + Debug + Send + Sync; + type MaxBlobCommitmentsPerBlock: Unsigned + Clone + Debug + Send + Sync; + type MaxWithdrawalsPerPayload: Unsigned + Clone + Debug + Send + Sync; + type MaxBytesPerTransaction: Unsigned + Clone + Debug + Send + Sync; + type MaxTransactionsPerPayload: Unsigned + Clone + Debug + Send + Sync; + type BytesPerBlob: Unsigned + Clone + Debug + Send + Sync; + type MaxBlobsPerBlock: Unsigned + Clone + Debug + Send + Sync; + type MaxCommitteesPerSlot: Unsigned + Clone + Debug + Send + Sync; + // New in Electra + type PendingBalanceDepositsLimit: Unsigned + Clone + Debug + Send + Sync; + type PendingPartialWithdrawalsLimit: Unsigned + Clone + Debug + Send + Sync; + type PendingConsolidationsLimit: Unsigned + Clone + Debug + Send + Sync; + type MaxConsolidationRequestsPerPayload: Unsigned + Clone + Debug + Send + Sync; + type MaxDepositRequestsPerPayload: Unsigned + Clone + Debug + Send + Sync; + type MaxWithdrawalRequestsPerPayload: Unsigned + Clone + Debug + Send + Sync; + + // used across multiple specs + type MaxValidatorsPerCommitteeWithSlot: Unsigned + Clone + Debug + Send + Sync; } #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct DenebSpec; impl EthSpec for DenebSpec { - type MaxValidatorsPerCommittee = typenum::U2048; - type MaxProposerSlashings = typenum::U16; - type MaxAttesterSlashings = typenum::U2; - type MaxAttestations = typenum::U128; - type MaxDeposits = typenum::U16; - type MaxVoluntaryExits = typenum::U16; - type SyncCommitteeSize = typenum::U512; - type MaxExtraDataBytes = typenum::U32; - type MaxBlobCommitmentsPerBlock = typenum::U4096; - type BytesPerLogsBloom = typenum::U256; - type MaxBlsToExecutionChanges = typenum::U16; - type MaxWithdrawalsPerPayload = typenum::U16; - type MaxBytesPerTransaction = typenum::U1073741824; - type MaxTransactionsPerPayload = typenum::U1048576; - type BytesPerBlob = typenum::U131072; + type MaxValidatorsPerCommittee = U2048; + type MaxProposerSlashings = U16; + type MaxAttesterSlashings = U2; + type MaxAttestations = U128; + type MaxDeposits = U16; + type MaxVoluntaryExits = U16; + type SyncCommitteeSize = U512; + type MaxExtraDataBytes = U32; + type MaxBlobCommitmentsPerBlock = U4096; + type BytesPerLogsBloom = U256; + type MaxBlsToExecutionChanges = U16; + type MaxWithdrawalsPerPayload = U16; + type MaxBytesPerTransaction = U1073741824; + type MaxTransactionsPerPayload = U1048576; + type BytesPerBlob = U131072; + type MaxBlobsPerBlock = U6; + type MaxCommitteesPerSlot = U64; + + // Ignore Electra fields + type PendingBalanceDepositsLimit = U0; + type PendingPartialWithdrawalsLimit = U0; + type PendingConsolidationsLimit = U0; + type MaxConsolidationRequestsPerPayload = U0; + type MaxDepositRequestsPerPayload = U0; + type MaxWithdrawalRequestsPerPayload = U0; + + // MAX_VALIDATORS_PER_COMMITTEE + type MaxValidatorsPerCommitteeWithSlot = U2048; +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize)] +pub struct ElectraSpec; + +impl EthSpec for ElectraSpec { + type MaxValidatorsPerCommittee = U2048; + type MaxProposerSlashings = U16; + type MaxAttesterSlashings = U1; // Updated in Electra + type MaxAttestations = U8; // Updated in Electra + type MaxDeposits = U16; + type MaxVoluntaryExits = U16; + type SyncCommitteeSize = U512; + type MaxExtraDataBytes = U32; + type MaxBlobCommitmentsPerBlock = U4096; + type BytesPerLogsBloom = U256; + type MaxBlsToExecutionChanges = U16; + type MaxWithdrawalsPerPayload = U16; + type MaxBytesPerTransaction = U1073741824; + type MaxTransactionsPerPayload = U1048576; + type BytesPerBlob = U131072; + type MaxBlobsPerBlock = U9; // New in Electra:EIP7691 + type MaxCommitteesPerSlot = U64; + + // New Electra fields + type PendingBalanceDepositsLimit = U134217728; + type PendingPartialWithdrawalsLimit = U134217728; + type PendingConsolidationsLimit = U262144; + type MaxConsolidationRequestsPerPayload = U2; + type MaxDepositRequestsPerPayload = U8192; + type MaxWithdrawalRequestsPerPayload = U16; + + // MAX_VALIDATORS_PER_COMMITTEE * MAX_COMMITTEES_PER_SLOT + type MaxValidatorsPerCommitteeWithSlot = U131072; } diff --git a/crates/common/src/pbs/types/utils.rs b/crates/common/src/pbs/types/utils.rs index 2aeb1793..21a2eefb 100644 --- a/crates/common/src/pbs/types/utils.rs +++ b/crates/common/src/pbs/types/utils.rs @@ -40,4 +40,6 @@ pub enum Version { #[serde(rename = "deneb")] #[default] Deneb, + #[serde(rename = "electra")] + Electra, } diff --git a/crates/common/src/types.rs b/crates/common/src/types.rs index 71656178..cbbc08fa 100644 --- a/crates/common/src/types.rs +++ b/crates/common/src/types.rs @@ -346,7 +346,7 @@ mod tests { path.pop(); path.pop(); - path.push("tests/data/mainnet_spec_data.json"); + path.push("tests/data/deneb/mainnet_spec_data.json"); let s = format!("chain = {{ genesis_time_secs = 1, path = {path:?}}}"); @@ -367,7 +367,7 @@ mod tests { path.pop(); path.pop(); - path.push("tests/data/holesky_spec.json"); + path.push("tests/data/deneb/holesky_spec.json"); let s = format!("chain = {{ genesis_time_secs = 1, path = {path:?}}}"); @@ -386,7 +386,7 @@ mod tests { path.pop(); path.pop(); - path.push("tests/data/sepolia_spec_data.json"); + path.push("tests/data/deneb/sepolia_spec_data.json"); let s = format!("chain = {{ genesis_time_secs = 1, path = {path:?}}}"); diff --git a/crates/pbs/Cargo.toml b/crates/pbs/Cargo.toml index 5ef8bc64..99ae511a 100644 --- a/crates/pbs/Cargo.toml +++ b/crates/pbs/Cargo.toml @@ -25,6 +25,7 @@ parking_lot.workspace = true # serialization serde_json.workspace = true +serde.workspace = true # telemetry tracing.workspace = true diff --git a/crates/pbs/src/api.rs b/crates/pbs/src/api.rs index 8a76a423..1d2e7a2f 100644 --- a/crates/pbs/src/api.rs +++ b/crates/pbs/src/api.rs @@ -2,8 +2,10 @@ use alloy::rpc::types::beacon::relay::ValidatorRegistration; use async_trait::async_trait; use axum::{http::HeaderMap, Router}; use cb_common::pbs::{ - GetHeaderParams, GetHeaderResponse, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, + DenebSpec, ElectraSpec, EthSpec, GetHeaderParams, GetHeaderResponse, SignedBlindedBeaconBlock, + SubmitBlindedBlockResponse, }; +use serde::Deserialize; use crate::{ mev_boost, @@ -11,7 +13,7 @@ use crate::{ }; #[async_trait] -pub trait BuilderApi: 'static { +pub trait BuilderApi: 'static { /// Use to extend the BuilderApi fn extra_routes() -> Option>> { None @@ -22,7 +24,10 @@ pub trait BuilderApi: 'static { params: GetHeaderParams, req_headers: HeaderMap, state: PbsState, - ) -> eyre::Result> { + ) -> eyre::Result>> + where + T: EthSpec + for<'de> Deserialize<'de>, + { mev_boost::get_header(params, req_headers, state).await } @@ -33,10 +38,13 @@ pub trait BuilderApi: 'static { /// https://ethereum.github.io/builder-specs/#/Builder/submitBlindedBlock async fn submit_block( - signed_blinded_block: SignedBlindedBeaconBlock, + signed_blinded_block: SignedBlindedBeaconBlock, req_headers: HeaderMap, state: PbsState, - ) -> eyre::Result { + ) -> eyre::Result> + where + T: EthSpec + for<'de> Deserialize<'de>, + { mev_boost::submit_block(signed_blinded_block, req_headers, state).await } @@ -55,4 +63,5 @@ pub trait BuilderApi: 'static { } pub struct DefaultBuilderApi; -impl BuilderApi<()> for DefaultBuilderApi {} +impl BuilderApi<(), DenebSpec> for DefaultBuilderApi {} +impl BuilderApi<(), ElectraSpec> for DefaultBuilderApi {} diff --git a/crates/pbs/src/lib.rs b/crates/pbs/src/lib.rs index 8b4afdcf..3acea8dd 100644 --- a/crates/pbs/src/lib.rs +++ b/crates/pbs/src/lib.rs @@ -11,5 +11,6 @@ mod utils; pub use api::*; pub use constants::*; pub use mev_boost::*; +pub use routes::create_app_router; pub use service::PbsService; pub use state::{BuilderApiState, PbsState, PbsStateGuard}; diff --git a/crates/pbs/src/mev_boost/get_header.rs b/crates/pbs/src/mev_boost/get_header.rs index f875a4e1..245025cc 100644 --- a/crates/pbs/src/mev_boost/get_header.rs +++ b/crates/pbs/src/mev_boost/get_header.rs @@ -13,7 +13,7 @@ use cb_common::{ constants::APPLICATION_BUILDER_DOMAIN, pbs::{ error::{PbsError, ValidationError}, - GetHeaderParams, GetHeaderResponse, RelayClient, SignedExecutionPayloadHeader, + EthSpec, GetHeaderParams, GetHeaderResponse, RelayClient, SignedExecutionPayloadHeader, EMPTY_TX_ROOT_HASH, HEADER_START_TIME_UNIX_MS, }, signature::verify_signed_message, @@ -23,6 +23,7 @@ use cb_common::{ use futures::future::join_all; use parking_lot::RwLock; use reqwest::{header::USER_AGENT, StatusCode}; +use serde::Deserialize; use tokio::time::sleep; use tracing::{debug, error, warn, Instrument}; use url::Url; @@ -38,11 +39,14 @@ use crate::{ /// Implements https://ethereum.github.io/builder-specs/#/Builder/getHeader /// Returns 200 if at least one relay returns 200, else 204 -pub async fn get_header( +pub async fn get_header( params: GetHeaderParams, req_headers: HeaderMap, state: PbsState, -) -> eyre::Result> { +) -> eyre::Result>> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let parent_block = Arc::new(RwLock::new(None)); if state.extra_validation_enabled() { if let Some(rpc_url) = state.pbs_config().rpc_url.clone() { @@ -147,7 +151,7 @@ async fn fetch_parent_block( } #[tracing::instrument(skip_all, name = "handler", fields(relay_id = relay.id.as_ref()))] -async fn send_timed_get_header( +async fn send_timed_get_header( params: GetHeaderParams, relay: RelayClient, chain: Chain, @@ -155,7 +159,10 @@ async fn send_timed_get_header( ms_into_slot: u64, mut timeout_left_ms: u64, validation: ValidationContext, -) -> Result, PbsError> { +) -> Result>, PbsError> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let url = relay.get_header_url(params.slot, params.parent_hash, params.pubkey)?; if relay.config.enable_timing_games { @@ -269,13 +276,16 @@ struct ValidationContext { parent_block: Arc>>, } -async fn send_one_get_header( +async fn send_one_get_header( params: GetHeaderParams, relay: RelayClient, chain: Chain, mut req_config: RequestContext, validation: ValidationContext, -) -> Result<(u64, Option), PbsError> { +) -> Result<(u64, Option>), PbsError> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ // the timestamp in the header is the consensus block time which is fixed, // use the beginning of the request as proxy to make sure we use only the // last one received @@ -325,7 +335,8 @@ async fn send_one_get_header( return Ok((start_request_time, None)); } - let get_header_response = match serde_json::from_slice::(&response_bytes) { + let get_header_response = match serde_json::from_slice::>(&response_bytes) + { Ok(parsed) => parsed, Err(err) => { return Err(PbsError::JsonDecode { @@ -364,8 +375,8 @@ async fn send_one_get_header( Ok((start_request_time, Some(get_header_response))) } -fn validate_header( - signed_header: &SignedExecutionPayloadHeader, +fn validate_header( + signed_header: &SignedExecutionPayloadHeader, chain: Chain, expected_relay_pubkey: BlsPublicKey, parent_hash: B256, @@ -426,9 +437,9 @@ fn validate_header( Ok(()) } -fn extra_validation( +fn extra_validation( parent_block: &Block, - signed_header: &SignedExecutionPayloadHeader, + signed_header: &SignedExecutionPayloadHeader, ) -> Result<(), ValidationError> { if signed_header.message.header.block_number != parent_block.header.number + 1 { return Err(ValidationError::BlockNumberMismatch { @@ -455,7 +466,9 @@ mod tests { }; use blst::min_pk; use cb_common::{ - pbs::{error::ValidationError, SignedExecutionPayloadHeader, EMPTY_TX_ROOT_HASH}, + pbs::{ + error::ValidationError, DenebSpec, SignedExecutionPayloadHeader, EMPTY_TX_ROOT_HASH, + }, signature::sign_builder_message, types::Chain, utils::timestamp_of_slot_start_sec, @@ -465,7 +478,7 @@ mod tests { #[test] fn test_validate_header() { - let mut mock_header = SignedExecutionPayloadHeader::default(); + let mut mock_header = SignedExecutionPayloadHeader::::default(); let slot = 5; let parent_hash = B256::from_slice(&[1; 32]); diff --git a/crates/pbs/src/mev_boost/submit_block.rs b/crates/pbs/src/mev_boost/submit_block.rs index 0d03816b..87e950ff 100644 --- a/crates/pbs/src/mev_boost/submit_block.rs +++ b/crates/pbs/src/mev_boost/submit_block.rs @@ -4,13 +4,14 @@ use axum::http::{HeaderMap, HeaderValue}; use cb_common::{ pbs::{ error::{PbsError, ValidationError}, - RelayClient, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, + EthSpec, RelayClient, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, HEADER_START_TIME_UNIX_MS, }, utils::{get_user_agent_with_version, utcnow_ms}, }; use futures::future::select_ok; use reqwest::header::USER_AGENT; +use serde::Deserialize; use tracing::{debug, warn}; use url::Url; @@ -22,11 +23,14 @@ use crate::{ }; /// Implements https://ethereum.github.io/builder-specs/#/Builder/submitBlindedBlock -pub async fn submit_block( - signed_blinded_block: SignedBlindedBeaconBlock, +pub async fn submit_block( + signed_blinded_block: SignedBlindedBeaconBlock, req_headers: HeaderMap, state: PbsState, -) -> eyre::Result { +) -> eyre::Result> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ // prepare headers let mut send_headers = HeaderMap::new(); send_headers.insert(HEADER_START_TIME_UNIX_MS, HeaderValue::from(utcnow_ms())); @@ -52,12 +56,15 @@ pub async fn submit_block( /// Submit blinded block to relay, retry connection errors until the /// given timeout has passed -async fn submit_block_with_timeout( - signed_blinded_block: &SignedBlindedBeaconBlock, +async fn submit_block_with_timeout( + signed_blinded_block: &SignedBlindedBeaconBlock, relay: &RelayClient, headers: HeaderMap, timeout_ms: u64, -) -> Result { +) -> Result, PbsError> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let url = relay.submit_block_url()?; let mut remaining_timeout_ms = timeout_ms; let mut retry = 0; @@ -99,14 +106,17 @@ async fn submit_block_with_timeout( // submits blinded signed block and expects the execution payload + blobs bundle // back #[tracing::instrument(skip_all, name = "handler", fields(relay_id = relay.id.as_ref(), retry = retry))] -async fn send_submit_block( +async fn send_submit_block( url: Url, - signed_blinded_block: &SignedBlindedBeaconBlock, + signed_blinded_block: &SignedBlindedBeaconBlock, relay: &RelayClient, headers: HeaderMap, timeout_ms: u64, retry: u32, -) -> Result { +) -> Result, PbsError> +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let start_request = Instant::now(); let res = match relay .client @@ -151,16 +161,16 @@ async fn send_submit_block( return Err(err); }; - let block_response = match serde_json::from_slice::(&response_bytes) - { - Ok(parsed) => parsed, - Err(err) => { - return Err(PbsError::JsonDecode { - err, - raw: String::from_utf8_lossy(&response_bytes).into_owned(), - }); - } - }; + let block_response = + match serde_json::from_slice::>(&response_bytes) { + Ok(parsed) => parsed, + Err(err) => { + return Err(PbsError::JsonDecode { + err, + raw: String::from_utf8_lossy(&response_bytes).into_owned(), + }); + } + }; debug!( latency = ?request_latency, diff --git a/crates/pbs/src/routes/get_header.rs b/crates/pbs/src/routes/get_header.rs index 919bad11..899ba77d 100644 --- a/crates/pbs/src/routes/get_header.rs +++ b/crates/pbs/src/routes/get_header.rs @@ -5,10 +5,11 @@ use axum::{ response::IntoResponse, }; use cb_common::{ - pbs::{BuilderEvent, GetHeaderParams}, + pbs::{BuilderEvent, EthSpec, GetHeaderParams}, utils::{get_user_agent, ms_into_slot}, }; use reqwest::StatusCode; +use serde::Deserialize; use tracing::{error, info}; use uuid::Uuid; @@ -21,14 +22,17 @@ use crate::{ }; #[tracing::instrument(skip_all, name = "get_header", fields(req_id = %Uuid::new_v4(), slot = params.slot))] -pub async fn handle_get_header>( +pub async fn handle_get_header>( State(state): State>, req_headers: HeaderMap, Path(params): Path, -) -> Result { +) -> Result +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let state = state.read().clone(); - state.publish_event(BuilderEvent::GetHeaderRequest(params)); + state.publish_event(BuilderEvent::::GetHeaderRequest(params)); let ua = get_user_agent(&req_headers); let ms_into_slot = ms_into_slot(params.slot, state.config.chain); @@ -37,7 +41,7 @@ pub async fn handle_get_header>( match A::get_header(params, req_headers, state.clone()).await { Ok(res) => { - state.publish_event(BuilderEvent::GetHeaderResponse(Box::new(res.clone()))); + state.publish_event(BuilderEvent::::GetHeaderResponse(Box::new(res.clone()))); if let Some(max_bid) = res { info!(value_eth = format_ether(max_bid.value()), block_hash =% max_bid.block_hash(), "received header"); diff --git a/crates/pbs/src/routes/register_validator.rs b/crates/pbs/src/routes/register_validator.rs index 4566016f..61885fed 100644 --- a/crates/pbs/src/routes/register_validator.rs +++ b/crates/pbs/src/routes/register_validator.rs @@ -3,7 +3,7 @@ use std::time::Instant; use alloy::rpc::types::beacon::relay::ValidatorRegistration; use axum::{extract::State, http::HeaderMap, response::IntoResponse, Json}; use cb_common::{ - pbs::{BuilderEvent, REGISTER_VALIDATOR_PATH}, + pbs::{BuilderEvent, EthSpec, REGISTER_VALIDATOR_PATH}, utils::get_user_agent, DEFAULT_REQUEST_TIMEOUT, }; @@ -20,7 +20,7 @@ use crate::{ }; #[tracing::instrument(skip_all, name = "register_validators", fields(req_id = %Uuid::new_v4()))] -pub async fn handle_register_validator>( +pub async fn handle_register_validator>( State(state): State>, req_headers: HeaderMap, Json(registrations): Json>, @@ -28,7 +28,7 @@ pub async fn handle_register_validator>( let state = state.read().clone(); trace!(?registrations); - state.publish_event(BuilderEvent::RegisterValidatorRequest(registrations.clone())); + state.publish_event(BuilderEvent::::RegisterValidatorRequest(registrations.clone())); let ua = get_user_agent(&req_headers); @@ -42,7 +42,7 @@ pub async fn handle_register_validator>( } if let Err(err) = A::register_validator(registrations, req_headers, state.clone()).await { - state.publish_event(BuilderEvent::RegisterValidatorResponse); + state.publish_event(BuilderEvent::::RegisterValidatorResponse); error!(%err, "all relays failed registration"); let err = PbsClientError::NoResponse; diff --git a/crates/pbs/src/routes/reload.rs b/crates/pbs/src/routes/reload.rs index 9b984d3f..49cc6a3f 100644 --- a/crates/pbs/src/routes/reload.rs +++ b/crates/pbs/src/routes/reload.rs @@ -1,5 +1,8 @@ use axum::{extract::State, http::HeaderMap, response::IntoResponse}; -use cb_common::{pbs::BuilderEvent, utils::get_user_agent}; +use cb_common::{ + pbs::{BuilderEvent, EthSpec}, + utils::get_user_agent, +}; use reqwest::StatusCode; use tracing::{error, info}; use uuid::Uuid; @@ -12,13 +15,13 @@ use crate::{ }; #[tracing::instrument(skip_all, name = "reload", fields(req_id = %Uuid::new_v4()))] -pub async fn handle_reload>( +pub async fn handle_reload>( req_headers: HeaderMap, State(state): State>, ) -> Result { let prev_state = state.read().clone(); - prev_state.publish_event(BuilderEvent::ReloadEvent); + prev_state.publish_event(BuilderEvent::::ReloadEvent); let ua = get_user_agent(&req_headers); @@ -26,7 +29,7 @@ pub async fn handle_reload>( match A::reload(prev_state.clone()).await { Ok(new_state) => { - prev_state.publish_event(BuilderEvent::ReloadResponse); + prev_state.publish_event(BuilderEvent::::ReloadResponse); info!("config reload successful"); *state.write() = new_state; diff --git a/crates/pbs/src/routes/router.rs b/crates/pbs/src/routes/router.rs index 54659c5c..78e04194 100644 --- a/crates/pbs/src/routes/router.rs +++ b/crates/pbs/src/routes/router.rs @@ -3,9 +3,10 @@ use axum::{ Router, }; use cb_common::pbs::{ - BUILDER_API_PATH, GET_HEADER_PATH, GET_STATUS_PATH, REGISTER_VALIDATOR_PATH, RELOAD_PATH, - SUBMIT_BLOCK_PATH, + EthSpec, BUILDER_API_PATH, GET_HEADER_PATH, GET_STATUS_PATH, REGISTER_VALIDATOR_PATH, + RELOAD_PATH, SUBMIT_BLOCK_PATH, }; +use serde::Deserialize; use super::{ handle_get_header, handle_get_status, handle_register_validator, handle_submit_block, @@ -16,13 +17,18 @@ use crate::{ state::{BuilderApiState, PbsStateGuard}, }; -pub fn create_app_router>(state: PbsStateGuard) -> Router { +pub fn create_app_router(state: PbsStateGuard) -> Router +where + S: BuilderApiState, + T: EthSpec + for<'de> Deserialize<'de>, + A: BuilderApi, +{ let builder_routes = Router::new() - .route(GET_HEADER_PATH, get(handle_get_header::)) - .route(GET_STATUS_PATH, get(handle_get_status::)) - .route(REGISTER_VALIDATOR_PATH, post(handle_register_validator::)) - .route(SUBMIT_BLOCK_PATH, post(handle_submit_block::)); - let reload_router = Router::new().route(RELOAD_PATH, post(handle_reload::)); + .route(GET_HEADER_PATH, get(handle_get_header::)) + .route(GET_STATUS_PATH, get(handle_get_status::)) + .route(REGISTER_VALIDATOR_PATH, post(handle_register_validator::)) + .route(SUBMIT_BLOCK_PATH, post(handle_submit_block::)); + let reload_router = Router::new().route(RELOAD_PATH, post(handle_reload::)); let builder_api = Router::new().nest(BUILDER_API_PATH, builder_routes).merge(reload_router); diff --git a/crates/pbs/src/routes/status.rs b/crates/pbs/src/routes/status.rs index b4262d1f..d406c04e 100644 --- a/crates/pbs/src/routes/status.rs +++ b/crates/pbs/src/routes/status.rs @@ -1,5 +1,8 @@ use axum::{extract::State, http::HeaderMap, response::IntoResponse}; -use cb_common::{pbs::BuilderEvent, utils::get_user_agent}; +use cb_common::{ + pbs::{BuilderEvent, EthSpec}, + utils::get_user_agent, +}; use reqwest::StatusCode; use tracing::{error, info}; use uuid::Uuid; @@ -13,13 +16,13 @@ use crate::{ }; #[tracing::instrument(skip_all, name = "status", fields(req_id = %Uuid::new_v4()))] -pub async fn handle_get_status>( +pub async fn handle_get_status>( req_headers: HeaderMap, State(state): State>, ) -> Result { let state = state.read().clone(); - state.publish_event(BuilderEvent::GetStatusEvent); + state.publish_event(BuilderEvent::::GetStatusEvent); let ua = get_user_agent(&req_headers); @@ -27,7 +30,7 @@ pub async fn handle_get_status>( match A::get_status(req_headers, state.clone()).await { Ok(_) => { - state.publish_event(BuilderEvent::GetStatusResponse); + state.publish_event(BuilderEvent::::GetStatusResponse); info!("relay check successful"); BEACON_NODE_STATUS.with_label_values(&["200", STATUS_ENDPOINT_TAG]).inc(); diff --git a/crates/pbs/src/routes/submit_block.rs b/crates/pbs/src/routes/submit_block.rs index c9d206a1..a9c894f1 100644 --- a/crates/pbs/src/routes/submit_block.rs +++ b/crates/pbs/src/routes/submit_block.rs @@ -1,9 +1,10 @@ use axum::{extract::State, http::HeaderMap, response::IntoResponse, Json}; use cb_common::{ - pbs::{BuilderEvent, SignedBlindedBeaconBlock}, + pbs::{BuilderEvent, EthSpec, SignedBlindedBeaconBlock}, utils::{get_user_agent, timestamp_of_slot_start_millis, utcnow_ms}, }; use reqwest::StatusCode; +use serde::Deserialize; use tracing::{error, info, trace}; use uuid::Uuid; @@ -16,11 +17,14 @@ use crate::{ }; #[tracing::instrument(skip_all, name = "submit_blinded_block", fields(req_id = %Uuid::new_v4(), slot = signed_blinded_block.message.slot))] -pub async fn handle_submit_block>( +pub async fn handle_submit_block>( State(state): State>, req_headers: HeaderMap, - Json(signed_blinded_block): Json, -) -> Result { + Json(signed_blinded_block): Json>, +) -> Result +where + T: EthSpec + for<'de> Deserialize<'de>, +{ let state = state.read().clone(); trace!(?signed_blinded_block); @@ -46,7 +50,7 @@ pub async fn handle_submit_block>( Err(err) => { error!(%err, %block_hash, "CRITICAL: no payload received from relays. Check previous logs or use the Relay Data API"); - state.publish_event(BuilderEvent::MissedPayload { block_hash }); + state.publish_event(BuilderEvent::::MissedPayload { block_hash }); let err = PbsClientError::NoPayload; BEACON_NODE_STATUS diff --git a/crates/pbs/src/service.rs b/crates/pbs/src/service.rs index 6b6fd677..c50b2cf5 100644 --- a/crates/pbs/src/service.rs +++ b/crates/pbs/src/service.rs @@ -2,13 +2,14 @@ use std::time::Duration; use cb_common::{ constants::{COMMIT_BOOST_COMMIT, COMMIT_BOOST_VERSION}, - pbs::{BUILDER_API_PATH, GET_STATUS_PATH}, + pbs::{EthSpec, BUILDER_API_PATH, GET_STATUS_PATH}, types::Chain, }; use cb_metrics::provider::MetricsProvider; use eyre::{bail, Context, Result}; use parking_lot::RwLock; use prometheus::core::Collector; +use serde::Deserialize; use tokio::net::TcpListener; use tracing::info; use url::Url; @@ -23,13 +24,18 @@ use crate::{ pub struct PbsService; impl PbsService { - pub async fn run>(state: PbsState) -> Result<()> { + pub async fn run(state: PbsState) -> Result<()> + where + S: BuilderApiState, + T: EthSpec + for<'de> Deserialize<'de>, + A: BuilderApi, + { let addr = state.config.endpoint; let events_subs = state.config.event_publisher.as_ref().map(|e| e.n_subscribers()).unwrap_or_default(); info!(version = COMMIT_BOOST_VERSION, commit = COMMIT_BOOST_COMMIT, ?addr, events_subs, chain =? state.config.chain, "starting PBS service"); - let app = create_app_router::(RwLock::new(state).into()); + let app = create_app_router::(RwLock::new(state).into()); let listener = TcpListener::bind(addr).await?; let task = diff --git a/crates/pbs/src/state.rs b/crates/pbs/src/state.rs index d2bb2eb9..fb45ddcc 100644 --- a/crates/pbs/src/state.rs +++ b/crates/pbs/src/state.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use alloy::rpc::types::beacon::BlsPublicKey; use cb_common::{ config::{PbsConfig, PbsModuleConfig}, - pbs::{BuilderEvent, RelayClient}, + pbs::{BuilderEvent, EthSpec, RelayClient}, }; use parking_lot::RwLock; @@ -37,7 +37,7 @@ impl PbsState where S: BuilderApiState, { - pub fn publish_event(&self, e: BuilderEvent) { + pub fn publish_event(&self, e: BuilderEvent) { if let Some(publisher) = self.config.event_publisher.as_ref() { publisher.publish(e); } diff --git a/examples/builder_log/Cargo.toml b/examples/builder_log/Cargo.toml index cc147db4..8531bbcf 100644 --- a/examples/builder_log/Cargo.toml +++ b/examples/builder_log/Cargo.toml @@ -14,3 +14,6 @@ async-trait.workspace = true # telemetry tracing.workspace = true eyre.workspace = true + +# misc +serde.workspace = true \ No newline at end of file diff --git a/examples/builder_log/src/main.rs b/examples/builder_log/src/main.rs index aed6a4ba..9ed0be23 100644 --- a/examples/builder_log/src/main.rs +++ b/examples/builder_log/src/main.rs @@ -1,13 +1,14 @@ use async_trait::async_trait; use commit_boost::prelude::*; +use serde::Deserialize; use tracing::{error, info}; #[derive(Debug, Clone)] struct LogProcessor; #[async_trait] -impl OnBuilderApiEvent for LogProcessor { - async fn on_builder_api_event(&self, event: BuilderEvent) { +impl Deserialize<'de>> OnBuilderApiEvent for LogProcessor { + async fn on_builder_api_event(&self, event: BuilderEvent) { info!(?event, "Received builder event"); } } @@ -20,7 +21,10 @@ async fn main() -> eyre::Result<()> { info!(module_id = %config.id, "Starting module"); - let client = BuilderEventClient::new(config.server_port, LogProcessor); + let client = BuilderEventClient::::new( + config.server_port, + LogProcessor, + ); if let Err(err) = client.run().await { error!(%err, "Service failed"); diff --git a/examples/status_api/src/main.rs b/examples/status_api/src/main.rs index 973348bc..56a6baa3 100644 --- a/examples/status_api/src/main.rs +++ b/examples/status_api/src/main.rs @@ -57,7 +57,7 @@ impl MyBuilderState { struct MyBuilderApi; #[async_trait] -impl BuilderApi for MyBuilderApi { +impl BuilderApi for MyBuilderApi { async fn get_status(req_headers: HeaderMap, state: PbsState) -> Result<()> { state.data.inc(); info!("THIS IS A CUSTOM LOG"); @@ -99,5 +99,5 @@ async fn main() -> Result<()> { PbsService::register_metric(Box::new(CHECK_RECEIVED_COUNTER.clone())); PbsService::init_metrics(chain)?; - PbsService::run::(state).await + PbsService::run::(state).await } diff --git a/tests/data/holesky_spec.json b/tests/data/deneb/holesky_spec.json similarity index 100% rename from tests/data/holesky_spec.json rename to tests/data/deneb/holesky_spec.json diff --git a/tests/data/keys.example.json b/tests/data/deneb/keys.example.json similarity index 100% rename from tests/data/keys.example.json rename to tests/data/deneb/keys.example.json diff --git a/tests/data/mainnet_spec_data.json b/tests/data/deneb/mainnet_spec_data.json similarity index 100% rename from tests/data/mainnet_spec_data.json rename to tests/data/deneb/mainnet_spec_data.json diff --git a/tests/data/mux_keys.example.json b/tests/data/deneb/mux_keys.example.json similarity index 100% rename from tests/data/mux_keys.example.json rename to tests/data/deneb/mux_keys.example.json diff --git a/tests/data/registration_holesky.json b/tests/data/deneb/registration_holesky.json similarity index 100% rename from tests/data/registration_holesky.json rename to tests/data/deneb/registration_holesky.json diff --git a/tests/data/sepolia_spec_data.json b/tests/data/deneb/sepolia_spec_data.json similarity index 100% rename from tests/data/sepolia_spec_data.json rename to tests/data/deneb/sepolia_spec_data.json diff --git a/tests/data/signed_blinded_block_holesky.json b/tests/data/deneb/signed_blinded_block_holesky.json similarity index 100% rename from tests/data/signed_blinded_block_holesky.json rename to tests/data/deneb/signed_blinded_block_holesky.json diff --git a/tests/data/submit_block_response_holesky.json b/tests/data/deneb/submit_block_response_holesky.json similarity index 100% rename from tests/data/submit_block_response_holesky.json rename to tests/data/deneb/submit_block_response_holesky.json diff --git a/tests/data/electra/holesky_spec.json b/tests/data/electra/holesky_spec.json new file mode 100644 index 00000000..5e19d62a --- /dev/null +++ b/tests/data/electra/holesky_spec.json @@ -0,0 +1,141 @@ +{ + "SLOTS_PER_EPOCH": "32", + "PRESET_BASE": "mainnet", + "TERMINAL_TOTAL_DIFFICULTY": "0", + "INACTIVITY_SCORE_BIAS": "4", + "PENDING_BALANCE_DEPOSITS_LIMIT": "134217728", + "MAX_ATTESTER_SLASHINGS": "2", + "MAX_WITHDRAWALS_PER_PAYLOAD": "16", + "INACTIVITY_PENALTY_QUOTIENT_BELLATRIX": "16777216", + "PENDING_PARTIAL_WITHDRAWALS_LIMIT": "134217728", + "INACTIVITY_PENALTY_QUOTIENT": "67108864", + "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": "8", + "SECONDS_PER_ETH1_BLOCK": "14", + "MIN_SEED_LOOKAHEAD": "1", + "VALIDATOR_REGISTRY_LIMIT": "1099511627776", + "REORG_MAX_EPOCHS_SINCE_FINALIZATION": "2", + "SLOTS_PER_HISTORICAL_ROOT": "8192", + "RESP_TIMEOUT": "10", + "DOMAIN_VOLUNTARY_EXIT": "0x04000000", + "MAX_VALIDATORS_PER_COMMITTEE": "2048", + "MIN_GENESIS_TIME": "1695902100", + "ALTAIR_FORK_EPOCH": "0", + "HYSTERESIS_QUOTIENT": "4", + "ALTAIR_FORK_VERSION": "0x02017000", + "MAX_BYTES_PER_TRANSACTION": "1073741824", + "MAX_CHUNK_SIZE": "10485760", + "TTFB_TIMEOUT": "5", + "WHISTLEBLOWER_REWARD_QUOTIENT": "512", + "PROPOSER_REWARD_QUOTIENT": "8", + "MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP": "16384", + "EPOCHS_PER_HISTORICAL_VECTOR": "65536", + "MIN_PER_EPOCH_CHURN_LIMIT": "4", + "MAX_ATTESTER_SLASHINGS_ELECTRA": "1", + "TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE": "16", + "MAX_DEPOSITS": "16", + "BELLATRIX_FORK_EPOCH": "0", + "MAX_REQUEST_BLOB_SIDECARS": "768", + "REORG_HEAD_WEIGHT_THRESHOLD": "20", + "TARGET_AGGREGATORS_PER_COMMITTEE": "16", + "DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF": "0x08000000", + "MESSAGE_DOMAIN_INVALID_SNAPPY": "0x00000000", + "EPOCHS_PER_SLASHINGS_VECTOR": "8192", + "MIN_SLASHING_PENALTY_QUOTIENT": "128", + "MAX_BLS_TO_EXECUTION_CHANGES": "16", + "GOSSIP_MAX_SIZE": "10485760", + "DOMAIN_BEACON_ATTESTER": "0x01000000", + "EPOCHS_PER_SUBNET_SUBSCRIPTION": "256", + "MAX_ATTESTATIONS_ELECTRA": "8", + "ATTESTATION_SUBNET_COUNT": "64", + "GENESIS_DELAY": "300", + "MAX_SEED_LOOKAHEAD": "4", + "ETH1_FOLLOW_DISTANCE": "2048", + "SECONDS_PER_SLOT": "12", + "REORG_PARENT_WEIGHT_THRESHOLD": "160", + "MIN_SYNC_COMMITTEE_PARTICIPANTS": "1", + "BELLATRIX_FORK_VERSION": "0x03017000", + "PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX": "3", + "EFFECTIVE_BALANCE_INCREMENT": "1000000000", + "FIELD_ELEMENTS_PER_BLOB": "4096", + "MIN_EPOCHS_TO_INACTIVITY_PENALTY": "4", + "BASE_REWARD_FACTOR": "64", + "MAX_EXTRA_DATA_BYTES": "32", + "CONFIG_NAME": "holesky", + "MAX_PROPOSER_SLASHINGS": "16", + "INACTIVITY_SCORE_RECOVERY_RATE": "16", + "MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS": "4096", + "MAX_TRANSACTIONS_PER_PAYLOAD": "1048576", + "DEPOSIT_CONTRACT_ADDRESS": "0x4242424242424242424242424242424242424242", + "MIN_ATTESTATION_INCLUSION_DELAY": "1", + "SHUFFLE_ROUND_COUNT": "90", + "TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH": "18446744073709551615", + "MAX_EFFECTIVE_BALANCE": "32000000000", + "DOMAIN_BEACON_PROPOSER": "0x00000000", + "DENEB_FORK_EPOCH": "29696", + "DOMAIN_SYNC_COMMITTEE": "0x07000000", + "PROPOSER_SCORE_BOOST": "40", + "DOMAIN_SELECTION_PROOF": "0x05000000", + "MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX": "32", + "MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT": "8", + "HYSTERESIS_UPWARD_MULTIPLIER": "5", + "SUBNETS_PER_NODE": "2", + "MIN_DEPOSIT_AMOUNT": "1000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA": "4096", + "PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR": "2", + "MAX_BLOBS_PER_BLOCK": "6", + "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": "256", + "MAXIMUM_GOSSIP_CLOCK_DISPARITY": "500", + "TARGET_COMMITTEE_SIZE": "128", + "TERMINAL_BLOCK_HASH": "0x0000000000000000000000000000000000000000000000000000000000000000", + "DOMAIN_DEPOSIT": "0x03000000", + "DOMAIN_CONTRIBUTION_AND_PROOF": "0x09000000", + "UPDATE_TIMEOUT": "8192", + "ELECTRA_FORK_EPOCH": "18446744073709551615", + "SYNC_COMMITTEE_BRANCH_LENGTH": "5", + "DEPOSIT_CHAIN_ID": "17000", + "MAX_BLOB_COMMITMENTS_PER_BLOCK": "4096", + "DOMAIN_RANDAO": "0x02000000", + "CAPELLA_FORK_VERSION": "0x04017000", + "MAX_EFFECTIVE_BALANCE_ELECTRA": "2048000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR": "64", + "EPOCHS_PER_ETH1_VOTING_PERIOD": "64", + "WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA": "4096", + "HISTORICAL_ROOTS_LIMIT": "16777216", + "ATTESTATION_PROPAGATION_SLOT_RANGE": "32", + "SYNC_COMMITTEE_SIZE": "512", + "ATTESTATION_SUBNET_PREFIX_BITS": "6", + "PROPORTIONAL_SLASHING_MULTIPLIER": "1", + "MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD": "16", + "MESSAGE_DOMAIN_VALID_SNAPPY": "0x01000000", + "MAX_VOLUNTARY_EXITS": "16", + "PENDING_CONSOLIDATIONS_LIMIT": "262144", + "HYSTERESIS_DOWNWARD_MULTIPLIER": "1", + "DOMAIN_APPLICATION_BUILDER": "0x00000001", + "MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP": "8", + "EPOCHS_PER_SYNC_COMMITTEE_PERIOD": "256", + "BYTES_PER_LOGS_BLOOM": "256", + "MAX_DEPOSIT_REQUESTS_PER_PAYLOAD": "8192", + "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": "16384", + "MAX_ATTESTATIONS": "128", + "MIN_EPOCHS_FOR_BLOCK_REQUESTS": "33024", + "DENEB_FORK_VERSION": "0x05017000", + "ELECTRA_FORK_VERSION": "0x06017000", + "MAX_REQUEST_BLOCKS": "1024", + "GENESIS_FORK_VERSION": "0x01017000", + "KZG_COMMITMENT_INCLUSION_PROOF_DEPTH": "17", + "DEPOSIT_NETWORK_ID": "17000", + "MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD": "1", + "MAX_REQUEST_BLOCKS_DENEB": "128", + "BLOB_SIDECAR_SUBNET_COUNT": "6", + "SYNC_COMMITTEE_SUBNET_COUNT": "4", + "CAPELLA_FORK_EPOCH": "256", + "EJECTION_BALANCE": "28000000000", + "ATTESTATION_SUBNET_EXTRA_BITS": "0", + "MAX_COMMITTEES_PER_SLOT": "64", + "SHARD_COMMITTEE_PERIOD": "256", + "INACTIVITY_PENALTY_QUOTIENT_ALTAIR": "50331648", + "DOMAIN_AGGREGATE_AND_PROOF": "0x06000000", + "CHURN_LIMIT_QUOTIENT": "65536", + "BLS_WITHDRAWAL_PREFIX": "0x00", + "MIN_ACTIVATION_BALANCE": "32000000000" +} \ No newline at end of file diff --git a/tests/data/electra/keys.example.json b/tests/data/electra/keys.example.json new file mode 100644 index 00000000..de6c2b93 --- /dev/null +++ b/tests/data/electra/keys.example.json @@ -0,0 +1,4 @@ +[ + "0088e364a5396a81b50febbdc8784663fb9089b5e67cbdc173991a00c587673f", + "0x16f3bec1b7f4f1b87c5e1930f944a6dda76ad211a89bc98e8c8e88b5069f8a04" +] \ No newline at end of file diff --git a/tests/data/electra/mainnet_spec_data.json b/tests/data/electra/mainnet_spec_data.json new file mode 100644 index 00000000..e60edc6a --- /dev/null +++ b/tests/data/electra/mainnet_spec_data.json @@ -0,0 +1,145 @@ +{ + "data": { + "SLOTS_PER_EPOCH": "32", + "PRESET_BASE": "mainnet", + "TERMINAL_TOTAL_DIFFICULTY": "58750000000000000000000", + "INACTIVITY_SCORE_BIAS": "4", + "PENDING_BALANCE_DEPOSITS_LIMIT": "134217728", + "MAX_ATTESTER_SLASHINGS": "2", + "MAX_WITHDRAWALS_PER_PAYLOAD": "16", + "INACTIVITY_PENALTY_QUOTIENT_BELLATRIX": "16777216", + "PENDING_PARTIAL_WITHDRAWALS_LIMIT": "134217728", + "INACTIVITY_PENALTY_QUOTIENT": "67108864", + "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": "8", + "SECONDS_PER_ETH1_BLOCK": "14", + "MIN_SEED_LOOKAHEAD": "1", + "VALIDATOR_REGISTRY_LIMIT": "1099511627776", + "REORG_MAX_EPOCHS_SINCE_FINALIZATION": "2", + "SLOTS_PER_HISTORICAL_ROOT": "8192", + "RESP_TIMEOUT": "10", + "DOMAIN_VOLUNTARY_EXIT": "0x04000000", + "MAX_VALIDATORS_PER_COMMITTEE": "2048", + "MIN_GENESIS_TIME": "1606824000", + "ALTAIR_FORK_EPOCH": "74240", + "MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT": "256000000000", + "HYSTERESIS_QUOTIENT": "4", + "ALTAIR_FORK_VERSION": "0x01000000", + "MAX_BYTES_PER_TRANSACTION": "1073741824", + "MAX_CHUNK_SIZE": "10485760", + "TTFB_TIMEOUT": "5", + "WHISTLEBLOWER_REWARD_QUOTIENT": "512", + "PROPOSER_REWARD_QUOTIENT": "8", + "MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP": "16384", + "EPOCHS_PER_HISTORICAL_VECTOR": "65536", + "MIN_PER_EPOCH_CHURN_LIMIT": "4", + "MAX_ATTESTER_SLASHINGS_ELECTRA": "1", + "TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE": "16", + "MAX_DEPOSITS": "16", + "BELLATRIX_FORK_EPOCH": "144896", + "MAX_REQUEST_BLOB_SIDECARS": "768", + "REORG_HEAD_WEIGHT_THRESHOLD": "20", + "TARGET_AGGREGATORS_PER_COMMITTEE": "16", + "DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF": "0x08000000", + "MESSAGE_DOMAIN_INVALID_SNAPPY": "0x00000000", + "EPOCHS_PER_SLASHINGS_VECTOR": "8192", + "MIN_SLASHING_PENALTY_QUOTIENT": "128", + "MAX_BLS_TO_EXECUTION_CHANGES": "16", + "GOSSIP_MAX_SIZE": "10485760", + "DOMAIN_BEACON_ATTESTER": "0x01000000", + "EPOCHS_PER_SUBNET_SUBSCRIPTION": "256", + "MAX_ATTESTATIONS_ELECTRA": "8", + "ATTESTATION_SUBNET_COUNT": "64", + "GENESIS_DELAY": "604800", + "MAX_SEED_LOOKAHEAD": "4", + "ETH1_FOLLOW_DISTANCE": "2048", + "SECONDS_PER_SLOT": "12", + "REORG_PARENT_WEIGHT_THRESHOLD": "160", + "MIN_SYNC_COMMITTEE_PARTICIPANTS": "1", + "BELLATRIX_FORK_VERSION": "0x02000000", + "PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX": "3", + "EFFECTIVE_BALANCE_INCREMENT": "1000000000", + "MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA": "128000000000", + "FIELD_ELEMENTS_PER_BLOB": "4096", + "MIN_EPOCHS_TO_INACTIVITY_PENALTY": "4", + "BASE_REWARD_FACTOR": "64", + "MAX_EXTRA_DATA_BYTES": "32", + "CONFIG_NAME": "mainnet", + "MAX_PROPOSER_SLASHINGS": "16", + "MAX_CONSOLIDATIONS": "1", + "INACTIVITY_SCORE_RECOVERY_RATE": "16", + "MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS": "4096", + "MAX_TRANSACTIONS_PER_PAYLOAD": "1048576", + "DEPOSIT_CONTRACT_ADDRESS": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "MIN_ATTESTATION_INCLUSION_DELAY": "1", + "SHUFFLE_ROUND_COUNT": "90", + "TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH": "18446744073709551615", + "MAX_EFFECTIVE_BALANCE": "32000000000", + "DOMAIN_BEACON_PROPOSER": "0x00000000", + "DENEB_FORK_EPOCH": "269568", + "DOMAIN_SYNC_COMMITTEE": "0x07000000", + "PROPOSER_SCORE_BOOST": "40", + "DOMAIN_SELECTION_PROOF": "0x05000000", + "MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX": "32", + "MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT": "8", + "HYSTERESIS_UPWARD_MULTIPLIER": "5", + "SUBNETS_PER_NODE": "2", + "MIN_DEPOSIT_AMOUNT": "1000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA": "4096", + "PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR": "2", + "MAX_BLOBS_PER_BLOCK": "6", + "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": "256", + "MAXIMUM_GOSSIP_CLOCK_DISPARITY": "500", + "TARGET_COMMITTEE_SIZE": "128", + "TERMINAL_BLOCK_HASH": "0x0000000000000000000000000000000000000000000000000000000000000000", + "DOMAIN_DEPOSIT": "0x03000000", + "DOMAIN_CONTRIBUTION_AND_PROOF": "0x09000000", + "UPDATE_TIMEOUT": "8192", + "ELECTRA_FORK_EPOCH": "18446744073709551615", + "SYNC_COMMITTEE_BRANCH_LENGTH": "5", + "DEPOSIT_CHAIN_ID": "1", + "MAX_BLOB_COMMITMENTS_PER_BLOCK": "4096", + "DOMAIN_RANDAO": "0x02000000", + "CAPELLA_FORK_VERSION": "0x03000000", + "MAX_EFFECTIVE_BALANCE_ELECTRA": "2048000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR": "64", + "EPOCHS_PER_ETH1_VOTING_PERIOD": "64", + "MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD": "8192", + "WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA": "4096", + "HISTORICAL_ROOTS_LIMIT": "16777216", + "ATTESTATION_PROPAGATION_SLOT_RANGE": "32", + "SYNC_COMMITTEE_SIZE": "512", + "ATTESTATION_SUBNET_PREFIX_BITS": "6", + "PROPORTIONAL_SLASHING_MULTIPLIER": "1", + "MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD": "16", + "MESSAGE_DOMAIN_VALID_SNAPPY": "0x01000000", + "MAX_VOLUNTARY_EXITS": "16", + "PENDING_CONSOLIDATIONS_LIMIT": "262144", + "HYSTERESIS_DOWNWARD_MULTIPLIER": "1", + "DOMAIN_APPLICATION_BUILDER": "0x00000001", + "MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP": "8", + "EPOCHS_PER_SYNC_COMMITTEE_PERIOD": "256", + "BYTES_PER_LOGS_BLOOM": "256", + "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": "16384", + "MAX_ATTESTATIONS": "128", + "MIN_EPOCHS_FOR_BLOCK_REQUESTS": "33024", + "DENEB_FORK_VERSION": "0x04000000", + "ELECTRA_FORK_VERSION": "0x05000000", + "MAX_REQUEST_BLOCKS": "1024", + "GENESIS_FORK_VERSION": "0x00000000", + "KZG_COMMITMENT_INCLUSION_PROOF_DEPTH": "17", + "DEPOSIT_NETWORK_ID": "1", + "MAX_REQUEST_BLOCKS_DENEB": "128", + "BLOB_SIDECAR_SUBNET_COUNT": "6", + "SYNC_COMMITTEE_SUBNET_COUNT": "4", + "CAPELLA_FORK_EPOCH": "194048", + "EJECTION_BALANCE": "16000000000", + "ATTESTATION_SUBNET_EXTRA_BITS": "0", + "MAX_COMMITTEES_PER_SLOT": "64", + "SHARD_COMMITTEE_PERIOD": "256", + "INACTIVITY_PENALTY_QUOTIENT_ALTAIR": "50331648", + "DOMAIN_AGGREGATE_AND_PROOF": "0x06000000", + "CHURN_LIMIT_QUOTIENT": "65536", + "BLS_WITHDRAWAL_PREFIX": "0x00", + "MIN_ACTIVATION_BALANCE": "32000000000" + } +} \ No newline at end of file diff --git a/tests/data/electra/mux_keys.example.json b/tests/data/electra/mux_keys.example.json new file mode 100644 index 00000000..6f309acd --- /dev/null +++ b/tests/data/electra/mux_keys.example.json @@ -0,0 +1,5 @@ +[ + "0x8160998addda06f2956e5d1945461f33dbc140486e972b96f341ebf2bdb553a0e3feb127451f5332dd9e33469d37ca67", + "0x87b5dc7f78b68a7b5e7f2e8b9c2115f968332cbf6fc2caaaaa2c9dc219a58206b72c924805f2278c58b55790a2c3bf17", + "0x89e2f50fe5cd07ed2ff0a01340b2f717aa65cced6d89a79fdecc1e924be5f4bbe75c11598bb9a53d307bb39b8223bc52" +] \ No newline at end of file diff --git a/tests/data/electra/registration_holesky.json b/tests/data/electra/registration_holesky.json new file mode 100644 index 00000000..ce5df391 --- /dev/null +++ b/tests/data/electra/registration_holesky.json @@ -0,0 +1,155 @@ +[ + { + "message": { + "fee_recipient": "0x4770b19c113cbc07e220d51e6a9fbc4ed30fa51a", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x874564874fc4cb9ce548ce09b2e1614be8ed4be7b7882cef413a09e2b48b9c6e11c67d0e95b5945ace53424c4c2dc70e" + }, + "signature": "0x84f4af33ccc4c073bb73eede2a65bfa585cff70941ac202329ef06d1a338d3a2a41f4736b3972f7048bc8d187a2416d412e16754713086dbb21b69f5cf4d891fba71f9c64d75135ade5c9bde321ac1fdd4814b7ff8c823a0686d34e50dc35037" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x964fbfc9d5de5723b5e7386c37638f369e23d9df7d1b57ff427935257738518508199652339abd7c9e4cc05f2aa65ca3" + }, + "signature": "0xa17082303cdef05e950566aeb642e770f8ebc34b801c60c5805e7ea05c0fe07c286ba4c3a5a311371ec767e70d92912e0aa986c12186ccd7bd9fe402151ae80eec968bbfd99fe7d7b2c7e37d1d54eae38493fceb5d947b26e29cefec49537b33" + }, + { + "message": { + "fee_recipient": "0x4b7c65194f8144c930079e6171e4a2c4dc46206e", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x93a7da94a32c25f8d26d07f4444b59c2534657be319d891515d215bd05ac9acbf8315496d755db38a3ebeec39c761f79" + }, + "signature": "0xb78db01795fa7361bdb726fe35946181b8fb764945c48f1871c9491a8a5cf6eabd118a5ac2a856abb9e74c4dd68ba6c6023e1b645a0cae2a853ab56ae9a3a3c0952beb559c7bc3fdf828c5076287de464f0e9f27148baa495aa29a8a9fd8af2b" + }, + { + "message": { + "fee_recipient": "0x4b7c65194f8144c930079e6171e4a2c4dc46206e", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xa75c8ecc47b74f06ed176506de9bc7b0be16286b88760c53dad3f384858a7411dd9f17659cf0e0b242e9b01bc2c1ec3e" + }, + "signature": "0xadfb6a551178339d5c0aac89456255dd7ea5d498f99a57843ae126977a4e358b6c5e6c7ac19a56a6d167ec225c8d9a5f18f7177757c81990f0a61f6f0ab0b5e7ad7ed044685ec6dcb99acec66128cddcf217404de34e8503c6af5816e4a25395" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xb0c82175cf48f0e66dd18ee214447246d8f17050a85a7aaa1d54437110be2d8ce653f27279e759103546134ece5024e1" + }, + "signature": "0x96156991ac94ee936edda67ee4b713b0e015e497e90530a31b28f66f350e8ab9894f170a98d4820dc99e8b6b5a7c91d2169ea8f58888aae60598be2527ec7a40fd3addb49fd0ea435bf71310b9de6097dc5d9777c0eb076f5556279d3e4a40ec" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xae728adbf92d2543f52d185db6f42e379ae495db5b6c3ea69fd629d35169834d622534bf73ab6f0c081f1b80e6568cd2" + }, + "signature": "0xa3878bdad3f756bd6e652a09a81c2b70bbb9ef38f312d8323212afbbfaf220233ae6000eb8972e88c0f48aae460d8f81046ce6be353983ed2983bfc91966bbe496bda14146567898da144e9bc4e0526d15118cb61944aeec29f3b54d23ef5d66" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xad95c2ae134f81ef344d101c741aba4f74709d49e8812576606898b9592dfd28b8b56875f9227eb9653532a9fbbf2af9" + }, + "signature": "0xa476c294960bb59e617220ac6cf7288b84de450adee24b9964ef58ec6191dacb0031584aad7b51e4d79cf74d34e507b40de9c4e5931025fa612db147580f9862edb185eacaa21bc0e55945c9ad251f81a43b76c4a3c979e3bc376717ee177866" + }, + { + "message": { + "fee_recipient": "0x4b7c65194f8144c930079e6171e4a2c4dc46206e", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x93455720ed2c9d5978fa1ef70499708fe05ce8105a1e1e3fe38b96b9b44cbda407d4b379e5199b5b033c1e448f3a0aee" + }, + "signature": "0xaef59798447a4269e9c3b5266ad3049b1726f227689f93fc064117cfac63fb8391e97c5eb3ec8447ed1d3459049caba91760685088ad4b9c92a29a963660ba4fcbbb4b9e3bf23a0f46eced4c1642a49cef321bb24717d53e16c2cd98c1845c58" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xa4401ba2aad5f89230a7031185a96bf442f3d5a8656bf71b26726538d08a6a10e06b401135c06c848160e4fc19af5e85" + }, + "signature": "0xab98c03be1d88b617b084cf3f2eb14bc49061ab65b3d07d5342bf4ac75b759f29df632db1425cdf84e3d631878e19d0710a9a076c0d1d4b41d558bd915e3cd6744707e291af231bdc1c9ec3f76305e19a496d8162d2809ad65ba2af0a3aa7b44" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x830a2e821aa7e3eef052ea9234cdf8c3318e53fa2362d53de89518ceb38ad406dbc5df758cdc7fc0f5e9cb43856a0c2f" + }, + "signature": "0xa797b2265b81befef63efa3277d01933976abe9ac504704c63e73a910d7459c5b23847ac57020444c04397271956dfd014b3908b64cadc8ec8e1aeff0d0d4e6b4c8b95e18241cadbdc6d5346d4bc9b32ab01fd57fb08b16f7255a23ea9d3a993" + }, + { + "message": { + "fee_recipient": "0x4770b19c113cbc07e220d51e6a9fbc4ed30fa51a", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x874ac8ddd0bc03aab76387033796ecc35a9eee08e0dd5edbef86fbde9908dc2afdb2d52da6e4a9c2a849b81c717d7370" + }, + "signature": "0x8d278d2d5e549976f90def0e766e977fb6e7018a6332666d9f6b98c66c5e1b50d5a18e26abafe6702731f30251e3fc851799724066b8cc24db998d30a4e090d3a045a8a2af4bff441acf3cadf36d86c731ecccdad6eaea2c7a85299e8aa56078" + }, + { + "message": { + "fee_recipient": "0x4770b19c113cbc07e220d51e6a9fbc4ed30fa51a", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xa525b2c31e0d02f13eecac5886cfd07317dc40db322b686db11df3650ace655edff908a678e15bd61adbeb52f7090396" + }, + "signature": "0xb33e38c0fd44a2c80b3e1fbd5bec00090677041373b22236a1596d8ce7b0c5f7363c448d749122c3807cd0d44a919ba108f2172dc30900bfebdf1af99e01bc47f4bdf33d5c6f14eafe89f7699ee8486aaa6fe752096fe1d29533557c6babed5a" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xa0c0e2d0caf4e671e1924bad74296595f992210cfb534fff332a99f2911279b2d40a9f9723c9a07a4fb23d7d2b64abb2" + }, + "signature": "0x8cb0f3129b171a241afde0c599a6a31930ce9aaa319f862397b3a1b51d8eca6e32aa80a928d246470c09eacdc8b9e905122de2418bf7045a5285567f0bf8e48d53ac7aaabd5c8d8588757743c78e6f57be9d7950b25d105f2abb52a5f6a5553a" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xb5661b161e50bef696f2f0275ef0f67008480e890ae4505b7401e311ee0e0acd0e13aee072aff65e6bd5db1473231d40" + }, + "signature": "0x8a40b863a2b4fa384e6c7e54d252634e5ef0afeefd23c4435d1ec1302a88b05a12e30562a905cacf1400f5799425eb00171606f74c2deace95d218b9fc7ff87a32f935acbc79210cea298d2f500e4c0eb62ef187659ea24738cbcbe3baca2dd8" + }, + { + "message": { + "fee_recipient": "0x4770b19c113cbc07e220d51e6a9fbc4ed30fa51a", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x913e7a010ac919517c86bf1ec19a86b63c3fb8a0cea9ada5f7a27f0331e07de818cfe84126f36f4a8bf3b6f7e8d56d78" + }, + "signature": "0x96abb8c91d9561367d889020c1389a2e6e1aab2e2c4a58cf89074524d518efe6cc4064f52f3d261f42040303c73ab62b11f7f85a2f77ea8803262653720b5c6a074babfa9641d2e14a1fd9561cdf6eef77b9e2f04204ec22b9a4d22f7ce28c01" + }, + { + "message": { + "fee_recipient": "0x4770b19c113cbc07e220d51e6a9fbc4ed30fa51a", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0x96ceab797644db83f6bfcb0749db5208cbe9870f6b6d17dced68cb6b3f1335b097faeadc68180a9fc3e75f0c2bde4357" + }, + "signature": "0x802525c9b2a8aa395a6b90959e0651d8833a904794e282f516e8a757b2089e597420a810abd1712636a560161b2cefff046c4646430c2166310e078a24e5a3e6cea7fbfb2a7f9f738def59ecadee407540751c0a06815ee4a466b0f60fc02583" + }, + { + "message": { + "fee_recipient": "0x02a9d3637126923de9369557cd9673aae46666fd", + "gas_limit": "30000000", + "timestamp": "1716391930", + "pubkey": "0xaced93f48c587d7ca64e6013f6398d8adac2f424e981bd85fbed18ca67a4738465d1a56bf10cdc9e4b523c555fe12bdf" + }, + "signature": "0xab16095d871a47288e0570dedd48df8672eb5a15017eab409a6e0b2cc9e972d7767f60a5f830fa8f23087de29028e7c916dc8700ac488a29ce7fdf750eb5daca04b52104e8bcaa2c8c78adce0767c56cfef508bf78f820049292456ca61dae0b" + } +] \ No newline at end of file diff --git a/tests/data/electra/sepolia_spec_data.json b/tests/data/electra/sepolia_spec_data.json new file mode 100644 index 00000000..6e20afd0 --- /dev/null +++ b/tests/data/electra/sepolia_spec_data.json @@ -0,0 +1,140 @@ +{ + "data": { + "SLOTS_PER_EPOCH": "32", + "PRESET_BASE": "mainnet", + "TERMINAL_TOTAL_DIFFICULTY": "17000000000000000", + "INACTIVITY_SCORE_BIAS": "4", + "PENDING_BALANCE_DEPOSITS_LIMIT": "134217728", + "MAX_ATTESTER_SLASHINGS": "2", + "MAX_WITHDRAWALS_PER_PAYLOAD": "16", + "INACTIVITY_PENALTY_QUOTIENT_BELLATRIX": "16777216", + "PENDING_PARTIAL_WITHDRAWALS_LIMIT": "134217728", + "INACTIVITY_PENALTY_QUOTIENT": "67108864", + "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": "8", + "SECONDS_PER_ETH1_BLOCK": "14", + "MIN_SEED_LOOKAHEAD": "1", + "VALIDATOR_REGISTRY_LIMIT": "1099511627776", + "SLOTS_PER_HISTORICAL_ROOT": "8192", + "RESP_TIMEOUT": "10", + "DOMAIN_VOLUNTARY_EXIT": "0x04000000", + "MAX_VALIDATORS_PER_COMMITTEE": "2048", + "MIN_GENESIS_TIME": "1655647200", + "ALTAIR_FORK_EPOCH": "50", + "HYSTERESIS_QUOTIENT": "4", + "ALTAIR_FORK_VERSION": "0x90000070", + "MAX_BYTES_PER_TRANSACTION": "1073741824", + "MAX_CHUNK_SIZE": "10485760", + "TTFB_TIMEOUT": "5", + "WHISTLEBLOWER_REWARD_QUOTIENT": "512", + "PROPOSER_REWARD_QUOTIENT": "8", + "MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP": "16384", + "EPOCHS_PER_HISTORICAL_VECTOR": "65536", + "MIN_PER_EPOCH_CHURN_LIMIT": "4", + "MAX_ATTESTER_SLASHINGS_ELECTRA": "1", + "TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE": "16", + "MAX_DEPOSITS": "16", + "BELLATRIX_FORK_EPOCH": "100", + "MAX_REQUEST_BLOB_SIDECARS": "768", + "TARGET_AGGREGATORS_PER_COMMITTEE": "16", + "DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF": "0x08000000", + "MESSAGE_DOMAIN_INVALID_SNAPPY": "0x00000000", + "EPOCHS_PER_SLASHINGS_VECTOR": "8192", + "MIN_SLASHING_PENALTY_QUOTIENT": "128", + "MAX_BLS_TO_EXECUTION_CHANGES": "16", + "GOSSIP_MAX_SIZE": "10485760", + "DOMAIN_BEACON_ATTESTER": "0x01000000", + "EPOCHS_PER_SUBNET_SUBSCRIPTION": "256", + "MAX_ATTESTATIONS_ELECTRA": "8", + "ATTESTATION_SUBNET_COUNT": "64", + "GENESIS_DELAY": "86400", + "MAX_SEED_LOOKAHEAD": "4", + "ETH1_FOLLOW_DISTANCE": "2048", + "SECONDS_PER_SLOT": "12", + "MIN_SYNC_COMMITTEE_PARTICIPANTS": "1", + "BELLATRIX_FORK_VERSION": "0x90000071", + "PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX": "3", + "EFFECTIVE_BALANCE_INCREMENT": "1000000000", + "FIELD_ELEMENTS_PER_BLOB": "4096", + "MIN_EPOCHS_TO_INACTIVITY_PENALTY": "4", + "BASE_REWARD_FACTOR": "64", + "MAX_EXTRA_DATA_BYTES": "32", + "CONFIG_NAME": "sepolia", + "MAX_PROPOSER_SLASHINGS": "16", + "MAX_CONSOLIDATIONS": "1", + "INACTIVITY_SCORE_RECOVERY_RATE": "16", + "MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS": "4096", + "MAX_TRANSACTIONS_PER_PAYLOAD": "1048576", + "DEPOSIT_CONTRACT_ADDRESS": "0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D", + "MIN_ATTESTATION_INCLUSION_DELAY": "1", + "SHUFFLE_ROUND_COUNT": "90", + "TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH": "18446744073709551615", + "MAX_EFFECTIVE_BALANCE": "32000000000", + "DOMAIN_BEACON_PROPOSER": "0x00000000", + "DENEB_FORK_EPOCH": "132608", + "DOMAIN_SYNC_COMMITTEE": "0x07000000", + "PROPOSER_SCORE_BOOST": "40", + "DOMAIN_SELECTION_PROOF": "0x05000000", + "MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX": "32", + "MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT": "8", + "HYSTERESIS_UPWARD_MULTIPLIER": "5", + "SUBNETS_PER_NODE": "2", + "MIN_DEPOSIT_AMOUNT": "1000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA": "4096", + "PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR": "2", + "MAX_BLOBS_PER_BLOCK": "6", + "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": "256", + "MAXIMUM_GOSSIP_CLOCK_DISPARITY": "500", + "TARGET_COMMITTEE_SIZE": "128", + "TERMINAL_BLOCK_HASH": "0x0000000000000000000000000000000000000000000000000000000000000000", + "DOMAIN_DEPOSIT": "0x03000000", + "DOMAIN_CONTRIBUTION_AND_PROOF": "0x09000000", + "UPDATE_TIMEOUT": "8192", + "ELECTRA_FORK_EPOCH": "18446744073709551615", + "SYNC_COMMITTEE_BRANCH_LENGTH": "5", + "DEPOSIT_CHAIN_ID": "11155111", + "MAX_BLOB_COMMITMENTS_PER_BLOCK": "4096", + "DOMAIN_RANDAO": "0x02000000", + "CAPELLA_FORK_VERSION": "0x90000072", + "MAX_EFFECTIVE_BALANCE_ELECTRA": "2048000000000", + "MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR": "64", + "EPOCHS_PER_ETH1_VOTING_PERIOD": "64", + "MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD": "8192", + "WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA": "4096", + "HISTORICAL_ROOTS_LIMIT": "16777216", + "ATTESTATION_PROPAGATION_SLOT_RANGE": "32", + "SYNC_COMMITTEE_SIZE": "512", + "ATTESTATION_SUBNET_PREFIX_BITS": "6", + "PROPORTIONAL_SLASHING_MULTIPLIER": "1", + "MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD": "16", + "MESSAGE_DOMAIN_VALID_SNAPPY": "0x01000000", + "MAX_VOLUNTARY_EXITS": "16", + "PENDING_CONSOLIDATIONS_LIMIT": "262144", + "HYSTERESIS_DOWNWARD_MULTIPLIER": "1", + "DOMAIN_APPLICATION_BUILDER": "0x00000001", + "MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP": "8", + "EPOCHS_PER_SYNC_COMMITTEE_PERIOD": "256", + "BYTES_PER_LOGS_BLOOM": "256", + "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": "1300", + "MAX_ATTESTATIONS": "128", + "MIN_EPOCHS_FOR_BLOCK_REQUESTS": "33024", + "DENEB_FORK_VERSION": "0x90000073", + "ELECTRA_FORK_VERSION": "0x90000074", + "MAX_REQUEST_BLOCKS": "1024", + "GENESIS_FORK_VERSION": "0x90000069", + "KZG_COMMITMENT_INCLUSION_PROOF_DEPTH": "17", + "DEPOSIT_NETWORK_ID": "11155111", + "MAX_REQUEST_BLOCKS_DENEB": "128", + "BLOB_SIDECAR_SUBNET_COUNT": "6", + "SYNC_COMMITTEE_SUBNET_COUNT": "4", + "CAPELLA_FORK_EPOCH": "56832", + "EJECTION_BALANCE": "16000000000", + "ATTESTATION_SUBNET_EXTRA_BITS": "0", + "MAX_COMMITTEES_PER_SLOT": "64", + "SHARD_COMMITTEE_PERIOD": "256", + "INACTIVITY_PENALTY_QUOTIENT_ALTAIR": "50331648", + "DOMAIN_AGGREGATE_AND_PROOF": "0x06000000", + "CHURN_LIMIT_QUOTIENT": "65536", + "BLS_WITHDRAWAL_PREFIX": "0x00", + "MIN_ACTIVATION_BALANCE": "32000000000" + } +} \ No newline at end of file diff --git a/tests/data/electra/signed_blinded_block_holesky.json b/tests/data/electra/signed_blinded_block_holesky.json new file mode 100644 index 00000000..a4fe0171 --- /dev/null +++ b/tests/data/electra/signed_blinded_block_holesky.json @@ -0,0 +1,72 @@ +{ + "message": { + "slot": "252288", + "proposer_index": "4295", + "parent_root": "0x9a8eef2096477e645150fee1a2ce13190382179a0ea843f31173715a1a14e074", + "state_root": "0x4c033e0b4a34c0eb8e0caba126fae3ed303a83254fe39f8daaa673125f4042cc", + "body": { + "randao_reveal": "0xa7a74e03d8ef909abc75b9452d167e15869180fb4b19db79a1136b510495f02d6ae480ee4ad6a2a9e41af866a9a54c681601a3a1dee30f676e93e6c6b3eb3e880c2cb8d32bd730ca9e7def92877c70da09bfc52a531f1be15619c8a3bb38bdf6", + "eth1_data": { + "deposit_root": "0x0cacd599c9cdcee8398b40ef045baf2c137bed4d2b02a465a0414b04015f861d", + "deposit_count": "216773", + "block_hash": "0xd75a680056c50b4e339eda2f91ccd33badc5d59feab830526e342c5ec68d8dce" + }, + "graffiti": "0x6c69676874686f7573652d6e65746865726d696e642d33000000000000000000", + "proposer_slashings": [], + "attester_slashings": [], + "attestations": [ + { + "aggregation_bits": "0xf8fbff9093195acfebcff69cdfef71fbd9eaf19777f7dfb1f9233faf08be7e463a675cefef2d9e03", + "data": { + "slot": "252287", + "index": "0", + "beacon_block_root": "0x9a8eef2096477e645150fee1a2ce13190382179a0ea843f31173715a1a14e074", + "source": { + "epoch": "7682", + "root": "0x83900465836d88fbd48a829ca207db86e32aa7797966df1b0c886128c72a1a0b" + }, + "target": { + "epoch": "7883", + "root": "0x6e20c4503b853781327d750ee818651e5493b04f5ea0f2699725eecb1e0c3ddf" + } + }, + "signature": "0xb8fb8248ce16152eb41f88803445ef64c33da86de7bfd398b12e745a449013f9454c38b42a658291e344e3eb11d1c3ec03d692b9ed299aff0f599ea9145596b5195d11ff49f83a573519616c8b76c9459a1ed5f869e1c5c6bad176adbd3b689c", + "committee_bits": "0x0300000000000000" + } + ], + "deposits": [], + "voluntary_exits": [], + "sync_aggregate": { + "sync_committee_bits": "0xde98bcde844ff76e87b94cfff1cbcc3dfbf93fdf3ee9b994764fafe484f762eb1562e7fa28e96f5d7a887bff689ffb932d5eff467e668d137bc565d37e3fa7fd", + "sync_committee_signature": "0x93a611fb577d17674242e42de06958513013b0cb07d1f284e993ed7d63ac43bbc234e54a886ca9cb979e76eabeeb6ee603556234b7d661bdb7a7ac98813028faf8060e5e9271d4f25de199ce5e2ecc2a6762a49c41bf366b1c4c54bc185c62f9" + }, + "execution_payload_header": { + "parent_hash": "0x98b62322edaa4d91ecc0847fe2f7debc89dec5e808d7e369aa9b535543227f60", + "fee_recipient": "0xf97e180c050e5ab072211ad2c213eb5aee4df134", + "state_root": "0x3b6b594d5cbe7ff4c8bdca04f080c57a18fffdaf1c8e700e69b86f7425ed8d73", + "receipts_root": "0x04deb4be6955e1a300123be48007597f67e4229f8ce70f4f10388de6fd3fa267", + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "prev_randao": "0x83612b3de54001f74bf36234e373c1fca95dab5e4645bc3faf7108345cf82e34", + "block_number": "220275", + "gas_limit": "30000000", + "gas_used": "84000", + "timestamp": "1732296378", + "extra_data": "0x4e65746865726d696e64", + "base_fee_per_gas": "7", + "block_hash": "0xb65b77e52407ff25f7fcd3f455c991ae67be1bc10cb7ec992a659698cf88870f", + "transactions_root": "0xb1fcd304d8ba402be6e76346395ea7641fbb4c83663b697a0e88ab115d859d3f", + "withdrawals_root": "0x792930bbd5baac43bcc798ee49aa8185ef76bb3b44ba62b91d86ae569e4bb535", + "blob_gas_used": "0", + "excess_blob_gas": "0" + }, + "bls_to_execution_changes": [], + "blob_kzg_commitments": [], + "execution_requests": { + "deposits": [], + "withdrawals": [], + "consolidations": [] + } + } + }, + "signature": "0x94cd72a70a0b424f68145115a9a52f6c8557fb40ec8b67c26cbb9b324b72756624a59e8bbe11b78acbbb8e9c606035d10c0dab9a3f4177d7e6954f8ea1863d0b0b00007fb420b4b4cf52e065bda0ad32af0d3a71bd6938180bab6dd1af754d2f" + } \ No newline at end of file diff --git a/tests/data/electra/submit_block_response_holesky.json b/tests/data/electra/submit_block_response_holesky.json new file mode 100644 index 00000000..e2f2a171 --- /dev/null +++ b/tests/data/electra/submit_block_response_holesky.json @@ -0,0 +1,252 @@ +{ + "version": "deneb", + "data": { + "execution_payload": { + "parent_hash": "0x7d1b19deda3378ae27947d8ad904886cde4600fe0f4d608c6ecd742d1ba8181b", + "fee_recipient": "0x32fdfd2ea08d916b8f4e73d057e99bc3358b2f4d", + "state_root": "0x60b508e5a6f505bc8e024a648fcf8c98278184fb674fb7c5544d6e3b196f9606", + "receipts_root": "0x358fcd6d92db09e2273fb74eb3d62223aa4f0f77a9b92aec15295ddfdc134403", + "logs_bloom": "0x140385010625042c0388589a111c20c068510a0010101250088d01160dd4d49020e0251504a140650484610000805800d0192104872406080101104105254900090020488226404b048d0a0b004409400119008354548454648004801820881500b51640020030d00800010402814891282000881408212c2000601801248440403520c100011413360180818049b0810520a0152821249bc0bd62014c66c021a2081181808810e000aa50a16092098102431303c184000492800010204860145102602a0380210105080019c160580a00122018100242002009914200006054081010220838261009142100e1348500293980192800b44ae3000444580c0004", + "prev_randao": "0x0409b00919b53c01aec587d88013e8ba756df21f7aef1eb08af1524edd6f7d31", + "block_number": "1598078", + "gas_limit": "30000000", + "gas_used": "17966933", + "timestamp": "1716482436", + "extra_data": "0x546974616e2028746974616e6275696c6465722e78797a29", + "base_fee_per_gas": "1150023781", + "block_hash": "0x646bcc08ef31083e846929917c1615e9f37775a7cbffdc243cd798f746b98345", + "transactions": [ + "0x02f9023e824268820aa184773594008503d1795278831f898d940b6f5b3c894872aa168fdb9bbf3942be9d0ce3d0886f05b59d3b200000b901c4598d90c50000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001400f207ac487070cbb039b3e321c8136b08622577846aacff5140f9d84573a6e43030dbc77983351a38b6da911f7f45a6f9366f12e18d62ecac4aa6107136b1607000000000000000000000000863045f58878185565f79b3174755762cbcf395b0000000000000000000000000000000000000000000000000000000000000030a744bf266c5218fdffca8289b05eb7f4476649507625e8bac61b42bfafd2c35bb27aa73efd638236401989c4ca70b911000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b4e559d60f11c9f4a22b0489e0ce4ddfcae84e98672fb5a2eac8e028059830887e70fc8d7c3f59a8c0a4a4eaecc1cb3d17bc74ad826043fa9337e2c719dc4e25f81c829a7ee69e54a673dbb205ed2f1f18f2a1add027cf45876ead82ea7a27e6c080a090e27af1440dfe7265dd77aa8d0dff5d522e728a304d085edd595dd09c0c956ea07790e7cf02e2ebc57eb9fd31576b0e7535d107f48bf770b0fe414182607bcda7", + "0xf8718303194b85174876e8008252089438729876b85ffb103ef19451c55382a460de0e1a880de0b6b3a7640000808284f4a043af1a5680cba46c262863f658b7d48b9ebc27d6a8d6be2ebd5de7a7cc3df871a0256bacb3c69d0dccc0c3b1410d55248cc33b92c16d9a63bceb3232d9accce9c7", + "0x03f905e48242680e84773594008501cee7ff38830487429479c9109b764609df928d16fc4a91e9081f7e87db8704b088731a8000b90544ef16e8450000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000004c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ad22e9c80f01dc9393e2fb6adfe16b5964b08e4b00000000000000000000000002e2328ed57f41e517bf7f12b4f11b65a7fcbffc302e31382e302d64657600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000009e640a6aadf4f664cf467b795c31332f44acbe6c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664f776a0000000000000000000000000000000000000000000000000000000000186678000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000004b088731a800000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000004b088731a800000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fda28854ae38837af15aa3aaca0b95501e11bd35b8d65580ff0e908e97d1a4180e9cd559241f4a34b6f73cb7bca0a8763ffcd5c790c8f1157a42cd34463684b21b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004133fed9110f8c0c834ba4cc72b7ba1d47e961b24f35f016cf9d4bff7e619e335c4b875645a95bd0ad100fc5eb63ce4962711a3200fa6081efdd2477e4442c6fb91b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c086056f3d45492ce1a0019101fb28118ceccaabca22a47e35b9c3f12eb2dcb25e5c543d5b75e6cd841f80a03724ac98face5eb5f3f91777c8bd00e80e24a99909dfe7092859ebe1fe059812a00bc3bbd866d21383869b0024191620a04e3e7d6721bfc36fd3e748ce83911c35", + "0xf8708301998c8504a817c8008304ce789440cec4d89a2606cd2cd67d8562f732b7b9e4426f8758d15e17628000808284f4a0899ba3816c00e419533c1b3ad2c5a0293a126653e67ec17f878bad5cf59263a39f1157f5636700c41f7facf261993c0634f1cad4f7917a37b2096dc9df1a10e6", + "0x02f9015082426882637f843b9aca0084e72232be8309912694b2dd9f749e41d31954674b5b6126b9ea0cbd6f3080b8845a045f78e8b80f4dc02cfc675b710f0c24e69ba27cc6c146de65df073cfb4c1dc01c7eb600000000000000000000000000000000000000000000000000000000001213bcb3a0a9ecc38e4c0351b64ce26cdd6daea813e3719498657fd87ccd8cccbd9a140000000000000000000000000000000000000000000000000000000000186278f85bf859948061c7b4a6878cb232d9b31d3737aebfdaa5e202f842a00000000000000000000000000000000000000000000000000000000000000035a0000000000000000000000000000000000000000000000000000000000000003880a07631026f5d0cb1ec27e527517a980b55df8ca320b80aa431923db3953341e14ba01a9f3b31708231bd9285e240b40e41bca05798acf993772b2f86d323a74f679e", + "0x02f903f5824268822f0e843b9aca0084d61f0bb0832dc6c19479c9109b764609df928d16fc4a91e9081f7e87db80b9038410d008bd0000000000000000000000000000000000000000000000000000000000030b8e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000320af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000059000016c21f36b7acc8e9c64e4fbdd42fb1bf2c5e3ee63c6818e000865b0bdb32c9bec75e6de0e8c888054f7c81cf32e82452ac4fb23ce8a9494900b9868367bb3d791c52eb3a0eec8274c2887b2121e701baa3b33c01362c1c00000000000000c001a088c8a7725e869418984a3779b1a6eaed60481117fff25ae59ace6de479b41c74a01a4caee5a119e75822ecc1d403ff076ce0071eb4905bb8396ad1bd5bf756d75a", + "0x02f903f582426882b1b4843b9aca0084d61f0bb0832dc6c09479c9109b764609df928d16fc4a91e9081f7e87db80b9038410d008bd0000000000000000000000000000000000000000000000000000000000030cb600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000320265439aaa57979f40776e6db7e6da6c09c6d18e7b49d52f3301f4f78af186a742666b98a496c68585030ed6a26eb60b7e6a8339cf61f8cd6a5a673482f269fa2019101fb28118ceccaabca22a47e35b9c3f12eb2dcb25e5c543d5b75e6cd841f302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd0000000000000000000000007c1d8a0b3e259b162499a5ab186f24889f9c68050000000000000000000000000000000000000000000000000000000000030cb6000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f7118000000000000000000000000000000000000000000000000000000000018627400000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000001a3a8a3acc3fd533efb197d757762d13823cb0143c89e7dae6bcbdac559d9fddb0000000000000000000000007c1d8a0b3e259b162499a5ab186f24889f9c6805a8a8b6d595d82c094728062b78d93c0a3b511a8f5087147c51a838dc6552e0455541a8a829177391e8845dd2f6cee8530bd1bd2dd5b68067767328cf9d172e07934785d34cfed4565aefdf012808676115ab65d840b1329618719aa6c1d6ab9b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000059000013f949e207ab9a0829aaf6c9cb57518f0cccff846b8efb2188ea9d35667aab4a996178a8011c1dfe177326204b1d1f3cb31b18e530796b2fe75cec8c60dc1143ecf7782101ddc935ebfb3d9bd403158b39b327e62ed11c00000000000000c001a0c9eae3175c1a948bd0d00daaec27a8caafd5f1456491041759ad18ea17296cfda0159a7d2f0b9037759c14def7d11cb3c2b830baa97b8852b8557215a105f7a73b", + "0x02f903f5824268820476843b9aca0084d61f0bb083048e4c9479c9109b764609df928d16fc4a91e9081f7e87db80b9038410d008bd0000000000000000000000000000000000000000000000000000000000030cb800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000320265439aaa57979f40776e6db7e6da6c09c6d18e7b49d52f3301f4f78af186a74e54b37fbbe7ea2cc16483e138418e0f8e5e2e4416942356b0f24a86d9aeb52b901c9b18d6b92a3c35d54dde50187ae908f4abeb77a2ea68d6e228ae89c82006c302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd0000000000000000000000002a3d486346e177829933e24f20b399d59b245f8c0000000000000000000000000000000000000000000000000000000000030cb8000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f7118000000000000000000000000000000000000000000000000000000000018627400000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000001c473ba9b30e3ac5910d43a21fa3aa1abe623cfdeeaacc9145a99ad3655e84811000000000000000000000000700e9e6bd891ee8f4eeb3f6e3b0c7943728400bf758a42ddffbe93dea35c2f303e76c58dfbd70bb53719b4fbc21374f6762316f24f921b456ca9acb7ce9c9d0e5c8e11e041afda5110fe83f595bf1c78dd0476361b64665b6b956f8a4a60ae8e933a9cbfb24a59de27f5a5acb2571907f16d5d7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000059000016d1761c63eef857c6819905cd48c0f8d7de70281dc283b5a5e8c0dc74d5b3ac9133473e19d5d8ca14e17a20416ec9780747fdce6aad72a30bb920713489487be92ddafc06b9e7d03f3d0ddb0bead97e35c0f21ed69f1b00000000000000c080a055343f2d926dad831501142dd9f7529ad41078ddbfb7cdf1e66fac18f74bc37fa00bdca3da873685d10169a7999a3a1cae710b0ff573aaab59bb0446f779c972cf", + "0x03f905e182426876843b9aca0084e72232be830487119479c9109b764609df928d16fc4a91e9081f7e87db85e8d4a51000b90544ef16e8450000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000004c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000499593d3c7d04a911059750abac350d8fd2a111c0000000000000000000000002a3d486346e177829933e24f20b399d59b245f8c302e31382e302d64657600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000009e640a6aadf4f664cf467b795c31332f44acbe6c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664f787d000000000000000000000000000000000000000000000000000000000018667c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041b08232dd905f3f982e1d127063c028e2ddc1a94bf53c04a93c387eb12edf9ba5312d09a4926318a4f14a2154ebcd381c509b9145708f2cf116c0aa39b77e43401c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041b939ba93f226c548e9cab2e5a3278f6580231be06eae75258bdce2e79783ab7f18fe39fd8a7ce681cae5e73209ebfeba64b3882ed5c9000e0deaf8cc6975bcda1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c086021076f44ce8e1a0012c9f5082ab0fa8ddc29ce971cd979cd6017df87245971ea53fb1b9b5a1665380a049ad05d930bcd71f5c9def68c93453ad668760797b30f65d3779225b8a9aeac6a0280c8c0a3beea9cb8f235ee2f29afdc6af0851a5d529d71eb36d907b8d68f3c1", + "0x02f903f68242688301ec58843b9aca0084e72232be832dc6c19479c9109b764609df928d16fc4a91e9081f7e87db80b9038410d008bd0000000000000000000000000000000000000000000000000000000000030cb90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000032003edd9bf57fad7ce65c46a52fe243b6fd4ede8dd0d8ad1658a0af9c0c7372bc1b58a80f4f0649e7d72d4b10ef17c5dabce33da01f03441270606478f6ff3a73b0171d3ef1ef96b8c1a06ad53eb87fbb1acf0e189e3951dbcb6111f5e0ee8d19c302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed1ba0ba5661d648c7b3988dac473f60403aff1e0000000000000000000000000000000000000000000000000000000000030cb9000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f7124000000000000000000000000000000000000000000000000000000000018627500000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000019eab2d5251254a573a9205d7acca3dbc2a38297e13efb0bfd5ebca979e013d77000000000000000000000000ed1ba0ba5661d648c7b3988dac473f60403aff1e4f921b456ca9acb7ce9c9d0e5c8e11e041afda5110fe83f595bf1c78dd0476364a28f183a8997ba762f2b85d2364a2b2c3d8b1a8bef08eb8539414e6d664137edfcebb9cc25977243bfc73c8978b52dd2585a84e551ece53a91dee9cb7c8a70e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000059000016c21f36b7acc8e9c64e4fbdd42fb1bf2c5e3ee63c6874ab1b8f84425e3a951a47956a0c226241a36d740f1aabd02b3a33c2584e05207d33741bb57bbddf3fdf41c419ba8fbfe45b98f50d6d51ad4789ad64ee3313ed1c00000000000000c001a0a40ed24844457444f90099562d8a40b7714bf864949458a49f5f87317d3a8468a0776d63ade460eb0adba14919d07796f13ff795bd0994bd8dfc18e365bd8d01da", + "0xf88e8304bca485028b171a088259d894b065f3489b083bbdc8ce5a5ed37bfb519afd2abd88016345785d8a00009d5472616e73616374696f6e206279205374616b656c79204661756365748284f3a08648aeb495680f1699c64b945f15a3390c4f2b1b3e4ad23c302fd438b626124ba0308784c865db72303c7da493615f6271a6a7a8009c12bcf67789d8d876a5288d", + "0x02f8d9824268048439d1068084aa7a976c8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8703aaa2d11e9c00b864ce0b63ce000000000000000000000000e4cb1fc28331e74b1e0263a0662c8b4484e4174d00000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000004e39cc080a03ca767ef3bc681ebb881bf311daba722353c1db1f557ae3067e7c46962fa8a26a06738bbf67a37b2f8ce1b999afc89102db3bf10c48c7a05a8738545b7fc0c3414", + "0x02f8da824268018439d1068084aa7a976c8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8829a2413f22841c00b864ce0b63ce00000000000000000000000003495ec16b71a08ed4cae2d6c87beae89bd525dc00000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000000004e39cc080a0dfe520d3b289baf90c1a6116eb31b8fd391e08c72f0a6feb3232bb8ebde20cd5a069527f09c9cb346a95c401451f346bb838fa3098ea8b196f949bc5c88080f595", + "0x02f8da824268278439d1068084add071178303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8806f0787e000a1c00b864ce0b63ce000000000000000000000000c21321da4783d54729f8efa8ffdf0a6b31c198f400000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000004e39cc001a01616d5aea7812944a0ca4ac56b35891aa8fd55d429d8d6dd045dff8f78920abaa059e1083ce26dd51085412c4ae8d0a283e774d0e66662516c9e573cac17f3de71", + "0xf8708207968502540be40082520894742f9ce88f5f3e7b81ac8fb61181fb3f7e5a81de88011b26ba4c994000808284f3a001ff4b5bbb5d829e10b4cb2a58a00e95a8ec61c6a67e9d5fb7fd645044ebbac5a02b93d9a7c4bd65eb8ed378808c42abb55afe5647412523a09415a9d4ddec7737", + "0xf86f8207978502540be400825208944439a5a9b088e0cb7b244012dcb17c9e86b9da1a87b807d3575d8000808284f4a010353d9170a0406ed915e898dd30fdf9fc4ee3dc4c6a526d094b844d93ba6cbba01ea3788977400c3f34cb4f3e662e8abcf63e02283c869f8c5259234b26ea7953", + "0xf8708207988502540be40082520894cff1047a7f40d0b1d1391963d8fcdde3e6c26960880141d7200233e000808284f3a0fdeb2e7d0b50b2a3905f1e69e219a4b8ad1257f1a97e7d7aad713a0b33f41e0ea068ca97d3f92023103ec1bb9c61cf66baf90177d1d44a32a7240d134748c50d4e", + "0xf8708207998502540be400825208948d1ff54436f7d50040a4e71a30414af0579d4339880147d82bcbdf8000808284f4a049d08f6369c46377abe15b2b5732e19bb5f4f4935440edca57fd3ac8a689f7f9a043dbfe86e785f4b1b2729a922ae03ac4a87284a5e1a4cc4bb0714f0795585fbe", + "0x02f948ca82426881cb84028d8b79844ebda964833bd7fb8080b9486e60a06040523480156200001157600080fd5b506040516200484e3803806200484e83398181016040528101906200003791906200023a565b620000576200004b6200010460201b60201c565b6200010c60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c090620002cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620002ef565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020282620001d5565b9050919050565b6200021481620001f5565b81146200022057600080fd5b50565b600081519050620002348162000209565b92915050565b600060208284031215620002535762000252620001d0565b5b6000620002638482850162000223565b91505092915050565b600082825260208201905092915050565b7f696e76616c696420617267756d656e74202d207a65726f206164647265737300600082015250565b6000620002b5601f836200026c565b9150620002c2826200027d565b602082019050919050565b60006020820190508181036000830152620002e881620002a6565b9050919050565b60805161453562000319600039600081816108a5015281816114c2015261221401526145356000f3fe60806040523480156200001157600080fd5b50600436106200010c5760003560e01c8063715018a611620000a55780639ce19365116200006f5780639ce1936514620002f9578063b8bb81261462000319578063f2fde38b1462000339578063fe5cd59a1462000359576200010c565b8063715018a614620002755780638da5cb5b14620002815780638e952bfe14620002a3578063937529ef14620002d9576200010c565b80633e3bc3d711620000e75780633e3bc3d714620001b3578063422c29a414620001e95780635027dbe2146200021f57806359770438146200023f576200010c565b80632fea7b8114620001115780633a50045114620001475780633d56ff66146200017d575b600080fd5b6200012f6004803603810190620001299190620028fd565b6200038f565b6040516200013e919062002940565b60405180910390f35b6200016560048036038101906200015f9190620029cb565b620004f4565b60405162000174919062002a3d565b60405180910390f35b6200019b600480360381019062000195919062002bb7565b6200052e565b604051620001aa919062002940565b60405180910390f35b620001d16004803603810190620001cb9190620028fd565b62000a68565b604051620001e0919062002a3d565b60405180910390f35b620002076004803603810190620002019190620028fd565b62000abe565b60405162000216919062002d00565b60405180910390f35b6200023d6004803603810190620002379190620028fd565b62000b8d565b005b6200025d6004803603810190620002579190620028fd565b62001196565b6040516200026c919062002940565b60405180910390f35b6200027f620011ff565b005b6200028b62001217565b6040516200029a919062002940565b60405180910390f35b620002c16004803603810190620002bb919062002d24565b62001240565b604051620002d0919062002940565b60405180910390f35b620002f76004803603810190620002f19190620028fd565b620016a6565b005b620003176004803603810190620003119190620028fd565b6200180d565b005b620003376004803603810190620003319190620028fd565b62001974565b005b620003576004803603810190620003519190620028fd565b62001ec1565b005b62000377600480360381019062000371919062002e9b565b62001f4b565b60405162000386919062002940565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200048c57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620004ef565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b919050565b6000600283836040516200050a92919062002f69565b908152602001604051809103902060009054906101000a900460ff16905092915050565b60006200053b3362000a68565b806200057b57506200054c62001217565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b620005bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b49062002fe5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200062f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006269062003057565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006989062003057565b60405180910390fd5b604051602001620006b290620030a3565b6040516020818303038152906040528051906020012082604051602001620006db91906200313d565b604051602081830303815290604052805190602001200362000734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072b90620031b1565b60405180910390fd5b60008260405160200162000749919062003230565b60405160208183030381529060405290506002816040516200076c91906200325a565b908152602001604051809103902060009054906101000a900460ff1615620007cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c290620032c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000893906200335b565b60405180910390fd5b6000620008cb827f000000000000000000000000000000000000000000000000000000000000000087620025f8565b90506001600283604051620008e191906200325a565b908152602001604051809103902060006101000a81548160ff02191690831515021790555080600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fa8261d398ddc63db24cc53cd0c63c9464cabad1bc478ede2107b32c1c4010b7a60405160405180910390a380925050509392505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801562000b8157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162000b36575b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf69062003057565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6790620033f3565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d969062003465565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060005b8181101562001136578373ffffffffffffffffffffffffffffffffffffffff16600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811062000f235762000f2262003487565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200112057600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018362000fb89190620034ef565b8154811062000fcc5762000fcb62003487565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106200104b576200104a62003487565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480620010e557620010e46200352a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905562001136565b80806200112d9062003559565b91505062000eaf565b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f35e6fc363a4bf723d53b26c1a751674aca9c3ead425f0591f84f5540ede86f1260405160405180910390a3505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b620012096200268b565b62001215600062002710565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006200124c6200268b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620012be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012b59062003057565b60405180910390fd5b604051602001620012cf90620030a3565b6040516020818303038152906040528051906020012082604051602001620012f891906200313d565b604051602081830303815290604052805190602001200362001351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200134890620031b1565b60405180910390fd5b600082604051602001620013669190620035cc565b60405160208183030381529060405290506002816040516200138991906200325a565b908152602001604051809103902060009054906101000a900460ff1615620013e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013df90620032c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620014b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014b0906200366c565b60405180910390fd5b6000620014e8827f000000000000000000000000000000000000000000000000000000000000000087620025f8565b90506001600283604051620014fe91906200325a565b908152602001604051809103902060006101000a81548160ff02191690831515021790555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8e0c709111388f5480579514d86663489ab1f206fe6da1a0c4d03ac8c318b3c660405160405180910390a3809250505092915050565b620016b06200268b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362001722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017199062003057565b60405180910390fd5b6200172d8162000a68565b6200176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200176690620036de565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fd1fd5274f793d20291c0abfe42e1ef63213a11b34996d485f7afb8fe0142485160405160405180910390a250565b620018176200268b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362001889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018809062003057565b60405180910390fd5b620018948162000a68565b15620018d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018ce9062003750565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f45eb8ac5344d2d3f306550fe6e969ca4190526313c512afed851d052bf2ab2fd60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620019e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620019dd9062003057565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362001ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001aae90620037e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462001b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001b7f906200385a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462001c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c5090620038cc565b60405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506065600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501062001d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001d3c9062003964565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8e0c709111388f5480579514d86663489ab1f206fe6da1a0c4d03ac8c318b3c660405160405180910390a35050565b62001ecb6200268b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362001f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f3490620039fc565b60405180910390fd5b62001f488162002710565b50565b600062001f576200268b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362001fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001fc09062003057565b60405180910390fd5b60405160200162001fda90620030a3565b60405160208183030381529060405280519060200120836040516020016200200391906200313d565b60405160208183030381529060405280519060200120036200205c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200205390620031b1565b60405180910390fd5b600083604051602001620020719190620035cc565b60405160208183030381529060405290506002816040516200209491906200325a565b908152602001604051809103902060009054906101000a900460ff1615620020f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620020ea90620032c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620021c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620021bb906200366c565b60405180910390fd5b60008351116200220b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022029062003a94565b60405180910390fd5b60006200223a827f000000000000000000000000000000000000000000000000000000000000000030620025f8565b905060005b84518110156200238d57866040516020016200225c919062002940565b6040516020818303038152906040528051906020012085828151811062002288576200228762003487565b5b602002602001015103620022d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022ca9062003b2c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16631d38124086838151811062002305576200230462003487565b5b60200260200101516001806040518463ffffffff1660e01b8152600401620023309392919062003bac565b6020604051808303816000875af115801562002350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002376919062003c1a565b508080620023849062003559565b9150506200223f565b508073ffffffffffffffffffffffffffffffffffffffff166353d413c530604051602001620023bd919062002940565b6040516020818303038152906040528051906020012060016040518363ffffffff1660e01b8152600401620023f492919062003c4c565b6020604051808303816000875af115801562002414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200243a919062003c1a565b5060016002836040516200244f91906200325a565b908152602001604051809103902060006101000a81548160ff02191690831515021790555080600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f8e0c709111388f5480579514d86663489ab1f206fe6da1a0c4d03ac8c318b3c660405160405180910390a380925050509392505050565b600080604051806020016200260d9062002876565b6020820181038252601f19601f820116604052509050600084846040516020016200263a92919062003c79565b6040516020818303038152906040529050600082826040516020016200266292919062003cf3565b60405160208183030381529060405290506200267f8782620027d4565b93505050509392505050565b620026956200286e565b73ffffffffffffffffffffffffffffffffffffffff16620026b562001217565b73ffffffffffffffffffffffffffffffffffffffff16146200270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620027059062003d6b565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083604051602001620027ea91906200325a565b60405160208183030381529060405280519060200120905060008360200184518381836000f59250823b6200281e57600080fd5b50508073ffffffffffffffffffffffffffffffffffffffff167ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e60405160405180910390a2809250505092915050565b600033905090565b6107728062003d8e83390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620028c58262002898565b9050919050565b620028d781620028b8565b8114620028e357600080fd5b50565b600081359050620028f781620028cc565b92915050565b6000602082840312156200291657620029156200288e565b5b60006200292684828501620028e6565b91505092915050565b6200293a81620028b8565b82525050565b60006020820190506200295760008301846200292f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200298557620029846200295d565b5b8235905067ffffffffffffffff811115620029a557620029a462002962565b5b602083019150836001820283011115620029c457620029c362002967565b5b9250929050565b60008060208385031215620029e557620029e46200288e565b5b600083013567ffffffffffffffff81111562002a065762002a0562002893565b5b62002a14858286016200296c565b92509250509250929050565b60008115159050919050565b62002a378162002a20565b82525050565b600060208201905062002a54600083018462002a2c565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62002aaa8262002a5f565b810181811067ffffffffffffffff8211171562002acc5762002acb62002a70565b5b80604052505050565b600062002ae162002884565b905062002aef828262002a9f565b919050565b600067ffffffffffffffff82111562002b125762002b1162002a70565b5b62002b1d8262002a5f565b9050602081019050919050565b82818337600083830152505050565b600062002b5062002b4a8462002af4565b62002ad5565b90508281526020810184848401111562002b6f5762002b6e62002a5a565b5b62002b7c84828562002b2a565b509392505050565b600082601f83011262002b9c5762002b9b6200295d565b5b813562002bae84826020860162002b39565b91505092915050565b60008060006060848603121562002bd35762002bd26200288e565b5b600062002be386828701620028e6565b935050602062002bf686828701620028e6565b925050604084013567ffffffffffffffff81111562002c1a5762002c1962002893565b5b62002c288682870162002b84565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62002c6981620028b8565b82525050565b600062002c7d838362002c5e565b60208301905092915050565b6000602082019050919050565b600062002ca38262002c32565b62002caf818562002c3d565b935062002cbc8362002c4e565b8060005b8381101562002cf357815162002cd7888262002c6f565b975062002ce48362002c89565b92505060018101905062002cc0565b5085935050505092915050565b6000602082019050818103600083015262002d1c818462002c96565b905092915050565b6000806040838503121562002d3e5762002d3d6200288e565b5b600062002d4e85828601620028e6565b925050602083013567ffffffffffffffff81111562002d725762002d7162002893565b5b62002d808582860162002b84565b9150509250929050565b600067ffffffffffffffff82111562002da85762002da762002a70565b5b602082029050602081019050919050565b6000819050919050565b62002dce8162002db9565b811462002dda57600080fd5b50565b60008135905062002dee8162002dc3565b92915050565b600062002e0b62002e058462002d8a565b62002ad5565b9050808382526020820190506020840283018581111562002e315762002e3062002967565b5b835b8181101562002e5e578062002e49888262002ddd565b84526020840193505060208101905062002e33565b5050509392505050565b600082601f83011262002e805762002e7f6200295d565b5b813562002e9284826020860162002df4565b91505092915050565b60008060006060848603121562002eb75762002eb66200288e565b5b600062002ec786828701620028e6565b935050602084013567ffffffffffffffff81111562002eeb5762002eea62002893565b5b62002ef98682870162002b84565b925050604084013567ffffffffffffffff81111562002f1d5762002f1c62002893565b5b62002f2b8682870162002e68565b9150509250925092565b600081905092915050565b600062002f4e838562002f35565b935062002f5d83858462002b2a565b82840190509392505050565b600062002f7882848662002f40565b91508190509392505050565b600082825260208201905092915050565b7f6f6e6c7920466163746f7279206f72206f776e65722063616e2063616c6c0000600082015250565b600062002fcd601e8362002f84565b915062002fda8262002f95565b602082019050919050565b60006020820190508181036000830152620030008162002fbe565b9050919050565b7f696e76616c696420617267756d656e74202d207a65726f206164647265737300600082015250565b60006200303f601f8362002f84565b91506200304c8262003007565b602082019050919050565b60006020820190508181036000830152620030728162003030565b9050919050565b50565b60006200308b60008362002f84565b9150620030988262003079565b600082019050919050565b60006020820190508181036000830152620030be816200307c565b9050919050565b600081519050919050565b60005b83811015620030f0578082015181840152602081019050620030d3565b60008484015250505050565b60006200310982620030c5565b62003115818562002f84565b935062003127818560208601620030d0565b620031328162002a5f565b840191505092915050565b60006020820190508181036000830152620031598184620030fc565b905092915050565b7f696e76616c696420617267756d656e74202d20656d70747920737472696e6700600082015250565b600062003199601f8362002f84565b9150620031a68262003161565b602082019050919050565b60006020820190508181036000830152620031cc816200318a565b9050919050565b7f546f6b656e000000000000000000000000000000000000000000000000000000815250565b60006200320682620030c5565b62003212818562002f35565b935062003224818560208601620030d0565b80840191505092915050565b60006200323d82620031d3565b6005820191506200324f8284620031f9565b915081905092915050565b6000620032688284620031f9565b915081905092915050565b7f73616c7420616c72656164792074616b656e0000000000000000000000000000600082015250565b6000620032ab60128362002f84565b9150620032b88262003273565b602082019050919050565b60006020820190508181036000830152620032de816200329c565b9050919050565b7f746f6b656e20616c7265616479206c696e6b656420746f20616e206964656e7460008201527f6974790000000000000000000000000000000000000000000000000000000000602082015250565b60006200334360238362002f84565b91506200335082620032e5565b604082019050919050565b60006020820190508181036000830152620033768162003334565b9050919050565b7f63616e6e6f742062652063616c6c6564206f6e2073656e64657220616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620033db60228362002f84565b9150620033e8826200337d565b604082019050919050565b600060208201905081810360008301526200340e81620033cc565b9050919050565b7f6f6e6c792061206c696e6b65642077616c6c65742063616e20756e6c696e6b00600082015250565b60006200344d601f8362002f84565b91506200345a8262003415565b602082019050919050565b6000602082019050818103600083015262003480816200343e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620034fc82620034b6565b91506200350983620034b6565b9250828203905081811115620035245762003523620034c0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006200356682620034b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200359b576200359a620034c0565b5b600182019050919050565b7f4f49440000000000000000000000000000000000000000000000000000000000815250565b6000620035d982620035a6565b600382019150620035eb8284620031f9565b915081905092915050565b7f77616c6c657420616c7265616479206c696e6b656420746f20616e206964656e60008201527f7469747900000000000000000000000000000000000000000000000000000000602082015250565b60006200365460248362002f84565b91506200366182620035f6565b604082019050919050565b60006020820190508181036000830152620036878162003645565b9050919050565b7f6e6f74206120666163746f727900000000000000000000000000000000000000600082015250565b6000620036c6600d8362002f84565b9150620036d3826200368e565b602082019050919050565b60006020820190508181036000830152620036f981620036b7565b9050919050565b7f616c7265616479206120666163746f7279000000000000000000000000000000600082015250565b60006200373860118362002f84565b9150620037458262003700565b602082019050919050565b600060208201905081810360008301526200376b8162003729565b9050919050565b7f77616c6c6574206e6f74206c696e6b656420746f20616e206964656e7469747960008201527f20636f6e74726163740000000000000000000000000000000000000000000000602082015250565b6000620037d060298362002f84565b9150620037dd8262003772565b604082019050919050565b600060208201905081810360008301526200380381620037c1565b9050919050565b7f6e65772077616c6c657420616c7265616479206c696e6b656400000000000000600082015250565b60006200384260198362002f84565b91506200384f826200380a565b602082019050919050565b60006020820190508181036000830152620038758162003833565b9050919050565b7f696e76616c696420617267756d656e74202d20746f6b656e2061646472657373600082015250565b6000620038b460208362002f84565b9150620038c1826200387c565b602082019050919050565b60006020820190508181036000830152620038e781620038a5565b9050919050565b7f6d617820616d6f756e74206f662077616c6c657473207065722049442065786360008201527f6565646564000000000000000000000000000000000000000000000000000000602082015250565b60006200394c60258362002f84565b91506200395982620038ee565b604082019050919050565b600060208201905081810360008301526200397f816200393d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620039e460268362002f84565b9150620039f18262003986565b604082019050919050565b6000602082019050818103600083015262003a1781620039d5565b9050919050565b7f696e76616c696420617267756d656e74202d20656d707479206c697374206f6660008201527f206b657973000000000000000000000000000000000000000000000000000000602082015250565b600062003a7c60258362002f84565b915062003a898262003a1e565b604082019050919050565b6000602082019050818103600083015262003aaf8162003a6d565b9050919050565b7f696e76616c696420617267756d656e74202d2077616c6c657420697320616c7360008201527f6f206c697374656420696e206d616e6167656d656e74206b6579730000000000602082015250565b600062003b14603b8362002f84565b915062003b218262003ab6565b604082019050919050565b6000602082019050818103600083015262003b478162003b05565b9050919050565b62003b598162002db9565b82525050565b6000819050919050565b6000819050919050565b600062003b9462003b8e62003b888462003b5f565b62003b69565b620034b6565b9050919050565b62003ba68162003b73565b82525050565b600060608201905062003bc3600083018662003b4e565b62003bd2602083018562003b9b565b62003be1604083018462003b9b565b949350505050565b62003bf48162002a20565b811462003c0057600080fd5b50565b60008151905062003c148162003be9565b92915050565b60006020828403121562003c335762003c326200288e565b5b600062003c438482850162003c03565b91505092915050565b600060408201905062003c63600083018562003b4e565b62003c72602083018462003b9b565b9392505050565b600060408201905062003c9060008301856200292f565b62003c9f60208301846200292f565b9392505050565b600081519050919050565b600081905092915050565b600062003cc98262003ca6565b62003cd5818562003cb1565b935062003ce7818560208601620030d0565b80840191505092915050565b600062003d01828562003cbc565b915062003d0f828462003cbc565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062003d5360208362002f84565b915062003d608262003d1b565b602082019050919050565b6000602082019050818103600083015262003d868162003d44565b905091905056fe608060405234801561001057600080fd5b506040516107723803806107728339818101604052810190610032919061034a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036100a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610098906103e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610110576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610107906103e7565b60405180910390fd5b817fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75560008273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a49190610407565b905060008173ffffffffffffffffffffffffffffffffffffffff16836040516024016101d09190610443565b6040516020818303038152906040527fc4d66de8000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161025a91906104cf565b600060405180830381855af49150503d8060008114610295576040519150601f19603f3d011682016040523d82523d6000602084013e61029a565b606091505b50509050806102de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d590610532565b60405180910390fd5b50505050610552565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610317826102ec565b9050919050565b6103278161030c565b811461033257600080fd5b50565b6000815190506103448161031e565b92915050565b60008060408385031215610361576103606102e7565b5b600061036f85828601610335565b925050602061038085828601610335565b9150509250929050565b600082825260208201905092915050565b7f696e76616c696420617267756d656e74202d207a65726f206164647265737300600082015250565b60006103d1601f8361038a565b91506103dc8261039b565b602082019050919050565b60006020820190508181036000830152610400816103c4565b9050919050565b60006020828403121561041d5761041c6102e7565b5b600061042b84828501610335565b91505092915050565b61043d8161030c565b82525050565b60006020820190506104586000830184610434565b92915050565b600081519050919050565b600081905092915050565b60005b83811015610492578082015181840152602081019050610477565b60008484015250505050565b60006104a98261045e565b6104b38185610469565b93506104c3818560208601610474565b80840191505092915050565b60006104db828461049e565b915081905092915050565b7f496e697469616c697a6174696f6e206661696c65642e00000000000000000000600082015250565b600061051c60168361038a565b9150610527826104e6565b602082019050919050565b6000602082019050818103600083015261054b8161050f565b9050919050565b610211806105616000396000f3fe6080604052600436106100225760003560e01c80632307f882146100c857610023565b5b600061002d6100f3565b73ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009b9190610184565b90503660008037600080366000846127105a03f43d806000803e81600081146100c357816000f35b816000fd5b3480156100d457600080fd5b506100dd6100f3565b6040516100ea91906101c0565b60405180910390f35b6000807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75490508091505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061015182610126565b9050919050565b61016181610146565b811461016c57600080fd5b50565b60008151905061017e81610158565b92915050565b60006020828403121561019a57610199610121565b5b60006101a88482850161016f565b91505092915050565b6101ba81610146565b82525050565b60006020820190506101d560008301846101b1565b9291505056fea26469706673582212203e90cb6093ddb469e519036f91accc5d2bd359d3341b50435b68a4350ec588c764736f6c63430008110033a264697066735822122086c9471366e5560a48973d90f947563016d8ae99337fd64ef5510d11fe570bb364736f6c634300081100330000000000000000000000004a3ddbcd36107fea5dd267b22aa925575196b8adc001a01bd2ae74a7f0df7f74614669770c157e9ea06dd3c6c1b918e660bbeb2d394d58a057831daded49a126cc4e64145802dec36c876edce6bbace6a6a3938526e53e10", + "0x02f90613824268168439d1068084b4c22848830242e494ecc966ab425f3f5bd58085ce4ebdbf81d829126f80b905a486fa4b730000000000000000000000005300000000000000000000000000000000000006000000000000000000000000cc3d455481967dc97346ef1771a112d7a14c8f12000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000184c500000000000000000000000000000000000000000000000000000000000004c0e7f2ca8d9d1e3de15ce35d9db1439b2837fd3622758187284adc56b9c65721a7745f69ad5f0bc018ed331b3adeb8764b894a957c5bc173c49c42cfc7f99c9ecdc5f7c6e3de3de952a06d6a54b3ddb2e7f243a3997d88c4ca8f0a94c27c16a6a88794f404ff2d73b4c77cf0bc6cafdb47df1d8171240f69a72db7b440250d224f92254b27335c1728daa6d9d47d24ce986a6e57461351eaa879e1ecdcce7a2eeb8e129c9ae5ad70d893c3b480abe9a3a2955a7fbc478bcd5bbe27486b7fc61e32d05ac055ee26c86d5e497c91eed0090916938c033d6ac13e84e468a10869f06d5a7d36c63025a5e80937c1640a3da14bf2146c9befeb264d0d0b65b2aa0b7ce06c404ecb81b3999cc5335ca49ab3d9824baa28fab38613587a611e62ec5b8d7c686623916a13caf136b7d770c520c166b318c587e91f8d401430e5c091994fa26578d166b7327a6657039193603bb8f01caa44cefb53874ed0e97dbc54a3c85f55e228d5e2f3149ebbdf663181651951bdcb5275a96de4b5e84629f5d0848c95d9484a7521461733c0da771c09f355fbf5a28fcf7890df19c914ca73fa2c119462ecbcbd03095617e710d747befa4e110f64340692dec34a2afc5b72c13487025c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc4c4025a412b37e68b87178f9442fedcc004095c2ead531af624a129f183aaf272229a984fbd4c3e47bc4715bbef462355364cbd20018fcd614653b38e310d015e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618db8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32293237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7358448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a98bce5165e61e9c5f42e6e5fdb896e4bae339b780a0b48e672240d01c6cccb40d00000000000000000000000000000000000000000000000000000000000000a48eaac8a300000000000000000000000078a7e8d13c173ce33f3d3a8076016d4b6af519c800000000000000000000000078a7e8d13c173ce33f3d3a8076016d4b6af519c8000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a08c859f21e06f08ed8009214ac2ac8c22dd76495a39dc832a0375a2fa98d5a8fda054da33c97cd70b709773a550e3556921c9eb3922d66d45f1bec5307a2abe4257", + "0x02f9021b824268068439d1068084b4c228488301886f94a098b76a3dd499d3f6d58d8accafc8efbfd0680788016da9bdff81d000b901a41bdb003700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6445a1f7d00000000000000000000000000000000000000000000000000000000000000c351100000000000000000000000081307d0cdb9572f32fa450208ec852ecd7db58e2000000000000000000000000000000000000000000000000000000000000426800000000000000000000000081307d0cdb9572f32fa450208ec852ecd7db58e20000000000000000000000000000000000000000000000000000000000028c6100000000000000000000000081307d0cdb9572f32fa450208ec852ecd7db58e200000000000000000000000081307d0cdb9572f32fa450208ec852ecd7db58e2000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000c080a03f0e80e46116507f0e915f15d93c453b377c7ee6f8c1f7dda55966cbb59f5aa7a03ac4119631006bd5b182f3cb25469309328db8cf717e2b52ec939c8901166d8b", + "0x02f8b5824268830121ee8459682f00850104ef97be82fa6494d6e9cd5ef382b0830653d1b2007d5ca6987faa2680b844a9059cbb000000000000000000000000a864e380408a0576f3849fa1464a689204eecafa0000000000000000000000000000000000000000000000008ac7230489e80000c080a0dc79da0cfc216c5675d3689286a28f7c82f30550104be80983d5273095679df1a05c7cb01752cd65a25b0f2c149db850ab123ebe11fefaac3ffef77dd311f7ef24", + "0x02f8b982426861843a699d0084c8489f5883025b1c940f59bfdedbb4ecc965be28484bfd968552fd5c67872386f26fc10000b8441b2ef1ca000000000000000000000000000000000000000000000000002338902f392f3800000000000000000000000000000000000000000000000000000000664f7850c001a05707f0ca24635a56d3242fa5ed4df80ef06d8cd04f2f06a8183c28f465733338a07b60a56379f2ffe6f5cd167a9bcf265f78cbd894abdc655588324729edf39c6f", + "0x02f8d982426880841b8d40ac84a36835e38303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000008a80ed6defcefe2effedf0b7e935c4f5c2292785000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c080a0e58cdbc7d862501cf1577fcdebccce52341d182eddf013cbf4abfd43549410faa067c64e64871dca6c4f1ad34e6d1a00848691f0a6db7b65b15e787b52010f9a3e", + "0x02f8d982426880841b8d40ac84a36835e38303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000006fae7c80f1ed0e95b51b93698c25ef3c02cec59f000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a0e6511c980adae95e81e1a73d761745db988acc07b0b914167356e4112168a4dba014bbf75b15f61f420fb24e0bc2348d4fa9d12014ab827c53a85edaf344e83308", + "0x02f8d982426880841b8d40ac84a36835e38303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce000000000000000000000000b9d16a02a1fce143f7cc64835e49fccee202fdb2000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c080a03333a399173db93a0578cfcc88b5ec538151bfe6dce5f7ef40bd73f07438c995a02f873c0d96a03479d9ea06136bb5288e58bf053231ed66f6dcca4b5079d384b4", + "0x02f8d9824268808419a348da84a820d5958303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000006e030ea4859461d931353fb35c9a160d645252c7000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a01e69df83816893777d891879ec33158358f9a676409c91503cef9ad7c66e9773a021f3ffebbdbfcd81fcf1a7b17993b7c4b68c17ac333828e8d0306b13bb68b500", + "0x02f8d9824268808419a348da84a820d5958303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000006dfda1e6d726167485e11636675ef0c72ee7f6d7000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c080a09118818e5fea23813a7748b0e5ccfabe9972a855fd613c27d8d3fa8401b762d2a0792e9d50e5e38d76b34f68c14a759caca11ff9bb4b1dd68b4390419cbf0dfcff", + "0x02f8d9824268808419a348da84a820d5958303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce000000000000000000000000aec18f9d31ecd887d707ae0530c9f15ee82ab8fe000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a0f3a10e38a8b5e87ba56a01dc7d42afdda9f5b151aacca8624a5d0b42dd32b362a05cb82364e352954ef27a17d16a0e5ca31197c1f17222d88b903045073d2fa06d", + "0x02f8d8824268808419a348da84a820d5958303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000000c0ae93bd74dad71b4550636c59b734b9fa8b720000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c080a01906b00f514ad82e29761321122b44756b96b9cee06cf6fe11198c4352a20cd79ff9d4f0505054c89a25a91e180c2989fc293d4f0516a4c9647b0f1d3adeb32c", + "0xf8d301845e0fe9bb8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf880163629c89e21c00b864ce0b63ce0000000000000000000000003643df49d26b84595a765464d7eb83c85efdffbf000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000004e39c8284f3a0ed1bd8c26ec77bc4680dc4a9aac3ff09387c53b14496e19d33feac19ba58bebaa06fa3d0d1a14d1556eb74a71cdd02bcb628626d13849534a59f231247c9131683", + "0xf8d280845e0fe9bb8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8719d9855b18dc00b864ce0b63ce000000000000000000000000dde4ea432086b6dba3b1c734af67c75a81ee38a90000000000000000000000000000000000000000000000000019bc612ec0c000000000000000000000000000000000000000000000000000000000000004e39c8284f4a01dd1a3db7fc8319ec0413b843c2d616bcc52cbe0aac40e50a8e61838826ff631a05a11441e3fc181fa212bd0fe3c0f5b851c279d1ffa22723218061477923229f6", + "0x02f8d98242688084198292f484ad1a8e9a8303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000003704cfcc2c573a26d891daed97d427316513d47e000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a036a4a9a6d9fc31da2b17857158c562c2d112d658ee8ac1a7dfc91819d8936e2aa011aa374c5aeda4c340ca211f4afc0584412494305ab1253615541f8abcbd7356", + "0x02f8d98242688084198292f484a90a30238303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce000000000000000000000000eb8b70a98091691aacde99ed8a10ac0858164264000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c080a067392f9047ac4c6a21bc457c7888ab0d4e9d2daeffdcadbcefa4370f8db69ca0a05ef29ded57b83d412a396954a222ac1d56173634677be2f3fce878df8058db40", + "0x02f8d98242688084198292f484ad1a8e9a8303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce0000000000000000000000006ce39448b2290c2c4fbfd2392ac283261aec5e19000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a0b5a04d4946ddccb3e824d5ab974299e06716d0fe0b22049ccb33d0f673f177b6a01803c040a3708d0a23c4e3b091840f794dd5f3a65e80294703268e23ace4b1a6", + "0x02f8d98242688084198292f484a90a30238303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf8723a4f5d9081000b864ce0b63ce000000000000000000000000d0935d273a614dd6addff3b7d44885ab4ba12d28000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000050910c001a0aee29e3885c96b04549131238b25dbb76172ded85981a3f0ec57ce3eb735ebcaa05d8d16f991cf623e5b00dc3b9496daf4d4ba97f1011f09718a6d71f88dd165eb", + "0x02f8b582426882248e843b9aca008502540be400830493e094b32439b31407b25cf5e835585a3ccf020506928880b8440c54143200000000000000000000000000000000000000000000000000000000000ce3d9000000000000000000018eca682b804bcf9e79e45da515b0e979d3d6e2323149c080a0e88c1e64ce74af2df5d271d846cc6db6c7ce576cef0c565bb1d87a9a0a36a016a05c0a3604b9451177ff7756bc1ea266939114b05aa7b9ddcdd95c734ccb300cff", + "0x02f89182426801843a699d0084c8489f58830123a994a960d72f83a8a163412520a778b437ac5211a50180a46a6278420000000000000000000000007c63947eeb6d272ccc4171390c9dd070a9b59efcc080a04ca264891fd5ec69c59c7e8a0efe848417840fa7a9fbed60c43a4b8eddf0c086a05dfccf7707ea7e36db2ccedc63e6a4affe99704928f95210adf65250c0ad02c2", + "0x02f891824268808439d1068084aa7a976c830123a994a960d72f83a8a163412520a778b437ac5211a50180a46a627842000000000000000000000000fa1606289934e55565fe13fd37de5fb02d526f09c001a093d1718e69020bc46b83ad07737fa6e21ce1f2766248067a3b61e9a90b6c1b8ba0315453de9af62885f44a036f385da0080d10a45dbc8dc3874eb4cf43beef70f0", + "0x02f891824268808439d1068084aa7a976c8301203d94a960d72f83a8a163412520a778b437ac5211a50180a46a627842000000000000000000000000396a09e1328dd4e2ef760fecd346b1df65de1188c001a03d9baef0b946293f9fcdc6a0c369f8bc6c805dc4d1a2f48923125fe4a34bc274a015e7e813b0d5361970a6e08a11669d1ff1790918205b66f7840fc65e7fbbe0eb", + "0xf8d3248459e476c88303426894ea593b730d745fb5fe01b6d20e6603915252c6bf880163629c89e21c00b864ce0b63ce000000000000000000000000bc7e5df244410f0736063ba4e3307e8f4a51d75d000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000004e39c8284f3a0c3cd57b1b7aa9b93a180d0f321ead0de70d4d0e4450ded89fe4f413b43ca0827a063e396af0a5a6a89a491270562867eeaf324ff0977a7a44a2cb4b9c305d1aca4", + "0xf8d2808459e476c88303426894ea593b730d745fb5fe01b6d20e6603915252c6bf87173c22008adc00b864ce0b63ce000000000000000000000000550ddd6eecbb212107b7419bbef5c08f08bbb28800000000000000000000000000000000000000000000000000171efdd432c000000000000000000000000000000000000000000000000000000000000004e39c8284f3a02f86c6e015c1c5a12dd1bd4af8825ed4afd780d233b95491d60cce7347620d44a0668ba414aa9b941761a9c2e99fbb2fd25243a087b669bbdb3f799528fbe08126", + "0xf8d582010f8459e476c88303426894ea593b730d745fb5fe01b6d20e6603915252c6bf880de0d3d7d3bc1c00b864ce0b63ce000000000000000000000000fcbd49a0289e9f0c5fb29270d293047662bbd0a20000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000004e39c8284f4a01871d6d1a14c9630f2acfb597aaacb33ab29b38df08d4e4c358c459b5857121ca014ebdfa6f30672073226c2ff3e137fb09a8b2ce38103c5da96bb77a3fe28edb7", + "0xf8d2808459e476c88303426894ea593b730d745fb5fe01b6d20e6603915252c6bf871e27d418909c00b864ce0b63ce000000000000000000000000d2646734155d9b4fda9f28bae7122b22e83ed9f6000000000000000000000000000000000000000000000000001e0aafec388000000000000000000000000000000000000000000000000000000000000004e39c8284f4a036cd89d4fd446dd6d216c7b7a5243a360bbc7c73346505804b8c890b77402070a06c7a7313be1e3ecf45c1ed91a1aecd981fe930d085eec1d3d6f212cd87a596f8", + "0xf8d28084596418438303426894ea593b730d745fb5fe01b6d20e6603915252c6bf872349238b9edc00b864ce0b63ce000000000000000000000000337d174c0b35b2b4651b74c906553ef5784442cb00000000000000000000000000000000000000000000000000232bff5f46c000000000000000000000000000000000000000000000000000000000000004e39c8284f3a0c567f83bbf9ba7a6b37397fa343420504cd531730f2dab8d8eca904a0b67ac54a0157056d380da42631ecb8b26f47507e553e6038bf72520afa0887a9809b95d8d", + "0x02f8d982426808845964184384596418438303426894ea593b730d745fb5fe01b6d20e6603915252c6bf870ae0e906037c00b864ce0b63ce000000000000000000000000becf0d4ec1c50a400a261b9e16cb487870202b9f000000000000000000000000000000000000000000000000000ac3c4d9ab6000000000000000000000000000000000000000000000000000000000000004e39cc001a0a0c311979625f0ec9136ae32116cf2d05188a8adfa90185a34af425c7f6d0503a04908803989de2246b41dc41b8bb2f05c4486ffac2a414dae704b0506f9c5f500", + "0xf8d2808458eb162e8303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf871d37b8ce581c01b864ce0b63ce00000000000000000000000052ee814b23a8fd288e504043305a21b1cd6b3d4a000000000000000000000000000000000000000000000000001d1a94a2000001000000000000000000000000000000000000000000000000000000000004e39c8284f3a055a9fa25501381f2a0b7b41567083d8346b83eb07d70c3178068a21c23223148a051a05e7f10fe5ce1e8cafd56006c16cbac0b7583672a76453507adda6d4903ee", + "0xf8d28084572ee2798303426894ea593b730d745fb5fe01b6d20e6603915252c6bf87214bd2628bdc00b864ce0b63ce00000000000000000000000045108f1f285e307283b0d9a8e2d4746d98f0ff4400000000000000000000000000000000000000000000000000212eae3633c000000000000000000000000000000000000000000000000000000000000004e39c8284f3a03ff50000774cadf39b1e609e62bc85fc22bb084fddd2babf5f152ccc6854c67ca039b11b399f55417db6d26988740c93e84cde4afd5fd2208b480d12ba7022e3b7", + "0x02f903b5824268822104843b9aca0084e72232be832dc6c09492f195a8702da2104ae8e3e10779176e7c35d6bc80b9034498984761af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000c001a054cf42f61fe9320172d5cd617ecd5c6ca19e7ea8ce38678f6b8479a8bf242110a0675e10dc6ff3da9b21ad03d6a0d739bbec779574fe6fd3d330682a7679b07ca4", + "0x02f903b5824268822811843b9aca0084e72232be831e84809492f195a8702da2104ae8e3e10779176e7c35d6bc80b9034498984761af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000c001a0cfcf49b0809956202f24fd00e104c62b4abedd4ed6f3c1020634ad72afd8886aa059b23167f8fff33cfd6df9206489439daad84a6b21dc23868c7dfd1a1b23b6a7", + "0x02f903b5824268822460843b9aca0084e72232be831e84809492f195a8702da2104ae8e3e10779176e7c35d6bc80b9034498984761af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000c001a0f691bde59bef4a40333e8b05cdbab615e67305bf5f1cc5a863ab016d59a12a61a00cc0b1576e088a4f1ae36e37f8d2497f910534f0fc92d3a6a547a0d3fe8c665d", + "0x02f903b5824268822152843b9aca0084e72232be831e84809492f195a8702da2104ae8e3e10779176e7c35d6bc80b9034498984761af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000c001a0ae1e483d1ad90ddfc4b98e721a71ccbae48a5380ab03e1fc7797194d0b7fc6e0a06421b0fbfbf1c812b74f32540110e5e09606c343b34d6ac5636a92a7764bea9d", + "0x02f903b5824268822ae5843b9aca0084e72232be831e84809492f195a8702da2104ae8e3e10779176e7c35d6bc80b9034498984761af456db62d676a7225c0ba4d9c4b50bcc5048a948643b3e194aaa6d9922b82cad39f9a87ca41aeb10595386c8901e104e874196bc46ec5bd530e85331e06d10901268ec09fa7020294771519e21ce31113c78c931c7d65956f38d4b28ba06537302e31382e302d64657600000000000000000000000000000000000000000000569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce2040000000000000000000000000000000000000000000000000000000000030b8e000000000000000000000000000000000000000000000000000000000e4e1c0000000000000000000000000000000000000000000000000000000000664f6320000000000000000000000000000000000000000000000000000000000018616e00000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000010dd954674b36f6a3babbd470bc3e99f2ac8085a1db809a0980556eff2603e22b000000000000000000000000ed09c9fdc6ebf94800167da6be653538a37ce20472e156aa685dd1a5822701e4b83816d205dc7fddb91ac94e9d40279114b1a7619919e71229dde556be082b70bcc2fa53c66524228c7613ec8c71fdbf2d8586175c3ea5999d17c801c13032c1d843e51d0045e396a0dc244ed0b19df58d5844c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000c080a0614305e410a21542268dda6e512b62b0b7924478c5ea357282d51eb4bf33a474a042791cd22b4fc4a0bafa75c7e51ff4520917cfaaf68001a79f66103949aec334", + "0xf8d20b8456729adf8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf87023ed68f359c00b864ce0b63ce0000000000000000000000007f8dca0f52f70d3d7aa9fa8162119e9b663adcea000000000000000000000000000000000000000000000000000221b262dd8000000000000000000000000000000000000000000000000000000000000004e39c8284f4a0a8c3ba0dc87818a9b293dad64311c1ca0783e45718853b875823d3b8b1f5f067a0622a14b390bb22c26e8612eea3d047b283b06a9d56f4fe664c8fa3c363e16557", + "0xf8d2808456729adf8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8721119d3947dc00b864ce0b63ce00000000000000000000000002e4dd23be89df31fda5c144319dcce65c2a90e30000000000000000000000000000000000000000000000000020f4790cefc000000000000000000000000000000000000000000000000000000000000004e39c8284f3a097bf1398b3552d70780a54add0029b9aecc8f2ac12f9d860267681cf1e807f93a04a8317a89627b77cedc6ee503112ba93610702d25b35ebd4b911c6a453d36839", + "0xf8d2808451b551638303426894ea593b730d745fb5fe01b6d20e6603915252c6bf871857e529b65c00b864ce0b63ce0000000000000000000000007d68a60caa24b6c6536c3a50932408dbc0cbddc600000000000000000000000000000000000000000000000000183ac0fd5e4000000000000000000000000000000000000000000000000000000000000004e39c8284f3a09d24b5733f871084a3ac6d1f6808c41cc53108466f847cb48a9c97aa911c4c43a00d8889b1ebf52216d1218630ba5ffbde79327e983bc62daac48f71f2002e36b2", + "0x02f8d98242680b8451b551638451b551638303426894ea593b730d745fb5fe01b6d20e6603915252c6bf870afc31f15b5c00b864ce0b63ce000000000000000000000000853c9b37b0d954f905ce129d66ff32bc6a19631a000000000000000000000000000000000000000000000000000adf0dc5034000000000000000000000000000000000000000000000000000000000000004e39cc001a0d51fcd504494b544b9ed5eb4245448bea917ae944731a42cfb273a742b5db610a03ea1612f6c8e73e133110b88345215aefd2eb85551ac752251b0ec077160b497", + "0x02f8d1824268168439d1068084aa7a976c82aa9594bb3fb2ad154e6fca6dcd35082843d3a5819431c180b864871217590000000000000000000000003e4511645086a6fabecbaf1c3ee152c067f0aeda000000000000000000000000b52b161a59c9f8d06c48c78d18157793c21033c8000000000000000000000000000000000000000000000002b5e3af16b1880000c080a003da9ec43cf5d225481bf24235189b860793ac92d3aed1fcc9f47f3085d898afa06c33676a8a3a813b4e8fa0f96c25819ef8e9f4f2a668952c76364f9fdd6d3e03", + "0x02f902e8824268830786ef843b9aca0084d61f0bb082790c94ff0000000000000000000000000000000004206980b902770045f5fd2de6d426d0f74605d994a85cb200000000025f78dadae1cff0c367c19bbab444bed3ac67b80e746e9aa5c92ca5f9dcf84c6ee0deeb3f6d6f7dfeb65d37bb5922a9788177ec9210553ecb005b861f3f794b836b8ab8afc727c9895d1359996e555eb7ec4b4b9a7f61c801888119334af238ff581fdb3ee58d2bcfaecf2d2f6fffe6fd3ee7cdecc2476297f619eac4344b24952c500bb15cb5b4b2f20b7bd9b3db75b9cb0eccc99578be656ed0670379ff8af51259252003c3a006fa9f71e8e0f4710ed5cd4e3acff72ff213fb72b995fbeb5c026bf6dfe4ee8d775525dac008a8813736949f7ebcffdfb4cf1ba7884e58ded7e8d6276966a4947b26974fbbf1ae3fdf3aa20d8c821ab8e7f73dbd0b9fe74d09bcfbf8ae77a936bb966f61bc9facb1ead76956357a53a68b116d600cd4c0c3c7cb354e32c9de712a098ecddcb7e2499ea4bff1dd1e3f89e83c87b08f7cf7238936300e6a60cd577d7603e1b359d3bfed8db4da652ea2fff499519679d4b3fba13fa39e3a9cdb4ab481095003a5fa2e7b9c98daf0e24be34d89df2d3354787a536e17fd75d2d5106238ea2bf6705ab34452e902e6b737f787ffba7e2ef54856d03f15ebfc2b6f5fdce5edba98dac5f5f3c07173ed83200393a0063eeafcbd336e77b5abfee2e0f6d2b97f76844c4d608e7caeb0e363716117d38af2f9441b98028b946bed75112e4e1a4dec73c2efdb5e6889ce5dfa50815771eee3a9574537159f9225dac034a8813f74936af71734b77c7faf1d28213291f740da7bee8977f92f9e73aab2fe9a561e49b4811950031b5e66ad797555e9d7c34b4ad75cd3fce226ec9bf0fccb8a9fbd357a67cd227e581c27dac0ac0380000000ffff6bd9e83101c001a0719d039dd07f7a7c385dffac1d766618d878a6b303cddda7184bf71da84de78da06e943623fd0200f76648f0dca4f56de3d5e09def3d017e2fb51c7a2107710cbd", + "0x02f902e6824268823b86843b9aca0084e72232be8278f094ff0000000000000000000000000000000004206980b902760086fcea347f34f103d21e3b03a9b8859b00000000025e78dadae1cff0c367c1fa13afae713e9856a576fb54b360462e9fe4453e5b8ffbdba65c2e6f8c5ff32082b75922a968c17211db7f27af7bb7b89a4f9eb34669a7f8b32cee33af4c76a8f97bbe5ae47c6141414b9a7fa1d70188813531bd97db1cd3b5f7da3e499b64df38efd58609629be4ae66dce694edbab1a9b9ad5922a9788177ec9210553ecb005b861f3f794b836b8ab8afc727c9895d1359996e555eb7ec0bc8401fa8815793951cfbaa5e6c9ee8ff79c2bfe2a5ca2937b8cc14febf96e45cbdfe46ef765ee96689a492056a2196ab9656567e612f7b76bb2e77d98139b912cfb7cc0dfa6c20ef5fb15e22ab0464a01fd4c09677ed3326fc3d7ce9f5653199ef2c05d3bfdf5e3d79e5fecdb6e252cf62c40af69e22dac00098975d4a82d8d5d9f3d8849b53f7072c55943dbbe6ad2653c7d4cce9c2df2c1e5c6e21dac020a881cf7cf77e7659decee87c686b48bff505f6578f52da27729f4b8e6d5aa7ca50b94c86680343a00696cf8a0c887fc0b574d56956b91533a7729b253b4cccd9e6b9e380817dbe7de2f643441b18063550bd95e598eece1be5afbcdcfefe4dfe7899cdfc1defaa7c8eddc6569a6d4f2e9ecb24dac008a8810a65cc0f242bebf670adf9be5cee44b866fea9bd933a35930aa71e39a3b0c677bd26d10646410d0c8e9cadc31c61196c9c50f7abdbd132fc50cae2b3dcdbebff17179b183a54ceba41b4813150038f9d6f4f3a77e2ce4a57b67b7a1f82c3d79fbc17b337eac9f6afe917dedb47fb78109f0ee3a006ea0838371e6fd9563f876b5fc2f2ea9de221c63557c4dec96f397589a5baed51da1fa20d4c3800080000ffffbc1fd5c901c001a0ca15b97f66f7c97780369c0b6a4b0cc3d89614916d3c18468f565d0abf2c4f56a067da11960166f17c3b4e38ede87efbc1987f6caf4848c0d71fbc941fff82bac2", + "0x02f8b1824268488439d1068084b4c2284882728194c144bf0ff0ff560784a881024cca077ebaa5b16380b844095ea7b3000000000000000000000000bb3fb2ad154e6fca6dcd35082843d3a5819431c1000000000000000000000000000000000000000000000002fb474098f67c0000c001a0ccde1d9e03bb8e35962c0cc27f7e62514b1c9c92bf82a70e1fc2b56f7b4858dca05011dd7acbc9dab491ebe2b539337675d158e9eed6785028c8d70a53899996d2", + "0x02f901fd824268830efa95843b9aca0084d61f0bb0826a5c94ff0000000000000000000000000000000004206980b9018c00c2b44fddf8b12023ae4535d7491365be00000000017478dadae1cff0c36781d39d471742794efffcb446cd9a4d77ed85d399857d6bd82fb1fc9d3091d123396d6ab34452d9828c83f6056b0c16332419fead0fb376db7fe8be49d69ead0a5ab547b7d9d7333fd8d992e65f9871006260c0f40f6147b6092fedfd9f1df8ee6cc3e4934b5ed53b4d535ad2bfeee6cf2aeee3f6441b980535d07d99a5e00461fdb0198b6786f9c4b275dff78efcbef09ca062af2153c1f67f7a8f883630076ae079ee8ca278febf7358db75666f37e8e0b861a0d72ae564faea494802f3e512c697441b980735d0604765dbfcb27d26211d73fe05ae928e5db88257c841e0e6c5e7428b5914c4ff9e6996482a5f50f0c0e9b048e5f349f91b6bba2c667197b5882e0b15aaeb0a28dc7e2f98b549fc36c8c002a881374f6738274f8e737857773eeea3daab8cbbd3b2f6f76d12bd5a3d3d30505ceefc916689a48a059b17ac7c73b8cf8739709bcfa39cbbb9eb56083f2e9c3223b5fe46cdd99e337b6789800c2c3a00080000ffff7e78eaec01c080a0effb3acf55722d8f9836c10efb26f04ab43d909dba3bf873bf700bd28a441799a03b5d1ce463298e9af25e1a2149e1238d057451f432672a3041ea72e9fbce52e1", + "0xf9012e8301b6b2846bdef4f083035f309483c73da98cf733b03315afa8758834b36a195b8780b8c43161b7f600000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000281000000000000000000000000000000000000000000000000000447c1923d4e0080000000000000000000000000000000000000000000000000000000bb70ce33400000000000000000000000000000000000000000000000000000000000000108284f3a07e9f4254ed71fc343f93dbb9955e1ce0b7681d3768dc56323eda3538d72acf83a02e9aba06b723d070e71e1c450f363045ad607222fe254a838a2ed92a4d19774f", + "0x02f874824268268439d1068084aa7a976c825208942f4cc39e7a3258cc62ceb7376bfe394e79891fc6880de0b6b3a764000080c080a081e8b21b479935d20db84c6d36f160db0b83543734c2ce00c629e7e1574bf5bca00843ea8349c1e6e458e172f56211ec92d4f457b834e5ed248a8b4d605a8e9be7", + "0x02f87682426881928439d1068084b4c2284882520894b3ebe4c05c4fae9bdb2b246ac82942821079419f8901158e460913d0000080c080a0a78d767459cb8a0cdf51b280fd52bface1db6cbf2230abeab5eabbb355d6e4b0a05e52d0f91d210f7cf4df467643bdfcf8893c0f6c32112b967a29055c8abe9e95", + "0x03f90dbe8242688222e98402fe7b6084a9e6ba5e83078a3f94d8c5c541d56f59d65cf775de928ccf4a47d4985c80b90d244db4d964000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000c600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000009c00c7ed9a1ce1885b7b112a6a038a9846ea2cdba898c1bca642f64e8dc889a3fd003c8f6a1f3901bae964ce4e7c3d752a012521905c808c79e6d1e8d1483f495094f3d9e68ffd9452e56125ab654536a24b58b5592502e1201c1c97bb97ff678ac00000000000000000000000000000000000000000000000000000000000009e00000000000000000000000000000000000000000000000000000000000000079000000000000001cb20000000000000000000000000002f42937b4317c06c7aa45bf82b649c9f93d6de17f8aa50c68b3ed13820503f08606100191b9872cbc0889d4b19cad42c86c840536c370025d8288e6aae5523fc15224406e5783d4baf99e86d8b5ba078ffb4983a4a1680dbdd2822c9319aaef0ad58f00000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000072000000000000000000000000000000000000000000000000000000000000000b5030000000000097ad9000000006648732100000000000000000000000000000000000000000000000000000000000000000000000000989680000600000000000000097ada000000006648732300000000000000000000000000000000000000000000000000000000000000000000000000989680000800000000000000097adb00000000664873250000000000000000000000000000000000000000000000000000000000000000000000000098968000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1040000000000097adc000000006648732700000000000000000000000000000000000000000000000000000000000000000000000000989680000800000000000000097add000000006648732900000000000000000000000000000000000000000000000000000000000000000000000000989680000600000000000000097ade000000006648732b00000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097adf000000006648732c0000000000000000000000000000000000000000000000000000000000000000000000000098968000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012d050000000000097ae0000000006648732d00000000000000000000000000000000000000000000000000000000000000000000000000989680000400000000000000097ae1000000006648732f00000000000000000000000000000000000000000000000000000000000000000000000000989680000600000000000000097ae2000000006648733100000000000000000000000000000000000000000000000000000000000000000000000000989680000400000000000000097ae3000000006648733300000000000000000000000000000000000000000000000000000000000000000000000000989680000600000000000000097ae40000000066487334000000000000000000000000000000000000000000000000000000000000000000000000009896800002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d010000000000097ae50000000066487336000000000000000000000000000000000000000000000000000000000000000000000000009896800006000000000000000000000000000000000000000000000000000000000000000000000000f1040000000000097ae6000000006648733800000000000000000000000000000000000000000000000000000000000000000000000000989680000d00000000000000097ae7000000006648733a00000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097ae8000000006648733b00000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097ae9000000006648733d0000000000000000000000000000000000000000000000000000000000000000000000000098968000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012d050000000000097aea000000006648733f00000000000000000000000000000000000000000000000000000000000000000000000000989680000400000000000000097aeb000000006648734000000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097aec000000006648734200000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097aed000000006648734300000000000000000000000000000000000000000000000000000000000000000000000000989680000200000000000000097aee000000006648734500000000000000000000000000000000000000000000000000000000000000000000000000989680000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5030000000000097aef000000006648734600000000000000000000000000000000000000000000000000000000000000000000000000989680000900000000000000097af0000000006648734800000000000000000000000000000000000000000000000000000000000000000000000000989680000300000000000000097af1000000006648734a000000000000000000000000000000000000000000000000000000000000000000000000009896800006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000a401b0d0a91e0fe7ba5b31e2cf4feb97cd80123c3f1e0ba6714699d9568019592108134dcab7429d658dccd2393681000000000000000000000000000000000032ad946bf41fd60579801f95af9d2cffac44c6c623c25c635771a615bb46d60fb7b74c3b3a9f426d8e49fbb211af2a100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000a401b0d0a91e0fe7ba5b31e2cf4feb97cd80123c3f1e0ba6714699d9568019592108134dcab7429d658dccd2393681000000000000000000000000000000000032ad946bf41fd60579801f95af9d2cffac44c6c623c25c635771a615bb46d60fb7b74c3b3a9f426d8e49fbb211af2a1c086012942e9ac9be1a001537c1d90a67c2586e053a956b5b86726616e00c17f6f72620d7ea111e600d180a0e062afbb27bed362bfd5515867adef5500e21331b2a8790fe53b61ce6e841094a05caff0b3117ba6c4a4cbce4a4d093b27d748db3cab73362bf535980998308db9", + "0x02f876824268822d2584378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a0709a63731bee2a436cd3fc56afbff5bcdc07b5969fbba963d0b9e3b6550d2322a03c35a1ba70b4d2de994544a9279ce0a864d3ca131152a2740bf634dfff241481", + "0xf8d380844d9f73b88303428194ea593b730d745fb5fe01b6d20e6603915252c6bf88016233bc8f712f40b864ce0b63ce00000000000000000000000097c677fdf284f446572937f9922afac10dba1e6f000000000000000000000000000000000000000000000000016253f69b88f44b000000000000000000000000000000000000000000000000000000000004e3c18284f4a0ff5b2982dc407cec1a7e94198a4e16c0221abdbaaaa6870d33a57a73ef6e17caa07a20908757c688418029eb6b33c58d4f07ab1876995e88e35dbd93170c431dfb", + "0x02f90575824268822c428403be1a3884b9e0f6ee83055d949454a03db2784e3d0acc08344d05385d0b62d4f43280b905047794965a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014087f06135149410f902600d4d3fbe699c230d41c2c44c66b822d095f721b9e112000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000018622a0000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026464000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c0287af7752a836402cdb6661cfdbd6d9b22a5a6acebbf0173dc75567c9cdc8bf7079bb1538afea28828e22f53b669bde0725b3fa8e1e032f766ecb08ebc6e229829fee65d5c9d883769e5958bd8c0df17f9e77a0105bf24915e6b7a591f07361415c4dd046f28cc23408c0433896e2462c067e4c7e3caf39bdbff64f940095ae1218ea724a07f1a8c5925bff6a6c4b0d55380274ab1f106a9d289cc4245f7a61003de71dba5035ac5e9deeae0c1f7bbde04979e4934799573d784945cbb02f932000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206f8a70779657a4990c2ea64d42f0626b8ac94899708d95972b0e84372e436022313c9ac6c16ba3e4ce7c9dcff7ed2fdf4035f0c196a13427cc9070585a5460400c6bf3b51088d3729658ce0afb9dd5e5617b3e63e3f257fb05060d4e790328e207cac1efdd01c0c372c7ef2e80c943b04f3e8a8bfb92a9545ca54e311ed082c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a03a11d4c100aceccab8041eff3b05e3452fe0d8b170b0409d66a9763e0c92265fa0148e4e695957c24e0daf157c10fabaf62b011d52de4ea8456e7ddb72a27737d5", + "0xf8d2808448f7de208303426894ea593b730d745fb5fe01b6d20e6603915252c6bf8717c660428c5c01b864ce0b63ce000000000000000000000000f6256cd33e3014a37782ecc27b0006b1a52efb310000000000000000000000000000000000000000000000000017a93c16344001000000000000000000000000000000000000000000000000000000000004e39c8284f4a0dffe42bc53799c099fb9d974f5daa868e69ef2354cbc3478d6505b89afed6922a0104a3a8efe2032b0add162d0e12e0a08ae980f3e59de13654b63970e09b1b62e", + "0xf8d2078448f7de208303425c94ea593b730d745fb5fe01b6d20e6603915252c6bf87273194d595ca00b864ce0b63ce00000000000000000000000094bb0b1804aad1568067002887eb9e0f8002d6e70000000000000000000000000000000000000000000000000027147114878000000000000000000000000000000000000000000000000000000000000004e38a8284f3a0dd4b5d11ffbc5dc8922c58235d8b7a10d1db11e26df9afa8c426ee3c984804cca0116e31a8c8c090e3faa06c665265de143200297b532f348affadc88543b6c8a4", + "0x02f87582426882059184290741b1847e014f6d829c40940e5defac23cae55c75774989ab252e986b5de470872714711487800080c080a05f3a2803ff21636e23998a67367aff5586f09998972072f6994314437275b085a040cbfe9f7b5c3297b00f90bdc9d499f6369de67e028998d82cedc52bbf7dd75e", + "0x02f8758242688213ab84290741b1847e014f6d829c40940ffabe0f82bbe82173423ad9edceacf1f7df995a872714711487800080c080a0b45103012449ed51215a00e0bf45fe02165e902211d6180e791306f1a7078f01a050458e7b7a5783743c797b5b9df7cbbaff0f4da3c8cbf4d137e5b0ccf74a2e64", + "0xf8ca2184572ee27982ac0294bb3fb2ad154e6fca6dcd35082843d3a5819431c180b864871217590000000000000000000000003e4511645086a6fabecbaf1c3ee152c067f0aeda000000000000000000000000b796dab19e714eaf48fdb2cab2e1c5dd3ed9147f0000000000000000000000000000000000000000000000001bc16d674ec800008284f3a0750e949725001dccb8e1ddd7fb054f382484d74baf72faaeb88e70f15d23b843a02fa0206a359a851fac29ebd68009c3fd8737691698884fe3eb57d6c402a89f85", + "0x02f9013c82426882120a8402fe7b6084645d0caa8307a12094e0f22d3d5b6999165eee5f55231c5a5bb67fdbd78801df9dc8e4ad8000b8c46c3174f100000000000000000000000000000000000000000000000000000000000ce3e40000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000cd501ee90c50b9e478776bb4bddc520012d160e700000000000000000000000000000000000000000000000000000000000000053133353739000000000000000000000000000000000000000000000000000000c080a0f0b5394ad4023c83fbe754124645c5060fe3da70f781b43cf92502ac8a08a128a0564005ac1236fea76866b8a9546b0b96fca89f2ce42e4e0ebdec4cfac28826a0", + "0x02f9029582426882a542840420c26984afa82b2783030d4094eac603ab68fb5a4a56d7a9fd54a669133fea725b80b90224dc549bf40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001862e000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cff934e5b3de5f9d41ff35d2603716f3345c6e07000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000041cf94794414b8ff84d71d6e0e163c81334f29e8ea5f54aa2e7330a05e42a6cbd1488a65417af114c7fb98b1d1a154637cbf9681c0b2780f39e1114d6a89eb68be1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002433626135613766302d326136652d346439632d613037302d33396262313139366264623100000000000000000000000000000000000000000000000000000000c080a06d38df9467bd42cfc727a3de617990e7b0c00e413990019f8717eae5280d795ba0290dc04d17d725ff524bfe9cbbdf7ae3a5b469297ced1db75e1f39b9e7041394", + "0x02f903738242680484021dde728475e611f3830333a6940888e9e350ae4ac703e1e78341b180a007c1510580b90304f16aa7ae000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000353078463030634264323438433531323533316262623732353364423537453039333535363666333246355f3137313634383233363200000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2975f88804eaa526ae6c4198262963380d54623a311213b506c7779d120b7000209bfbef54bf7260f9236c69561ce8a01ad3ca178f18c4d640a4e0283621d831b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000015af1d78b58c4000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000353078463030634264323438433531323533316262623732353364423537453039333535363666333246355f31373136343832333931000000000000000000000000000000000000000000000000000000000000000000000000000000000000414351b28feca3a21d66feb2d1a6cb12f6b943461cb28cb2239009376f181f6f8c7b2caa1466300ef6e7fec7651245d0bed8ed71043e2039ec59fb8e9cc93e0b081b00000000000000000000000000000000000000000000000000000000000000c080a0ba73bc30bcbb451ecc6244f8aca1fd4ac20d1604b6d9a8a1685a97184c7ae75ca05a17861ebbdf4695fb620a2acbf2b2298869b706ff77d84e7580e79c3901760b", + "0x02f8d98242680584021dde728472c76f5e8303426894ea593b730d745fb5fe01b6d20e6603915252c6bf871ac25a0028dc00b864ce0b63ce00000000000000000000000025281bb38e7d6ce8a09480efff5f2cf5364ee541000000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000004e39cc080a0739886354a71bf77467bab1b7a157cbbe32cb14b5ccb0228f59736fe9dbab0c4a040bd7cb294c1151323af0cc01e128a474041f4326935460b9b1d89f4f14c7c0d", + "0x02f8f48242688208da840420c269849ea50419830156ee943530e89b1f0b3037b243effa18e0cfc62fb5287b80b8849aaab648882af6ef60fbe4267680db3cbf8a9e6a19816167dfb98ab41f884a5e25cc21c700000000000000000000000000000000000000000000000000000000000f8f342bd49d77d1dddf4a7b4992246d015699129d674efdee847978ae1a4ef4a70c830000000000000000000000000000000000000000000000000000000000186279c080a0cbb2da4c97f61209b1ffe77346e9e34463087d6b9250915f1150128178823b21a01b4d8f4fcd1864aecd24f0dff8d2c90a63932d1e82e1c6fb4bcd24c1cbd9e804", + "0x02f9021482426881b984021dde728473c59cd483024854940888e9e350ae4ac703e1e78341b180a007c1510580b901a4f16aa7ae00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000015af1d78b58c4000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000353078323831664631386443323845663032303064323737394645414431466439324233313431423462385f31373136343832333932000000000000000000000000000000000000000000000000000000000000000000000000000000000000410be8ef6da925933ce5542cf0a75d90cb99dcfb81fe94918092af0d53ca820bde5c91dcbb6c0d68131edd61e78cfacb8d27028d3f824b09baa0859f80a68ca4021b00000000000000000000000000000000000000000000000000000000000000c001a0d109ff1467e6364694fb8e13e889ce3564bf9f3ba4791396291a7e1b351979d1a00f2a64277fd422b64a0218fc6c3cec4ea292bfc59a3d1ae9356367af4075e213", + "0xf86e8201808451b55163827b0c944eaf936c172b5e5511959167e8ab4f7031113ca3871c6bf526342530808284f3a0f598613177c75b05c3ab34acd37a78d09fb76294004a774eb0cabd0f7c58767da01752db79babd0ee097df6c91e1aa430eaa451227062b76abcb6afb19aeb34b8e", + "0x02f902138242681684021dde728473c59cd48301c234940888e9e350ae4ac703e1e78341b180a007c1510580b901a4f16aa7ae00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000015af1d78b58c4000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000353078353931333737624165333139624345376436383941423833374233373064363737354439314439345f3137313634383232313200000000000000000000000000000000000000000000000000000000000000000000000000000000000041e3e4fe0e518267554edab7724fcb98d06cd56b6d8d2455de3eb8529b8252091f0a83a29ac82b322624e9cf2dfa9041d47e30b328fbe8e0a1c9ff73e88dcfb3da1b00000000000000000000000000000000000000000000000000000000000000c080a0ca4f7a4cce2eece0b2e29e063e14a29b8b9960223b836330c003b46a43434d9ea042f08a0e1efa130e3438596829e3c654a85139e0238283135238d5ba7074575d", + "0x02f9021b8242682184021dde728475e611f38301886f94a098b76a3dd499d3f6d58d8accafc8efbfd0680788016da9bdff81d000b901a41bdb003700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6445a1f7d00000000000000000000000000000000000000000000000000000000000000c3511000000000000000000000000aaf91fefca895f9cb8360e87281092ad5803a0b70000000000000000000000000000000000000000000000000000000000004268000000000000000000000000aaf91fefca895f9cb8360e87281092ad5803a0b70000000000000000000000000000000000000000000000000000000000028c61000000000000000000000000aaf91fefca895f9cb8360e87281092ad5803a0b7000000000000000000000000aaf91fefca895f9cb8360e87281092ad5803a0b7000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000c001a08eb4f1a338891eb96ef65ba4a01eb9bf51ba7598fdc48ce52ba0b9d7c84a071ba00c70822e46cafeccde8390536ce1315f94bd583df160c90cd76302d5a93f8d5a", + "0x02f9021a8242682884021dde728472c76f5e83024c9494a098b76a3dd499d3f6d58d8accafc8efbfd06807870b1a2bc2ec5000b901a41bdb003700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6445a1f7d00000000000000000000000000000000000000000000000000000000000000c35110000000000000000000000000566e6d135cc6cdab6863fd8825a878b484c676600000000000000000000000000000000000000000000000000000000000042680000000000000000000000000566e6d135cc6cdab6863fd8825a878b484c67660000000000000000000000000000000000000000000000000000000000028c610000000000000000000000000566e6d135cc6cdab6863fd8825a878b484c67660000000000000000000000000566e6d135cc6cdab6863fd8825a878b484c67660000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000c001a0e46dae5b72bc1529b9ea872875971b83b761b6ff13bec438804f5c25b214288aa07b450ebb6d5df108f4fe3182d73e92dafa77da7bcab6b862e35eee767007415f", + "0x02f8b18242681784021dde728475e611f382bf6d94d6e9cd5ef382b0830653d1b2007d5ca6987faa2680b844095ea7b3000000000000000000000000ea593b730d745fb5fe01b6d20e6603915252c6bf0000000000000000000000000000000000000000000000008ac7230489e80000c001a0213bce7ef6897032a0f0bdcf4e8f6095e9071048b482c1fddb6d9942639ccbcea024d4da00f0c2e3eb8e20d01dafa86405efc5d69774761a20482aa77c0eda2f3c", + "0x02f8b18242681784021dde728472c76f5e82b7f8943e4511645086a6fabecbaf1c3ee152c067f0aeda80b844095ea7b3000000000000000000000000bb3fb2ad154e6fca6dcd35082843d3a5819431c1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080a02b340142f88ddbc53213478e32678e5c4bbd9c685ce6478c78d880dbe9905042a07cce0d1ea63fabfe0df3718c2694aaa98347d554a2bc36eb2de557c94a823bfb", + "0x02f88f824268830dd7668402fe7b6084ab5f499282540894ff0000000000000000000000000000000001700180a074ace5d3e629b421d41cb70f95861f910138749bb31e2b4d96c74f8c43a9b9cac001a06ff809032bddf711ac2a68d6bd084d5a43836239b9b53d92f95f1c7fe3a1afdea04f9ae8d06c0615f16701383c5ff277f106395e1c33d394a5321f5b390c3c9a7b", + "0x02f8798242688301c5a08402fe7b6085015cbb89e4830f424094ec1ef70e0c0318acf028a61c3c568500ee6e3490880de0b6b3a764000080c001a0e6fa226067ba795e796dfb35170156c4ce708212c82167d84bf9a4ca1e6ee8cba062110a505c114600573b1df24dd6441e0445178d0d28c842657d4aa5e41c58b5", + "0x02f876824268823ad88402fe7b6084a9e6ba5e82520894d09f93e594485af891772c2b6b22d7c2675eaf3d880de0b6b3a764000080c001a049ea9eec52fc06b708affed81f61a1758d1ba76d5710dc8cd0e41973dbc303e0a034a8700308675e2cf0b26a33caf069f4e30aa3ba702397d0a870ffc955c13198", + "0x02f8748242688084021dde728472c76f5e82520894e9597fcf6d86ff849ffd62fe397abd1844d633f6881bbddfe8aa01800080c080a09c6216e5a9db6d863d2cd05caccfb0d228aad5feb8f17801a78ad75c36ec6dc9a025399ceb7f674591a696a685233ce9d9c79cfb451d83b65d0097096af1106f93", + "0x02f890824268018203e88504a817c800830187bc947167e731b0031d4326d46c8d1e1c2e111227ab5f80a483b24c520165e1826ed997bee00bac97de1740a7f34271b80000000007c947f39d60cde4c001a0059835898efbca4fa8f0b06dacb1a570700b21303fbb0b8c80e1da0c63037faea01bef884e8c49bccacc71270276f7e2531f9d79447dcd3ffdfdcee92ec6025a04", + "0x02f8d1824268808203e88504a817c800830157ad947167e731b0031d4326d46c8d1e1c2e111227ab5f80b864ee7b7ad80139e423cff868227c14c8b4b9668ea26fc066870000000014226ebe73c486530000000000000000000000000430dd63a930bd21a17e5187661c57ddfa30180800000000000000000000000000000000000000000000000000005af3107a4000c001a0e8d4e723d225f6ffdd4b145cc27b5c758ac06811b692f34367c5656ae5c7251da025e4ec6292550f1c465998b8ed54e2b631fa053fbdb7adc6582734314e7e07c6", + "0x02f8b1824268058203e88504a817c80083010431948888888815bf4db87e57b609a50f938311eed06880b844095ea7b3000000000000000000000000aaaaaaa00e1841a63342db7188aba84bdee236c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080a0ee8985d95078fdbc78e1461f0946c6caa5e79bf9632afa792adf3e2eb149ae9ba03ce23ce002f3f408ebee361a904bd0765ab3c54745993d095b7b647f4093b4f9", + "0xf9012e8301b6b3846bdef4f083035f309483c73da98cf733b03315afa8758834b36a195b8780b8c43161b7f6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002829000000000000000000000000000000000000000000000060f4dd67d9da2236ff00000000000000000000000000000000000000000000000000000000104553c600000000000000000000000000000000000000000000000000000000000000108284f3a02ad27a2c5224bad8a09e6ef46e77b34fbb4cf39ffefa68ed4d24da0fd3cc1739a06dc8c6dda5e5c261aa71b883f1a8582a6b24e9bcc5c03ee1583aed102627af7c", + "0xf9012e8301b6b4846bdef4f083035f309483c73da98cf733b03315afa8758834b36a195b8780b8c43161b7f60000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027e90000000000000000000000000000000000000000000000056bc75e2d631000010000000000000000000000000000000000000000000000000000000056729adf00000000000000000000000000000000000000000000000000000000000000108284f4a0164f84591e8e9c0b7da791d9c79f3d56790050b1908d071795c7f0447aded841a0510a467aa4afb7b4c29fa68ea45091a418daa2262036ee79fd8ea6bbefc632e4", + "0x02f876824268822d2684378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a0a7cda2fafa0089960e32cbb17e3729b4819a796f7162c3597caf1a76a334e79fa041484cee80bb2ff03d67a1a7942d289a70f0cbe01e9d07b80effee5f6e331fd7", + "0x02f876824268822d2784378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a02d4162033a10556abb388427b6ecac1ca1c0be2cb0f6c47d74144d55e011da84a02e21d5b55a2766e03a61f3b0a419d4791f2364be31949ddacbcceb625b4bc6fe", + "0x02f876824268822d2884378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a0d3e24874d7fb7f1420110b328dff9afd7a10882b5fc72c43c06078930f53dd9da06f7f584dfa9c40f855ac3aa1e22a5f943d1e0e338d230b3700d76ac99296af19", + "0x02f876824268822d2984378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a08f1fdeb152b28994c2a4f7a31050b17be509a9b6d32ab9772a371195f63ce181a038e75e190a3344b111715158dda2d7d6335b3427ac5b3b24b8d97130e4fb3f4d", + "0x02f876824268822d2a84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a014fd0a8c8f4f1399259a5ec7ba2991cc05ad3d3897adf3a6c3270661ac896681a0381cf2a1210ba4536ee2a283cbaa50a0c111bc198269ad83d715dad39addb798", + "0x02f876824268822d2b84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a0e8fad58674de78ecda900b782ff4e533e75a7ea1cc768414ff8437ae61457ac8a01fcf314fc798dfaa7576489ef14ef038802c2b2591a2fa7db3278a6b61222956", + "0x02f876824268822d2c84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a08f9dc370b6b1ccbe5baf884fa58fc676bcb02458fdcec8649064e26ec5565394a02d50ea6424995b85dd568b6828c9aa3b8d4c0d35fbf3dd9bdbe37264cfce5ac4", + "0x02f876824268822d2d84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a04c70fe8304b4d8793a7272427165dd4836cc4405405a2ce4eaed9c7329cd83f4a066df799543e119d411c9bb893355e3845061e1734a819953e1c392b9a5fc0b44", + "0x02f876824268822d2e84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a05f7f4ab1738031d24a45c5c8a46084d390f05c37db44f074809839c93810ea0aa05d6eb65e5ac9cde2df77e1ccd562820902f38f83b485c8e978eaeaf957c2e757", + "0x02f876824268822d2f84378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a09143e43a569ec60edcf99e91af9b0f7e859ed4055a56b88e89741aa3e4b73d9aa0484d255e703ade3051f47811be52b2f9c2010be6fe3a75bb2150a09aeaf314ce", + "0x02f876824268822d3084378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a0192696e213683ef79eb182e675203e79e74874c1e49b815b605c07a632a4a940a07c4cf7ffb5192d2622594ce7abaa5b8f8226aac6a34344dbb41eafab48cf8539", + "0x02f876824268822d3184378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a02886651a8655bf066528d14ee57b1479a3034f572a016c8d91ff8132147fff9ea022477a92fc8f0db186d54ac0adf6c3b685b3ebc8b3a856ddbf8e403b31560a45", + "0x02f876824268822d3284378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a0cb48fbaff7892033304f8f9521739023969335e89a4195f01ceebc74f2710750a061b2f452c3ebfb04913f0039b43a91013e2459e3077d68e3c8ead251bf3730b6", + "0x02f876824268822d3384378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a007559e3a7610de99959da73b20f30872be5e67fb62402417217cdeb9155596e3a06c38d63241a5dbd5f7c06a81769c94924f52d656d1db812a7856b9eb400cb522", + "0x02f876824268822d3484378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a09602bd4ce44360eb5fb4044a253d0fe45a4692af198e2700a90e979212d9ada9a06e3cf3ce2371cc9a050915192d9f84dc9c34b1d4d69094d81aaaedb7075e1128", + "0x02f876824268822d3584378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c080a08c26c4ac61ff023b480ccc5fb4b7d0826c04314f2dd18eef7e5a3b65fc74d4c2a031bc453204b6d4c61ae6de3a0f14dff6106fb442605cf835a4be2acd415703d5", + "0x02f876824268822d3684378c671684a4d4851c82875a94d9afac6b4d8937c1e90a35d9595c716fd53b7a31880de0b6b3a76413a880c001a02ba9c52710ddcd3afc8904d0b7b98bd195af69e9e11ca989f951ae3524ef3a85a0159d57ac6f4047d57b1bcd9f19d4b6eddaee84bdb24df9863b5da4b99a264fa8", + "0x02f8798242688301c5a18402fe7b6085015cbb89e4830f4240942ab1b7bf978d095b5fe7c80b924876701d8be946880de0b6b3a764000080c001a04ee49cd99ef44e7ac63ffe1da42ece5f056c172ca4b3f865c03657e2e75a7712a00f14ab91b834528c2799a993a4bbc093f216673dd739f7006a3f3eec47e9309a" + ], + "withdrawals": [ + { + "index": "25404323", + "validator_index": "135466", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6791519" + }, + { + "index": "25404324", + "validator_index": "135467", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6916089" + }, + { + "index": "25404325", + "validator_index": "135468", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6903258" + }, + { + "index": "25404326", + "validator_index": "135469", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6905481" + }, + { + "index": "25404327", + "validator_index": "135470", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6906478" + }, + { + "index": "25404328", + "validator_index": "135471", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6859379" + }, + { + "index": "25404329", + "validator_index": "135472", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6850481" + }, + { + "index": "25404330", + "validator_index": "135473", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6927834" + }, + { + "index": "25404331", + "validator_index": "135474", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6884689" + }, + { + "index": "25404332", + "validator_index": "135475", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6905196" + }, + { + "index": "25404333", + "validator_index": "135476", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6878941" + }, + { + "index": "25404334", + "validator_index": "135477", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6850202" + }, + { + "index": "25404335", + "validator_index": "135478", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6868123" + }, + { + "index": "25404336", + "validator_index": "135479", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6846854" + }, + { + "index": "25404337", + "validator_index": "135480", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6949024" + }, + { + "index": "25404338", + "validator_index": "135481", + "address": "0x9baa3244565d51d9c7897c0eb6679ed4890e536e", + "amount": "6796446" + } + ], + "blob_gas_used": "393216", + "excess_blob_gas": "92798976" + }, + "blobs_bundle": { + "commitments": [ + "0xa20c71d1985996098aa63e8b5dc7b7fedb70de31478fe309dad3ac0e9b6d28d82be8e5e543021a0203dc785742e94b2f", + "0x932fb8f75da1ce7cf3d8d82e8ec4bf81481457a6419fc6c6ca119de796d7b39d32bf8d50948ec7d8fcc64409dae56225", + "0x8d928fccfd48a613a216ac4a13dcd82c6126b6c5c0f63209ea53cf487f5cf5660d9cb9412fbd497281132f83f12d4d7a" + ], + "proofs": [ + "0xa2acaae116dc9dea269577cc750c4de598a387992943b18be092856c90eaa372a360aad98aa1ff88eb76423b544fca35", + "0xb8645db94c16334aec7de951bcb0f109b122e1ce62ed26ce06b2dfdad9afa5f673c9c67f18066e79ffb31e7fa9fd98cc", + "0xa997b14f7a9e176b587c63c46b35fe9a153600746e696659c4323dbb3d68e79d9aba9c680dd016253bace98cd04ef6ee" + ], + "blobs": [ + "0x000000000d789c3a00080000ffff00c100c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x0a0000ce0e789cecbd755495dfb7ef4f7777a774497787b434d2292021a19474094888b4802c403aa5bb1b444a1a413a44baeb37cef99cdf189ef8b80fe77bcf04f78eebfc638fc1987baef75ceb99acf5cccd8b675fc284b4d7d5c29c5705c11b9a2985c0fa624f42fdf51a388a1d0f85bda6371bbcb0722eb9ccd6292e34770c103cade85f27836c9c5709f58b19b60e8df9d46527536e251aa0afa54bdbb116d743fdc6d0bcccf8dbfc8109a53936c312babfa3c8f5a5bdcbcfc3c6cb385a035bb6ab70837deeb046932080564c6f6b6f146048d0f6f1ac367a7b3ee7cced117351a5af642816bebfc655769d37ccb9e73f251e088f1902cd0c7f08f5d76b22a00652bcb1fffb904222e614eadd5114498b9706952be6c161e887af58176535f2fddba0c1d379b4d2d93363b4721e15ae753f8493b39bd08775c93e47e6420b354d1a9575c0f34934ee6124a24bcde9e1b851c1041107f4619bfdbcc8571b15bcb67749c1a6bfa863dd53dd1f041fcac612ca1f4de34d6e91209be2caf029062829104d0bcd109792f3ce3599bd007eada9fc92cdac6bf9834dedd1da91121f995d1a2ef8a9d94d9577b3ace4c849bfa863df5b5d9d6c91e676b97e4df213142b0c7e892f4bdc8d5e882561df95853eba117f553d40cc355328c01d34ba9532dc6ec1db3a3f9b112baf4b9cc7bbc96fcf94232da5fd451de7deea045ac98f27e01095322cbb65230ad3cfad2e0f60521234c62dc0b5881302e3f13b80d49e3e9f139aaf979c83171165a23120185e32baa0e931804d8f749a581a52f98b3a18bdaf7b8595f8ab08cda737b286add1d6f44f32a6db13fae5bae778bac22ae13e6ec8058163e9525fcf0a827d4f3df4e47066084bf8f4f3019bb48ea24afe23382e970371955fd4f1ee3df78b9b6d2d2ab839684d1fb5d2bc089fa2d84fd1a3090edcdbf6565442ad3a013700be840caa9169da726986f6d849eb66cdfdc4c714cda0aa04cf43e5b45d616bb85fd4f1ef3df76192661d1cea742d9ef28d8fc70ea537b44bee97d13716507e0c941988b665c600a7d78cde9da923ef02f3bde93cc602bd54ab5c715ff00369cd824becb6a9bc2da15fd409ee3df709c7136c4b174299f7e9958b721fcd26671797bf6f27609859ba3a23e9e8bf1b03467293372fc89a3a7c2f312d8a8447ea0462be492933c96a0fd49735190c2bccfda24e781cf51f6a6f8d4a61b98f70552bb81e54bccc793c97fe4cd5a2f7d0cb5aaf17712c292c13e8bea0366023be32a4ca5ead39cfded4ef4d9c645e3ccdea09af1f5a2843e008ff459de8de2b9f8479eaadc96975d604dfe73ec68a25f0be5776a2511fdad15b2e476398054901c0f0bc1ff59e233bc2642d33a3baa06314fdbe8aa207154c7695ded83ee1e139f48b3af1bde72eba30e8d924b4513b4e481effad3a281943ae6d8de1057ff93561a740dea9c84609e082af3778aa9f584c96cc851610be703368784042c84368e21fdddf94a31a26f18b3ac9bdd5b95db3b697e83925bb6b56fb754730f0da71b208169b285ab3f15732d70fdb198196df0f1526f41a15ba0fd157c60fa9bf7d21f67dd58f350e33c772d7308e16dbfe8b3ae9bdd500ed902b8f240dd675b1b5cbb6edb86a9ff505aa325c4e0cc84567b71c2adf5d1b019b3554511f0376ba1f937caf194f3a4768daa0ddf2996af3edf913cdcc442d237e5127bbf7756ffcf222a56c520011253ca6b7f4831eabcd64c966f519e31dfc826e09fab96328e04de02ce4e755a1edd42b8bc1a28899776b09165f395b0cc67a33a7f459f55384cc2feae4f7569f3bde662a0c81b249484a7981c4f43e34759bfd7d05b26acd6ae5c47951edf3632041f12a4974a39e9aca5482f82e6e3353c3a8f96966965c662f9beb2a414bcfafea14f7561748ee1cb3e4fb20c6053f0cf3fb65d31ee30515137e25bc7b2d9da542f976ff43f06ad70125bd144a390f818ef3169622f5e1236ecc82652a27f4eb83a977289b4884bfa853defbbaef28a35e60875fb1a5de8c07dbab6c2c0f8836edf3bd6089cca4d64b0a6bc6ca053faa2987c77c7b3595ba5a36883b5b1971469209e2991a4d924205fbb703ca8720a853ddff84ed1bf53df0d6ba4a4a4928d3e1ec178870a240721ff2c6dab4c834c056817a150910ae44b965a9b70b13278648989ed9c09291ff385a7bd22eb81e910c3d7dc84cfe8b3af5bdd5d92d45b6b4771bcc0f45e595914be2063e879412e9f26e52646cc87e2894f0d400869816958141ccdce12b6ad2ba0db6be1f3736c53156262a61d860654c320d277e51a7b9b73acc51bace2a55d549fffbd0b30e7e2dc27ed632e62f298ab2d6b597c9efcf7d52a10109f4ba3705f18b376f7b114233275bbe55c7bc7f3b69a1c74c3e3fb35c45a6c47dfe0331d84e610c3a083da7231eade9a2089f74433139f9fbcf53754c684b852e73ffba60332fc0ffeb08a546d89d8f05734853db21de7a5786087ba8c86dcfefee41a130a5247efd31197da764a0549e0a9935e66cfe25d987de992d3586dfc643414105c113ad03fc38e894672e63d20cc2b5c492b477e9af8fb8f8073f4a9874142926ddea9a40012e4236ab004fc46229a70f493b5c8cf989d91d9ab830d83063781fb4b4398eed0f608ea1ff9a2eec8fde780114837c8a5ba7dbe4221d33b1d67732594713fdaf086de3a71e4b4341d5c304f3c6e92843c8ca14821ffcce69f5d8e52584781854096f80140fc12f01c1ffdbfcff13f17fafff2fcbfc7b83feafbfe1f7e3d3acce1c07a0b07a5942181fd2fc21194b29abdc42255e7dc34b11879ff21e07ea61b83e33505096544c03148a7a5a1e240ce48ed97a6f8ea5159e9dfc870304c113ad340143fc8cde63eb179fd6d9a33fe13bd37929c268c2657ea57916721073dd53048d0550e011e7283fbca9724652a37b3376040bdbacef04951cec01651b7b24317ce67201cd1e6870fa2f856ff230fe0dded8eb2a7ccc43e65ed1f316178c3832a7ef9bfcebba38cd6a4f214c880a821fc2156364fa1b87e9f182f5cc2c0ddf29ddefa2b164357fbfcf404161fdf33ec189a7f1a1bcd729c71d2f0637db6566019049caca83334366e62b5e20f1a3951ec0159fbd3c7492f7c05bd9a08e93ad1a73cc4612275d9103c37f2ad3777dfd31fa3f2fd8d9ff090b86f5b72e196f62318925a4df04a3d6a2adf040d0ff6bc19675f3d28a23a464fd6fdc6e6698623203cf08f855dc935355080f4d0533a10f51010562ad9ba5d491e0405a79d48e761f8ecccf0fbaad5504ac083266d6da9380e19f17ecfcff800563d8fa1b07bc5d12319b05d6efe3755cde2f42d0ff6bc19a65e82fa3dfcc917fde3ea63be21b723a30f058d86d7d6dcfe8d30ecd0adbb9045cba33c25d32d45ec5a850c368dd4d3f476410e9352ca1789c2e6b6246669806635dc027062289079beb41050421501c8ddfa3ad8f3460d9d752717f45cfa968ff5898764ae13576a727ff52d0613d28839a7a522b088941d88be19620c443da6c215d183408c3fb43f0b7fdde0fe90f8381307f1808fa3010f46121e8c342d0878570af000b213f5808f9c1fdde0d370505236503e92dbf3568482b00c1e0dc79e3ff917878d919cbba7f201e46e31c7b2564c32350b311535b72ddebf5685121b1db623a0a2224be473c22bedad9261eece13f94c43f60d010efa67e6f54be35685f8d2cfb7604c6762269316b7827fc7571f98e67c5b65fa00753676e77428a67baddadfff1424daa7f9a10f36711dbb5e08f1b3702db13ab7555c9efbe80a93b0852fe10fc30ffbc31eb16133d3ff01692752a3bebc60ae3e2a2361f233be5426d21de5b366b3ff5c601e2f69b06abc261a50a17776df05efb353e95b38532250f178ce5e629e65c119aafa7122eb9a0e2ffa7862c08d797f49f7668ffe0b5573afe41a8e339f1044ec8ff2e2f31ff7aca2e2a5e046308f941d81f20ec7f84ea7f7f92a3390a4bd440d81ed078207ffdb11c3e02b12bbb5ddf2ca72262dcd65019c9ca82e5f703fcebdde3def1319166f789bfd7f8a2a48f71687f9f3d141434a45e0d8291433a3fffc11b170833ff66fdfe9d1199bf645de042f2238ebba1fb66f1917e654cf754e981156a370492d57ebbaa93cc691a3b047d4806a1c0b021cdffdffde2fc6b8386100fe9fc2c87d0ab2142b87e2810f4d120e8634038bf31218c8f09217f18bc0b186c4092053e6a8a631e3458b757383bbfd4a0d17e162afbf1ba2df3fd251f5ccef977302bc8712c3266aaf049a7dc6b90d0732950ad29d008de888760c6e88d9ad06b031ef031f1fa988c6976de5565cbaa85f38a21339b5be59c50cc2ee6eb94ae09911523d0a1782cbc957bbdd99e59f7f984371ed923062d3c23e20ebd363f68e619040c2fd0796de88ef5c4787d6568f2d2e8d98f890603e37c410d9de0cb1746c722b0744a60b1bb97e58587c723be6b6479b99a8336ff5d96fc7129e9b9a250cf2c08ab075c1de08a20fe930a0f89b0e5cdca7787483fb468eef8150c754c8240315e3d6403f421c0e6b8c61f02bd57f47ce684611cdfb1ace038f74b317aef73138144d948c5ef1b8057cf3265fe311acfd7eb88a6ca49b86fd6110f6e0f763c285995953b99541e1b8067dfc6daf46e46c76cf95cafde679bc8d671ae32c4ea2fba9467f9495f5908d3a781e91bf791e8e8a915263ef9ca5afb0768cbda3969031e1ff46f2254aa5d00520330549c9c693d61504aaeecf7617f94c7797125571bb2e5071d05968beadce8150910cf24b534fccaee5e597d07674b453a5d4ecf29967b698af49d47d4b74be4a811b092511cbf62cb80124bb17a1e8dde381481296ba578d73c11a1e1e3e4e161605b055a2fd72b946d581bb8be90db9552e07831ba778d32942763cb1e6b0ccd38d8c200dd02acc6dcbe9ac92d256b03f4c0bd3825830ee2e45841265635d4623cc491550835f7efeb6711db8ffcfae5907ec91424ef2b9b9b34915e7418987a43ea4f2ce1d0fd7d7eee80d9aca4ff9bcb8e89387b8e1be7674dce2fbe082ef49c39d6595d138f7002e02fe500bd2d82b2e28b0e13763ee7490f580281b8aec944d89898e4cf58cc893f478848c152577c78c20809815148c387175e61ef3ada2c573dac0ea98cb7fc5984292a4c4130e50795310e5afab48f76469ae3f93c6c705e9108ea8c13e57a46c8a4dc1cfcc0a32ff431c163033a56b3a5e5b39b004612bfa00f0fadf2834dafb65119ed4fb5c440242859ebaae0b49dbea7cfee3b6c57e8cfb1e3e069cbcd893029b3dda4d0b76cb0209a648267eeee10fda9fe817b9487d96665ef4bd69f215ec76cbef19848170415cea35ed257ad2fa4021633838be961196d2eef579e96bb7789a62987dc18490a97a0abac81deb2d1af445e2243438ed01d85415ab2b7b682dbba3b7e1443843aad0ca47c4cb6982c859e0e2fd09c53519a18360c53c4186239e0182fc0967f29b5601590616ac64736866464d56554eea8ddfaee9f079eaa4a7c119b81e1e52fec91f1050774844f39e92693337d780e852ddb44e8645001e31532c2cc52950b25e3dc4d2b90425bc4e0170e7e8266029394aafa3211ddb5d5bf4f29c94da70999c2906fe9014093355f5131f09d489ed116164042e6fb8e20dfd18d8c94cb01f5ceed43c2077350cc3f43208591d7a0997e294fb095af5dec96173c37f0033cc116ad24f1332eebbdebc732aed20499095a6b4f7ed7a83bea886bb22d3f8606410695b5d626a0d12dab161b2451a567960a23ac7d15ec39c340a2d8c60b76054cb0edec550a8d1f45a44d53404fa8b79fbf389ec12756a899db25890c1bd63285ef8f26ad39addfdc7c6a4bb9052fac88df278723347ae3283232b498f7e51a972d7ebb6c991bb02b488b35b3b806c69afe30da2e1d92846c392b82b5743a2e4fc5ee780e882e57c40c4d8461ba75ccc031acf1c9936e44f6117444de1e3830d5101e0fcf558915688cead1dda1efae0f814a530f9e7d80a16e688102b1e23128f3b393c111992cfc74990cc45da9e6c74c40b7aa9785ca1fe9ccf7f215972b7e0efb61ac4a50f355977b7e7f71f9f7487d2f8069714ebb95afa0a61818f021f1b085bb19e7316e4b8646fd072dd811bf8126c60a80f5eea271dcbfcfb8980e0c81eb88773e046b9af8895c938497d41eac6cbc94283869e73b66c717bddc086cc57b83e24facf1a2c71469803d6dd293586ee3879e37201e1624a25f101f28357a20af14f37aca650ba37bc709c7a3a77762fec78eb037200faf28d842081b0c335a1d99c71d9bb288ab7ff4cee1533887ac41e64ec033f9255005a510110ba82d2ab924edc5474cf4c481db685c93b2b5f904f3d1ce62238226d872ba5b00343710628179dbd5f5b8613e2aaaae4b5fa14d1f79bc8143e2cc4d186ce8ff191664ef3d62eda794a87a449aea770215faecbb752405dc595f7c1e1de3bdeb1be763aeab7a12d2c60dd9b648b1cb2e030311b28815828e5b1095128bd538df175b205ec28df8d60e87583b7eb99f1f6b1e2185225b050abdbcb8f2214172c3086057a0f6ad9fea69045d50498836590c6c85cf7ba1aff5d5568cbbef37abde1e060a9a0364f1f9a558e66b8652e1d6b44a6d6d415ed2e07d5ab7a70983dada1d025fc69a9f83ebfe8317a4dacfb2745450664b0ca4a7a4f6cf9c700f507a440c554a44899e528384635053daad1a8cf286eb0c66bcfaa58ec2c1f90c91e05b1db31b5b0c24a11ee09c3b8f5f9dd9c6f35a206cf5182a6b20d1d4338178b46433bcd6d19b7c2b451250534f7cb68d38193725b9b0de139442c59df3aefa749523f3ce8854570cd1e522147c1f8799ce3adb71555f6da58efffa3978539572bb3edccf7d5c5ec1ac076afa12700b16a4277a1662eaf1774bcb8bc4e56f9691d7370c18cc180599be8dd8f82e0d1e388d464d38f83601b7c9c48514a3dcbe93a5294afcee51361b8d8eb9dc4f95807bec926b2d97cc7b6b3368735d85cf04c9d0019768c16af38627b8f9e3e78ff04bc13665c78b0e0327b644c2a200c6d2f7fe14a98a44ef85fca76316d2aa1ed4602700ab9355e9474107eccec50346638c8f3a03c6078fb9aedf18870c19145b497d2506a9cbf8c4d28f05ebedb15eb1395215a2c86d7e89930ea245f709d9aeae6b1f700785df0bb687b54ad65b7bd011be3ffda09953e7e6cea26c4b0d6c2d14f7f29d637877effa216d9e3bc830633d2d029fb60a4b788e98a328e08ba72af8620986ef200e9a09004f0c83f8f8ef561f02307f10e961f7ca1379c71c5257e73351a2c39847e1458c02e2cd4f3eb777b90f884b41af464daa59a2719aebb71833f1ac65df0c08ad5e87013953e7c5f0ab2dcefca603c20ecfa04a3943917e064c6c5b4b02d24b87d98c4d1d50708a74930b6839edb93802f78e050787fdf33a7f3d5edb0971da4659f835412da899789e3f3e935352964573972170c54461c3a0f81d6cc6cfb482cbae36da250ed0ae5e1fe3f155fea906afe409ec72f833ee2dd0d6a3b05ed92745cf5effc2931434f610b82c275e0f21e6eb7f70c1547bae1612ab0c1fc735162d11f6c0468f5a5d092b6496b8a3d2bf423f82ee4b1acfe273ff1e92273c99f65a9fc273fb26a2a2390e44ea11a8d92f866a8d318785c65f3e7c8585e3dc6054c54fccbde9d7f95111301248c6718e58480ff8bbe395c95b77dc094d8cf6cc9f070ece70f4cb884e743e3dda07022d7baf1faf1fcfb47edc2734eb7f4f109b51ea974d361b12cd886309dbda5f02522f47eacee36ddd844f55ac6c7f18522419a94ad17ea53abb95c5189ba4a91e0730af15d935dbd742bc1d4c9e5d62378b59b364b79a119e4779f33089644753880257df19ad99cc677050f51afef998377d0c9c5cf51ec4245d1514426f82f718fde1814d7d79d3b2549d68583f578878e1dd95fe9d516c865a2104e67b469d823b0bd37bd40ff4f105f401d05c7451c87625fed93d1063f768ae239b6e7e8d1a99f961714c6cfd12c1d34e012041bf0043eea3d25e8857ffa01236fbe51775f105c60ec299b6c329bc8846949f00ae8531bc93e327c7a19dec262dbc626d2e7ea926717cf7c6d087963073e2fd263a606816c93e10057071702318e4cd2d1b4c2d642563702f1d1e628edcf695e97c05dfc866c2e3735bd630f2289fe2f24e8497a446df3a97b158b499d7b52c209a5a8187de1591a5cc3f88f900f615ac56738fc99485d538efa4436d09ad95ecf9db0ac1045d12496309b25d0ea68b94d7f87c26572b22cdd344be649fb33b2d4bd3b6a4041091ad612f783639689485e15a84b652b28b5d6d8f606183f2fd0c971d7bea681604a43edcce370a3aaa09a2646565f5ae78a577e94060401d31db3b5e604611be036cb35086be3ccbc336357c89aa30a58561f61ebb4da022f97973c7edebb027f804b8bceeeb294bad19af6d1576b1d790d068025a810189126a417629d8a6ab35af19fdc14638e0a449e975f72d6567be8ed53567b372b7c430d10881a10d8e49f29328611030be35717356486fcd68fb2271b3316deacd23da5876d3543b018e3a24d26b620bdedd8452aff690cd45d1dbd952d29fb39300ff32dab087f42743e075752dc5352ca84356d0fabcf16d9120603eaa2489b77b3cdbc8d76e0cd558b2e9c7f5a71af2cc7bd407d48b73677f7f7f40c7b85158f74c0c890a96933e90fdf2f948f33ae2272eb14c4e3832d714067b588046d58ee425c4e4b7adf453869fe1692a480ee5fc42b4002bf84445af289af8c8ff5f0c5c3a710a2f67f1e447e6633ea4392e9a27b8fdf096e3415f44c48b724780787c40efef7f9ff4a034cfd5fd7f3580308cf1182e16aa6540ff96aa6c8b97d6ca3f721526ac856d7e16c3fc354dc702318aad2e2e6e7c5cf0f90e78204d3ce684697c465aaf9950291f50e7cc1b70cd163f7d9b73ab74aac91ec76f655fa3c6c235b6b5dc1edd6d359f444c4b7e7ef11b53dfce2abb4eee5c06da1f2cc18752717129b940ef4fd0aa917ecc568213b7071a8583436a5670b4ed96bd05f41beaf537362754de0e2cbc87af493b5849e113c6606dda6174e7e106ac8f9fdf27a95f0c0182ff1ffc7c1f1ec2e7778810160b19823e2aa4bf7ffcf3f977a6f375833487b2259d6ab16b5ace021fd181ef531e7ec2741e423542bd6d59c935c81ba9e9843db62f8b715572ba068a507d42f42fe8f850634394ebdf4c4fe10bc043a7bb0826c332445addecd4a0712f1bd31f0bb29a7b1dde6de8d07c9b2a648701154ab135ec039d4fdc8ee10b3967e9a1291c5b3ae104b86d304cb12d6f5cfa738127310f2ea70236629f8b7ff391a2248e3a9b778886fd2db6a0ef93d3e3aa5dc7af4067ece6354500ae0bf45292dcc7491f4383a94104381d5a8b0b4b78935d9e43328051b2d9db1b49f1ae4e68dd702031ee6d65fb7a0e656d2bcb3782a3bed7a983e20005f5f3530ab997f65cceaa4a19b757b5216e6f39434879bed7060b27d5982759009187440e6ecf095cdd60e822c4739f78da3dc5a515ee1ab35794395f5dc5e87e87037a9c9567a4d285b40f386b4d4e322a1ecd8906597cfb92f0e2c911ea7c5c8e992808deddc939a07eb7265e96781485d8cd6d81e88381582a15cf325bddb1572e4005a2c7ef8ef036c414a99f9d1d296a69173b4795c6673f1829b018194f497c1e720b7ac651d5388e282ccc0edb6d0b2d4607d0a402c4c6d944df2a6b3b8cf4c261416300f4ca7cce2d16b687662d5de3f8b00cf83b1e960ed53c086b132a5a5fb065d00d411c0cb73159822fb41f4bbeb3b7b7b19e05a1f0b7070727d91c09ec39ec1fe71940e007189fd84792782c7b1fdaba0e22da4f11f393abb91ed3f29fcb63186713df677f38fbab7e8e319943b59af2db471c60c34a379c84022a6b3ff18ef4ba4e9c9a6b23b65b8a01d1753901e634c70f93b855022842fe31dce19b750ba69f94ae3bc634d75989e200039a00c2c14e0bde3e380a7d26ecbb454a8214c8681c94f04c73385583d12d3d70e0be94c9437731bbbe239ecfc1e5ccb129e0185a43fbec9fc7345c34c49921e50790e2f63197b30e32081f7d9a6026c5ed5091ff49b275e3181831ead7b607b5e60d866ddf23bf49c209360c61dd7c481f9599ce408fbe374c2f941e7afc6cf01de511f0f6231c18d070f76909ee69de530847361347f5e95035741ffeb85290f3bab61a5063ef040785f3499b5ab75fe47409f793d5a215241a97be54843990fcc931ff880e14ac790861973ca732cdf31069763ce2c1298a0fefd2ea5de335c23e9670623e03510d07a3e365f33a3e64067e46115c6e9a6c22f1cb8aa07743aed06f7b35fae24006dce0ee0aeca4c5807777654637dfc7a41aec7db6cffdb7259d7d42d6719f99c1cb6b3ce0a0cd2cd573322e808683d87a22cc949651257005e8bb3545195c959e030228b1249de9570ccd293f430f070229357d8370e6bcaa5c859e53f52534733600d15c11ada96ea837b6e7546ea5ee27a36fd31ff607a900cc0227459287fd7e8fc0573a6b555983c6f94235d8fdc10b7363b72958fd5f6a423522d796678549891e0049d86e5d035bb707634f8ec9175bfb720b388408ecf01893c7ba3984c2310a47baee5d3f72250ef03d3f8d89192f69fac86d5831f11a95374d3e6ab4d5cdabe789b2bac903bfc860d58c87971bdbcdcdc7f08a1da6c8c03d584d5ea1f2a7808b4334239316380a73994637bd2c36e778b2e2544471dbb21779ee699b64278079399cfe81231118a56d6c08cb247e5a5ce14a197b9ca221e195233ca716cf45e6f7b61931472a9f1d7053c7c20b56e9d7da6e5c099abc4b194fed8938bd885e49d1b2279718e7e0d701deb6e6033a236931b68f5f8ef675e1a29a9fa75911a7109734d485f5af52122583cd5a2965a4587e72afbb2b81557781f09f7c9d11d1ccd6b98c9d418969de1e08c0fb002e20238eaa36782ddb20504b71efb28ad8f2f8b314dba754763a06d7902c74310545ed9b42cb844149e447ccaf54a2d5bdd07be510ea8b7916b3a719aa86491936823cf43d3ab81e6908123a8fa2333f79a4eabc55e1e9644c4aa1f2e6e37b203b40289434ea76657b5cadd69781bcf42cb2aef7594ecc4b68e8d210bc3c0303346244f02ccf6f7d43f6c0eb116ebb436fa42396c5d19b15c6c4142614fa0e0f8c536d0a60c4a360c4fa85bc38eedbe69d5943894cff5bf13c5e96e60f0b3b3f723582df7482664e0925e5f0830cc428540f6599b7fd8c5f02ce5cc5f59f1516557e4d6fb2c40dac0fa21a6d1bdc5e57f899ed29b32333ab935de55b340d403f7962a762382bece38371a1f180924d8b4c7d6c4a515c6f214bd6514a25bb593ad1e270ffb673a903867bd70fd0c6bd58ab4372ec77906b6bdf32ec352a6c833efac4cbc60bce975c0ccadd021408cdf3bb9526da5f289c9ee8af4127cc99d10f12ac52bebb1ec67c6bfef5a52388a4beb0283f9c650ab7907a6805ad756eca1b196351adc2a67a590e133a4956870fe697369cd59e1560aedb1d9c46b0bd1607f8e2eab0a9bc86feb5fa9c23777bb30be075e1c0749c904721e7f77cbbd22112388ac466eb08f7b1d91ec347ab6bb83b04bace62391687d2b075520e4e78090627c15975b79b7e17ce6ab1d045a4de269340906ab3fa2adeff483570d468e12651c74dd9d1b3e7986e79323e5c1edfe9442f1d801e7aea3afba4cd5b122d5d04d84bcd0f653128dd0370a7e7e3e57df89b1f4e8bc0e517c54a9cc3489ee05312599763ed15444fa5b693342b8fb9d7f4d5278e9d3900f5c93b72221b410dea3452bfc74c49bd8fcff1c5221b3f75ba400de3f0af6a7800caf9ad83856f61913422371834080fbcabb9b40a8d84373e7c9469b08d148aa823017bf3332c1a450f8f8bfa93025570eb281a8591089259378a5e4e8fc4b77a693980b344d172dd07fd9c6d3b0faa9e4b7bc435eb4dd69987d22fa34bb08fc1d72de68322338f0420590e91cb2ff8660f1eae5ac277be6a3fbea88ee3e9b764badb49d5040f54cc37cc2fc6af151f881fcfc6f464cc9c846eb0f4b57a84539a7610961161a40341395d34f193bde6755a8ffc6864e499b463068e442b8dce56ebf743a5508483f72fdf262ea047fd014558e2a1aeac8366e806c7c33a2eb6f6c00b4642be8d9e303e30cb5e613262645022f4886e4068eb552ca92b6c40f9f9d8f398af714eaddc396f0a5bf85f2592a6ac0161b177ba268d4423ed352f9e75c5d00a680cc7c4092e6d6f5f2b222855fb379c03763c0b74d12faac6d01313793b69021c352f85e128b8e0f7b45eefbc2d2dd12701728499f09fea60ac71796e5e86ee6d9b3da1fd39064dd6a8f1aee8bb8cd2b76d658073d7b7fff4793e82a86d5f1bb787b8dea3125ab685a27134aa5882d7c66e8176f860b8b3b7a6f6a8f75327cbc31e43ccc82816feb1c479b1d02f91141257a3170f3e0209bb5e7d957c0c2b14652f8b82de3fed7109345ffd43c9f5b6dd82fa71179c66a09537eeadc31cbb6f07c3e219501e505509d5a697e53594b9689c7949f3f4b8024c9dca1750fbf0f8a9cad48f070bb1a0b47eae65ca10b17ecc1a51712a97f379570824f3be543a68c8dab45d912a88cd8eda45989cb06efce9d36b0fcbef3ea9a98e0b945ca6ec24c01ab2969f3e41b363c86c500bdd61353d5791a99c40ed8987420070f77d7931b89d5a304618f97a4bedd378534955021f32540521cbf4fa5655d30968d2ff38b4739ef76610906e6dedfb57ea904a015ec7c36bb1073c282fd5910aec19eed580489f4b7e0269db7426a3d381aeef2c7d54722677c64b9eec107e928a1beb30d83a48980932c5ecdf49a1ab9777711cbf136fc81c4dde6f155af73f249a39d5e1fb4a5988325b813668401651614a3cfe9aa26936cf5455374957b27eba90acf58dc6142101a32d91b19a2650c54d2f2c8f8e473ecc5cfe74ba7533904ef67503c5e8493b0ff5b7c9963a44a67a9873980b98e320984833ee603d1b0ee87f7e098239e5f83f6963ffff19cc1812f8030309de8218ff7b83843e40981f4470e5b7fa9c8b88103b3e62f7aee45057c00d84f12161c0901264f98ffeb9130ab5ee3fa683ef6f159030ecbfcdefff9f7f1b3488e5d374a8fce04e8ed7ab541b4039f8fd3b278d342bef05a722469978b142820d205a6e6561ba8a50f92aa75a01ae526092cb2c37a02a91b7a65226768687bde0713d3421cc0534ee3f953ec53f553dd45fa52f0632f037ff57f0f1237e53c9afd9e85fb78a6b6e6767932531c347bc5e25627916e928f3db79292bfdd701f4ffc0983653fb24c3e8bd2c313098abe8fac58d0716e8daa0014ff1a258ca56770de2e251f9f75a8486b65858ac497b7fe7564c5c3fefc30a860095cc90b86f6df7c211edbb9b38ccaef175b713c0a476c2c492d009b1a48d56aea74a85b9a04afa17a488ecafc51949ef840a421b55ff1ba488ea1fc1ff005244f1b7beff02523452172192334d11fed8566ff2c8dc3ae53d491e3fef07f8d748d1bde3ff0d120329fe5ee3cb3ea28ba28030ff7f1829a28054bd31bb91228767e37b5065276202345e59034fd255e2ae99c9134ccaef4e73e2f43ff3845c21b1d290ec0f52f45bfb9f418a3ec052559bfa6de3e6752e5c44e3400693d133f711b36fc4b8a7f840ef2609be0f0507ca063771463117bb6fdb1c0211b545cc3b93387d8a722c54063f1fe65718de0262db970dc7fe6a328eaa14153e2deccfdc5966e0106c3c36433da050e96b1ebf05ac70bd8f15dae4a85bd7a70c3ae73376b3ffa8597243c0fd59fc291d1f5bbcd704b451b049f79f6cb5576d2c1a48d6dd8647615f1ec3d33cfee66887d443d03c12b00a62cf022b781ad26622043836125773e4836018b396321f79580449d9a11c44d2016dd3a79447488e3c470353d4df1c3261cba4ec46c2a633b143466391592eaf3c01b37ede33464518c28a43ba442aa62ec406ffd6c6ab8f776a3cfb58378601d7a3c07f84e869e31ca706fa76f89d03843cddca4fe2b6740d0e2cd5fbbbe1466dab660b600801412c297ffca03846c6f1d8f9e5f1c784ec166ef55e57e887c2b7c5decf0f408ed83a2b6366894171e671b986545594449ea519970f4c69a912524a02073e0860b23c93e0c4f45d111d153fb6ad0e6670817b8e9fd2e0786e90d4ab1b3d23dc20603242fab1905b7b4f3a4a523674aeb59db8e3e4e98a0206e9c28b476245eaf8a83fc0ef2db9c45e2df7225bc736a77792e6220c15411a9d70e8aaf50778c157320bb900a6b2a228cb36553f6abaca36740ed68a7e85c0140ccee7f42005ab980a0a9c16c040fd068b026e4d4bdd927a0b33b2c754ad6724a1ccc92f4e1d2b8f893f02a35afcde2dfd0593247be8d5772a26cd49144fc46e331c929b96f591f2521735a785bee7dcc9909122a5c2b019ea8c89d49d2f05149c493b36e56e1162f832cb12bb72e2a52535062f810f595602807f7a57c39e54ba54420555c868e49927f27693919215fe2c5d28f27f01524493dde42371451632abc789951b14c2fc31e65511525a1cc15ad54dc8b1893aa61a603303df73795a3e6fc02b1b8efbf90e68be6a75d6ba6b5d2aaccf17c5ddb971808c1411334ed227dc12bd581f79481a148926587928c56cb04a25577a8c51d57f375c0a2a15348fa1a953321d3b041ecf83cc9bd70b2ad59ae445f7a01bfabf92e7db4941468a28df3fddaba0cebb1abe0c4cf84cd077119cd0ed791495fa00012de3cc2964948100325254eb7e6a3f503c6e4d12266245f89cf291f867978e8537e74d9586deeaac9551307f90a23b6d48d1165fd6f70f6946e1896dd0f6f692111dde8f359ef1c6638fed24f0571f39c794fc4f204562251e2fb12fb49b24a6a695647aacb36719b2138964deeb1895b472e665ab1179fd6f408aa2700b7739e66e7fc0995b45d34b584ce00afc39edcc85f28037b7459e442920fd8314fd418a7e573f7f90a2ff245274613cc03fef6a7b27047bc8dd98a9c0e151cf881f9a264eb22735fc510cd1ebdd1fa4e83269a4e815b77b11f5298dd34bf09265a5327a9d5de9cd2b5126b10a1eef182d34310a75c9ff7791228bb902c5747beb2ae4291697fce7acf43fcb7bec7515d311e24495d337b2cd0bfe2f428a0ae62d90324344987a4f4d0a519eef3f63f00a3cfe724ce421d27c249170fc14febf0729ea89e6a0868a5f3aa297c6309f3f383f74a2b1481d75a12edceefe036e788d11fbbf0b294284e087d0ffc342e8cfe13e21f4ff8810fa776408faa810c6478390df5fe7a3a0d46295f48b97a1fb2412134133c24b9534b361e5b206733f3c49d4e35465b881064273192ccb3e74b2b13c9a4aad38cd55127b2357b29b5ed75693c0531f4b47c8c8916aa7b084ef92fc3a91d9a39e9ccf28e9fcafe2313af973e9115f12d36a1e7527fd2f408e4c44f100e0e49950ab9af351c52f072724b7b9cd4dd31684bfc6f7c6af27b3f7f1fc2f1d8e0a3fd4b854ee51c37e5debd801292da5efc2d005328e5c2bd39694a19f962d058222acb99d2382c88181a3e80a36f2ea17d644d828d053c8af531c141bf91ac211fe2047ff45e468765fe81cd7973ca1bdf0dd067a703193a5290949edee14bedcf65675475f4d77cd1fe4e8ff62e468b5ea76bde24948596b6986dad8973db2b1ed2f3c7e83173132c445129af31348e0cb46aff3ba352f56e4c20b938029e6cb8b7622a8f4618c723e16318ab3031f3d70336d3f164516d56ea2a459dc247aac827c4b3454099cc5228f5ea7cdbd6ae2042ff2d24e932d706cd60b505c23f929b589148b55f1ced1a43e51c409d8aa3390cb810dfce3b0c541430203781833343eb8538a21af01a2370926b3af3ecf744a6f9f8360049d1b2f0dbbe1d71444eab3160407b8c8485e567826e5176b38dec1bbc6972019e6d43b30a4377e35e7164e972f98743e66f871ccd7b530dfe8006a0eb2b40e6057e0bcbd76c2351add3b91343bccb195ab99d694efb6d2d73b33cc179df1691a116c7b9fbd838f00899b24bf56480a40c322423689e3840ba54cd17e9fd670575807b039452fa3367a707435dbec1bca4611a79fd93419bae3787f6c15ba2ec98d6701e36c0c0b2e05018fa599e42ce9d645f7fd2e44630744bf35138a9d58d2b90c9903d4fca2065156f956a767cb6548e61a8a748c6b977d3f649d88fb0293c2b1031d0d00591e0c9539d13078333521bb60d7b43ec19617251fdaa05cb2184eeaec75f11a0408d359150839651659eb4293fd248cc0d43fa0ab6ab96ef01040c678c798720c208a6755de5d706c538be2e5ed468e1794f27879cf0435f8734d6f4b3c61620a1a07c42bd980dbca2be1f2fb00b5ccda498d5e8499d3944fb8080c2cdbedbcb721ebbdeb673c6f9eb478bed8ceba6866bfd5d9e72d0d119c4df031658b7392570a898de51d98e78f0af1a139fff2a4e08123d6743d49085a74d069b8b053ba9d1ee2f3f1a2f7e065c5dbb0d530429b56d39e0c8794ca9c53a580ef1dc3a7a55909b20b85cb87a11d40fce552b5a79ec8c330de8fd31777d581bdd40a49434e083c9a4581f525260c8240b83b08cbff07166dbcd04cffde0aa7a8989abbd212aa293ced075266b56a395260b5adeee747701d6e92aaa742b0f58590a73393748d003990dd3b17d7a1ca0c0a5c9439e87db84d3e6c2b5570114272ffeceabec2d52ab7a696f1e138abae46c1b1170c51738dd7302b161b2df1945fab551938282c378ec9b892d89189b7580e674d8126898a8fc2c2be9cf932255f5c69ec2a538127ec902ff29705228bb4565e6468102f7100fbf86dcdc39bf2544f5d036d5969121585650ea6cbcb74d60e14f7c243307c9b89faf29d7865412aa1f3fc10d7802cf609a8c0a7bdd698a133c04f9925da02de22eec64e2d2476dc328e4dde172528941e5b1ea20e39235c816b529b474404a0c265eff3dbea3b54dd670b4ee37d0692a750b86d89ed15aca24a943b499f6dbf811a7caaf8d5f5fe1af36bde1daf231fefe65f0a7d342d17350e8351a2ceb25bf606d68be9b11b0f9ddbb9a649780b4da8ca039e3e4ccc0f397412524ba2ebf57d8f45065e8beaa62ac9ea9f4c2f057b2d5a6e7a5a760269416e727545163f97cf1312edf7e9efb42ea0d5c12c6a3bd293a619c9140fe884c0f3dd5cf7a56571f12994efdbd856af6d771bd640953bc365bfe35467949c8f5fed8cbd641ae6d3930389829a93c71496cc8ae5c6fc32016f6e7aa71dcc47e48ec6b7dd078f50869519343caeadc3ef0ac925d253e709ecfdfd818bcfaddff62255515b49413e2b51fd4bb28a4f17eddfdb872f0afb0514cc6052c0ec72f063669907934db29ce7c6d63fc7829c08f854a7892d3fc33f2977d355ccf9030a70d8da5edf0d63c8ab6d5ae935d7513fa9292d595dcf5937f825abe52d66fb2830e0bc60ddb1e0a3796d759178c891ccc75bd0877ac65320c030d852962769ebe70f78278ef9293cdbde8dca79740f2c6f88a352b2626c1df8bdd64a66306db1f88200aa7e88f8c3784aa7fadfd1cf865fafe4aa3efd5c13f0c264cb6e78a9d3e80e2bd51fc01eea31571510ba9d678b728e0b41bb322d3bd4d51d7582e6b7efa72e99e491b5eed320c49dc7fa8365613d318f62fceba62a914a1a2c46ca71ee5e558426754efae485f258a9c8537f90153f77f764b84735f03dc14ca5c35c128d7de391d64f5797eeba813c43c692fabf7a9b46f52a580cce9a93cfdfb098a91aa0b0446832736e2db290df1077fa3f955e30feeb5d462e4db95013b55519713f8a0574506f14fa5187b0c22cb1031d95ddab030a64e43bd5df489f4b7ea04a2a0dd7bb71e5bbf8ae77b6f7d54c2d3354f1764c124cb11ba414ea7a6502cbf5e1d7c7fb8ce8fceada330a83b49b99fb8583cb39824ede230d6257251ae9bf1568f307a1acc4b5e35a96414b191d9967f49689dde8489812445a2f304b43f8d8e77dd8de001a5861d2672b0fb5ae067e2621f221c38dcf243543eb453c309f3b06eff0a989eaa9e6602ea8a6fe854e20ffcfd10996ff033fc2df7727ff053a41ad337f6c1d7f2de53bb204e23321f26f29b97b4f7e3fc027a613ee1dff6ffeba0e29fe5ee3cb551c7c41fc6fa7132095fa1f3ae1f7f687144ef8bdff0f9df0874ef84327fca113fed0097fe8843f74c21f3ae10f9df01f3ecf1f3ae10f9df0874ef84327fca113fed009ffc6fe6fa71320f8217dfef0872bf84327fce37442320a5ed64fb6c4dbf5024c588c7747f5380f60123e391b5e342c9dceb78cd78f03946719326d0a142ce2946c1e6f3bce4ae0f30cdba82a5a3f44864e6f4e669dd903c0ee5185afe327de6f8f18e73662f5679fa7c79abd4d2475d9431c67dba2801d7d00ce0769a77cfc33524e99ed992d7cbe5da5f62eb51d67a3bb64de605cb96e2cda800eb27a8a7ec30dae335c124b41ce41ad140d5226f5989ed25383b639d67d931960b5decb635897214c342e1b5f715126bd9923374bc33d1267c76c894f2b40ab5a01d2e4e0a46dcffa76dcc2c6d432967da3a3204ad6de2d8ddee28a5ce3638fbacc007126045334ba3a2d0cbf05c6290f6df93090cba0bc03e391c3274585386e570e6031873431bde626382f9b96a54ca2532bea6b840d3339629ee6842a353b411221c0b1691aadbdd839489f235f56d3541000736d8fb2a92f550ca25e2c617ddee03106190aa1c431d2e1bbea32dc3c6f134ee59c3a8675b5f398232584b1cb32cb3f8e03520b8470797413a5a95eaefd0dfd1d6eed89ae6efe35d20bdcb796eba9b5e556e0e9fc26b5dd97c183dc6adb320d6775445cffc04e98604a9f9623ca4f3b7157b9e010679dcac37c350b2a163863117fb11fa6bdbb6f12a9a8948627e25570a813061a78174dd25d0a50ee2c27bff9ba58526accd7cdf49a729dc14ae2789bc2ed15d783d2709ff552d60fed3534ebd088e12576d7695e61a73e753ec55d5dd1a3a1b0c7f7a75bbe9c1da83d0d2a07522ab14e654f60a2a67b982b1e74367cd1e54b724ecaab01d0810fbe3317e82a8d9eb3b673c599d747753d76e6ec26933bc1e03650e6b7493003327b4b1f8b4d97451bd2082868816c6a296b0846efd1bfbc3d50248b5a998cbb04cf0b0e37451306c3196c4b654b61fbc295cdc74d8ade9a885a12c7767c28ea320449124edf4743872a9f5f89944aea2309265e615fc8c27c543be0e8296bd5dba70123354dc289e6736666c4073a0e5dfe72a5a085a6440aba859a57da5e95e2a5d7015014c85956cff1688f29ca14b9a4774ee2605a2a856f01773d3442ed6be5292d027014f1aedb39228b6d9ba6e33f5cd98d8bf8f9f2edd0490ac683cafceb402ab075b0202fa55384a4e918195ae6c3c1675c301443be13c8b48839686f3584397657cd06b62224e93f6a613fc2fa2cb26bbef2f5672b2afa659106d21849aa302b27a78f0a405f999b065d2206419c2469d314258f0b9534776ac4a635125f0752b6c83669082865c23b75282be1eb65b8bc0ba009746e2229d45efbba7b2523f8d1216d56330b0c148842853b51f8668b77c17cc27ffb9ae450c13ef833200685817ef9108d7b40037cb53726c7f9424f8eb9a2c84b3a57f8dec0dcb8cc4128265c44592c9d3845ee13209544f52cfcd6a8ff6a6798d9ae2b49ba09f9abaa159a0eeefee0039e84497b5fa0e93abe277194aa96b8187ff56525a95ec1333b36ecec0dcd03510253592159b47bd78f6103bd945310c5d9ca2c416071eef38d19ad58556268e9e60472bc6bf546e28137a0f74ab5c9579c8d64ab67b3e6f93426dd5b6986169dee2c2abbd62eadd85e31715072b225e172482684c4c53a719935158bff88254b557f50653b122b7ee1b8e2310837abafab388db73616e04125056c7f9e81bc06f302a997a3538523e2f194150d703ab53b46698867d09b7f9e35f5aeb4daeeaea276a0a6edd9d7e48d044aeba4af5480c4df254add8201f3cd3b7373dbeb0cbfabb82e251fedcc7307aa07ddaf1391b980af5f8104ec144ecb3b56236f0bedcaa13644e1092a18276873fae609c1c13159f0069d30866ffb463148147e603367a0e747df070301a1d4074e9462938e4fc95b41adf5135443393bd49913c2a8f51c76a5b6bb180dcd38ae56798c83f564e88bd96ba03250750931e8e5e05c8be604a90ec217d9378801be6ef19a0e1aecb75d12c42dc07f845529de32ceef5dd360640c4b6cfcce29974e155584a8531212879f30a71770b1a93cf9f9c3e99a8adc91c1e4c53e29d9d380dd3d31a2c2a8a1ae63bc84a67c70d514da01250f4f43e8da9818a3902e15097510734c504a6af3d5a2bb4d638951140573f51dc8d451640ee4e9d9ebf2bd651a8f1b8e585d41c0a7ae7d7c780e8d62115efef8c2acfe9243174a923591729aa451ca701be1bb234efc4092d5851ad2203b9891f1ef7724e494f6d5eb51393030e3f48856d1a2f1d73c1c730c285db32c2b86f42535bfda3f3f1005d4c23db02111500291b2562dfe48e80ca1b2eaa625f676a6c4e4ce54e4e0558c3fd8b85d3262582f2e27a9209deb38a123cbe55025141b3b48164cf688a817503807e52d3783c32c6d4cc3978585f65fb81dbf4b19d44a33252ae7047e92dfd880f3f707a5ce8b4ed5b04522c9273fc217a5df910d0d7d62e41c47c829d7dbdb40373a32e80413ed2a01c255293a52eaeaaf74fb32f466aca93feb592ebcc9d4ce9d5bc30c230667dc6542a89dcca7136fdcf40f2bbe5db548eb74e760df518573863d15050694406aba85faf4f87df99332da662217226f909abf0ddad9c7dc050cf73018a98dd68040eb5089d9fe42c11746f237bd3bfc5513850e53388d6923342d51bcb1214a731960818137fe07cfb97ff00b94208f3db37381b84ef3c7da41ea9cc8d20882939cb5207ea126fdebdd12a929a915b68ddd5471b2b05ea962789aa59ba571cafcc76b0c4044dcf33a77dbee12df8eb261d362df48907234fca6b796c8728215e57cb41523c09c6f1616af6a1b7e3ec11be7569041ce9ba849abaa5f9524703a71aecaef204f0814e0a84b691f58eb0850e1264f065dd26aea025ef2a593d309c3340ad6adf3c7025d8f89b315bc9d2f6f2faa96fa9aedea4fd125239a8c4be7cfb1e332f6e28eb1efd3a0fc311f01f46383f8e259c1e58317d0c98698b2d0262ad6e848f5ad6ab5b9e6fe23119744a5e0450e914f9b9978b3d8372a12fa40b355df056ffe0473bb858000793da5bc7da15f7bac7bc8ff453764e68dc41574eefc40e814e97217f22fe57a2d302f3af5e2256dafb07c7e2668e7dd53c5e2af4baf4027668ae954def6147c633ee88969199975e10c89a9b6c96f05dafc01b5918320456a48fee71b66c5418b1708b861e7b7cd45c77e4face90eecc143a76280b94693357a6e93bb976e682919f5ba447fb8f9e0c8a579eab99dab2163683fcd2f4fa5c0fde5a914e2f359ff0ea752dcfbdb2e2982212de3bd9e4a11b35e6bc9cd2fa1b8a32436b0f3e856541d78d0bd0d1af0cd54117e908b5bb0e4c446699c3557f99c8159631fa2ce155b3c40471b5bbaa802dc3f2d6fe174bd432649eea9f392dfe3d0098ec72a0ab9f23d04ffec59cf190accbfe63e28fecfe13ea8ffd6f75fe03e569e14270f0a7afa1c11d39f22ba4c86f5168126f8fd00ff9afbb877fcbfe11620c5df6b7c0995d91747880f7bf9c37dfc63f687fbf8adfde13efe701f7fb88f3fdcc71feee30ff73df187fbf8bbfaf9c37dfce13efe701f7fb88f3fdcc71feee30ff7f187fbf8c310fcff860ae162fce13efe701ffffddc870c71d082cf6a013c6e55a3962701d134bc117fe33081915fea21d5b60692773cd8170ae80edfd03affa6d37ffd127e2b2042423a1a6efa721681425dce7cb40709c0a22dd6b6c5cdd34b0fad7e772023d5a32c43a2f7b72b781ea5f0b1c1778a2f5d120cc73b2974b23fd37998970b39c0355a5fbefe4441595c7d745e9579dcdbfd1b1e48fd987bbd9e6506355e5d2e0195b056883c7930d0618093ee92af48544fba3104f015619549b9ca8b4dca1904740b355d5f2c062861a03e963b971b433b7765a30414791553e5f89f2af720c9905dfdf5733feab216bf3078f7625eab6842d4528951190c53af7ecde69a204409de5a7b55a547d01be416d78df0d3f36c2a3c0d41ef780b1854bb9313ca127c2849d7b212d91a0d38fe6c8e264eb4e576ce1c4bbade719c046a442e833c13b5f0d131f01e35063556c06169ed8ac774337cc3afb23c1d7ab005c804fd5d3db1b2e0bea158c982e5f51141ca71d86bb7dd4a9434b64c1a091ec540b08f4215d08494d8eb2ec0363a249abdafed8bfe6c67ecc5ee34f3545361df2a3f70911ea4746da84e2fad2c6f5375f52044c3b4719bad4235d038304f501c3e5a028b3d2c45010423f01754e5010f8dd66f6c39deb58cc2b6b4b371251c8fb572be023cd0b5cc9fc45146aead10b129b27446a961a5c8dbd86085bf4d6e5fba31f0ea1d02642f69ebd2f9d2e1711f8f2c5dfa225f297c276e1ef78b7918394d16adff20cceedef563dc99770ed59849226ce158d812c06bc0f01edb2941f83d3e62ea0e11fbbc0a1aa86ab6c8f2bec5a4c9398c93de3f444719bb950f81bdab21069f3aa7dc5f571fc58180f02d147f84af6a580f1f3dd4d66f33446eaad84162930f1eab30b4f6f0bdef15a84ec4c8baa66d47d92368e10d2f217b0755327e127b240f3dcdaccfe297fc04054459c05cc4f3fd98f178c0c2dd1e89edb584f8d64f1d3679f516ddcb53f7a8ad1d3c34772045ef4737ecb21f737ee13de66bcace92e21db996f2733075f0333dbdf731687bba9145e0b32da2173e63d4d4c4b3f2387610981d63456fea23d10186f03b6310915c42631f55252bcf3c08bd9cedf863ac3d9b614fe64a3dd4c3a23ec510f403ec99efcd1212cfb16719f15aedad2b027523d3e342cdccdff310e00885aaf51b8193c9bafdd78e9c449b14c7f872da221e3fd8c4a248de8f60cb245bc262431e7afa8362e793d3ba6fa1c3f0cfbfc792501def9224609bcd3d6768a58017780e567bab41c94f89496a3672ccc3a005736217d281a37d54eb7c2c7475e295b2a8452cfd65b01b90999f22f5ee3b4962eb2232147ef06c4b42350ad2e993305201e2e1a7cab2c022588447043e503d3f9b9d2a51aefb8d8389fa17f33ab7951e4afd009a8bf1733f60b6725acd22ec0bff35345bcc43aa73764e73651e94d165199cca4eadcb209215a06ac0d4c77d1c6034215e1fe98f7bd425ad3cfa5de121e694d50a7cbdf64f21cf7bd74f0d37de564923234528d0c672ab5a6bf44c6b5e162fd2adb4ddf7210cf23b38039f73f70dce1415a19a82e31ff5f5bcedbbbc59d44493623a299ddc278993ed21c503ca63b60bf5594771ee9474506f98904ec3f9062b938c9355960dc4c9b32b77b9005ffc3cd63c8a95024b52e8d3d4e17795fdf5ab82846fc9629ddc9c8aa3f5b9be81740cedd36c7cd833dac7fe25f8e45161561209abca198fda7d8815293af245f5c02b1bc61289fdc16767845b6f9e7c3e9f2043f97cfce21633dbe1c84ef82432d719040c6608c555d37efa90e21cde929dd421bd25df652d38f9a574352de9fa010bc51c204f9e6af9a17660f8b9693233a9c75c6bed58925cd1d633cf62407bf50774e13a784e5548fc8ca66b725274fc1c1916896a6be43da38867d85bd35d3c33220be39444d0a29bf1aa38e303830ebd64e3b70469341659bf226f39daedb0045d64a162f4e7e043213697e1d241fdb2172e74957a16e61bb8e841cc35cbf83b74756918e4597cc05976a2ba4a237c146f5c1e78689c3fd096bd8249468217149b6e3a2e8140040f8697527e16378de265391e6f07f50451a4d70fef7b78940a177aae243e6416322504c6a7c69d6973facea162c90ba64563700c37892a8d153862e53f60453a8e7b26c17433ee367de0d37af39fb67dd11436a4abe8f21522f01d98d31454e709d6839ca0553b6b475f47a23fd168cd1f6314da8162aacb27a300fd66729b4149860bb3e13efdddcb0b68677f90efb08c3b50f56368302202d2b1cb545a8929d86985ccfdf54994b450e453ade706a0da1bb607f58b72e112e090a10eda0f05bfbb1ad19f8ac1ec5ee7f9226204c64e60576df0b9cc2b4b307f5f3ac1a70f238298a42468b8e245395ec4465b5eae667d02cf978fe064f416532c1d3eaa9953fd7fecfd755496dfba28fcd320d2a520dddd084877484b0825d225dd29dd215dd24c5abaa4bb0441a425a4a5bb3b7ee37df73ae777f6f7ec25cbb5ce59efd8633cf3dfebb9e6bcc7fd5c0cb8eefbc39ca9a26fe827ce3f4f268613b354f6786fc51d8386cf873b32fe49f0afdc147f16b2ae906a2cb850102e5b89f1f31c07ccb3289b830ffe293fd3357d288fb69ad73acaef921b4fd4b10e144513622c8e8ebea12fcac702272e71ee789f67df8e36271bf5e0c2e8cee539ace943e68c103819d7747be6797c81f6ca62c6ead69b548ef572f3e32b9aea3c662e9d17281bea2a9d2178570b0895ff4f27237bfba6137e234429634bf9fd1a9de585e882094eed7dc2754c61ff21d4ae9f2fe8cebe4abec70a1cf4405b8a32f2f938de15c14e7aba54753ab2b82deee4a383940ac4127bae9ca2bca0a8ed30c40be88ffcae9b9abe8badef7b36df19160719a034ff4903517359e50bbe2b1b77593f44f2842cfb79b8e0db91be7cc83538d36a854d8f138e4d256739f87f019b294211988921240542ffae64333daec91336d80f8ca1f68a28700aefa33734525d7cc104e0b810469013fe2c471bf6711ca922f76d73ba6e3852eef29dcf297ad2c885af2f98c8df7666fc19dfeed12edf89cdeb897873b0309a90274a5039715c80b7fbc4d117ec5cfab1abb9b7dea3d95527c7cb67df8ba993b75cdc4839646e86b824338b0ffe33ee23a9d6f599df96ead007899af74a1de29fe91b142627851d9af35c7c4fa03f6703b4c831fce3d743cc5fe0f42970d6d905da33c722734d3a835370e459c63e75d5fe72810e5f9056a18600432373696530c519b53e6d661d91fdd9e8a14a206be8659271a0c21e60ca86723f30262787c254af5005ae2cab9d6559a6afe8a3857df472c742c878b491f406e68af4e26fba81e41f20d30d81ff06dd40f97763ff846e800704148fe06b4b0e7a9c190d89645f638f120cfe7a82ffac1bfe38ff2f6fe77f97ff47f3f3b2cf6baffc5fd70dbf3bcb072f1b7e3d20bae1d771886e80e806886e80e806886e80e806886e80e806886ef80aea07a21b20ba01a21b20ba01a21b20bae12fe3bfb96ef8dd41dabffb0f61880d6e80e8867f5d3718e6d4662f1676ed47b264437b4ca2a88d3ef8503f8a92d932eedc5b861f317706045f31b0723f6919b8e8cfee24c9358ea46bbbaa33f06e3ebc71c1eb96ecebba07cd08b812328f024719f89cc99e0a7e8f8c49ba552d732aee6651d239080da07307c8751b3fba2d0afab4aad306b5a94e315b255759870228f0b4492437f6d4f2f3f500f1971b8cfba0e2133a8b967e3a4582dc1ceb412268dc80e4a0fc14a71cc54b52809ca4a0dd9531cfdcba109a7ac4debece043d128079958816549d704abf652801be265d5ae3e23f7712119499402cc7a1dcf01b799da4b5a280ac9b841ec5ba60065a5f5232dced225878bf667e16706e65272623444e22ce1785cfc6c35cbe3062e40d9c9a8c8a57f29d5e7ab0981535bbcf2b3b34867462800ea6f7931afc9b1dbdaf40dd006223dc6e424ef98462442938374181c16b6c8de6a25a2a852f48c8215605f04b6314b529c23dbf195cb6a73e07d6fb06f7a22810bd9b188d684c0075dfe03960753fec1faf49ae9768dab06121cd52372f5e1ceb09baf1159ec38c5c9ea2e1eb0467e5d267812a9783cb878406dd513a87220fcecf15f3766ae3849dbff4aec4f400c48793e7975461acad963b0a9fe6f388af55023f38779f17963f9c2553c49bdf02985dc336afe83c75a128dcb327a88f98b5f5c3296625d470debc7d3c84eba5e6055e5cb067049a540e06a86722eb53b4efd508723ad7583b984dd0721fa6d77e40e7fee3fa9122fec83a0ac52beccc54f43c5038b0af281dd90bdbddaeb61b37faf6ee9b673fd816cc21a621d779510418a4fc6342f65f3c794582c3f2803ab5b13ddce5b2440be8f9298f1894f99829bf709943511a368565e6da1ea12da0ffb81046804efd5602140071778ea38263a0ed71c93a28089e1e82041d033b36bd9670a657bcee62b53a392870acef9693352a1e455ef128cec2b4a0ab4252199e526986f07d8d0a137610887581ef36427a84f27d6c71ad8c2d0af00ad2e32fff80255b0a88f6fb1e96200f909cedc64cf9c3e00fd39eb1f334d4a0faf7373e027d629e9a0b93869ba82cd8cc00ad1bced4395a9667cfa59e02ed829cb217fe6ba1d5bc79fb109e414d3563f83c8069a13cbc5d3887a7ed299721c433622b3720bd2aa3421770d065721f5a5db11bf41fe8122a647f085c90b9d0dd698177552e8de9b0d4f93ad431c40f8d4648300bd2d3f73eb2387c1d7f53fc36b1d7da1a73fa9dd248f6678f0d12083f2b5d41999e07e07a602aca52f5ee7486026e4293f71adaa141288cd5dbf43b6b4b9aeeb5196d05883a8246ec17832921c2c83eb2ca3afdd6d5c03aaf74b72c81f25646623583f41160e39165d1722e63f94c34a435f7050ddbc153ff4db71bce393a9e3cb7527ab431d092ca9cc5654b61e4d4ec9745be63b56fc81f9e410bab1810dbf7811310cda47c097a29ab5dcadc3b7cb19988bf2305a42347d46b06931a8475a872dcf7f260445dff71fd444c6fb0b22a901db188c287038da1a2144aca834cf89fa7e427238d0636b39c60f45267fde542853714542a729d5bde295ed5b9849445f86eb7bc63f46dc88f6210113dcfc9b2da6f82996eec237a0527b53baa7b7b1769208b7f61155db9d6c9ff18b4d3964462de7992b1083355921322ae078ecaa9d5c86fd8e6324c0c15a797df01dc6151f838ccd0dd628d76ba053806cacf513d737c95c648f37008171764f406e020818c136ec14f21692c0a35d6fc84c6a07bcbaa6dd554d88bae63f066251f80ab2898d670f3881cd691cb273c0d2d9d44044b9ae742655fbaa103b9eb5ce03318c15a5fd4a6a838f10c3f07bf8c05fdc98b68f2baef8c6fdcd5cfc52c84e90c0c58c0c3b25b5046e975b63d7b70905c827487b7f67cf523532f51e43ef1a1285d2339e0b6a82579a3edc63010f7863f234845d79648b818157e3efcddb6b474dfbcde0e18dff39cd616c4376efdd2ead7fee3a52c764d93b8780feae03b53f8ba255c09ec65106265b5db2f88bf17581f7df2651521f6314d1f8a92d51ba22aa36d511631ec3420913adb0dde4d94852f4a8edeecb391da18fe6c9b834cc0391ea7166e6927680938d9d42ac0bfd76fc53ed9f13208d7ddf3cee5a8d6dca07c1c9dc57cca7585ef047ece116509c845b40b1cb096c48f30dcbcd4689ac22acf70905968d9f3193f5e13002f7e664e8e22ee8aed8fd97d2ddec18eb7c46404fd94388d509cd49bb9f315f515e3fecef1a3bc9a215d357a9af5fd98283ebebef43773edc743f6dbc1d636b01f61e518a0ee69d63c9bc2eb829cac8e4dad1e651657f8c02cc43168f8d68b512b349775d470c0f07e01470e27acb6c3a72c48324416e5895e197dfc7b3172cb3c44949949a80230b47fa55f106f88ef6986bbcfd9557ba5506ec0d4d5dfee1034c8ce4648cb6c0ca8fb193eae98d94fcd68928ea6f7a292e60f380c64ad8e2f0b12c859acbd18d8026b2bba291575b90fd75c282675a6ceac4514d767ace194330d1fd7a5c3d41b3ec9839ae88ff5d29fd53968739e42cfe7bbfa888dd9ccbe30513f513c7467381faa17013fb1055cd25b8c3037794cbe6608a65b763a66e731b5bf5e58e87bd42e164939ea0b485e4b359fad4ab7b0dbef4d2426b82472913414de2eee8f1b7c851b15b05750044d4bc6bcf12602bbc250fbc830ad4f953d09a4a7ea7c4602ca3fe11c3ad1219b3e0052c73c31db9770a41a1d0e748fc51f2cbb4cf45db196467bf84fd1c94f45583c023fab5da7e3dfa0286173584cbffd13b1f1155d94597022c9ca6903e5586c9f5e1790475e58df60b0aac5737062712507558b43c7cec99ee6ec058d4b3f2dd3f0ac00baf05ffa6460b9891702352f12537c5b695eab63ac381fbc3589ff52ae2676e24d00466eaf42a7c9a732e3f910f67f46f266b96ae9a77a237298a0503f20478f2c04fcf1ae17004b482818c3019023f15d8deed811e1cbcd6c293202c254fd04d7a9d34e536dfeffd95d19d32fb7e293a1f262e80657211a2d935e70ea41db689e6d93ea9de692f93afeffdc09ae17a93ab992bddb2f77cf56b1d6bf6a70e4bfa320f29e0f846e3bb32ab3be3d06fd5822b8fdae1e33743993f7edf4dd17bdb614950c32987e721bcf3f55312f1cff72810e68103fec8bbaea18123579328800673a9b064e61dccb29ecebc720186a0c1d363b013b2f5542aa21b4867dfafa5b7c56fd01f26c7c9f7c75e1741389f5db7ae9ec3c8a46520f982b52d7bfe907d27f4c3fc0fd1bf403f9df8dfd07fa21b2d2b3ff86e0a3c32b833c9be41ab6c5279f43a97f3dc17fd60f7f9cff1cb7f7bfcbffa3f99f4329f727fdfaeaff0fe887dfbddd87e8875f0f887ef87509a21f20fa01a21f20fa01a21f20fa01a21f20fa01a21ffe8bfa81e807887e8004e807887e80e807887ef8cbf86fae1f7ebbb7c3afc310fd00d10fff07f4c37c3774052eea4f15ce843743b7c447041dd4fb6a9c4c8bd717779b6d6f283ee780017dbc6f35238d357189553a55d1ba0d19e1a6b3022bfbe65c2bf0dfc0a74a400afcf6539207394a73af7ea4c7f44abd138b87b5dfb17788663f9452ca5546133d74009d7897969f1dad9e1df2d8ee2d6f1f3b934c29216bc7bb9c738fa5edb51779b506f0d52b75ecf7a82dbff89e05a996920fb79b17dc95950b881c58b3983239473902f4e0a10c59a773be1f18d9de2dfbd57c50af52fc2617ec6ccf24b41806c7e2d781b29f62ed55e325731acbb541f057279ebed3954f83cf2d0ac45f24b4bdcb493c94070ab6fc48d6dae3f917300556034b68898f5093d93ee560491aa4943c22bccd2204755a421ff170dbf10508d655f9cbdd0fbfa9bf93936cc63afbce51246cd866dd0f069fd213fb3de736565979c364edd3ace9084db492fe1e678626347e30f607d33070c7560c180ea0136f23cd976de4f9a971b26a2b7018676f7c59f49342fb91b7891b98a77711c3998dfc906b2d748bab84889db6ad1627e1c4a0299dc93cb2dfdb1307b41c50fc73b047937d479c1bf5a8853fc89e1e047f2fa8997e3cd3b63235ce5d0be6121cd79428ca65a2d0aae4b2a5829e7826c1a5a06bcf97bbc233b89f94617c0377b8df738f672abd9f6684d818538dfb1ec4b19c68b95e5f3ebccaa71d8f74e94c05c91cc769bc24b135488429f5d6db325153fd732ca35f4f2a1025070449b7eceafeb87e8683e5bde94cd56c16d7a8377aebeae4460c950850a81050b97c2dd62bf19a0281ad2de2b67755554442de0f8e600ec2f2162dc1b78e865045d5e6657b846d02ec00a587a9ca833fe6986a364f08815d3329074d5279c8cae224e27218f98760274d32d012271f6f37901d2cc22db05d46d6ace2f0399bfb4c41eb2b724bb6c621df660d309a6faea916cf13c9f1a69a6db0ba300b09874bd24bc2d82fba277e249a983a83d4e4a86f5f9017516d730a3dc29726d2d1cae860c57fae39edb9d22b77275d09023e8d442b8a3511a95645c4c432192c85f7a1e28f087771c82c77607b4e3525348f41e2e3cb1e2b2fd6d2e4fc2f9fb09f937b9edcf1855dab6309f4f32a2fcc56a83f02b2a829d24fca604bcc6b441e922f1abac2c58db9564eb36949a97b0518d9d9ef0137057b729b16260e34fdc4ca8bced66e29354bd8fc84ce77d5579549b1d53c32202ab72b0ce1969854e88bf0e856d9f75d074979395458aba7e60c6ac8eef60ef8222041b056833b68cc5e96cba9c21531323281e08903650febb73c326fca13160312006b51923a9dc28145f5c1359848c4eb23998a483efb49342fca9bb84096398573704bb2ef1df35eb7fccdf30e6edb92a0f7f3c81769054ef64750241ceb325b320b2580f6edb58ceeaab551ba5ef99c63a51b345ac536934466aff71aa20de9e0ebfd5cc05e8b22375cfda50e8fa55971f69b30fd2251e29ccdae9ad34b19fbd67539a3c33fae1f8f65693cf0e3a53a2d8b11464a7c6197b0bbb43311e23b4b0ad539b39436ca0340c5f0616c27f25d63d21212562697879fdfa9b3f673094c2ae3e34f392493874c36e0bc604ae32e3be7851a89c4a64199c9f3a77647042d395c8361299952e82e379960a13e73b31ea78ad92aa7df437506cb2099d23dcf9924b577cfcbb7f395d3f83ae07562a3d99f39630f1b20ba677f868a89273456f9cae0b51996cf675d9f20153660f211bbb8d064168aaec8a4e947c8936f3c6c69ae8e389b369ca592c4d049e4a29a60448d220b7aa6359ca15bf7c750bb1e5329354dfdace87a61c2a90fd22ca14305e89826b52a0baa6ce2d50c0a4e7034115b3febb3a388b5f1dc70760cdfef68fe06b4516cc6e4246a71b96de9b6ba09edd6656d05f9f9705e17af121e0ad8e1160b03fd52d3e156b780360aa58e9114e474d56d980fcf9190b331d34dbc2f06044483f64115272fb6e60f3c82def824e429e33c18e1c9f467c73ecaddfe99d054979d1ffc005f8833415e505de2081ea4284a281f8e2b3ae68482cb7d6bd37c84e7ab02565c503da898c76f269e403dd655fa23096943019a64495d6933cd99930a2ecfbae90d70fc8e8246afe7d738ec6780e4e925e575a318919208db12f1b55a7a2f3192bfd50278abdcb3205d1f1f3d9364d983329783e93a9ef7a4f6421f9fd6577d2bf4119f12f4b7e1fff02fb846ac0e12530ae969be5e860c37921f2ec0c2c07849d609f621fde9de0e000fb458465f74e22d83669eac7c45e8030a858876c3d47b6ee6a0697109a12f2717e05b0ad12bf7189945dd9290f76ad3838bd64104f2cd7e5acbcf9d0924e22606ca01b4275cc20b4674aa2204551bf11d91e8128b7c16a9b2c014a65c67113f3fe355f0967874d94c4d565aabac1e3ffb4d79569216db88a3bbd4f120d0af6e08967fefeb0bacb38643e83e25138c4d1506387c23b137aa862673c66a8c8eae1bd8d16ccf1a57074e5e68d3b4833ea30f1d3d3582b40c1329a55bd41d3fd5c51b2ea9383f12e578f8fa02b8dde3ef5c4bc358b589b3c73fcce612ac4e4de676246a000dac99e481c7734f30e773abdf8c139b5d88102faa5450eb3cae730f8c0cb686a9c86010f4763e128109f18ad9c880058f53212524e32dc96336d6e0662ec6f4eb0da60df91be0173a024864276ed65fb9c9c6bef138d23fea23f6353e1961aa907f1cf980f092fce3720db8aebeaaad55859b88ae76b4c967c90e70c02ffbba39ad80dc3ea3aeba606ffff58f1a88ffd9bf003262575a8e5cc49f23381e5ed04e4cdc2178caada914cd795264edb92b88f40dff3f9f4179d7909de150394db92246b73d7584b3567433b356e936eb6a496ecdc1e4cd96fd4f9eb931de25034cb27fe2b99bc8bfd2fd305aa0b4e06ecbe384eabb5f359e199f0d909ae13b2da33fd990bc3e4bb8bc2def9c28656432f96a53ca829c9990df1bfeebbfc1057c0157ad1eeb9c0b9268a2e4abc4498e53da35d4c127819eda1d8e6ea99dbd0e6ebe74c0279491380f1a5097200f7d55efde51387ff3acd01ff708bae8db4c1ff819796023691acc15e987bfe903b27f4c1f50fe1bf401d5df8dfd13fa801132d5e3c4a24434d6e9498b78d83bdfaba62df85f4ff09ff5c11fe7ffe5edf9ef3bff687ef158212bfaffeb7b2ffc6e01883ef8f580e8835fc721fa00a20f20fa0000a20f20fa00a20f20fa00a20f20fae0bfa81f883e80e803883e80e803883e20e883bf8cffeefae037f928bfb93e883e80e8837f5d1f701a95442a4c33377601e129abdd58a9b8cad74cd38437f60b9676318d68337d010a88e39143bd443a3996d042e1896a5a69764a83c861ad1701ac89b69cc7ec86605cdec6eeddb5d02b4ee50901554993e32b4b02826715862cb1655706c536fe6b4520583f9d10be2e1e47ab40430f79703de039c9995b6cbc2355af219d11dc9a381ca05dfdca2b0f82e2ffe9e4aa12ff110919a1ab5c24d43b163834bde32e6b3f580110dfbc7e1395dd1415f690d4237f4df54929f0506b00672320826b8fea58a35616746d10076445ec9ecc8e523429e659ba1b0bb89dbf8bb5c0f90090bf159ccb75a481c3261515917a98acfae7f3f26b7820135bea50ddff519d44c06bed47610ec2dcc020d6cb80a1cb6bdce0153732d476a7aaac030dc3b1f2a3f2d2c9e0a1635aac4c20956b57d41709f50c4dca6b719c546a6b63cd09fba31b136f996663cbfa26b12a3d803a68a24b25dc4427d75789d9f2b9b5f1b03b37350e7029b3153cea43310a61077bafbdfc0ec93c6049b65eed1d7c281cb9b241c9894daac2e3144c6e732a43aa05f283d1e66603d5b8ebe97768f7912803376d55d39c8882f8322e276c23479e95c0d540f4d3c41ba78ffcc338647b85b9476c9dbdc4f8f0df23d916e92a1e785ec4e1026453e9e82ffcd1ba04ac7199de930d87efe0d011677f147c8d2880a188c9382506886b436630b917bd42894f99ebf5ae5673d5a7d92737e3c31d160bddecb8b8fdfeb87e928a98a6a94ee143485db64eda1adf09cce19c7f0812ee8d1954679c0bb33d2b04654a1648448cc7a28cfef3297609842c4d34f15d0eb45df2ea5730df5ac2f6a17b00fc4116305650c316b5d0ee4734440e0aa4380e5a9bddcee3f6183ea97962630b70af1d90583f78f6ca3e0ef22e9f1cb73f6d1af745a273af4dc6974a68de16a20191621b18f82d43da9fcb9e0b7bcbf5b44433a25536caf873d22ce9bb6a92b46f829d6986f56a284d8d3b7ca5464dbb9f352470b8d3c8969cdc16d9845f721885123cc18eab8bbd140a7c8f9e2d9e57c5be2d8063be19dcbcc56ba682331fc1ef362f11419f3f57fb5e724cdef8db78737322f628fa8394c88eaef7ec06e912fde0fb7b2fa03206172830347fd4251264ee06fe4e905089a252bfbecaac597dcdaeae4a660910ae70ac05df50d5c3701c63086d6aafa3daac4e7a58196436776cb71549be687e049ab685b5f702d08c475e19e049f769367eb65fd5d147ef207adec970329585920eaa72167086ae9037bb21bd8b2ab6e6456814432b9e0995ce085aa36be8f4ab2f03b18eedbca7cd84bd2d947b3798ec2a736fa310f01c37dfb650117bc55ea13d3003e3469ebbe045711f15ed31a5697f036ba42e5fc4d704b8c4ca98554fe98d26498801e8d24c33a4277ad21ebdeb9aab935e75c632c14de5b2711165300db7aca0310fdeee0a4ac038528afa60be3a23638121d457ac0842807da1f0192927629d572de98feba7d833ac283d3a2951255ca98a7a937847f8834316d14f8ab56b57fb0447f977cc400e346900367c2a738342e203228925a648f1330cf1266cf0ca506078bc85adb80f5c31cf5fd831bdda225de84d670e37c57b933adac56a48e9e47946ff467f780103c0603c187c709047627a618de12b976fa577df10a21aa59a1f3fc8a69cb212da07d6634663b41ad172764b25b0fa92a1658a2f138404c587a89ee6a278e2100f393180ce1e597d6e6251f1cc902c624d76df008fb83938dc7e5444d268ce059f74bd7ae068c97bb312acf85527568268cb9f6d725184899a99f7e7b8ff9c33a79564513de0eb342f7d9e90517454d2b05d6826e3b67c66f1de604c2bb69e2131c66c674405d45f0b8a689e327e95bfa05a08aefde9ea3f00cd6e1c4074313deda54464d7e8a705d4ad9916821cbcc362688c8515078889967f44c0703a9927ece47f38d80d379207ca1b2f93cc8390831cc77a8bca9f90859ad97af66fc13dcd61d4df1bc8f90f1d8101a72f8875a887855d8494a4235329c55f60d3caa10f555f793e9ed052c60e6d00bb8919b5d149144b452c8cb0ee1dc305ee24876918e192eaa40b053d710ff88c110057596bfcccc0b3fda902fea096fcd3154bb8284c872e79cf7e7b3695fcca443810d7e65c06536cac3f6462209d8c133dbdbf24dea4b49550bebebb8d012b50e7085e0a87e1701054f115a1bc651b6f8a1e5c2ec75423f34e4f7ea88bffa198247dfa27fd5dc21574acaf2fc0758cca7a6552171ee3f4ce1a2741d1647cea443763ec6bf85433135b9fbd80771d60edce18c42b9d3b165d80a988cbf222508ce034bd3162fb58637e923613e6530aae03bb38079fe406d6a986ada4f75b20d241e54e590bf7860c7cf6d53c6f931af6056ec63e5b3eaadecb2a595efbece6a226bd6fd909f22ae97f16c8e33614c55a2f02453ea86289336ae7aa24193151d11a7c2b0b2e761d669ab81d198d6fd6338c09132c6089b94f14b5b1efe984a648d28bf394cac19f1948dc894eb4e55b9b3bc7050b482057f1b859af3dde6640772bec4be07c5ca4ba6b50c0f29d3de33b2691a61b896e60b8d25ba0428278ec486f36147b27e250f8141d655f8d4b6c0a8d7f0839a74824159c70aa4af8cbe066d9a6533ace9f234a3a12acbe62ca55268c6ffe3e8c8fbc931288bc7e27db103ee62172b4ccb746f6da0b3124bb44971957cf8923dcbb906a9e03b47428da530fa0b88d49ba3f45d7a6b273a3a46f9cea23c6be174833b8eec26607b24a750af39926a8b6525e7897f68b634ae9724f65d79dba0f5d14da65c65e2896fca94e0014e86b42d80aeabadd1c570adece6801cb69513f2eac7e061d345906c288b6ceffadf59950b930810b6f1ab5ca26340fd1d8791f4a53ca41259946a53e5b7927b2bd79f43f7aa43f58fe3f744244fae9a31524020f29b918f49bb8a4d36eadcb2d89ba12d3c98a07b5fc6c10aab1404da37539015d26e19965965bc8e6c3db32d19ee6ec41cfb8424711e7bff0cb053a7c81da08dd2ae19cb1dc2bd26fa3f3c59f6c59c36f31dfc0bc8922bbb558d77e0c550f2c3d99c330bf0ccae9ea5f19d89b9ea376974a3a65e28713351e5ebe08444cf411847e0273058d1d00136140f51f3441d38c053a404a2c3001a5e5aa04f7d9862d6c72f2f2feb9323ab4b14c8fa16f435e1e6e4bd9ff7a15cf7d4894a19edf09370e5eebb6e231678c89af6dfefac6c0fe260e05f30fdf6328282841244f1cb60af65bdec8d8f73cebb96f353cfb513b7c01de42ddded595c07cea65f1377b642a8915b11094c85df4f5aa26f4c5589d0c31e09cf2f315b2b5cd7d0af4a088fd24562821dc1d6783f510aa0345f53306c4118d8446320f982bb2ffb16b04f93f3d36c8fe1dbb46fcfd5d13fe09b751403ed448e95e227c4dd1a49f191994c0843bf01b96fe9fddc61fe7ffc51dfc2eff8fe697d4b86f8bfcddcfe8bfea3648202d46fc7240dcc6afe310b701711b10b701711b10b701711b10b701711b10b7013f711b10b701711b10b701711bffd080b88d5f0fa45f877ff7f805f637cfe7e01c73b3107ff37c04f937ebffab6766a0fe261fe23a20aee35f771dc9c83839fb0349f7eb45e8b06871278d5894308955f6dab7ea4be7736de38de300d93c4bbc148698418884c92da6eba20cbe50bb83b4ba8dffebf9ddd9ac3db31fd83ba9f629b6ade25a90a2fdb111ab356b93116b109371ef708038ceb4450c3b4a092e0701a6bc7cb352cee9ade88dbc166ed2fa96da7273511db2efd06e9c3716cd40172623f117ed0df60b6c02635eb641d5149567eaebd19fcbcfdf74fc603cd49b0126eb7d9cda0d597c4fc72512aaaf2ac436f325c83946e22de98d7129782814aa0341ba249c98c545ff8e4be89852d68a7754d456d95adcd2e83d36ff2d2ee6a8320c10a243d047a16a5045f399a79d7253930e0dba0e283cd21d397e5d528ce50c630d16f39f2565d4dd0516e65230540877f37e9a0c37a327422c7c35a140c627f7e109c0326b19adbfda39caf841b4a2f44a06fce890ca25bb967f13e9b8840331b4c1a90bb26482f1a3c5c2f694c53938df239f4bda757dd3502ba48f10e63eacc8aecc1b07cf8c10c2a451f55e4ef5b11f9e68ed70a84df4f472af3dbbc22d315e4fabaf340526739b6496c3834705b5169b1bf6ca88d8befedd3081245e182724553bf13705e0186b9dd4cd7035072a166d1177f10b4c676fff77a492721f72cef07781c1766828202e8aa0b71c203f18712c783b1893a8cc35ccf4e9b31fc08a6079eac31d943682f230aff572c6ccce5bf27568c4b032cbdb748fd0733c06afd29e9ea8d160d83f79affa1ff543b500634eb910f7b564aa63dbef05653a56e410ad37b1ca1e084cac4cc2a9dd034af74a924da10e022d0ef78379d34b1a3306fa566bdc4ac5d18f2972fb4f443c8d008cfe46fd1b33a6e3dd727728e9251e42aacdf6c1cfcf3f8e96eaf44e53b697ba02c4f1d68e38263d5f698f223a34788600979b09ee8abb5454c10bd20c442329694090ca7d820f6b6564beb44c05ccff96e6206682a8d041136eee8ce58e492aa1177cca69f02e7af6c8865b6928572fd34e9a8c359cfee67d8da552303c2020af8443062678de1bfe3c3815b60ca874229e1bf5be0275136edbf578bb3cbdf75f88a832c0b71099ad71b8c98f3d590d7675862f67376752b856d2290abf91b7c9bd334e330011e213fbce09951f56de89d52fd2bc02d5f9ce73e0f70c8278b91b1b8b2372d0014fbd39dd59c431ec033c828cfb2257de1d619ccef40efd899930d58fec8b961b21e027d3ddd43d8032eb220c9fc451898435f4f511cb72b75609ad84d17a3879680c10d81a591fbd9764f950df7ae156ed7edd19e33696b59b40e51879c075a7e5e00cd026183374b5c1e66478f5d8a13210571c1dbdb3ae244ad53eef625bb6b6fac10852bb052fa79cdbbadba8dd2cb76dbddb16b5071267b6115b9de7112bbdb81f1dd780018b3e8e1422689a2833b5652cdad227afc306a51db25d173f8f1c672b472a292ab8ca20954f0d8d142895a43388a119f3972cd2fe58b9bd16e58723e7d7df9418ffdc05e9e6bd8fd41dde61b27f19d1bf94dcbbe8568b61cc508eeef111ee52368f57ba0fe84924cadda40d0a13cbe6457567655fbe9bd478c1ec792d39669b3b1dfe7d213d802a2efaaef0fea696a4b0121aba4b93e1250d9ae2f3c28bf117237a86c7bd6e8200d5ae8c8e8f2afd55f2bb95fd268c016b65cdb2885929496d3c3c7fa241372363c0fe765f54fb3b8fb4a05acc47f2933775e567969f5dabdc1596f49a82ea8ce652cdc0636737cd170647c22d16cf70d5985ea262e19fc0073a7ec2dc6588ff54741c5208421b4bab5964a57fc6d24bc3079ac0f0a580509e2013d96a18cebe007bd46318607d2a32cc5cb51ff920023e947e5832df2fff26286fbaf4c91c8d778928da831e9c4dbae0a438874ea03e418f135dad7b944b8815f5e21ef7837a1a51b78fa1a95306b0d0fcbec5f85443e5b9e39035d730fabb2cc8a69a569dbcf0b175224cbf73790bc061a93a40f4532ec0419d1484b8e98937953d12dde5f4700f4ace368de847b1038ce95fc24af6a30afb4c4f4f2f9eb93b7f30dd636464cf0c95b64e345460ba7c00eb280aa7c8b4d02ba20b333922db2eab3875e89b0852f4ec5ab9b73dc376fb849860a774967fb337e35950f1f30c0adbd99b64297e99517681e592e080930573c32570cb7144ae205a85255e238431c4685e2e7f6010f96967f4cb525f2ac3c565db039810aef0858dbdbdb3f3962228aa691ec5188a11a121d45275b2e14fdfe73b14f993fe6fe20a7a14d88e0e0e2a1136a43c2b642736281e3df324cb6de8a8fc206fde27977fe4323d590d6432cd6543c253e40248b5b8a457293638e30b9fd18b08879ca5737228f8e11afb1a28e414b6914f85a8282f3c78d0753737d8cd6009cc3fc5c2f3a51c7443ab7f000218582cae79b6390661422a6d0789d54ee2152d796a85dbdc05d20b132f122e256940174a1f6d61e36b5d8c7a17f94b8d0feefc1b131b67085eb40d0f321f1b30e5bf82c4931a53a99fa28da37e1af83583540cf31621df26aa3bd039147c1964861d790051cd62fad2c95cb6a9dd887d96142b03de4c5f6968213c377c222677418fc7b92f08b3b0fd665fc153bee1c28ee4a72c222547e73c08a3c034c4167f381a606937d005846c8205960ab14f37042cb2595b2a51c8775e25285ebb0d134d19921a585846837533a1b3430cf125f2fcb431a6a2a314fb537b84e0c31811440ba7e58cdcd08f20c2874124172fb3c785341645641f93f5b537b35cbc26aea4a7e9d166de734f7510b99760919b47c1f7de54937cfee4e3f949d7ec9e0f560b675b3b8df200947c45315089214173ddca4ea50b762daea33d305382cf26ec851710e87a4fc1f5e82c4e0170f61f990f347d9cb03132b0fc9ecbd76de11177c4c845a37169e6fb3c36769bf49fd9b5022cb3c69d2c9c41313eaaa291800bc433931fb5c410f615c0d394d01310b47b03f31f9fca308bfff11d25fe5855326fd81403d47fd8174d9bf5794cc7f845c8ba940496b5f48f5dc8ffd6bf75f5083824397e43a81fb0e45f3559d80d81b63b4f3cee64da107a59add3d9f2d3173b61a80d6bee34b4fee02c43266d5658d4edd41acf693830121e89da6d0d47613da3f5452f8533d8702b36a7e1251bcf83a81eed9cceab3fee78ff609ba030a40b602bf7333e1bd0ea614e049617ec6e79da8575702765089251e144b742359c2b09b5317620d3fe7a810e5fa0b7b6ffc26045b0f1234a901b4dc9923a93bb9721bc2343f4160a0fc3cd44e21ef0614f245880d7cd99193d5cf81c703ed702fb1c6744d135b43dc3935a423d70aa91f406e68af4e26ffa82e21fdb3523f0dfa03f2f68fe6eec9fd017e7da0efc9b3339f26bcb054d4f7b9b6f2a5d43537e3dc11fd6177f9cff173df0bbfc3f9a5f74c017bfefd757ff7f60d78cdfbc1d87e88b0fe443f4c5afe3107d01d117107d01d117107d01d117107d01d117107df15fd40d445f40f405445f40f405445f40f4c55fc67ff75d337ef700ef375f164457401374c5bfae2b9c86cee4169df12c08a83b5be0dbde9041bf8ffa54fd2e54116b3f91c01c735c09c825b1d68ff3138bfb8ba194927764fa2ab57914ac95beee9f1e1e1a2a8f774e0338bb749d5edc580b67266da21f157f78253e75761b5d82cd0863b4717755bf93048cccd8b73678dbf778aff174754b2d73cfa16afd2d2f551d12e495ef19725108bc015d3dd7f16ec2ecaa659cfa6e4f090f3ead2e56629128f2ee07bee385b769a4fa40151a559ab7d5aadc1547122f95db5b044d3675f914f956c433823430d914c50898a5fc6adf7450bf7e5a55294936c7a893b6d0ad2f63a4b028509d2f6ee615890610db766204ee0c29caeba5c9b19df77669d98f1b0c8aa7d2706ebe941cedb70b8b03c6515b69df465164581d3afc5cba7e0b4f18b9a6968f916ae7b5abc2f13ea58a409cd8b776febec9de61ad84175c7d5858332d89240b72b2ea9c5f8b3b3212f801da5854f349162dab6b9e3fc9b8eb35442e3e6dba599885a2be2a677a3e8d31c905e4f2469854725ecb0963fcd43e798918e93e6ecc118ef16c6c64a279908970468f1b74ee07cb4896e33c8e6c30ae552114543f28d0f0138c1f55ed9fc8ca160f7e520e644a4816239e2d8110287dba11597344e166ed0161aa7bf7a83c510d65d2832ce02582c29f4c394fd663ff0a122ec9f76594c60ebccaacff7a71f990e020f9b71b303744e5eed56e5942960736ab3e27dbb72cfe7edd7bea6b8c18aea40dd4f45e84d71fd78fdf9aa49ae0552892c0310fa6517fde01dfc7c62ba25e2cdbc7553eafa02d2a9e00fb66c4c5f333f6e0bd6d6706d21c5e3a92e4c82f62aa6ecc07495a1c4a97f2d280a490aff007b5f809293e711a3be288e940654f15198a4bfe8569fa5abc8a843a5840943a2948c1213556b9b142bad2b0adeb0e501971e2350a7eccb4d5acab7336082ebb31a06055d5b49938ea1eb69bcfdacd5f3e5172288b4fd5b5beeef449469b055d23633fc3e2e3debd9091b14c15d4314cd8f5c10fe9b7c324b4883da8ea9911003448fdd4c80ae27abd2111f34b51dd4ef1778e2fa9f4a8739d7c2e4318bc10172d4039caecf3850285b2ebef841d1cad9cad6f170d16062775e702b3876534310cf7007cd194df88222eb48de0109c3f6ef1b233be0397264a78549ac37bfadd2f124ed0888aa0d9484d70ee802a4fe753d22682f45940551321db2fffd2cb1200cdac16403f237031a9a441773e590dce9ce934271f5b3417add1cf7ac0b5893f6050c8110719064739cf93d8317b5177cd053486699c2ad33dae3f7e9ce3ec05dc1545f2ee0479d673666d1a58b6e913967d9aa8efb0483ef061ebeec15bd73f17babc99979a06838cef109473636bd1539cf6dd22f0afe1f117b990ab657d02bfc3a7acee619e0615e42919ccb30e84613d573c1a9ebb96af14227ca933d93f5e661dba9043a95fbc07735ffb6ea1e0d6224a45287d9e4ca48b4dade4d9c81ae073d4494b9b977d72f1bbdf59ff7bfd306fd36e9ad2ae6809d6767ecd4a87302ed283f3ae4db22a9ced4cfd490b95c004aec70b6bb4224ea8f73b040522cd00a083f9fb9d954b690c3a2f9db6549f0da183cdc5dc155e2d835748b9158224202609bcd80e38555d6389cd585b7b664a774ab8c02db84686279ff7c9d1369e3c8c6b91276fdcf2bcd1d73e4e9f23bbb7c6858b590045379fcbb6b7a68cb5771040fac1c3a237871629d16ebf0a2bf029d9f9e4851fe851c6e99e0df12e14930540fb78cffafde192b96633e0818b9b3ec28092f6251df035bc7c9f3b52b1fc18bc8ca0c65933bb8c734911da752d78916af109b69d387924e0e6f8d4623d9c28b88e28cdf233e3a5c444baf07c164b08cdd223925c49db800670315e708d533862ef61238e5d11cbab19b7bd05bdbf0ac700f51d5fef4dd3252e880bcaa3e01af274787eecfc1dac0a812ffb8fbbaa33b632dca797ab84834b4d01403bc2e915d3194eacedeeb4b6d29386ba0dc7f0cb930cd3ba0adb8c5677179d3d5d30f9228dec4c23608e9714e982bb7975727a9c2f9fd82a17dab9be5606e7441603b4288725742335d2a666849126adecf8502b320eb5e875f778e8d4bdb825f624073dde5b67740c62a868fd4a707b5cc4f6c6dbadaed183b3fb7cb84df6148b461b3be07a885b907335fd42cb0866f7c8739ce990f9057fc23c8de5fcbbbea5333a0f37e0cc61cf4835042b7278311c8b4c1720335841ba44004dae1fed2f466e7337f6f44ffabb4f57d05580eeae7233f5198970bf6130b203da819bd1a29eb24312e0f46de49384c47762df7dc1ee2622cb4c0d234c979ca6974caf73b54073481e1d89f9f73ea975c3adb7c5a2e6be60ff335c78efec321ae137ba5476dc623c296f792c5ea1ca5f7ddd93084dd6a3918198d0959b2ddd7b9e3772678bfcc7321f1308ac69ea382828dad07c9f6ca0a55600f11d25162fc6368b88dc3577488d2ea327dc16fb2426ab9ed0071177744cc96c5f30cc8304cb8500cb732cb850ad01da69ace774c968bea34b56dc3b803088900df30dc099733f3adceadf9dd6553b6a1b8e93341192d13508cdf99e335ef6892f39a7188c71076ef768c4926e1d392057575e6bd054873ec4e97043dd90d35f786cb95080a3d6344b385fbe4b05181821ba6e24a4c6658a2c12b5e7ef69987ea6aea6141b02111ce16efd6fb8831b66c1426e2567cd3f6207223deb78a853aab2d0844b3431f88074b7fd73be523d1fb830e7fb291caa224ecf301016fd106ed190ba4e9beb840681b72f5bb4620c31552dfb6bcadacca52f0a3ab85d61d83d552aaf2449d3328774c08d9179f33735e780049d59346bc6e74ec1d333477caeed043a2397a21f1608c97fd280c4395fc6fa028f9f9fa251d98f23504534d41f07bbf854d720d9a13db5f2368561352aea20cdff1f9dd1ab10dcc3624607c6c877fedd9f9685dba7cef2e7518cae23e3e210e9b1bbb6f4fee353266994b9f64d98851bb6c8ac3f22f866ae25a47c1ca4b858b66ec8e145cd7fd4f98227ca05135b84ac79498be42ac9aed7ba2cc116197e659985558844c771d587d1dc7fbe2b479a5a8720d18e66d2d915a64deb01b6e257bd321b332e58531f84590c9b6c80d9f39a59da86b981370c67e0a87b3d4e51b44130fee238da3f3ff4a719eb0f8f5f2ed0010dfa3c6b2aefd3544eea05e6716c665f1c6379d62f9e6be83dfa76c5cef8752d600e487e985fe7cc6c20138c6458abdaeff39e5172f929b014a67f56be3d709a156dcbdd500b73591d000e61f0fcffbf2787ff97dc0452ba0162594d5537021a22db5ccdf7a76232e6671c0de28f740b6bfed74bd06eff3ae6d5909b4cb295f406752d43cc9261baf1ef1b2d8c6acd9839ca1c85780734180a6e80fab6db81da98935553fd4043ae80b625ece101c5d3f8b4fc6669c85ab91c88ced8fb170d2dbe9a7848acd060993a222bfcf66ca7fbb6d5156b5d781da34eaf91ec19cc15d993bfa10dca7f0c6de4fd3ed006efdf8dfd1368e3131ebfd26857d157be1f24ad81f1037027389f7e8d02318236fe38ff2fe8e077f97f34bfb0fc6c81edfff5a34e7e73832168e337f9101bb4f1eb38046d40d006046d40d006046d40d006046d40d006046dfc17f503410c10b401411b10b401411b10b4f197f1df1d6dfc268ef20f3d1f80a00d08da8034750239eae4ffaba34e6c9ca5eb79c4ac0ebc0d93660770ed740b159d17519c11be8d3537d28bea1b9c83292f741d9271232fb17ef760e968c06b9ead265d8a0c8032f581e9cba6c085fa36a8b37d0a6b553e3113cc963c3b2aeccbc81cab41321c8a9c6066f15971c824251e184b3ef1bd96debe562c96d47757d3a563e11b2214fbc196e3f83aabcd8165040fd853743f2f46445ea84d2b4f377c2d0e25850c98f4ea7568c0f63ada1ad355e72520d4442b6fc22e459066ebe2bb874523df3fddffd25958ef3fb52d26b8e95c1c580bdc711372e1b83e0fdaced5379f53a327148e81499ba498c58ad6b27a8f0f935305921fe9956685a9b784d50717e54311d3a1469456c33edfe513f45e507efc797307245e172bf81631650f624421f80c4b27e834e814976d7fdab2006947d4d2cda440432c3d9e9cf7eeac36dfe22b06624ec6faeaf5dcd217319f1875858b31676f711bb063ba4728eb8e4de1fa9839f0f1b6a287f83902551582eeac922b4bc3a3ea0474a00d157cd9e25b243f6c2c8a4ac95c48749d623d7c8bd31a111df9fe2c3388730e1caaaef0acb7a75b7e09363d7aec964e74642aa5619fe929ae14bbc02b8e54570634714566c5d01577044cdf05240f3a2eedde76d89d13b8c7c8a4526f7fa4f167cd061197889a21a91e0cfa671a18ef4fa02bea2b1e491df72fb72bf79ae0a468061682c31c32aa8618b6a3c0d061ea55455c7aeff40d73b1a2dbea2b7f57bd9bcd35cf3fae1f38bf13bbc7ecb2f7122a267b57cb7331ab5cfb2bf6a89975e8cc303b253b69cae091004bc03b25a4b289fe47500931e4a239aa8726696ece9f12d42a9daa0314abc307e32e371e9f31bd98879a57d88fbbf6d5f228982a7592948d2123d61136c3b211a0dee62dfece348248dcb6c8d75722cbb0c32e1858319da35870366c77c0443c0ac46759d71f384e4ce11437d8e3c1b653f3674a1edfa62a7b2fd3cade5baf2d94990286d0f7423d2fef5a6e8bcb9edd5eca982549b5c87e79cbfb1de3c6701b4868b006f4e6b4340f67d377324446a83ab218c8d81fc79c58c5eae253c37c3053827b8108bc3d5f70dc4f89ccd4b03afa94f2b1e67c79da1ef099bf638abf38656bff1e9d343830144558bb1d3317326920f54a337aac256ce9601cbe4118351b693059f1899111383c388e86981ba96fd03f42c99c3c19b63642a79322db1f792385aaaa7967dd01ce537a4af085b3b7443227f9cd88de25173c5d6febb830af42cad6fdfee9592e3a38b3704d438679a9ab45fb35b59bf60df1345d3aaf1109ae5ae5fe2b1d1dec4747a00ec1bbcaebc3411907342352ea1ccbde67a30b332eea62aaa1898163bd679a8ad380383bb5dfe798a02e30637daf1691572bf026130546977610e300aa977b37b51778cfc56b91f3613ea98e0fe6cbd5cb54c73b6f9760f9b0ef5728b75212f284e7b04027c1276387fbc94886603782c363632666b357964c5615763056a1f1ba69f6d27fba25862f908aec111835b5b025a910e8d54aea4ff8d4c3ea444ecb187d4add702f90b1d6180518e1700b8e6a8fa3211e8c1806d1ab384d0593b3b0af7b9fee38bacebe7ad371091e34292c3c5f663193797c1a4aa06b7aff363c89aa7f72680e313efc431cecb34e20a7529252860b736511d306ecceec3258d4a004dfc6e72a4aaf1d2490c8fbc1829e1fcd480d34fb776e1f3f10bc9feae4df635f7dda52d5e0efbf90ddfbf38080ec006c77852c9632287de2a77dee3b12bc7aa02eb3ec3c2a3cbb1838d2a547cd69d803aede20bfe2ec1365e21cfef2b5cd99f3636a6099bc56a30bce5918ee6d5118e12b1011723cd999f673c67e48557b66dce6a3cc408dfc979da3bd8fa71fdbdc89273c0640d36ecfcd95f27a113c3ebc397b70c9e4ba484593bccc04526feafa2ebb223a4b90b1cb3e6698637e66a01d176a6dbdc0acc4213a48b9642cb4277d2fcac3091402a20a0e4f5757a7b882f5f5ee2f7594051a6cbee052d6df8cb705cc6c0e3cbfb9046a9aecd1487145875a2453eda395c9691ddb24419274e33feb9e8d3b0f978c87cb023bab33893bef083f33e5a2bc170e2e9e8226a92541453e21f5442ed7ba4430dc801553a80e5d5a24c63b4ab2d532da4adf8a9234bb5775f1088818b59c72f31eeffea84189bf8cfd5b63e4c54df0c878796070a52d3bb3fdf4ee13960326fa9b443d62d3215e5c0a021bbf2f7830db55f7ea61ffac5e4de74db633834cb3d9e9fa66c1ee868d57b2f10db31bb1dbff3b0d72652d6f417ef8eec60a5363ea75c17558856f5b5671ecf3efe9665668442e597d8129aa5539b6f57d3241907e2f064141a0751f8f9569e1c36786bc4f734f5ee4f2fc39ea70eb697f3e429f8d3e02c015301ca0b25d7e7e58ce778d1159dbbb8db8cb06aafcbeed363e91af71be671e0d4aafba63b6b1cf132f75f4be32466ebf1aa499daf8e5021d2300ee05f637451267d9cfd87c62ee2f79599209beb16a1136bc9d20c10d9d3a23ef053e1feb02cbe41d6f08dd58f530a90fd5cc8b3d727d05d4fab74f91d43e086c6035927ac05c91fe8f0345a8fe311df1ef385084e1efc6fe091de16187c81f6e8e71b4ba511ec91e30ade0339c8b47ffeb09feb38ef8e3fcbfbcddff5dfe01cd2ff643f325d7eff0c2bfac2320078afc724074c4afe3101d01d111101d011f11101d01d111101d01d111101d01d111101d01d111101d01d111ffd080e8881d8fffee3ae2375fc6ef0e1c81e808888ef8d775c40727928e6442a6ba59e4ba3e6c8a2bbf2cbea4f3042a2165d7155f234edaee04572025cc8f527f9ccfc0b70265c77462854aa7466b3fe81c79dad5f543ca5ecfb5044c6c57deee89b3a57422639535707f61df8c396c7daa18efd9c913ff19394e91067464e32d4d3d3a212d5f1e3ef17afc5dbbd45ad6cfc4db17d1f72591f382689731783a7267c5126431a3ea1e8a119f5749cd1ea2a5bcf804ee3b670920c9d81fd04e002dc341d93233235a01ec3d8de83362719103f578c681a9df3cb1ec3fef943c0d05cfd6bb9925783ebc9ff64b3476d9f581e6e3626fb07a732bd954ff09f110ab450ebcceca24b193c280ce96fedeb37f21ccedce231bfb3290c44eb7698473f859f57390f5089dcd97de9f39c44c0596fe99a229751a5d5fa99a70eb62b6717bb50019e2381f9d6c9f8cc9f53d4c397e04eb95968d2e9452f004339d346614996cd53c688022e89e76077d3bdd655cbdbbcf3114bf1ca2e461b9a19342fa4ca6fbd4bd27750115ac79f163ea88c9e95a245a540d7832063e9a85626d5678f12aca1835f2871a498f0c50e792139c987e891fae17dba21d4cddb4dd388c19f09db047a157612cf3490c2a687fe67477abe2f9d9645d0a3e90ee3595f0e657981e562cca55b00ca1d92fff1848da3e37360bd7f439310d989381f3acdab0abf647ddc762d16b3275cd885a6d04ef38ce11d7994f45cd34550d15ac531b0c1756844e9cc23e4828aeedbeb46f7e98f9e3fa413ae8e634db14565e2dbbd63f546d3094d959d9e83b61cabe8891fc1c7cc3210f0263a1f88de0f063116cbcc83feef1916fc10e76143236340d528edeabbcb2cc04c69f33536b68242f084def2804a15b1df0cd9a068fccb4382c0ffbecb59f0f298032ae1489e61abafe08ada73813119f1ac939127853e14cbe62d12599b34d785e9381458c8e22a61ab5084fff0a49aa295b2b037f4e386b5947a6d3426f85359aa567e0360d2ec8014331417a4675f945465523cd46ec5afe7b3c5bea589fb914f5066960a93fe1b020c512db654be47237302f70e28625bc2cad2dfd829cf4515d780716f8b951cce17c512bd21c23b31556041a63f73acb75e4b398df57d7a403714b13fe0330925f1f9338e1d1f5d210a623e0e33cab763b61fab70587afaed67928635ebad1a0a7879ef981b08a16ef091333bf6895f9f68c4b00651a759c60f1fb4f35b07979a0c57f8a683240eaf13238c66dc5527ba51ce67b15167fad4e596e49b4236fb509a051dfd164d7e4767a1c460683a250cd596d529a201186969045942caf5e76c09b0950e1635e578adb3ed11174bd0f76b28e3e2175a090d2a3cc54c0932c516224ad02b3a82dc6cc502cb289a403d08d6f52b9434cf7fbb2191b721396078fb8b3e89c014e7335e57721a9602538ccc70b37bc757ce6321fdeb246d1c139cdbd55c2f59501c80a49ac0a04652a18e566f193415c963d87cd5aefd0d9d977794d4c3a1889a5bbfeb87e12e0fa68a12a6a766924a94e3ba3e0be379322a52c6b8c35aacff9c9ea28f10601a3404a7763d28be4c0e204e1d8c3a18098d4fba9b6055e2bdd0202f377068b08606c348483bbe86aed6628ee136b68af4fc9e7d696369d603612de624b288f1ace34b092ecae8da39fcf42bea29942f81e9121a886e99d9216b4e8690bd9930a21036a603c58e9cea34b56c2cf19415e7043ac3dbde46a73b87812abf353c928aa80bc12c8b3b298e0f651d8681105863e4299f098a625a2d4e3e5837d22fa1eb04819b91de45574860d8f5cc2dd987e66b75e8415e878ad249cc68f145e823518d0df8952f3006073612d19de18df27cbe42e6cfefc695f6b3fb4c473a4bb36f41a2530597b321954d4a6d78e77e2869a98b88222b38eb804ae9853d4de761841e2fca394448d5bb0af1a3d52c4503bb9f2954e3645df5b2be88598f2255a24d31c728d7f5845a61008b7e528fc8a83903761e9269b28bf9527a3786b83db34806388948038bfe98de80b022585116a9549f9d925c7eb6c7bc3c3a433a5361b7862028f37beaf4b64202d827e56fcf7bc39ca89beb3539459dc3fd7c8baf307721822a989af9ba7080b88bd41f2e39a5634ed0e3f054fd613461d186cbd1f265785056d1e82036f79e634cb17401e5cc4a5dd87f0efcdcc2c19ec81b71fe11aa538591abef0825e2ea21db3b7e5358077d40a3a17d73c3bf5bbba40fc993b37ac992ffeadc2eab172cc63dd2ab230853fe9ef9caea0ed81e3c1bdad361139158dc4ec143565bfc736d13a632c5cf33b625a279bd0d5f1a7e0ee1a48eedc6435b5852b1e71b36d87cd1ad5f171534c4c2e595085763e080c812577ac406f5c36416f2997efe845dcceaa5bfba40b5840b0fa5bcd4eabca13f138201efcf0b61cad91afffae46f55ed73cf753a76874b9415b226bbe1f458ff9b008889b70c1242472608cf5af1e7b9a4a125dc4458261a643c65c9c2c54165c1691e5eb0b1c34a40f82e02ca07f7ac5ae70572e1b1cbca2b3ee1bfdbae46ee1c6aaa17d670f397c5a2af5166bd3f43fe33638d87ebc1ac5fa4a1ee96bba0d2fc8608d2d6a1b2aef0b2ede7985ce856b6b2a079284391ca63ef54a2fbe09b04e688f61eb6875137acc05f4225e4bd38644209a335efedc7d912c1c74d4ed0eed330d8557df871815fa74d217a893709867754461e660f7293f6263c4a44b610ca92f23d8ed2e375bcd5dc9906df4056330a927655f6b7b0f96463584e69858c47bf8ab99ca262a8da21c4d22e2b06dfff4400ff0ff63efaea3aaecf6c5d1d38d742321dd0d4a2e8a740912d29d2a2db508e96e919834480828dddd9dd22ddd202178c7fe9d7334ddef1efbd5ed7bee39f79c71d7f7dff97ce77c9e674d186baeef67ccd92d7c002fb335d7dbe635ba6fa3fdfba6fda1bebb6d66537763323fd30180b075058106e26d6edb5ef06a63ca405251c3c106b023bd9385c745aa7f535b6cdfbcac1924f76ba0df18fedff481daf53282ac03cb3db3a38b696ebfb19835ec53fcee780f6f96326c24ef4cd0fcbe91d345678b9b8ebf07f578fb70cad29685be0aed5209708abe7171dc3f47f6a703b44080bd62a7d1573c564e23d98e46aacf28b4143d0f18f572287ed03657071224cf4f836701150fabc97adb2a924e884f2547e03664d8dfb1a13c6bb46f28e675ca4897aa858783bb82bbf3870b37f28365f87f2495f0872b4e8f7f88a65b4071f7f22eb948d348b439562aeb74a23718f683fa1c0b110c18985ab800be384d855fbc845f15c17fba8831577eedf48b7c38f45f1ff0abfc5fb4ff6a0f845f9d3bf1abfc3f1dff3f5ef3cfe35735fe3fbfe05fe917cd8fe2178bc85f3effaf82a5945566e1137e6d9d93b0dd81acdbb16a301ecf01181853189c0dedd98085b54bf155b67631c1b9e38019b97fda410b04189d6d08714dc59dc98631fac2aa558806c7e96d972c1a38133693afb4d32417ac0241043267d26d231bed1457abd0a6d103c29e41b2187aa247cd352974713db5cab52ef5705754d5ff4e70e8ff358223f5df4070f8feb4ed2f109c5ab6fa0775aa3c358ef71ae9f06c04714d9d27ab7edec11f09ce6fe7ff0321f955fe6ff52f28592815a9faf3bbff7f81e0fc2a1f4a707e1e5082f3f37628c181121c28c181121c02c181121c28c181121c28c1f927f3074a70a004074a70a004074a70a004e71f257f3bc1f9d50f78bff8fd104a70a004e73f4f70ae45284788172d4f8bbb0dc32e92135f57f3c550dc215bd9c25d07d80c6c1a2c8127e7c71f9f86c54fcb21513572eafce039519b4b93f47757506b1008205d62166c033d3eb2b5ca128f070d39149bb43f2172e23c1cbe7e15bd2bc9f11a56d6827b1f0e2475459aca25ce123b53316817bb34f4c070ec0f5a1669be959b9473a82cef7406776fe8ae1e9083275dbdcfc358b0cacaf5115514a8764fcae95df59762c65ea98168becf513edd1a6b417a4e0f43f8dcc29c628edc8a57a33bda8706d0ce83fbef14c1be4fc10209c994b8ab986660850e621fcdd6323a0a42bfd150d1014d95e7273b403c44900c36ad96780f23943069543cc1d9a8d20f0b5eb7468d75bbb56ec62c0774e3d90ae361c2f00759ae18f62f12883d418af7a655d935ce6818be4e8a5234078104385f08348d08d8609861264e32dfc7da9ed4de11bd2f0aa871c0c7eed86c9c0312381b35d4cfe1f5ab17894c9e3b8a759f6aeaac8fa5e9abbee188f99c1a8e6f13ecab3b213e0d7a8e4bf94f84de9a2510b905cb90080774cb53ee90daf60d3200818ebe4aea0cb6895e57655a3dd9d29694f81b5db3446dc51a35813b830a080d6215483f9f2223cf976c53ad36cbc8b849f64ba12295281040d5b89095b1412888bb045a23387accadc4b9f21e249c91d4cfa4d71c29f1126794de7c8c358b04190ea904c52384384f9f780c18cff7aabb8ff2dd4b6527f81afa589743726f3cac768039f2b7e74f80df8303d1e28b953d7c4b439fe8be9b9c76d4fef8d7522416c24a135fee8d135480ad775652df6d2243b9fc35c4738468251e2c30db511dbdce4c2fe66edc803b75028a6d12cf30b4647cf8da24e7dbc53ad74df45c2c329fefdb2eaf5be5bdc1f54a0132d238b81d66f9fe7a04bc0676b16e2f822498304c94b634da9f7a51b557502b81e454e7ed2138d50746f66735ab8978f78cd527eee7933ed5bb109eca335903de5da086dcf523920611fbf32ca9fc4ced24de27523a99da2cf19c78dbd6c61fcda4abc18729abd4ce6f16ba0c2be4a18a6dd62892ce8c8582052b235d9edb47023752ea00b677c6162166c540336087c8978a18402780e83a17bdd32ceacd7a049647093f88c40f7de4ba42adf75e8335b8800f168e6df016ef83fe436ecd8736043f8a4fa54480fd7b6705759e99cac1712332dd376adeef9267a7f180f4135f052114998c0a275039a4a2dd54c988891ca72e23f689f5fa91d21b8ec351479968d52bc283c3a265d014f8e86b28290683f207d7784546560748e4ecf9a45f10a437a28058bc2202010747be35d80f74e07326958f174d3e4b73b79c336577d977bbe6093988deaa66aa00ce3ac88f6774993504a59629dfc2c2f2521b1d5cb0f5d2d70e2294dca89f1e9501f97732c476ab1eb13cd6d66249b6726893d2af3cd92fe4927d119a421f68864c80d27b631ecb3f0957b25388c66f4a12b83570de7f7ddca41b90666bb53ee84e53fedbf367fb100b4a93b495f0db7927def9ebf3d351b4fca682e587647b905d25dbdc6a016a2338e6d4bc0a11f37dd8ae6d13f46aa88a79499892b2bb3a8b47931ab1ccc09b376807461eb74b05f1260e56f41b914c854d3ac5d743d0620da649af63e782bf2181c90b13f47103714f0104f12e0febc1d78787f7193e7c352e9e437e2eb0fe32a05c0520b58e38712e053a125b2bd59f64e3c82b0e2bd0173329d7e91bc83b28ba8daa806bb295a8d70f3d7251bfe9f80578eee81a54344a65b15f09d8e39026a232392a836104095d86d33ad4b6b8224b586b06b4bccfba85f5172e2b459e1518527cdabac051e1891dd50997fbc6ccd5da0e9727aed3fedba87161a2a0e902228bc5f3a485e7406ea726cbafda38d044340fd2ccd156f232602b3c628dbc14dcf5632516160a337898d838799d289502b3d8b64ad4fc7032ec615cfce76d1d44ebfbfa46bc07678f00ce2016e6a384b8440a32b8808578a4ad7084ecc535382015352e6936e9e1916b907e7d6791e831d3a1b1875b34dca3987dc53697992c7b2f43190b335181dfffdd2de05356f32359e498f156b62c8b167e7e48588b364b8a66e7d46c215a5acb8bc40dc6074e9768cf9ef9c32369a67f9379cc90cd23f6d9d4e363b12d1c9d971c0875caa0a8863a9c042d931faf0e67c47286afc31f61de7b1ce373288dc6872df5c0483a2046f459475546659fe5d06186bad35f3a74a7ad84443debe5da0ed527fa804c66fddf3e55c6f859d7a37b55fa134cb90676f72215467ca3d16e34e09592fa9e99593b86eae7017eb463b93e373b991502d91502c300b17e957b37d57d2aefa67c5717a5bb33704059fa6cb9679e9c8800ca5c2d6ed89245b6062d195b2aa79ce0eb27bebde9839110c07f015780795128e6518be24b98647b4636fbb2bbf60343d3ccf28b10887c119d35381da594ea1c917a5133b6c861fca1c40946b23364380e55b67e98fe0b0f70f28600c88247225b4ed6f4496dd8490fefca34ee6749328c0862f67d4725650c7ca155e0a9d51d5c0ab1c9394a12a61fdabd2d7465eb7d6f430f9cdb896e55cc2076b745907820acf48eec8784f2fc4e57e44b3874c703d176ace78d385513c1742de70466de22274a03c57d9d278cbfe361b8a62dda1302fdfe80898e6ecf6c0c236121ccd403e051e920fb7d80d93001f6b8de1c591675ea1183525e4c18dfd6db4bae19bc1126a05d9ac25d442afee99661c8c0eda9b1c9b5914b593acd9b889a29a6c6842ea7c80c2008eb96ac6b2d56ce7b3aea342859c422c128ccbeee40deb8ac8a3d35062ebe1002b67537f5543e47a1f35fbfbe116d10dc155437c0748184b3e8b62377b100e7e5df253cffb1f461403decdc8d34e29eb572fe1645d9125d911a863a266f56ce4de1e7dcf494241702012a6f3e3e1d935879556dd2fc459cee001f1f9f6baac94bbf834bffad8501d7e7a995bf4678c21a03deedc2f8af9e537b0d168472dc98d0b18571edf2626e75b9df8e648216e6b7a6ae0a42ecbecfcd862925db15924658488c1edb4e5e680aa5d15c2b50fc7480160878745aee81857af2178089b38e64c2845c38fae5645a6370a5d513ba1ab72a8f4ea0b36eefd1ecde2ab5a78b96358c9c2b8b0d13714ca13a9e59c0b0f36046f2385da696ea06ee8a30dbbfeb05867f4d2f04fc37e8853fd74b7f412f60db9ab54e72f1f5b61650a00d715de2399a5259fcbc833fea85dfceff87eafbaff27fab7f011ce66b84fff20d447e6573a07ae1e701d50b3f6f87ea05a85e80ea05a85e80ea05a85e80ea052fa85e80ea857f327fa07a01aa17a07a01aa17a07a01aa17fe21feb7eb855f1d2cf28b0f0baa17a07ae13faf17ea72fdb272bf074caeea1ed6bc6f357bc0229d397a416834b50f31d8a546d1b5075ab6eeee9e7d728f0ecb92cdcc77b958b56c18472c3ab8dbb6e65c1cc34b6f7b006fd5271f0494476b4eb988c73cc64d97d83d1264f6cfe4dc5cbf0feaf63954289501b245ae230fcb6cb13414a5d71ef82c1f56feccdcf9bada8f576694c8c7623d1e0199a74dc17cabb76fc587b0ebe3b101c3df739834a2e7be46509c24a4dabc8fc4018c3f904578eaf46cef2ecb48b214a29eabc32aefbe0e7916ad1d733aa011ec9403d00b95e90a6c29174646692a2895ac9bdd7cc35f945e5ff395662d612ccb72af7c01ea2e8a2e9447bd37b5913a220b32e25daa3f30b607adb73583b7b224a35b611a41a55fda5ede849c3c1d39c27b47f1abab9ae099ad03bdd62ebcef2479639684a3c0fecdc7588707736f1039593f88e16aa1fb18dbbefd423753c9ea6e98a7d07fcd03c2e97a38572d743178ba18cfca4b09dd99c264dcdf40684b48577af452288c3196005d6954def51f4ad45561bdfdacfc4d39c372015221364342eba6d53d2d87d6c7e09437d3611ff382d45c7977d8005e3bfe6b0162e393cdbc12a93ead78d6143e2e104c1fe11c5255641d91515bfc7d9a29acbe1050cfb432ca3466bced7e04a3310d4ca3ae2607e55d5b38cbcb4ac2d533dc8978e98dbb58d2c9de660ae2020eaf0001a0f41dec115162bf05ffd09cfd17b3b19502e19068c75107bab4e6af88ca99470bbf377f6473bf5a39e413fc90647f3aec7dd7d978afe602f974ab3d5ba61a07930b03870f64c8efddc32743624f34e30a997852ea5c6f5e70eb322ef4846684274727a9e5513a58b73e0e40e31e4ce95388916d7a56cca5c9d19712b1852c1e83d005311fe7ae06a2080ad7ba89f014dea3c1e1ddc42170b1dff736be5d5843a7911ef961c6567403c4f56bbf309d76d264c2c87838890d511c1d93489795a64b8a11f4983773cd7d0042e7db991b6f0bfc7d98c81e5557977e357d504a58dea20416eff7e2b9ff299c143668e6527fa767224ac5b106ab275a4d45e442d6c531d1234bbb3a66fb6c68d78f1124983ff11b9b9e31e4f6b30cc7dd4fa559537ebe3d0b8cc532f606dd80f4d0ab10a017048bcf9b0f6278930a89c4974717c7ce2b3b12e3663874c492aa749d0047b0a55ef0deb03868ee54ec25074c291bc586bbe81bfd460fc3ea260447e64b52a75290f6fa885183dbf5472971ff78e6026a7063385e3a978890f48e9b5e867457dd1c900e71991d5b6cfe0651758b66be0b69ff183399d8e284968a1272327d82cad90356b9a2fcdc797125504fba8488fdba650c8289adae35838939a9acae902ac9a680f21dfd2b4d49986fabd78455b3c390072b25138cbdf4fbf6d1abe8ef9ac57d120e419013acb24e803761dfeddce0152878626ea2f853fd5ccc9289e46f5e932283c1e09913debeb33fca75187a5dc502bb470d0d41595b74af3b418d361dd36cd677f0dbf3a753c4f56be7db2bd9f03aeda33d8721c9c7f07d3173a8211f29671e3c424d8d6b074e57c9b42aa5e7cc1ed52af7be24628a5c6ff0f26c8c63090f57370c76c0c5912580d4438187c6592e061d1eb971931fbbc775c8293e1d3715e0b4136ad7bc4d7b5c0b2eb6ab6a1912926c4948e5bfdf0e707ca3d0bb1f13cad339a072208c92c550e7012e70c502050a6070d74508131dba992836469153afa5c46eca488fc531ecd8acc01413be3abc3d85946ac61a0e710adb86f7b69d2591d74831e395b90212ce239c53b0e926924b4ca756fb63cde0e996be6c518f7f9a501751088edd7a9d9a52b73301c010cf29d591b145099b2f4d21e24fc39ec67b44f1aa91a85f00e37dc66876413b1ee0d454a07d18bcad15e158a19ef515067de59efa07ec76c883b473599c8689094860fcbca9ff315add3702b88f95e2d82babc7b60732b6f446f1956e9db07026b4f0e0c9f98d226be28fc0c79fc7715092301138f9cecc743ec0230d86d03b271ecc7702017bc542e46066476af7af5a8bac153b53d1010d961db08d8651fb1ef97d08b3a05b5c08a1874666a945260233cc39444741ebb19c5142559d2dc20caa7ac6e3aa14d0cdf419a1659d62a61d1e9ba97c864c7996548529612b0f8620db2de77baddf25a094ff36cb40ed26e38fa4348238799fde1afde9229a1e9e3064777be6d18edc1510a7e3bee46724baf8a250c01e7b42e2a21b6926efefc33a45b7432d9fb312a7eb778f57013ea38f71fdf187be75233997a52c56ae9cfa115367f8f521dac2e952e1c6440ff201228f087f18f283b095d9978e3dc0d9c62ecd811efff1cd54fc8b476ccd7b27586011957dffc5a480835648f002daac29120bb14c348247b7c95eeefcb971c87e07b84bf98124db2b141d59cc6fc1fc762b2403975c860d9eeafeb506baa0b8bdd8037014c574d20fc3dbc76acc815db3089c72ba002f7f26b27de244cdddec987c157f05b25fa9def85663db29b68bde1b1bdf2e3b3289d0ea0d3768c2214b644706bfc8018e81de781bcffdc3e90ca41571d427029b8e49453a8736f09fe9217d237e40e6050137b41cdbb9c86cc983156f6165161215257abfb13e0ae4af41c70a388877d04d054fd5aa643247dd2212d6103f0cc0b87c595ccf75a1bd23ce3475fe0193d089fb84003ca8c65badaa3ef4b0a4598e0e69c6625512c4c8aa45b59838ef679efb86358b0836d096c76e147eb0923a27e23dc68fb068c0901f1841d667cffc4101cf17962a04ae99e5cc0cb6f187df7677843c57fb32209f685e82e38e80d84b57457d2af74c17dc7fcf1f1bd462f8cd3b5dfe037ee29ee141c7b173d219125c1b8502b7e39e877e0258079d2c60157f5a22d954dde8d1234743c7ffd99bc84da86a756922ddba3bc8ec211628ffbe7e2b1dd5a26dc82034947c18ade8fdcc6bc065201c3d5710826d813b65d5c32223fcb76b76760db50f3d473f622abb6ba3b8ba513688bc5e9154d73a8ffa622f8278d08509f7b76bdcd92ae63990ee45de27866c87f0ce8767644327be9e5c0b6c637520859feceaff35fd10ccba1ceeaaa74a8b2dd97420819d3229819b8bf5f1b26887f3b0165dca0489c2cf6bfbea64b2ad58a70997239ceb310054c3a91fc730a257e5bfaabb6e23fae9002d10807978d6cac334df66b53b2a19786c9335db833306eb37c9908f65dbbf10c6edbb035eaf4a087e57b788f1813114aa7c5bdfe35065eef841d7f3b0fe3342b26acaf7dd5aca7ab82bcaffd8bb2ff15fd20f94ff1d7b37fc79fe5fd00f365a613528ad0644edeced5a45ef5c4d186f32bc7fdec11ff5c36fe7ff43f5fe57f9bfd5ffe382c1aaed5fcdc4ffac7e00b80fddbbe1a701d50f3f6f87ea07a87e80ea07a87e80ea07a87e80ea07a87e27ea07a87e80ea07a87e80ea07a87ef89702aa1f7e1e48bf68ffc5ef17f0bf4822fcc5ef77c8bf7899a8bf181f1dba37035437fc97eb06620e6b87e1ecee50bc24a1dc0a0b2b073c169b814d322fc85c756fdf8908b623c81af9febdcce44dd72a4a8c3a51cc6c92a8b73afb0bc2005307033b6626a32dcd4fc034b5305a32a22ca325c9021b9378143eb9a09d6e2ddeda340e6e2211f3e0e408c8ddd5a5e5561fb0dc1a6d22d75ede6ccabc676a10178cbda895ab147c11f58115d8c831e2bd2625c186706494992aefaec1e6c99c89f9b746ed5bdc7890a3b3580114222fa30152a5ce4e194e01299a8897e8fb9cac4471745711f6988b617ea15bace05006272b23257a84c45326f20d9b13b22f35f21b8f6a629822a306de00535444c07a27a67bf64a188dfafdb3156e39d7272dfc8dbd8e2dd9511e4a7e0a2825cf45400c7a1f254e807d90aebba5a1a120a31fd5030e0353d3ec79b9025eb6cd4b01710f40cd49ccbc9d2d98d3e87453f6a1dda3823ecb83ee61640a2c8fd10621016d0532487bd532d4dd6b2d1d74a9f2e839291af5ccf23753db38a6462f15c4ec0321266e70b1c53f6e72a789f36c2204e184258c6248ce0a75c2cb3e282c3a8d77251ec61694bee5c40810e1f512d122199fc5aecb0c6f8f7238359ecd30be676c3076542f99086e451a1312a3dbfb559cea6e4da92c7ed4696868a6d33f0cb6352e9bf76b89b2002a9ae23e8da3afce01e64ddd59f1bb4e05e74ef59179f72aab395be9b8f1e61f40e64588f12a9a498c856849ae22dd094134bf6620ff50d3180c3d52310d75c6ef7c7ffab7f9f34437654be7dbe1362a1cef9434332e52706b0d1779f9c045c0fb35b1319738b167a0a3b1f6bd01a3444d87bf6cfc65016cdf3de34627dbe59a3e3283b1547be77137f0a2f188ddd67b04b9333faf10b6042f23df4a5e4d42e74b4eef3efc5ea304753e48de9123265b1825f7e272534bf48316117e5946d5e03c035954d89cca7875fd09a07f09b5ce611c680a29a7f898a034ae6ecfa7aaa96417021b1c21ef8baac36ed60568f432c12c445ad404513d9f047739daaacac9412ff0f0307ab7dcc978a0be1edc533e2790e5f49811c0c7100145111e28dfb0713e9f435e65eb9fcc788bca160ae42adff4036d46568bb41a3a2b130a8735841739f1a42b49d2e4564e2582c15a005b844f9778deb7814d703868af33516eb2df9f3a2cfd417a7ac2e278ade7fae774d0325cb827b14b586b3b05d6589723208155c3392ee6648f41394821c150f0d35320719ff4210683ac365127133185b9398eb06aa011b648baa0f94a8b45aa4ce725905f3154a06cfb1707ff66e905f613efa69585d665051a2c51661b0ee763dd3764203b33c090463fd2c456a582ab9a382264bc0171e76687e341b466dd2dcd4845770a9839be2501fe746e0b7f6c463e96a0f066ef4cd1d95d84e193a7748e6c80f72361c043da32e8e91ffac048280193df67bd8493e587839dd9dde04815701110fa3601060c195059a32a541e8c0a245012ca87dce793d21fd7967e9a4010f0f6b54ba6dd6f23cf1f77d27701bd376f864877db9257cb197a2513244a534866594465c7fa1e0757bf010fd18b020dd3c4970de1426c4bfcf792b64c902dbb0a63aa3f3beddb027d6ed6068cba6787ad7a279fb382a53717292d0d90d1834f110f79b4bad342249865371e000a642c028ef94f606de875416a5c83ef6b570f67575c2a4934c52a8b32de9bcb77c08878de1f375204528d31ae4bd5fc62f36de5d5bb62da28a311528d3c027b5305c0412d001f461db23b7554e75abc57d010e64e0ea3b32cdb322f33e3b5d9621c008c85f3b446e14df66743e757ca6b9e0a8ae13a7210ed4b11b3edd3306e5d6670030f7b6c27dbbc453db3370eae87c923d5ea632fd7665525c95ab10d32c4bf12cff502d69678d527d1a6539e1433695688f91a14a5ad572dae921a42aa34287b84e76380534f7c4cfc5e54843705a1b2d2bbabe88b509f16c2bb60fe5ab7c21b857cf43bb057e0d3fa4664f478a35b7541317a38c3dc4f1b0adeaa4a47bf63381fc95ace0a1c1ea272a316e44ddc67965a7d241cf256c01ae4ca7540bd81da4dd187ecb09b5214d4d056c4162cbd41e73c5ec2691bf92e285c94baad236693d88fa7a53638082b030af38c76e5dca7f799cf2873c1f3613859311be30936821e0b6ed565270a7f06c02f37a678cc70e5a82767364ee7dd3363872178aa93e62b61242e1ff2d3af7c6e40708b82aa75454573cdca8d324e21f3e13aedd81cfb8c6b432c8918cdf5f9c8f283df59bf695cc1aa42c037feb6252dece6a29713f46bfd3112030877b40fa6852a26d09139bfa5708da601e2e92533312c4ceacfac6e74e3259a84cb30bee8040f28cca55d7a0d1f9d1e23810b21779f4f1a1d5514e724e4d47a47da18584200fbf7d02342f92b5fa9a46995bf267db50e4ed1096c395bf5e6978e7097b76525157840075b42bbb4b0e8f049062c530513028e5ed004c13cdc0da7464e6264dc8f3b51bee7ee2ae075bc6f5b833b7f63f12d08e479126c6deb166856bad2547949bac6ac3fac2d2e398719a0531a917230826903f2fcd22f3a3757820eebdd2fd1639f6223545ac4756d922047300d6dc2a95855ab40c00e811217178d91264ef15c39574cc3c7297b39956a9c2d1f5f5735709d57f18a80f648d5270af3be3da751a197fbb34f20746489aa561cdf37242149bd1196981f01e377ed25913671d5efd7176ba226aeec11d1f6f3177329ea2f9e045d739f109cfcce0240f2523c9dfbe08b122a8c3f8dd429e28919b25675da143fd692b55f310cde7bc365b1e24c10cca6e98c40418df401af531b0827fdaa139e6c9150f4d56b7558b5a8f3ae97fb3f1da0050214096ab0e8712c71bf0991d6a00764d119a6ca0bc5f66f923fbd7f418d70a6a404bc82666e2400373ed36195f916689bbe10d8fc7614f06c95415453ee55df7702f73f9ebcc010f43fe7e4857f7ed804cc5fabde2beb6a505e766106099132a07b0b9d9e892c1ad4fcbc833f56ef7f3bff1faacfbfcaffadfec5e15bba4dfecbf72e8056ef7f35d0eafdcfdba1d57b68f51e5abd8756efa1d57b68f51e5abd8756efa1d57b68311e5abd8756efa1d57b68f5fe5f0a68f5fee7f1bf7def02e8c90bd0eafeffe73bd5fd2427ca966472b6aa59b4aa4c9a2bdf0ca1c48b783a3155d75588092f631ebc2b78f25818a3fa2497456873fa25dba92d26d333c657fdce11676d6d734f3519b81681899db2effb525cef5a99714b6a047ab9b7a28f1a8995e33c5b1fc615a1c52a3380964cc2e569d4d3fbcc2bc3a75ee8537ac57672be66de106488fc087de745893653403c726bcbf1d65ec33d183b2ea78c9e3b4847758908618ab70950a61df4e9c58386e1b7994fe34674fcb93b6ab1be48c646f455139a06a40c0be2beeada2d220e06649bedec410f93c2667c134c5df67c6085f8b86b6c75bf37d4557f463ec26d5000cf33b2195e3ec186cd949dea38f8f658c0fda15c8c7c3c00e54bfdba11de61b20a7e9031c50561f6630fb2548367265336a77fcfd45d3fec71e352a66973850835f23848996c9e8cce861cbd3b4185f77a9f8925f62e100827952a7a148d7addea6d9f30d03f6b7f3b74b6c7ba7e7b97652c753948fb28e386e9094a17b53eb17b47ca440ad8f012c67921a9a06f9d605ddee7c91a80173a0bc359af24a81e698a193167d6f11468f229884eccc893841ac434e805d23eedd40ee3f84f917728752acdf0124563826632a7dbef6a9e5d669b4f10039802d33dde1a80ebe0c4a55d072bd2da3d8ae840c681dfd43254dbe7d4dc7ffe292967f9d797157e9807b81c06b5d9ae6991ebb5e00dcf05f226fb9984a5b686b108925d4a8df1e2aad8a9534892ccc69efcabfa1f5f7e7bfec4f589b788b0a0ee11babfa4d440178d1be28551949ed2eee8f936fe9ece661717e4bca0de093b643d7cae15a12981411768e2981d8da57c6abde6142d2cbc5ff3197c7d2b705049372ccb8c9d408b0873f5b39d095da0e0b3798a5d8d7e2ba7ac9d1690e5878f2d0fb43a0eabb28e88a97db5468f40980857372fb830d27839405d23150820d441065703ac885e5006cfffb8142688b627bf830d76e58d7762a74cc44e6b045b9829eaf592d8da26e96fba4759515c6dde17a82ddbb2e7173664d6d67f273a03663a537036df0f4b99766fb298b54458c94cd06852b7941d9ba416f24c2d885b8129572d4d748fb681609b8fd1b7ef1d098dab6303fdde1376780f939fc70b119c0880378705edc391c6e92bb7b1de9f70dff8177502cff703cecbddbad40f1e0721f102395265fade1c9951fa0aa0f1d5f2b15829ecae4d3926d1369fa141256c24371ed066b8cf3dde81b2a1bf831e847ecdc661ade1ae44c9c033cbd63c57460d2aa0c302c2cc3164538957071ec42bb7360dd993ab63760ede2f91202e8d8e0ff9a434ff08c8eb69476d7f31fdceba24841fbec4f77c428dac71724541288c2ff1f88961762d5883ec8f722670561b4b2d38934b12c3db61ab95e34ce77c8c267e9985d6d51901aaeb6dbae062ada9d77061591817a8c970acb918e6c91a8c336b4e070d4adf9fd9834454da63e7d74ba7942c52fca046a95d1c3f334164ac3ac0eedd2a16bd7facce6fcf9f0e7ee3e10438f3c2492b05e3cdb4c30f81e8651f089e9f456153f78ae66ac62d0115e647dde8fbc738f46d985a58b54353ad933c09534d67b6f30832665f60d2ef01be48c1de0f3bc1565b70b01f89289e36c91f9cde8a8a4ba16358687adc56b47d6a0218b7e64508b6a8c80b53114339ab5336d8c53f71f35167361d0d7a75d4a29fe702dfb0db1049a7a54c797872bca1e217fced20884065bce3a4c90aa2345ce8fa14b0ebda87cb07acd99180e4e51bd8284673061b15ef500229b29c752742af3af541e92851839e2e5f4a44e69987c71e9514439f62198397ccf3d21173ba36c4b712d7808af4c1562d19bdfd2b351d1812f519978a9c20514a2fc4afea4f159d9b10da92000fd953bd416bd81bc1fa3eeff388033b3ae720966ba5c0e769be93bb2d230a9c00e59c352a9c4592afbd2305e74760e86337a60fb073dc08a3e401b0e3e96be478602de470a83f4b8c7e0bdd89513a7e8285968b823ac900354461ae0d87a8bf5113057860ce35c6b52a260aa48c346650624ca36072f4e0345d1b68e8e6dc5d3948af8030ee753c57b81274b2f79e27fb8b1ea185abc634f703e407779c05e6836e7d26805537651ff53e26f953b88767eaa256972a1cfcfce09332dcc351696f2725146a60a83844921acd6cec509a5728374afc237c926427d0855a7e31a7d1af8e4b71b10b9cd12e07caa1218f4548c10b66c20c552bc97e21caaaf01cbbe1e2360de296dcfbed930c94c3f8be3cebf998c31f9fd0a82ce22a6344f0f80107dbd0572c322f8153d8214ae054a42bd4446acc4c6399babea5bbf2c8b7b75fb9e33c55386369cde068259d28060c631b1a2797cd6393d1d7890d596648bb952ed7a1e0d38f27461e4e2e66b76f82222f8b8a0cef768997a18c1c8682ce5654c997840d3d0fca79653e21c9aa8d8802733a4e3e028fc6822425c8e12affa28faa6e0fd72702b8f0aa6f2cbb7803fa2e10084822b2a9f279be3903e7d5f049cbd310dea7142b85fe3c990df9472681dab30e6d6ab057ff76bf9c64ca33ba6c2ddd5c8199aa3876ac5c433e1977796dc1db8a48cb07ec14e2f3916c4a27a17a0eb54ff054f25a8c3d3bdc111492229263aa8df1c37f070128f42b427be94be1e66934bba69e3e8dd9077829676bdbf52f9036c785b9608580ea49522109fdfc20f2e62586e197bcd367c51b32723fbc94be1670bfd7fe8116440898f2617c09d295b6569900cc6074ab393e7b05d25206eceaa05516ba560e8e2280ee9500e911b254d32ae22b8c28b3900215665c2e0c01de239522df317db911814a89b150105cf8ac073ab1d1bb05fe3899d28a0b727c9fd9cdca7bc6dc68cccc7fe9e40560575da7f6f63ba21662271445995459c9d9e9d9ad6c7266a9894554282bad3879d8dfae51373dd76d57b62490c75a7abdffb16ac370fe92efdd0ecb5154ad916d7a155d05e4afed3d30763bb2cca1e0ddf7c28be5a50619f5c339031ebf24ff1baa3b6c8e62874cf0a3683ec7d5b13c3f868758ab65e470eadcda2731b1cf8e72216678d5fa81259a3f1d2ba00502facad1975e1c94d6340b3f21b46103648dda4b010c21e4c83cb0874922786947c0387fdffeb49455d2324a610370cdc5d8f21d5cfd88b691157ed1ea2fa5c3cdf747bdc0fc3f472f70fc69db5fd00b230c7c779ee78e2a900b6f125638e9f69cae865f5497ffa8177e3bff1faaefbfcaffadfe05af523f4aff57ef3d3500d50b3f6f86ea859fb743f502542f40f502542f40f502542f40f502542f403202542f40f502542f40f502542ffc4b01d50b3f8fffed7ae1171f06542f40f53c7fbd5e4846c3cf3a604bbcdb2cc482bf177b5a8b4b0b9750fe4aefbbe6f2c51cd378ed3840b3ca906a794ac12246c9e616ddf6ad04315faf85aaa24978e0e232f67cf615bb2fd83fadf07628e75b7cc238f7354667d63e2dc6283aedeef5213a38db3605fc282db8eca799f68264bcbb60b66536f15abc79dfbddc949d8df91df3f6de8df3d7254bd0465e4bd1abf795fb1b1ea9e923ae7e8d776a649a9b5113a517ba2d73ac47065f80f96637af5e4d8610f1b8747cc5d547c9ad5ce9073c0d237136cca604340f69942a40aa0c82a4f5b79e5d97e031958c55efc8c8ed922ed8e5d13b3ce1ef0438a3afbf00312624430cba1a8d7b3e0b8cd36ecf6483df39fbe71feb8f9c3c2ffa80eb7263079672c912d3aa6e03f2b369583e3e6e7ff41532d492f93e72befa8412353b611211c0b56c18adbeda3d4e9bbbbfaaa2fe141dccb53cc9a6be56d48d705cc61efccaab0f329e0692444986ecab4af1f086a115c8bc6c1bd27a96cf1cfe5808e7636659ce382033410a91c534909feee63e3a3dd9e57936d1d129b0417685176dbaf9bebacc1c98cd6f51db0cf71fe7555a6f1d7da58a8c07f16b870ba0f46a3aa52cdf8dbbc90327b89b546ec6eb593031f73c9608967ae15a3b7ba6508a4a1ff086be09087c790f03c44692769602b41f260f8bdeaf4d29d5e66bbe741b727f8317c7f53444382cae05a5215e9ba5ace9ad0a1f6cc2228794d87c4ff508bef0aaf12aeee8881c0d843ffbedf9f3dd6774561dde56ba8520e5b1ab42fef87771e11a22bc79053e50b3461efb4a1a089a91f0118b919249e1c0601df7c58e43186ee86f21baeb6601ea69cbef73c49801c1313246b24a2da76f5ed8d6580cb7c52cf874402e4be5fa24c1f866d6282d10e8531f8d848b0b24f34e07e1c4e3f117c844e2217ddc4854a4a6bc96b3792e610d1c3ad7aca4afbe5b58cffc70630dfffcb37f42a0be6c2293283d5c82f8065fe0071ae042f77456c74fcaf01c77f142d9eff3d917abeb43fba561fdd877425dfc293d46a01fc92a5cba11d6134f38458e79553d87e3a03e0a72f8cc46f364f8cd861ee93ae02d7d9d1b8dbdf5ea1eee5179229378d1aaf33005fdfbfa67e3fd6fce04b9f89783bc7df4ca4a6e6bf2a11bc54a821fe9d46b68533573718cf0ced5ea1cfefa136f1b81745f91cd4da735db5e39bef8f8157ed89287faa49c15b6d3d705de67a596cf6e40b7d7e0f0a5c634c1f4c92efe45eb8951d768f5664da010e62bc162f53d326f02508d9949be52e3c93392601498cad27b208929e8109fe0ba0fab1a45bf3ae6940c7ad1146052492911bde8d8d915d5ec9f2c14ea3accc16d0892845269b1345713368226c536860af5d6dbd716e654ad5ef05b263575d42f2966cb12f2bccb858de28480abb6e32bc2ce89c8b8f0b131dda82b69ef0a8d7b1f2b674f534d44df9e28dcfb018cf96085118eced7be50aa91b37c5b6dacf0ee18b29efccc69f0186f6652dad7e8b7e7cfe554f2a3f7043eadec231103ab086b350d3bd655a2f0b1ced1c8ef29038a2b8b1a81b13b17ba113bc3365b16626f7b2edf6e750f49e8366ad95d33cffc1a7b103f0de081b758303d2ad5e020d84f461a645ae38bd86befb538fdc890c1340853996e0ecc7390ad6230ea48a80a9094211921849f7df8dc8657d152d948ef8ed9fc3ff983e81116fbbd81e7b2a3de7e3c88adb221170d1fac2d62fba62660894285d278bcbf82031306786af48d9671125decd4e2494227b4be1b1e22df12179565ad2f0ec1de400ba190cc881d5fbc19f6638d47528de7c61e0699088e5946d7278ec48804c11340d452146f39b17d20e3fc89b44a3838ba98faf8ebe295c22cafdb8f70eb838f2fc10e62f2aabf47169dfa0787cfbb90d58fe9c8fde2c4e5b2541329e22e52906bda7e908ffda2620d79566b6a4d9fa51745f294db6ff51d695f58a5436a85e08d286501c8dab59c26673fa97d98d54fa44c569747793321a05a8f2bbc4a3602f3e61ae90e3025f41eb8626af79571a1d29608d31b66a09eb38c4c61803a0b61d5de35141ab026da169515e6870d5b6356c7357f535da187e15d9faa7231b2753f77ba2f8f131b7018dd9b9c107c9e1bdee6fa5250cc7369b8a029006fe547cc6cb7586d111696153de78ef72dc6b817e0c32be96b7b727dbf29c3565d9c4e6d0e43a0384ef7e3e8188051b011db59afd53e7114f1756be7eb443289dec5a5d0a4a7300be148f84e045be0efacef9cae605f0131daf255568603fbc773196bdf7d52559b0cbef81412d2860795497b7a359f4601aac1d8fa4f939bc1b1d38d745208543189652e6107cabb5287e71a740ded3c9a1030532d30608641b1b58f9a592eca729bff612213747c672d085b37dc79d72c710a02fcae1a3e70ec883feff8d8fd81cfa35d233ba791de9b25a1c1e58bf3760d28a8f90e0176e43d1f9fcde99235e588413ebe156c3780c72ab3d232d1422a36957a904fb90001b552b1c89b0389c5de53436a37d38ff91cb6cb6b4fe3cdc30ac999dfe61f088782db5c4a94172bd3e7b11999091bb66dd5d7d8f2abfc5722cf9a8938e7ac42e0fd8174a4f65110731faf268d1ee3a04b32bffd77b97d69d2e179c9769a79733dab141e50cf89f6820d362ec80b31d738fe51d17e5edd60d5a72e145cb1224551fdfdd944807bb79ee4e582c81e4d8c68d322f1c566b9643fb906a344eee18c8b50932ad312f0b14d47434e632c7ecd3364e04d5a6dfc8d780e2baddf97fe5da21ca35ad913c6df5a40c45dc62100422a6d119162dc712caa24ebe87b4d8ac862c86bc3e24d9ccfd7d115db1c1f3e4340378765a188d948803e95996cf1e0b7b8c182d76513619c236a6a13c83179b58941afd1c7e0e2b55dad13633a2a8f3b643d9212d2ee992cbb3ed77c143948aea6b37f5f1ca5b2b7681322b3159dfbb82ad72f67225bba7cf9daeb8fd702ea33ef95413b20fdee2fea85d37c2aa7a03d7b5ab1d1ce6881673593f7edca2e4fa2ae7830d27159aa3381612d3e72454cf6915b6016d6898f8980f7ba47d33b132af63da24b91e2f555bb9f0ed0020183f8226b4cb7cc567c8552c408ea00257846b69356ac6e9e995e144651e0ec00387cba507d65ad16047b5e9afc6eaa0585cb4a03ce54db9b7d242be142ff7e5938f8a35e60f99fa31758ffb4ed2fe82ffdd5bad5a719eea217119f0b93acf29cc057eea69f77f047bdf0dbf9ff507d0b55fe6ff52f39a72dcf07dd7b01aa177e1650bd00d50b50bd00d50b50bd00d50f50bd00d50b50bd00d50b50bd00d50b50bd00d50bff27a07ae1e701d50b3f1f3c1eaa17a07ae17fbd5ea89069e2a3f4148fd7344f260efe24954f6ef72cf28e3db682b2a75d99732f94002c87376bdf32e4cd9a6777f59bb5ac5845756d84993ee81ed7185311b3aad33005cf4df0190559354fa726f8afc7c80f1aa7b25837171423e996dcf24891a8957e020444a1145a78568de2d69333f5a20fbc05a2cf3e27eb69f8ed235e7e4e5a3ede50031896699ec7a48ede4ab224a8d452e31fbd2901de2d0fb97105ce85e263becd0ac0a7b53d6b1b4cb8aac08bd41b5ec6cc193469fca3d4404c951ab1ba9f50b1530a645c332aa16d65ff080951b790a257f72a7708fa900ea7c6658dffa8781f12e80f6cf0bdeb27bd7a5a6a5954880edb573c27a349b814b345e46f6305667718313512c03d778127833be4d717bd15286c2d258b8f084f630ad556c7f61948969f477f8380a2e9b72299ef240b5faef4660779e0b0929734a26ab9ded7455ecc397d1a8dcc0bba5166f6716aab277aef3e3e7c22dbfbc04ebdd98b6fc39fee2141ca0ccf83e703d8a9666d743c8a3ef6341582fcc5c17d9a97a5f32b80f1d5160773270f2a9ef219a0367697a7db953f1e039d8e77f449956120646c79dc9f663c7b28a7a56d4b520470ba0691f1ed1d621b43cbe72cba71dfacbeaf3eee0afdbaaeabc97435c50bcf0eac50ac68f283033236db9d36efdc08827025b0bfedbf5462482b199e0df694900227a6070283e23deeca9f59f71ef2a1bd7a1615fc32b3f56135693a62327c9042e1a3df9e3fbb1e09bb6aca2afdaf5f2a4cbc7639117750487bcfed8627c17a91e8b3ee385807037bd788ca7b18bb34478c0fd0cb2ff42af8c96624f1ad746815b27a84e951752dcc9a4aa148db79389297e18ec5ac514f5c5f69aade3e785967b0a3b75f95eb0ea30878bf2fda79d85193c4ecb07ff5e5ff0c77482d4599cf54fd9a81915cb80b07f618a47247c717c77ae7672257660e1ea1ff485a758be31b176bc37bb7e4022881680910a4c9920c1f873c50491d93fffc3505e6cd91768f1cf57cff19b62e1c8d26c90c484f44560e8eb2ea4f1adef9f8e99b19ba17cb43f6992833824d1df1acaad4eebd09a0e0312fd6e7f8cce6eb39de8c8a3859985321dc41405ba21c440ea5a832bbea1268e0e00d4344b1caa1270e422fbbbdd06e43d1e5c36cf002477ac3b5aced5779033a75b5f494f6e4068a91c4ca59ce6909e017da48513e1190740bed6062c67dcc4078eeedc7cfeda71af56fcca34f34167460c93e2934037e3f34d39255bbdfffe4381e70853225cdc009e27ef1d548c1f295e678c95513fe5872fd00dd4941dc0661d10c08b1aebf6e74718fdaa74018c17e32c417d02db4bba177f191f669ebc2f5fa281f909ed028569008beb86cbbbfe92490c920236b60a4731dee5193f9625c9ec15e1738a8fdf8d4d0c519d56fd56d73ff4dfa1156b7019f3e1381006f9915b6be12fb336d301edbb336313d7cea61a0d0f8193ef021a67a6687a5c6116be67c61e55d3cedefafef68b30030e7e1b6b4bf2b3d11b581f77840dec8fa4a3d26dc6ceaed461481b430203541afdcc7b52799dbe5081f1ef3a588173ce1edd8e3bb69fafc56b22bc6df07f81e8e9e173991aae828236bbd3cc1ca90f7b2765e6b27d4cc7c5d78cf21b99c61027cf7bc783a1bc69d320743d871cc8b8442e1a6122134db8217768b3a617aad6e0b0260dec7c85fde02322a59ba759973769fb34ec2e4eaa8b611486a8bef6a208400ca8f1e7b6b0b17b9633728f89796eeca69c60f2d14bb0eda19b1c30edf8c349080c83e65a17a0751695a759552f89c364b0d25e490eac16be68f650dc47a9f4fa9ba400f0ea13a48356c1f2af3d9adf5133b596e2d6c6be13ddadb8aec23514964bd298097163ce68292978ae4ca41dea4f278684c6501ebc3a613b565b8af4500ee2c3138cd08cf7bb64845f861fa07bb7d4fdea339d6e76bc6bdf804f7ee3cf523e92ded4107268db4fa3243add009fc4c9a47a1bf8a2703ebe43d37fac1636108bc45dabc0a388c6e4848c5cf0fd4e383f7355265ee69c47ead65dc83834667e7c02119ee0203f08f69d8c4fda49276bbbb4965f7a7b93f514ed064bd7935227b5a74f4f40b3f1bc05e625c0e374f119b0f0c30a85d7aa5b73fac932b520fd7637b63a35911b650dc00d259a436d913f6cf983ff1e2370477c326b55dd5b80579079a7df509cd0a4c6e06badb7d3d75c93a142f2e9ce18a5a2794a53576703174be477eb92d4ee6322a9ef86dbdc0e3bf9efaed303a10b1854fd1ca0761775ae05bd920e615a4b0d39e1be6e79a4108c09acb91f850654d6fa58cd282cee33ee75a71943531ce618ac837e9bf9fad817805b242d5b1de075ad4c11c6a6c64bdee12e781772f1b78642830031cd9c6f65483816867bcb4d062da062add5977696acf974e8c27c6c173a6696f6a3113b43feb7d0030496945cb48fc424cb5d3b687efb5077620b5241ac6ea2b0fa230861c1d57ba017f708572306145951e7234861611e4c91ca10eb106e2f68b4bf2ec6f5eb9425f3e80c7028b91c7e590990c5c6e7f354413f92e67298d283d49c0a87ceacf422f530e3c63deabdb28473f88d5e0dd2ec40326bda0f2f96cfe5400de6a66b636c0cf42164c90a25306a618cd3f2991f61f2b495b4ef47bfa3da4c7aac1ef9ae9d153c724a3bf2d20d6bb83e5dbe35df09224ef7a485795c4295eb31b95d4dc16d24937334d33b13d330729a837861bc7e62643dc2b71e55f276ae3e7be3ed7c07a4cf6029940a57b6bddf577f5020402ae0027adb4e729555b4fd85cf47796ccf63fadf66f37db83e1b749a88ad639981027ae35e2c2d33162a7a3a486407daa97ee5f31cdac15fd1a5bfff54c3b229ba42536040c753d5eacae3163b12121547ec9ae5320859bfce42105d3c07d9462d1250e84817f5f1f299daeb9aba6a074f43899716c498780a3a887d5b33f18d33b153be9109ede2ffd2b7ac112eb46984d15562dda7ffdec50e19c16614f86a236337db3473efcfbf74c1025dc80516b921a13cfd57bf958f14644af63122138b13f41827fbbef3ea39cd0f84f07688180a4586ffe50122afec5370c83e597d8f50d8ac8d0cceae5801ccaaeb52bd72d2c605f5e55c22869bbcb2075b77bdd5bb52a87d152feba7cd73c79205e7c4c222dec8f7a81f57f8e5e60ffd3b6bfa017743afb72489a985fe4d0f233553df3384367f1f2ff79077fd40bbf9dff0fd5f75f28e5ff56ff120e11a80a50bd00d50b3f0ba85e80ea05a85e80ea05a85e80ea052d5e80ea05a85e80ea05a85e80ea05a85e80ea85ff1350bdf0f380ea859f0f0f2f3902aa17a07a01aa17fe7fad1788f2e035ec5af94fdf6d06daa6677c38fe7013c4216e65fe3eac4abda47c2d6e00685932c5e0186ca32ac69f7337e5aab7fb0bc2e18e3b6272feb9ef7df82206111c37900ceea739647737cacdcd8f0a366b2cae09d3ef4ed69ff18928cb7f24ece71605742ff20f621c61a8bc28b17e4cf616a78ee81a0c8b28a1ce2e342e0edfa576d703f404c1482522b3478689e443ed1308b14f4f44a3173e6446d63ef9324776263a0cecf9e19386e505131ab4556a19dbbe4698936015e36b4404ab851e318b4d85f4a800be5bb5a644960d588594063b9ec6bc4e5850732d5c57bfb1631f22762c599f035816638e6d95e4f5048b13e68d4a5e0a180b0bba397f72c7d8d6e34998110c1f0321481a37095e6b085901ed59d89debe3d2050ee360285aff8bf480694c4c330f289c3670ca27ae76c208c785f9f18ae16b69eeb9dd01050a351fef1781909554946e60620237dd1cdd385640a06fc8a5d34eb3f12ab08f5b3945d2f5b08345f21e6b1cd049e1292e4d12c17ee06cdfb42ae94ab3a8b8b12e3c534d5271f4482857da481644b0710588221ebb4c753411bf68695c9c09254afe6cb43ed36dd48d7105e1a2013912a32d1a6b95f4965baf4761a2fb56613bf9429c19ce4320a22b865cabf04e3a60533a35aa952804ebaa146909f64e67d96dd89ba8eb76d1557e47aac774b20480844c3f073c826e6ff354aac8dbf35cee60f7dd166d24c2de410e441bd746ebeedf9e0159b3240faa2b1c02a974f9faf33ce3473761de8db7f57d699008cc57b4b92d26ef01cb92cdaa0e7c857e1bae0cfd9d23193c3219da85bdd77d0d5dbe3702a123173de0c96bcbb4ad75dacdfa0eeec5f987ab8689fa96ada36c799945c5410b1835815ee00bc689e6a6350731510d85a3abbb0387dc0b35261fc672bad77d2d200f7ce35481f2ae34d9cd929e1b3a97f0fa196fc25579c3cd16910fb74c043c35dc3e71ff8f6910dc0d9fcb0c995255a848a71248bf50aab0c0b4dd406a08db082c18a99fa268026468918cc41e91193e79ea57b2ea4a5cd821375b63b25c700d653324f3f8b286e0108e7b025634919796a0c4246263f8e2c9d153b9a5e3b529c4119cf1ec8a57c1a05af301256b1856a54895dc873dcea37872ab2047013d05dcdaaafae7f9da30afa941db77a4e7b6ce735c75012d9718f2ee050b8493e11ab22d4d9798f5e512aa8ca8203825516751a2ddddcbc1e5e55a90adaec67a9c16d8e56d3cd5909db73347e408a82b32b51b17155ca02bd5ade5eee6ecd07dd40d2914cb51f8d693ba71effc7514e84f689d2474e3d59341bfc9115cbdfd201725c6903794fb1ea275e4303c2da919018892515f3d97b7c6e6a4dec15aaa7bd10fdfa2d30e4f95f8d93191992c4f546701f45a3ca99c63d1b4591ab541b4324a05e2c5d30bb02bfb34841cb474d2116a3508e66ff1a6e397dcb0b229fc86cb051229fb1818f326abd719641e61d679b0ea13fdf6c911dfce710de9b25d120f312ac6e1f2bcb63c163297a91510e3e4ecf76384572a99fb41138b62262dfb69431a3f96ec65231675e3db848b6c6e6447f5ce4d3e9f627e4560492a3d7f5e38f40cda84907dfa8d173276eb3d27e50a8344e70c1c62a61be5390838d6fa14a94f3e46151a78921db474b570862a465e21b3fcce06036fa3e579931240d52dcd9e2491bbaaf1b028888727d8a0a3ab088f9726dbae4d6e15d1e398cf7c0c829eeb1a13ac0ce8be6e1fc0d8a79f2feb5029562a2e576ba5f310892773797701faf333f3ad8b39698fd9ede8733fc9c42a33e271ed0c0f84d58d831fafc76e19807e12124c00b17a184baa1bbf00d292c4ea75bdd087ea72dc1008ceace1cd0a25d8016fa7e974378fadef2bcfb0711a768a2c123ccec0d60de31aaf2ebed2320a250828025afb945586153eea6704a45765e267761f71d693dc35be3e8d501da9c102055437b856041396da9930c7c93cc15b3736b7ef90dc0483ab605c62cf7ccb06f3211050d339ba5fae45411302a99c577fc9c393d4d46d66c41574d07b523b3c5fc2837902b45cd22c28c439112fdba6f023458ce4ce102cd816cd85e32c2d0e075603b7acfec2c911e0f94a512b7c882fb6e28b8ee5dcd9a1275cf8ea5f660e96af2d2e5e49bc19f255fcb7c5d1930bdb062798c6b2c22adcad0ce72c4b2e3923a314c46cb8ea46b19cce01d68ebfb8f742a051e114e9a2c2b81c816b409516f5133e63814a562344a5865efd5ea5ac4c706f40ff82d87a14dfadf08d35d10061e3b759b6c20506748b268cf7273c88aa5b3f1da0051694dd118d855111e92f78b163e496bc3a5d1d30f2b57e244e51e6f4cc4ffe5e032140a45cd3ab801f038fad987420560a5f43f05b81e98819865f3118ef92bb6d62aff182bb7ce30f2a176e84f86f7041db9203d61f16f530be945566e1137e6d9d93b0dd81acdbb114301ecf9760581369b717a1303001236b98652d1070c33dd39f7f946a57ae1c09a3717ecc823aa5c76c6775d25dc31d2a5fe1555007346a3bb910df0ac2bea716a4d0ddd57ff49e2be252f9928976e75af4163db209b3e602eef2f46fc33ff800bbe1997405e3311aae8a08c8beca2527af1c5ca862c19a3eed3086d40418790981bf7f05fc3e94aa30fcb7627bfdd7fa8d84ec6963521b3f7f6730f07f68a71f29f42e3842dde95cbaf3625d7ba727b68193f8abcfb505026452e95d3d2e5c03c436cf8dae44b64356d5620865db8d6118ed6154a9492804816e73f2ddc53d29cd76cdc60f9fbe534d3f91f477288de2ba5c11b3e47d97cf516356530577f9326fcf4df977cf8dc21810aff3bd594c7d273b9b3c89193134689d98c5c9410a112385aa9fffe9efefe19fbd9e9fde747222a4051634846fa05926ba12356b05357ff3ed5848659e527ec881f355311af34277beaa0c3cf74172582b4ecd8a752eb6c9e51d4f44442bcdc4977771bb877374fb2093acd5a5161e06ee0aeefbdf341cfeefee1c6ef149fc4334dd028abb9777c9459a46a2cdb15259a713bdfff711a9850be08bd354f8c59bfd9598f8e98ad95cf9b5d32ff2e1d07f71c1aff27f38fe8b15f7cfefff5fc8ffd3f1ffe335ff3c7e054afefc827fa57f94e1a95fbd189f5f3dffaf82e59ffd5382813185c1d9d09e0d5858bb145f656b17139c3b0e2c91fba71db4c082b7379e8a4513824ec86cb25fb7a8ecb8f5b975f358e6b5031b536d27d6891e78018683c71a7872dc02ccc4b2bbc8c6df94e636582ff62fb72c3c488507b3180e196b6189e0ae60f1fef62780fe777f0232c4487ff24f2b270487a0a1e4efef422df8879709f3db869613fccd8e0c61f640e1bbae9f3e3796385f9e19ff2c7aa85ddaff2f39a9fdf065e499e3b3e7ade0f666b7cd570e302e34abe0cd99bb2f2d685a553a57d1dde20ceb38c660c6e7e7e71e7cd69532f1771bfb021dc35239814b3773d66c4e74b4adb27a19a773e3beadef4df7f9cbaf6f13657aff6aee4ea61f4c3f99be80424602b970f8e184b57068a04fa19041403f0a030f011584f4e3078496f111f01fc14c8bdffea86d1770caf129bfdc67daac2dc07c4299969003b5b1e64e7501ec79997440286be0761fd4ff071817f4f6681472bf3eb9e899a3c5a9fddc3705d4c43ddb0bfd2d78b383b75edfe97ac56a4129dada243fce943747f274c457d656bcfa9374e6d7d78856652b31ff8045b376167723257d4da4a4cf6cf37a34e9e304344bfaac4a2a5c91d1077e5cc4a9937f03aff6f6d4f904cca738e92b689e92f38a0ca9905297cd5f1cd9fdc5d933f32b0c43cac0277da8ff0f302e909b53f150f066b45c7edab7039b3e66d75e5d717a3b1ec7e389d9c75d1796392795be59106ab421422960c5bb5396ead72d16e4581dd7cd5a5c7794fdbbc2f4bdd5b702efeddeb195e9c726b41e44d3c9e953b0f9264b4bf6ef0bf6edc7e7677e52535ab3dd76ebd669210f45b7e172f5d485e5df216ce07875807181709f42cfa5c3ed7fafd4aa2b5cd81fbeef9311bbe5ac337f2696279dbdfad4ecef4291055af352d93b4c7b7fcfda9ec8fdaf54faaf62c159201b67bf849d5238b0689dcc93793b592c987eb298801c6e02763324c7b2cc3a1d23c7321fa1438e25d4c16466a02ccb32139027942309b88f89408ea1a0326318b5e441d606dcd2e935821decebf712309fe21cfdfae3b7a4fd9cfa1f6e0aaf16fc37b7b072c3fbf76282d4cbd114840fcba2c77ff326e096cece74f25926f42780f9b4091fc62f035ee2715e7a1a7c65eda15507181724c5bc170eea609fa43ed0f9f80eb1c43d175bf2a7a989f7556ff825609f792fa07f8176fbfbd96fc31bfb94978bfc317979e6f01755b9afadf69d5172df3cb3b2e43f2c8377ded99116aa7a76b95b53b08d4650a3f3ceefe470a06141abd9b3b5e91532c1cbfbf56b1fc546f2dc0e9609aad36ef97b6bfdc730b1dbacca0b5858da2a36b76e9495d3259abbb8f3e896877d111b4d170949ad4ad5dcec1baccfbe93b19ee9276335c83f3c1097b7c9b83534b32f5498125d6d6ac430b5ae747f7c4c98a5ebb7db417f074aa4db99634ab2421c187632b268e4ef9e4e20e45166a3f3ecd30c6784a4783b84a6f6ce9dbb4f513a4b60073ecdcc87d25163cb40e53027534eefd69c1cde0393c29be234165ea4c47c22522e5b526649622e9e3d13071a16281e9fbf97632f92ebaff823ab1f30546c88ed7459f3f06fc1871c3fe51ce95251f30585bc011779bd77741af2999212aac4975c8e2d387c666dd0db852911b78f643cf7618237953c4875e5364f9a261cc605136f55789577c89d74b7e6fbb76fbee5ad77733555c9f0cd745db2d5ed98490a53d78262b5173a3d66c7ee4d3fbaff77c133332b25df826a973306592ddc21217990e757f78ea94c3f26819ccd82dcad8bd93816e5d6bbefa7b6ff2a55be955fd27822e0b4ba43d693590d4b1c2e4c3f8cec0a02dece8dcbca752cbb6798ede54fe1fa99b8c7ffcd81860512c76dcadf6b3b5d0f2db859e4f6803723e3d2d18f4f442a266efbc9f4b776ebaeca05b1c21c7f2f1e9f597d46bad0a164d3cd66835cb9d75a5ec7aa6df25e6b7ffdb1eae34e267900a69f4cd22087f1233b2c5d03ebb6ab76dd49ffeb750f30ec645c227d9bc19c1d7a20b43b0537e0e2e1e5cf216d7795c167afa38f6ecf59baadc32231329b7f00cf7b475bbcfad176f790ac1f6d771621fd2499afdcf629ff207edb89d95d75237101b74715f3c1659e571e645c2862e1e8fb1d94557e6fd63bdbb696b3ca2b07ce3f323cb5407121d3aac26083180fcdf7b1efffb27b351fb8b3916752ded92021e7dd9a1d052703020000ffff5af0de6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x000007000060ff000056a40000466400001795000040d4000036650000403200000000000000000000000000000000000000000000000000000000000000000000f9052c04843b9aca008304a2e1949f6e8e1c33fc2aa6ff29b747922e3f8e3200911b9d80b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000500d3d526f80007896cde25547231a8d8c95353734000000000000000000000000000000000000000000000000000c6df861d5dad0000000000000000000000000000000000000000000000000000001675630fa72833500000000000000000000000067297e00e4eb097e072b4ab6f1620268061ae8046400000000000000000000000060cb00a82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c3800db500d3d526f807896cde25547231a8d8c953537345300000000000000000000000000000000000000119e12ad42c4e4d2acfbade01a96446e48e6764b98000000000000000000000000000000000000000000000000000120e9f67ec0698c000000000000000000000000000000000000000000000000000c6df861d5dad00000000000000000000000000000000000000000000000000000000000006648009a2c500d3d526f807896cde25547231a8d8c95353734a399475d4fc24d4fab00f7448613c1bc8b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041f022f9bef26943cb9a0898b71c645b301e169b28b2691a586eb9a3400099b2d83214356aea627082b71b87e6cc6e0e0802f475cfbb23c4fdff6e729300ae19f60b311b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed1739000000000000000000000000000000000000000000000000000c6df861d5dad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000500d3d00526f807896cde25547231a8d8c95353734000000000000000000000000000000000000000000000000000000000066487448000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000053000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000821617a01e519020d2a85a411400544c4fb674226f3f9d1e9def881b637ad8b81285f25bfaa06f2c0a4994427200bffb5001e1b184a7ab54a62ab3b0919f5cb2c33544958eabbaf9349449843b009aca00832932e0949ac4d9ee5c30339a24e1b784842e58f363f58458881d7d00843dc3b48000b93424ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a60000000000000000000000000000000000000000000000000000000000000002f00e8b9a17dc2f3792b57c88c62db1dd50061af35722c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000000000a20000000000000000000000000000000000000000000000000000000000000000ea00000000000000000000000000000000000000000000000000000000000000013200000000000000000000000000000000000000000000000000000000000000017a0000000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000000020a0000000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664838e30000000000000000000000000000000000000000000000000000000000673586e30000000000000000000000000000000000000000000000000000000000000000001ba8bedbd5bf3fef7b8c88dae7cbad8be3e270712e75155b006649ed7bd1b8fcb6e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20e00b3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001b1000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e5795528000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000000000000000000000000000000008626851ab800000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000041ef00d173ee08d8dcbd9032dc87f8a215633637dfb871209647f637450eef0ae9a4002c2d0794d4209190b5f05ca10c03ee9b4cc9b9d04fcef9bb403e9c4a50b44800751b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f963e85a131f4e00ea5391acac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664834fc0000000000000000000000000000000000000000000000000000000000673582fc000000000000000000000000000000000000000000000000000000000000000000c76fddd1264254448cd1f45de936951d1dc769001451462ac610ee0e452cc2d3b5e8b9a17dc2f3792b57c88c62db1dd561af3500722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c50031de17e20eb3792c6b7f558299edf95ff23d00000000000000000000000000000000000000000000000000000000000000185d00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e5795528000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000000000000000000000000000000008626851ab008000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af0035722c0000000000000000000000000000000000000000000000000000000000000000411420f0f33313f23748fee9cc6be864686958c6b6a6f0ecee6a5fc4009f755fd7a1465bbfe8453975ee1083c2d1f69855371e5d817c3f024d199f580007493ed715011c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f96300e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066482c93000000000000000000000000000000000000000000000000000000000067357a9300000000000000000000000000000000000000000000000000000000000000000008b845b82c2b34425833a99abac7005554f1b1f67b70ba2291967c3315146a7387e8b9a17dc2f3792b57c88c62db001dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000000f6b00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e5795528000000000000000000000000000009994bf7c2e087773f963e85a131f4eea539100acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800626851ab8000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000e8b9a17dc2f3792b57c88c6200db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000004186d1cc6861699e59a9c78aaff7614ea1189afa1109e40064125cc553803bc78d0a1c07298358939b7bc2d700766938dad2e66a87709100bf61bda3af40e1f4e287ac1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e00087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066482d29000000000000000000000000000000000000000000000000000000000067357b290000000000000000000000000000000000000000000000000000000000000000005342ca699b456d167b0088e5bea6dfd534116a23eb96250146a3ae22efb67bb9f3e8b9a17dc2f3792b0057c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d00000000000000000000000000000000000000000000000000000000000000103e0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003419200bdeba6600000000000000000000000000000000000000000000000000003410092bdeba660000000000000000000000000009994bf7c2e087773f963e85a13001f4eea5391acac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086b80a01e20000000000000000000000000000000000000000000000000000000086b80a01e2000000000000000000000000000e8b9a17dc2f379002b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000041c25df3e2b10d2bb8782462d1233273333800fab1ec14364b7901909a4c371f028e257d94b2f9b10311af3ac7329e5e099600b94921a930ac6260f68519fa72fe94d91b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066484020000000000000000000000000000000000000000000000000000000000067358e2000000000000000000000000000000000000000000000000000000000000000000046109a8400f39fd1eb398b2edaff8a9af85bfe3b989a4518953a0a557e556f0f78e8b9a1007dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95f00f23d000000000000000000000000000000000000000000000000000000000000001fd800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e57955280000000000000000000000000009994bf7c2e08777300f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000e8b900a17dc2f3792b57c88c62db1dd561af35722c0000000000000000000000000000000000000000000000000000000000000000414fc97035962585a98dad964c00322c5bcb9c1664c6deca1089b27b46314ff2a3b60d892f3bf25aae0ba6b469000aff5cdb7796bff08f37909382419ed7b32cc27a381b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066483b6400000000000000000000000000000000000000000000000000000000006735896400000000000000000000000000000000000000000000000000000000000000000000c4064d0b3e0e61f9b78bbfa5ccef8d6dfd4248e509d148c51c8f5db1376c00222de8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20eb3792c6b7f55008299edf95ff23d000000000000000000000000000000000000000000000000000000000000001cbf00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e57955280000000000000000000000000009994bf007c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008626851ab8000000000000000000000000000000000000000000000000000000008626851ab800000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000004168e0654d8f80170050574f55a4afe38f18d15173e2f84777597cb17d54cfb0505012bc57de5a710031a866599765db3f856f8a9aabadab927f84ea3932a331cd5b051c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010060000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066483e15000000000000000000000000000000000000000000000000000000000067358c1500000000000000000000000000000000000000000000000000000000000000000045f33f6cb1eda163c20b69eb1b9f18c6e8689c7a3c21ffd44700d2f005c4b0d05fe8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20eb300792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001e8d00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033a89f13efea00000000000000000000000000000000000000000000000000000033a89f13efea000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859500338e00000000000000000000000000000000000000000000000000000000859500338e00000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000041fb49004fcb6c502ee2731f05db584abecddeacd16b5c50d107d6ce8da382ed92c33b00bd1dd0b44c698f566bb84a49d2877f81469515ac701435cf56f645de012968001b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f963e85a131f4eea005391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066483c00000000000000000000000000000000000000000000000000000000000067358a00000000000000000000000000000000000000000000000000000000000000000000a2b56b253561a3b7f8359cf8bdd3acd24f7f12b00079c5b01dddb06594c62ca116e8b9a17dc2f3792b57c88c62db1dd561af3572002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c53100de17e20eb3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001d2a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034192bdeba6600000000000000000000000000000000000000000000000000000034192bdeba66000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086b80a01e20000000000000000000000000000000000000000000000000000000086b80a01e200000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af3500722c00000000000000000000000000000000000000000000000000000000000000004103ec1cabad7dfe4755e32f5d1810a1cbd14ed40932f450fedf0b148500933f68535f956f9e6ec1be43b6af5356765150e66b54496595172e8f0155870039963252ab1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f963e8005a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066484047000000000000000000000000000000000000000000000000000000000067358e47000000000000000000000000000000000000000000000000000000000000000000321591c4052e0a7dbb4c7518a14a48008593428d7b06e62911daca08ecbb352316e8b9a17dc2f3792b57c88c62db1d00d561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001ff000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033e0e579552800000000000000000000000000000000000000000000000000000033e0e5795528000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391ac00ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000862006851ab8000000000000000000000000000000000000000000000000000000800626851ab8000000000000000000000000000e8b9a17dc2f3792b57c88c62db001dd561af35722c000000000000000000000000000000000000000000000000000000000000000041fe706d034a62fbf40b6a76b9ffaf6dbb1dcd54f6a8138200dfa7990eab963df0d27363abade423e9bb332c0c3e4daa6b904553e0d67a4c00ba3c05f0b97feb825f7e1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001821617a0005e3a2e0616f0c623df9c596bdeb3ad60c04df2ab06f75db7e85d159795247e0080a0391078ab76b7fef5e4eb2e24e40748eb065a4ad08345161318dabf3e62005e2ad7f8aa14843b9aca0082b3cc9453000000000000000000000000000000000000001180b844095ea7b3000000000000000000000000530000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000040015cb2e9221b821618a0de86e098f2f2e2b0bd3f892a385600318c17f2c168407d45bb99e9b947f3b63d83a02eae7e0b8d004c4d580b585a001694be7b8375d702d2024e8270318ad48d67ee6cf88a17843b9aca008301f1002694400968854de5651d7fa85e05e3624d70b25852b080a4a0712d680000000000000000000000000000000000000000000000000001901f82abb301f082160018a07a5badfd2b4952fa34f9e0af0f6df0830012c7dd610f394a4c9ae006ac00ac4515a024089133c82b8fe324a426209388dacf97a9703b8b43259fc783eb0055d0ac9bfff9053433843b9aca00830475c3949f6e8e1c33fc2aa6ff29b74700922e3f8e32911b9d88058d15e176280000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000b8eecc9e58710519088016ec1a9987e2028b1de00000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000030627178ae35d6650000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf80095922406523887e5c157623c38db0b8eecc9e58710519088016ec1a9987e200028b1de9e12ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000026e6f308440745d400000000000000000000000000000000000000000000000000058d15e176280000000000000000000000000000000000000000000000000000000000000066489a270b8eecc9e58710519088016ec1a9987e002028b1deb3909184c6f24aff89103a46460b75f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000413c2cab4548791081989c9f59688b3d00c769ccdb043d2e0a0a589e37b3422e39146ab06aa8408ed021fd87dafd75a9007191b15f085be3053e602ef68b33253aae551c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000b8eecc9e58710519088016ec1a9987e2028b1de000000000000000000000000000000000000000000000000000000000066487443000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e600764b980000000000000000000000000000000000000000000000000000000000821617a03a9f9a29d468da0eed8804b6757a02ca0a5c2a7001d48867d03a6100fe99947554a060ab1e21468f43b593181264051916ded44a3bee526f44c597006671b79ebb31ddf8aa0c843b9aca0082c08794340bad9627cb72d1c4cc92c700f53c4995454130ae80b844095ea7b300000000000000000000000051be4617000069a77050be5273d34e6155fdb7e031000000000000000000000000000000000000000000000000000004922475e0353c821617a0e546009aa5f72267023500fba759c0f8047393f1ea0ed3a80bc914db1dde18bfe0a0591b813a5700d8280094fbb1d2c75028379172fe837d87f602ed36c030e9e60424f88a02843b9aca0000830252339437088ecc92aa376f1535bd42186efc3a92b39e6580a4a0712d00680000000000000000000000000000000000000000000000018a7a1a84f4cc008d75821618a05bbf3f545bc8912734c3261ab5b3616170ab12624c202f1a0700b7e64d53609e5ea043acfe0eab2e612974c2f6eabfc0362e8e8f5f91c2a94100a3dd9aee28288f22a7f9079418843b9aca00830493e0949ac4d9ee5c30339a0024e1b784842e58f363f58458880214e8348c4f0000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000060000e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000143fc367710128d7cd65dc7c100f12d09ce6c318a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006648498f00000000000000000000000000000000000000000000000000000000006651840f0000000000000000000000000000000000000000000000000000000000000000009a5bb88d77989b1b3c1ed995bed2388a4e00795143ebda0e02e51d7dabc669309de8b9a17dc2f3792b57c88c62db1dd56100af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d0000000000000000000000000000000000000000000000000000000000000022e300000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f93f69525400000000000000000000000000000000000000000000000000000020f93f695254000000000000000000000000000000143fc367710128d7cd65dc7c1f12d09ce6c318a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005543df70029c0000000000000000000000000000000000000000000000000000005543d00f729c000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd50061af35722c000000000000000000000000000000000000000000000000000000000000000041180d4303ca026efd90892f285bcecd2d27c4522b93349c6a400025a23782634eee4e1c9f5825ed12f46c31c72540784399b06ce93052737249008852ff689583a5aa1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821618a01f5aa63c005c5459bc07857387205008bc1b943e32a77d37e1ae9365bdd131b669a0547400d819fcf8626dca24757161687e4829921a4e3cb337bcde1133bb2c2da19cf800d20d843b9aca00830478fc9453000000000000000000000000000000000000000287038d7ea4c68000b8642fcc29fa0000000000000000000000005b60a5e9006f5d9f5247ccd694671f0f26165fc7860000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000478fc821618a018eff4e222e4cd301f005b76c23768f5d52796304a6571c04ad8d3b49a500c0949a07917134485edc200b2d8591e3a160136c3ef06316256a9725e7f7a15a3f3e23465f8aa03843b9a00ca0082c09f949e12ad42c4e4d2acfbade01a96446e48e6764b9880b844095e00a7b300000000000000000000000037088ecc92aa376f1535bd42186efc3a9200b39e6500000000000000000000000000000000000000000000000001386e5c003bbcf6f7821617a0bf718de1a5885bea9ce5bb26bf15a6bff96a3da57d4a440096e0b6ede53a1e6c2da03cee0529b3efa145550383dc71defdaf8d4aee308a00340332834906613e6d3470f8cc81bd843b9aca00830169e1944a24056286980018726e32ff0aef7c0fd5636a954b80b864c29982380000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000037088ecc92aa376f1535bd42186efc3a92b39e65821617a0a2bc1100582ff2d0ceabf8ac2dad32ea8f74c9629cd40827fa43d652a021bb6170a06800c58596f636f750d62b3d8dba70812601ee9275db41deec0e5c4f4602680ac300f8aa29843b9aca0082c093949e12ad42c4e4d2acfbade01a96446e48e6764b009880b844095ea7b30000000000000000000000009f6e8e1c33fc2aa6ff29b70047922e3f8e32911b9d00000000000000000000000000000000000000000000000000001f68a9f043668e821618a0e5ad93f448f489f49389dff8a82b26191b00832ad898549348e31fb69b3f3eb332a0394d83d32022078e048223969a7f9e005555d76d900a3214a5d35a8abf1f0fd2dcf8d208843b9aca0083047785945300000000000000000000000000000000000000028711c37937e08000b8642fcc0029fa00000000000000000000000064269dd2b3654b3d34cd63e858ab6bd92e00f88acc0000000000000000000000000000000000000000000000000011c3790037e08000000000000000000000000000000000000000000000000000000000000000047785821618a0d708fa65182dde5e168ac4ed57fcbc6675c73fd01ce2003461cac43f2126ec5cc9a0094d5e3baccc3b27f7c3b69bf355945ee74a38f100b8965bc5feefa9697c919c45f8eb20843b9aca00830333f19453000000000000000000000000000000000000000280b884a93a4af9000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b98000000000000000000000000003d727e44058697f26d444f34746fe3569c440bed00000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000004cde9821617a0b8510012b109e835f5ec1aba7800b7b5374a95a7eca2ea62dbe60c002c49781e9ca0001182213676d375d822a876721238cf7f27079474f89c7130348be27e2e50710016f9082c09844a817c80830575019437088ecc92aa376f1535bd42186efc3a0092b39e6580b907c41d445ac800000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e0012ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000000000029d4294bbcd1174d6f2003e00c365831e64cc31d9f6f15a2b85399db8d5000960f62b89b9dc8fdf9f34709a005b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e4155010000000003b801000000040d00fd4644a72ffcefb2635f3810e3a554b46070bd51005feb92cfc99b19d2b68df36347e96055bba3448064ba8e3f3d0d99139365610047dcd1156ed405e382eef21f9d00020e016215bfa4b65c1a71fb9a83a09c75009b3749f50e1e635aa5e897b0a97965cb09293d64038c65f2d8650ebe0a365e001bcd2c9957e7275e5ecf96d0a8aa47ef3b0003112cf2b08e742087ecc409be009e1d5d43f43aaf6eb855dd2c2f26fafae708e1982a1347675a04bfb38373c4007c47a59e34f5b77535a2594cf748eb2f3d6597a6e40006babab3c654f8a57d00331fb18f98b9fa03eb13073c16a7b37f4bfe3b4a24fece5b42b72b3fbf21c300314cd9f5a5a4a3e57b3f19a1bd2d8895041a3990fcf13d72960008e2f8ee820095ae8e2b79057ec95c9d2900a1a9dd29163f5d9b2215fcee24c8e2a617d38b00ec48eb972cc09041d0285e4274f6d8f36522e129751937ccf4067944b5010900d9d30124deb7734d78d36e15bbca66177a08fb4a04c9b7390fd85aaf72a9590003741dc17052574d2541fbc4e8610db24a59a97574c1aa69677e57a86f7a77002a93000ad11289d14984cf29cf3bddcb852c95c95e08565b0ffe8ca587f0c60082e136e14c642e9dd0b8d1db2942f825cf7f8664c9eac505f3d445b5a7540c000c677e74de68000b999591a654886cf3df624f935efe4e7de6500bf6a6e65400a767de41e76ebd92551d1ec0946c3afca621444cfa86e5410aff882141de33006d9a1d67546ded03e87c010cfd36d3d9e51096680c8e392165fc259abe374400ed233c0ea4a29bf9867edce7734b80c0463df89bc25f7686120307e9ceef0300bea7593216b9bd7689d83d62439b010daf5a7846801c58af605d34eaa135ac00e909417ed07ac1ec1fd7f257facea93043496bff2df0ba5bca975a91b29551002d0ebe34278233b8c61d34494882f522d8fd000e4bbbbe6eb33c46d3883fcb00d314983b174f0029284c45b1c6d3adf8987f857fc222bdcc24a588892ae0e000da91d208ff649c4bd32ffe3b53ad198bafcec6320a9f010f2ae4e20a53d36700d55ae1fb9833accf5cbe77ea3a549f03f53d6d83db6e0ee9eb79c57e7431c300f8832b3f0db69ba9f9e4015ec1444b7b15e014627398d01efc820112d026d500c849e2dc44b8fbe27fd3b7116d2c410b19c4bbd76e95ef37d3d00c3e4c4c1000744b7081a39feb827e92ea473b78de05b2ce048735ac723f4ddbd51303b500006648731600000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3e00d4dd7b811dd1a72ea4aa7100000000036a825401415557560000000000087400a03300002710514416c1cc977addb5ab7453db527e7af9bd90c2020055009d004294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6000000004889a170b20000000029e757c6fffffff80000000066487316000000000066487316000000486c255030000000002e1200c40a2d68758be8e4d2f62700407a481e735d1184f2c57d5f36f8382e06ffeeb64b5221c5afc0bf8c6d4a45001d9bf04d32d704bc6b7a006503446fafbcd279033368594ec70892443bfd44004280606896e93c26ab9a0d71424c35254f1785ff7b19fd5796ac406f1a3ea4009757a69283191dabe3d2aeea74babdd53e6099365fffa7f805162558f996f0005ff825b6fa5513249b6df9a2b8c126c741f8d5c2eb9a69375f0c5650bddbc900bf3778a884e6e1f40e2bb278d3da0d59084033626f6bc18689f68e59fe3dc0002405e318d10055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b000fd7f2e971688e2e53b0000000005f64885000000000000a75cfffffff800000000006648731600000000664873160000000005f64c50000000000000ba8f0a0074b78e2459cddbf337ad941508a5a26ac0f08dff42e4a6df5f980e9502135500a006c27b3bcddec88a9c1d98f4bd1ace1b78559ea46055a841f9923d8246ac002f25daad26fceac2027b1c2ea7071ba75fd159012b9b7a22976bdd4d882dcf0077ae3f9e8b2e76678618d73de3080442d724577c3af4a9a94d05eafd92169400fc36d0a5e469e09a31b4e9f87668f7bdb5a0e18289e0c71e78df14dc869c7700735c8cb0ce579eb8835ebf1b1c4575bbde9b6a82e462d808ff084033626f6b00c18689f68e59fe3dc02405e318d1000000000000000000000000000000000000000000000000000000000000821618a0f76a392e6acf7079539d5ffbe193170083ef52a946415e8dad027fae7a8aa54d93a021dd45257cf8bc873a83bf488d004c1378bbec8edbf37e59c014268f5c037906ddf8aa168447868c0082bb1494009e12ad42c4e4d2acfbade01a96446e48e6764b9880b844095ea7b3000000000000000000000000009f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d0000000000000000000000000000000000000000000000000001b4203f77283c0082160017a090acd35b33a0d1a8dfb1c4e74b36c6d6c1b764374fb6b2465efc24e1500010fda4a05abb0f85c5b0be1c6415ae6a1516c12d1916899f98a94c319b1534003868906e72f9052c0f843b9aca008304705f949f6e8e1c33fc2aa6ff29b74700922e3f8e32911b9d80b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a500eeca8210a1c489a14a492833bda359ecf4de500000000000000000000000000000000000000000000000000014d1120d7b1600000000000000000000000000000000000000000000000000000002590ab8f6e35b860000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e500c157623c38dba5eeca8210a1c489a14a492833bda359ecf4de505300000000000000000000000000000000000000119e12ad42c4e4d2acfbade01a96446e4800e6764b9800000000000000000000000000000000000000000000000001e33f00f00d41bc1c00000000000000000000000000000000000000000000000014d100120d7b160000000000000000000000000000000000000000000000000000000000000066489a22a5eeca8210a1c489a14a492833bda359ecf4de50520a5fe400dad944eb96de49b99bf5245b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410a7ec741ca560bd603da98d83714bc7e614bb053b31f52001d98803d768aa2be980e371a6b1c05951124a4cc42863fea36c7661cc3ddd800cea3d3fc95958ac07c9c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000014d1120d7b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000a5eeca8210a1c489a14a492833bda359ecf4de5000000000000000000000000000000000000000000000000000000000006648743e000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000053000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000821618a047b782b3007be93686ef347e1249e91d54ca53b2190732a7242932f1ce33b6625fa0294500e814759da91e2a09b357ca8575b1b40d19d1e63ec67322132eaa634a29c9f900053302843b9aca008304c74c949f6e8e1c33fc2aa6ff29b747922e3f8e3291001b9d87038d7ea4c68000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000b66ba6f96f1f73287f694721e8df11ba3f36681f0000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000b4cd77019870000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592240652388700e5c157623c38dbb66ba6f96f1f73287f694721e8df11ba3f36681f340bad960027cb72d1c4cc92c7f53c4995454130ae5300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000915e71b18620000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000066489a27b66ba6f96f1f73287f694721e8df11ba3f36681f9a7b9f009762714812868ad990d863ed9600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041320ec8beafd0b4d770d811511c6e88237e90b981691300b27031d06b0abc2a35ac0bdaa317abc2dd7204b92844354cf0ffd6143b104f002a89fadb10a7e3e1f1d82e1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000b66ba6f96f1f73287f694721e8df11ba3f36681f00000000000000000000000000000000000000000000000000000000006648744300000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821617a0ad353000870b15f3b0db01eaff1ce02b0af0ae76c741a09f0b2bb2c4eae9374d99a06000b37c7f619bfa2205c6ec26c939a46d7fca6b767bb12c02e072aaa8779ed45600f90aec11843b9aca00830603679437088ecc92aa376f1535bd42186efc3a9200b39e6580b90a841d445ac800000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009e12ad0042c4e4d2acfbade01a96446e48e6764b98000000000000000000000000340b00ad9627cb72d1c4cc92c7f53c4995454130ae000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000000000042b89b9dc8fdf9f34709a005b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b78d185a741d07edb340012b09008b7c5cfb9bbbd7d568bf00ba737b456ba1715019d4294bbcd1174d600f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f62b89b9dc8fdf9f0034709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e4100550100000003b801000000040d005bb6b26957652cb07d4c90cade64aae09200cc6338bbf241169cde7f4d02599dc424b6b6f293e52789358ef2156f8b280e00a27f5fd9dec72b0c17ee35deb36d262e0102053817fac58573cb269f4b96f000641ec108c86ebf7ded4daa97ae8afc5b1cde0a0418e78a70ef8d45ddfa3186004b48ab967578b803c9d95c76f419150241b3e7b2010314472d3d4d4f39f8e900bc4c0206092d43a0e2baa8d98183eed0cba3c72244d80f62bf4261c1993ba30068b935f0ffb8325b0ca6204578b2477c92f53de688a5a14b0104c5b79b3aec009ce1d024808b7648335040ffade2c183713cc61da4a200dd7e194807fdf898009506e8668ee26953dd2ab241ee24569766de14dfc3a69131cfb6c8320106f1002a010281452f0c36703b5775ca0a2379c45a904f4b3d6db7ef49a7834abeef006559c65604019c49cf759976be183a06839f7e5503280526acda000ea24d57006400082cd35b208da2331d764685ca9a8c0041771bdbb5c04915e5eddca6ca0010a0114852b32fcf7e99bf1f30d21b43873405a160505d00d4400b36f38e200014f8a5ea4d000ae9ed9b63c98be912e651fb0f218e21ddc9ba36196ea265d600b2ec9d8dc70248a2623468cc74f2762c77fa2bad43b840035309b0cb1f99d200f3bf7b2570a5c0baa5000bf82f8de7aae305f23dbd602e03486b39539db10500a871ead5ea3f870b81d0a5420c897c8e05b9bacb9a5214d3316a8c64bd57d200563c10161ab503b2b0b9de4bcb000c596e53f5e8fb4c6f9c551add61355d0800f569a2df155933b4c19ad5844cd47bbb2cc89588c9332fdba44937f197a82e00e4e5a28cb4e6549d137b43b6a0baff312f000d29e8a50b6eb5e2b0464b97f20078c8b21c92e088f27899b91479abd4c36b2107065237b55c6c445e271c9ffe004d7462ec3a369c53e9f4564ae429402b8f32eb5131000e0f91b89d4a2e517600905b99350ff5724fcc331a18c1324de8d3c620b1a47cebda4fcb4e67c43b8200e1d79a72b16c301d1986d65ea3f77a33f32d77bb57b3f017f0010fb2b9993f00ced826886646839b4a6d8c20e0f817bca2abce20d6833f0b898ccd1f7877ba005711713d95816ac5296a9bf97979dd8a2f37b14094b9832e58e847659a011200e04ffd75059912b998af576e44b735441f84eeaa93e73b2cc2da61340cf3d70012441ff8d455c2d67fce63cd741c8b140eeb98a436d1e7ccd4623d8f770df000d3b5016648731c00000000001ae101faedac5851e32b9b23b5f9411a8c2bac004aae3ed4dd7b811dd1a72ea4aa7100000000036a826101415557560000000000000874a0400000271056585f2e16aa2393320715126ec23a2c3e6638ec04000055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e97168800e2e53b0000000005f64884000000000000b3b1fffffff8000000006648731b00000000006648731b0000000005f64c4e000000000000ba890a7f4a19c758010087b1f0ee054cd746298dabee160f42e4a6df5f980e95021355a006c27b3bcd00dec88a8d029bc40169060ce610546482025fd2ccfd541f346099272e07064500f1feeb83ef63f8162ce13445163ff060c1f9c28980d77af036c4fe1fbdf05900adf38ebacb94363f1bdf17fcb1a23858d7cdfdb953ea18d8c156e259e72dd40043486a8942586b8a82b42e703b17ea95993cae335210087315cd4e8ad90e9b0075c5b2dfb6442af2d86bf55b32a053265a8a985ab954d58a106f52007ff8fc00563522836dc4b6e400550078d185a741d07edb3412b09008b7c5cfb9bbbd7d00568bf00ba737b456ba171501000000002d557a290000000000083a8affffff00f8000000006648731b000000006648731b000000002d3e76be000000000009002bff0afd22aedc57a136eadd06ed8bcbed59da513b0354830be15098341e6600445acb1e1ed9b6450fef997032954234c7df5d12ba2b7c1cc6119e77d8200e00012096ca784970952f3a8f845a8a4f919b4b898dda4c46c3fe93c58126ed9800bb89060962670b58e6efef0bb0294ecddd0b5d40ef2c2fbcd0c0301171d39200d6b87679f0465863fcb0feaeea47b7fbbcae38286cd70dff2c18749e0a96030094bedbc34d5ec5639b75c5b2dfb6442af2d86bf55b32a053265a8a985ab95400d58a106f52007ff8fc563522836dc4b6e40055009d4294bbcd1174d6f2003e00c365831e64cc31d9f6f15a2b85399db8d5000960f60000004880850f7e000000000038747948fffffff8000000006648731b000000006648731b000000486c00309ad0000000002e0ffcac0a9cfc607245c040388786eed6a182fe65c982ec007c3b2499dedca7c50683c081580c8f09667d7503f5221cb503d702821d4774001e7bd9a151ae46a5f9d7167814220b5a7d4d33fb6f9b3505ae91f5deb62781000dc5892afa97f271e6069320cfaa016f428c7becea46fcb576a29b54f1ade5002dac97ebcb89c90bfd7ab7b191e790fe89548a320d8a3eaad16a4c66fb3e4b00974cd4c2dbcb2ffa7eee85cf29f32276f51fd27c7b02a92dc151c25cc3a668005ace922d1b6c5ab954d58a106f52007ff8fc563522836dc4b6e40055002b8900b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000005f64884000000000000b3b1fffffff8000000006648731b00000000006648731b0000000005f64c4e000000000000ba890a7f4a19c7580187b1f0ee00054cd746298dabee160f42e4a6df5f980e95021355a006c27b3bcddec88a8d00029bc40169060ce610546482025fd2ccfd541f346099272e070645f1feeb8300ef63f8162ce13445163ff060c1f9c28980d77af036c4fe1fbdf059adf38eba00cb94363f1bdf17fcb1a23858d7cdfdb953ea18d8c156e259e72dd443486a890042586b8a82b42e703b17ea95993cae335210087315cd4e8ad90e9b75c5b2df00b6442af2d86bf55b32a053265a8a985ab954d58a106f52007ff8fc56352283006dc4b6e4000000000000000000000000000000000000000000000000000000000000821617a036d77688c07a2f5c1925d129a37291e753862b7a2e3ef1d0890010fe3b45e78d87a05f33834c60b840c5c8b36e39be0a14c1bccc1d72f64604003ab43cfe97f666f42ef9053302843b9aca008304f995949f6e8e1c33fc2aa600ff29b747922e3f8e32911b9d87038d7ea4c68000b904c4c7cd97480000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000090cc556f9a2712e464af01a4ae6d30fc8f0b8ec90000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000b52bc6b99004e00000000000000000000000067297ee4eb097e072b4ab6f1620268061ae800046400000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a70090c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796810056adf895922406523887e5c157623c38db90cc556f9a2712e464af01a4ae6d0030fc8f0b8ec9340bad9627cb72d1c4cc92c7f53c4995454130ae530000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000091aa45ba8490000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000066489a2290cc556f9a2712e464af01a4ae006d30fc8f0b8ec9cf05311299f249fbb60864a7af899bcb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410c45aea22e257a1e379eaa7000c7d9ab7a0078d089c6bb824ea51c801b4a0412064f64a580907596a85bde2600baf055ec6e135068397e9ba23a856e5695e548a5021b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000090cc556f9a2712e464af01a4ae6d30fc8f0b008ec900000000000000000000000000000000000000000000000000000000660048743e000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad9627cb72d1c4cc92c7f53c004995454130ae0000000000000000000000000000000000000000000000000000000000821617a0041bfe2f31e57bd5f272039e1bb6ef85572d1fafa0ea487600364dbc7cc3cc0629a02ba4eafa06cbcab6c212d24acaf2180c6b85a9f67ec80078ed41f98be33dcfa2cff907940c843b9aca00830493e0949ac4d9ee5c3033009a24e1b784842e58f363f584588805299c0770720000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000060000e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f963e85a00131f4eea5391acac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006647aeed00000000000000000000000000000000000000000000000000000000006734fced00000000000000000000000000000000000000000000000000000000000000000054cac1bcb4aa8cde1b8d59d78ca713ae00603a766cc15d4191b104f97c0c8eb202e8b9a17dc2f3792b57c88c62db1dd50061af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000cbcad2301a959ee617d61edb85dc733a980e070a000000000000000000000000000000000000000000000000000000000000000eee00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051c64b571e1800000000000000000000000000000000000000000000000000000051c64b571e18000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d375100fe908000000000000000000000000000000000000000000000000000000d370051fe908000000000000000000000000000e8b9a17dc2f3792b57c88c62db1d00d561af35722c00000000000000000000000000000000000000000000000000000000000000004199bf401cdde229a6ff75f2a67fb58d20141f55b6e47f53e100c56f25d84749181e29b1a842403f78160e86a2659873d9e146fd6f6256bfa200e624e55096da34d7b51b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821618a075c3210017e09b5b46b56e3b1cf66ece612f884a82f0044de6f2eb2c7e69a4ae3fa00200ec72ce98c85aa384295ca2ddf79f51aae4acacbb8e7f68a7d9b5ad4a86d3fb00f8aa03843b9aca0082c1bf949e12ad42c4e4d2acfbade01a96446e48e6764b009880b844095ea7b300000000000000000000000007968156adf89592240652003887e5c157623c38dbffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff821617a04c7b9c9ae209cf1681fe94d4900f2a13a700d322d0806bb51f6017ec6f909efa94a04edcdadfc6f9f8926d3122da323ad50090a996c209e24a22e200f908087cff314df9053303843b9aca008304f9a494009f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d87038d7ea4c68000b904c400c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000234fa03265f49c1e321effff7c008959b259620fac0000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000b52bc6b994e00000000000000000000000067297ee4eb097e072b4a00b6f1620268061ae8046400000000000000000000000060cba82ddbf4b5ddcd004398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c38db234fa03265f4009c1e321effff7c8959b259620fac340bad9627cb72d1c4cc92c7f53c499545004130ae5300000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000091aa45ba8490000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000066489a1d234fa0326500f49c1e321effff7c8959b259620facd648f41b76a34b46800e49e54f0fd6b70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004116c6293c0055279b78d0cc498012df1a62330bab513a3f18db1a17e18377e6bc35655d51003612081708c99a2dbd3aadb490c589ca9af6dc8c1ac6e59842189d8f8b1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000234fa03265f49c1e321e00ffff7c8959b259620fac000000000000000000000000000000000000000000000000000000000066487439000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad9627cb0072d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821618a09b3510eea679244e23add4106faefa4900f2b5e85ee24380d6a9bdc40091c96db8a0604b1a2b78519570382e1816f731002103168f43f8f100b404223b17ee0557e460f9082c1d843b9aca00830321360094400968854de5651d7fa85e05e3624d70b25852b080b907c41d445ac800000000000000000000000000000000000000000000000000007651cfc1979132000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000029d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b8539009db8d5000960f69d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b8500399db8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e41550100000003b801000000040d00a7199a003960d349125b17388678875dc543a8f891c1bc80482cdb8b5d654c452d12cb0048d44390044817f7f973a0cb81946349947724ee4d57b5470a08b6f3b093010002f21a6ca6a776ff32b8663b62f7cc6c5aff27142a7f18b7b57f96b76d251d00476769285c778622760409c4457e572988dd40f87dce4746585613db56a09600db7136000329f2371bb439e31495eed3ce3c71f0c7e3b92de6637a7301263f00ba8e14b95d194c4381bc19e6d128a9db33d57507f5a5a856c2720d6c2e9e86001e6b5ca5f21dcb0004aa2eefbc1315d25cb03e0b75ba5b49e1c6c94c3d8b11009752f2d5775c62e1746d588049d3e41ae9699555e116b77ccfe381bb7858420016ee09c07a839e7fa0c68501066ce2f7bb775d473a3c96313ae2d592fe6a9900001a9a41b6e25c83ae94271bb7945dd4d75e769fc690a99040355abc5a4a9400fa2307bc1563ae090ce48af6ca23540108e9144f5d2411960a5e34981372ac00785fbb369d8479549cc2daae37e43ec8b56d72a4f51e1cc27a011cbdc409d900f9737f3caff908520bdbd986916937e599c365010af8ff37eb66ecf9c0aff1000ef33c8964403aa95bef2b4b48a9160003efb839d45d4d534ccb79b480894100e3fbd2cf7425690a4285e1ec770f399b0ed27926f56bd2000b4f74436c078700220d707c162ae7899f5ee56b1b4e58db53964c81095a09eacdb46143d1d3bd001149846023f42762f93d1bf28b58206395a5ca1758b6f6c73d5d7b010c997600f6478443fa6d8bff6f90855b3f64625826fad3325a6b84111e96e7a8ef0b72005c9f3b9165c0e6b444e769350a5a40f88cd58e7812226b194e1346b22f338f00010d38c7bfdb5b787adca4b8b553758c0d147ae6b5af99ac97294a79ee9ac30010762609ae8b9ab604a345a6c7f0cc6f361dea8345fd46be1f29a3b313e36d009aa6de9f010eeefa26e3991188be36aaa9d41ed94684f5bd9122cf071412b0004b665fb96748ab5376e99bb16bfa55a657d370eeee8748e3bba0799b4d4d9200f0399c37479ffaeb010fa1a5d29e71446824fbeb477d61b06de52e40da6f1b00f647abc6665591cb33c39c1c7ab1216233877b35083e7de25bfd44406bfb2d00df333def8bfa751f65e9e7d70112070f639d5cc939bcd31993e52d21c567b10026eff1e402ef85b76a761977f704ac51c30fdcfea49555bb9f72afd66d56a7002352dca47dfa10810577346563ae9839006648731f00000000001ae101faed00ac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000000036a8269014155575600000000000874a04800002710e968efaf2a0f3e3e00e340f5519ac3fb74f6a6f60b020055009d4294bbcd1174d6f2003ec365831e0064cc31d9f6f15a2b85399db8d5000960f60000004880850f7e000000003874007948fffffff8000000006648731e000000006648731d000000486c3507a000000000002e0fa7980acd6a8f8d715825853f0433efe70fae5d4607d0cfc0dc9d00bd814ae14092f42fb784584de1e27818c024cca3515f2e917e91753ccf674f00b4e6cdd1fd34b41b32b7a8f221adaebc0b224f4e220c3d3e7da29078fbe9bd00cc7bdb2c4fdfb5b29707b3c26ad2fc795363c1b12b37faa8bc1808a00f124b00e262b75d6bae74b08f800407a4b8feaf8f4efc5f08c5087fdb48975552d92d001e1ef02071122d3ddd2778f4cdfba550f10b8bba0f70dd3bd81dbc2abd72d40086eabf0fd47e9e016090a3f80fafc5394b6bae2e058f0055009d4294bbcd110074d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6000000488000850f7e0000000038747948fffffff8000000006648731e000000006648731d00000000486c3507a0000000002e0fa7980acd6a8f8d715825853f0433efe70f00ae5d4607d0cfc0dc9dbd814ae14092f42fb784584de1e27818c024cca3515f002e917e91753ccf674fb4e6cdd1fd34b41b32b7a8f221adaebc0b224f4e220c003d3e7da29078fbe9bdcc7bdb2c4fdfb5b29707b3c26ad2fc795363c1b12b3700faa8bc1808a00f124be262b75d6bae74b08f800407a4b8feaf8f4efc5f08c500087fdb48975552d92d1e1ef02071122d3ddd2778f4cdfba550f10b8bba0f7000dd3bd81dbc2abd72d486eabf0fd47e9e016090a3f80fafc5394b6bae2e058f00000000000000000000000000000000000000000000000000000000000082160018a0599c99c1e64d7d386545420399cff4a58ac488026375043ee56316677c00c8eb70a03535a30814d1891dfce9b622a11b5c42858fd7c6f763b7d46505440034b11deab1f905330f843b9aca008304a7ee949f6e8e1c33fc2aa6ff29b74700922e3f8e32911b9d8701e21f86320800b904c4c7cd97480000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000074c4010f4d18fe3c668b74b4fdd1694dff49ce90000000000000000000000000000000000000000000000000000001e21f86320800000000000000000000000000000000000000000000000000000010688ef9d8dd9c0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89500922406523887e5c157623c38db74c4010f4d18fe3c668b74b4fdd1694dff4900ce909e12ad42c4e4d2acfbade01a96446e48e6764b9853000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000d31555e1bb60a000000000000000000000000000000000000000000000000000001e21f86320800000000000000000000000000000000000000000000000000000000000066489a2c74c4010f4d18fe3c668b74b4fdd1694dff0049ce90ad6653908acc4faaae298ad73f62bfa200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041ab85c09e4a62d3136a83b1a85eb14268003e3373bd03ab2c83eb18ce6a07efe2fd77d60a48139f95a013d49bb506c59600d664c08b004d05402f2eac26c722105dc21b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed1739000000000000000000000000000000000000000000000000000001e21f863208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000074c4010f4d18fe3c668b74b4fdd1694dff49ce90000000000000000000000000000000000000000000000000000000000066487448000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e676004b980000000000000000000000000000000000000000000000000000000082001617a0ec8a7754cff9c92ccc16a0352b79e9e3a7f752e0a8481bee4fe8115800979c07a7a03311b26f873446ef2851c2446777713e74ec4a475d8cdb89cbec00237630158554f90aec0f843b9aca00830618329451be46170069a77050be520073d34e6155fdb7e03180b90a841d445ac8000000000000000000000000000000000000000000000000000000350094bd3cb10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae00000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000000000042b89b9dc008fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b78d18500a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba1715019d420094bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f67800d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba17150100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e41550100000003b801000000040d005c9e225d522cb14436d18000173e57be88cb50860d4c87354c546f61985c2fcb934d6aca036e701d6671fa00cb00f2f6e9736c99112189b596405f4b6acfb295fcc001012b2b5ecfaa3b12004915387d396965491aed37fd7d7af13a282d642cde77ea1f233f051fc4c85b0097114f56200af6166cc3dfe8e94101502df4beb3c4db3352c7b700024c72d700646a86f67fb2be68a7653a17025b3cad5039c4ad3d2ad7c70aa476691f26a500e263b1fac2e69ccabeae4edb3bc65ecf5bf4075d8fdebed5d8f6897410dd010003d50e8bc0b2693b764d46d5b3d75d62e1aa5716aa70456d9143337c907568000c5e2303cdda7a0768fd9525d0f508c2afb9ec43cde3bbbf672abed07bfd5e00977ac20004e80f7de8319a47d5cb25b702738a8b0ad01c672bbd0f604ae63d001d31b84aaafb1d8f4a3f23d9bf24ec315aacb3abfe2a4effcf0738a08420ab007889e2bd3e248e010636b8d20df01a5316df26d42da547580a231dde8e18350065f6dad5d8ec457de23915a835ec2ee3bb2da24f76cc3693ecd43fd264597400fbb083cccfccc325dc881000080018f29b1a9c30484658bba533e400b7d3740011c95726b38e21a0e6ccb539e2653a9bf7d938c65dd97fc1028e6a9ef8893c008f7ddce49f661abb256d69820d5b70010a5277f6d18911f0433df3e91c285c00e34bd735fafa1f18533ab57271e572e420135a7f3b5ceae1bcd54e649cc2fd00f0f8e8ff23d4dce5b741af30a94e16d3ba8653010b100e1118c521c9e7594e00ad9dd449f1548ee0f454dc184ebda4fa453f39eda76727bec27888f44d3b470097c8a45006e49e57ea8b2f30b98cd2945d2201964f1300000cbf3d3696893300abddefa212ceb4a1122de4ad629e5cd012d61f6c74e06c6c51ec43636135e8001edb8e784e24cfcb337033fab8885607db3f04427b9d16c4ab0eb4010dec0b00c83a3ce7a94177f091e162c0a9c4f257d152203d34832a927961ad637de16900b2aece6625a6f638c3c7f2fc90cb2357d2923d7a9d78257d770f76ee33ff1700000ea685091fcf56c9b0104590491a9408c95e0a129d013b1ce57726651d27000ffe913380415de6c90465ae879a3dce5941bfa2b73cb052c24670aff805c600a4377f7a000fcd033b2eb5d111cb3b733ed1f903d062b58a51017241ea30bd0080d2692ea3126e7ffa66ce81f84d88802148d9e677d61ec0ed15e2c73fdb3f00a8da50df33ab5668006648732000000000001ae101faedac5851e32b9b23b500f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000036a826c01415500575600000000000874a04b00002710ccf4a5f5a468f3cda46217bb8ddf67a80008e82f6c040055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b000fd7f2e971688e2e53b0000000005f64884000000000000ac51fffffff8000000000066487320000000006648731f0000000005f64c4c000000000000ba840a00980f6e364fabf17a1d7486665e455562ea1ab80c42e4a6df5f980e9502135500a006c27b3bcddec88ac3c77e4d09351c8e1a557766dd6f1633b8029795d4e100c871930a5d1040cd13752480e8407b2a2d05c8a2bacf9d151080dd47ee5e110059732d9ede2129eb982c24489d056192f00c9db0cb9256c9f0043d07bf1fb1000c614b95f94a744439f1bc311756880799e9be28ba11183eb0371477454adb00dcda2a687c6ca3b536b0abb6d77aae7d011bd4a7577903e001f54996bd6bd300d5aa2a03d4b0eff097e795a63cf300550078d185a741d07edb3412b09008b700c5cfb9bbbd7d568bf00ba737b456ba171501000000002d551abc00000000000007ee90fffffff80000000066487320000000006648731f000000002d3e7f6a000000000000092b800afd22aedc57a136eadd06ed8bcbed59da513b03546d6700782325bbf4a6a6a2ce062c54d6766ad5cdc0af8c0b9bf7ffad29665e16b19c00fcedaf6e9cca8bc989f201a8761a12a51519d10311033c7fd0b494823d7c3b00b82caee5eb32460fddd89ce001bc173486df99fd536ff93995128abafc7ebc00eb8a3589dcc29011fca01bead951687308c592f7ed8086f96903488868099f0046d25f88394e06bb32fe9984b1c46ca3b536b0abb6d77aae7d011bd4a757790003e001f54996bd6bd3d5aa2a03d4b0eff097e795a63cf30055009d4294bbcd001174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6000000480089a05ee20000000029fe334bfffffff8000000006648732000000000664873001f000000486c388a10000000002e0fa2fc0a4cb927c7145e7e69ddaae984a1008772607cd86df0d3df1d9c9e078fd1e569bc6f55a974cb62dd0a579f36c11400050cdd00965a494b7be58b8c3d59984b9adae66f4b2a143a5f264e94b82f8a00965f623f2ef812258ce6384a768770f17ae975c6d02388a0fbca1128c851a900e502a04be5245d3c12804a26f794fcfdd7aa55a5b1ec392d0841b4ef40a18500751be77820c5eb8108abc958ba3106fec1f10956505dcbfef3f8bc78b5ec9800c1af1b39b54e2225b4528eb7f54996bd6bd3d5aa2a03d4b0eff097e795a63c00f300550078d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b40056ba171501000000002d551abc000000000007ee90fffffff8000000006648007320000000006648731f000000002d3e7f6a0000000000092b800afd22aedc0057a136eadd06ed8bcbed59da513b03546d67782325bbf4a6a6a2ce062c54d600766ad5cdc0af8c0b9bf7ffad29665e16b19cfcedaf6e9cca8bc989f201a876001a12a51519d10311033c7fd0b494823d7c3bb82caee5eb32460fddd89ce00100bc173486df99fd536ff93995128abafc7ebceb8a3589dcc29011fca01bead90051687308c592f7ed8086f96903488868099f46d25f88394e06bb32fe9984b100c46ca3b536b0abb6d77aae7d011bd4a7577903e001f54996bd6bd3d5aa2a0300d4b0eff097e795a63cf3000000000000000000000000000000000000000000000000000000000000821618a0f0430205726bfdfaa2b3befad8b825f5e6208900068d5feca0b76f68c387727e9da06c9dc34b583bb4ac47b374eb80b504029200eeb02d1aa6d6648546a26a70914782f8aa11843b9aca0082c1bf949e12ad4200c4e4d2acfbade01a96446e48e6764b9880b844095ea7b30000000000000000000000000007968156adf895922406523887e5c157623c38dbffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff821617a0e8d300d9d0040b427daa083c2d35637527cc01fe2abded1557d70d1a9d28299a2fa00002b0c9e47945800c83cf3b2a3547f500d3fefcfe30c4db228b6c6d3fd9258c0071f8aa03843b9aca0082c1bf949e12ad42c4e4d2acfbade01a96446e48e676004b9880b844095ea7b300000000000000000000000037088ecc92aa376f153500bd42186efc3a92b39e65ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff821618a07d36a16aa3e892bc84293623e869c570002b9530812c0ad2a6d569802180ff0ac1a057aa1236afefe410722519b48f8f00ecf37c3a259617cc07d6e66e49adc3956125f88c8202be843b9aca0083027000039437088ecc92aa376f1535bd42186efc3a92b39e6580a40e752702000000000000000000000000000000000000000000000000000429d069189e000082160017a0f25a172e7a4d92aa993735cd34332f3a7d10a434b138175f167827545b0007c45aa06f899ecba68e560058229083920778b16bbd74dc08e4fbd93c4e6c00ea767cb271f907946e843b9aca00830493e0949ac4d9ee5c30339a24e1b78400842e58f363f58458880318415188e98000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a17d00c2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e087773f963e85a131f4eea530091acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066483e82000000000000000000000000000000000000000000000000000000000067358c8200000000000000000000000000000000000000000000000000000000000000000019e99f3a41dcb85053a51953e01bc7c504f7d0f0c5006aeb0be208da496bbc80e6e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de0017e20eb3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001ed4000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310552533102000000000000000000000000000000000000000000000000000000310552533102000000000000000000000000000009994bf7c2e087773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ec2c55d96000000000000000000000000000000000000000000000000000000007ec2c55d9600000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af3572002c0000000000000000000000000000000000000000000000000000000000000000416ea9f3e5e94a96d07dbb2b5a4dae6df501b76d14862bb660af1e68baf700c67b815217d1150f76abece691d5a29e3a3fd8bb56525edf2dc6ccce9bcbab00004244541c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821617a05cf67b2885e47659002f6b98bcce1a229c122d7811d09cd416cebc2c3fd6b02f43a02ff0077fc29e00cc58898b7a0c04b4a5d172e353c5776e72bc8d3d9d4cdad0b095f9016c0684003b9aca0083023ab59407968156adf895922406523887e5c157623c38db80b9000104e8e337000000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a0096446e48e6764b980000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000001f43e15c54ec5000000000000000000000000000000000000000000000000000000384665653e00000000000000000000000000000000000000000000000000000001ef3d76d5412e8000000000000000000000000255a80779bfb5d0092dbd64a6371841f23046bcec1000000000000000000000000000000000000000000000000000000000066487355821618a09b6b754e5f22f7c3582c6f3a54001653210586e95a9510caa772e08c2b58fa93fda01534e24117fc479e37549c001d927f30f94738fecfe182480374633310caa710c7f8cb09843b9aca00830100adbc944a240562869818726e32ff0aef7c0fd5636a954b80b864c299823800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000400968854de5651d7fa85e05e3624d70b2580052b0821617a0d11dffa0f5d63cabf235f36780745adc66349c334f6c653c63004331c80385df22a05d73bb6e02cacbdcc8c60cfd8b4a818cfab58023d94570002ac198fa2cf8f02113f88b8255f3843b9aca0082906e9453000000000000000000000000000000000000000f80a4bede39b500000000000000000000000000000000000000000000000000000000020e408795821618a04e71dde39be6a28400884a1deff7d0e2982c648f4198e3f8d2dfd78f7e718b730da036fa47f2a4c9001de4c766d0a1894ecb833255cdb5083c6f2dd627a9c6dc09f3dff8aa04843b009aca0082c1bf949e12ad42c4e4d2acfbade01a96446e48e6764b9880b84409005ea7b300000000000000000000000037088ecc92aa376f1535bd42186efc3a0092b39e65ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff821617a08340222fb8e844232041d1b4e63fc0ebe567f7fc78e200d7c174798e67f71fe341a05ce5f9f8f93f8a18247baff3e96f93851321739c0068a395f52f76960d025c2006f90aec15843b9aca0083061ddc94400968854d00e5651d7fa85e05e3624d70b25852b080b90a841d445ac80000000000000000000000000000000000000000000000000000001b48eb57e0000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000042b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e97168800e2e53b78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b45600ba1715019d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db800d5000960f69d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399d00b8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e41550100000003b801000000040d00b8275c946900cdc89e496dc69336ab6410a381ad420882ae5480c700a9d6f441c41687c23a009349dce60253c014b92f0b3859bfe3362276f4876f951b48c142da260001da00440e9b1060674823a547d6bee00809ca5cdd8b7c723e9e8b09ff13338eefe1006f24c8382865c717234f2459dd03a16a51c60e995a2d29c0fa384b822c3edf004101025709c1ef774567e1695b8f37e92ea23a159b6c1146579597a3f00b2500a0ec78da5f23430264807812a31c058d8125e423145c582dcedbe12d447c3200fd1aac8dfd01043ddf296484ebcb5c5ed8c82542896c77d84699fc9c3c647b009314a3c7266268d029391c8d429255104eb54388c03df59f2b8ab84ce6f8c700f0d85932bf8124bf8f0106549e1001ab768581aabbac3c5ea0084dbd7af7e6002e980d2fa4bcbe7f7fcb9c2728e44a412b9f7bca60c1def4e8eeccf2ba52ac00c623768f71a785f32fadd0c3b80008dba662bd43bebf50337d71a6575b63ed00cdd1fbd66eab059fb4aba81129edae0226744f15158c2d042ccdac75cbe9c7008f8d53ebc165a161bae0450bccd127cb61010a1c4e51cca37798226a507d04003e461535b853569fc653df7a6d71ddacb473a88c65b3e6c868378b9a756fea0018c0d0d59f303a24e2a0008fa2c941f532a8ff6cce010b0d6d8457cd88811c00b77c195ec0cfacbab3fa75c8ed57b6e0e6fdfc464b8736cd0738e586fbd30c00fb2a34b6cd7186e1d30639964cdce1624b303e7640c8786bd3000ca7c9506a003c6d760af7ed7545ca03bb04be310e1fb51efcffca2b66f4bd87c25c022d4700711c6dfccc90011d82590885433c17dd70763e1f138d6526cdba9cb771000d006a05e2fe57e81237696d88006895cbb126d90197887be2b2744ede2b0b863d00295185128448a111cf854e922bc9fc3e0d58b0faf71599a4a9d01f2221488400ceb1010e593606ad48855a84bc4d6b52939208e5547fb82300582428c98bd7004f4bacc47742f30709366a669eab04d988373665e6a17a42f2007cc05dbd39000152b1c6958b010fc0276bc37a1dd43814e147ddd3b280fbb9596608683f55001dee918e0fd4ca11a2686f0bcb48565ab19998fdfc58348016c7368283dae4001505fa065875fc6501cb00110f39b08371895bca7b7beeb178f8dd788a198600e37d4a86b618f280a516f379934a9cb0865221aa95462e3af91a0f5aabcd4f004e40d3b2d3d6a324faf32aa8ea08006648732100000000001ae101faedac580051e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003006a826f014155575600000000000874a04e00002710af324c24cf74ae8adcfa00c42f21413b854947f390040055002b89b9dc8fdf9f34709a5b106b472f0f3900bb6ca9ce04b0fd7f2e971688e2e53b0000000005f64884000000000000abdd00fffffff8000000006648732100000000664873210000000005f64c4c00000000000000ba830a052124fe8c54de3e57fdd734516fd5d362af34c642e4a6df5f00980e95021355a006c27b3bcddec88a237d10d51a90456b74c8f6af0a27959a0010eced18c4b171924f7597f7477cf7d1d7b8c964ea1542d7f9daf111c98e1b00be1045e50f1deba2c9f6ce66f8cfb9e9cc83762c8b2b7ad1bbee12553aec51000de0b543b546d0cefecf5f26db5bf8eea74599cdefeefdc7fa25bb3cda0b6000555875b6c52afbbe46b62a941f98a2369717bacf5565663973e76a4c4d259d00082259b5522006d3d6f5894ab48951d0ea22167a00550078d185a741d07edb003412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501000000002d552d002c0000000000082d78fffffff80000000066487321000000006648732100000000002d3e81b80000000000092b610afd22aedc57a136eadd06ed8bcbed59da00513b0354b5cb7260acb5c9593e137c6e7d8f5e45cbff0fd9ad751d08b4cee80010cf7c906da64dd5307348f263e8da32b0923ca83707c88eec63d6f0b48c13009014ca9c9d038ef9965ad9d4402b49f37b1fd7f6a7afb3ea4734d990445e61004a0ee9960654ee23b7582a764495fb9bfe525e7d4d1999c88b5a8bc43178700062a5c714ffda12528eb4cc43c88cec7faf593ed8941f98a2369717bacf556500663973e76a4c4d259d082259b5522006d3d6f5894ab48951d0ea22167a005500009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500090060f60000004889a05ee2000000002426e8befffffff80000000066487321000000000066487321000000486c3cf6e0000000002e0e72880a2199133b31718700ede1752d8dec7b7b5def88b501e3f597c9d8b0a563f8372dc4642e570460520004b017a7dc12411c9e35173da16a718066658fe49cbba18a33f4b90c8964360040c20dfde2d4e5dbaa1c08fff0efdee3ae87d49d45316d37a9ec1775b33d9700e84dab9e1f6ad105692da45ebf1396a0111bdf77b0bdc435d527257b12979d002998adaab14e8243e659962a6f3d28aa4a1fc850e77c70f737b56c52afc68f008fb2d44fe367b2db17ddc0fd35e7fe382214082259b5522006d3d6f5894ab4008951d0ea22167a0055009d4294bbcd1174d6f2003ec365831e64cc31d9f6f1005a2b85399db8d5000960f60000004889a05ee2000000002426e8befffffff80000000000664873210000000066487321000000486c3cf6e0000000002e0e7200880a2199133b317187ede1752d8dec7b7b5def88b501e3f597c9d8b0a563f800372dc4642e5704605204b017a7dc12411c9e35173da16a718066658fe49cbb00a18a33f4b90c89643640c20dfde2d4e5dbaa1c08fff0efdee3ae87d49d4531006d37a9ec1775b33d97e84dab9e1f6ad105692da45ebf1396a0111bdf77b0bd00c435d527257b12979d2998adaab14e8243e659962a6f3d28aa4a1fc850e77c0070f737b56c52afc68f8fb2d44fe367b2db17ddc0fd35e7fe382214082259b500522006d3d6f5894ab48951d0ea22167a000000000000000000000000000000000000000000000000000000000000821617a0f938edd9af4b4acb1c37a676a2006f243e2687c7d3d550f654e417ca0098d54304a015ec5d386449644eb9407400d2541c7ac1c56522588383191f5b29640476f62ad2f907942a843b9aca0083000493e0949ac4d9ee5c30339a24e1b784842e58f363f58458880de0b6b3a764000000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a17dc2f3792b57c88c62db1dd561af3572002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000003d008fef6084628b639a26cb6782d840e2f362595300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006647adc00000000000000000000000000000000000000000000000000000000000666f3ac00000000000000000000000000000000000000000000000000000000000000000000dcf1b4c8c007a209436bf2241bdfd561a8c0b5cb4d38237a6a7defbbeee610427e8b9a17d00c2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000d20b159449d495dee29c2b36800a143acb2bc20063000000000000000000000000000000000000000000000000000000000000000181000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbd2fc137a30000000000000000000000000000000000000000000000000000000dbd2fc137a300000000000000000000000000003d8fef6084628b639a0026cb6782d840e2f362595300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000e8b9a1007dc2f3792b57c88c62db1dd561af35722c0000000000000000000000000000000000000000000000000000000000000000412baa9f2bd26f8fe8dc8d5da41a00470a24b07dd541bed58ee669d0a7bd7323cd6b03e7857141178319645d056c005e76a7ce6b0bf7ec9fc719c009e06733da5c30bc1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821617a0eabc0b07ea5b85c452bd7166c4d9117a088996cd48b987006688bfc597fc3e8565a00d51d319010cc0e6e49a48b4a4812000d7959033ad00c99c9dbd703c7988eb45aef88c823749843b9aca008310cc9c94400968854d00e5651d7fa85e05e3624d70b25852b080a4a0712d6800000000000000000000000000000000000000000000000000000009184e72a000821617a0080c6b70b400cf3d9b24044fdfc827b3a8dc2d823982d42cdd7b50f31f38582d06a04a20fc00ce8e33eb74a3966d0b6a78c3f9ad0cbea95e572118ec686b5aa882c737f8aa0003843b9aca0082c1bf949e12ad42c4e4d2acfbade01a96446e48e6764b988000b844095ea7b300000000000000000000000037088ecc92aa376f1535bd4218006efc3a92b39e65ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff821618a0782db1e66ad698d378ef329df32db077f52a3600a21a6e86f20495a81c64689699a012ca2e9b120aa5cb7c7b024b271eb9c1c7004b59e463abf23271eaac3007755a22f9013203843b9aca008302c623940796008156adf895922406523887e5c157623c38db87c9d52625e653f3b8c4f305d700190000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e676004b9800000000000000000000000000000000000000000000000006f05b59d300b2000000000000000000000000000000000000000000000000000006de97e0009bd1800000000000000000000000000000000000000000000000000000c7d00075206695ab000000000000000000000000a9e1b71aba12dfd401b3f7045b5700d75bf2e27d55000000000000000000000000000000000000000000000000000000000066487362821618a0806d2610bdcbbed660452fb65fdb0b00d22443700078614e4b0b80ff3a874e62cba0675a2011a417d7f0a27d58e1a6549accf6a9002c3042abb025fee295d0b3f00ab1f9098c15843b9aca00830532f09440096800854de5651d7fa85e05e3624d70b25852b080b909241d445ac8000000000000000000000000000000000000000000000000000344867584142090000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b98000000000000000000000000005300000000000000000000000000000000000000110000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000032b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e97160088e2e53b9d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db800d5000960f69d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399d00b8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000723504e41550100000003b801000000040d00ee3da1391b00f36c51fcfca08dd4e6e6d11666760d0189d544cfe44c0a6f07a32722288ccd0059a51989289e7d5a6f9ed7ef32d39ec0f7d616389f3d7b66fb0db9a1010209006927d75b204ec70022ba35d8b01978e7cf827a9ee138175542df63b4c84845003ae744827e50184ed8e5c731a12bb9f4c3a84aef148830e27c05f60bb3cabe0088010389c682ffbbb146f880c8b5a0d39af71e8f5c42be5a5d835a8becb56300bc3bfa443e33e658e34db2369d54fd1559b28206af0e01f414419ef8c25c1800f4b1c36ac8000423ed337a9dc8bf2cf9d22a143df92b497b744e003dba0ffb001bdaa30277b9f2f869d793f55f8120a1ef7b70d87af5b8ce567e97fb79616d007e0d22a7da03b480ed010647ec887a99d546d2d2a50ad2bf540b8a1471798900b939a894bd53d71e4f7aeda64d460082a3e6ace38d7af26e1931a0ead72b53008b7c1aca13d60a807c632df61c0008772d7640e38ff91ecdf9ff4be8b4cfcc00248a7b244b0c6d60dc9caab9adffb9335cbe2765fd1acbdd90ff371472229800805cf24da1059ea5d1f347b2a376d6ab17010aa2f3f3d90deff81083e44f1e00ba3df8462f17249469be4cb54d0a70ab5adf7ccb7e11497194d7b43b4317f600c775b87f0edf56a0f94fd64e9f6e873f2ac7e850cb010b643263cc2118735100eb424e76180624e3a3cd375af8186ca9a13e5cf5444da3045b002364cd474100988833ea2a864f2d2d4c4d9bf79383a8145b17a6a1e3f4226b010ce7448388001b84fa567c49908b2f538944e73f31dbf861f899dd9797853cb8d25d17fc6f0075500c4f930d81f931f219357e840a36641c30fb191e62bce08e03a622010d001af51f4ca06afc3d7c9afb1b661f52e4ff564f28007ff27dd090a7acda9f5a00bf61d8cea7e9806c0f970e01ef3ea1ec925411435280b8d0bf7e13a1db3f7c009174000ec7016b46ebf9018e54a47da5b60ad1cbdc3749b14cb2f6518bd0d600f64dcdfae72c9f66038b22d4b3bcdcb7580193a700f4c30160a4e9dd5a8416006181f4e105eb010f8c9db221a00cf341e393f4feebfd95e2811d6c8a9eec960089c43aaf00ea44ebf523c08aa1a016a3bb536176c592ad0f49ae495e29b9bf007522be77ad5659b8985c01126280baebb677c3561be7f7dd1cd26e43bee973002d698c7b43e698abddf760c5c12082e60c558abf6f85e707b4cc9eabfa39df00b6914a28b44812fcb2a5204542ed01664872cc00000000001ae101faedac580051e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003006a819c0141555756000000000008749f7b00002710cd7f7aca681affc4ecdc00b45f7001f613565b8b06030055002b89b9dc8fdf9f34709a5b106b472f0f3900bb6ca9ce04b0fd7f2e971688e2e53b0000000005f64886000000000000addc00fffffff800000000664872cb00000000664872cb0000000005f64c6000000000000000babc0ae912681f3f1fba8bec6d94cf50ca942ae7c8483842e4a6df5f00980e95021355a006c27b3bcddec88abdba9653e2afa568f5ae8a94eaaef8c7001a0ddb198824b0c8e0dff3868d9dc351b2abffb0e8b3c716b44b881fb0d2e80018bc53f8a1285e5f4ee0677438bbd51cfcb4c880f9885fca965d9c6a28b6c3003ac66270636a7f4de612c6862ff0927c9c0bd648f06df4f56eaf7b5f277edb0001d1635a59a719185f7b7010f3198d59c61a352057191fe9af77cbd8508ae6006c003cc118d5074994611b43d7319fb2b957f5520055009d4294bbcd1174d600f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6000000488c4aeb00860000000020dd27b1fffffff800000000664872cb00000000664872cb00000000486b4884c0000000002e3787360a91b5f7a81cca0fc1f2b8c41d3574683b00bb9cecd31ee97ac6cbe48f5ca5d7e860bc61427b28838688056630b5ce4eab004d832bd9646411c6026e9c41ba8f4e6e87d95b4e99f87e8156fb4513bf9bd10016fe06b54c2f4b236a314574e7a92cab60d34c266570503469d1883c4934b700db606cccd8a455b939a14a3a48c7b44042285907bba42dd738217cdf03b15f0015c592e12a8acd80686ad1f6c6ebaf6f0c175162ce2331511044c6e63239370033b03aa27cbac6e8346c003cc118d5074994611b43d7319fb2b957f552005500009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500090060f6000000488c4aeb860000000020dd27b1fffffff800000000664872cb0000000000664872cb000000486b4884c0000000002e3787360a91b5f7a81cca0f00c1f2b8c41d3574683bbb9cecd31ee97ac6cbe48f5ca5d7e860bc61427b2883008688056630b5ce4eab4d832bd9646411c6026e9c41ba8f4e6e87d95b4e99f8007e8156fb4513bf9bd116fe06b54c2f4b236a314574e7a92cab60d34c26657000503469d1883c4934b7db606cccd8a455b939a14a3a48c7b44042285907bba4002dd738217cdf03b15f15c592e12a8acd80686ad1f6c6ebaf6f0c175162ce230031511044c6e632393733b03aa27cbac6e8346c003cc118d5074994611b43d700319fb2b957f552000000000000000000000000000000000000000000000000000000000000821617a0250c965ce540bb3e54f32aef3fd00af95ce26083801600ebc40e2ee4a8fbc9a0baa01428133bbe340547005805e108c3b88c548fdad90078471ff743f9fb013cc883e6f88a05843b9aca008302be7094400968854de500651d7fa85e05e3624d70b25852b080a4a0712d680000000000000000000000000000000000000000000000000002b3ccf1c8f983de821618a0e51959459db4006242f7a64ad6c47476fc1e7682b1935b101fccf57c5f1fc5744ca059dca5e30098511821b282a8e1cee05e0254aea8efac6afe9c2512eb89093dc9dbf8d28000843b9aca0083045175945300000000000000000000000000000000000002870011c37937e08000b8642fcc29fa0000000000000000000000003a6be6d65c5900ba143faa226f2ea6004c409080b1000000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000045175821618a0f0b7e8a377c0801902d3b300901a7ddcda6fb9033bca0bca524d35b9e06acc9752a063f6570f916b820bca003db525b34fe44c325e73f6db437ba2530ab7c559c8d6cff906ac03843b9aca00008301049a9437088ecc92aa376f1535bd42186efc3a92b39e6580b90644e3006cb2da0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009e12ad42c4e4d2acfbade01a0096446e48e6764b980000000000000000000000000000000000000000000000000000000000000000012b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce0400b0fd7f2e971688e2e53b0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004e3504e41550100000003b801000000040d008b000c2a966aba346c038ab4050e544dbf1268d5cb24ebf711c9d54bc26fc035000066d3c9e13f645a53373c578148eebcfd90bd9ff9a8c086d79cf19a8451066b0054000129365c7ff21671d91089dc2037763853b4eff44405904d7096ff089500a61b23dd479e89c9af7ed3fbef2e489d91bff02cb884225970b5467699c79900829aec75e90102ff1930f13100621b8d9c1dad55048e762e1e9a5d5f3d75df00976bd360b9d012ae7464234b269bbe5f3989ce4c70991907e50f8a3e415f810036eb7900ec8af460ac01030f8d3f95e4a8107474667fe7e47e9c1e24388ec1006a009256cad8f154f7ee6a4d230f0e803a6316c5b0cf37045a5031fb5ab5be000c82de60a33a62fa1bb808ba440104bbd5fe96081f6eb123700ddd550dfc1600c504a61dac8f1c99d7853b130af01a524da8a89c663c62c0f092aa5def33000029f7ba5a19f9ed933c7ad2228523f3111e000620e68817c57a3e2bf3d57a8000a508ca90a8a1b96bbfb1ca1afe0c6af11f81fa0f63bc8a42fc6910acd8cc3700bed52d641ebdad48e596432236384ed62a63fa7563000a62649b07a962aa6d00b1fe4eadfb78f934dd91678837d53074f5e05b22d19c024312aead9f5fefbc00c427e9227072ece42129b02ef27e7eff20f5b512e7cb223e17000b3e407f4100a8ef36d87bf955052f0561952ac30cabc7f677856804ec4aa72b0a0223596100370c78990a77ec7593e072af71ca74bd338c47a3085ea17eee58dd8733010c000129929a0053f6d42ea64fc05eef95ca5f42f4f328436b9b01dd6dce0294ec00c94fde9dae005d3775ff3a1f37ac1ed2d759ab8032f1a58a9cb9be10df4f6100db7b000d1e37d5638824bb553aab8cc3d572bfb898b1bcb1cad59d478766ec00ca1959e5967cd1415e281c8d7e62f891f8a9581e7590de8110fc6d3dab08f200b7cd792ad860000eb636253ec665e8a65e8f03a1f3a87d46583118d9b3dcdd000ab4dc37c590c248524279411c0eec396cf782df8641f3a4246fca2249487f00a1f538740a59f79b3a2c000fc082499332e49c2e08331b938f5abddfd99ad2008d94e188cec8c350a3516963c02794d3d2f8ebd46e465c5ee5cf7a5cdd6095001b1e67085588481b3256ba12bcf401127d25fc1b7517e6e6c9507174554da8009fd735024c6ab20dabde3ec2efba6b2f370bc7b8d4f8b85fa637df013c597500168972c4eb33a365f6076cf3b6d793e65052006648732400000000001ae10100faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000000036a8275014155575600000000000874a05400002710f6dd405bb44c00afcc717ec7a195c9cf7b9bd8a194010055002b89b9dc8fdf9f34709a5b106b00472f0f39bb6ca9ce04b0fd7f2e971688e2e53b0000000005f6488500000000000000adddfffffff8000000006648732300000000664873230000000005f64c004b000000000000ba800a1077592069054316a07a4831382563f051e8bca94200e4a6df5f980e95021355a006c27b3bcddec88a5dc549cd5b9c5c4616c76e50001fee581a88b7844e6cf77e6b9b11be990e8454d80f4cf7515f811b78ccfed4005cf00d4e2a1df81205725eb7c311426a4898a044ed0c85d5cf7bee0b9c512300485935b1aa2fa954f8adbd948b777b1695347f0268cb3c34f6c72d56456b8c008adb753126f65f7ceca9d940a3674334b97caeb33c7df59fd2c243042ce355007c2b2a359e8443b6d795d2d34afc7f1afa806d91add1357d000000000000000000000000000000000000000000000000000000000000821618a0b0a071d3f000177ae5fd9d488ba4eb53e9d1dbdb8961fd9275e97af23fe98cfbf8a03ca25800b05803413552100aafe5418055e63ebf676d6b0bc0bbbf3fd4d39fb5ccf908002c0d843b9aca0083039d6494400968854de5651d7fa85e05e3624d70b2585200b080b907c41d445ac80000000000000000000000000000000000000000000000000000021782aed783120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000029d4294bbcd1174d6f2003ec36583001e64cc31d9f6f15a2b85399db8d5000960f69d4294bbcd1174d6f2003ec36500831e64cc31d9f6f15a2b85399db8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e4155010000000300b801000000040d00499d25da67332cfe60cccfba350a00621e997fe4f80bd80031ce596903b1f14613108b7a8261be3612a1bbc1529603d4b2f6f633fd9886008eba503e25711947a2af000285a0ee7446ee5b51f4b918b1e8a2f3394def6d00ecf7b25f530a4139ab3cd581b677fbbf3a66a35a0d475dcc9b4dd9a0bdaf500026095dbc5ab531825e8dc1d9cd7a000320bdef2f30441b587967c0c9829777008e5e886e841590e88c374decdc84033d4b0b70cab291f8fcac0a10bf3e292300af434fe0b7baab582033cfb2b91d26543168010447a21d56dd620c0781ccc600eebddfe4c7db55428520bc888ab6dba9b81403ef0350be4be8a117a74aafba00908f88b62670e2c15e7b4aa9dce8a069de02f08756370106effb246715662a00891f34f8e96b61e936e74b5c7991de09bdc71778c4df99dd6368762b88dfaf003bc5df0e81fa3f73a1a38da01fadf3f6008dc79a924c5e6886710008e6a30100de1a31b432091946047ba95e0b0ecdb2dc4c91199b4dc7265e9e47bf8142630063e25fa3f59371498177794f302e6754dd5ebacf9a9508311467641f61c301000a218b2bc0b5a5feb1899ff6e525da5109dbb9a0c0defb6e4f1f96486ef6b200d04b19777129bd645b26e1f14a251899fe547e3bc08903cbbe620ca15ac6af00863925010bc1c729baefdd113e7853a6a96d89aef3c445c2b661b6b27012d90088545791168d73354b8710b9397f0815c04b5122d50030af470b50b99d2f33005764f98ad98265000d4bb6a6f6c121c179a0a40f7706564a661f85bfa4f99900c276eb394d78de47d0c67264bad0931cae281ad1e646c5bd89726f2b2f1f4e002aa13ad5458f1b368eccdd010e14446eff615127a9be18015d68eea567c271002e1f635243c63989681194322cd43d6b5db5eb40d9080229ff8179502d051800a4e47d40d06ec83a414a12d05c8681000f4b59b5c0362d9ac7cee07142abfe00250f2498bb326c94684b62cf9ed9e92ea16c252d5d6096cd27ed781aa02f6e00580fb061faf52961e30693f9ac39a39781341f0110f4406ae5796656bf3dc100a05830bbe7f48e444296b24a8993064a57f6955e8fbd73a810aa07a91df54200a56be63478bf05f59999a39018fc75ea952d5108871c0f011299b1340ac2da003e0b1e914c074d3082eb60afe60c3b35af990ae8fd5f9aedeb3b4a163ca6290068581436606ceea9d70427bd376dad7202b4566b91d0d8554a0b5e00664873000700000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b00811dd1a72ea4aa7100000000036a822e014155575600000000000874a00d0000002710c228bc9ff509f725330a8bac4b3b62100ff8bd4a020055009d4294bb00cd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f600000000488a887495000000001f4fa883fffffff80000000066487307000000006648007306000000486bfdf210000000002e1cf0920ab300a4bf323e36ae9fe3cce300abb079e70779191bb5a3dbcd26afbfe19a9c0b8a9b870f307289b1a93326eb00df13a9c54e75feb2f90033f4e2240f131a400f121e1cd07b2245c570493c7c00af5f7188506eb1d102aa2fb030a49578e5d13b6c598b57fe22e620e7b7e529007deb01abaf97c89af740e0e715fa3954bed6a8170e391cc4d8fc8c9bfe59f40007e158b68f4cd458e274c5bad7787f1a1c44d0160aa00142f8960472235fb400e3ef2cf96496d512c1918a144d70c2564b75d7cfc511c6ab4644f6da352b35001f8c0055009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399d00b8d5000960f6000000488a887495000000001f4fa883fffffff80000000066004873070000000066487306000000486bfdf210000000002e1cf0920ab300a400bf323e36ae9fe3cce3abb079e70779191bb5a3dbcd26afbfe19a9c0b8a9b87000f307289b1a93326ebdf13a9c54e75feb2f90033f4e2240f131a400f121e1c00d07b2245c570493c7caf5f7188506eb1d102aa2fb030a49578e5d13b6c598b0057fe22e620e7b7e5297deb01abaf97c89af740e0e715fa3954bed6a8170e39001cc4d8fc8c9bfe59f407e158b68f4cd458e274c5bad7787f1a1c44d0160aa0000142f8960472235fb4e3ef2cf96496d512c1918a144d70c2564b75d7cfc51100c6ab4644f6da352b351f8c000000000000000000000000000000000000000000000000000000000000821618a022adfa08d7d1023b145a6c1111fdb7a4881b007c178cf4c06ee4ba3a5954b237aba001634e749a12895e264b1daae74f618c004016acdf96c3b70ac2ddf725df876a60f8aa03843b9aca0082c1bf949e12ad0042c4e4d2acfbade01a96446e48e6764b9880b844095ea7b30000000000000000000000000037088ecc92aa376f1535bd42186efc3a92b39e65ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff821618a03000a41439f2d6e5ed8fe07b2a531d189aa1cb801984064b8ead3a6a97979cc79d00a070405bc598fa779ed0cc5cf6e27b0d028af7efd648110eaeaa9b143018d4002dc6f9016c2f843b9aca008301fb319407968156adf895922406523887e5c10057623c38db80b90104e8e337000000000000000000000000009e12ad42c4e400d2acfbade01a96446e48e6764b9800000000000000000000000053000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000002867997bd8811e00000000000000000000000000000000000000000000000000015fb7f9b8c380000000000000000000000000000000000000000000000000000000280029de727fd300000000000000000000000000c8ffed68776e0af895f6e5c2142df30d8622df36000000000000000000000000000000000000000000000000000000000066487366821617a0674bd37f311600785cc6f240732a32dfea68fdb78542960b8d3b89416dbcb8643ba071270ddf007e4f5f3873916d3a022f9290ff42c9b893ba2f88bf839c74b58c0547f9096c000a843b9aca0083012ecb9437088ecc92aa376f1535bd42186efc3a92b39e650080b90904e36cb2da0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000030000000000000000000000009e12ad42c4e4d200acfbade01a96446e48e6764b98000000000000000000000000340bad9627cb0072d1c4cc92c7f53c4995454130ae0000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000032b89b9dc8fdf9f34709a5b106b472f000f39bb6ca9ce04b0fd7f2e971688e2e53b78d185a741d07edb3412b09008b700c5cfb9bbbd7d568bf00ba737b456ba1715019d4294bbcd1174d6f2003ec36500831e64cc31d9f6f15a2b85399db8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000723504e4155010000000300b801000000040d00403f665fac4e1b696bfb701940ed3981811b0835a782f4003cd7f70431fa070aee7bff832eae9463a9cab0f62d118867a091926a48235100b46438d74823410fa68700024a66691a9570170942cc4d8fbb2ab781910f1800427fee16b542262067c75613ad63cab89753aa8be1368e41c25e867eb23227004355bdd87daf1b3806e26c7022a201033c82070e1e4315e02d0d56452ca0e0001cfe4d652bca811c5fb42d9d266e4dfd7d5aef32cbfe1a27faa2ba4490ae66008fd6755bba401178b175260bc2d60136a10500062d447c91ee34ce0cc2a8fb00730638d97f7fd4b2bbbeac75013382a3855643e4fc48168484a50a3dfe12ae005064e718e3b4e80fd6076f3d7071908796d8127be1ae0008e3a75e2815490500353d35931bbcb4d451b6bc79ca04eb79e32cc93191b47a042564ca1bc1378000a3fe4e3445a6b6fd0f6b68547ff99c5ce85b5e226760e288543c000947ec3c000a4fc74bbec25064504232374aebd1ff83583741b668b4094ad5c2857a449c005f069929d090050c24813a71754331169e213c3c5b318fc899a1bd83441001000a42fb9cc5a4a80a36df4a25424b95e4bc98f2e6131c077d74703e71df03d800dec855e197784e3d2ee8a0f852c5fbe9342f3cdcb3496b8833ecfb21ac8dc300cf52a7010b73557cf76c2362f9610ca579c218b050ea37680b8c44cc0b8a65005e78965e81d51161cd337b815235023917054bcd8bcde632801163c296c2f500d4a0bf5ecb83db000c3d4cb3e361b246bfc2aa535b7f10ba3c7fbaa31e33fa00ef848dafe8f31462ad231a6eb20a403ff6d29272d811bb0b64e67d50bd5b180083298a936795069e2acb14010dada8afbb9fb01ebd9bd73343da970ab75aba00b6464a8ee7b5e35e9f9b7444fdf56adcad855e14311887ee39051a09437156004aaf13dc4bb41ae7a25af7a3bdf7dc010e4c90530c35be05ae7bccf465d93900ee2c19603a27121e92e581f6d2430834ead46add7984b56f47d788cd6a9ba500e50a7c1673891bfab057d8573d99fa39a312ac000fb979627f2ffff7130a490045f6302d438b7e0bb804101a34ff21e3d90a97a64e7b4daafc5d54ee87d54100e7e2bd4c46a9aff42ebbe98eb721566aa2891863db5f6c001249cf28dd414500871cf0c11bc8611bd0535f9ab2b2ed29aacc195bc78ee50f8d1673ee8b53b0002cca5d80c221fe5c7e3d9020d2d4128a58c99f388b10d9fc705b4400664873002600000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b00811dd1a72ea4aa7100000000036a8279014155575600000000000874a0580000002710d18b63b57840dc4b1260109144e4a0c0a2138fd5030055002b89b9dc008fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000005f64884000000000000d0f5fffffff800000000664873250000000066480073240000000005f64c4a000000000000ba820a9c0e238af0ca5043fdf884b7002e127389ac9ba72542e4a6df5f980e95021355a006c27b3bcddec88a597b2c0010e4f08a88d403a507efe3ed4e56cb81aabe4fad64783d5d7f0a996282d00400a789663e1b7be67ff15cbdba0193de01762b4ab425308639c18f2de2d0326a0037174da12c059e46e3c138e4d90a2ca9dcee1c344daeed96c7e35738036daf005fe071303a39d51e6004d92b846988a6e669e7a1f3345eec82708ec52f595a007e9142a94190d7bf5120ceffbb5fd91b5936d0047c7beac65d5faf6e81631400878f00550078d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba73700b456ba171501000000002d551aa3000000000007ebfcfffffff80000000066004873250000000066487324000000002d3e888e0000000000092b510afd22ae00dc57a136eadd06ed8bcbed59da513b03547e5bb455fe21cdb8207066dc81030015341ff4b35550e92d9f3d63786b24d1d41eb1c08003a6a8db7605272c25170098ebfd9b5105ce8ca815cc5e9512f00af9e5fd4668a8849262d9c9b941ed4c001c45eabf8b60a8124e9036471847d65e9b2503f59f7a951ed77d0c6c1b26b7001dd473b22a01a65de43c6f6b1b2055bf360a49320d9acffabeed25190526db0004ab82708ec52f595a7e9142a94190d7bf5120ceffbb5fd91b5936d0047c7b00eac65d5faf6e816314878f0055009d4294bbcd1174d6f2003ec365831e64cc0031d9f6f15a2b85399db8d5000960f60000004883176ed5000000001f8ea84e00fffffff800000000664873250000000066487324000000486c4693d000000000002e0a61e80a8fd8e6345a9ddd8797837e4a2c0d9205571327681d267365d700083e6123ac0a76f2aed0c7eef8e164e09cc19e3a43626521a26084df74387400645e9bc081617a619c78d7773b433135bd546324374a1c34ac1b211a97629500b8df18984b733f085a25c0dd6f21d2fbea219abf676340f00d96699de288cb00e9ede71fbb4016d680bed92ad2ecdc7473530ae738c0d55dfb327e58ce5a220037df92ac4b125887513a9eb255bf0f2f7eae8286f77288b4a4cc33b135ba84005fd91b5936d0047c7beac65d5faf6e816314878f000000000000000000000000000000000000000000000000000000000000821617a0f42f74fe35be89f1200061c51cd78c5bdcec6a094bc04b31d38d608bc8ffc7cb2fa002dc9b2c38d9e7000c7f9e3dc913c25343fe9b9227fec6093b19979db9f321cbaff9082c17843b009aca008303fa0c94400968854de5651d7fa85e05e3624d70b25852b080b90700c4d00805a4000000000000000000000000000000000000000000000000000000b5e620f466cb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e12ad42c4e4d2acfb00ade01a96446e48e6764b980000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000022b89b9dc8fdf9f34709a5b106b472f0f39bb006ca9ce04b0fd7f2e971688e2e53b9d4294bbcd1174d6f2003ec365831e64cc0031d9f6f15a2b85399db8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e41550100000003b80100000000040d002934e19663185f35f34b9e9ed30d59ad3c49d4dbfb2ef101718bb400ccb7c2c0051aa52db57d6d7e08c930e98f87f49d300e87f8fb14cd5cc1d180006b10dfbfcb63000212676df3dfc6ab53b2252c5a69994cc8b11c621c8678380063156bb6cf736dc9196583d9723bb691e8c3908308c11f7dad86e77c1a63c6008c23d388aedbbe47470b0103810d462c4d3c571dccba4d6b53b4fa5707287000ce8693c68aff41681b23f455d1716738a0c128063322c8d1ca3ad8958d92bf003fd65acddda1f9a8a2b4912f2e7d0004ce849a90e5f4ba359e2aa232d0f51700e15a539e6f0986ddb29912e44e7e9d4bb35a4748b826a5effe72d5177e084500c737a625e6bfbb52dca04948b53d84291843000650a8397b817857729311070079bda7f9d79fa5ab6fb2ba92d0f293338ea588ceac7ee3019a1017a2b4bdf90053eb0750289319fe1197b1e09058c914b83aec025c2b0108e1c83f40bc9ae1005fa32d1c6e4933c90460ecbf51fe291d75131b96100f2ce734477011f7211b00bd1a1f06d798c8a81f1c765c1b32cb057884878a96ae865a3416000a386e840001993d2dbbfaa2b7b0d6f5a9b7f38f87d751cc6b568fdbf1a9c793d3ce43a700f6932b5f84a03a865fdc3b7645d873ce1424bf3ca9a696a507fe15848a8801000b31d0538c7a19b9e485e843a0f7847c8620459cf70a22a9e53a9c9bad1082003c3856cdb155b4c42db0cbee16dfd8505e3b320a9f1d0bdea44a21a67013a500573ee7010ce2cb5b3cc5c8c7d808b86ee267b86cf58db87af173fc96f1b257009d0a404b22c40cb092b344c87cf1069ec55e387a28ab9466263239be9e0b56009a5a00f6149fc9010d719b435636ebc8c2fd252dabeb9d446f04e78b269944001196cc413a8622de4c171d58378bef35f0e1ab3ee597574996b47e976cb1d9001b186a1b3eab429e17547c010e6cb2d49b84d423c062a206af7e12d45347cf00de321e7581e33ca7e23f1722835c7f88259db001daecb9b99bee7e6729d61f00e13f29adc8bf5fc8a96104970c94cb000fcfc205bc4adfb86c0d383a05656c00222d2cabea94386690667318d815b8d365c8743b3fe679cc48a3834958157900ef0bafbc8238966c1c1611c8029575e18575390012b885212fbd8cbbecfbcc00a72b7f5d7c745cbcbad87ab16d00367530147df025e343379c1d9ca34d7b990072458dd1493b3ccdbbac4bd34f5973cd7f7f18f1b47ad901664873260000000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a7002ea4aa7100000000036a827c014155575600000000000874a05b000027100100714e051f36969173dadf6d79aef2852dfb8036020055002b89b9dc8fdf9f3400709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b0000000005f6480084000000000000d1f7fffffff800000000664873260000000066487326000000000005f64c4a000000000000ba830a378217ebe41a28b522646b56c1d7a0130090a9bc0642e4a6df5f980e95021355a006c27b3bcddec88a2284e183d22c3b00ac93c5debc324554021a1ad793b3cb6100eb4227d9cd413a54073cf1df1da300f5254d1d7a35ba1c76990263220ec5458382c0b6c16ecd073538b67f29f984000aad15d0ab6d90074190dc01cfb1351a73f3fdbf3ba8bc25a293fdb6b66d4000830bc4a9b8538fe2a0ea4dc3191ecaff6806eebdbf72e1131546a7581999510011406b45c574406ca3a9139d38c102932de271c3603144e4486056ab53005500009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500090060f60000004884984a2e000000001f8f4fcbfffffff80000000066487326000000000066487326000000486c4952f0000000002e0a7f8e0ab1ea4f5b7cda1300d55c6d8d9678e78b6ab7f3300eb650035ea9639a068be7e96d74c5414f747800250faed1cdcdfeecf55ee618448cafc86a329586e8ea55a21ba1e4085e5e0300d0528a6fa0244fd101a84cf195e44c1ecea6925da85f1b559fbc7a0cd7abca00dc794b65e42230ef214af71a446cf84e4eda62f82dcb4229a06c5757d3478400409166c84ab35bb3c7ac9a719e0273baeddf04d48823473496c5f409539238007aec6bb2513632655552cc081eca94ac75f3a9139d38c102932de271c360310044e4486056ab53000000000000000000000000000000000000000000000000000000000000821618a0ed4cdce70fd771cb137ea6483a9191db180495ddc7df00018cd66cca191e9618cea05b1b50fc014cc70640123f3ae91ffad0734f1b6600c4a2702ccd5376171faef0a3f88c8237e2843b9aca008310cc9c9440096885004de5651d7fa85e05e3624d70b25852b080a4a0712d6800000000000000000000000000000000000000000000000000000009184e72a000821617a0a1f07db600e3bba56aadb1451527bebbc3f93f6b2842898c8a850288c50da0749fa064a900940493eb246f302bc3981df32076a065189354d50175139d02629d8a6182f8007021843b9aca008287ab94530000000000000000000000000000000000001100870e35fa931a000084d0e30db0821617a0d97e6e9022d346cd1baa05cba7da00facf9bd65a0e8ec773404b78ca2602fa9949a03d5297c1e3383e36d54acaca00af69948ea2a16af69a086a4ab3f217c1e853f361f9053313843b9aca00830400a853949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d87a6fa404071800000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000050e72c33189fdbbcc77d00419540f7d0af0bd1cfed0000000000000000000000000000000000000000000000000000a6fa404071800000000000000000000000000000000000000000000000000000000212f4c9d51c8200000000000000000000000067297ee4eb097e00072b4ab6f1620268061ae8046400000000000000000000000060cba82ddbf400b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c38db50e72c0033189fdbbcc77d419540f7d0af0bd1cfed340bad9627cb72d1c4cc92c7f53c004995454130ae5300000000000000000000000000000000000011000000000000000000000000000000000000000000000000000001aae64314d5500000000000000000000000000000000000000000000000000000a6fa4040718000000000000000000000000000000000000000000000000000000000000066489a2c50e7002c33189fdbbcc77d419540f7d0af0bd1cfedd20a5caadd8e4e44b2c835c6c900aa9cc80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412d0001fbafc888f31380beacb5897afd6bf044e446c205354481fa575d6f1b5c910053265f3774ee8e5c936fa7b7353e06a8f36e0872bce57ec63731756ee36e9700a11c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000a6fa40407180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000050e72c33189fdb00bcc77d419540f7d0af0bd1cfed000000000000000000000000000000000000000000000000000000000066487448000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad009627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821617a06861d8e5e8f4870b0b8ec36d4600b3e9e415798b1353485789b59aadb243ca4e5aa02b3599c6a9ef38aa1225760088bc80c41d854fa730e6069d1a2216bce1bcb74270f90535820564843b9aca000083047589949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d872386f26f00c10000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000037c7ff89d1eead00cb0a46f1f3d862a869e54f5d0600000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000135e233ec88bb0200000000000000000000000067297ee400eb097e072b4ab6f1620268061ae8046400000000000000000000000060cba8002ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c38db0037c7ff89d1eeadcb0a46f1f3d862a869e54f5d069e12ad42c4e4d2acfbade0001a96446e48e6764b9853000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000f92713e0e96e7e00000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000066489a002737c7ff89d1eeadcb0a46f1f3d862a869e54f5d0621bc237fdfcc4caca732000e84a087619600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041462a81b3f21bddd82f6e598a93d3861b188320941aa9fbea473f445491009dadde3cc17adb80964fe50a1d6d01e2c507015823dddce2653d6b32ae0c1700e8015cb11b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000037c7ff8900d1eeadcb0a46f1f3d862a869e54f5d06000000000000000000000000000000000000000000000000000000000066487443000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000821618a00d682ad44ab9c949e7bc00f78e73bd7f1a48cbc5afaa7504c27dbdecc4911edf91a0441b96cc43d196bf00a1622d624be8d9111416695b504d1608c6b483a6002df7b6f8aa03843b9aca000082c1bf949e12ad42c4e4d2acfbade01a96446e48e6764b9880b844095ea700b300000000000000000000000037088ecc92aa376f1535bd42186efc3a92b3009e65ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff821618a0b41af61560a7d003aaa18877f0cd61a906eae389fad9052000dd92d9764b7eaddaa055d923ae89db6d61f80887ff90f9bdb0bfc946703b1100aa5c2fe9ba82b868d4d8f8aa11843b9aca0082c093949e12ad42c4e4d2acfb00ade01a96446e48e6764b9880b844095ea7b30000000000000000000000009f006e8e1c33fc2aa6ff29b747922e3f8e32911b9d00000000000000000000000000000000000000000000000000016357a8fa6f4000821617a0e86e4f7799c5b700f8b0d1584be66a5dd7c1773d47912af23cb4f761adf44d3cdba034ac064d220047774b41eefcae32036df2b85a81f98e8e313f68e956efe66fd778f88a0984003b9aca008302a1c39437088ecc92aa376f1535bd42186efc3a92b39e6580a400a0712d6800000000000000000000000000000000000000000000000000051400595a9d6fcb821617a0d65eabcf622e505f9434dc5a39fdf819615374dd96c500046f01aae918e7e3488aa07e21934688b52b848563884a956b9721ff3a2bec00655199308a39f757b6eb942af88a05843b9aca008302f3229437088ecc92aa00376f1535bd42186efc3a92b39e6580a4a0712d68000000000000000000000000000000000000000000000000001bc16d674ec80000821617a0ba31c24e34040097decdd894c0b0648a3fd7121e8d99591d87d622aa66581b0e0ea06280abfd00aa71052344a0e6856f08f0f0e384c17eced2734b96cb0ebccd33e49bf88b8100be843b9aca0083022ad394400968854de5651d7fa85e05e3624d70b25852b00080a4a0712d680000000000000000000000000000000000000000000000002400150f2253778fa9821618a00113fb02a64ebf89df6bd660f9ef0e762898332500b4e4bd4c5f95dcca6e235e65a01e077d5310f3446675382d97baf3544509790046ad0c9761b696fa7646431172e4f9079466843b9aca00830493e0949ac4d900ee5c30339a24e1b784842e58f363f584588829a2241af62c0000b90724ed9800a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000005d0520676578fef500563f694c61b8b2b127f68be600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006647f78e0000000000000000000000000000000000000000000000000000000000666f848e0000000000000000000000000000000000000000000000000000000000000000001936d81e5895c724e1182c6500eaa1abd226b5caa49a0b98eef23060bc202e2010e8b9a17dc2f3792b57c88c0062db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000d20b159449d495dee29c2b36800a143acb2bc2630000000000000000000000000000000000000000000000000000000000000001350000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029378f43a6e900000000000000000000000000000000000000000000000000000029378f43a600e900000000000000000000000000005d0520676578fef5563f694c61b8b2b10027f68be600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000e8b9a17dc2f3792b57c8008c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000004121f99392492995601031ff493123225c37681ff4006fc0f0f5f1e1dbfa220190ca5c74e1de08cb58d5159c51acec1a9ac4a15f6a0082db85bdb0da6f4b79610224ab1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182161800a08d8f4db128048aaea159c600c65eefd6308bec5246d86f4c622d04b3877e0024c7a0794e09c71eed33a6d5c221ffc10141668f5b53c9a99cc47c0419b4bd009df6ed02f87080844a817c8082ca7794530000000000000000000000000000000000000011872386f26fc1000084d0e30db0821618a0dfd2d4f49b5a236a720020ddbba5d33010a7ee6ae0d6823220eb4f5b774d143ab3a035e3955ff4bd5800ad663e7738e8c1e18a11fbe8afe00263be4d6735be5fa74c04f9013204843b009aca00830288bf9407968156adf895922406523887e5c157623c38db8711bf00463603de44b8c4f305d7190000000000000000000000009e12ad42c4e4d2ac00fbade01a96446e48e6764b9800000000000000000000000000000000000000000000000000009bde822ec240c200000000000000000000000000000000000000000000000000009a4f7bc2c56e3000000000000000000000000000000000000000000000000000001191d76dcb8271000000000000000000000000c662f9270092085ce6efb7c1546d87a08049821648000000000000000000000000000000000000000000000000000000000066487369821617a0815d507790401cfe096f001b9327cb9f8993d7d8d0f638335cfa2edb81f558d913a06896051db560d0dc00b6a3bdca6cb2578c29d652072ef1e53747a2f6a29c163a46f872820153843b009aca008287ab94530000000000000000000000000000000000001187038d7e00a4c6800084d0e30db0821617a054a92d36bad3a560f634315ecc650e21cead0014527b95d550ad7a54a0e04fa1e7a053ce6aded1ee9529c97ecc8559b2c9da009b20597079ce3f4349c3d566e9c88b2bf88c820642843b9aca008310cc9c9400400968854de5651d7fa85e05e3624d70b25852b080a4a0712d6800000000000000000000000000000000000000000000000000000009184e72a000821617a000a76ad01046d68ac6fb189e5f8e2f0150376e3dcf72d083e7fcade0a5fab8360055a05fb1e6adb8f1a1cc12fff0f351e81c4276ba78a225508662b0cbd0f89f00b014f5f9053380843b9aca008304c6e8949f6e8e1c33fc2aa6ff29b747922e003f8e32911b9d872386f26fc10000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000d804723727bec7e77714c04244e1cce123bca48e00000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000001356231009e47ea0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010049000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592240006523887e5c157623c38dbd804723727bec7e77714c04244e1cce123bca48e009e12ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000f8c027662010b000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000066489a3fd804723727bec7e77714c04244e1cce123bca4008ee54ac54731dc4766a877dd4f9c243f84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414cd02f013df2e035ab9be6a3c1350a75c8c500b10ace52183324eea562539efaff083b5e64f162ddca742ae348688bf760f1007b3aacb4da397b36ccaf3d754473101c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000d804723727bec7e77714c04244e1cce123bca48e00000000000000000000000000000000000000000000000000000000006648745b000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b98000000000000000000000000000000000000000000000000000000000082161700a08775ca516c40af9e85240f7496138ccf0b993189dff43ad78471eb3b4739002cdda040d569300d59ba73aae4216d085935790ff367afc0373ec8ffb345c3007a22241bf9053420843b9aca008304f9c0949f6e8e1c33fc2aa6ff29b74792002e3f8e32911b9d88016345785d8a0000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000e261e647818fec8f75e70cdb0e2fba7104818b400000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000046964b8d266ca0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89500922406523887e5c157623c38db0e261e647818fec8f75e70cdb0e2fba710480018b4340bad9627cb72d1c4cc92c7f53c4995454130ae5300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000038c0e1687b84600000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a330e261e647818fec8f75e70cdb0e2fba710004818b4164d5a265ae24ceca151ee5640af8213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412958f68ef31d19fc1fcf69f34f36f7230006d4d994469323c21da6787c8e88dea9416b1b5b3a8b015aa69609415ac0d70048b197c7f2303241d146ceaee5cec8614a1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000e261e647818fec8f75e70cdb0e2fba7104818b400000000000000000000000000000000000000000000000000000000006648744f00000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad9627cb72d1c4cc92c7f53c499545410030ae0000000000000000000000000000000000000000000000000000000082001617a07011df2512ff372309134010606e6bf7bd4548d4262c8067ce41e9430010a3648aa07d126582c884cf16f3fb6c89cf5b69a5a9012a9afe43b6a3e7540032fa046630e3f90aee820f23843b9aca00831e84809437088ecc92aa376f150035bd42186efc3a92b39e6580b90a841d445ac8000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000000000042b8900b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b7800d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500096000f62b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e200e53b000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e41550100000003b801000000040d005d30105beab53bd5e200fe905953bba6bdd6381149fee6d9990362d96f1b645be623c6d08742bde92e00fdc69de050ca4493942f989955e76fe49688d20c0f9a738f00020e6ad4c09000d95e2624f88b5297666910c81984d4f08fe0888ac30f96256f047c11cbce47004a6bcf50bd519d22bcad6d88950832c2c84a232a9f6c708e2fde81d901031b00bc11d9953026e5d20fa50fc4aa409754c4117ad1682f8a1214c7f817be9cb0006d257e5e9e875568767024503b957b6b2a8f975101eda5665ac2c8776ef995007a0106819f43e1e1bf3e4abab01c6b30735db171753daaa1309de523f311db0035cd0a4762031d0c0e6618d4ac7851c2be4c1eac33881e651c97660ad9e8e90097d801cfd6010875758d9a90669bd02f2e8c90b77006cfa6e6ae3f902afbab0031694ede4691f4b84465116c5f04a1e6b0f40b9215ddc58dd7e3e38c8c095d005c33a14ea75fdf8b2200098a8d8cded7b59987499c5b67f2990dffe453de940080943d250f234d21324e6613134083623101ae73c2e4e1b60fade727c3c38c0096c861cf4aabbe2d94223a7f1f000a4c7532e5dd9783246a9a8e831bb5e90c001a774f7207c02a7e879e7ed1a92c4a733000ea060f0684db3c19aa05e0eb7b003ca33e2fa0d6e9c41e427a5129ed58eeb4000b4fe5f17bf755391879a79ee600c95f3c23aa9f978f82a30253384533ba683fcb0b4823e5411196e4daf8b94400ff4bdfff3d27085a464dd0b5412e3dd9a2084843f8010c5f57ccf30ac0cb0d00ef841e01cce1a1382cd63a8c1de467b08e329c712c90c9654363c6e4d660ab000665aadc3d065193e9352496ed4631e68acbd89b555f9bc818010d2aa283ed00751a89f6af6cb6d64306c4762eda9bea152c573fda4a9cda9b0dde4a67615a0081089e5ed42ecf5b82ab3ced424729f177d835c8aa61e5c12db761be3b000e000008f26fa7f767188f3fe0722dfdb634c247815a1c4a2fffa438fa987ba021009d35191f73d53bbda0add35a02557928af1ca2382311d482d48112cb7a08b800e4e5010f56e9c3fa9b55e917052e1285f63546d48f3efcbb8d368fe8d6bcdc00e48cafc9437d8c89b15165dc7c628ec6af1cafb601c4507de90969f96e3527009ac3ea9b092c001284d1909120d08ecfb3beefcc30d948d1ee4576bff8abfc00942e51ffa37407fd446c7b80c93e5dca4fe4b82abe1463b9e0f105e06b94f60048fc3b76fefa333c75b2006648733300000000001ae101faedac5851e32b9b0023b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000036a829c01004155575600000000000874a07b000027106bdffa649801cf292b8d30e21df100ae8a68c2ef6d040055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce0004b0fd7f2e971688e2e53b0000000005f6495d000000000000ad04fffffff800000000006648733300000000664873320000000005f64c46000000000000ba007a0a0e5744b52d17de5a9f8226818b535c44ac0ffbfa42e4a6df5f980e9502001355a006c27b3bcddec88a98deab88ade1a60dcb172d6169b94b69c1b087cd0081939b0a6e8f5dcd3ee947f378d68fbf46e3ef496d828e2ca7adcb47aeab3d00d882dd2ef376a692d458a6b31703099ca63f9c409b20f6dad9d10458f8564e0037b74e92c49eb4691b0918453a58d9f96ec65b3dc8f4728ac6647626bea16d00702ce4c5b1c5eaf7bedb122bddac27b8c9d835364886266a5f906476968818009aa0207d1dd38f1cdfe02ce8429c8b0100550078d185a741d07edb3412b0900008b7c5cfb9bbbd7d568bf00ba737b456ba171501000000002d551a9c00000000000007e3dbfffffff800000000664873330000000066487332000000002d3e00a4fe00000000000929470afd22aedc57a136eadd06ed8bcbed59da513b03540039089cb12e4deb8c8ada527b88c4d957a52cfafa93c005848a2713fca6700200714f671b50fb784c6f8ba1ab7e4e9712483d9a2743b1c682fbb6b83090130500efbbffd318e45c625ec1d7293dc62ede6945fb04dea084987f912f9d52d9b900e7abbbc2884f2944ead3528fbff66850b1db98e105ff063fe16f1a115689bb0090648ad0ff1ebf140145ea455ca20af8f7bedb122bddac27b8c9d83536488600266a5f9064769688189aa0207d1dd38f1cdfe02ce8429c8b010055009d429400bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f60000000048886ded090000000020264e25fffffff80000000066487333000000006600487332000000486c693700000000002dffe0600aabbc6a19aa5b89127a75660096eae9cfc85b132e3f2c1a6302c8d1a84339b602e7d7bf17742bf923884390000f4dcd7daa53d0b7b4a57eaa73ada7926df2b1c86f762e8203d2bc3bf58015009289b6940b753e8d021f39a09aaea04d5c7765bd119edd5596eded480b32fd000676f402678630f3f0042067dc813ac5d92ba3aa51bb010180e2e3b543731b00b2a936dd4f4bde83b8c7b79811ec525478fc727ca45d973406bee55e0dcec80022fb236504218cff52d48e71926f769688189aa0207d1dd38f1cdfe02ce842009c8b010055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f002e971688e2e53b0000000005f6495d000000000000ad04fffffff800000000006648733300000000664873320000000005f64c46000000000000ba7a0a0e570044b52d17de5a9f8226818b535c44ac0ffbfa42e4a6df5f980e95021355a00600c27b3bcddec88a98deab88ade1a60dcb172d6169b94b69c1b087cd81939b0a006e8f5dcd3ee947f378d68fbf46e3ef496d828e2ca7adcb47aeab3dd882dd2e00f376a692d458a6b31703099ca63f9c409b20f6dad9d10458f8564e37b74e9200c49eb4691b0918453a58d9f96ec65b3dc8f4728ac6647626bea16d702ce4c500b1c5eaf7bedb122bddac27b8c9d835364886266a5f9064769688189aa0207d001dd38f1cdfe02ce8429c8b01000000000000000000000000000000000000000000000000000000000000821617a0a78a59bf9a4fe9bca68096e0632bb3dbdb00f43d9f2b82fa02cc7aea0527f1de08a0154c67a6558f074904c87fe9260e0400cecce74662a843b8fbe137032051d54de9f9013212843b9aca008302888f940007968156adf895922406523887e5c157623c38db87040a5c25fc0ce9b8c4f30005d7190000000000000000000000009e12ad42c4e4d2acfbade01a96446e4800e6764b9800000000000000000000000000000000000000000000000000238600f26fc100000000000000000000000000000000000000000000000000000023002bff5f46c00000000000000000000000000000000000000000000000000000000400042fd83ffb0000000000000000000000005edda586994003a7122f488300959234c4f363f1d9000000000000000000000000000000000000000000000000000000000066487369821618a0a504bb913d95146194f3244c8d62f24367480034968941a3e8556db8b3b27fcb04a0560a824068b9f49b06c33af249cc61f6000368a16a23214f995a9cfc0b283d9fdff9052c178447868c008305d4d0949f006e8e1c33fc2aa6ff29b747922e3f8e32911b9d80b904c4c7cd97480000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000088e042ab5f7d9761a2706f073aa4b23e1c4a1dbf0000000000000000000000000000000000000000000000000001b409ec37dce000000000000000000000000000000000000000000000000000000000c78a78230e007800000000000000000000000067297ee4eb097e072b4ab6f1620268061ae800046400000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a70090c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796810056adf895922406523887e5c157623c38db88e042ab5f7d9761a2706f073aa400b23e1c4a1dbf340bad9627cb72d1c4cc92c7f53c4995454130ae9e12ad42c400e4d2acfbade01a96446e48e6764b98000000000000000000000000000000000000000000000000000000a06f5503be730000000000000000000000000000000000000000000000000001b409ec37dce000000000000000000000000000000000000000000000000000000000000066489a3f88e042ab5f7d9761a2706f073a00a4b23e1c4a1dbf6aa001cf084642438391ef09fb79fbd5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000418d4fab91378ead76197f65fb00933f2bf73484e6f221181c4b2abab74d0a953d9f6d3d9e02609842c52d2d2a0039e8ec607c154dc5cbfd722a222c7888ca9caa424e1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000001b409ec37dce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000088e042ab5f7d9761a2706f073aa4b23e1c4a001dbf00000000000000000000000000000000000000000000000000000000660048745b0000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e12ad42c4e4d2acfbade01a96446e0048e6764b98000000000000000000000000340bad9627cb72d1c4cc92c7f53c004995454130ae0000000000000000000000000000000000000000000000000000000000821617a030b918df6881f311b9fa40ea82868d8ccaee937d54e48e4000876065f60f47acc2a039a907d4cab0760731cf3f71b77f6604a6fb2e2cd9b1006ace9d69dfb261c566b4f8711e843b9aca008287ab9453000000000000000000000000000000000000001188016345785d8a000084d0e30db0821618a0500e00c641bb162a16a8c973218c03f178d0ac11013dfd6357c8f407f3de49dff2a0003d1adc87f1bc2276a7a7dc94e239a2a1483145fe866ae3c4192b5b8eecf8180060f9053421843b9aca008304a81a949f6e8e1c33fc2aa6ff29b747922e3f8e0032911b9d88016345785d8a0000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000002e9b483f98bbaf4fa9ff08dec7fa471056a2f84a00000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000c136160c7e99f220000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592240600523887e5c157623c38db2e9b483f98bbaf4fa9ff08dec7fa471056a2f84a9e0012ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000009b5882ef07e16b400000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a332e9b483f98bbaf4fa9ff08dec7fa471056a2f84a00b377139b83224daba42a4350c31b27f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004190e581c46effdadf017447a023f886d010bd5000efbd5f2f71799dc8e03e9d911165a5737a092319abc3207d6770296e6c07bd00faea5b133658ef2e3e8d737c98571c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000002e9b483f98bbaf4fa9ff08dec7fa471056a2f84a00000000000000000000000000000000000000000000000000000000006648744f000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000821618a00021beca0f336391c5a752a7da7edff5cff79de453e6a260e24b86fa04c5f8bd00eaa03df3179e9ae41892edd729fcecc8d8d6b202b6abf9b81ce47d712877d500bdc372f9053422843b9aca008304f9b2949f6e8e1c33fc2aa6ff29b747922e003f8e32911b9d88016345785d8a0000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000007e3715df4c7f2e1f9f66b4309bd7383a296073dc00000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000046964b8d266ca0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000030020000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592002406523887e5c157623c38db7e3715df4c7f2e1f9f66b4309bd7383a29607300dc340bad9627cb72d1c4cc92c7f53c4995454130ae5300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000038c0e1687b84600000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a337e3715df4c7f2e1f9f66b4309bd7383a29600073dc9b5e3a6d4ae04f8b84d8cdc491827bfe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041aa730ab5d181770f46300dca8a6ecd5edc002ee53165f7a8d78751d200be52d6965cb9623cf47101f01eb87a394e9fe890005c2ba65c97c3caaccd90bb3d565dce1f1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000007e3715df4c7f2e1f9f66b4309bd7383a296073dc00000000000000000000000000000000000000000000000000000000006648744f00000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000340bad9627cb72d1c4cc92c7f53c499545413000ae0000000000000000000000000000000000000000000000000000000082160018a0566cf5958694fc5af69def13b01db4f9013fd670f98abfed284253335800efa090a0602e1cb4dce4f38c8c77b243a145c685ad935ea80b7f014ae8d7a800be70dd952bf9053422843b9aca00830475c3949f6e8e1c33fc2aa6ff29b74700922e3f8e32911b9d88016345785d8a0000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000002c7a0f5eb874e68589ac4fc7220d0ce5cfe3c3cb00000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000c136160c7e99f220000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf80095922406523887e5c157623c38db2c7a0f5eb874e68589ac4fc7220d0ce5cf00e3c3cb9e12ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000009b5882ef07e16b400000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a332c7a0f5eb874e68589ac4fc7220d0ce500cfe3c3cb4950bac824e64ab48e3e819fc8e9ec66000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000418abce239414f0235c9750e7b6ef3ae0028df0c624160512e249c025f93f25b77cc0531a936b68fcaaccfc9a62c604c008cdf945c9a7004da9d3164b02397f62547ec1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000002c7a0f5eb874e68589ac4fc7220d0ce5cfe3c3cb00000000000000000000000000000000000000000000000000000000006648744f000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e600764b980000000000000000000000000000000000000000000000000000000000821618a0f644a5d7b525e7102801f4fd56de355ceef7f4df8fbb26b48aca7a0037ebab55e6a01b80a1c7a8e3f06bc44e164844e52f8e0f189ea6d7e76a2a98004091f7dfb0aa65f905341f843b9aca008304f9c0949f6e8e1c33fc2aa6ff2900b747922e3f8e32911b9d88016345785d8a0000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000e2940b353b85f15196cab76d2f86946e5c91ee3b00000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000046964b8d266ca0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804006400000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a79000c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796815600adf895922406523887e5c157623c38dbe2940b353b85f15196cab76d2f8694006e5c91ee3b340bad9627cb72d1c4cc92c7f53c4995454130ae5300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000038c0e1687b84600000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a33e2940b353b85f15196cab76d2f8600946e5c91ee3b2c14d6130a8e47bca11e1565ba09f588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000419259d3950b17df7dbc61320885005e9e8806ef99b554d95224f776c33e3abcbf3e0668976e07b75759c4cab712007f54d1858b1a7e1e45d17176d56acd71f16f24241c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000e2940b353b85f15196cab76d2f86946e5c91ee003b00000000000000000000000000000000000000000000000000000000664800744f000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad9627cb72d1c4cc92c7f53c490095454130ae0000000000000000000000000000000000000000000000000000000000821617a096b54fb7b53a986e410886a1277390657f4b8ef7b344757fe9000025ef2a5a206ea03858f6f266adaa63bff95bba67ace0a799280e465d766800a90bb029b71d255781f905341c843b9aca008304a7d2949f6e8e1c33fc2aa600ff29b747922e3f8e32911b9d88016345785d8a0000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000a4151844208031f416f041a2bd0039d316eb470d00000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000c136160c7e9009f2200000000000000000000000067297ee4eb097e072b4ab6f1620268061a00e8046400000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c600a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000796008156adf895922406523887e5c157623c38dba4151844208031f416f041a2bd000039d316eb470d9e12ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000009b5882ef07e16b400000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000066489a33a4151844208031f416f041a200bd0039d316eb470d7443a1c10f7347b2991f652a41c491a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416881cce8ef0164d69f301f00ab1d9b49009dbe3bf2be6e75916ebbeb447c62a221256535c3fbffcfa5c918005c04dba45e820aee22c91eea6d3351f65edf33d4e5c01b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a4151844208031f416f041a2bd0039d31600eb470d00000000000000000000000000000000000000000000000000000000006648744f0000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a9600446e48e6764b980000000000000000000000000000000000000000000000000000000000821617a03524625dae9060d5b26174a1dfc09375cac5feb87048b7002dff66095f0e2e9e00a06bb09a0c7dbb7fae8ccf83e10095981e935cebe0f90067da61e63c29b89afa6a92f87123843b9aca008287ab9453000000000000000000000000000000000000001188016345785d8a000084d0e30db0821617a0d00037602c531ce057ef0c3c18605947400348650cbb652bd2612255dcb910dbd300a022102b6827a36c747f8e5b684b50759bd9273add235933f7069aa4c2587b004521f87124843b9aca008287ab9453000000000000000000000000000000000000001188016345785d8a000084d0e30db0821617a0ead755428fb9a94f692c00f2529b7113a5b3034d6aef4afbf0b7f08eac2b1d9955a0417f8f6c408f8afd002fae0dcbb6ec7c93f4b05cf97a97adbc200e20e636930242f905341c843b9a00ca008304c768949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d8801634500785d8a0000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000011517e993300ae36d02370d83ca084e3941762227500000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000046964b8d266ca0000000000000000000000006729007ee4eb097e072b4ab6f1620268061ae804640000000000000000000000006000cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c0038db11517e9933ae36d02370d83ca084e39417622275340bad9627cb72d1c400cc92c7f53c4995454130ae53000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000038c0e1687b80046000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000006600489a3311517e9933ae36d02370d83ca084e3941762227534b176a117c44cac00934106e1331d6f6800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041057477223783306f6ebf70286fb0a5fd1c55307746b417c1aaa218005fcb296960157941eb54a3333e2f3e03a5dd80c8a5ff5e046838b6eb4cebf200f14fcd5471f51b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001151007e9933ae36d02370d83ca084e3941762227500000000000000000000000000000000000000000000000000000000006648744f00000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821617a0c6f489953be02028006c72d3be96e3062450f2bf0e69ca64982a0dfee2e7eae7f7a030e9a60b9e6d008bb5141dad8e2853a85eabd85b1feda1f3bd0b53db66a32ba3f8f88a18843b009aca008301f12694400968854de5651d7fa85e05e3624d70b25852b080a4a000712d6800000000000000000000000000000000000000000000000001901f8200abb15ec0821618a0c5b4feaee965ce3e9a938cf761f71d152b9aa417f07e8200f8ecc0808b7d7f7110a0543c99dc28277008daa1bc496f40cc8af83df9967e002e9440e95a33d2cbe8942df9082c17843b9aca00830572ee94400968854de500651d7fa85e05e3624d70b25852b080b907c41d445ac800000000000000000000000000000000000000000000000000000575562d95be440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000053000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000022b0089b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500096000f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e41550100000003b801000000040d00ded522c528af636cfd8700777679ce60d925696350e3be813f422a8fe4a33621e776f2dc2c6190247d0e00bae40e2985746bff41f6c366b48f9191e6c4c6be14237200013cb44b6b4ce600f1d4b1dcef23cf641d1d5493f321a21a2c2cde1866f9b91f6fef1a6413401200f72f22c0096b40fa9bb984e2836191a0aa61121dea2a04752451660102bb860050c8c06f0abd4ec31e3a0ec0416296e6f80c326c942d62537502bf601a005c0085acbc92ae3a7c56d99877944afb0b804c873c4987ccf56ea4150fe234e32e000003d6358cb22f93463906d94faa0155d1cc45ee0ea6170642bb5d7f16553700ea22e441e6b882c7c98813891b4ad2cf4d90cc78f6d41ca9311d12eaddee8900a6df3cfc0006733ff028951d5c1876dd0b639f619f74ec69ee3b1674fbfd6c00fdc2f59000338d53d0d3c06e5f942ffb1f6f2f9a6545c1ac499c52de4f179c00d3a13e85e4ced58f01083df4d6bf23cb253651315c38f7ebdcf76dd415de030013aa6f9a5afb98fd3ea4b55c57ed791e08ffabcbbf6ba132654f3f67290caf0070d5e216a3ddb73fd7a0c6f4010a2c77a09c2fd1f324484191c80ad9f11d4b00ae157478cfa30cb039d1081112bac3538498d56128289288bb2a28246b81fc00604d34b3789744e4457961b6f232bf51000bffe510dfeb345867ce2b132400009736c5c9914bce6cdcd743d80f23f42c5cacc94dc4b2ccb9831cd4def71613005d23412b071509804a03911c40476a7630236681000ca9d2e4adced20a14ea00430cf8bc5968d5cb0780f4dd90c1c34e1ba4923600bae915b09d62ba9768b100a00d646d3c88ff1ac03535cd53e96574cb774199acc58d19010d9678c1692500ddea18a4339fb598eac92823fbd0b5c3974f21253cac25c2b0f2751d005a1200f024a0980d14b98c939197ee5f1c8228c5fdc7a9e98a238e5fa8ad99010e8000909e6276967040debf109c50510ace6e86095443697393c58dc7c71b3b274300195a6b952dfdbfef8269a32a14e7ff1bfa9fe633532df86096657769834587009d000fb66df701bc9de3bacbf228a359a625adb9df689200d16f4defcb80f00096cc4c1037ca6e2b2b2e34ed5907264bd1bc51e0101d800aee35ed44e2ff4b0085b61dcf9c0112202237ad8867edd9779a7f8a1a02e832878d0cd9b1fe161f00956c71d397ad44795bc360c2442db6d929851ef3cfecf1668ff8d8ce2031cf00a5d9ce15dff92d99a4016648732f00000000001ae101faedac5851e32b9b2300b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000036a829101410055575600000000000874a07000002710ba9441d7cc3e202670458427b0704b00fe2beb7bee020055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce0400b0fd7f2e971688e2e53b0000000005f648a7000000000000adbbfffffff800000000006648732e000000006648732e0000000005f64c48000000000000ba7e000a917fc2811b43b7eaf9c5ab2810b60ee017e6fc9b42e4a6df5f980e9502130055a006c27b3bcddec88a33b719150fa59fad643630199bcebb570e3d409ddc001142fe79f0cac9ea29ad0df94423d1238677ec58a428ebbe974e57799b67830035ecea3cca72f1b440a7a9754d03d825daf4e772f578dc33cfc1bb42f5652c00cb2c9ce3b48c4dbe6bee21ff0d77ec0e7e3b29bb5e3b11cb72ce21d29d93c6004d8f2f6b3748f62f88850240a100c1f529b6e26345ec6e26349c13095472aa007f1830377f4f45fb012026777ee35f0055009d4294bbcd1174d6f2003ec36500831e64cc31d9f6f15a2b85399db8d5000960f60000004889a05ee200000000002426e8befffffff8000000006648732e000000006648732d000000486c5d770030000000002e0246840af6ff1f1771b7fe7cee9ccd855d5494a47877461f4400d7cc83de1df25caf6e57e3628f263f2027d4feaf9bafadffb32eae9d256cc700d99e2b58a57ba70771da0530591730e05949cc7836381c3d600c20ae20281b005a810debb7b0e8afe58ea56a58c0d597b82889d729f3b3c2ec2d28bdd2375d00cd0f829e4409d8e415159c0014ee6e7de6d3756a5f8684be381c6554ddfefe0000e58e46f5fdc39fabc5384fa38d7ca9417c6529660d7b81dfba0c949efd0000fb96459713095472aa7f1830377f4f45fb012026777ee35f000000000000000000000000000000000000000000000000000000000000821618a0d734c0cc3600184bb3568663f7da63970a2d768315e21ca3a14653e5c5b3a20719a04eadb200f5f2c18cd41fbee7fba0aacc5377fe6bf8860eebbde0ca3b26987df771f8eb0015843b9aca0083036b859453000000000000000000000000000000000000100080b884a93a4af90000000000000000000000005300000000000000000000000000000000000000110000000000000000000000002ceb81a07d45791184a9e200b25dde9fee65a1614e000000000000000000000000000000000000000000000000000006668944bc2e80000000000000000000000000000000000000000000000000000000000000052147821617a04d3ac9498140222c7930a88a8534d781002aea6c3bf8309f4b6cfa78cb3d2b55f4a07eac861c5bc2498fba2f7d5c320500a9bec58bf849a794cf89c5a2238dbf648aecf88a04843b9aca008302f33e940037088ecc92aa376f1535bd42186efc3a92b39e6580a4a0712d680000000000000000000000000000000000000000000000000001386e5c3bbcf6f7821617a000c8d42a3e47afee400f07f955bfb246f5c1b0cb8e9b62b39c9fab21a6cfb7a100f2a046cf29b2dc91387a259196e593273d8319a54c4767e48292becd0d926800d055bef8aa03843b9aca0082c1bf949e12ad42c4e4d2acfbade01a96446e4800e6764b9880b844095ea7b300000000000000000000000037088ecc92aa376f001535bd42186efc3a92b39e65ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff821618a0ff6b15a3b5a179c5ca249bca2ab400268fcde4396342140136583810148a9d0f38a00f9b96ad0c7bac8511099b1600040544bd2747a5890090acd391c8a7badea741e1f8ca0f843b9aca0083016900e1944a240562869818726e32ff0aef7c0fd5636a954b80b864c299823800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000400968854de5651d7fa85e05e3624d70b2585200b0821617a0ecfb3a4460d8c9f879e3be990f7400273f8348edad98ef4f7dfd0023ad946227409f065983044543d3a6bb0f9eac5caaa0646ee44e1dc29fd5860092097ca0ceed73f88a138477359400830410949437088ecc92aa376f1535bd0042186efc3a92b39e6580a4a0712d68000000000000000000000000000000000000000000000000000d7621dc58210000821617a09fadedcc5c129bc405007200be7262542fef169d1d157f1b474915c87cb3843beba07d2d0f196a479c672f009baf38ebe39fc638e0ce0f37cf59993f4d27991e805530f88c8202bf843b9a00ca008301d2b99437088ecc92aa376f1535bd42186efc3a92b39e6580a40e75002702000000000000000000000000000000000000000000000000058d15e17600280000821618a0f29e08733c7fd50ef3a997d4e5a1204ea9eb10ef83cd244d007bbb93d7969e6bd0a034d2acc8eb72f39029a85eadffc286c496a77b3127eb00b08cd9e8d3bae55a2fcbf9016c30843b9aca008301fb319407968156adf89500922406523887e5c157623c38db80b90104e8e33700000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000002867997bd8811e00000000000000000000000000000000000000000000000000015fb7f9b8c380000000000000000000000000000000000000000000000000000000280029de727fd300000000000000000000000000c8ffed68776e0af895f6e5c2142df30d8622df3600000000000000000000000000000000000000000000000000000000006648737282160018a0d923e764bfa87c77ca50ff3327f9116858c4b9abec53859b29f88157d7009f9d66a024121c5d2045a1f1a1d78abf12e13f642962096303fe6b1a18abc9000fbecfa254f905330f843b9aca008304c73d949f6e8e1c33fc2aa6ff29b74700922e3f8e32911b9d877fe5cf2bea0000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000e8107fb6c6168c0c59c2f78d970556172d31e7f500000000000000000000000000000000000000000000000000007fe5cf2bea000000000000000000000000000000000000000000000000000000000196b65b09c9c50000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89500922406523887e5c157623c38dbe8107fb6c6168c0c59c2f78d970556172d3100e7f5340bad9627cb72d1c4cc92c7f53c4995454130ae53000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000147014031092400000000000000000000000000000000000000000000000000007fe5cf2bea0000000000000000000000000000000000000000000000000000000000000066489a2ce8107fb6c6168c0c59c2f78d970556172d0031e7f54ad54f4d88be452795ebdcc61dcbdc94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000419465ba2e4b806a961006f988f0c5fc8800803db56154472a7b073011b28d31333f4a9ce5744995a3e2b84628e8b64c30000dabea96a534e09564424616536ad30fa21c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000007fe5cf2bea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000e8107fb6c6168c0c59c2f78d970556172d31e7f500000000000000000000000000000000000000000000000000000000006648744800000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad9627cb72d1c4cc92c7f53c499545410030ae0000000000000000000000000000000000000000000000000000000082001618a081fe09271f54225f0babffc02dd634bb6eadb8bac452cc3c1b30e56b00d64bf3d8a001f13f8fe6d085d28289a15fad244eb928ae9dd199e6d2dde2d0001aab4a384801f9079410843b9aca00830493e0949ac4d9ee5c30339a24e1b70084842e58f363f58458880214e8348c4f0000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a1007dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000143fc367710128d7cd65dc7c1f12d0900ce6c318a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664852070000000000000000000000000000000000000000000000000000000000666fdf070000000000000000000000000000000000000000000000000000000000000000001180b05eebe96dc76b1c0790ee43a4389ffb88e900648a4413cc52b9a353b05caae8b9a17dc2f3792b57c88c62db1dd561af3572002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c53100de17e20eb3792c6b7f558299edf95ff23d00000000000000000000000000000000000000000000000000000000000000238d00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f93f69525400000000000000000000000000000000000000000000000000000020f93f695254000000000000000000000000000000143fc367710128d7cd65dc7c1f12d09ce6c318a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af3500722c00000000000000000000000000000000000000000000000000000000000000004178dc563d130e49ef43893b3286c391c951e13b9642f586709876d85600367c811b75ed3d18479fd7933236024047f731f3c18b576884a2c7101a36ab000fe0da646b1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821618a07382286b10623b001d7ad39e05dc3c3fe592b7b60a00b20a70798e1e1ef5a2b6e5a076112845e700aab6c8862f01a5337fbb23b3f591030d8472ff41dc1d9220e74e00f90aec1200843b9aca00830618d59451be46170069a77050be5273d34e6155fdb7e0318000b90a841d445ac800000000000000000000000000000000000000000000000000000031d95f1663320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009e12ad42c4e4d200acfbade01a96446e48e6764b98000000000000000000000000340bad9627cb0072d1c4cc92c7f53c4995454130ae000000000000000000000000530000000000000000000000000000000000000011000000000000000000000000340bad960027cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000000000042b89b9dc8fdf9f34709a5b106b47002f0f39bb6ca9ce04b0fd7f2e971688e2e53b78d185a741d07edb3412b0900800b7c5cfb9bbbd7d568bf00ba737b456ba1715019d4294bbcd1174d6f2003ec30065831e64cc31d9f6f15a2b85399db8d5000960f678d185a741d07edb3412b0009008b7c5cfb9bbbd7d568bf00ba737b456ba171501000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e4155010000000003b801000000040d00daf67c1e0bb884daf1ec84b6751147e95628d618460058fb694b27f70389d95c040517bc1a6760bc1972ee89a7e478ac01e56b007d00c1f0022aa310c764596aa9180102a51af03d21ad02bbfbaa5fa0037e1907cb0077eaa84cd657498c1754000c2a48d165e2048e61fdeba06d5dd8be5eedfd0e00f2827d07731360bee6a1107f5d42cb2600035045dc8c0efab898af9d6689130017308534bdd6beb581355a97e38ff9ee8d28c616bc625b87d5f230f8e3aea4009e2a7ef1ccafb1244825581afd3dbeba2db074050104588d965325681cd257006c263962ff4ef84b7650bd36a9a5a7bfcb4b34abf111fa59ba0254c1f802920091f60e126ba0a92dc750542264af6d6e9cd14969facc533c00062a0f7a344900aed3fb20a26a561e6a96d2c5f4868885673467ee1dbf4530b6385830eb676d0089f1f324f13abce87441adcbba065460a0ca05777ed0c107d7b4075d0108e000b000192e4b271f58b608ae7cdfdc422903c1fc52c9dcb66f107a57e1eecc7700726f41bcfd9f1030fc85c7d55e9aee8a8bd63bae5b9936ec5f2ba14e8b8d8d0077000a664c82e294190f27b1eb19069edbce8f2c358fd79228f5cb329e88d40013dca2fd1ea8717baac40b137315a37838e8c957ed71521ba8293e1cde55b700c621f16e7e010b401437153cc07ede9be3d038f0c62b069f4deaef17f713d60034fa8f7ae19eb5d628ea8113836d766c757fbef18de74b0a8461d79e3bf50900889f8570c7c1fcc523000c3b9323c729432be8442f734dcdac7f30c9ba4a33002ff8e4cc4ae27460b76e4bc93ca65896f83c53c343b905f50773cd53e80fb300c8d42d211dbab8c9632221cc82010deac996315fb850b7a9d6d8f4a9d686c5005e0cd30705d28b01f8ec420fc994efe43dde0eb2ec40ecf8e59385900a8b3500da1b199696db662b8297d83092a57eefc9010e390d80b5d9a1178b0839230f006c3a11d47a9e54da8793e4f205c0d04421e79bf8789b0c2c6e59ce577869d8002d1ad40815511c576ebead1b53ddd55c7f6e48dfe8000f67222f1f4213b9b300a744d747cac7730712b9816b130ec57fcb23d227e582c779648629e9e6e6fd00c84a2e7ed2168cd248adde098a33c3b6960001736f31821fe80012d8d23d440017978b06d713b1458e0cff01720daeba65c78b8eae72ce2c22823fdf5fcefd0009190efd8917a25b80fc4d90df91fa6122e0f075bcb43ccb89d862a69801660048733600000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed400dd7b811dd1a72ea4aa7100000000036a82a1014155575600000000000874a00080000027104267aac20273957c9750d8e81077de7d2989d92d040055002b8900b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000005f64885000000000000abdefffffff800000000664873350000000000664873340000000005f64c46000000000000ba770afc3ca6aa3d8e9aecef09005c74c5548439dcb0c9ba42e4a6df5f980e95021355a006c27b3bcddec88a79004d2676e51b868f5cda491183d0b4d85d6c0bc72700d35117a3dc5eeefa969b006172c31e3b85225c8db8dedced3b62d1e4cac887930c3663aa8082446de73900cb30d151fab4a8c544b0ea7754682d6346960f8b8ead0a51370271f34986f1003d953dc3c07c674fd26f8233e1e02e8e709f44da918da1e3691ceb069f7b7b001e8b64d61a048e90b6ad1078b32b0febb03952f932b584ca4b0c59defdc644002147be1600550078d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00b00a737b456ba171501000000002d552d20000000000007d97ffffffff80000000000664873350000000066487334000000002d3ea8fa00000000000929070afd0022aedc57a136eadd06ed8bcbed59da513b03545e78d2d8f474aa35d8217f4900c25533ea10d33c8d9fa4617da6830c9c24d5b2bc53c020153eef55f487ba9200263f9532a3851d17a65d32b8367b88054b4eb7937ef89fb44e9560ab54cfff00c2244573e4b83e9159fe6ff6ac869e9c284309d755bfd6c8e9b9301bb0ee3e003bf2e37abc30db3ea96719d2334753b6c23d08b4418dff47b1144a95324d08003aaeb3a7eb069f7b7b1e8b64d61a048e90b6ad1078b32b0febb03952f932b50084ca4b0c59defdc6442147be160055009d4294bbcd1174d6f2003ec365831e0064cc31d9f6f15a2b85399db8d5000960f60000004880850f7e000000003e4c00b797fffffff800000000664873350000000066487334000000486c6c1d3000000000002e0004aa0a4534a9846dbb8ae7cc35703a2af9f2869cd49729d6c449004954e1d0d8dc69963893e020bd1045fed76977faa5a0218681dc437b36ea6600e17c8fa9a8c07b53de9ccb65e7f3cb32b14aa102cf5baa4a850ee22af63beb00e90b615391da00618bbb8a337fe53c450b0cd400db9f22f089d7651a2c4e20009ba97625f4646f425e2f5d075150dfea8a0492fbaaa10bc12710dfbe6f218f00626ebb3ec955afa322fbf24a3f03644dde995dc8bcdfbba5a0c8e823d174d80093a7ebb03952f932b584ca4b0c59defdc6442147be1600550078d185a741d0007edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501000000002d00552d20000000000007d97ffffffff80000000066487335000000006648733400000000002d3ea8fa00000000000929070afd22aedc57a136eadd06ed8bcbed0059da513b03545e78d2d8f474aa35d8217f49c25533ea10d33c8d9fa4617da600830c9c24d5b2bc53c020153eef55f487ba92263f9532a3851d17a65d32b836007b88054b4eb7937ef89fb44e9560ab54cfffc2244573e4b83e9159fe6ff6ac00869e9c284309d755bfd6c8e9b9301bb0ee3e3bf2e37abc30db3ea96719d233004753b6c23d08b4418dff47b1144a95324d083aaeb3a7eb069f7b7b1e8b64d6001a048e90b6ad1078b32b0febb03952f932b584ca4b0c59defdc6442147be1600000000000000000000000000000000000000000000000000000000000082160017a0aa82dab3619883e6c780ceb7989d8c7b7b433f3bd157761270621bb9480000b9bba025c87175c53dc73c01fc21505d1f85d30090f372e98ae5df51a178005d0e62cfeaf88a17843b9aca0083023a489437088ecc92aa376f1535bd4218006efc3a92b39e6580a4a0712d6800000000000000000000000000000000000000000000000000016345785d8a0000821617a014868d55cb90f83eaa856a719200a00a5e5ef2216d711d40d763d75cd1b5947687a046cc9ae738804e375759b3006d1cb5c5e8d054fa352cc4bb64f2208b0d52f6bf1bf8cb0d843b9aca00830100adbc944a240562869818726e32ff0aef7c0fd5636a954b80b864c29982380000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000037088ecc92aa376f1535bd42186efc3a92b3009e65821618a0197963a6ae55522781a5f2ffbe1fa93cf06cb16866be77e5bd00ce1660770bd871a076630b38a5b7c69874b5bf847f69d285628f0affc59af200dbe29891484352d0e7f90aee820f24843b9aca00831e84809437088ecc92aa00376f1535bd42186efc3a92b39e6580b90a841d445ac8000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b98000000000000000000000000000000000000000000000000000000000000000000042b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e200e53b78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba001715019d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500000960f62b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e97001688e2e53b000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000843504e41550100000003b801000000040d00bf61f7a3d355007dc1227d371c733082930d37003aadea02fbf5dff7852b9c769f51d2f6df08002727f16ba591fd97ba6dccd94830f97204a826d3edc702506a10450002da4d0005a8082bc110608d4a391fa8be8f5723ce842930bffe27aa64246d9d1e891b00526b05493ba1d0a0495399318e3481dc815edf771fc775160c72e91b907ad20001031fcb95bc7714d343cf4bbd6fc5ac1a0f5f119c5e9e9a3c8a8ff738fcda0020e035740d2f3d5c940d874187a6229c5395194b39aa5080ac9f08ba42a069007739ea83000416959488f31d3628e8013f6f7b220536fec86e8e97fd30aed7008c37179afeb88d4c6ca9a3316e6ed495529c171b0bb87185a6e25e4f8d65160067a7ccd95e81fed10006f3b282ca015bcef4b3a50e581e0b2b1697827e516800bb428aa8f3ce73a600ddcd0dcbbb520c68b6f15e237272c435e0f0b24e8c970035462bddc7e0543e699406020008b12b1bcad5da43af6f0b70551be7c5dc50005fe05eab112dc1d339597018c4b7544c878a1b282cb29852e30e059c0759780081499d11484fbc1c6738f647794c1e37010be3fe303a4eab53df705fb8af9600da8c967091b2750dfcfa5e3a9c09c7b8aa5c3a5bb041888f4e92de78407b25000dad64e7d73497a1862150c41c1afbdfab7f3805010c40c42c704ef18a407900d0ae902f65eeb7c250ff4ecdd91299ef73204d32ed02c725bebd26c4c13642006fcd794e26e581dc699cc8576be8abfa93d87d5eb6a3ca3e000d86682b0a26001587dbfb3d8ae42fd8c92c1fc27219180ae2b89fb045ec420170f80070ca720043a4d9e43a84405c2c6580c83069c7fc56d826a54ff9bbdd38d2fc0c010e5e00216ad0af8f68616ae5c5c8da14144e0de6ff9a497e1fd99b3dd944f97289df007ed719341e8bbfc6204add81c15da90700e754862a3d3a5d30c9334d50df9000f7010f31634f6542fe448c92b57a10659453ef603d7c0423cb7c7945beff3300c37c47386147008c59aff138ae7f617c6ada472eb6b7f256d2897b5068f45a0057b5c301e30010ad998c9adadaa539509e20398da2c549fc2791a902a3fb41008d71ead4c573c20c7360b7228324293fb22a264a4fb3fe031b947ac7901310009e6cbf783e89ea9e370012d18a2f9913b9ae9d8296ad3c903175ea8ba2118400c416bd2e532172939d005b4569d248c7eb97af7463d22fcc77b673fa0e46350036f50619a4b868483da64b3868006648733c00000000001ae101faedac585100e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000036a0082b2014155575600000000000874a09100002710c60763fea15ec63c5029c80024ee9b0b43c30157a3040055002b89b9dc8fdf9f34709a5b106b472f0f39bb006ca9ce04b0fd7f2e971688e2e53b0000000005f64885000000000000cf3fff00fffff8000000006648733c000000006648733b0000000005f64c4300000000000000ba740a9f3f4b546239b05ec2acb8783635b198feb3c0b242e4a6df5f98000e95021355a006c27b3bcddec88ac424cefcc92b32f106b960f03d2382fe3a005e3d49424387952ecb35a9410611d7ee37bb6c3249dfd622f2c493e3a53c4d00cf25b6665e9d20fdd35a7dd8e7dd9e312b665239cee1cb694265341857f9cd00f275faae6c01523e8b210fb9a4089745a694c9a40bb9c7973de4f7f429c91200f4f4037eb54b4d65679f82633566d9635ebd86a8aa788f458f396c5bdb6080001d368feddcfa0931f7b723a7550fbe8569f6be00550078d185a741d07edb340012b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501000000002d5521cb00000000000007bd76fffffff8000000006648733c000000006648733b00000000002d3eb6ce00000000000927ff0afd22aedc57a136eadd06ed8bcbed59da51003b0354ab1bcd36e770b69fd03b3eb1e8e915f762fea1830280bce904ba1f3a002f6ff87f973338f28482eabc75e293ad8f154c1b7b2c6aa78c32786005f19b009beb24e98627faf752fe7e9fd1ecc41f6ba24574e252b89fe331ceaa8c88af0072eff76c6cbf11087884f82d9994fd137d14a9a29e81c26095ca9ffccdd4f700e16835fc3bb786682af1901cb42fb6957b0c3c82633566d9635ebd86a8aa78008f458f396c5bdb60801d368feddcfa0931f7b723a7550fbe8569f6be005500009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d500096000f60000004880850f7e000000002b4b27c7fffffff8000000006648733c00000000006648733b000000486c780410000000002dff300c0a9eca04fa51880731007bc8545747b0c4f50641def23d2b4a4695f60cf4d5873f11cd4d67afee202400190e9e9b9ad45141977725a595dbc3f984e053ecb0fd35d5bdf1b3f2053972001b0dc41fb8cdd91c1daf4dbe421121ceebb1530f63ae1e6081e05488ec586200f7dd9485488efb5a06e0276f9efdbac789c5185206982f76f7db42b02beeb400a4ffa4977e87bad6fd10d873091e3272a51b717fcea8826e696b03d02c1fa7006347b880c59773d020f3e833acf6748965801d368feddcfa0931f7b723a755000fbe8569f6be0055002b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce0400b0fd7f2e971688e2e53b0000000005f64885000000000000cf3ffffffff800000000006648733c000000006648733b0000000005f64c43000000000000ba74000a9f3f4b546239b05ec2acb8783635b198feb3c0b242e4a6df5f980e9502130055a006c27b3bcddec88ac424cefcc92b32f106b960f03d2382fe3a5e3d4942004387952ecb35a9410611d7ee37bb6c3249dfd622f2c493e3a53c4dcf25b666005e9d20fdd35a7dd8e7dd9e312b665239cee1cb694265341857f9cdf275faae006c01523e8b210fb9a4089745a694c9a40bb9c7973de4f7f429c912f4f4037e00b54b4d65679f82633566d9635ebd86a8aa788f458f396c5bdb60801d368fed00dcfa0931f7b723a7550fbe8569f6be000000000000000000000000000000000000000000000000000000000000821617a07c95ef9d0b0fd198c319c7f353a6003b9dfb4b78796be530931375ddf26c44bb11a035adaf356d9a5b53283649dd00be367b059a25d0366dd9826b3ee5af699a2797cff8aa02843b9aca0082b48c0094530000000000000000000000000000000000001180b844095ea7b30000000000000000000000000007968156adf895922406523887e5c157623c38db000000000000000000000000000000000000000000000000000000b5e620f4800082001617a0a6fcc82f70bdf7f1789f51bcaa794d98985d119310108c2232b182b50050f6004ba04537b56d03f3a7b7b1ee484cc45446eda025d790b98e3a44169f00dea8dad57b33f87133843b9aca008287ab94530000000000000000000000000000000000000011880429d069189e000084d0e30db0821618a0ae941a028ace00965ccabc21138bc0f7e890987aedeb1950466bb32210fd2e0801a00da04c4700ca48d7a55b91cb225402c814dbbad6bcf52a0d6ae60fb41468b8381ef90794001d843b9aca00830493e0949ac4d9ee5c30339a24e1b784842e58f363f5845800880214e8348c4f0000b90724ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a17dc2f3792b57c88c6200db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000143fc367710128d7cd65dc7c1f12d09ce6c318a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664853660000000000000000000000000000000000000000000000000000000000666fe00066000000000000000000000000000000000000000000000000000000000000000000c4f42fcca4fe11a063058cba2d023adadbf7cbc72722f130c52c3a636100e15734e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20eb3792c6b7f00558299edf95ff23d0000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f93f69525400000000000000000000000000000000000000000000000000000020f93f695254000000000000000000000000000014300fc367710128d7cd65dc7c1f12d09ce6c318a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af35722c0000000000000000000000000000000000000000000000000000000000000000415b8db520019d00554153ef8b02b153dbfd239495f854f5d3e22dd6650b07630dfa45188385110016cbbfed826933883c568711c550f99a880dcdd6e301f41f322fc71c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821617a0dadd295d8d32cbd31276d02aece897b900e6b14299fb9ffb40fc487b7aaa375270a05cec72fd703664ff65c5b4e7efa0009571636e5cdc9d2e8345c562715a45d88222f8ab81f6843b9aca00827cc494009e12ad42c4e4d2acfbade01a96446e48e6764b9880b844095ea7b3000000000000000000000000009f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d00000000000000000000000000000000000000000000000000799f677fbdea340e82160018a0f33eae59c6f2385b457697fde40754bba654307869065f0138c173eb1300cb936ca051d8668dab9c4761baf88a387ede93381f385f7ceeeb6388c2229e001b04981502f88b82374a843b9aca008311479f94400968854de5651d7fa85e0005e3624d70b25852b080a4a0712d6800000000000000000000000000000000000000000000000000000009184e72a000821617a0401f2e5f414995834f82a000b6fcde5c649b5c1ccb229d861aba151d94cde0afec9f111f3e44f730e85858007069623e946be222b19545a2cf123338dca5f350daf2f9082c0b843b9aca0000830574f39437088ecc92aa376f1535bd42186efc3a92b39e6580b907c41d44005ac8000000000000000000000000000000000000000000000000016345785d008a00000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade0001a96446e48e6764b980000000000000000000000000000000000000000000000000000000000000000029d4294bbcd1174d6f2003ec365831e64cc31d9f6f1005a2b85399db8d5000960f62b89b9dc8fdf9f34709a5b106b472f0f39bb6ca900ce04b0fd7f2e971688e2e53b000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000603504e41550100000003b801000000040d0000200d2173b2de05c941768a7e35a840e4a99bf3a2026b0b5260f7454d197a00e75624a5f2ba3956521957eabaf6045af5a932f7305f6d9da2d9e8a4bcec7900e73a79010140d3a016cb408db48e8101fcdafcc14754f5a20651b34e2b4b5d00fcc0d0a24ce062c4756b4f0c2a985b1c54967ba372135d79152701196fa7b200cf223f6a8faff30002168dd05f83726431b9da859f5360679d0c51b4fa20d00091c96128d27da5c912000d3c827420ba5d6846e0fe8f0e34ff3dcfa0baeec500ff741418dcd7406d09f7cd0004e4273cd828e17aa47fbaba8c94adac873bf5006ef4062cc5900478fa514a4a7a0a7be42f15fca1ee181182d5210b2d2718d400546087a08e9550f1c55705930013740106020f68a8e5b79a922c381e5d68dc00ba25f75008d205ef105aa46186aa505eecee2e826ce274981d00bfb89b03f700c23a2e0c52001c3210852c2fb0bdbe914ecec4010890b98769b01e25e53cea00e0d0e726641d54bcb58acc933f48eef0c976283854191db5bc9da94f6d37f7009d87cb00997c1a818617f801269c91b169bc006d3f324a010a079214f5a28400954521a362af1bf3ca2c7cdbeaeff0daa7b6c7e1ade2cbbd93ef60c4e6e8b100b91b67d231762df8f87084d393629d60d7c3cccbbfd6725ff4869e000b63f600db4c3944f84e0bfb11319bf99680f0f6cb12950ee56119918fc9c2f2e5cc4c000af3ea3e3a1eda7a5a2a8247529e90406f2bed3b9eabc34fc462ea0dc008d500010d83a4803f42b519a2af98af98c41b48a56004b14a4caefcb23435c91fac00d7829d5035d64968af2565677890a7ef5e17184e53f33ab7e84a58d6b2c731000dcac5ad010ebe2080964186112874fd3024eba4522ef42f1fa16f3015f6910016f028aaa936c57fbdcae387bdf01351ac8609da02fde7623da7e38c2dd8830016d0e6981d4871de000ffae80fa89a761d0621af770e2fb868688149ffea880091a983f265c3411d0959920b4687055801c19d7f277674876e9a94d5723ba3000ae416aed8515f27c925765900107dc66ae9dba990ae341d4907a32ee053e3001741f0f3de7a4317da1393a6b4810a72661ccff171a9f95a6a164f81839c7000aefeef5bcfd76d90c052ac11e46f402f0112d4bce2999c0923f2b69c68b9d300f67f964b759d1479edafed6b10ca8dc472051857befc0595708c970655246500437a7a9f5551d7805131a26de274ba34e6d4637b006648733b00000000001a00e101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa007100000000036a82b0014155575600000000000874a08f000027100e44147b00dc9587d36021c936349c4eeed23e64da020055009d4294bbcd1174d6f2003e00c365831e64cc31d9f6f15a2b85399db8d5000960f60000004880850f7e00000000002b4b27c7fffffff8000000006648733b000000006648733b000000486c007719b0000000002dff4d8a0a89a701001c430e9cad6f7ac961a80825496b67005bdf04f2e84d4660be0a519f47aef4ed49e916d919c83b659b2a42b63e18ca00fa799bb6b39ace0f5a1fcd64c95d305d5175b551ab338ade41aaa0206167c200151b501ee2d395649c46ccefbef579482f36e669d234858ac4f18b30cc0f470082aa68e2ca44e4f87c3b67e50c74ef2e2492523e013fd0d4e40d4525214e83008c06079917b27b729b16969886382409be908b5c53b142fcaa798f3aad7619005b9a94dc59453d9cf6aa6a1a33cd8edc6ccf4662338face179f80055002b8900b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b000000000005f64885000000000000d3d6fffffff8000000006648733b00000000006648733b0000000005f64c43000000000000ba730a3f43576b4b46fbc561da00141ef6af5019b68b1d5d42e4a6df5f980e95021355a006c27b3bcddec88a2e0042b9f3ddee90a5904d5c896cb97b34a519f6079a17489282390dba31c5bb02000ccc22175f27f4c964cfc573aa1d75b03bf509d0102a65a9a7a9614d91d2d500e191c5b7668a1e01082bd7e039a02018017037fca27cba46c5d52b1297442f00eca7b40a381c922b6bec620db291092ffee515b31c0be44fb7a1c42f05ad8700be30e1a5518b97108c5837874131383d9cf6aa6a1a33cd8edc6ccf4662338f00ace179f8000000000000000000000000000000000000000000000000000000000000821618a0ebbf587e74d08ca1c31f8b8bb27d6b9a11efa6516f569950b000de1b5c777b6a00a01e409f80ae76ea91223127e8b9eb1f3c7a8196a6094e580016b926f752be3e04fff87080843b9aca0082ca77945300000000000000000000000000000000000000118711c37937e0800084d0e30db0821618a0b61e0e3200a80bac91093880a2f4c85642983a90c7737d4b9a60a2d4cbe5f6553ea0266400311841abbc3eeb459fce1802c9f05815daa80356878e425c1424893f405ef900053406843b9aca00830475c3949f6e8e1c33fc2aa6ff29b747922e3f8e3291001b9d8806f05b59d3b20000b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000d480632532ead98c5bb4231fafc9305f284555aa0000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000003c5f3cb5432490bc0000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592240652380087e5c157623c38dbd480632532ead98c5bb4231fafc9305f284555aa9e12ad0042c4e4d2acfbade01a96446e48e6764b9853000000000000000000000000000000000000001100000000000000000000000000000000000000000000000030008a5241faceecf00000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000066489a41d480632532ead98c5bb4231fafc9305f284555aabb94002e16cf9e46488c0d6b04853b361900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041784130e33668484ae0d9a5ad4f4a1bcac733e4f1310087c2bd6f2dc6943385b1ce3ba73dca0a0cb60cd8c6498e50c9e964d93c3ff700399a7ba0e457733f22254f4e1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000d480632532ead98c5bb4231fafc9305f284555aa00000000000000000000000000000000000000000000000000000000006648745d000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000821617a08d8400190434e45bebe6137d953de79f8848ed622103afd17806cfba5972803d5ca0001a2930112dd393b9667cd75765f78edfcfba6d68c322725dbfd3e228f36d490034f8d324843b9aca0083046024945300000000000000000000000000000000000000028802c68af0bb140000b8642fcc29fa0000000000000000000000007b00111761582e8a8ffe6d46c01edb337f76158bd30000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000000000000000046024821617a02ac6955635a500b7f64cbe4acc7ea7f2583c1f3d82233106814154a67072db7e75a0392203a400e2417721d73482cc3ae3005d8cdf818e774468c457c285d80cf0033ff905330025843b9aca00830475de949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d0087038d7ea4c68000b904c4c7cd97480000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001200000000000000000000000008e3800613c8c09426e9bb41e47e4eebdaa0c5569e60000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000b4cd77019870000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c10057623c38db8e38613c8c09426e9bb41e47e4eebdaa0c5569e6340bad9627cb0072d1c4cc92c7f53c4995454130ae5300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000091500e71b186200000000000000000000000000000000000000000000000000038d007ea4c68000000000000000000000000000000000000000000000000000000000000066489a238e38613c8c09426e9bb41e47e4eebdaa0c5569e6eacc7895bc009f443e834f260df0ff0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041147bb720d0a03cc02c0ad045e3b499aa57e4ad708e85e8fc008774ac86620eebf51bb1a50a82a08a9b97a5151447d7e551a0ab5ce2cb5e6500c1211eb75b3b51c0681c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000008e38613c8c09426e9bb41e47e4eebdaa0c5569e600000000000000000000000000000000000000000000000000000000006648743f00000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000530000000000000000000000000000000000001100000000000000000000000000340bad9627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821617a0502eea94db008e1e9675b6059de953bc982f717d22577365b0b9238cfbda3ca21ca063715000e3594db967a9cde3d4ad41577da6d4dcc69f08c292bed0fd958171ed9cf8aa0003843b9aca0082c1bf949e12ad42c4e4d2acfbade01a96446e48e6764b988000b844095ea7b300000000000000000000000007968156adf89592240652388700e5c157623c38db000000000000000000000000000000000000000000000000000000b5e620f48000821618a0d9ceb60104f8348bec6664749624dfde287f3f00cd3c52e46b5fd24b83bdcfbafaa076b4b1c100f08f8bda618caf7191caadbb00f12d6f15587aa3430c688e9ed04a8ff8ab81a6843b9aca00827cac94340bad009627cb72d1c4cc92c7f53c4995454130ae80b844095ea7b30000000000000000000000000051be46170069a77050be5273d34e6155fdb7e03100000000000000000000000000000000000000000000000000000721801662f7c7821618a016002866f0dff8e1c947a81d6942dcee5967703e3dfbc83ebf777eb5f3263285df00a0051710bf79e75031b6a215338acb92992ab7c044e966eecb83bb2a60ea670062dbf8aa0a844a817c8082c1bf949e12ad42c4e4d2acfbade01a96446e48e600764b9880b844095ea7b300000000000000000000000037088ecc92aa376f150035bd42186efc3a92b39e65ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff821618a08793c8c10496e740ba768e4d8d4059006c8cf971f08b99e413868272653f1d94e2a002474460191b29f48193573f55005790dd56354d6705ccdb74b28bd40edad58fddf88c8237e3843b9aca00831000cc9c94400968854de5651d7fa85e05e3624d70b25852b080a4a0712d6800000000000000000000000000000000000000000000000000000009184e72a00082001618a065024ebfd569337a79086a114e032059d87aaf9376fd6e4ca8046eb400d0c917fca04450337d1c3dd472374a919861d1ff3eece16f8b2c96e149fded00f80c0f8f61eef9052c1a843b9aca0083046efe949f6e8e1c33fc2aa6ff29b70047922e3f8e32911b9d80b904c4c7cd974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000c9d219cac961bf33117de85ac2a49177bf99e5440000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000608fb00571168c30000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf89592240652388700e5c157623c38dbc9d219cac961bf33117de85ac2a49177bf99e5449e12ad4200c4e4d2acfbade01a96446e48e6764b9853000000000000000000000000000000000000001100000000000000000000000000000000000000000000000004da003202d8a85ebc0000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000066489a4ac9d219cac961bf33117de85ac2a49177bf99e544c23bf900b2fa35417a94aac022fab797b9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000419d7c71370c69bc93891b7c6758745981c4dcd150273f00f93d3a7f7094f9abd86f78a79b19726d6936ffde2c346a7c78f3cb55416eb300e7eca6b75f9718b2439b761b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000c9d219cac961bf33117de85ac2a49177bf99e544000000000000000000000000000000000000000000000000000000000066487466000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000005300000000000000000000000000000000000011000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000821617a0c0aa49003b29f174d077766f844aed602a3c7f817a4e2194d439a64945b7461ce1a04300df0c9effdf27d356f99baeaf955792837545b37c5d798289f1bdbcb417c0ab00f8eb1b843b9aca00830318aa9453000000000000000000000000000000000000000280b884a93a4af9000000000000000000000000340bad9627cb72d1c4cc0092c7f53c4995454130ae0000000000000000000000005c57c7991b4fc3c58b0066d64744c4dcd94b1c153a0000000000000000000000000000000000000000000000000000008c38e4b3bb6900000000000000000000000000000000000000000000000000000000000004a4ff821617a0b044923aa4cbe36d1e2ece21fc9d00b6c2f2c69159a0ddb6fcae6e0bf0dea223eea01cb19d71e8acdbfb5cc7e31000ea4f26b6ea6ad6e265800a96e723777cab57c97cf8aa07843b9aca0082c1bf00949e12ad42c4e4d2acfbade01a96446e48e6764b9880b844095ea7b30000000000000000000000000037088ecc92aa376f1535bd42186efc3a92b39e65ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82001618a0f1fcf61fc003c90b8146678932d6f7df1dd5eb1ede6af55fecb6ad6c00bbcc5db1a011b2a822394dfed005509d3d51298618c61d6b0c6d8b9909639000cbdc50f65af4f905330f843b9aca008304a7fd949f6e8e1c33fc2aa6ff29b70047922e3f8e32911b9d87037dd9f4e2a000b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000003e414d6cbcff5c9864cabfd7eaa20b82e3d935af0000000000000000000000000000000000000000000000000000037dd9f4e2a00000000000000000000000000000000000000000000000000000001e5ef1a7344a350000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf80095922406523887e5c157623c38db3e414d6cbcff5c9864cabfd7eaa20b82e300d935af9e12ad42c4e4d2acfbade01a96446e48e6764b985300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000186b3612a81cca0000000000000000000000000000000000000000000000000000037dd9f4e2a000000000000000000000000000000000000000000000000000000000000066489a4c3e414d6cbcff5c9864cabfd7eaa20b8200e3d935af08279939e098488d81962691bdc244ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041329d1f84fa1771ed33c1b1dc89b2d100c8e3c0984f46c6b7847ffdadbb96930bb2243fe6bdc7a83e54e3849f234a3800de23b818f66e194e43b1487ee28bd7fd68dd1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000037dd9f4e2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000003e414d6cbcff5c9864cabfd7eaa20b82e3d935af000000000000000000000000000000000000000000000000000000000066487468000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e600764b980000000000000000000000000000000000000000000000000000000000821617a03514cd511f5be3bc85c4bbbe6341ff120bb1be48d324dbec5e49ac00653dde99e5a05b3ee26fc9c35202ed3672007de1ac6bf0bd9356d0da70a5e9003e10bdfdc2bb13f8eb1a843b9aca00830318b69453000000000000000000000000000000000000000280b884a93a4af9000000000000000000000000340bad009627cb72d1c4cc92c7f53c4995454130ae0000000000000000000000007bd7009f8b661bc824124a2449ce1825321dd6aa41000000000000000000000000000000000000000000000000000001785157d123fb00000000000000000000000000000000000000000000000000000000000004a511821618a029908a15a681590080283df03ce5334b9b33e5515d340391e92f63ce11dbb4fb51a00c07641cd800066c316f08783a168f288a746a65dd4e3d7d727d45fd28c0d887a6f8d20784003b9aca0083045012945300000000000000000000000000000000000002871100c37937e08000b8642fcc29fa00000000000000000000000071a93239dbec2e00fb4a165b68d256804a2117fcc2000000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000045012821618a0901b7c56c2e810b46bfb921f00eb6a8e691ea501f25b2320f9ba060af5eb7d0155a01612bed4a0872b6c514400a5e50b1f6c648d16ed128c90f742ca3204d8f298dc8df9096c16843b9aca000083012ebf94400968854de5651d7fa85e05e3624d70b25852b080b90904e36c00b2da0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000030000000000000000000000009e12ad42c4e4d2acfbade01a9600446e48e6764b98000000000000000000000000340bad9627cb72d1c4cc92c700f53c4995454130ae0000000000000000000000005300000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000032b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce0004b0fd7f2e971688e2e53b78d185a741d07edb3412b09008b7c5cfb9bbbd7d00568bf00ba737b456ba1715019d4294bbcd1174d6f2003ec365831e64cc31d900f6f15a2b85399db8d5000960f6000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000723504e41550100000003b80100000004000d009b8b37250472ba9c412b8af00d1b249a7ff2757f4bc0155aff380e62a100e43a377d309fa2debd8e4d841fab6b0f381126c37b7b98e577f6f0e82188fb007397fbc8010293dc801867c816290bc140ee7371a0d1ea8dd13de7cb57fc15000af5f70b8207f12c80d1ae7249eae3bc10d78471c6dedf2a93cbcef33b4b1e00218c576492813e4a01030b110f0df44f61e7a0954935a6de43860f3955f4c80077f86208292d8eddc3532e7a8bf762de175d0248acad8a77ded79ce816ad8400b6f8e8461e9b84fb10aa4ebd0106c2c4c8b61f6a24987449489f3a47f371c800914453c15372e8df5fb60846a195761927c43f928db281eae9819db5368a4500926ca13280e1a81fbf075a8178d118c5010829542571c88d3688c1eadc5aa200ed95e2e191f85fddfbe65fc61fd60bad0b655f46a455874a9c6edf7a95156d00c00ff543d0232c14b11c872f8acb21898b2e7bac010a3243ada809170312e50065f2c64b89435972b91b4370b501bd479180714fc7473f735a12caf210a6e4008f62ddf2fa000dcbc82d55347a6b1ea5f5b74883306b46f7000b92d5e1a6b9000c8b75b4bcf61cff064d0f88136e9b1719d879ca700b42e40cadbb3ec5a1e800c335653f412ed3f828bfcde679cce17fd044d321eb2fc381cc5d0f23010c97007ae4d752af266908151f0a078fa573cb021fa624c5661705e9ef2fa7f778d8005112e294f38c8c2423fa73e540f62d61e773131cb73f32114cb9f8403f9ca60077010dfdfef5ec72dd139b85fa596a503d44fd91bcd5aa476fec8f85f4d5a7004e270a40506b9b7be4a335b1ac17f6a176c2a3d94235a5132b1b81f5635cd1001d101dca35000e7b871b83160e4ef5c8a1314da0d6bf3553e2000b152a12be004ca6ac188f96347d40ed6a1a0dc10308d5e022a03463fbef8e0cc9e2d998a60093979e96134e65257e000f13547069cd0e69331e2c625bee7f7db2431d31eb00fd2cd2a9caaf2cdf48e39832241fcfa380605ddd1b5e4d3ee089d3bbcf569b008287e117c81716880b729912490010bd8ad8ea854d4fbc1181cd33d4581fd0005584e63a31aafacad0a8687683e2394a6317b43552fdbdaf7e497dd2f8a4b30023fd95992e26fb0cf7e1242c4cc6bf1f0500127ef337ec7cafce96c84b727d00e5aee53070146445e0fdd8a95db0d6158865c61519f18b6974a668f671e50a002b758c635fee4332ef53e182c018b42a24d6bddff801664873360000000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea400aa7100000000036a82a4014155575600000000000874a083000027107d166600a022bd42771fcfe4e36e52186da1359536030055002b89b9dc8fdf9f34709a005b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b0000000005f6490200000000000000ad60fffffff800000000664873360000000066487336000000000005f64c45000000000000ba760a4ecfc82eccd093e90a965c17ae663e790e6e00893042e4a6df5f980e95021355a006c27b3bcddec88a47ff96815aa2062f2600e35d95f4e18afb7900074f1f442e93c417585f6118a69346055ff9dfe937fe00d3face6e686551f44b8f20f085f477f9c7b035177a20ff80d37e848d03a91d0070b11ade79f054af238ed9d43459f0b091ccad612368828da97c65bb13b9dc00de0b32b22bc8c3521b37d3d39e8f442919c066837ef7e8d1cf2825ed76062400578b1d4e33d26e18ea4de89bc08816266ef946d09b6501bc5317a20055007800d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba17150100000000002d551aab000000000006f25efffffff80000000066487336000000000066487336000000002d3eab7a00000000000928d30afd22aedc57a136eadd0006ed8bcbed59da513b0354e61e0b401fc62d1a1276defb3489ab70378b970700c43bf3a1d20c83c2984b3a8b082c6cc995fd6dade6994faf79f5b4a2778a0a00f349d28b06e9e2c62b424ae79cbb37aca301c453ed4cdd287c050dc42efa50003d456aa097c9fcc55b5ac83db69ba8b6ee3c3e20a432d8da348f9a78808cfa00fb5e96fb1b8a881a5e5f289a20bd4dbcc7613598331e2d44c4ab2066837ef700e8d1cf2825ed760624578b1d4e33d26e18ea4de89bc08816266ef946d09b650001bc5317a20055009d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b0085399db8d5000960f60000004880850f7e000000003e4cb797fffffff80000000000664873360000000066487336000000486c6f5180000000002e0012880a005884b1029478470d13b86df257d2c9133cef5f0b7240afc5a1718324b5331b00833572e6d5ba5109d104ee1a13a145e6a1ce0cdebbc76e6d95727d62727e5400d763d03191a09b185ba18a02f0ba905dd36a74a0d9c3114a9571e4f9147fc5003eb54b44f7ada14d9ee5ee266ad20f97f94049ebbdc5b3cda945add68e5d09000ce02f2bdb3ee7e2979464b6fd6521bdd2d5ecd49a10592c525fb6ebcbe5ad00c3d65e410eaad0131890d495aa33e998952b72c4aa259428e218ea4de89bc0008816266ef946d09b6501bc5317a2000000000000000000000000000000000000000000000000000000000000821617a081f75083e867d7bbb9094840e880d900f18690c6c60bb36e39e7f083c0291da03ca001e6c69ad0ab4a1fd7bcf29c9500492f4067ac0944b32306387608f9a768f87c5bf90d3419843b9aca0083092700c0949ac4d9ee5c30339a24e1b784842e58f363f58458880429d069189e000000b90cc4ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b20e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000014300fc367710128d7cd65dc7c1f12d09ce6c318a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664852070000000000000000000000000000000000000000000000000000000000666fdf070000000000000000000000000000000000000000000000000000000000000000001180b05eebe9006dc76b1c0790ee43a4389ffb88e9648a4413cc52b9a353b05caae8b9a17dc200f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d0000000000000000000000000000000000000000000000000000000000000023008d00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f93f69525400000000000000000000000000000000000000000000000000000020f93f6952540000000000000000000000000000143fc367710128d7cd6005dc7c1f12d09ce6c318a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000e8b9a17d00c2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000004178dc563d130e49ef43893b3286c30091c951e13b9642f586709876d856367c811b75ed3d18479fd793323602404700f731f3c18b576884a2c7101a36ab0fe0da646b1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000143fc367710128d7cd65dc7c1f12d09ce6c318a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000664852320000000000000000000000000000000000000000000000000000000000666fdf320000000000000000000000000000000000000000000000000000000000000000006600d87d69be06e5129a47960a9a0aa568ab8a6fa1c26d4f05c3210d217bc6103400e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b8c531de17e20eb3792c6b7f55829900edf95ff23d0000000000000000000000000000000000000000000000000000000000000023a200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f93f69525400000000000000000000000000000000000000000000000000000020f93f6952540000000000000000000000000000143fc36770010128d7cd65dc7c1f12d09ce6c318a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000e8b9a17dc2f3792b57c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000004158c6b0cc998650813a00278795fffd0a7c17b3b2e4093705487083e31d71bce8ea350cf4555f5e1ada0057f760bf5e20729fc8d825c091cc691051c7f52eac36cf141b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001821618a08fadda7b8c0da7e25e06890052a5c934380262acc9bce55d74d944ea44c1e033dba06bc86dd52c31ee89b0004d8a8b05ef3a6d94ff3c3b4f4b4b0dbdf891eb4e3e1f89f8eb1a843b9aca0000830318aa94530000000000000000000000000000000000000280b884a93a4a00f9000000000000000000000000340bad9627cb72d1c4cc92c7f53c499545410030ae000000000000000000000000aa48f4241ee095fd12c8adcb13c0c055b100de4a7c00000000000000000000000000000000000000000000000000008c380017d007bd00000000000000000000000000000000000000000000000000000000000004a4ff821618a0fd0afd41374bdc0d85fda89d8758b899715cc885fb6c0069ead941ffd1e9aeb4bca07f2191b4c1fd52b185a7fb60786a0ba0d7ccd40300b0441b858ed8caf1e288247cf87001843b9aca0082ca7794530000000000000000000000000000000000000011876e2255f409800084d0e30db0821617a06d003c68a17dbe46d89b23f575c8879c643936b70ab8be09fa97898af590013dfd00a027f47293b53849f83f55b5b39a7cd67ea31de641c9f3c15271b58a2c89ca00e7b8f8cb0b843b9aca008301adbc944a240562869818726e32ff0aef7c0fd500636a954b80b864c299823800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000037088ecc92aa00376f1535bd42186efc3a92b39e65821617a0ffbd06970a82ec0c1db7ff7f8c002bf9c7e22bb654a20ecd1c1bb959b84bcd9945a00308f3cc7ca71527ce5ad10052ab2174161b8e7c071ec10cd95b1aad6f90cc3b51f9053380843b9aca00830004f95d949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d87038d7ea4c6800000b904c4c7cd97480000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001200000000000000000000000003579753ae8df3281f7009e45fbe044a879a5d10aa10000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000001ee7035d0013c700000000000000000000000067297ee4eb09007e072b4ab6f1620268061ae8046400000000000000000000000060cba82ddb00f4b5ddcd4398cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c38db357900753ae8df3281f79e45fbe044a879a5d10aa19e12ad42c4e4d2acfbade01a9600446e48e6764b985300000000000000000000000000000000000011000000000000000000000000000000000000000000000000000018d89d137520a00000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000066489a53350079753ae8df3281f79e45fbe044a879a5d10aa18aab857ee0994a1f9d53c42a002155436a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410030bc274c3642bfb31c372da8cd56f7d84f1ca28e0aedabaee9234584ed6e3100c5287d277d2cd7981f459fc39a0e85ae9f627fec11c8c757a0964f0257641100b6341b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed17390000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003579753ae8df003281f79e45fbe044a879a5d10aa100000000000000000000000000000000000000000000000000000000006648746f0000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e1200ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000000821617a063d0db8081b8e80aee5ed164008c41ca047515be890929da18978b76f48606c0c3a073eb7cccc11c0b30005b000806cf938df76c0c3a525eaabe05d5425a457b338eddf9052c2a843b9aca00008304aa06949f6e8e1c33fc2aa6ff29b747922e3f8e32911b9d80b904c4c7cd00974800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000074a8b1010ee01e8b33dc31fca065ee00c7ce9f96d2000000000000000000000000000000000000000000000000001f0067eee3d080000000000000000000000000000000000000000000000000000000000e5f6ffa778c00000000000000000000000067297ee4eb097e072b4ab6f100620268061ae8046400000000000000000000000060cba82ddbf4b5ddcd439800cdd05354c6a790c3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000014900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf895922406523887e5c157623c38db74a8b1010ee01e8b0033dc31fca065eec7ce9f96d2340bad9627cb72d1c4cc92c7f53c499545413000ae9e12ad42c4e4d2acfbade01a96446e48e6764b980000000000000000000000000000000000000000000000000000000b8e5775c32c00000000000000000000000000000000000000000000000000001f67eee3d08000000000000000000000000000000000000000000000000000000000000066489a4374a8b1010ee01e008b33dc31fca065eec7ce9f96d2d270c4f459da41bc8c5d964364451f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fc064d47fd72008bcce5741d0f18e542a64c00efd5c83ddadea8f0eea3fb4d0cf834151d10d40049e99613a78de18df17cde2c5b4703244a3452c2f93561958194161b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001040038ed1739000000000000000000000000000000000000000000000000001f6700eee3d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000074a8b1010ee01e8b33dc31fc00a065eec7ce9f96d200000000000000000000000000000000000000000000000000000000006648745f0000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e12ad42c4e4d2acfb00ade01a96446e48e6764b98000000000000000000000000340bad9627cb72d100c4cc92c7f53c4995454130ae0000000000000000000000000000000000000000000000000000000000821618a0a3525122caa00aafe85af8aa401b081c169400fa665e53e3a810708e57af750955a06620b1e6633516da6db9e709d82b559c0058259c72bf0b6b00d41582393a6c15bff907946f843b9aca00830493e0949a00c4d9ee5c30339a24e1b784842e58f363f58458880318415188e98000b9072400ed98a5740000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000000600e8b9a17dc2f3792b57c88c62db1dd561af35722c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000009994bf7c2e08007773f963e85a131f4eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066483f61000000000000000000000000000000000000000000000000000000000067358d6100000000000000000000000000000000000000000000000000000000000000000076d1e8796735912d4df50081cd145a9acf4f60c360579c98d8f1920cc9b6a7bf7ce8b9a17dc2f3792b5700c88c62db1dd561af35722c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b8c531de17e20eb3792c6b7f558299edf95ff23d000000000000000000000000000000000000000000000000000000000000001f66000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310552500331020000000000000000000000000000000000000000000000000000310550025331020000000000000000000000000009994bf7c2e087773f963e85a131f004eea5391acac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ec2c55d96000000000000000000000000000000000000000000000000000000007ec2c55d96000000000000000000000000000e8b9a17dc2f3792b0057c88c62db1dd561af35722c0000000000000000000000000000000000000000000000000000000000000000419194e24465c9b7ec5e1746ca6e0e08c34e3f003a095cf920c1a60571dbfe4b75807abbf8af01f478d4f22785046fa45da03b00595b988912e72498807f0ce931d9a41c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182001618a0278ef1279eae2a995925cf70be08acbfb0cf11fcaabc0967db97c385000d193108a06505051eeb79c6fafb0628bc8f90465ea5d91e95b703a7aec8b200a6268e144412f9053310843b9aca008304a7fd949f6e8e1c33fc2aa6ff29b70047922e3f8e32911b9d8701d47b10861800b904c4c7cd9748000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000009a7bb29c9ae9078272791ffd37c86d276492becd000000000000000000000000000000000000000000000000000001d47b1086180000000000000000000000000000000000000000000000000000000feaf76cb60a100000000000000000000000000067297ee4eb097e072b4ab6f1620268061ae804640000000000000000000000000060cba82ddbf4b5ddcd4398cdd05354c6a790c309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007968156adf80095922406523887e5c157623c38db9a7bb29c9ae9078272791ffd37c86d27640092becd9e12ad42c4e4d2acfbade01a96446e48e6764b9853000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000ccc5adfc488bc000000000000000000000000000000000000000000000000000001d47b10861800000000000000000000000000000000000000000000000000000000000066489a509a7bb29c9ae9078272791ffd37c86d27006492becd8557dc1d0d8240d2ab81ef4e1b99cbf40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004143dbb87e1d52dc1e78668a4b170c7700f5707c5b022a31a2e46914c72089a529650952554107b3ca5a0d630dbfca66001f8736159dbf6b30440e151e228e02d521111c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010438ed1739000000000000000000000000000000000000000000000000000001d47b108618000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000009a7bb29c9ae9078272791ffd37c86d276492becd00000000000000000000000000000000000000000000000000000000006648746c000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005300000000000000000000000000000000000000110000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e600764b980000000000000000000000000000000000000000000000000000000000821618a0321d7ce67f5a7a5f58f988fc46e4985289b363b1e7cd4a51620ba30041ff70b87ea04c4cf3d927d78b1e217a43ebfc11e1c8c12d21c6539f58088c00c14d7a31a7166ef9013205843b9aca008302b2b39407968156adf89592240600523887e5c157623c38db8711bf463603de44b8c4f305d719000000000000000000000000009e12ad42c4e4d2acfbade01a96446e48e6764b9800000000000000000000000000000000000000000000000000009bde822ec240c200000000000000000000000000000000000000000000000000009a4f7bc2c56e3000000000000000000000000000000000000000000000000000001191d76dcb827100000000000000000000000000c662f92792085ce6efb7c1546d87a0804982164800000000000000000000000000000000000000000000000000000000006648737c82001617a01978886ea2d8ec372f5d2accf4b335df40f8cfb6da1c08fe1adfae91000bf50fb6a01b9ecfc69ea5c675802f11e4a6526581054365a60b43e38b4f6c00ad60b9951fb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ] + } + } +} \ No newline at end of file diff --git a/tests/src/mock_relay.rs b/tests/src/mock_relay.rs index f2c87598..ea9ba1e3 100644 --- a/tests/src/mock_relay.rs +++ b/tests/src/mock_relay.rs @@ -16,7 +16,7 @@ use axum::{ }; use cb_common::{ pbs::{ - GetHeaderParams, GetHeaderResponse, SubmitBlindedBlockResponse, BUILDER_API_PATH, + EthSpec, GetHeaderParams, GetHeaderResponse, SubmitBlindedBlockResponse, BUILDER_API_PATH, GET_HEADER_PATH, GET_STATUS_PATH, REGISTER_VALIDATOR_PATH, SUBMIT_BLOCK_PATH, }, signature::sign_builder_root, @@ -29,8 +29,11 @@ use tokio::net::TcpListener; use tracing::debug; use tree_hash::TreeHash; -pub async fn start_mock_relay_service(state: Arc, port: u16) -> eyre::Result<()> { - let app = mock_relay_app_router(state); +pub async fn start_mock_relay_service( + state: Arc, + port: u16, +) -> eyre::Result<()> { + let app = mock_relay_app_router::(state); let socket = SocketAddr::new("0.0.0.0".parse()?, port); let listener = TcpListener::bind(socket).await?; @@ -85,24 +88,24 @@ impl MockRelayState { } } -pub fn mock_relay_app_router(state: Arc) -> Router { +pub fn mock_relay_app_router(state: Arc) -> Router { let builder_routes = Router::new() - .route(GET_HEADER_PATH, get(handle_get_header)) + .route(GET_HEADER_PATH, get(handle_get_header::)) .route(GET_STATUS_PATH, get(handle_get_status)) .route(REGISTER_VALIDATOR_PATH, post(handle_register_validator)) - .route(SUBMIT_BLOCK_PATH, post(handle_submit_block)) + .route(SUBMIT_BLOCK_PATH, post(handle_submit_block::)) .with_state(state); Router::new().nest(BUILDER_API_PATH, builder_routes) } -async fn handle_get_header( +async fn handle_get_header( State(state): State>, Path(GetHeaderParams { parent_hash, .. }): Path, ) -> Response { state.received_get_header.fetch_add(1, Ordering::Relaxed); - let mut response = GetHeaderResponse::default(); + let mut response = GetHeaderResponse::::default(); response.data.message.header.parent_hash = parent_hash; response.data.message.header.block_hash.0[0] = 1; response.data.message.value = U256::from(10); @@ -128,12 +131,12 @@ async fn handle_register_validator( StatusCode::OK } -async fn handle_submit_block(State(state): State>) -> Response { +async fn handle_submit_block(State(state): State>) -> Response { state.received_submit_block.fetch_add(1, Ordering::Relaxed); if state.large_body() { (StatusCode::OK, Json(vec![1u8; 1 + MAX_SIZE_SUBMIT_BLOCK])).into_response() } else { - let response = SubmitBlindedBlockResponse::default(); + let response = SubmitBlindedBlockResponse::::default(); (StatusCode::OK, Json(response)).into_response() } } diff --git a/tests/src/mock_validator.rs b/tests/src/mock_validator.rs index 7d31f770..54d4d8d3 100644 --- a/tests/src/mock_validator.rs +++ b/tests/src/mock_validator.rs @@ -2,7 +2,7 @@ use alloy::{ primitives::B256, rpc::types::beacon::{relay::ValidatorRegistration, BlsPublicKey}, }; -use cb_common::pbs::{RelayClient, SignedBlindedBeaconBlock}; +use cb_common::pbs::{EthSpec, RelayClient, SignedBlindedBeaconBlock}; use reqwest::Response; use crate::utils::generate_mock_relay; @@ -39,9 +39,9 @@ impl MockValidator { Ok(self.comm_boost.client.post(url).json(®istrations).send().await?) } - pub async fn do_submit_block( + pub async fn do_submit_block( &self, - signed_blinded_block: Option, + signed_blinded_block: Option>, ) -> eyre::Result { let url = self.comm_boost.submit_block_url().unwrap(); diff --git a/tests/src/utils.rs b/tests/src/utils.rs index fcc01194..8c9507ee 100644 --- a/tests/src/utils.rs +++ b/tests/src/utils.rs @@ -11,6 +11,11 @@ use cb_common::{ }; use eyre::Result; +pub enum SpecVersion { + Deneb, + Electra, +} + pub fn get_local_address(port: u16) -> String { format!("http://0.0.0.0:{port}") } diff --git a/tests/tests/payloads.rs b/tests/tests/payloads.rs index 60bb9ce8..4ba705f0 100644 --- a/tests/tests/payloads.rs +++ b/tests/tests/payloads.rs @@ -1,32 +1,49 @@ use alloy::rpc::types::beacon::relay::ValidatorRegistration; use cb_common::{ - pbs::{SignedBlindedBeaconBlock, SubmitBlindedBlockResponse}, + pbs::{DenebSpec, ElectraSpec, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse}, utils::test_encode_decode, }; +use cb_tests::utils::SpecVersion; use serde_json::Value; // Happy path tests #[test] fn test_registrations() { - let data = include_str!("../data/registration_holesky.json"); - test_encode_decode::>(&data); + test_encode_decode::>(include_str!( + "../data/deneb/registration_holesky.json" + )); } #[test] fn test_signed_blinded_block() { - let data = include_str!("../data/signed_blinded_block_holesky.json"); - test_encode_decode::(&data); + // Deneb + test_encode_decode::>(include_str!( + "../data/deneb/signed_blinded_block_holesky.json" + )); + // Electra + test_encode_decode::>(include_str!( + "../data/electra/signed_blinded_block_holesky.json" + )); } #[test] fn test_submit_block_response() { - let data = include_str!("../data/submit_block_response_holesky.json"); - test_encode_decode::(&data); + // Deneb + test_encode_decode::>(include_str!( + "../data/deneb/submit_block_response_holesky.json" + )); + // Electra + test_encode_decode::>(include_str!( + "../data/electra/submit_block_response_holesky.json" + )); } // Unhappy path tests -fn test_missing_registration_field(field_name: &str) -> String { - let data = include_str!("../data/registration_holesky.json"); +fn test_missing_registration_field(version: SpecVersion, field_name: &str) -> String { + let data = match version { + SpecVersion::Deneb => include_str!("../data/deneb/registration_holesky.json"), + SpecVersion::Electra => include_str!("../data/electra/registration_holesky.json"), + }; let mut values: Value = serde_json::from_str(data).unwrap(); // Remove specified field from the first validator's message @@ -51,18 +68,23 @@ fn test_registration_missing_fields() { let fields = ["fee_recipient", "gas_limit", "timestamp", "pubkey"]; for field in fields { - let error = test_missing_registration_field(field); - assert!( - error.contains(&format!("missing field `{}`", field)), - "Expected error about missing {}, got: {}", - field, - error - ); + for version in [SpecVersion::Deneb, SpecVersion::Electra] { + let error = test_missing_registration_field(version, field); + assert!( + error.contains(&format!("missing field `{}`", field)), + "Expected error about missing {}, got: {}", + field, + error + ); + } } } -fn test_missing_signed_blinded_block_field(field_name: &str) -> String { - let data = include_str!("../data/signed_blinded_block_holesky.json"); +fn test_missing_signed_blinded_block_field(version: SpecVersion, field_name: &str) -> String { + let data = match version { + SpecVersion::Deneb => include_str!("../data/deneb/signed_blinded_block_holesky.json"), + SpecVersion::Electra => include_str!("../data/electra/signed_blinded_block_holesky.json"), + }; let mut values: Value = serde_json::from_str(data).unwrap(); // Remove specified field from the message @@ -73,9 +95,18 @@ fn test_missing_signed_blinded_block_field(field_name: &str) -> String { } // This should fail since the field is required - let result = serde_json::from_value::(values); - assert!(result.is_err()); - result.unwrap_err().to_string() + match version { + SpecVersion::Deneb => { + let result = serde_json::from_value::>(values); + assert!(result.is_err()); + result.unwrap_err().to_string() + } + SpecVersion::Electra => { + let result = serde_json::from_value::>(values); + assert!(result.is_err()); + result.unwrap_err().to_string() + } + } } #[test] @@ -83,18 +114,23 @@ fn test_signed_blinded_block_missing_fields() { let fields = ["slot", "proposer_index", "parent_root", "state_root", "body"]; for field in fields { - let error = test_missing_signed_blinded_block_field(field); - assert!( - error.contains(&format!("missing field `{}`", field)), - "Expected error about missing {}, got: {}", - field, - error - ); + for version in [SpecVersion::Deneb, SpecVersion::Electra] { + let error = test_missing_signed_blinded_block_field(version, field); + assert!( + error.contains(&format!("missing field `{}`", field)), + "Expected error about missing {}, got: {}", + field, + error + ); + } } } -fn test_missing_submit_block_response_field(field_name: &str) -> String { - let data = include_str!("../data/submit_block_response_holesky.json"); +fn test_missing_submit_block_response_field(version: SpecVersion, field_name: &str) -> String { + let data = match version { + SpecVersion::Deneb => include_str!("../data/deneb/submit_block_response_holesky.json"), + SpecVersion::Electra => include_str!("../data/electra/submit_block_response_holesky.json"), + }; let mut values: Value = serde_json::from_str(data).unwrap(); // Remove specified field @@ -103,9 +139,18 @@ fn test_missing_submit_block_response_field(field_name: &str) -> String { } // This should fail since the field is required - let result = serde_json::from_value::(values); - assert!(result.is_err()); - result.unwrap_err().to_string() + match version { + SpecVersion::Deneb => { + let result = serde_json::from_value::>(values); + assert!(result.is_err()); + result.unwrap_err().to_string() + } + SpecVersion::Electra => { + let result = serde_json::from_value::>(values); + assert!(result.is_err()); + result.unwrap_err().to_string() + } + } } #[test] @@ -113,12 +158,14 @@ fn test_submit_block_response_missing_fields() { let fields = ["version", "data"]; for field in fields { - let error = test_missing_submit_block_response_field(field); - assert!( - error.contains(&format!("missing field `{}`", field)), - "Expected error about missing {}, got: {}", - field, - error - ); + for version in [SpecVersion::Deneb, SpecVersion::Electra] { + let error = test_missing_submit_block_response_field(version, field); + assert!( + error.contains(&format!("missing field `{}`", field)), + "Expected error about missing {}, got: {}", + field, + error + ); + } } } diff --git a/tests/tests/pbs_get_header.rs b/tests/tests/pbs_get_header.rs index 898ea964..db70a991 100644 --- a/tests/tests/pbs_get_header.rs +++ b/tests/tests/pbs_get_header.rs @@ -2,7 +2,7 @@ use std::{sync::Arc, time::Duration}; use alloy::primitives::{B256, U256}; use cb_common::{ - pbs::GetHeaderResponse, + pbs::{DenebSpec, ElectraSpec, GetHeaderResponse}, signature::sign_builder_root, signer::{random_secret, BlsPublicKey}, types::Chain, @@ -20,7 +20,7 @@ use tracing::info; use tree_hash::TreeHash; #[tokio::test] -async fn test_get_header() -> Result<()> { +async fn test_get_header_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -32,12 +32,12 @@ async fn test_get_header() -> Result<()> { // Run a mock relay let mock_state = Arc::new(MockRelayState::new(chain, signer)); let mock_relay = generate_mock_relay(relay_port, *pubkey)?; - tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_port)); // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; @@ -47,7 +47,7 @@ async fn test_get_header() -> Result<()> { let res = mock_validator.do_get_header(None).await?; assert_eq!(res.status(), StatusCode::OK); - let res = serde_json::from_slice::(&res.bytes().await?)?; + let res = serde_json::from_slice::>(&res.bytes().await?)?; assert_eq!(mock_state.received_get_header(), 1); assert_eq!(res.data.message.header.block_hash.0[0], 1); @@ -63,7 +63,50 @@ async fn test_get_header() -> Result<()> { } #[tokio::test] -async fn test_get_header_returns_204_if_relay_down() -> Result<()> { +async fn test_get_header_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3250; + let relay_port = pbs_port + 1; + + // Run a mock relay + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + let mock_relay = generate_mock_relay(relay_port, *pubkey)?; + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_port)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get header"); + let res = mock_validator.do_get_header(None).await?; + assert_eq!(res.status(), StatusCode::OK); + + let res = serde_json::from_slice::>(&res.bytes().await?)?; + + assert_eq!(mock_state.received_get_header(), 1); + assert_eq!(res.data.message.header.block_hash.0[0], 1); + assert_eq!(res.data.message.header.parent_hash, B256::ZERO); + assert_eq!(res.data.message.value, U256::from(10)); + assert_eq!(res.data.message.pubkey, blst_pubkey_to_alloy(&mock_state.signer.sk_to_pk())); + assert_eq!(res.data.message.header.timestamp, timestamp_of_slot_start_sec(0, chain)); + assert_eq!( + res.data.signature, + sign_builder_root(chain, &mock_state.signer, res.data.message.tree_hash_root().0) + ); + Ok(()) +} + +#[tokio::test] +async fn test_get_header_returns_204_if_relay_down_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -82,7 +125,7 @@ async fn test_get_header_returns_204_if_relay_down() -> Result<()> { // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; @@ -97,7 +140,41 @@ async fn test_get_header_returns_204_if_relay_down() -> Result<()> { } #[tokio::test] -async fn test_get_header_returns_400_if_request_is_invalid() -> Result<()> { +async fn test_get_header_returns_204_if_relay_down_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3350; + let relay_port = pbs_port + 1; + + // Create a mock relay client + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + let mock_relay = generate_mock_relay(relay_port, *pubkey)?; + + // Don't start the relay + // tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get header"); + let res = mock_validator.do_get_header(None).await?; + + assert_eq!(res.status(), StatusCode::NO_CONTENT); // 204 error + assert_eq!(mock_state.received_get_header(), 0); // no header received + Ok(()) +} + +#[tokio::test] +async fn test_get_header_returns_400_if_request_is_invalid_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -109,12 +186,56 @@ async fn test_get_header_returns_400_if_request_is_invalid() -> Result<()> { // Run a mock relay let mock_state = Arc::new(MockRelayState::new(chain, signer)); let mock_relay = generate_mock_relay(relay_port, *pubkey)?; - tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_port)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + // Create an invalid URL by truncating the pubkey + let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, *pubkey).unwrap(); + bad_url.set_path(&bad_url.path().replace(&pubkey.to_string(), &pubkey.to_string()[..10])); + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get header with invalid pubkey URL"); + // Use the bad_url in the request instead of the default + let res = mock_validator.comm_boost.client.get(bad_url).send().await?; + assert_eq!(res.status(), StatusCode::BAD_REQUEST); + + // Attempt again by truncating the parent hash + let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, *pubkey).unwrap(); + bad_url + .set_path(&bad_url.path().replace(&B256::ZERO.to_string(), &B256::ZERO.to_string()[..10])); + let res = mock_validator.comm_boost.client.get(bad_url).send().await?; + assert_eq!(res.status(), StatusCode::BAD_REQUEST); + + assert_eq!(mock_state.received_get_header(), 0); // no header received + Ok(()) +} + +#[tokio::test] +async fn test_get_header_returns_400_if_request_is_invalid_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3450; + let relay_port = pbs_port + 1; + + // Run a mock relay + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + let mock_relay = generate_mock_relay(relay_port, *pubkey)?; + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_port)); // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), vec![mock_relay.clone()]); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; diff --git a/tests/tests/pbs_get_status.rs b/tests/tests/pbs_get_status.rs index 2dd06fd9..3acbe21c 100644 --- a/tests/tests/pbs_get_status.rs +++ b/tests/tests/pbs_get_status.rs @@ -1,6 +1,7 @@ use std::{sync::Arc, time::Duration}; use cb_common::{ + pbs::{DenebSpec, ElectraSpec}, signer::{random_secret, BlsPublicKey}, types::Chain, utils::blst_pubkey_to_alloy, @@ -16,7 +17,7 @@ use reqwest::StatusCode; use tracing::info; #[tokio::test] -async fn test_get_status() -> Result<()> { +async fn test_get_status_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -31,12 +32,12 @@ async fn test_get_status() -> Result<()> { generate_mock_relay(relay_1_port, *pubkey)?, ]; let mock_state = Arc::new(MockRelayState::new(chain, signer)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_0_port)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_1_port)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_0_port)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_1_port)); let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays.clone()); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; @@ -52,7 +53,43 @@ async fn test_get_status() -> Result<()> { } #[tokio::test] -async fn test_get_status_returns_502_if_relay_down() -> Result<()> { +async fn test_get_status_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3550; + let relay_0_port = pbs_port + 1; + let relay_1_port = pbs_port + 2; + + let relays = vec![ + generate_mock_relay(relay_0_port, *pubkey)?, + generate_mock_relay(relay_1_port, *pubkey)?, + ]; + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_0_port)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), relay_1_port)); + + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays.clone()); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get status"); + let res = mock_validator.do_get_status().await.expect("failed to get status"); + assert_eq!(res.status(), StatusCode::OK); + + // Expect two statuses since two relays in config + assert_eq!(mock_state.received_get_status(), 2); + Ok(()) +} + +#[tokio::test] +async fn test_get_status_returns_502_if_relay_down_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -69,7 +106,40 @@ async fn test_get_status_returns_502_if_relay_down() -> Result<()> { let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays.clone()); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get status"); + let res = mock_validator.do_get_status().await.expect("failed to get status"); + assert_eq!(res.status(), StatusCode::BAD_GATEWAY); // 502 error + + // Expect no statuses since relay is down + assert_eq!(mock_state.received_get_status(), 0); + Ok(()) +} + +#[tokio::test] +async fn test_get_status_returns_502_if_relay_down_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3650; + let relay_port = pbs_port + 1; + + let relays = vec![generate_mock_relay(relay_port, *pubkey)?]; + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + + // Don't start the relay + // tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port)); + + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays.clone()); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; diff --git a/tests/tests/pbs_mux.rs b/tests/tests/pbs_mux.rs index 111fe27e..f067ed1c 100644 --- a/tests/tests/pbs_mux.rs +++ b/tests/tests/pbs_mux.rs @@ -2,6 +2,7 @@ use std::{collections::HashMap, sync::Arc, time::Duration}; use cb_common::{ config::RuntimeMuxConfig, + pbs::{DenebSpec, ElectraSpec}, signer::{random_secret, BlsPublicKey}, types::Chain, utils::blst_pubkey_to_alloy, @@ -17,7 +18,7 @@ use reqwest::StatusCode; use tracing::info; #[tokio::test] -async fn test_mux() -> Result<()> { +async fn test_mux_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -31,9 +32,9 @@ async fn test_mux() -> Result<()> { // Run 3 mock relays let mock_state = Arc::new(MockRelayState::new(chain, signer)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 2)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 3)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 2)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 3)); // Register all relays in PBS config let relays = vec![default_relay.clone()]; @@ -53,7 +54,7 @@ async fn test_mux() -> Result<()> { // Run PBS service let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; @@ -84,7 +85,81 @@ async fn test_mux() -> Result<()> { // Submit block requests should go to all relays info!("Sending submit block"); - assert_eq!(mock_validator.do_submit_block(None).await?.status(), StatusCode::OK); + assert_eq!(mock_validator.do_submit_block::(None).await?.status(), StatusCode::OK); + assert_eq!(mock_state.received_submit_block(), 3); // default + 2 mux relays were used + + Ok(()) +} + +#[tokio::test] +async fn test_mux_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3750; + + let mux_relay_1 = generate_mock_relay(pbs_port + 1, *pubkey)?; + let mux_relay_2 = generate_mock_relay(pbs_port + 2, *pubkey)?; + let default_relay = generate_mock_relay(pbs_port + 3, *pubkey)?; + + // Run 3 mock relays + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 2)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 3)); + + // Register all relays in PBS config + let relays = vec![default_relay.clone()]; + let mut config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); + config.all_relays = vec![mux_relay_1.clone(), mux_relay_2.clone(), default_relay.clone()]; + + // Configure mux for two relays + let mux = RuntimeMuxConfig { + id: String::from("test"), + config: config.pbs_config.clone(), + relays: vec![mux_relay_1, mux_relay_2], + }; + + // Bind mux to a specific validator key + let validator_pubkey = blst_pubkey_to_alloy(&random_secret().sk_to_pk()); + config.muxes = Some(HashMap::from([(validator_pubkey, mux)])); + + // Run PBS service + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + // Send default request without specifying a validator key + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending get header with default"); + assert_eq!(mock_validator.do_get_header(None).await?.status(), StatusCode::OK); + assert_eq!(mock_state.received_get_header(), 1); // only default relay was used + + // Send request specifying a validator key to use mux + info!("Sending get header with mux"); + assert_eq!( + mock_validator.do_get_header(Some(validator_pubkey)).await?.status(), + StatusCode::OK + ); + assert_eq!(mock_state.received_get_header(), 3); // two mux relays were used + + // Status requests should go to all relays + info!("Sending get status"); + assert_eq!(mock_validator.do_get_status().await?.status(), StatusCode::OK); + assert_eq!(mock_state.received_get_status(), 3); // default + 2 mux relays were used + + // Register requests should go to all relays + info!("Sending register validator"); + assert_eq!(mock_validator.do_register_validator().await?.status(), StatusCode::OK); + assert_eq!(mock_state.received_register_validator(), 3); // default + 2 mux relays were used + + // Submit block requests should go to all relays + info!("Sending submit block"); + assert_eq!(mock_validator.do_submit_block::(None).await?.status(), StatusCode::OK); assert_eq!(mock_state.received_submit_block(), 3); // default + 2 mux relays were used Ok(()) diff --git a/tests/tests/pbs_post_blinded_blocks.rs b/tests/tests/pbs_post_blinded_blocks.rs index 64255195..bfbda471 100644 --- a/tests/tests/pbs_post_blinded_blocks.rs +++ b/tests/tests/pbs_post_blinded_blocks.rs @@ -1,7 +1,7 @@ use std::{sync::Arc, time::Duration}; use cb_common::{ - pbs::{SignedBlindedBeaconBlock, SubmitBlindedBlockResponse}, + pbs::{DenebSpec, ElectraSpec, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse}, signer::{random_secret, BlsPublicKey}, types::Chain, utils::blst_pubkey_to_alloy, @@ -17,7 +17,7 @@ use reqwest::StatusCode; use tracing::info; #[tokio::test] -async fn test_submit_block() -> Result<()> { +async fn test_submit_block_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -28,30 +28,76 @@ async fn test_submit_block() -> Result<()> { // Run a mock relay let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; let mock_state = Arc::new(MockRelayState::new(chain, signer)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; let mock_validator = MockValidator::new(pbs_port)?; info!("Sending submit block"); - let res = mock_validator.do_submit_block(Some(SignedBlindedBeaconBlock::default())).await?; + let res = mock_validator + .do_submit_block::(Some(SignedBlindedBeaconBlock::default())) + .await?; assert_eq!(res.status(), StatusCode::OK); assert_eq!(mock_state.received_submit_block(), 1); - let response_body = serde_json::from_slice::(&res.bytes().await?)?; - assert_eq!(response_body.block_hash(), SubmitBlindedBlockResponse::default().block_hash()); + let response_body = + serde_json::from_slice::>(&res.bytes().await?)?; + assert_eq!( + response_body.block_hash(), + SubmitBlindedBlockResponse::::default().block_hash() + ); Ok(()) } #[tokio::test] -async fn test_submit_block_too_large() -> Result<()> { +async fn test_submit_block_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3850; + + // Run a mock relay + let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending submit block"); + let res = mock_validator + .do_submit_block::(Some(SignedBlindedBeaconBlock::default())) + .await?; + + assert_eq!(res.status(), StatusCode::OK); + assert_eq!(mock_state.received_submit_block(), 1); + + let response_body = + serde_json::from_slice::>(&res.bytes().await?)?; + assert_eq!( + response_body.block_hash(), + SubmitBlindedBlockResponse::::default().block_hash() + ); + Ok(()) +} + +#[tokio::test] +async fn test_submit_block_too_large_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -61,18 +107,48 @@ async fn test_submit_block_too_large() -> Result<()> { let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; let mock_state = Arc::new(MockRelayState::new(chain, signer).with_large_body()); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending submit block"); + let res = mock_validator.do_submit_block::(None).await; + + // response size exceeds max size: max: 20971520 + assert_eq!(res.unwrap().status(), StatusCode::BAD_GATEWAY); + assert_eq!(mock_state.received_submit_block(), 1); + Ok(()) +} + +#[tokio::test] +async fn test_submit_block_too_large_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 3950; + + let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; + let mock_state = Arc::new(MockRelayState::new(chain, signer).with_large_body()); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; let mock_validator = MockValidator::new(pbs_port)?; info!("Sending submit block"); - let res = mock_validator.do_submit_block(None).await; + let res = mock_validator.do_submit_block::(None).await; // response size exceeds max size: max: 20971520 assert_eq!(res.unwrap().status(), StatusCode::BAD_GATEWAY); diff --git a/tests/tests/pbs_post_validators.rs b/tests/tests/pbs_post_validators.rs index 6db80d3d..b193b72e 100644 --- a/tests/tests/pbs_post_validators.rs +++ b/tests/tests/pbs_post_validators.rs @@ -2,6 +2,7 @@ use std::{sync::Arc, time::Duration}; use alloy::rpc::types::beacon::relay::ValidatorRegistration; use cb_common::{ + pbs::{DenebSpec, ElectraSpec}, signer::{random_secret, BlsPublicKey}, types::Chain, utils::blst_pubkey_to_alloy, @@ -17,7 +18,7 @@ use reqwest::StatusCode; use tracing::info; #[tokio::test] -async fn test_register_validators() -> Result<()> { +async fn test_register_validators_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -28,12 +29,12 @@ async fn test_register_validators() -> Result<()> { // Run a mock relay let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; let mock_state = Arc::new(MockRelayState::new(chain, signer)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await; @@ -63,7 +64,53 @@ async fn test_register_validators() -> Result<()> { } #[tokio::test] -async fn test_register_validators_returns_422_if_request_is_malformed() -> Result<()> { +async fn test_register_validators_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 4050; + + // Run a mock relay + let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + info!("Sending register validator"); + + let registration: ValidatorRegistration = serde_json::from_str( + r#"{ + "message": { + "fee_recipient": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "gas_limit": "100000", + "timestamp": "1000000", + "pubkey": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "signature": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + }"#, + )?; + + let registrations = vec![registration]; + let res = mock_validator.do_register_custom_validators(registrations).await?; + + assert_eq!(mock_state.received_register_validator(), 1); + assert_eq!(res.status(), StatusCode::OK); + + Ok(()) +} + +#[tokio::test] +async fn test_register_validators_returns_422_if_request_is_malformed_deneb() -> Result<()> { setup_test_env(); let signer = random_secret(); let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); @@ -74,12 +121,152 @@ async fn test_register_validators_returns_422_if_request_is_malformed() -> Resul // Run a mock relay let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; let mock_state = Arc::new(MockRelayState::new(chain, signer)); - tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); + + // Run the PBS service + let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); + let state = PbsState::new(config); + tokio::spawn(PbsService::run::<(), DenebSpec, DefaultBuilderApi>(state)); + + // leave some time to start servers + tokio::time::sleep(Duration::from_millis(100)).await; + + let mock_validator = MockValidator::new(pbs_port)?; + let url = mock_validator.comm_boost.register_validator_url().unwrap(); + info!("Sending register validator"); + + // Bad fee recipient + let bad_json = r#"[{ + "message": { + "fee_recipient": "0xaa", + "gas_limit": "100000", + "timestamp": "1000000", + "pubkey": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "signature": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + }]"#; + + let res = mock_validator + .comm_boost + .client + .post(url.clone()) + .header("Content-Type", "application/json") + .body(bad_json) + .send() + .await?; + + assert_eq!(res.status(), StatusCode::UNPROCESSABLE_ENTITY); + + // Bad pubkey + let bad_json = r#"[{ + "message": { + "fee_recipient": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "gas_limit": "100000", + "timestamp": "1000000", + "pubkey": "0xbbb" + }, + "signature": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + }]"#; + + let res = mock_validator + .comm_boost + .client + .post(url.clone()) + .header("Content-Type", "application/json") + .body(bad_json) + .send() + .await?; + + assert_eq!(res.status(), StatusCode::UNPROCESSABLE_ENTITY); + + // Bad signature + let bad_json = r#"[{ + "message": { + "fee_recipient": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "gas_limit": "100000", + "timestamp": "1000000", + "pubkey": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "signature": "0xcccc" + }]"#; + + let res = mock_validator + .comm_boost + .client + .post(url.clone()) + .header("Content-Type", "application/json") + .body(bad_json) + .send() + .await?; + + assert_eq!(res.status(), StatusCode::UNPROCESSABLE_ENTITY); + + // gas limit too high + let bad_json = r#"[{ + "message": { + "fee_recipient": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "gas_limit": "10000000000000000000000000000000000000000000000000000000", + "timestamp": "1000000", + "pubkey": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + }, + "signature": "0xcccc" + }]"#; + + let res = mock_validator + .comm_boost + .client + .post(url.clone()) + .header("Content-Type", "application/json") + .body(bad_json) + .send() + .await?; + + assert_eq!(res.status(), StatusCode::UNPROCESSABLE_ENTITY); + + // timestamp too high + let bad_json = r#"[{ + "message": { + "fee_recipient": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "gas_limit": "1000000", + "timestamp": "10000000000000000000000000000000000000000000000000000000", + "pubkey": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" + }, + "signature": "0xcccc" + }]"#; + + let res = mock_validator + .comm_boost + .client + .post(url.clone()) + .header("Content-Type", "application/json") + .body(bad_json) + .send() + .await?; + + assert_eq!(res.status(), StatusCode::UNPROCESSABLE_ENTITY); + + assert_eq!(mock_state.received_register_validator(), 0); + Ok(()) +} + +#[tokio::test] +async fn test_register_validators_returns_422_if_request_is_malformed_electra() -> Result<()> { + setup_test_env(); + let signer = random_secret(); + let pubkey: BlsPublicKey = blst_pubkey_to_alloy(&signer.sk_to_pk()).into(); + + let chain = Chain::Holesky; + let pbs_port = 4150; + + // Run a mock relay + let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?]; + let mock_state = Arc::new(MockRelayState::new(chain, signer)); + tokio::spawn(start_mock_relay_service::(mock_state.clone(), pbs_port + 1)); // Run the PBS service let config = to_pbs_config(chain, get_pbs_static_config(pbs_port), relays); let state = PbsState::new(config); - tokio::spawn(PbsService::run::<(), DefaultBuilderApi>(state)); + tokio::spawn(PbsService::run::<(), ElectraSpec, DefaultBuilderApi>(state)); // leave some time to start servers tokio::time::sleep(Duration::from_millis(100)).await;