From d10e8db0e8b7c0ba520777deb48f44d1f6a8aca2 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 2 Oct 2023 17:31:14 +0300 Subject: [PATCH] [feature] #3929: Lazy queries inside wasm Signed-off-by: Daniil Polyakov --- Cargo.lock | 4 +- cli/Cargo.toml | 1 - cli/src/lib.rs | 29 +- cli/src/torii/mod.rs | 126 +++----- cli/src/torii/routing.rs | 192 ++++------- cli/src/torii/utils.rs | 1 + client/src/client.rs | 67 ++-- .../src/lib.rs | 9 +- .../executor_with_custom_token/src/lib.rs | 10 + config/iroha_test_config.json | 6 +- config/src/iroha.rs | 7 +- config/src/lib.rs | 1 + config/src/live_query_store.rs | 44 +++ config/src/torii.rs | 9 +- configs/peer/config.json | 6 +- configs/peer/executor.wasm | Bin 504366 -> 498861 bytes core/Cargo.toml | 1 + core/benches/blocks/common.rs | 4 +- core/benches/kura.rs | 4 +- core/benches/validation.rs | 6 +- core/src/block.rs | 43 ++- core/src/lib.rs | 1 + {cli/src/torii => core/src/query}/cursor.rs | 23 +- core/src/query/mod.rs | 5 + .../torii => core/src/query}/pagination.rs | 2 + core/src/query/store.rs | 279 ++++++++++++++++ core/src/queue.rs | 55 +++- core/src/smartcontracts/isi/mod.rs | 18 +- core/src/smartcontracts/isi/query.rs | 36 ++- core/src/smartcontracts/wasm.rs | 196 +++++++---- core/src/snapshot.rs | 3 + core/src/sumeragi/main_loop.rs | 24 +- core/src/wsv.rs | 44 ++- data_model/src/lib.rs | 70 ++-- data_model/src/query/cursor.rs | 16 + data_model/src/query/mod.rs | 64 +++- data_model/src/query/pagination.rs | 9 +- data_model/src/query/sorting.rs | 3 +- data_model/src/smart_contract.rs | 5 + docs/source/references/config.md | 41 ++- docs/source/references/schema.json | 4 + schema/gen/src/lib.rs | 5 +- smart_contract/Cargo.toml | 2 + smart_contract/derive/src/entrypoint.rs | 4 +- .../executor/derive/src/entrypoint.rs | 2 +- smart_contract/executor/derive/src/token.rs | 14 +- smart_contract/executor/src/default.rs | 2 +- smart_contract/executor/src/permission.rs | 11 +- smart_contract/src/lib.rs | 305 ++++++++++++++++-- .../trigger/derive/src/entrypoint.rs | 2 +- telemetry/derive/tests/ui_fail/args_no_wsv.rs | 4 +- .../derive/tests/ui_fail/args_no_wsv.stderr | 4 +- telemetry/derive/tests/ui_fail/bare_spec.rs | 3 - .../derive/tests/ui_fail/bare_spec.stderr | 4 +- .../derive/tests/ui_fail/doubled_plus.rs | 4 +- .../derive/tests/ui_fail/doubled_plus.stderr | 4 +- telemetry/derive/tests/ui_fail/no_args.rs | 3 - telemetry/derive/tests/ui_fail/no_args.stderr | 4 +- .../tests/ui_fail/non_snake_case_name.rs | 2 - .../tests/ui_fail/non_snake_case_name.stderr | 4 +- telemetry/derive/tests/ui_fail/not_execute.rs | 5 +- .../derive/tests/ui_fail/not_execute.stderr | 4 +- .../derive/tests/ui_fail/not_return_result.rs | 5 +- .../tests/ui_fail/not_return_result.stderr | 4 +- .../derive/tests/ui_fail/return_nothing.rs | 5 +- .../tests/ui_fail/return_nothing.stderr | 4 +- .../derive/tests/ui_fail/trailing_plus.rs | 5 +- .../derive/tests/ui_fail/trailing_plus.stderr | 4 +- tools/parity_scale_decoder/src/main.rs | 3 +- 69 files changed, 1280 insertions(+), 610 deletions(-) create mode 100644 config/src/live_query_store.rs rename {cli/src/torii => core/src/query}/cursor.rs (71%) create mode 100644 core/src/query/mod.rs rename {cli/src/torii => core/src/query}/pagination.rs (97%) create mode 100644 core/src/query/store.rs diff --git a/Cargo.lock b/Cargo.lock index 0c25dea84be..817e6d5d1db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2945,7 +2945,6 @@ dependencies = [ "thread-local-panic-hook", "tokio", "tracing", - "uuid", "vergen", "warp", ] @@ -3107,6 +3106,7 @@ dependencies = [ "tempfile", "thiserror", "tokio", + "uuid", "wasmtime", ] @@ -3445,7 +3445,9 @@ dependencies = [ name = "iroha_smart_contract" version = "2.0.0-pre-rc.19" dependencies = [ + "derive_more", "iroha_data_model", + "iroha_macro", "iroha_smart_contract_derive", "iroha_smart_contract_utils", "parity-scale-codec", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index a1b3f06cca9..b75abf0af1c 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -78,7 +78,6 @@ tempfile = { workspace = true } dashmap = { workspace = true } thread-local-panic-hook = { version = "0.1.0", optional = true } -uuid = { version = "1.4.1", features = ["v4"] } [dev-dependencies] serial_test = "0.8.0" diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 44efca1113f..e2bdb206436 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -25,6 +25,7 @@ use iroha_core::{ handler::ThreadHandler, kura::Kura, prelude::{World, WorldStateView}, + query::store::LiveQueryStore, queue::Queue, smartcontracts::isi::Registrable as _, snapshot::{try_read_snapshot, SnapshotMaker, SnapshotMakerHandle}, @@ -97,12 +98,13 @@ pub struct Iroha { pub kura: Arc, /// Torii web server pub torii: Option, - /// Snapshot service, + /// Snapshot service pub snapshot_maker: SnapshotMakerHandle, /// Thread handlers thread_handlers: Vec, - /// A boolean value indicating whether or not the peers will recieve data from the network. Used in - /// sumeragi testing. + + /// A boolean value indicating whether or not the peers will receive data from the network. + /// Used in sumeragi testing. #[cfg(debug_assertions)] pub freeze_status: Arc, } @@ -246,13 +248,25 @@ impl Iroha { std::path::Path::new(&config.kura.block_store_path), config.kura.debug_output_new_blocks, )?; + let live_query_store_handle = + LiveQueryStore::from_configuration(config.live_query_store).start(); - let notify_shutdown = Arc::new(Notify::new()); let block_count = kura.init()?; - let wsv = try_read_snapshot(&config.snapshot.dir_path, &kura, block_count).map_or_else( + let wsv = try_read_snapshot( + &config.snapshot.dir_path, + &kura, + live_query_store_handle.clone(), + block_count, + ) + .map_or_else( |error| { iroha_logger::warn!(%error, "Failed to load wsv from snapshot, creating empty wsv"); - WorldStateView::from_configuration(config.wsv, world, Arc::clone(&kura)) + WorldStateView::from_configuration( + config.wsv, + world, + Arc::clone(&kura), + live_query_store_handle.clone(), + ) }, |wsv| { iroha_logger::info!( @@ -303,6 +317,8 @@ impl Iroha { #[cfg(debug_assertions)] let freeze_status = Arc::new(AtomicBool::new(false)); + let notify_shutdown = Arc::new(Notify::new()); + NetworkRelay { sumeragi: sumeragi.clone(), block_sync, @@ -323,6 +339,7 @@ impl Iroha { events_sender, Arc::clone(¬ify_shutdown), sumeragi.clone(), + live_query_store_handle, Arc::clone(&kura), ); diff --git a/cli/src/torii/mod.rs b/cli/src/torii/mod.rs index a478fe4f554..d27dd0c32ab 100644 --- a/cli/src/torii/mod.rs +++ b/cli/src/torii/mod.rs @@ -7,21 +7,18 @@ use std::{ fmt::{Debug, Write as _}, net::ToSocketAddrs, sync::Arc, - time::{Duration, Instant}, }; -use dashmap::DashMap; use futures::{stream::FuturesUnordered, StreamExt}; use iroha_core::{ kura::Kura, prelude::*, + query::store::LiveQueryStoreHandle, queue::{self, Queue}, sumeragi::SumeragiHandle, EventsSender, }; -use iroha_data_model::Value; -use parity_scale_codec::Encode; -use tokio::{sync::Notify, time::sleep}; +use tokio::sync::Notify; use utils::*; use warp::{ http::StatusCode, @@ -30,56 +27,10 @@ use warp::{ Filter as _, Reply, }; -use self::cursor::Batched; - #[macro_use] pub(crate) mod utils; -mod cursor; -mod pagination; mod routing; -type LiveQuery = Batched>; - -#[derive(Default)] -struct LiveQueryStore { - queries: DashMap<(String, Vec), (LiveQuery, Instant)>, -} - -impl LiveQueryStore { - fn insert(&self, query_id: String, request: T, live_query: LiveQuery) { - self.queries - .insert((query_id, request.encode()), (live_query, Instant::now())); - } - - fn remove(&self, query_id: &str, request: &T) -> Option { - self.queries - .remove(&(query_id.to_string(), request.encode())) - .map(|(_, (output, _))| output) - } - - fn expired_query_cleanup( - self: Arc, - idle_time: Duration, - notify_shutdown: Arc, - ) -> tokio::task::JoinHandle<()> { - tokio::task::spawn(async move { - loop { - tokio::select! { - _ = sleep(idle_time) => { - self.queries - .retain(|_, (_, last_access_time)| last_access_time.elapsed() <= idle_time); - }, - _ = notify_shutdown.notified() => { - iroha_logger::info!("Query cleanup service is being shut down."); - break; - } - else => break, - } - } - }) - } -} - /// Main network handler and the only entrypoint of the Iroha. pub struct Torii { iroha_cfg: super::Configuration, @@ -87,14 +38,14 @@ pub struct Torii { events: EventsSender, notify_shutdown: Arc, sumeragi: SumeragiHandle, - query_store: Arc, + query_service: LiveQueryStoreHandle, kura: Arc, } /// Torii errors. #[derive(Debug, thiserror::Error, displaydoc::Display)] pub enum Error { - /// Failed to execute or validate query + /// Failed to process query Query(#[from] iroha_data_model::ValidationFail), /// Failed to accept transaction AcceptTransaction(#[from] iroha_core::tx::AcceptTransactionFail), @@ -107,43 +58,14 @@ pub enum Error { #[cfg(feature = "telemetry")] /// Error while getting Prometheus metrics Prometheus(#[source] eyre::Report), - /// Error while resuming cursor - UnknownCursor, -} - -/// Status code for query error response. -fn query_status_code(validation_error: &iroha_data_model::ValidationFail) -> StatusCode { - use iroha_data_model::{ - isi::error::InstructionExecutionError, query::error::QueryExecutionFail::*, - ValidationFail::*, - }; - - match validation_error { - NotPermitted(_) => StatusCode::FORBIDDEN, - QueryFailed(query_error) - | InstructionFailed(InstructionExecutionError::Query(query_error)) => match query_error { - Evaluate(_) | Conversion(_) => StatusCode::BAD_REQUEST, - Signature(_) => StatusCode::UNAUTHORIZED, - Find(_) => StatusCode::NOT_FOUND, - }, - TooComplex => StatusCode::UNPROCESSABLE_ENTITY, - InternalError(_) => StatusCode::INTERNAL_SERVER_ERROR, - InstructionFailed(error) => { - iroha_logger::error!( - ?error, - "Query validation failed with unexpected error. This means a bug inside Runtime Executor", - ); - StatusCode::INTERNAL_SERVER_ERROR - } - } } impl Reply for Error { fn into_response(self) -> Response { - use Error::*; match self { - Query(err) => { - reply::with_status(utils::Scale(&err), query_status_code(&err)).into_response() + Self::Query(err) => { + reply::with_status(utils::Scale(&err), Self::query_status_code(&err)) + .into_response() } _ => reply::with_status(Self::to_string(&self), self.status_code()).into_response(), } @@ -153,11 +75,10 @@ impl Reply for Error { impl Error { fn status_code(&self) -> StatusCode { use Error::*; + match self { - Query(e) => query_status_code(e), - AcceptTransaction(_) | ConfigurationReload(_) | UnknownCursor => { - StatusCode::BAD_REQUEST - } + Query(e) => Self::query_status_code(e), + AcceptTransaction(_) | ConfigurationReload(_) => StatusCode::BAD_REQUEST, Config(_) => StatusCode::NOT_FOUND, PushIntoQueue(err) => match **err { queue::Error::Full => StatusCode::INTERNAL_SERVER_ERROR, @@ -169,6 +90,33 @@ impl Error { } } + fn query_status_code(validation_error: &iroha_data_model::ValidationFail) -> StatusCode { + use iroha_data_model::{ + isi::error::InstructionExecutionError, query::error::QueryExecutionFail::*, + ValidationFail::*, + }; + + match validation_error { + NotPermitted(_) => StatusCode::FORBIDDEN, + QueryFailed(query_error) + | InstructionFailed(InstructionExecutionError::Query(query_error)) => match query_error + { + Evaluate(_) | Conversion(_) | UnknownCursor => StatusCode::BAD_REQUEST, + Signature(_) => StatusCode::UNAUTHORIZED, + Find(_) => StatusCode::NOT_FOUND, + }, + TooComplex => StatusCode::UNPROCESSABLE_ENTITY, + InternalError(_) => StatusCode::INTERNAL_SERVER_ERROR, + InstructionFailed(error) => { + iroha_logger::error!( + ?error, + "Query validation failed with unexpected error. This means a bug inside Runtime Executor", + ); + StatusCode::INTERNAL_SERVER_ERROR + } + } + } + fn to_string(err: &dyn std::error::Error) -> String { let mut s = "Error:\n".to_owned(); let mut idx = 0_i32; diff --git a/cli/src/torii/routing.rs b/cli/src/torii/routing.rs index b61cd81cd78..7263cbd9a1d 100644 --- a/cli/src/torii/routing.rs +++ b/cli/src/torii/routing.rs @@ -5,12 +5,8 @@ // FIXME: This can't be fixed, because one trait in `warp` is private. #![allow(opaque_hidden_inferred_bound)] -use std::{ - cmp::Ordering, - num::{NonZeroU64, NonZeroUsize}, -}; +use std::num::NonZeroUsize; -use cursor::Batch; use eyre::WrapErr; use futures::TryStreamExt; use iroha_config::{ @@ -20,7 +16,8 @@ use iroha_config::{ GetConfiguration, PostConfiguration, }; use iroha_core::{ - smartcontracts::{isi::query::ValidQueryRequest, query::LazyValue}, + query::{pagination::Paginate, store::LiveQueryStoreHandle}, + smartcontracts::query::ValidQueryRequest, sumeragi::SumeragiHandle, }; use iroha_data_model::{ @@ -28,18 +25,38 @@ use iroha_data_model::{ stream::{BlockMessage, BlockSubscriptionRequest}, SignedBlock, }, - http::{BatchedResponse, BatchedResponseV1}, prelude::*, - query::{ForwardCursor, Pagination, Sorting}, + query::{cursor::ForwardCursor, http, sorting::Sorting, Pagination, QueryWithParameters}, + BatchedResponse, }; #[cfg(feature = "telemetry")] use iroha_telemetry::metrics::Status; -use pagination::Paginate; use tokio::task; use super::*; use crate::stream::{Sink, Stream}; +/// Filter for warp which extracts [`http::ClientQueryRequest`] +fn client_query_request( +) -> impl warp::Filter + Copy { + body::versioned::() + .and(sorting()) + .and(paginate()) + .and_then(|signed_query, sorting, pagination| async move { + Result::<_, std::convert::Infallible>::Ok(http::ClientQueryRequest::Query( + QueryWithParameters { + query: signed_query, + sorting, + pagination, + }, + )) + }) + .or(cursor().and_then(|cursor| async move { + Result::<_, std::convert::Infallible>::Ok(http::ClientQueryRequest::Cursor(cursor)) + })) + .unify() +} + /// Filter for warp which extracts sorting fn sorting() -> impl warp::Filter + Copy { warp::query() @@ -81,122 +98,33 @@ async fn handle_instructions( #[iroha_futures::telemetry_future] async fn handle_queries( + live_query_store: LiveQueryStoreHandle, sumeragi: SumeragiHandle, - query_store: Arc, fetch_size: NonZeroUsize, - request: SignedQuery, - sorting: Sorting, - pagination: Pagination, - - cursor: ForwardCursor, -) -> Result>> { - let valid_request = sumeragi.apply_wsv(|wsv| ValidQueryRequest::validate(request, wsv))?; - let request_id = (&valid_request, &sorting, &pagination); - - if let Some(query_id) = cursor.query_id { - let live_query = query_store - .remove(&query_id, &request_id) - .ok_or(Error::UnknownCursor)?; - - return construct_query_response( - request_id, - &query_store, - query_id, - cursor.cursor.map(NonZeroU64::get), - live_query, - ); - } - - sumeragi.apply_wsv(|wsv| { - let res = valid_request.execute(wsv).map_err(ValidationFail::from)?; - - match res { - LazyValue::Value(batch) => { - let cursor = ForwardCursor::default(); - let result = BatchedResponseV1 { batch, cursor }; - Ok(Scale(result.into())) - } - LazyValue::Iter(iter) => { - let live_query = apply_sorting_and_pagination(iter, &sorting, pagination); - let query_id = uuid::Uuid::new_v4().to_string(); - - let curr_cursor = Some(0); - let live_query = live_query.batched(fetch_size); - construct_query_response( - request_id, - &query_store, - query_id, - curr_cursor, - live_query, - ) - } - } - }) -} - -fn construct_query_response( - request_id: (&ValidQueryRequest, &Sorting, &Pagination), - query_store: &LiveQueryStore, - query_id: String, - curr_cursor: Option, - mut live_query: Batched>, + query_request: http::ClientQueryRequest, ) -> Result>> { - let (batch, next_cursor) = live_query.next_batch(curr_cursor)?; - - if !live_query.is_depleted() { - query_store.insert(query_id.clone(), request_id, live_query); - } - - let query_response = BatchedResponseV1 { - batch: Value::Vec(batch), - cursor: ForwardCursor { - query_id: Some(query_id), - cursor: next_cursor, - }, - }; - - Ok(Scale(query_response.into())) -} - -fn apply_sorting_and_pagination( - iter: impl Iterator, - sorting: &Sorting, - pagination: Pagination, -) -> Vec { - if let Some(key) = &sorting.sort_by_metadata_key { - let mut pairs: Vec<(Option, Value)> = iter - .map(|value| { - let key = match &value { - Value::Identifiable(IdentifiableBox::Asset(asset)) => match asset.value() { - AssetValue::Store(store) => store.get(key).cloned(), - _ => None, - }, - Value::Identifiable(v) => TryInto::<&dyn HasMetadata>::try_into(v) - .ok() - .and_then(|has_metadata| has_metadata.metadata().get(key)) - .cloned(), - _ => None, - }; - (key, value) - }) - .collect(); - pairs.sort_by( - |(left_key, _), (right_key, _)| match (left_key, right_key) { - (Some(l), Some(r)) => l.cmp(r), - (Some(_), None) => Ordering::Less, - (None, Some(_)) => Ordering::Greater, - (None, None) => Ordering::Equal, - }, - ); - pairs - .into_iter() - .map(|(_, val)| val) - .paginate(pagination) - .collect() - } else { - iter.paginate(pagination).collect() - } + let handle = tokio::task::spawn_blocking(move || match query_request { + http::ClientQueryRequest::Query(QueryWithParameters { + query: signed_query, + sorting, + pagination, + }) => sumeragi.apply_wsv(|wsv| { + let valid_query = ValidQueryRequest::validate(signed_query, wsv)?; + let query_output = valid_query.execute(wsv)?; + live_query_store + .handle_query_output(query_output, fetch_size, &sorting, pagination) + .map_err(ValidationFail::from) + }), + http::ClientQueryRequest::Cursor(cursor) => live_query_store + .handle_query_cursor(cursor) + .map_err(ValidationFail::from), + }); + handle + .await + .expect("Failed to join query handling task") + .map(Scale) + .map_err(Into::into) } #[derive(serde::Serialize)] @@ -454,7 +382,7 @@ async fn handle_status_precise(sumeragi: SumeragiHandle, segment: String) -> Res } impl Torii { - /// Construct `Torii` from `ToriiConfiguration`. + /// Construct `Torii`. #[allow(clippy::too_many_arguments)] pub fn from_configuration( iroha_cfg: Configuration, @@ -462,6 +390,7 @@ impl Torii { events: EventsSender, notify_shutdown: Arc, sumeragi: SumeragiHandle, + query_service: LiveQueryStoreHandle, kura: Arc, ) -> Self { Self { @@ -470,7 +399,7 @@ impl Torii { queue, notify_shutdown, sumeragi, - query_store: Arc::default(), + query_service, kura, } } @@ -540,19 +469,16 @@ impl Torii { )) .and(body::versioned()), ) - .or(endpoint7( + .or(endpoint4( handle_queries, warp::path(uri::QUERY) .and(add_state!( + self.query_service, self.sumeragi, - self.query_store, NonZeroUsize::try_from(self.iroha_cfg.torii.fetch_size) - .expect("u64 should always fit into usize"), + .expect("u64 should always fit into usize") )) - .and(body::versioned()) - .and(sorting()) - .and(paginate()) - .and(cursor()), + .and(client_query_request()), )) .or(endpoint2( handle_post_configuration, @@ -648,16 +574,10 @@ impl Torii { /// Can fail due to listening to network or if http server fails #[iroha_futures::telemetry_future] pub(crate) async fn start(self) -> eyre::Result<()> { - let query_idle_time = Duration::from_millis(self.iroha_cfg.torii.query_idle_time_ms.get()); - let torii = Arc::new(self); let mut handles = vec![]; handles.extend(Arc::clone(&torii).start_api()?); - handles.push( - Arc::clone(&torii.query_store) - .expired_query_cleanup(query_idle_time, Arc::clone(&torii.notify_shutdown)), - ); handles .into_iter() diff --git a/cli/src/torii/utils.rs b/cli/src/torii/utils.rs index 7d590ff4b48..5c0cbfd0d50 100644 --- a/cli/src/torii/utils.rs +++ b/cli/src/torii/utils.rs @@ -14,6 +14,7 @@ impl Reply for Empty { } /// Structure for response in scale codec in body +#[derive(Debug)] pub struct Scale(pub T); impl Reply for Scale { diff --git a/client/src/client.rs b/client/src/client.rs index 6703547e811..3b3330f0708 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -22,13 +22,12 @@ use iroha_config::{client::Configuration, torii::uri, GetConfiguration, PostConf use iroha_crypto::{HashOf, KeyPair}; use iroha_data_model::{ block::SignedBlock, - http::BatchedResponse, isi::Instruction, predicate::PredicateBox, prelude::*, - query::{ForwardCursor, Pagination, Query, Sorting}, + query::{Pagination, Query, Sorting}, transaction::TransactionPayload, - ValidationFail, + BatchedResponse, ValidationFail, }; use iroha_logger::prelude::*; use iroha_telemetry::metrics::Status; @@ -152,7 +151,7 @@ where .map_err(Into::into) .wrap_err("Unexpected type")?; - self.query_request.query_cursor = cursor; + self.query_request.request = iroha_data_model::query::QueryRequest::Cursor(cursor); Ok(value) } } @@ -262,13 +261,10 @@ where fn next(&mut self) -> Option { if self.client_cursor >= self.iter.len() { - if self - .query_handler - .query_request - .query_cursor - .cursor() - .is_none() - { + let iroha_data_model::query::QueryRequest::Cursor(cursor) = &self.query_handler.query_request.request else { + return None; + }; + if cursor.cursor().is_none() { return None; } @@ -310,7 +306,7 @@ where } } -macro_rules! impl_query_result { +macro_rules! impl_query_output { ( $($ident:ty),+ $(,)? ) => { $( impl QueryOutput for $ident { type Target = Self; @@ -321,7 +317,7 @@ macro_rules! impl_query_result { } )+ }; } -impl_query_result! { +impl_query_output! { bool, iroha_data_model::Value, iroha_data_model::numeric::NumericValue, @@ -367,10 +363,7 @@ pub struct Client { pub struct QueryRequest { torii_url: Url, headers: HashMap, - request: Vec, - sorting: Sorting, - pagination: Pagination, - query_cursor: ForwardCursor, + request: iroha_data_model::query::QueryRequest>, } impl QueryRequest { @@ -381,22 +374,31 @@ impl QueryRequest { Self { torii_url: format!("http://{torii_url}").parse().unwrap(), headers: HashMap::new(), - request: Vec::new(), - sorting: Sorting::default(), - pagination: Pagination::default(), - query_cursor: ForwardCursor::default(), + request: iroha_data_model::query::QueryRequest::Query( + iroha_data_model::query::QueryWithParameters { + query: Vec::default(), + sorting: Sorting::default(), + pagination: Pagination::default(), + }, + ), } } fn assemble(self) -> DefaultRequestBuilder { - DefaultRequestBuilder::new( + let builder = DefaultRequestBuilder::new( HttpMethod::POST, self.torii_url.join(uri::QUERY).expect("Valid URI"), ) - .headers(self.headers) - .params(Vec::from(self.sorting)) - .params(Vec::from(self.pagination)) - .params(Vec::from(self.query_cursor)) - .body(self.request) + .headers(self.headers); + + match self.request { + iroha_data_model::query::QueryRequest::Query(query_with_params) => builder + .params(Vec::from(query_with_params.sorting)) + .params(Vec::from(query_with_params.pagination)) + .body(query_with_params.query), + iroha_data_model::query::QueryRequest::Cursor(cursor) => { + builder.params(Vec::from(cursor)) + } + } } } @@ -810,10 +812,13 @@ impl Client { let query_request = QueryRequest { torii_url: self.torii_url.clone(), headers: self.headers.clone(), - request, - sorting, - pagination, - query_cursor: ForwardCursor::default(), + request: iroha_data_model::query::QueryRequest::Query( + iroha_data_model::query::QueryWithParameters { + query: request, + pagination, + sorting, + }, + ), }; Ok(( diff --git a/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs b/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs index e5cf1a30c5a..5fa18856b48 100644 --- a/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs +++ b/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs @@ -16,10 +16,14 @@ static ALLOC: LockedAllocator = LockedAllocator::new(FreeList #[iroha_trigger::main] fn main(_owner: AccountId, _event: Event) { iroha_trigger::log::info!("Executing trigger"); - let accounts = FindAllAccounts.execute().dbg_unwrap(); + + let accounts_cursor = FindAllAccounts.execute().dbg_unwrap(); + let limits = MetadataLimits::new(256, 256); - for account in accounts { + for account in accounts_cursor { + let account = account.dbg_unwrap(); + let mut metadata = Metadata::new(); let name = format!( "nft_for_{}_in_{}", @@ -53,6 +57,7 @@ fn generate_new_nft_id(account_id: &AccountId) -> AssetDefinitionId { let new_number = assets .into_iter() + .map(|res| res.dbg_unwrap()) .filter(|asset| asset.id().definition_id().to_string().starts_with("nft_")) .count() .checked_add(1) diff --git a/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs b/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs index bf54a6c8503..496ac1c326d 100644 --- a/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs +++ b/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs @@ -84,6 +84,9 @@ impl Executor { let mut found_accounts = Vec::new(); for account in accounts { + let account = account.map_err(|error| { + format!("{:?}", anyhow!(error).context("Failed to get account")) + })?; let permission_tokens = FindPermissionTokensByAccountId::new(account.id().clone()) .execute() .map_err(|error| { @@ -97,6 +100,13 @@ impl Executor { })?; for token in permission_tokens { + let token = token.map_err(|error| { + format!( + "{:?}", + anyhow!(error).context("Failed to get permission token") + ) + })?; + if let Ok(can_unregister_domain_token) = iroha_executor::default::domain::tokens::CanUnregisterDomain::try_from(token) { diff --git a/config/iroha_test_config.json b/config/iroha_test_config.json index 3c55e840892..ad415a54587 100644 --- a/config/iroha_test_config.json +++ b/config/iroha_test_config.json @@ -44,8 +44,7 @@ "API_URL": "127.0.0.1:8080", "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -120,5 +119,8 @@ "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } diff --git a/config/src/iroha.rs b/config/src/iroha.rs index 779295f6b4a..ed022853431 100644 --- a/config/src/iroha.rs +++ b/config/src/iroha.rs @@ -59,6 +59,9 @@ view! { /// SnapshotMaker configuration #[config(inner)] pub snapshot: snapshot::Configuration, + /// LiveQueryStore configuration + #[config(inner)] + pub live_query_store: live_query_store::Configuration, } } @@ -79,6 +82,7 @@ impl Default for ConfigurationProxy { network: Some(network::ConfigurationProxy::default()), telemetry: Some(telemetry::ConfigurationProxy::default()), snapshot: Some(snapshot::ConfigurationProxy::default()), + live_query_store: Some(live_query_store::ConfigurationProxy::default()), } } } @@ -221,9 +225,10 @@ mod tests { network in prop::option::of(network::tests::arb_proxy()), telemetry in prop::option::of(telemetry::tests::arb_proxy()), snapshot in prop::option::of(snapshot::tests::arb_proxy()), + live_query_store in prop::option::of(live_query_store::tests::arb_proxy()), ) -> ConfigurationProxy { ConfigurationProxy { public_key, private_key, disable_panic_terminal_colors, kura, sumeragi, torii, block_sync, queue, - logger, genesis, wsv, network, telemetry, snapshot } + logger, genesis, wsv, network, telemetry, snapshot, live_query_store } } } diff --git a/config/src/lib.rs b/config/src/lib.rs index 628fcff9271..6e80c5e1c88 100644 --- a/config/src/lib.rs +++ b/config/src/lib.rs @@ -7,6 +7,7 @@ pub mod client; pub mod genesis; pub mod iroha; pub mod kura; +pub mod live_query_store; pub mod logger; pub mod network; pub mod path; diff --git a/config/src/live_query_store.rs b/config/src/live_query_store.rs new file mode 100644 index 00000000000..79382fee2ca --- /dev/null +++ b/config/src/live_query_store.rs @@ -0,0 +1,44 @@ +//! Module for `LiveQueryStore`-related configuration and structs. + +use std::num::NonZeroU64; + +use iroha_config_base::derive::{Documented, Proxy}; +use serde::{Deserialize, Serialize}; + +/// Default max time a query can remain in the store unaccessed +pub static DEFAULT_QUERY_IDLE_TIME_MS: once_cell::sync::Lazy = + once_cell::sync::Lazy::new(|| NonZeroU64::new(30_000).unwrap()); + +/// Configuration for `QueryService`. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize, Documented, Proxy)] +#[serde(rename_all = "UPPERCASE")] +#[config(env_prefix = "LIVE_QUERY_STORE_")] +pub struct Configuration { + /// Time query can remain in the store if unaccessed + pub query_idle_time_ms: NonZeroU64, +} + +impl Default for ConfigurationProxy { + fn default() -> Self { + Self { + query_idle_time_ms: Some(*DEFAULT_QUERY_IDLE_TIME_MS), + } + } +} + +#[cfg(test)] +pub mod tests { + use proptest::prelude::*; + + use super::*; + + prop_compose! { + pub fn arb_proxy() + ( + query_idle_time_ms in prop::option::of(Just(*DEFAULT_QUERY_IDLE_TIME_MS)), + ) + -> ConfigurationProxy { + ConfigurationProxy { query_idle_time_ms } + } + } +} diff --git a/config/src/torii.rs b/config/src/torii.rs index 764c369ddd4..b0869b70881 100644 --- a/config/src/torii.rs +++ b/config/src/torii.rs @@ -15,9 +15,6 @@ pub const DEFAULT_TORII_MAX_CONTENT_LENGTH: u32 = 2_u32.pow(12) * 4000; /// Default max size of a single batch of results from a query pub static DEFAULT_TORII_FETCH_SIZE: once_cell::sync::Lazy = once_cell::sync::Lazy::new(|| NonZeroU64::new(10).unwrap()); -/// Default max time a query can remain in the store unaccessed -pub static DEFAULT_TORII_QUERY_IDLE_TIME_MS: once_cell::sync::Lazy = - once_cell::sync::Lazy::new(|| NonZeroU64::new(30_000).unwrap()); /// Structure that defines the configuration parameters of `Torii` which is the routing module. /// For example the `p2p_addr`, which is used for consensus and block-synchronisation purposes, @@ -38,8 +35,6 @@ pub struct Configuration { pub max_content_len: u32, /// How many query results are returned in one batch pub fetch_size: NonZeroU64, - /// Time query can remain in the store if unaccessed - pub query_idle_time_ms: NonZeroU64, } impl Default for ConfigurationProxy { @@ -50,7 +45,6 @@ impl Default for ConfigurationProxy { max_transaction_size: Some(DEFAULT_TORII_MAX_TRANSACTION_SIZE), max_content_len: Some(DEFAULT_TORII_MAX_CONTENT_LENGTH), fetch_size: Some(*DEFAULT_TORII_FETCH_SIZE), - query_idle_time_ms: Some(*DEFAULT_TORII_QUERY_IDLE_TIME_MS), } } } @@ -104,10 +98,9 @@ pub mod tests { max_transaction_size in prop::option::of(Just(DEFAULT_TORII_MAX_TRANSACTION_SIZE)), max_content_len in prop::option::of(Just(DEFAULT_TORII_MAX_CONTENT_LENGTH)), fetch_size in prop::option::of(Just(*DEFAULT_TORII_FETCH_SIZE)), - query_idle_time_ms in prop::option::of(Just(*DEFAULT_TORII_QUERY_IDLE_TIME_MS)), ) -> ConfigurationProxy { - ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len, fetch_size, query_idle_time_ms } + ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len, fetch_size } } } } diff --git a/configs/peer/config.json b/configs/peer/config.json index ef36a9f525c..02211ed3072 100644 --- a/configs/peer/config.json +++ b/configs/peer/config.json @@ -25,8 +25,7 @@ "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -94,5 +93,8 @@ "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index 9d5028a64b721cf2fca2409455b8a6ce87d5f4a8..7747381b6f33bc54e25fa355a976a99e53974c1a 100644 GIT binary patch literal 498861 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

B_D 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%0D?b%@ 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 literal 504366 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 z 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

?@X9$+y*z;A&#C z;>+3{m0;+8wtPEh>R2T}-J2?+IFoHQduR)XsR9bXAZW%WtT5T%Z6Wu-+iiu<6y81+jrSU!cMNLI5u7PZQz(Hq=S=8>^kK2 zV%+ho(xlhh`FL|`ZDm{d-CbmXDFU$WT*3lQc4Vc=TWicQn$^i>qGLilmsjZMTx(;q z<_aKDQffK2T7@Hxw?oc!+mi3$=j)5N&zU-r+JFVrpmgcI1j`5n#ng_6R?_8-fylJp?|ussq$&XyQPVNh!rV8 zG~_kVnj#p$gSV${u%>jxd3=R^q&sS^t!x%Du(0^c$QxJKNao~@YGy)D8t=3X8fhAb zOx@8u1W0b&Kwa%HMR;U~F8h$k!D}OlI#K6s zZe#f-(oJoG!P@uE#6_D%B%H&6AZU-5DvXjbYTz`EQ0HPhMW^u#_co5n3EJV#rJ4@4 zNBmu0MvI8piPQv04;k-Z2>BeqXyeCU*)^D+cTt_gOaWsbdd~M4WN9))bPTe)u!(mI z;~-#>RIbJP{i%Fm8h;hcBpTnMUuZlsm-22W`;j{x6uHmVWLQG(&}28cTTy>2k z#U_#5okQ9n6>}JC7y$UlJaqV5E^##nHrYk%v&7LNi5s;G`-5nG>sx;|v@X}EIf+gv zIC;{p=0rl0amKaKejVDs@K9(Ug5pq_67A1|JEM4~eH!2b{pLexW(wj~*rtxb=#Er5phDn+6CxK%4@SSy__*IUGaL z3bcRZS}72U&=PScQAy~9wFChe78&qfA<}HK(~)MoRSAdg2Iue@gKgDm6UojQq(2T? z_xM=UA10B>%qW%Yw>o?>){*v}Ll4iZql?!u$5Z>kaM-OfklYofE2y?XI!25y z9W!US1b`B0*`;HoHWg3pV^Z;UG^wyK+B#;Iy8pFIc(1IIwV?6 z!$<}X(lGPa^zxUepd|1ukTjVqyn{1y^=aj@zx~ z&2;&z=AU)>ZAbB8NSnXCjvIk|wn2!F)Nr@$fkXJHCO6eOB#fNEXIr|qvP-UVWN!UB zow@HM!XlzumGji3@_tdjy9UACiEox%CAqgwQ_)qzPmiwBx0%=VHs-|O8h@9ow9Y&w zAm)ye-jz>Y$?r?sjuP&^*y8}N7mgCI^!iEKG6MG2km2sJK31df1w%L7W>hLm7eB8j zX`nwluZ!G#kReBI?sbs%%S~}|mZ|>|ZfCOj!a?Fmm(hsbWxl?#GlC>|M*yG{D!5mz z-uM>rvwgt5BR1StxxQoG(Z?B2NHQ;2d2DTRW{+#MuH+d#z1uO`hd{QEz*pY-A{`_8 z(RPf?@hLMUOXvY?aErvU<`y9o{2apynJ3ghtRpZKUvTFRdX#%Ayg`!Bq=qDJc+7*o z{yQC^A~LejS3N|TOA1?KWnHuzf5${IEp(Hr4pXublu1=SeScDo-VQ_VB~)fIj8d8W zFjAch>@i3YNk)opcRxhmo;k)yxi(AKt%fwQ=)j}fzb(q$Pv%muqq93Y^-!zPt?+4T zs1Moh`m-Tqd$f_6MMes;mGe%_uFIu|m{WXw6SGUpbZc9r_fswcETqU^IB$_oP6r)J z({?yHyVazRSDY(4zfczl6DZjLb9gA(y_Z3hjEWiHz8n%k%YFYvCFnnXmg>g&!>-EBD(Eevb-e`sn`wzi4L4$(#C&} z#GvuTxe)=xw(N2Ti(Agk^jGZsaqk73rgl2}ry<3aj5fBv`%hA<@xsr*8vv{Rlp1CoOh^3uc=;iI zd7xe{GO zd&uc@n#z5f{2)v>%em~exUZmCehrlcGoJynNQhhgnZL!~d31T&_^-pYal4IyyjZld zSY8Z))ec^CcY5LBy(BGD&!Ql5Wd}q$pwRd)kBrfy9vfSpv$3cunAU#4rJot-XU*{N%O8fQ6Ateng($sMSXq! zBd)J)3J@hI3>_nUY2#|^t?Bd_Lvt?a6K3btf} zt0L=^qxPD%y|OnIdviGz`{i((r(*k3|03;PO&1z=v9z|uw4eZRXWF<>#*E^xmSU>3 z9zC7Oo|ccC!-4F|F@Vu+bpY8U+=m!zNH$Ph)lwgn_Hr;~0ga9~vwbvtXG(KscMDIDZ0~sDTIM%yuwPa(DVu` zxZ~OJOq;LUNV{4&($dOdZ2{8wjp+%^@7rLQhns+k)E5gAb8h2$g@>!!^SC)qTt9@} ztIct{x}aGHn&)~QhsJ(tDl{B`(MFu3T$C3Nj%N=iP{C*v03BjnSC|}$L z<-)40hvo{pI1KDtwEb|Llx}BBz2GRCT8ITt>%)Q;{Ow{v z3;qrsV-fdV3_ytZwgF-;O#}n(Xmsm}BoXUK;mP3s5s8(}@iQB~f3hus2!M5?xQP4q z48KohBEAELk4Hqncd-!YbOzg?8-#8jN2kQ~vQB?z5#ucazl#|!A>RSxZTESQy7#_- z?w{jei^%U{220HM;T|khLF9LchyO4lw+Q`qj#nYAGTmDQfxrbpUn*YUF<;wblxp}M zA?9nFo>GD^4>4bHZsh`<6xPA})FBX}fbVbyAmDj;X~H9_Hbjs9mPZ~UzdmYl+k+T& zSzLDxdja;PSDi5&us*b>#C;znJtgYiy}& z8hQ2LHU)fVb?J-9tU<-?tXai&tNCqq3yX+plEjo7ERsBEiB&lrSW9PJ%RN*)H! z7>QmSJdY$L_v7XMlzJp7S!of)BB~=v$qOz@dsvdZk0d3BLm52Vr=YzH`y|9K0#-3L zZL)DuDY!(aW91`B$+m^-k)-4jL3Ac&rj0j3E=Q7*ec5eR$D?on*{a|Nmr~co=y=DP z z)(xK{Ny%Y7%8{gGB9aS}qzBQBVg@IBA4y6Eio~S?>pnV@lC?YFk)-4!Ny+RpJtzg^ zzYm*$^la(}mG@Y*-By;Jb1dF==On$Cp)*TUHD1q-2&`ESyOj;+zuc*6j4Bq=$N4Ko0pd6^dQ9iEfv zY1t1h4XxAP@ieqff5*$({!Ujis!}qKBqiJW+&+*wJW0t!evc$2+bjTt@=?sv4gZ%<`GGV#vLQct6FVV{ zBu;jE;>@B=yOuWy?61HC@JzwTZTO*vKiYlbk9NZmvxybr`Kbd4F2$ z>%7FuIOpO0>Ex1r6{boRrutQwELE_RVD00jPxwpziF&^lCQ2<#^s6vlsxaQK!dR)o zSicIRr3$F^0w@I>Mq&j3g}f|4SX8LR3V@a64!srF?*!;FOe&DT-dmv(D{xAxo=$FL zTWZa*hN?T;SjpN|b$Ci|1#f|m?X(Hm-U>-5v@vt=INedaSVG1aWFjfOC{T^1X)_%H0hasnx^(oI&Uopircm;tqJ|C z*YQ0w*?(w_(9m{!nWY8soOz~{DH<)>VzZL_m_60r_y_dMUMKhJmxkF!hHY86p42fo z^nTJ0ww}mq5?(&1R=p&gZC%q6AZoMa0Dm4R_Fb_}?(SpXl`#%stGB1RpQlM+fveiA z=-B#se(j)QJGS1Artx#@E8*PwO8eY;+rM2Kn)|u+Y-p~kcI++3TXP^${;~Heso(bR z&Y57=7BWJ|7+14=h|4)`?7mqaWm3xzuD4y#Pu1Sz+Ei~J!>0j`6XN7ppN+Snm9WLj zy8~XV=K6f;*)5HW&DW74t$0AC9m1^bfZB&J3&{EGmFnewgSVg2D;$Vue14osw)$C9 zOS!w(_F`u@hxQibm9e#UL@itJ81}UfyWw%*Ne)Jbtg(746+;Gx@VGkhlcU;aH_-R6 z&AHF_E&l9=z9&pAX8?>|5aG)+5Li56N=4!TPOBanba2n;=^P&GBbyWANYJy>8xYUz ztyAxF?3B)0tj!Us8GM>s%x1CManxjoWESTSTI!6$s^<5tuF9ri z9cBAaY7G&>pRF3u?aY`i%3uGm9Jp2-h4D&*-I%Zb>^Q`kQ9|t;PMuFW7|ARzDh+(Quj~3pKxh9;{6n&A!`ab94`vivv5iW;^ zgMippMH@}dWdHX7zelR`0ptRkO}fX!c~3H}w8^7+JlL5SJ)`-`!ntWYZxTlv3%suL zqjjyX$;Q_KsaXCpU-@=4_v@4OMROY3k+-L{-K2sI94$ID*nqv;4mQ|L3^v$JDH5Py zgHBd2f(_jj6l{nUEZERpLBWPt!GaCl6=Zu zRVmnDRlAri_Qrw@-4*DUw-tj8-4zsUuol|EhAw84&oA@ka4?%G)%Egk51rXyGGjK} z^bTgTFsK`K&zpn_IRA7kU#hEu!E_n?Y45=##30+hHOiK;^EFQYTA2(F@4>iJ=FuIA z?Fqagl2sBKM`C;3+OZ?HSCdZLql4!7-L2of3Z(J7o0Ay{?&)8%Hk0kmVuY`j@2YK_ z9;eE^nR)8$OkB(Nu*>cQzX!9Z`DltVHMO~jwAAu>+l{xD&$i2SeEq&`ZDl8)=elx$ z>)okJ@66DCw9QT;wR~%(2=~?UQ`iO+B_mI^rpVGnP`5Shw-e)l41zaD;v?zE75<5x zwYAwwzub)vyoO7{fydimCw27RM1JhE*%NvE>`U0xCLeE&Dpcmcsj<~XIIvF-`tc}d z_&LZ%^2#PaHJ(p;$i1FsmFmdINNsdvgbhgyl>99NQXv`xV;mlL`v59YjR2wiK!7n0 z9so5YuvbY16M?S+v$`@b7Hm6$B;RIV13`!SwQA{WM7$62Yw`Pw9b2vRwHiSk-HHtP zTY_CzYXxWuu%PSuyk<|C~UMK_GX z8h>u#CB@tbWO~sDtSElqzBc3W90(NDk?#-WKsi(cR?%!w1)mkj{Il?AzB$!*(Yxcs zxAo!e22Ehvri4`x+}g@ENrl}6u#m;Lw0?uRSHO0)(_vW+WI&*d>(6_YPzm*y_Kq5@6NcM)oVLzA%gBGIF$e>QfLsE zW^4J9*0_ragdtU36#6mrG+|{f3Uvyn1eZ5fqTqbH(M3r(8i&T}JhbCE)lU}!YDuz^ zf+!?xd=zU8Ge&O`Q$n#s`cu57$LtM62DQyQ1R6n&=X(VXfkvD9_~406f!4F9==BWy z!1D)5svYVl`C%Ak49|k$F^bzXV>C{QHMbKq?oC8}7Hllb&%DN0GM}Uzb%{A5iCJ@D z32iqg|PBD4cGW!>N0Xzlc=NEL~rYz zP2OZve>HJnzg~tgbS;0t`VBc0{Vsh3r5F3zJsj)zU)c2FA$%l$R*E%_WY|ak(xxDd z;o2kd2ArW>Ylw9NX4ThOBDY24*q{uop=XO9zb$n`Vs)}N%Nu7)uB}eKoRODh97m?p zGaNH9+FYaP?JzJxK!OWiY+MhW`}^lisVvAhE=}vn(g@0siuT4k#2KVf<;yRc9>+d8 zJ-ZtEZb~lb7vI<<5d_hBa`w1(vNMxN!cW2Htu^QD9kBnX=w2?aTOSgfnz@}$O$x&y z7$7*oupn>S$=S7hj!NxUq`5k42Wdx7Lf2oYQSHriu)<`RbrExDzF{j9a5aVei8B*& zHu0s27Z;W``O#+Vo8KH6J50R54yr09fT?Twhvgh+WU|EpR&g2Vc=hjvPbV`ESmICj&XWUBts;}LQSMj97Rp)EBSrpd$3i?<0mk64Mh6F3#xmF~?J4PzvGGTr@)MJVsB9VE$ zfoWHPf`CW@O-zq+7RL@#I5XMxH66Thz3%wrcBvlTy4LP>DhHq1rW-0<9V$szsgl&2 z$l3H&Ama%pPaG=0F>RA5<3`LbQ!~LKo4@w$E*;<*$k7wt%^r?DpDps?N>G^+@yVGBiSHhSjQTcXyC<3nk4LgX*^Ai=OP zIuD~XPa{18`NeCKjho>ei5>l&&ooQT1x?v6O(o(oeMXN)m}R^s&2Oda`M+;`IBlXe z8FR)-DQfF~`@1dX#Ty$lO?^!z`Ac3#<)^E%cift@SA0O4mD}Vm!ciOb$}Nj{<)Y44 zHou&&d?s1=Gr!sS&S&(_Cx*Q9Tb=K`ZkBg;4|(UeJKy<=-ucv!cT7%7NjM1J_6pwl z^pJNh?)=U_=p93gL$(ZQk&GaHiCzKqBaO=h=^d}+m5&ek%uecuKiwT*S@V+ZV3<=G@Re>eCOS-=AB!I zyz>X0?|fJ9d~OJ&|FCm7AN~{G`TUS~{;2bv*Sv;z{&vVaf86=bKD`sbCPFD=R3H)I zTwc7g83Bg@op0aDTSFN83Tw*9I=*(7Ui;XP4!)%Ky|=xV_x22V@5=UjTS7O#ulN4X zkoR8N``*W1H+*=^WWr81y!g2*Ue9a81kr5od!N;NpB>W8SMZ| zZ^w5fY>%;=F{?GLOe@csz%#-9A8EXq9%A;Eyl?r>^Y4-!hRe+LHd!qVE_PbHfZ47$ zq|rszpytz@J%cel-8i9HT$g;M1#@`3(?D=jin$Triobe$Y{_VXLp?fDQz#5mC!3VD zx;a!Xxo_$(kz4+zjX4@!o$%%8xZRyjQKSRzSTA8?>v7v;^w=PR+oreAVNwno-E-#5 z=GvEp44J;QDh9?w_#>Ddd4{J47Is%hvlpf7MwZH}(% zq^Odow#$k-JT)CcCkXIz@YD`aDSB!XB`?j7tD9F3*9bHK$c6hFiFNrHYb-O!j8>c) z(8#7|J{;WO^1(J%b|VmobNukr%iw6w?K z-kFx&G;&t`q(p^jh4QBo6H(LKtVPBFjs6P6d79GT)N^oBmseKr^vb9i)8LFU8mDRU zSWISvRcBdhy2CAapmW+JGo%==_L=4J;6JCjwUs@CXpV>uG`F1|_My3a)>@;@b_jVD zZHb1}0h?X0bhRRY(4P{q^9NAk!gQ!0gb0!OSfj+q016=Bc{#H&yB-4wFQA&dI!m<1 z4`o84iz-1WMSZFA1(7J{7?X@Q-tsdcOPj(02F0Kz?236A6G7swB6M&FL<%Xf;WQKZkw`^VqWeIl zo9(%@#e<~Mx6$5UDjkz-CU>?pE>E{TL|V1Ew!TvH7lKyJdVd&b^}yywKdnk)27%g_ zR!I^-SJ-^$%7R;%^Hc~UU(qgMN>qkM!B5ikn&qmCbr63tx*bI6=2#x2`2; zqww{}tpt!oZgsAuAvUTt(-fM`E()Y4G}j#qr2p5bn}-7X2P;bM6wFb3cLdn);a4a( zwU@1rimwCu!jE*{-T?lsK(0&oNt+MQeY_nkvK@jrq!GgH+;uCzsD$a0gu4Z6`U{l3 z27iIwRG$=t!M~5{+kQ>2I4K!TA$m@4h@SgoPJ&r3tZc*nTD)0ilhV6sXM*{$$gugG z6%+@Zy3$ufGS(pFAyZ0#A;L&wr&)5(!jijG)3KeFoD$ZfWZA2CeCQGuPK4m@kL3}Fe!7@Vl4}67@$!Rke>`Gg{!gWo+!&>MLuIl%6nE%)J7H*E zv~#%JAxQ%3HI5pe>GoZ0QcEIBdbN-~?tb(r)*%iwOVj$AiIQxhE;kb!?azq+`q+(8 z&MlJI7NuzMNxM`nBHP40sAj@w?u=mUs>R<-_%Wlm?Z-!a7{sg$g;Mym(uH& z_R@IBx`49~$4aLy_*I@Qb&cy1A8H&b@bBGT2$+KA9)58mIXB^xqj8QYPMg|{B1+cC z9(kq_noNHIGTm3Hbqe*4Nz+1-N~Ui{;Ic~1WNL&1#ciQa^QurNpITnBC+F%>mOqrKZKYThda1?I3^EDD=-QRf;#;@GAGO^^d^l~+)t zU^6AzY- zpR4$tPdaKX15Z#wyIdCsEy^bmf4V9&cF3&>9Lt?jfYIf zkhDBkC;fowWL<9rDR2ptMEK!uWFNriztsr z4hrMDth#OBh>~l+qH$%4rGK7l}qD}76bLd5E~@)6m_j*GKuj4Cf%ZVBfK}~8}^m$H1ZrNs*6J?YkvD%lG4!*UQmQ=N%qc0eSp;b{Y zay8Owa$BWSvO-6@D}`ts%Rfg}dl760^gu?+CirY)VFN<4b;k08_KjKP$Az3IhM>WK zG*s;-mS!bw`RfP?i_ph%2ntsXL%%(KnuHrnfLr5Aj+$(|C)FY^j<96v1roMz8s(Cf zT4Kw6KCPe<<9Om9*&R@y-a%W)(KI%lqXEl6Wk-Rvm0g1=eis!jw$zv6or7qsO!2#* z`27PY9-Aby+Tg)mY4=0Nevf9#@o zp?Uzt^LC(kaY~!wC2PAWUc4nb41@j6HpRy!B9K|)k*Q20}};` zH;zybB;#%*%T8f`S9_M=4(|oY2Elk}ftA$3p4e@6mh6eVLXofy7NT9@owg)9S9=eu zq-dhStCd=1gee;Ijlt;lz;m!;(4^?-2vU=jV|kDM*$p@LXda*eABODP9$pl;IaUO< zXK)AUb!(deyf;DZUufR@-G_j|%<=sz97OwvZZH4?3>lAWvd#cey6{Ed3! z7_~8S7A|JVVsn!hWoW4ZB=Gq|e1r&@Mmw3A7%6SK6B6SGuK%mJL3YTJpa7fwvI zaAK-uC&mxa&Vc=n>jPa>x!E6t4F_tQB5_khL)Mwx!GV!}p>C%G!{gnwfCE!?2d3^0 zOugj5v_HCc_(%PN=D?KN=DU&&qw)J?2S)u04otPfftidr>;3hw;J}P5simXYXhKYw z&z+a!rHt^A;HBtNmQuCkrBuxVueK#1!#6Jl>%qO03iYK#fvd?s;&0XHr2u;KQdDQJ z!J77^^)P-o^WI9ZPl9Elrm;#ee}pCBCVDA`RrgZb;Jqn&DaFC)!nD-Bbx2NoHUGGc z2V*VhTKmRMl(UqTNCevnXHSib$07{XU76I?ysb=l zsUq=izzphy)6T6{p-$8rrHJh624g@Glo1$@I zQj6CCk?7XQ$n$~W)`agUXUISeu*leEc(^q+ih^4c-@wRIF1$?_`ce-P>S@pt>3L!~ z^!8a9dBy%(@Ru$2sLHW{eyUpRvE9r(C%lfGhMe*`Hrb+SAgTF6-ZnGO$tq45I!VO| zL$4jE$$=(3{*K1wj!oQRi<;)xY&Wj}GFJSus?}gJ@~XL?7fB?9y%h*N$>~0&| z)%cM_NEO4 zYWvW|k)p^;`Gu=d;-oFufQk**Y`cBiij9GJHU0wU@}%M5k8RgG1+Dux7_!?JPD6fF zA=X1rVeB5#anNHVRXEHYDN3R7jIJFyUwy z@s45muZ&^T$l@^^HD(k2m{pQWYW7;RlS(&?5{pMxf!R~808U`HJ`G;QSX^94wW1@q zoOBzh8UtEU*9P+_-V*aFRoQAJ+oL43=Fk5Xo`+$FS0NR|`*x&5JLcueKmtQNj0`WL zfk1Or1%I<5{?CD9^g@Ox2Z{d&BbtbHnP|F6zbJ<&3_6rUw`xEv?dnzyZ5bnJJ3uUT zs)qI}djzA%tfokMRKrDsRl}~R8ax8vV$767AHj5MjCqv=lMwMRlB^;CZcfB)7fVvW zxCD--1{_q50CY-$q#g6J&P6}M2+AV>Q6dpkh-21=B`!kDOScDP)td`ZWOLg-h&}TY zOZu4hOJv$_9qBOb$Cc7OBI6ns(F~Cc>}tM`(M*)oz?~8YH|>z**y|Ewb_6LguVVVd zUx_o4y2Hs9#y-WhuuZD8Ti0VR?7m>_YZnZ9^(H1Oe9EM!FZT}b zOZciKmY2RjUp4V(!=(%4GETagA7)C(C-3;Q0izofJ1n_V0qouJPfW5>{Ii<3dYB1;3OiJ)?&A<0FB8m5RBcC z^fn}|A26fa9m)IH0h=Ot1R2VdnZFU-n35xTtLPm^@@D;FE3iL_eO9)@WSk#^XxmPV zs9%ocob4I_TIg|?Be~a#aAFEz7LFuu2PfvB7>Le!Y(nhRSsSM_^d)rO&VxHpE$BJN_c*bi%W-wv?YYPJo(ib2n0r745x={JEiBL#P!bm2;l)4z{eT%j?;CXN+9JYn8SA!+-v_^gs&<+nw^hAOKn^H^V3 zb{S=rRmtYIQC7)cUKnMzDZBRE#vwn=5Ttqew8i|qq9?YuEcsLPS;sRd+U?t3J?JAN zj`1Pp_ueQ$qEXT8W|^OUXoL-%h@6U{<8W#Of&4AJKpFd)pGuNYWhR?!(LZc``U-mj zG6?P|{0hWoYhg9}2AKJMSL$N|G0(SY_mBgEA8DTvno7m8ZElO>9byDwpc<_lW_pJw*Jn10{a^ycsG> zq&^S*_Dfj4d5Tv3X?ihd&rD^HIUHhuo$@5<^6$KN(PAJM`*#WgB>ZEf6@iggK^iwFq@ILxe8#lB_~9Ilf(u(ispAQ9Ee3Zs2kVN@op z$(wm`{K6Ix+uiPS<&XR;EFd!qOgNHhP#UWnK)ygFfe2;)j2(jcgP|i+7Be>3o+NQ- zbqdKFtlJoqb(-c=`f)o+vZg*|HZS;nT0SCaj|qy@(5aNC$wF04*{gS2R!6+UX0}!^ zX%r2P0!8w^7mC4p^Jl^Ol$4XqUIYxM{&m4n!0&}&)`t?ai0pROj;y<8eMwc@d5TQM zot_GW`yg^f;egE3G;4*R)3?0D(p*8kbF}K1lR=74P*arP{zOEpu(y**Zzt7D(MP16~PJd6h;b2=f~uS3_;e9I5#lKiOrs|Wc(1Lga4vHKIZB)J@p$&L9o zDm4C1Hw`uStnTK#nLV%Ojivd{xABA5qZbce&GqIl(%h)GG{?hIOaHCACGVJydsD}5 zS4Woi@0hxu-=_+D)YF=`fAFjH6muZ-bjZMWKEUe}`7Vurq?zOgb+PqF{8{47ZKp!1 zyF;3LqnaCEd~@&Ik!G#SD}M}X=Ga9$S(#+(8`*R=lO)KD%5%Vf0u-v7$Y2L)bV(SS z<5B@o{?0KQ`(bWZao%6+@j@#ioWH6qXWjk7#HM>I6m7m=6ZW&Z#GkoZwf+q;C;k3- zw;t`_k{dElnAfKo*E{T5RrX*BCfe2D+J;Ym`MX?{zXHQFqZS~hD~*q;BReUwh5pGju{(X`Hegj#<^%uOy(L?ld>n>v81CN0N0U{_ z9EAyCT=ueKduz+7=X!@dtn6Tic(t>W+c;&BC;&m(uCO_}o+oD{bSiCT{h-GOZxNC{ zma$;zy%a(9jQj1Mu)E^_rdx8K?S(Hp+IXV()q?A-h2AHMr1 zpa08=h0(CPjfUF;8g@Uj(eO8i4-I{wHvkK_Er^BN@4EZ1Kl<%Az2^K4-}v|k_V4}r zhhKWu!dRGVW8v0-g}FyI7TE6pa4|z4=ncTaXBNc5yT0|gJ3hDb{`dYr8}>f%mFqwJ z{jYucq=m7dB!-}&Zw^@4^~lD;XAd71`ao|07CyHi7QTAd7an-s2mb2E&)Kl+<3ISp zEnnPv!<#Q(7!5l?!_jUi-4xKUQ)t-ycO^q<>Bjsu++%#oZZX4Yw*5RBPDl3`PWON1 z71v(

N#w8^Lhe{?ad9{py2Pzy3cxjCPZmdxuA1_k(5!TK-RAIDLLWwEWAqzy0!; zc3*kh?{B#8EjPdRFYbQ#!Fz@%>>X{i+!)ZZ<57i{FC0E*=?BdLXt`rSwEXz0Ti*DA zd;ji=wHxmLo6R@RzI*o@UO9wYwu6>2=a%c!mN_`v)9K2FyTAFF_k8lZU%F|Zc@~i& z*r`W`xI76w1THsx;*M9}@Xaq?_wN5UFvOKt?)=<`zjxQaTo4!nhvOkT5`TO6Am0yQ z9gzQG!4O|s5b_`T=|6t>rhRkQov>l&cdvcx%kTQ|JKr`0^4r=Bacy9TZI3F3VE^>P zrNjF{vjZ({IrZfQ(ejnMuKe@84}AWH=WW>XmXFrmxovm9dFK_M8iJS2ZMQ{+I8)=Le%3elqupH*WsOb?fXC4X@bt(fe=Of5V>l3{eou z4hR<0We)cjKEmMs^}`4EzVI3V`EM);`5)c!k8i#EU0?jp@(rK7@_qmCz~?{sPg{ln zp1r;z;4gB(U+@S6JjWLuF8SXNTm#_#_Y1;(_xs*|#rxjy*#}l`xaMo0fAt&w{(~>y zKScbqb~`%M=ljIN3m#4G^fwP5Qu@KN11W8t{H+C%@`i7G{IxIn>MLLK#>+R{|D|hw z{FcAo`pu6F;RbdVi&%NSW97U@6IS*gKCJWw<^Z&OdqK2(;oCR-@QwQp{QuOw3z%J1 zmG8SA`&E1Is#*z^2dM(qULB=qNhjTnga%Jrt1d#)flk^(duTt7mwRuYd$B6lFNyim zobL;yfB;buQSlfRv7ph=N^Dd>d>{!TMg>hP9#CmIDn}4s@r^c``}>bM*REYvJArtt z^LdTbUXQuv9CM5@#~5?WF~@xHw9$7xy8YMB{`ltGUwveqOg`L#DCaq%to#2HQJ$VV zqI5y!VMy}5Ba-CvU;fh74}R+DdtN^J^u15N``$zQFT3M82FgBY(&IcF=Qx_I5=|cN z@CLGMx`TV7)lSD7SU5Y_5T=`sWz!G;>|@XF`{d_;`k%eCB!?^WV|53 znT`Y_f5;^G(cF=s3+4_(frCe+z+2yW`<~Z*_VIVUbo8N{-}>>l+;#swe{y6B5M1R4 z!Al$kPWwZqz>nvS0$nh77z+I4h!nW${(s*6Pq#k(q5n8~-%swk=L4U+{_;|r0*aOh zlb`B)Hu?ET4hfRcn$q+UkYbSxF1&*HozX6p5z0V3LrgqF5z6qhBf@jvr@ngM*LFVr zywG8@=(0D;~Y| z6F99*)aY3h%o)+Ywvvj*KYdMqyPKp4R=2Ip1t>7{fUQXg7ojtAEa)z&4%dNBSQ4) zcfb9|H$1TOV}CaKwujzy*#l30{@16@V5Q$Ye}KAFHXEMb9ub~vZ@l@JZ~xRMzw~4< zde!A${K`kZ{g&@=C};qkL(Ky;bDe}3b?OJ%d+x%`OmT=wWE-+kT02k(3|82!b;d#`-=C%1p^xmHTa zG2+*&PjNb71v+8R52qVO`?!D3c(Tjyf8Z;R+`awUw{7#5(HpP*`W0XM?zK1F%Y)yW zX>^4UFgFXMU9mS!FKj20)rFK@c|nYHXW{-J34g5-eKr)^%3c?@2WT5c=>lf@V&nuz2)(p_xz7N@87<>JwA21 z>#P9Fv`vMjjtc1?HWf6i=4do@!QEkK@VX0jP(_1*h-Zhz~x(Z|33#UFq9 zN8j1Ip-l#-KCe*)&rex(t8Kcr+RykpHhE(QO#34Xy;ZuG>;zikTvXdWEn|461^N;f zT|7~&?sdcj?}!N&KR|vL%gAXl$n%HE?a&vE=wHfBEvx4X*0S@C1PvSxn?G~t(4p$a zY(cU#YqISiC$nD2HQNiKv@frXw~o=zSZiUPw0dKbJfwBLCNQ}-c>%|`FGyaf9SePA zOp7;X#BA5Bp?ccGNw9genm}-O>_Bp&LbaoG;TYR!qgF&!oEfTvLlsMu5v81*r~;(@ zjuovR68@dWEtdq94HKPT(i6UQn`Vk{*&o5T?43x-en_5O{l50}VO0g*WQ9%|YS0gUP-1 z2GulD+Z$AAC43C!_-`{rO4J3mnrv?MrU@iz&_Uam$z}3_2G8_F@#uJFNFb4tb0^RT zV=e(Cm!gm;rhisCO&|vS%|aLl5cy&AcU{LhkdS6v4A5gb|wnjL}LM`bnt)%6# zbD;-Nsz98l`YfeWV{3XXf0%t5&iu5+-g&-Wtt4$gHs0c}zgpT@oejKNXqW&&Y659UNR3;8kHb1)1m-gGsIOTPa&EqC3iyhcYvDxj@ zN$2rNe>!h$JX^fRnEV*H6)um`#a0~Tvd56G%ErF&xzMR{?j|v@dM&hxcWdLxiJ5(I z9Mq)DacIwU@t|ie7@iG!j*lv7-&kugO|X4WwF^mBI~Qx!?poCj3t9_|k*rcwqYXl0 zP7*yizUJ7DJbbO)6kN*tiqNV}0Od3sH}2>c7xd8CCG6t}Qp4_|bP?4VlDEBfj5?Cn zHI_gH_`d@0WvW+goeMm;$v<iDQNTVF|cnB@&wHvEb6}bU7AWx=6KS#SfyZ zBPngh5TaLON4svguNH)G=nvZ@sj|&cBg#5i6?RZ3>~Z5F0`iFLv+4ByfqLs89ivF> zI~R#^l{7Z=P=yk59_G`AkS=0W^gY+m7%;|LRX&K9hc}XRNkf_iTS)mk^uEM*C4{Ak#XMLvs`hp$S*bA?R7$!5Va zyhXQYc6kVI0gRLkOs=QU0bOUPuWH;#UZ}GyQYzC*tHOUhRBN5Cy2tc@VZlN1Bz>bE z$w)pyF&Q^7TIdj5XFK=9vy!U}{4+t7We8!58mz^iT5@&OiYBkGPD}R(^B?YC+QXs( zDDP_o)mj+!)Emv-J}itLMzvMk#|BE!(L4IhJ>PrR2k!jo7e2ae^vyS1yZw4gl1ss8 z_EmBPXCnB*4~LYtY({WOezUcl?5OG(mR{>;Hm&7-bwdRaPrFT3)Zjlwps4X=MLUPEN4=j%*t& z)5D#_Ivh{S+UdfQ>b{o?el+G!h*YsB)kVhOk_zI(RtSobbaviXn15QRsv|9}ulYl| zt#XU#?EqA1Z@M*oe}_!k6Xtc;m~>*ur6&bI-22=qIXd^V(rJuieB!v0MH zgIs)^+C)w!og*kAF`Gb8^Q|h{m%PpxtwRF#IO0>;bzcltn-VHFYg5V(9fRr}rv~0{ zK<7RYY+ycP87Ib;2ev7<%ob-_euT zn+-6Hiclc}MlD0%^F`w2;<*m< znCvzu8sf3DmMc#e*b&o5ufC|Ck9*laWqsXr3}vtq0W^ zWHv1!*#ZtH19h62HXT$vFO3%G9AYEjI!LR2!h(N*+0-IG*@@gdgjrSWCn7s5nu%z3 z#GC^euspn>LKVeSB-Y~|q25hJEGel(UNP@tGRXv<=?FC|%N=?_)3Iu5UJa5m6jKor z-K^JC1O?Z^Goy)Et1m5Sej(mCKdXQ)E-q-*sH(zbDT`@Ev(;9VZ!Ok?M6;Yl18#bd!K4w|U`l29=Y(7*O%TIRG5kBM0Wqcmd$l?B_&0@2OQQWm3ch;Hj=xrL%hHaa`Nf1N@?ivLfm&X@Q$={*cvx$7T{|^RRA{g|w-k zSfBErkjEjJS(Wb*aBdC|I~@$Frq2n)R+2C+xhDAOch)YMjRKy_zL&MHX(bbB=8;#X z{d(2l&z0NP;iQwdv$nRkUv`Q0gWTb@Hn6x~3t)l!Fu>wdI;*#z8L1jDXsEr_GDxs9 z$(gAp1s=bes&VdOnwgnsU}Ij(!jzTmrXF%OYjAQ7l{}PAey&B;sg3cpy0*6u`@?}7 zosD<6z%7ngkL56heb)@qltDeuq4<~r#r(>C!7-VUb*m5m#5_Ev2DTW0`(up zxs5~#D^T>rx~9~9JO#UjVMUkPz3ZRWg|uJ&=`Z?&b6!KfwT`qvaIdhZ4r0H8P*3hE zw9`ig`9(|aleI=U(6zR=S3=Y%*U+I;z2uq2&}&Y?Be`GKGs}hRC;)O)t=COn&rbnn z)p+^eq)B?{rr6ZvAJ?ZI8{oSY>SDoIet|RwO3j?K8gmjoOXMw0tr9$VWM4m`Xjp@J%RVMJH5XhL@8e}1bDgTG?kti`6mdEI2 z6B853%IJE{{IGei;}_?wx|ZBs&qC`)lsDF*C!id#o8$d#m@#*3P0;x6#<3B zF|ed&Sz^dy14)R_Sawn0)o(e?*e{f6wFjV%;f)|%=mdS@|<4NZ!m$be@S^*9N#?L-y^$FUutx zjG;<-kS<6ogQrF|)sUv;TJsH@fF1)_A~_pklaG2|Aj_wq;L)(PkQd~B$yi>ZpY29& zC*Sd&FkRqOH*Yfe{=gKO7;1Dwa=%@84}}2?L_23vVYHJ|lCkP@K?6$@{&6x!z8O*@uwaWAHsr(ICB4Msw(`eDm1fqLn9I&&zTNO#r zw1TyhdB;u>=3T!xh$%yAoAsiX)r$!ghf8^`=Q!-BzicXOi&KPnw z?$@{a)hIBjS+(aS-m9F@!U1Y9WQ}nNEf$eMju(Sj)dZoIX&9PBEqJ+THwk`f-8$3wdZ5$c?sz#+*6N!1slC0Oe3BD9*xJzC2OQFS_<%Y+aM_%e{` zg4UE^!dJ0q-XUye_S_`h`qska<8>Cvt$ZQtn}P>RdoA^OaosrFz|;vT*6{O`^QYVca)`UXjpfLT&4b7PsI}QrYN2 zO?sihN~fYHkQ9yN6Gp+N6AZOXEAtBn6+HsYYRM<-DCA0uS#jEQN?IJv3a?h-xVivk zNB=2xYILDUKo3v{s#LE_8vJ4^uE8>#rT610_T8?q+Tf2umwrxQG|3x zWBh%>(lTb2)kFbG1gH5v1>8*~JRvqIdMwIXE8__QjuojyzC#z{N{r3*F?I7CL78tu zv&DoSkmEFqCDfoDPgW1+7CaEB2TGx#Iuc9rI6pl$xi(HoQ1~#bzWUuC@e#j|MhR$R zK#){>e)6wjZVrb)sZsMQLbti;`yoW8>{Iv^^9OI=6X*>CD!+yxo7qj)d|pXnwUT`y zR-R8{$vve%XIXgt28BH29!um3LGT$wnL&h|<+65KO3e7wfS%ZKUIp?*KmK)K$i>fo z!N6qBg|L&1e3xn@DJa=i`&mm~6@}ZPOEnWK(UIEf(xsyz!5*|xl6^{mu7U_Rej`pqbL)y)tk*ImT1L&XNi#faT_9!fG6Yw>J7(bHIM3|-HS-doe z07gRws8}V?+l(brf@-LMpclfL_{~e_@~h=dE&5=!rmLZ_ElQW@4Kw>wqX9U)M3GaY z#avMlbXK4fZ@C(fN+IZmyJReR28>d`(&5tL61uMkCF=`gLtQGVmobw}9ZL=DEtDF_ z16CA=)z3{Cu`gVZ2$VUv(vmXDY(nntQQR!zY5MB!u`5D1y%DBHTxMDj5z+`scZ>w4 z!mTo=g7JLcBYS~e*wk0nE`%d*c4%-luIY>Bx!kU|Jeuy<#d2e` z3(XeqGVc{abu_&yjd-aqm6S)JZ3>|M28Bqc;q z6*+Wj5U7}s>?oj5!%z_Cm^eWBG}u>}t}&3f&TVWPjjWVEvljE2t1_mA@3s`pgQ(3niTJ z^fYI;gCv8l3>z!VQm|NaENpXt7jv1F@nRl71Bea>{k~zM_GCygwdF;SF4~oG6f364 zd3-1@ny%OJ3coID9bQXI$(QT&yQv`2vdz$vcD7qgG(AoVn?(molt8QM%!uq^x#5(u^J0}$qGU~8E^HAxB`Z@FxM)Muw+-J z*5PO(YR%X0vtjF)fX z5x17D9McxGv!m)fh|;ENRaBLW$Ywq@9GwCh0F0g_3HDTN8dVnQTCRx<5{tE_1aaBJQVb|CZSmJT5UG;eM_tOx+& z)%do^WNft6fqblfFkceGFjcbAgA_J6JOs=$(qjhG`A8*=3x*tL2Yl5t4GhO|amAp3 zH%F$i3vu&qM3k`SV#bxC8#QIndSAv7a>!~amWoJ8LmYM~-a$`b6VuB?kW0HrG;qW#*sIIJlv z{p~X0og$Z-w&j?P?Aud`xqWzk$oUA^Ax`2=%73kXf@5J7@X(y^gEQi+ZY z?P0z{;~+OokO7|?n9%h3XvdcJi_s4qJK8tUOH7anDf!cIaPcEoRz+FBnO9DK%c3dlBV-u=ojUTIX6NMB zjv5xSY|jlWcYpn;VIkG@9KrI9qlSfq%X0(Ep2vAYxZLL!V79!UqVIgvlMjm#Pxk}(bLpo(ua^lEB-;4XB67>JGLioB* z3;+MCgm4#vO_RYt?lD1pL>Wx3<+)+S+rD*VR_r21NiaM|uzdT-uzbT0i^*=rNjstM zRI1^K<(u8iXAlK3`*0T*n2mFv0A?PDiJSkqWGLRqmC7p)KDLmL=V+2%j zonogjnJ(;j~_KG+Gw2_^3*BJa+UllLT#Z1Is7Bchq9WJp2)!fAp65_-zOE=u}Fy(W!K4Xj;}Q&CB1ZXmO!vCOy-^RGMTc*gJ+7{(2ojd`K-m>HCcXF?00gh(Nsc*~t{GF=(&pTB+e*PB$8-D(b z*p7BAf;{~@-zGv#b271VJI&KSTv!3ir>p?hgC9AZ&pp4C>_w@f1oqou2Bx)BP?2wgKuue*YyXFJifZv zHRPe28(5w>dRTVM6)cba_^9zhPO`bd%k@7wYFNlC_B+Aya@NaiR1qu^>Vh@S4$c#yJ=4Bro?k>T$>6@cpi zN>AO7+vrp8iD-wc5{(fO)*Ai3?GYimq-FI#5gMy;q&>IGD3~XTJqt9?2~C z9JyG&52VqMKc~G^KtPxmO&kPKQ~%OvSwJMYrGn$~@AA;X9i+Gr-m< zQe81(+GWHf`%4O3XHvg|w*qZDzv9IS{YLqhVwmF^y?aJT&L>J^$xa3*!-uwZ5LA6u zFF^=2kvu>Y^2^xo#~Y$W7yt?g0VR3oh4EjETp;qJhc6h1sppK4pG8Ep)RxEL6I&Lg;h!GMEEGzn_*u@U|L!;$Q1w+ zIU45!>sh>u^CusC$DgkzLWL!gDD5w8<1f)Bx7!_M*lhv75?4mF@*P6L!C28piaEU< z00_AOl?PoKq~Yjigm9;Et6%YuJpWm|L|a%JY+nY>Mv)$o0HrNdoy{ZD-r|?_){E4L zb*{nAz>9)PNf|6yyOy&Id+;n+Ll_zupZY>Uay-$dGX z2|JB>!+(Sv^I|nn^bo}dim4qq0EtYB?_xXsHsa1KlVY7ny(U8$&QszaC_MjVd^TUi zLtmQ4aCBtzz~%;lxbq2ZBPIkLLBuk3T712QyIESyNHJ_G#LmBO!+_dYxJW;%+$f*l zBHpysWY>^I;Sv~nF75H7F@P#n+k}VHz_F}Xr~C;r_7Rguk0N@!gvZ(7Y8q~U5v6Qn zC|1%zp_o|-uY+tzj8+#5FdEk@pcllk2P|b{6FCh_%05sf86hmCNNW|!N(%O@r)*p- ziAHJpT*}uir=d1ytj`t7+Z^YzS#VpX#9wD+%|Ri)WJUDkZ0{dW#Lxuq7y|y4;BbsVZyUF(6b| zOVT9*Msy^?Q=Fr;i3CB8w|b3@154a?F1pe-n1~CL8_G~9k_>;s%k%@fm)vHMC+|jT z5kwlbNIx|kJrfZtjIbkdYQ~O_?fL@AH=$p4CX$xk?n&Yw`oux+|VKx(N64XKJc34M#G#?A^aupDU+Ud(w-fNGp(-k z{E0ZLTV@FD94lq)x%pP8%oWVI!yGf7vAyzJ5_e_)%Wf7j1BlP~cpksTDTF>t0Q4(aZi%Y3x3R)5 zM=RZLr4fzmvnpeP7kzp{XtoV0beJ;pg4EXW(5A=Up-UN+dY1C6PZ)03|~m-3Kiw zJP4RFz@|t(`VRw!?98Ua=T&VH?GKMtDH+`{t+tEz%$ea?Ml%!c9@x z>3lW|UrPG63 zwS!tLuI((+MY8l}^Ev<(CA7m3g>jS&-(c_?TZ-G2UBM{Ca5Qj0Gb6X?gT_Dy#C}|g z^JVh)r+vwENs>UiTg~SOvvy8Y1av9i7|gnY&=6sc}KMG0_G>BLeM%v zRUeFDQN0oS@)z4o5TH}UWX4)Z4&%!>Uj$Y>k>Y#-_U3Zn5Dbjo30ZFZZjX`MSd=?8 zd$lR%XXAzza5(a))YhZ zo`toUAmSMlvVMon>Kw+*Om3zoVP3Dj*uJ6U>fKq=7LS5)DR!C+XW61RS;|ChzM3yc z=R0f10h*nqlJgIp#BABY!6aot^l2*~s(C>c6HTndp z$fi%EA+MJ)jQ~f?G(g1THetqcVW>v=qp_r&4Ss>KpQ+LwRWz)L%sr8*13Et}b|Y8^ zf;yGOe1&3CRK|$R4S2CVE_8rc3t{Y7#&lemTvLgFL7(K2<^!gg_>0W(gVh+4sR>NU z^R$>tsRJo9sNP@{&T=3vQ+o3-@N-IoRdpxGBj8+|ouE`TRKj4>giKW+>8YalyeEr` z3Mlaw(-MKcmc=EbRbNXvhshhgf+7Ek9%|5i(Ozq|^=cCs!Xsvop`gI0^df?7+Qi8Q zD2?Q|SV((;cS99~GX!X2WjYTO-oUlSCfiv`8G6T5UzG3ZpyMP0t|}L&qoPh?!7?ni zK!9HE5z_7V2Q~cy0_a~n6Uq)k`JJ?{YYE65{#qQNiIkr2;hH@mk(?^@Ofg+W5BSzx zDv{*G-IO+G1N#!p-(z3zaQ+?}X^*OQ6b)XFNP9}B;8#2BWnl9tZw^j}UGKC*gkS}d zNSzwp%HOmC6q`i2{3%>QkL%)AEq35tw2`hE3T*^hBkGJw z-2$=*y2rupiyn}t9S4Sg5J-G!_o1mpb0`#r#VUJBgqHO)SZ}OEb?2=(fB_LKg$}n&qp;_ocmIoz=cImRoCIm__+~?_0Z@*6^*(w_FDlPQ_8ykf(T{00V2^i>E+d zwYwqPQXWql(hAxK+GhZ_1jrQUQ$Y1-hle5<1H~m4z6Vtj3H+VvIBu$T9tQRub7wq_ zU<~liL9ouIchdBEAg-=86hxJ_q|mGDL*xv;LGP_&r%=MyW8beH-ta{GjuqPAyT(vL z2z!Kq){#6&rrxL&3gg&(ef~ubzZjpi;-bnVS0I&9^so*Z%(tZ zQ%b(UNWz&H%9$6MGY>bP8y}zPb&)p{j1K3_^MX4X`Q85&Lf<@r%YvT1`C&vB=}J|} zrTde4^N$%=xIo0jund~Vv7VDWUdoJRY??q3>HUQg;5Y%ah+z-d_iKC8<$yO^RT@U^ z$MV<}dV*WWBDO({8HDf$Jq_0%HKT0Ekj`gIlNT1;u}BzB9frZGR+Zab-{7D^ky*#- zT2@4034Zki_-B41pDHFUqT{1F;{e0ZXkjA{8QR9q!&GY3(Gy=C327p;^a{dB8ml(O zbo&u2sWKOEZ5LGumw#{M9gZ#(xz6rA22UK_YIl?S$Wit6NPc4$1{Nz-`u5C~+K_KU zEU)spvEKYSW$&7`G4HU$O(`X(4^8$dP9JFPVLZDmS>vB~**;%(nwU`%8l_G5B7}rL zPGm@X6{1Ly|4O9p%a9{|b{XaOQucITM%!9vi8P%9LfXlq4EZJx1G{`m({X~k+}BJp zMNi)!%KDKo=uY2x1$~*OTUSJRKXQr{keSbUZD$|Md@dVHJMm{e#~%=Ar|Qh-MsrN| zna|mg9!L<{XvfFF@Yl#LOk|s>7S@Fc01Xn22iYD4@HoP_w(X(9#e{7lcr*+o+&ceB z^9FtM%H>L>iu$QmDwQ(-E7=6jCIR5oC9Hf`2qRIvL_!4w_IpFNC|n=wN#Z1}t*&0L zo=T*&3tJ(K7Wd02)EoI<9YiJ6ekPKKe6C~kCXwo)dBY2uDap)9TGW;R_wbOpxEXksm`b0BO!{D@a;i)SB zo1td|w(GD>jSO)%B@5u)Oug=~mSi@X)nzU)5s-f;#rU#LtjQIE5?H-t zH+x(NlAci}Q@Mm>v+)PRv=dYmPpbMYQy|(DkCV47C#hgKy2UI@rbR_99;+Lu3M)~_ z1(zzT7wFepxD=4dcXRpf3)-kFFf(2VG(m!Qf9fXWIQzgq?;@@ z(~&p6^fF&2Qj0=a)64JP6X`Ys(V31`^U2-nGs(#tU*C(mm63zB$s1qhkGqwTP1EF! zFLRQvB=DNnGc$Eg?DidtWI>ZR{<{};D`QfeH@?gZx|K1B&KqB5X}2;a-Ff57{86_u zrdN66%Vgckm|o?LFVpg6X47D377fyF^_hOgZ@y3@q{;+K>nbl@7O_>ef z?6Ni~IYu-oCMDCXjsgG1Ls3jdX4lNJ;SBE6WF%jx?`<}`NLP#WY_YBucI)%8{*75VUqJvqC~kjn7Jm%)OZUFJBIk!|V5BNkwgAFpTFcR_xFuF#0H zzf1ia|6O6V&BhHGIcMOetM!(tKC|9z^qP(KM|x(K*iu~;me@2Jy}-Zma41v4EQ{`i zDr2^p)s1cDOUvfUPt;rDOxjiuas`{sIgjxU&wOq+WT%zo%g<9iomQ5AZWGx~E6YD8 zkEB^yGwW~hT(gBlyDp!J0>m##+<%vUW*D#_*Z0Cel6h!|seK`vhmv_iLqqe2ju}`m zG=zvA8aj4~4TsX0W@%;~d84Rl%*=CRWqys3`Gt*Du4$~wudyS)#&Y}`Tk&g5#jml{ zl(8kovhU5X=e?1?Z1{fcP(7RH_tOV33d z{hEzY8f(a&YrG*0W5r>kRpoF&i`Q79;wNZ9G2-0v_dT!|vjY#9`Nl}1GLMBFO$7-{ z!XvK59PTtd3ACCgPe6*QV|qlH=2+gJ{JUJI7U@AnV=b`*wlYm<_Fqb#4Jl}B@V>|a zBll0qK?4|5d?A2_F!B-?MU|%;ne+l?@`c!Xk9VO3TrB~D@i~?s!mqa?e}sne{*75o z6badvb&3O+03e?8u(ZXZA<2!-nJ7ZeVX9gAylbI$46OXJP`Sv$Jj@^c)E-8fgGp~_ ze?0k&PP%Is)xnnxh$EC%CQm+QxcsMf0y=Y&3Ed)yWvOdBErrugza=Cx`&#okP_zF- zdxRDy1MkAdz+|M}U&LhmgBeD!1VMj{AHe9!RV@20&XI@1{LtVjvS<~KZFi~rS?p*f z;wE-tBQ;xSDN~tPSpb7vdECN{Ef(;^Y9*)@#v>__?()PKQ{X@ppTZw@ngh$!CmTbu zkj3>1$AP_Yxty{sx2B<4o1)!HdZdXQxTwqvNEHZ8Vf=`7GgVksGC~ET0L4pzf~GB< zpf$`ojaHneHB4?NMQ?O849zfc>7bz^4VMK&h8sOY?SU5|UcJkl-#Ga+krFz~fKYm= zQ0!J-w4bukE-m23bQf1@+|ij3s?a}HaV!YPK(U^2RVq3M!_pQZDvIwhTv=c2xZ6zQ zShxctQmu3%`s16?Os&CTO?+{ zK+Pu-rM}~LqO?|| z!vWR!eCX;S3Kq#3ZOi!%QKvO74*4ZcNlc{-p_Zdl45=KQ{N^=_wA}XE{Ddv;Y)puX zG*Of?>)@Jhmh>%DwzQm#SWC;P_(}zUxwM>enrMP#!w?KR_XzxiR&dZtvTAfv5Cx-h z4ao!VM{)VJaEVF`oi2`xgN!?)7Io53Gh|FqHBNVw znKnlhizYYGRV4s}p>&}c3RiSb!orkKpBn^A;t^X{e}k8WD}1`s$PWTw7I8|ON+Ucn zr+5)Q9}6{zM^&5ZCsoY$Qt7-Bf(C3t9FSyVIHs@3dkv}~#?1XX5W#{KOnh{_9k92W zyPN0$cy_XYiTAl4iOdGjAX*GcrKLfkrEH!Ol>G-XF7QYM2A3^n=&>BeAQP1}iu=4h3W|Y2AWxEfWM>>oIgoJ|Mg@8YR=WZj@S%H}X)bifsd1Ob-zZmsS;w#(J@YzET~o9hBnS z$X(zEqUq`{zo6XBI^#x)IjZZ68owad85=WnKu2Ll*m zSrE5B+r%hrG)|_QDKl9*O20Iy?%noRV^oR#4SNY{1`51`B5Q08<4frYVr&e%ResZ0H-tD{x)pSXMWOK0OfR;k)goUoe0ZrniT#tUqe|*q+p34S zIve+d0+CkpbeyI`d!3w@McRLmj9cv_3PvUjX71(0#Gb&vuetZhjQ0~0p)XK!1!}Vj z6fH!qKxtM1*9P!J?N`CyWsye<;OxFi;GYtPmqtQvJieE)6mYWLDElLJXQdr!_)0gY zfS(*P;WYc`gHcr4Rv~HlJ(i0b7W_ZavypRTR}4|u$JHycx?w~3+Riq~@T$?@%6zv( z%$3nocI?UzX<9W1Nx~~QHZCsmGBf32lEEj!HUE3&P;f=oSeKOt(?-X$zZuM#esMT^ zT3wd55@AC<+Y7^mrvaH$nxS*;vU`o;XOefB_BrYgiKnk*d9GA z`Dc3q_i(=+R{g_?&^`RV9`+RvBlqx@kMM9%4;xp9QJEC*5sh<%q)U7 z+}$Gcn4f7C);01W%1>Owt`CN)hH}K1M9|_@T7YGBb$Dfx(k zIo)GPP#)BaG0^}6l=*708W`ijyM7|E|0^iw}kRTJ!@dQQ0hg|Q{^qDZ|Q=R zgfm+T28C3b0G+g2!T2E2_J&q5)a>AW=HgbV>=kd$SJ zBAwNUMp;>iBPfr@Y7Pjr)2O;;6OvPy2Kg=$AM{9ymdvs+j02Q-UGqe62?9Fg2dKO} z#Gz!vMp9qRNm$nqbl=40uQ7vq5Y{dj-9R$1no^vDM>T zvtQ_O_8^v~Ki4Aps2O~0Kxv;)H>cJD+RXJW1v z+V~h+b)v1**2N-Q<1RDikUoGc1VJ3=MO88(jlG#9Yu`O{7$y9v#GX)J6M z1yP^^i)n>4ntSf#g9cUpr^chO=%4DffyK}kr;-cOF{l}>?axJR_ukdQN2doNh_Aei z8XEt_jvFzO+T^Ji(WY`70UbG^z;1^>K}apgMIBlJj5>q?T9zgxbojm8gh2;$H~yBd z_Y!`zKEHhz!|;pA|BF!FAJ{-*P6L3Y%{)drcwpCscdR{(G*Us`^q-uw@*Pts;3n2OoLQnk*b-ToDdd=63Rp6<-wa zbVp(Iv1YDvcQt+#Mx{%oOEL2ph?k&}*kXDKijSYIg!ICID3nXsY$)Cm7oq~`FZ(dJ zGU}_Z)X4}M;^#5M8?W5NQ10XGqO_{Fjq?bkZfxbYx%HIFHcYnGxd`5xvXK9z0%zCfeBWdS9tTY!%@TI-n3WD9gd4JNjPtP z@jFW!WhSVdQS0 zjBSu{1JEksOa@b(h6gc)>y^wLD)Q4CPg?-tXc6a#`awjOeNW8`rYT*%LfZ)0mL^`0 z_mTqEPQHd`R0E*k(T=gjHAL76eMZ=XDj*zFM*{|JFfI{Yl1zwD>t>5knU3p7;S;?q z6aJLnd0>yB1zXixQvu4UI#j=^!)B&E^l$NvVZhxCw5#GsCtnrQf{-up3NzM$!+C_- zl{;9q4yno~St(JETr*QGxGO3}5TP)+ovK!TFFPQct+aAHbDVR@G&!|U`%-?0Fp}qn znT28BkVc1j)c8MwXoOLU>>9WIj?|FHYX^lWJeB#rU+u*r5z!QFpWm#N96d{89Bvx8 z_T(RVY)^7_4vD@%s6i_nHU6(QJ)@B{KwiQ0eNhxjXEBY}5b=&tw^F)1RECSEsuCbh zEFcV45BB4-Z^3S?V&S)NlI00|juG&;&e`FVt;`2&BV>k1cif^MM4&ZWO29N{O>v350@rVfDv8onmRZV-d2T?$6{erZ|A;upT)@%U=2w1n$ za#(2ucn~Yaf|ymOcVJ2jVz4oHxPX5ay8|F_=0nI|WWE&PYzY3x`xWY(X6a%Z zQ##PGk}s2W&nU%82iw@o5=KzcNGR@L&&)1_G77LEa?p1b2s@mbA+VdLCu8fIzDPb7 z3stZgCZk^gwf%pT1d~~hDD}J5K%xbk(8;0Hq}>%3xwR}vTWn=Bn2`G^FWmZ7y$u?B z`=>y&&DD~k;dmb6xz(N=&Q>&hX^z7!6A;O4dH}i2ORFB~SpzREWrDQVTGD>X1ca%B z1_FNE={2*3(AUhIkp81~3izmIHtGTz>OdWGj04PhX6|8DueDViH*bXvZE3JO2d?C^ zapQ&vcNdZ$2Yi`TmlHLMgad=oH+?ZU-<IMo8Iw;*Ebe!pK|+5$0-O z{zZUhlHa$c_nshXnh6quOP2(|1@ad{x%L9)0UnQ z+*)ErfUW>Z=mb`p?c`(5VU3o$H>rC=M3%}as{w+2fQNM(MPf~uSJDl8kP%^ip<$-^ z^1RXy=(8+%F~eUDSM%iR0za{S7H3V(XSrI69H={6O1DFP294TTgT7%9$s;dghV`>; z^ca$JB$p$+C#6dy2@9M&L4APr)*^EJv2eK|SW4 zl{7j;mzV>VK%q%0*2OW@bfg(q4#%2?qa&o*ZEb_|sACZxOI6gBuQ>xGq|a-SYTI6m z5vC=O@r_6&7naQnoy^9)d$B2>;NoJ|4jAN$Hh`9zoe40uzXH;@ND2fn_gSJQROO8~ z<86v9n+z@Y*C=fVTMHz~JqKjaU7nBFEp%GFV~{}m&Y6&Ek|5oMJ!x}sZ^_uQ)c(*T zPPL#&#ew`DeqCPbaB5v%*qF97&MK8w3V90oa$6cxiDIE#9k%ke){aFYrtT~t{+(7~ zyS?dEbgZ?*U>;8}FZq1h#=m!Bxws-)R<{`mJ06YwvB-xk0((`|(zVXf-N)^d@lXG^BCv>&D+OZq0*GF}fk z8%Os8`L{9Ob6H>=3%;U@y}aoGR0>sgzHDT~abc=9wue(HMc9_1+KOSzARZB(JM6xA zrh1`P#jV7sMT|a%KyJ}gv?SxMi{WSW=^gEuT8mVYA#r8ooX8k{LcW5`LY`7GMVa>0F>W&BY26rjV8&B92f|JN zPabWNa@VoaX4XbI4nkygoL~3Qp1@lg=>M_&E!-QNbT+S_j(&${P7jdSY=a6bE9s#o z0Q9fVyct*klMy~D@fjwAPV5Aczhxb@wgnYN3>5)X&1gjbpiP)IWaHs%w$nVd3>Rix z*JQQPZswC7g?O*4JnO~RsOcyoaJA;p=o3j&Qt*V-X0F(J%L=O$5J)+wBK4a>I=Yz! zJ2=BaF;HT1&nmJj-q?Z@tQrKMfHEgGelUSi-2;2DEJ+)PINIbXh9N#g^A9L5Th*O}IM9?QkeX- zufOWLH0=YM9jbK=37bQD6NwXPJ86Pc^E6?!c$(NV7r-Z)R2fF-ciFAfRovs6Vi z5;5qoMucn}RSIhnhTQ-*Tr<9EP_?plmz- z5Z*?R7SwDOK~Uh(%5m7}fmn6wEw-SnJnD7FzXLnXFURFD{US*lH$c0d8Ct)L&3a8{Br=`(gWth?R$L>e#rt*)@esy=K zS2z)8zk1AGG2fW|>Ir*=Njdw~Q}#+ja26N`3=CKn&n_y9JVtq{Rco#4(%W`d7i=M# zK@PBOyh>#+KT>Ad`vi%AYQD3;2*vPWYtf^QY9n=Q2et@p2sTol84KzYER8!kJI>MC zkHC=#@kh#Q2l>OS0tHx&J7~)5`q|8Y$c809d?nxcMTmeTgeGb8TxM$(?M6`w0BRC%Qv(52*|Hognn(HsTkL&X4O8ge&fOVSzO)xZXT17k;@A=<_8|Khadl8eLSyFbdxoE@QTyM^Xs1F zNMlw)g?8M!<>ZlA^e*Su-^chqIsd+XhzP#@etz$ZlSi4`t8_X4$!B>ooZq*PpZ7%h zH$TtsKSvZ`wTIf|T3sqyGPYBF!Mscs32r;BUu(wHZjnnwBt;eD$mNUl=a0=9i^$>` zYZA~KCTEGA0h;!Rq4{BySlEBsQ-tf8>xERFD%EhMIKWvsml)X%D|PR-a}+y{iOgq6 zou2Vx)JkDnicHf!-5U{BY2>aySrtz|-G z`gnS9I=}U`y{d~S`il5~jz^@SL}ozb5GU>utOza@J-8&t^`slPfL&S*5{5EohsDH( z4v^vK6lRkep79EG0G|W$h0Zb))J(c$YC*OUeFHtX7QTt!<(vS_X_=HC3@>4Y9~W&( zvDjnfucQ=0y~0e;cT~a+s|HTmS!7t_-Jz51F3gxFSzDm7d?HG|rP)}Rd>bcB8m(5% zFd#LoQ7ED$Um5{~UOK`sr8k{RGX?p8AeQ}SvR6f|I5i__MF=@H3wdoa8Cgw+OOz17 zpiAiZMLRCjrnkvBd zb#b6VPR#Olh-b^q+?}@q_2S^=8$88CLx)ZtyYOSJItTz^RtRL)Gv3yi z{YTQ6{Z3={JB``zG-m%{H74AxETes1dG@=uUfym?juvxhcL@@f#lbsUih*#a2MS0r zKEzE$xXw4?E z{c<>SqFe3IQ~}qn4QXixnFcn1-+`S9Vl3=ZL1r?F<$}|XLXo61nEbcF5!DBvo4$r+ z(Du^xLC{!i#FU%b`(m^}1BuPy`RAdTN%Cj^2}sJrmRuqT53#4iecp9e-uPH4irWVB z%=t|;Qv8!WSCQo67j0+oWlRGKr$DvW;*P3_WyElRprDXVOKcK^6zMeKR0^rnF7t@& zW#&SiWmwg;0=zgq(41}ByoK;J2Bn{^_!-Q!d5hSJ_Sv*~xTy>Fv@*epAey*HTFOY4 z#fG?)f$S$>Q!^95w#5oq3$bWL-3+cMI=u%{2jWE}n>ta6Kp%9?Fm1KH%*_-f$F$4F z>OOoo*;M7b$(2n7_?6hU!KZ%mXP`UViOYZB$K3&iu``}y?H#>f$ zPpUYJ7B5LN)j~3!6l-7Di?Q966Dv6=bxq;z>k#>I{yFW#lb*dmX{)a!+ghBn?U+hI za^Pwt!4@@IRlZ{7jO?hfqrOwy)rGz~EzD@~1i!Y#)CK0aDArKaFkwWhZ7e?#=doLA zJP=6s?ujg<1!=zDbr{H_(TR!ll~6(*B@!+e{pp7v-FxGW_dNKvZKFZ5T{A?5q446% z-+ceqf3WLwSN|d?UW|L1N36{7pJM~RJqvyTCR$W=>&VmwgPzRyxm(fWD}Ve zxAM5mt<)i3xNH;BJSW8?ThoX)lz4@TkN)KjgiTrT!zHe_o1+>4mR$wh$L!cXde6<5 z|KqhEC{465DWr8Jgw^o_w}13KAHCt{zCUO;7Ys|zD>?dbUgMk3aiEJNjq@5BwT*pend z&sw>h!iihh>0D4)aeGJTb1JEgwo-(l}iNAE(pL%tacrWbgmRt zZ-Dk)+NKQjA{v=)bzOHAR0^H&fh=V$?7F(;W%b|9TFJG__>3{@K6J~jYR!G+pH2r~ z^8poM=~XK>CO8b`wv2MMmw#~Pz>&sui0%s8yI|6 z;!7$K7bUP&EXL7ZJ*-z@@hVb$q|9}ah5SbGdTws}TGn722iPo$2}LNnZ{AI- z_GGbjDeWOsDK!&ef3o;AFRxb|bq^sJqhYJ55I{}aaeb58$$2485c!C7QlZ!wbEA>P zkyu&uW_nL)B|#iaN)xR&cdSK4fHy*t}*ZSp>;1O>Xd1TP<~1 zOx2>M%AA;h17jdIh}yO5x5jXRULB0t*TAeg%CXXXU7!uoLA=$8u#(;UNp#XY%tX14#M0 z;6}@+DH5Q579*uC)C*v}yar*25u@%ZyAsh-n3!>>Sq5&OWI2-q0Ov++TJo@VOV9pJ zEzPK3-XS2=nSHj0*~K?WizuqZ6c8Ae2VWE1Ce&coV_IsEPb3Z^1%@yYLbiyr;n8B( z0Jza=KhHqLDb~dSx_FvhX%Z-0GOLij^`(@8^qTvG!NqBWM+_d16g#($yUQjfCP=ja zu2d};=3)dt*05a}@;u`38!cDIreO^jM4#J!ws#hNn6l6uFE!FubzooH4kE`Q>{eEo z0D@Y>Llgi1I<>CObPAyZ-*qge2fJpjrh^A9xdx-jdHgBu_?@FDj}*R1kl5TcoQCYk zGGzs}Mqhe$7GIghmxxk-=Wz0ga2irf{Qv1?tv2sHq8~OjB-|@7x>}t{F^3 z&5#Z72*MhuVpFYUMowul=@0T3xqZhrLJ3eZC%VX-;S<$>LE5_yU?WA7(l_2{qK#lv z4as-8Vf@)9v)!ZhOS6jhiScn|m!^gcK3P;{&AME5)Fd{N)NWAb6QNZi3;{P^35&)DmguKqOdVNFa-?8N zX237GiY)=jd72HcL-dq2q%hC<*^WaUzEEhtnz{_9ytV;|yD*%l;*_oa2^te4$n@}F zK0mNlLL-gw-x(?*=V|oFP_@}p_T>M@%)ujkI;tHJAa?5ZXn^MjWF%^Q?XwH0#P$8e z-}(^jw5{nPP|j-&M`svBmI>J#Zb}CTGNEiu`^Y3Hxh`d93)*!c4{0J#RLVSqIueCw z$X8i&OJeYvNbWqmP~7Qc`B^Qggz;I*V+1|9oHg^2T2Y{^9%yPnI1b>a@wph>j!vdb zi>m0^WhGXI71kJg@qSYWo^;Ecq}{PP z^-Ao4>lg4HNu5txvWpVHz*NJwc-aYAl75m(KhuY zs_{&zWLrxZN0;V=IFG}06BE(e!M&0ngc@djoDl>s+6g<0IC^n6I6Emmtz~ini*b@= zmgV6H0nW)Md9^%T1$82A2f|-tV5A{XCbuzVaQ{XnK`6+2PC%&Z?rh+yZ1HG#Nj9kB z!`Xr>vW0SLYb2%%(t#bj$X0s~brUDnM6sdR*{h|PHy0nrObVx7u$R?Y z)}P71#JC=B9plXz!ao$IRo(!QygrLN#2XyK|9M3Frh>4`Vp@45 zWO`^s=qZ(}53Qlmu(co_0p6hePFde)?2M$?< z8A*zaYJ{EpusV`ZV9=mQ+x+q<89)FJAnl3tzcm@rWM`?0Va)&M_2-fH9-ypw1*#{Jg zgWj2_yWdH69`61$oEKj5UoRQG@11*}DqT7{annPScSKudQ9&F_iUHG-OT$;(o7~AU zp$4-mC!}F~uO7ke2s{_lC>ImZW_O zMR|f`4_b%pX$8=Wa8Vg_R@m)7O+JB|%a>}qbU^4(OFPCS1E>wzz`{{L37`^#0#I_7 zM@VwFJO9+6tSdi-y5qtz%(8$5apUdH!nCHaOYy0=l-qG*RBgXk8R^b;NA@xC%WrMy zTo~&LD$jQYmmCPf2h%QlP;zNMRw`O)s#K&>9W@rHnO-VZsa_$(9nlujZy}UZqQfiJz$|{787pf%5Ro1`i1xd~{CroxtuR8=(n71UZn7+{Gf0EI0qU${t$D!^KvF@!>>bT02LD z$*&+zRXtU{SQZ>BsLjhtu&LE1!Wlm0SgY){_+fOfr~sF0RKxqp9vZ=JY*8C_CCo8H zkC{QBrX&iaz}`Ql1f{sdO-H5Y;G9sc9i~E=aAp;9uw%-0y0eqLLfB*SjCeztv)XKU zn7e3y6WhziM=~KgPWEG6^y|>tP)4#D5*Q8#8^xOJK4gm-4tOi~)msV&XJY04VL8P4 z({+W_FggxvImEIY_SY%vEQbemiQ?aTFMd@M*`Jt`Zu@dv?vD1tNefw11OpMCzPq$9smJIfs z&RW@<)no_I%Ej0Ll;SaUu_Iij>qM9Z$p?A8Jlp_{D0LC~4LGb6W`%!wAx0Z7&qoIu zGGt0PE5cS?&39vc$7&wt1nF2t1huTn7RqDH zk(h#Oohj{1rbU2hF-lEWWvOhC)d>JM$OK3z zgCs&+nTr8VRd-AIJj>#jzX@T9%bCaCsu1S@W#|=f*3ybC{$*`MbKYogLs%8q^+gr4 zEC=tqZW|ECV=<+JvM&Z-Df1yl`qOLoJp-7RG`u7|?vhK>6eHqOW<=18r24eNlJNDk zD1in^l#kHEVYk?i-YLeOBltmFZ zi^3}4O)!pD#(?m(_)Ary%XS@TRqenqOM|k*(SB_7r_=yL8MW@JbLtr=)g@YnO|AbJ z3dsCD=M-3SI)irr-oBls}7%!~?SfF)a%(h{97wMT+zlGVGZQj8u=+{_>dV_76>O=Jz7f-G)KVWWZFeXa9l zO&XTvXcDy)?<<|}EABlSxc%Nb)LF(ouzDD6rs)}3f<+@M(qXF#{B+Yvz%!(POOWjP zH;p>I6n2zhk4##|wQRIeQh9LhX~Xy~ud=+3j+Ca=DbbZes1V?C-aoqxZGe~4#$VaE zF8{SjUm!EuPz@BLgU%g3Pkt~nKl~s>ox7feQs+pULY+r>{~Eeo*U;p#sc**_KmZ1f z!$AqI9bGODZw*@rIUN?_-l55%F5JXZajG;quM^13&p<<^AO!(Gxr!I`-`l6E7O}_^oZ66=-n1f#8AgWeY%1sEnhrYAjBVPS2ilCi^rxmh zPb2O44P10^IaHNXUG!z$Lc|7bT0A389!H^3A9&xOLgqxj#^)ernZbFBD1%EttJ+4R zW{atdp@RT)qeG1H-)tyG`l`~iH_`uigkp01O__+$%U)v_>(>uYLTnKWs0Q#s1^pW> zY+Y_iGA?bg8{rw0U@udH{N+>(SWv|R*#Uon`y*8Nek&JHBw+JlPuT za&X(bj-27`3X2wc^OB5sD8}HOB9LQKp_b8ZCbeoxt^vn*N-$bG+hm3c1hi6Q4_DrA zD;O}+{=&--mX$?fpGGliCn={gwW2{{-feEsO5)@fh+VW@)ltTNYRT*6g;6R+1_VcP zHcqwY7>(SEAKBd!DBs)z0sM-+{V^&jh6#IHgu%V>v)3sZ=Hc0;*ASe#uqcb zH2u!QR;ZyNBitZtgP#JvICxpmLTu2A^pz~(h?Qiv$r$*uVtFw#1-*$HnVW9$!HIrT zb=HYVW#yB?mGCNw#OyY5ow|;?LjU=7SgWddXGlsulTda%F<>aP8hWt^7CE=j;<5a= zZCVy-s2Xydg>mJgieLEcCXhlUT#7RSQ#0{ zG+fAi$pyoK#;&&&d_gF0>M$o1Lt|eBBgo)92XrIcR`ElCz?tq&$hLFF43S8fDA_@q ziX&wO;f)AlxD{`hnzMTiTD3rJ!_g{R-jS#`&Yj>_6lJadVndSz{ctoPVEDb*G9E@I zZWSVdn1`M{R`5VwX9G$6~3fwDty-;oqj6C@gAPk*G!&1M{jBTQ! zj@*j8Tkhj4)RazbWst-X6+6`R2GL0I&+rG5*q5%=h$s%3+?AA;JSU}jh|aXN8O9n5 zLdH*Od;wK6l5xGMSc#LsWh!R8B9Z21Sh~vb)z~aWw6E zN~*_jG=y-`_i1dZ$qi1LZy)y#LS*nrb4ho(3|>Gd0j)e(0A?!w&7r9PC1$`_(fU`( zEGRpsAT+_9Ni%4fjXuk0k}zlT1)n#}7Du$t4Xy$6T)Na5!N4#Ao1wPWj5HsiDkE`i@bz zwlSX@eHJ8t2eh|`a8c%UA4uYnGyQ_(Mzz4{2kT+E#vorM?*Y7J!Mc2*TbY2NlgUz} zu|)4~;+-=R`ArI~cO0*b+i%fp##ZuPT`*FT_mvvUeY>?54FOXtKwyV3Hy9e%GY_KN zt&CsS&>gB^+PW{t6gFP0hKP`TvAsuc}RrauMI4|+f_#s}7)6Y$H z^VO?)!a=@YRe|BLTy-i(eD2Fv6|1TxbV#Bi8jALUQLmV=UMn9CZAta9v55G7-XU^3VP=At|JUd&+NWa0r`@Z>5( zk}-n;5eyMv1_ewaz>xd-et)Zb_c?ml&f{9;)4jV_ug7ow*6+Q3>yN0RJprFj&;NMM z^Jg=%)+;0uIJ0s#r>uZg7lj6ExXwS=6mgp!~Mp6`Xwbj!N?7A_jV9d<@U(%E60;GN2X7jGZ$Pj(ikTMc?g0xTaq~! z6at;P@N!2wwde$z-?Ns=6rc?wz%mknxT>L&i!yhZ_XKtiI1KN*kX5PCu}0w!e2+Or zLL(kOv9}piR&9lb5TQ(pVSOIF^QHv}6o3t_m;U6D5QLSBNPif7<{jmQjH5yPgfl_= zyWx%kwBpZ;cOxkuE}k(XE!FD*9iTIWluOWxM+Vge&Ew^1#kjUp$kC4pi!bJ7dOReqkZe80G-AniFe79Pm(^u%5 z_Lky8s4UsXGMt(Dp$sg#_@8Oh{4DE#3L-Nxn3|eQ>oEvi5bd994tZ{t=9nPVi*=6^ z^$F2F+N|UUnh*Dki#w3ue zFEbcR16W>Lhm8LcMww=iF>H$ra3x=B$kX}pA>*nGxq(xPYwT&?UHq)V1W@{1kD)#cwEZZZ3)+5E9}(L6a15)au5@5%`@{O|(AJ0b@u96pGE@qo zT94|(M1Q&0Aam=jPRLsGfpa~rs)Hh)A0Iecd^i4qwNQL%zXfRwzV&&n+qbvQYu#Qf zY~Q|p{dUf4-M*dkTDNcCdX*1IHa^XALUKZ_rZXIboF2{kVAm)}3XS@yk9m!!KH)WP zeaLIv`kdFe^--^J>(gH2)(5`&wrSO8zs6f1{~EWR>D2{2)2knOrsD(8@anfUJz}Cf zvr*798n>Rwxb=y!aqAiMZPQ23V7&EC@wl~u5Vv03tEO1u#acv=S#u3;XyvsZ{h1$F zQ5bbwgL^f$it@@NGrSaSS@;)i>J&d^Lx z%~Vohs9bHh@(KM{^ReRBgFv#VRvJ<{zDsYJpHKL$xNR6UDeB$DdpS<|d z11O6)Lo_jJQi$^Qi=MoDW@apnom*Gq%5&>3EkB(ss`GdRt{^{ghNGM_ML2$OPALwAIF+ZlG`-^3#KazWhM2Vpd5K)f+P?5z>v{b8gMCcb14f4YYb z6H5e4O$(9PlIc+^Xe7ePO6h7lpe^ZMqTV#wtu_VpSrS^JPyRumY*%)mSf4U$mR_kB zuTQck3LrOX(R2ebk2EB~Yo>v>?9TN%Wq~SqJhuPIJiXaTXf9f(xrsw;2b}ft(EMn% z#sa+@(lPB{NDv94QQJ8rudwI}z*Icson+o4$&u1p)GXk%lN7TpGgN)%kJADc#aQCO z*48?{n5?W`sp5uLto_{D+OK*UwX1Fu#}6bTRZ~Y183w~B0|VN_V*Uvf&`{F=PyLrq zBnrh0>{z>eOa@}oAqe&6&cKJ9>cqwd~rS<1|(5Epe9b8Z;=gsjCLEPNn@4S!;rs9g!I{uHH*BmaWA z*KC(Q{ZEJq)zL~hlI_o(VT|-Gc1yCdenZYZjQ|tcuVfm-u1=w{6q4hQZ_P<6v8;S& zXCXZ#fDkFjLl7I5Gi~BwkruURGhhEW5& z74Ts(9(fG89_Q)2;iICQ9-EAzzwl=(9So40)DD(%)xkwUXZXYk1nwSSTozM)wmZt% zB{1q$n{Thgb9?tzAH&7<&TR}P$K4f&I&+sIIVL%@ucyxmUXyg#Bax=;i#T*teivs0 zILw0kvup-Q+dX9adGxP8;jKzlP9(VE&M3d?c|?fMR3C`mJA(rNGi~=EbSOh5tY!7m z@ho*OyQ)g3!pYJJ;p2PZn9l3-dWvk+$Ih+DuT}j6S>s_YtTRy)g#aOuJa%nC~gn z7u&wJ7}*l*MrBDzV7|7x0YJ)lkRAZH)k9ZAQvzhG*wt%`O^=Jo{*Y<|ysGUuVy~WP z_XiYbJgxa0X@gSrQX!9XDiQOG*}_lx>JNL8``x=!zH|wKaJ}_*Uw}Gv2i^k zvpUzOGNk7W35q|@5Qf0ECwZH(cGQ*qxXV!)iA~?AN%hCBgpa$`jle<{k<@#VP^^Z9 z^w3mpO)(ix#}el9I!UW*2nY-tOWzdLz;RuPd3s zo!!&UnK3Pv#Yuz2MuaR5)#dkzZXH5I6Fa-d;asONA`jPdp4e=a4drUds*_@|9{*V} zM>_q8=A9&*iX5UGmA+w)Z*+gJg2?!nvj>oC)w^9sy(5ZCI{LZK{_JNv2k{ok2U^ZL znsfT5d__Z?r4V@3t$Mh!Aaze_tfy#Nnp1|C;c#(*UM}UQf^;n9k9CLBWoI}m#}>~Y zW9t_-EBCkfBO?6i6WyJuHWE`r=Vr(wO&g=DAcq^?Ft-6%EsHb~!MTArU$lWOx*Q&E ztsF&3oQY0AfCcr7SC$*ftBUJnMw%`sRSO%T=4)aJDA@cssEBds(BeFmkeu{-vx%>G zpOFew`4P~(Q*Mp8%MP%`Kd18oB&-mQlsBJv7o>e{?3as^QQgMns(^j3tpXkfz~zz~ zS0T+;x$en5&I!T-Tl>j~45kNZX71p-<~C}p5^1N|{HVeVSQX6=b2{ylJUv(zfKiIB zgI}WsxR!VmXiTO^p%Pn!Boa4ozyZCX%tASpN>jeZQnpYTM4Ah+aps~K{M-KHM=SisiJ}}E0 zO}lJF(hfLqgzanhf)eCo-l#||es}Nn9>zcde4_Wx5E?dBuH%LB_BfXp!_v6d3Eb;| zkc=KG!~VEG_7deh1Ysz#<&r(7pl$An2v zjJ9ceA)#u144`|XMe<~mKU#A&kIVpGE^3~v$LtYqXO9G~jy8hiZyar= zdwQo5dh#ZIcgxM&MjO*~a~d35h4_;uoiqf@bU16->!yvN8zfVz1MH@V4v?Vfc6H5X z6^p89^-Qd3cyvu_!czG)<0b-q_{JR)XuSG1`z~!6BxtDYD_^_@NOMO#*VsnDb#32) zzuGAy@Hi56GL2vk@l~ez4EQL{#*V zD9}GKVu(ozGfpeuFys66H2G|%+ne&Ux{`Y6ne_W=IyG^G_Z{jDXouJGKCz|pTEc1F zUn+noy8=S9I-=%+x9ia2=PPLg+T;+N<4+l`pgb;gtU2Y{bs=OY ziZj);x@O6{KAPK4)liy#T*<`1VutqQHS!FU^=UNE3u>8xS@4Rx1!ESetwjiCkBp|F zNcoXBQE_Y%Q7zNdF;dhWvp-K?qM})S4%eC1by{y1MfUimE)M5eIP2Ak(fXL2^>lSk z57Odc=lx+Pohs!xF2fznQF{pCVxwCW@AV2Oo=vHFE1d32T zBsFx+4gl{|j=q;t19c(M!ZC&7lm6on!#E8u>ur700ZNV!5S(bLjLlqp>Z z?FnmEjP6f%i@y|J2}60A7Vm@IsP#A)=0n##3W{0QS^&O` zM|DMLUhdA~jnl^AniewjlU;@`LIA^ZMUON`vv*=H){8N&7pdU{B?GP63-mV3R5x*1 zKU3}Df-LxIF2xL|VRvTN%~apaWqzjG#bs`$x}MAIO!d#WkYxXxxNv~OPA*e3)e@J< znd((s1~b*SaDhU4Q6aqkp5b{q!+k_P=%=#LwXzHVh-)8ax65lO-1m4zgEU@UmvyEE znV#5A#g_0t$32I}_!S5EpbP^i`Ps7S0=vl26<~>|i(b!1yF~-oVT9|ADZoay1NEcKI zL`g^SaW{o_lR<(?>@;`~s&zxa1!2{G{z^7-;Rq{2Z(zRfiMwJ14I%(u z!xNjEifLf=&k8;2?x9b5$fLRHI!RaE>LlZysveEx6TEv*xu695-bX#0WY!4MmbZ|#5tfIS_)doN^}9PQ;i@}qLKOMl_SlI(7XXurDu_s{hYLN|vCd@U%m>q&NX zC03%0TwLUSh0sNABVKcdn_Zjb=lO*p9VJHbZ7I5~r_&wupoetg{Gxm>TxYJ)7C~1A zu$&DSbiHqgUwxil)08|6rpNegHO&mV8FGw^w2S~1m5f7Pm?zDTf{(A^-j$6qSZZ~h ze$vX${5^YZvjZV|)p{cVigpd<^J|cx#;zCEU>AsSIqcdnMizAKy5cXcsn}f!>{=Xu zz+#bC1?>9OoFyXY1CQNWAIggJ8s5tG$y+@rAC4DG!y6eI$Szytjb!$&HVzfaP%2~P zEGl~JcvrmqxYFD7EgLh2Ld*k4sPxB-VF%**>xUT?nC^H9PF9;*bwbYTf&F!BVAYf` zQ|O?Z{qyyY~m&4Gzp2>ra>@caa792!CT3M}w9vHni8vGy}UrfLNN zV9%`DN0jYj;l$Za%T-_pE5}_J?$!0F{%}v#9WKCkntBl`T`xwyx+8o#;#@M+$mohF zPP;3A+YCT7iHQWZT32<~UA{Ho)m>MIKj*G%5N}ufO?OZJ8AiG%U+F0Xdw3I-LOXGq z3%!=8Pvg+|z<@LkU7zd?_hK$tP?%i}r!Upu=LFvbSjKblXf(OZ_?NXEo_}GEScLem*-~Bz`-H?HTjMGQN z!J1;TfAi%2L153(K{WruguA2J*i#Lt4s%9b-9Mym#9+1xgKx+_I@q6`;ci#wBZDE{ z)?J+w17v+hbbJsKd!;6*8=A@AhX#kMB`?}Z8buze8+~C_qwLbHv^$T?BY+`cZ*|O1 z9vz4gC;S|DOgQuqC+NZHzPdhEQ}l@Fr@BY~xT;4w?C+u;wE^?Bw?9q$$aHo4|CHJn zHj}_3wSLlQkyi5!*^j4b(L|i6NB^NTLl4Fb<;;wi-myS}?s6bO_d*~6s16d$&^l&0 zw{Gr!mTZZzck@q^)72zY8x+eVpmB>8FYC$*qnt68bbHkWR#sL#&=)~rEjpa2Cu1pf z9_!b$*t0r-5s{1#eaF_&rdH4e4wg8EGe6aHKTejqCav6Fb&mbB7kzP7yTL34{NIsHNL42`3v;nICrTJALd(+#Re|~F@M82NAu($ z5?&)$zB&}Qk8Cw}e?ptl zoHIQlz4aksfc1qQ`E2S5d5}`OIv?(j77%6U%1wA&y#*r8*AJ)p8g24axDr3265``E z?%!ncsHFNJ2-)e})DdFA)^uW9b^jO{DhT}uVY`hWVoBQmS`U|F|8zK9zpkf7pp`Tf zW8TA{%%Cn&o#fY4^Sw}Tw*I9_TSplMn& zD-tXO0k+-!szIT}1E$s}3eoCSkFYrA8e6yrcY(!lQiy+y1*XNs0;m@$Q_Kq6R4z2I zJK@zO8?iVG@aDHxC8mm|%+oy6d3{i@x}2bRirw*#LrHXhhDMLmsP2#14MchP)@Xe> z*Z$@t-z=+h94AP>$NgG%XE!x%5&}gx>rah^s6fqYVc@*XIMHo2`#8-?Inw=cnpuil z99Wr;J`(gx=0&P{6bd|<2WSNi4x-`o|q zOM6i=C(Wfc)t{>fD4ZY5c*92KfVV!bfVVC3VisP9B6$J`1h_RClQ)qx(I-#HzQfh^ zCbTh!T9RO44Up8L=R*_ji67HE)dPU>n$&}WUK!%6mR$`(89-U|^G%CEtI@#|mWU>+ z(@?&;2h|GCl&=T+SeG-Xz>GwvyJxwFHhU7Jr!onG30!NT?$@N(w@E`A*qqN$on;ng zQ2Q`%tV6tMny8J`-8BJ=n)aWSSPs%zj^|?CRPpUE!B5`-vo5Jd|V$WDLs|NP$vMy2uz(Pb6bl-bKb}kOC26LJH)GtPBX@ zJbBs-RCcRc1Zo6grBJ()Ks<-=!a(Zp8ntahqqgm_){_-qK}JuS4uoaT?BYx{AByMf z&7EB(({OX=dM+4pc5s1mmR$DkWtDWwoAzQm>y&%O8a}^#Yy*k}X%oBqvu{Q{MZxw+ z(-=FR$}laYF|s|N?&~t9T!jej>Rgzpde(0RKhzIQayBhlISEv%wld6QDZ)ov*YW+S zjmU&BEz+hD!O%^Dl zO0Oc*f#fV}TIwh$<AxK};rvHn<>w#|urh3b@!dFNRyBC8LwYa;m=yVS8{Ah6Tm~yU&{>3{ygCk>MJ6)UpB0_XrNE3V z`B91jn2t$P(y#&A1hFCW$1n`B8F`T;)!A^0rng~ut^0FqLjB2`o@n(?mD>~!G9{BL z31TLzUMaUAt{yC@Ty06+#_nHWu&w&SQy+QFLEKaLnmF%9j>(cpT)cR>X!;pSM-&MD z!dx;BGP3TFZe&0OmMe||;pRyR{?K0EUM2Ga-us-sP1S)Pbm{wOcXTzL{cGPa$6(<0 z+^^>zKrJ2_mRxop9&RG=V>`}*35GgB4p&CCzT8gm$F*cpbnwS4c3x`YxS;V2BS;f^ zSEb;Oo{kQXB3FEbBe01di~tZ7QuGGyL;UXmmW;!+GAQR103t&(=SMbQDE@;da*GqM zK+HyX%CA(3puM^hMSxtQ5+XN93WGa@^TLK(1iAK;5g}3snM;n|W)a|`{XY6ox-bK$ zCuPqe4){$qrwn=)&p58m;-hLGTeG?hNC$Yx89;c*T_GUdLb$>-Q=^k)^(^8ywg4Na zAO^U^Zz#@z|G^qw9HbXLqEG-awbKu}MEu6T)gC>(N!x{a>z(8ae8XR==nd3Y!gMg@ z54ZE}dTvt?2e$=5fhs6psC{xh>a-Z6On*Kxz>hxcs@ zE<0d1UC!OE){r)Z_qwM>SC24C>ny&}Mzw|h;>U|}G;BRcvr|B02EQyWP$Zdhs{o9g zPJzw{pVr+YCWs}(-EdugfbnXdPC@(-=%(FLCz>N5`R&?G^Q8SVjga%{Di|d z)-gACSFjg_ZxHKIk;VY6;@e(=N)o(EE@7ZK($S+cVLzc?V>2)XSL8RJ6^ zHJ7bG5Afm$v2~sB<3dXm=z*J`Ko796cu3~pTr~XSIQT`=Ps-6Rx{dF%_zA)Wmhz+h z;k2%p0+b(Uw!8{a`=%UIfyv!5UD+f6bNBCMuGR0dOo@r9ehOlp8!V=Jz$*{o*w}k9;3nV`pl2dxP}`#3;VOiSehN z+O9uce?y0O06rZcLMp;T=X$e=eeoT|PXYu%EZ|psOy^FX^skeH(FOsX1Z0EJR8VV1 zL@oV)2nl}e&E7uc< zv7d^WPXao8#mutE!ezaJG;>@X{xA^HIXq%J1EZnpH&MYN*zM9<&=^qoJKD;s;Kj6_ zP}Hameh9MxDr!f++~{}k_`?pN8s121;6cK8mM@>F15L;TV zV~vfj*`HzD-B4a5Xl_tX;xm0>p%b7zoddK*BY!`_ZWcXPMtVUWG^Fa4E{LZ$LSI2N z5*P|C1GR*-~MP*Ike)hMOM%hs**OS<}Ik zqf_JX9*$-J>GBG7y!a`Tghw+L5LG>r4Hw%qS>mJRY&bXAsgTdnz{shy-t+-{)wpg*aVb&U=c@5nYP^n$)i7|Zj&=d_7o619V=!UPsO!B?vSKf z6nBVFErg@Fs>-V*E?s5$nKOFCZfFIzqP3yx)6iEK3S@D%+y*)1^)B=X$zjlHAn^wv z@GDgEKA|$Ba}UopUMJ(l)A(9e^o1DIO!2QQ#H)`wJw<3FS=$5y{YR^sA2NAKrxBD+ zWG*F}7;%EVs{eiHusnY#Ltp>`Z{Ak?I|;V}QR=*2Kgjy`;^v+-kkcNHJ5lBDQgAAh z4)TvXhHDU1S?&{P=MCO@^^+*qh!WMN!#lIi-b{Tx!6O2LprCr>bpcl#ZQv2BI6cD5 ztvgW$0tBHx;(mtMaIPH-BC3>PL9lrCAk4&qOoK3>%&J(B{=J|?pG`c=r8St1IdVL8 z5{MC@AaK}wBN8M`rwXg#E#Pn@$VPDQ%8?+@D-mRPh>n<*Ro9Uq^#AEWpyOHMhb47# z?kIvRV&;AT0?4%RNu10VoT9Knf?%D z6V#p_NTUPdGyn+q=A^U>QHQI&o1yZm?6E+Qgmu{%tE?6|GvcpRuF$t^B^)2F6W=e)cYB?T zKnKT`t1XpwVBTbun3~V?jtc}meHd8m>VTAea_RXPDi%_CeYIDl6xq1innYx`P3Vxz zyV?$&c-Nd_(Z$#J%a`#TkHoE^V1gkp<1zQqD857*{aBxnOk+dwuufy= zTSI~}^(8-886t2!T$+S%5E%;3BpB;b722ZpvMbD}kVvdtUZ8pqrN)nR(f+654Ce=F z>$@R;BBhGBnyaiG@x>!O)gSIqg^%@zuM~tH?+U*}_B)_tIya1O}f>-5R-zP7v7{rV5%ehuC@XYKFn-me4dkHo11 zYx=|NyFUc))%_vj#&FV_l5Q#}y=p8$=jE#`ON;kP#u&ZEvBLV5qcuoBGjCjw^qlY$w)2_w6;e2w~=2TOdgKTDKg-7`EX?%5on^*d3lo2LDV zHjaI>0_bV`Tj|HQ)Ar6b4*qNc^cw=DS9g6?S6!br-@)7K#>ZbLi)_>S+JX9Oj04KJ zRe#-dokw-&an2@g2tpJ6;jx(t9*0ryQAQ=oYI?%{;34m+p)IG7tP>Wsfi6Mj14g_@ z(35;ygTd3&?#k+QFijT`Coi=Q#H-h?gUhdc*27S}VU9^1x$#;9&SYX!7+FUQ8FeF zxXcO!ewT(hJ352PwuZO*Q!lwo5o&)bdg|^4zj<_3tETbL`fs{o>p4{jNfXOjU4>Ee zMXTsig~z^o45Zxx61sjZ90*LWp6>#t7L@SD8cG6CO=z@0hWo^N^bXoVG)CRIW&vuc zL^&W(zTVPP8bDKq;YX)Zcb)5%zsDL7f3ftK8+CLK39hXq7RT@hwfj|n zKbn*`Ipl>8_hfECtLEIIez^nzw;)S(<&p{bNzV{A1=LNNHBd~wQI8oiST`Z6y)%Ds zBB=O76Sj(KvFbcRNwx0GNz~7$2Y9a2QrkD4%6*#3UV9>6>xsmnQ^T|Y`XDAw{Ro3& zAZGI(>t7A%OHLXpcl~}Q(dH>JlL_`#te%02@hqSfdF2odE^z`c(YVlV0I-S5G+n8% zkg(F90}P2nJY(%B5ULhN9Nf*Q9{h`Ey4vp%lGS$+irBH>7Q^{@PxT4KQ@f`!erTo z+&o z9>09g2aZAvaO(t(QlLsbRsTX0`8H1^IGh%Ddu)38a>gbfxhju2ul?ik>$^vN;efoE zsU=dscq+9~(PLpu+w}N{RvIv&h8@7GGvWSSf{!|zDJyS z$i%36!cQI_KT$g;i9LNpHdF3Tkyp;A?qcJ^)XMg>u!p^Zs3hOAEM*3>p)KJw?IOX* z4xN>mq%O|RmVNs^fwU&<--OT!wNS|R%`-qVQ4evTS`gbQ&JY5JDSCU%7V|1lldLuGy4$tNF8H)$>GkDJ z!<)-J!~N7q)E)4DEwG;$?k*L+dNl`F51HxL5G-}$u%ZPbaWENRjefN%ZGt)t!lwZz zR%h;)I-dp%=XAfzL7snMygrSYP5AJn^E?^#5PQ#&KHp>;| zx0KgWIP5e91+?C{hMh(?!%?|e_Bgsyj)X)-W2ZTdj{!Jn&CmzhkzJAjvo|rkF-5ul z=FTC0u^H)3e;5YxLeT==##MOpTvUr`!akZpCUtve7zJL?c#Dh(mYsLn!$L7zuhvAm zKT`OK^-|a1Rdx*()h!$z8ehU~y|=y4R$ooZU-T3=j2^kf+}zapZl*^NCk~~D-wN|l za_M5sfinDi^QM#BeVn^j2y*u^=_}a4WqSrwCyBxX<1k$l6m?=MtcDTn(^V8yy@u)# ztH-8lZopn4WQDHIzmvql5W3a#e)9406M~)cho<)C&k=MbtNuBz)w4EmBcKxyWGgr~ z=M|sQBQ&YK+vH!RKqtkQ-3ewy1eOAh*ydA{3N~&4>8$=qfQ@>ku0QMLUzLn6g*+i* z)`3hvnCjluY4%7ib-u`i^{V0cgVqkAW9b8Je~}=jaHZ_8vE4SYbAQiw`xK8=T~}|By-Ok^6=3Nj*iXCksl!`jU)kCs3!QaL zA%roeTp@az^7BE^4I>AcJtz5hEd6$?#|+TrMjmE#1gK2#J+W$u<{NMqFp58F6y#9P z`G_wws5u7RRWmh-+!B;ynfknrb0mZjiJO?)x+~{=DCk68cXgKEYz(cxt)AxhWD`g2 zw$D!ypsUK@-n89sRfaQ!+Q*gg8yoYuGJdxz7nshdG7XTu(rRd2nS7Ac-c$yERpm`( zkMp}#xhsQJouZG`3Ot#H#+5zJ18Q$7JH>A*Zz_9)->u43*(t)qPm(G?s0psfemhZD zXv|s8j7${Tn;+%gc?evkk<;Ir1As#fl{`6vYg15$2gRwfG6xs;VY3)7@YbjlRuF;p$-<-xgg*9;s~`2 zsX{rTGTh~|FmoV^PLQJAj%e#7%ZCxMCbTpZ)h8M&PtZ(cU7Qr%AW6o|%t!NlBKk-0 zL7z}WNe|f(1qqRs9!CK(WTq!co_+j{Z5Hmx&#D`dQJABH_;!~eFv3}-2rL2 zYh5s9+NkcVtl}uVjlt^&AzM(FN{LL6GP|_wBkfD_4aUwEk`^e^ZB08(1KtAPs!xoF zx_a~t#lIt_(g&bE@JnkbX3}4!i4=JFhFmW2&6H80GxMJ_$PA;-Q-q#DpiCSkq6O^% zFijDTLFN+z7F)E6BYH?Qg`#~ZeUM-}0hKI!UB1p^llp6Jl3v>mkJ^Cp3UWfg?^YVq7^y zV(42t0=lOh&W%5(%$yZNK^mmwpiA=ZL4Ac>sv67^!E`B*3?FtnAWL`!<0FaIOgcb| z#I05K?wNVY`xG6JmGca?tHq4c;W{)j@+H8R6yVg@dP@@^p^{6^d@G4+bsWeKb7EjM z?OdOrRCYK^t)tTjJSo)yMvOmoL*oQ};r+sh{#YA^vcASST5zfbexD85AK6wYLOSQmut%;exysKLN{`VifPpn zfelaPukV1xx9LaJX!2kHGWB=Np;VMz74i{({pzg4Hv83II^WTt+J2ar!FN`(2eD=i zs`tLLddHgx1!lYdZF3W`vH5N9tWLgvTFI)`MzYw3ENNu02oNrXk4cz;4!kwD5phQ2oL9?vO7J`k`_DIL!Ev7; z@aymUPI_o+G0m9z5ZHsA>gO4ZBQ9M_zsbw1X7`QUQR0) z>Q_O~IsU!cP$opia`55?yQ3?pDsX z3tpRdes7a|He&WA?kfRA7RN!d>6Q-D+N^9wex+ZXc-R|efWewwWapvd00#)0VDn)B z=TR^}CFyr7)PvwURi8N7vEZ5?So=@5rfhynR{qGODyHBLhG}yWHHS8K=CjJaLc5ys zR3fZpli+?+BEX?!)WO6xMs1i+Uwp{~ZW4sL{1-W2*f#85{AkcdR!#d0#Qwb6QR{8i z3zT>~2@al;Rv$>3B-2OgLwJwbwCkfLq}Wcz{vlUdT4)C6Ql(qQznN#jI>Z1>cRrFc zRT}2G$qEZ$*FCK(MPrd?o9PrHr=B&H^r?iIOqJ9Sm&jQ|oFlcu-fU=uOg9N*AD7^C zF;>FbI%un@gA~avY;ijATh^q@x45XyRYJVb4(S03KXXp)4L*Av{#G~dN7CryI%X4c zpGT$?nHb}r&`O>XOP_L(lOPLA4%C0LKR#hg?@RFy-RxjLP|qMIC`r{&RL{34 zHw_(wM)2!uH$Q1 z6gr&2wW0NK;16Ql(e#F@R!3xdI& z`gK$Oo&2Ju+qmS_UKEkHa8)>#<3Wng($8I;W5f#oI{&$i>BYo1*_E|2~gVqowPb3Pxm%$AI7QJg%%-M zP~fDyMhEFy3{rp9$w%mdH zShk|tI|9Sb?jhkUd!(3}rF>#VTr*f_G09s9_U%i0{oCL+?xN%>f> z3;9xU`%Kc~iE>sOgUH3n#vsymvM~roi_(LPJ3_o6Hxb<@0$n>+v?++au@I|;;%VLGf==sWsThh2BqsUr zh~U73CHdCaWWq*WZRCl)FiM0;Vpga4#GME3s+UMV&}-sPQF9XEwyHdxA`% zrnMc&RMgvnNMS{LqzYq1YzOL-NlPV0U=RakU~C8a-M-Sfk`PV+nHsV)7??4+Y(mq9 zATj~>>1?D=bx>=}9xIe|t_!>>qRKzSoW*H61&G*k4XE17J9smwAIt0B+Wn?JY{@s>x!1n2e5t zatjFMG^+YwtFUWIz*MHz*nL)R<&!Pm59D;N%rD9eI2naTippmnIRSNw%V$*DeKY0# zKpLdB0nrOh8;FORbFV`SK^`~Eb-W8ldO6P zldaIa4mSGD>a(VywV8)0J2EWl%{QZ2-yo4o0s&8CCNYsDsvFyR0JGh!noc|>ZZsoS z5%td7c@%>>Gv0!e-O!oZpB?gAXVFu+i2u5B9{poiy{BT{n{y5^*4Uc^jVlMvxyt$2 zj9lZ;_?2^YruaRR}HNIck9`5is5UQMSoCg(S$!Dtp3_^VWVqWH|A_Q;6-32$fo1W>T1MJbgCzuu8!5-dX>$O6Ke z>xg>>9f3OVjgZk~h25{Boox7WCJi>Bs{a8Dwzb>~4{_J?X0HuBEtS|cGOKzQIY^NK zTrz5ze~3cR$z%ku$4EU@cT9nsy*BKvF*bso#ztb8m#u+laQl#$Nz44=lXnX4WyuaZ4O=W=foAH!&96}I|GW`03?+v=?{<+OIh0Ii2I*(NmT zDYck(#4z4R)Eomoi56E*8tGU*GV#h0oXl0a6_#lH@;bm4fq8I74t#~>ClF@Zf6mw* za#O60V=|H=l^oCLD8KKQ6%c{vge)ET0VY-!&5>+S+E$7W)_rJifB~Bvsa-td)uvbs zDw-Tl&WL8webFolV$dC848Rsm9s8lgCMg?Y7xYh`y|ws#YH_$QFO}Vvhu;}h-Ud}O zJR6BbawQTNEepUitPTh?!Q3@f#W*WzhVh-WkZ9h4^W7#$uMNX+WP!0QEp#j)hZIWh zg{T_EvaU$ce*jswQnahHS0XSN5OOGHFHM03R^UbxwQw$}@^eg>4E!Rhrz~Z^@6v{b z-;*f9z}rT8j0!S{*$@#5q2ES(SRL$4@Bu&cK`pEIF%CYHNna}<9;gGhKzv(s>`^9D zy(mKm^FRr`o*ME1vMuwiEeVLD438Q(0Fv*scW#?`S)X?+X~1NYZ$AIA&H1+X^_2Yf zOrtM`K>arWp#CR79I~PTl=HWaw(srkrhU{jCwS%U78$&2_FZ-6-s)uq4p;F|q)y3fgi>&Spm`P`1@(+PnjEdUi|5ieS zyjtP?|LxAMz~eQcE&&sx3?_ygsJS>99Mf47h!IXXuodZ(vnKMERzWYdKYp_=Y`{mW zP$Gavs~GsKiLH@tU=o>&4WkkX)QB6JK%QZTby6;9d4_r*gTG|;f*n%WT8|)7WF^V{ zyEUUI=Vc4&Qk13Hr7&v8TIu{s-^yp&d@I#x?Z>h(*18ALebTdAPev_mL>dR$NQQ_e zMMc{PVJ6TKz~DV#R!ETRXwqo~Xety7z$S?Ruq8>brAIIeFH4U=WVu+6c-(pf+plUp zLJW)rNR&y^BlOu6zf(p5ZkaEH3-kzSNwLL$wH^^9-1ufaf(_1%9^ts#mL4$=V@P@g zspjuMJ5!Ra&?D4z=n33(kc zg}d1BQj(Sq@m%?C6x&8clJ=deO;I*Mr|E=bbpAB&nd92qS7Q6Wnre`;A1ys&aFL#|Q7nv@PxkQZE+q}nG_~{$=A2v~ zHAhU^1xX&zF2J!?(g2JzqLQ-Rmsy1P_%hwhYw zmtPirX__?}u4)d^Nz%w61A{6_FsH*SC3b3;vHqTlLFo2-i;u-SNjb$cSs1vFY2B7{ z&DgE-V*ZLMMqQ0PCxqc}p$aWi(JiXGb3`Tu-MnQq7wHWIY->@U$8joa2IfrVH;7I8 za$V((7DW++28@)IbYnoJ*RXmi7xtP=d5d>fS`@EP=|=P3;%zPJ^U_98as)#b2Cx*N zuofkai6P-JM*^p6S>#BP5~bm0lmvA6j|IKpnSWw@xR)*rt;cy5%+c$ZOumSC|?w zpTd`G_I3{`#X*OGDm#R<7@Q_s-hTROZ|$sWLdOH3zeW z2~lwg`FbwcY!Aps)jHjRQWE#HnG{Pd zr(=j5qISVeH3fo;g=o*YPnVI+74pu;Jsr1k+QM9ui>MQ72KFPbyrnd8;U9m zeRM;%o}CjZ&?TyT2I9Ju-y?F#q_Mgt9TS}ti1>C(Ko=@W;FDAo_OMHCbSJOcpWVeB zpS`V|e7Gv^rRB+63r-pl+0MTg?@F$dxCr*ypZzafFaW^=^?{5Pz5Urg=hD3?`wlJ` zi8Ra6wPnL7#Z2balK{?|biyR5now<%L#EWkXNOI6d#OkR>m+i)n9wYPfyP}ZDi4T?hg*Ic-$KzDIjqV*V%^7q`7 zKcRPO6n%;u%V)iwPv&@4t+DC+IMkXIJM_tQtfU1luZ(n&IO0NA9}^fTc+^l+9N&53 z3p+#34H_c*rlecZ(s{QebYIHVmIU!>?E2stMIqL2n45OCY^8##+JOr2qj`CE&lOkW-Et6j}<(RWCk)E)% zfQ*e8j)k83d6lyLd$h$L!30r==<;-}{gJig`_u@TeysipPRnvC;enElaHb>uPuEZY z6=oyBmYU>RBDqvs2_zSUE9*kRG~=Fi^r_Z~gX>fkuBbn3r<_xfiXa}@$&)H56$^bK zR6#ybDC_tmNqN{?B__(zZSs7jN~EA&REe_At*r#EN+_TFQb_PK0%H5g2=AFZRWqcV zBjH7Os-znZ4r|cwLgq%YHA>Fux_H>At*2V2^8*>j0%t}AxkM%?BwC)fot9U#@KV+Cd1T|D* z#T@#fpp2a8tUH_Z%Lxt*)4PY0#y1lAClztMRK!WCh+T9ud`|vgQW_e}6WANa$UVoe zq@j@(n?vF}H%FK-W-1{a3s&jp){|~d&N`RUBjuli4{xI=_3DEfAF)p=9oh!w#A>OG zjc$^uzeBxA$>j{*2DveosGY0F6)LopZ`GFiufg=ntK&AQf65z$`$xWADlfa?X0rM> zyH@?vEVR@=<`ff5t^Pp{6h%4*fyjhI#UD3brROpT5_I?+SJT=qLddhGv=8QDy&~>r zb8}V!pMyF}QaYz=!BK(f_gPVG>N%+^)Vfysj^YGh4|?@+8E2p}3ZtXWlQ~N!eW2;} zzxOdUKK_gX=W<8`*XIbKQI%xnK;>xZaT9`u=SMeEkxYgN3 zkCR=L!u=V+9Bv{Zp@LPAP{d!fnT0m5p6{}xy45WRVKBpY1>eYB-t=Rl|dUG~03lP>{#z)-4zluN6ONL8)WsBpT z<+J0OsF)zpEVslM(A#4C@V!(A%tQbYBmC2TD3aPGFhSCuR-NbJqASLeWw~M~Ppj

1{N<)-f^!4rED&Sj(dkl>%oMhk5vlzh=& znh+HYJgI>2HxB| zS_C{~mr)9>fh(Ej@5tvRvepE1(g7+nI}KDTwHU*MlFPmecQ7A@f^82gs$Rf((cg)JHRrKsUs?=|W4JMpQakDB#;rmE^39Bor^?<$U%xoj)w|AI(K7*S74FCODUv@ zPIOe3zeAGAfnU5Bt`RW|{#Gf0-zcUEv zZ94REOmZddsSnF2$hJAdd5~ynS18c5tmU!nYL51czu-pLp+bo~Ki`eo&!@v5WBe3z z01_mHPC$(;hgiowCJI2#^`p9Cz*x=|SlLo@!HI=L1X!p>>;+L-)L0k?(E%aUbRufc zA(Tk&s#X&GGB^eAV0F)x1*;k|MtV5g)1gz)rcXl})3+v)Xr6p|tV#B76k7(xP?x0y zp=(6cnIN&xt{}xkz@VIV6eU7JvLJaGCE~&*l!)gX;-wl-wiF2oQPru76^W*XpEPbEd-xie49T~?8x(AQ6q_)9AiIbB|@NYKdT6p5#jBJos9k(hr` zWkMBpucS;+-OE)b_~dI>CN8Sv>#IyK?#n9^8&)Y30<4q?0rnfDO#IJpurh(oqOD8Z z7`nvnZ?rBUAdhtkp&A0Z^fPW>f-a#CUPPC8EOZH`2u8@?OY0IYwMv&THPHuOFI}Rp zu&qmI_(_-W?Kf1H0ELRby0R{ToC~qNq%L9E9bLjY1iHjoF(!ULBaRZH>J@c~xtFL* zJezchbC=g8SZ1jo|NrO``=m?2A=|n{tD7&PORVkfC3T5?UyUx|kAS}9@h?i|cqzJs zKf1Io@z?!Em-w5PsY}dM(V3Pm0fekefH>$9PoYaZZ|oAnaHf1-{H?m&^j*3Ho)5G% zX%H@nF0o;aF7aDyb&02tP!*6l)+H#iT9C%t(y*?&1-Dhfi(BeYL5XA|9A{%)Li&Qmd^mHhMGW|8HdTT?Cr=rF zLzhtg%FrbW1U%j~N@A@_Oj>D>J9@M^X%cdgqdv^?h186h(6-Sbs3YkRo8$a%yRgt9 zaHzqeRK3O`4H@l5*1q*kdsosT=$UX7nRYRnYm^99My*6lqhU1lS%(-@nxQM{5OSg& zR;erN5T~U>5UGkE^=s520#nfke(RDt#FyGS#3|CyuF@g&%~*$6l29xa;>$+Z>qE$2 zk_s`Vv|o)1aY1XNRw05aUsi=E)d{H(Uv8-oP-d$Tgm7Ag(DBZ>>;n;B63RhKg@8K= z(HB^#YgGs<3~Lkzmhv2m!{3JDaG|9*{I@lV!`aIz4st5g5n{3^Y3*-GiUWIikV|pM zX~W8wudFzH`4Wo5-?bG7$Cr|tM%LHK>ZG^*;(>_3M(9uM;-Rf8=?$2`s-^Hh;D?BK zFuvt0W~oqn>iFb~- ztgYi~(-Js^aFxqp$pYML*s|WV(A_swM*v-l7aASmg+zHpWhALF z?oRQKW_9QYHu>XkKxz{+Kqh}O=>#jf!f~ERzaQsX;l(#6Qx`5UxE*7_S1+G;9_ z3Yb2qi3ySQI

8I7m=fC^PwHsv)qjoU!xc z*W{1H`Jrnl0bE-O%P9yg-s@_MbPZl?35A98QbmG^%46@8ogX^KfNG^i!1qyDHcBxd z6CJ%!B@4V$C3E~8ZPGiPC$;RLKONM~yU_ykI-U$hh-BGbk8uF8a9(IK;@o?)AbrR> z*_!4psZB)dTesOtJ&NnxH_JCq|?Ya{Rhtp z4{HpqJu3@DT*eB+&zy>2hm&ieJ5XAAUE6s&m3F>uuSD zM_lT0-Hu}qo1SQu)Sa;wRa8P7Fdmc`&9Kgx(AA!p2tA|}vHe%@#1N&!I6@`~MT3wjl&klf(4v#06ti%lfF+%K;iyr?qloF&h9zx zmnE=>1}K{0@#Y+JmsLcWg0XdS37+OUCe-h==3k+0Tj2Jh4k8`Hetv0JI zQiQ}KH85O+Z9{pZrow%=76kg@&A`iDt{0wGus3OXM!3rQCy5TT*5e#zplM zg$|Pk!AcZSg{U$7n`o)^s`hTENw+%jpFTZfy&hL_Id8q5c;yQ~fqE#^*6m-AEOpX5 za73L*k(;6lPu5X|AMX*HBl1Kv7hwE2QH2fx1v}K zFNT7T=>vw(t0Uwk&^1(i;+aEqiIZ&EM2dR9u~zSOM4~F|wjF^!$`+PH)(To)r>Zat z{8l@vus(xUK~bxs3OSHOVVHcPz|8SSt*AoOkkF{EREc~=7gf?y@taCafH8nj*%wX?KQO@ejfU8T5vD z$6x9B0(K(%YK!^@G^m_3{5(jzDX9f}=lNU<+(|9OwD}(-M(V3 z*pF6+GN==ESq>tp1-(#KwSva9TyA&Mq3-Ljv{DD1X)~HcSM>)VD%fz7f(>H^5JaK9 zd0t8!G_Zqs39>M5u+FUfdY0|r_+F5 z6IjmN4&0}kV8ch`Ak-8}>F004MJ(hB0$gyg;dJFvwc0;jE^MPH_3DEfO%a%7I^Bp7 z#wXbV%4ibFQo)7`Zc^gCq6cf7CzD1BHmoaDMhCuiuwlYI>HfZLlz-Y#u%SwVbrEd1 zN!(@*c*I__4Im#JOta7mHe^a$IW3?P3N};_Y9Hj;S7b$_7w9~jzpfEQgP|DCIcjP%mk^_tuP#kWbLK`1n3!4=`Xu;;R zA6yYOr-;53Y{ZJ;ONJ1gfW4~k=TQVD&{0v{-|8ICG>NpHojU>v>KhF8MlArN|eWyRo_9X?|lwt>0@Lr;#YmfbsY*Nm)nV5tCU| zZdlFM5td98Z-u?GF+7b|^o+4ttAx}JdGTqDw;A{u76(w%Cc;q>D$1kTXrs-|&M`J2 zBg3Z#BRe!8w?|l!M7R531)abv>3PJiE{Y%lM1&=>ofwFAosNwRb1p-KrTijwgypAT zGcq#h3WMkLNUoS2!Yevqz~Bg|_F*3&br4r8J1N2vLj}>4I04>7r4v*;;~I3}$7L?Y{=%)=tko&EwLGj~ z9O4521RE_n==}!O4ntm4 zJ@iAi$UsN`fauo=55P6k4xWoe!V#kma7Ro}c+&RGDpTw@zEcw>-z=pr>zhSY-k&`s z(PEmdbBKADj_*9idK)j`WqyrU7sk8sa#nxONTC$>U;(2|idnFl(pn<7$)^T&b`{7E zABS%6-x|Ly=}=A&oDU`RY~@4IH)GR+mGehf{lDYIw+JS(#>m*#W`GjO)rAWPb1C$5 zTBZejXEfO~tS=?gFXb=viqDu@F+2(-X8DwkkK^rWLO|Q51@Yz(^na)2w`HsLNzpDg z4k!VJY&GP0VK)qkkl4x)0D-9>;&oK?@!9sDUv`)oV3;^Iw>8#^&Mp0T(JI5r-h95(BrIfjj+|0 zPP1UDBB>y2Ah&J}a~)SJ!10`JwiP z;`y^u;ae4UkD>p+wNww5>R54^vI9~)75n+n+ANPe`0vrA`DX8?^yTlE|L7tGWYq)5vboM*ScSjw#Vha>_W&RCl*E8w?Na&9C;nh%k+mqRq~*!y#xn_IaN`*H+LQa%$iPa?L!D}Tw!@D69by`e z+CGngLy0|fE`|?P>(qFoC$Eh|1Ti$&Lao%tLikB-+tUs5eh=B*S@Fz;vf@MN^E~2wdB!r)0)SP)%jK?zZBe$eGH0|P}@?Oh;!D3u4ob+in;{!SLaKHE^wSbqN|X;p`6 zc4TDW9e8LFOyH=`Wb3%+9L~%~F_x@3l`X1!n9lF&90Hb{@+=}qHb?%dzU*D~q0JrT zbc}cDz-D!mlZ4!)zH zZr3~>I0D4qug*DjL4yjOzZc7<76;pDe(8NjLQHg!jA<+?I2aSI$rXWTuANE2IGOs8 zmY8S#WH;xC5ABve4=D_;=}xrMCKp0_iD)`DqUwHMXl;uK?+)TBeoXr#C85w2WfB1A zpoPlM!`HP@2Jp9Oi{#GydqbOhOBtIeP2sx52aV@vMcE!@+m9Wnn2Pt-@dP3$(*kCLN~oHX2gy7(z)#xQ*{ zV@wlCjtsrA7y*|2^aM%Djl$=fm5JDr6~9V^K>bgnK46gscCJmY62??SFLnzSFnrmk zg1?;S!LH7d7ON}KubrcAbBN{{i?JW@QvEBZ&C%@srdR40u=sR3LToFT{AH;%yg&vB zdsylxYWWP3>M0Z5FBsTV)KsAvaYgk9Nd~2&`iZKLuqzp})UcxarMlnHnc=9X?n{1` zKaElk*4=liW_RDlnKc8by=`@Ca)qrPf|${msZ~G7uYTSCdU*G!-G@DR-q&vluvA@q z-_(vu!4ul3pQwg=!eb}mQBPVS2N7a|ja%`MFCI>FJc$~`1nlhIxmO%Vv&xU-Sx_Fq zbUFx=h^_<-%1CT*29A#91<+Pcf0L)qz}cx@1rbv&PL6d_ADOE(j+C5(YSn3%pr(ca#UTdj5(rcnvRV&brw4$juJl$Vw(t=gw=%gMYXEVlbrE+GBI8ctLfmPs_|9v@ zWd2rI7kX(9Ohlq!F1T4H-iB(GR1s#qCT>*%siLndC0SD!B2!$VwyQU`;K$y$F9z8 z!RZggI@XhejgXnRJwm3aC_*OfH9}@OZlOV#BxD*VBw7NEblyU#HjzWYk5U4qNCUHG z7QwS6$)SmDbvxsY;7p(8P>Sq(82ay;52$8LddxsAJAhRXsqeXTUQnN$L#GQ9ehUsh zLLy{T(dTYapFSe?5_1FNs@WwEG|OgHcOo_cwG5ez{&+so%QW3G<%t!M0fccg9Xbol zE+79gpKwj?wRodXO?e>82GSQf_$wHny5OCg0dY6d6MX>eBaWfsJJnTu5-3XKgU*6g z(G@I>vf}l@1>Btp>DXjoe8b@+2o8R}?D~jVv1Ia73yetuwq*GJ+3YGSu=zzj5`wr_ zCIFK8%x`b*5PzhpD1j3E<7$2ZMe(D&+DzL!xC-qQU0(c%hjJ&PvK_`sHCYTt(@_NT zf(F3QZauoZth}JtM`h@Xa?WcOwA!H>o;a{9i zm#=-e1!eFUjn8%iiAkO99HAsIb{Y@l9*sR?AGBS#d?9me^NqYRVB=xH$_X}Mu)0zm zNK|TdRULBRuC1d^5DFS8S{mZmeuCoLKZw;$*;@#`lLI%y*N8I@M+_4_Mg5 zJjfPK5zFrNBw}mIQsb8g!rf}>Yt>+3|R7$>@l?i7d@BHHP=0*i^)oQ zOMz{4Q->|dDW`0Ew1R*~Z*ky0FriZkFp~>^X5oP;R-3$>iq*!yPcSPMyNTL?%PliZ z^c3l0aLi&!mnRjP5Dr{Zme}nfR8;|D!y;9TLJ72v!+Sf$FF6+`aXAB4!vF7}EoFR> zMeTOC8>vKlkbsguoG_r4=#Ja8_jXa<+W zeafL%`)(83kzkyLz`!ilf>PbtcdL>hT=;H%(ysEV#(4zEcdI#Q`EKR0Y4U`^B_I#- z-cIXA_`@udpbD8$!Pno(W!fjZ$j}ous+|fM$&~5AzXb*brwMYJ7iSvSEh@xbyyz_` z0voZCC1NX@$7LVZ?cKDyP`ny~4%))SH(NCmf5XfM!-*u@2Xwe0HPqTVr1D$P%oCF% zq76>^2Rbh^a!faJgL$#6n8MS@Cjb+-ib4)Hhlti>Ilm=ruKpx!hv|bYjB{sxiw@81 z&~d~9`Ef#l%_VtCO_4IgTXlR%>DnY35Y=UU%Q^U*9>c?tE>m`pC_O$6OMnRwQ9o4v z?V)c9W@6$YDLf*%=p`z>sNSe7@Z{Cz1uqqVjAGIl7c2;+G~-rxP=b}E!lDW)@GM=W z@79Z(uKG+iiCJ~7af<~84m0ugu!rofd9j;7qVd^MXx}VQ0ZN(7;j&`8C7)WzDGwLF z4F-u#`(jz7v&saMOfS1N=O60Urw%q&3TDfqh>zb?#&FGX5TTgP=gFXH14ujaJZ1HqH(woRWkXqhK7x?3{8JY!VkxH z#>o)nr0iw{ZwRH}L^ou&?C-!vId-F*YI=c=53Xx`OzaUGLqj$sy}bnq{PMDS0Vz$( zj!^uW7AgMj9-8%sLYkBGL?8K#Gy3};`wIVcByoxji~#v< zzDH(S&Xn$=y!<(R|1k>>Mc8|CNVvI*q7=%GB-yT#^I2ViHEx4mqp^^jPc1RMS=BTW zR%)T3Y^aM2S(cHI{HO^u@EPs&&S$hE1%N5SpcF~xGui<`oYAfuK*Es3E)5Jp!D9Ch zWC;xFAI~HP3wg>U<0i$bw4jS{zMVpxmqsbd)w&+#vv*5AX$L{V%sdn+17_r1n{8Ym9--g|2%4#fTHj#v+?t6)&-!?1TN)7+;=CMhBXkU48T z_^3KFpKdI1jj~qO1{Ps`=i%OgTcuG+Ugey<5%qmHBP8s^#vehspetH^Dp%%GP)i{q za`#P=r18G-%*X|m!G~6z{@YJbUdVZMFetMj@e_S^J)hmil{3Xoer`px0ruXYWeb|? z&kmg~IUbS5K_L^_by&Oa$+P$Bz*umB{sWIi8M6crdZfFI)e9bWSeMf81?2#V^>Us~ z9!_`ZQhaKf#fjAYF4wB5m|ZX!jVC|S9Gxns3JO(zAU_cErAB=mjL$3;RU9yL;5uUz zRw8(+W9pThGEm%1rg`(IV!5wsWUWdkno({^h|YBfbIL_T#c6DNvdi;;31Vq*GmFhD z)6JIAl%|LvyPMzzNF_QN8ucv1Ln~p3a9TAmv2KM$q<}v4ITA&49uFjBi(ca+%IFgu zNM>viLdc~~pEi1guEad}poNj`FgffHTAl8%mBjJ86p+jgc^gd#^m%m^jMjH$mQGm# zO@wba=$LXHQe*vYf3`(rzpadwaxr#?LQmSaWIzw<64gk77HXg&rctX=?S^d2{;Xtd z4hNzm7FxiCk}(xrpvUF@&Vo_GQi9O9Q*A(ki25{cph9W2f7TX(n`KV{|IpS)bX}M3 zn;1kFvWCgI%vp_0xXGR-h}Ix5#g{SR?uX#Oq;lY@BA|v}vRJs*b_X~B)hfUuQ`?7! zg8t0R@8`7}5!{{-7SW^nIPb-~OWX{k$yX##f#TFX5J*}!r+P=$ZDM1jiE+BuN16a$ zB!66L9r&MOb(OcDUxLI0t49hOHI9$lh#(nO2NNY~7Dcs9sY&2Z+@;JZ5`hOkQVt?5 zTw=g-o`RkicOY7>18~$NJhZ9NZpqd@A^4y;sZY~>_M+3YKd)JEC7qdDJ8AZ)!LtNDXP*bz37;V!xTcg<#r*37 zu^Tg8E-DqLXgL$%XGN4a_L{+P4N0J;jJc?wj=g3CFYnmvv&w=haZd;eK3eiqs(2}s4FJ}#U6JtR ztdq-xA@$pc;aukzoqJ8pk)Ur-h^9C$puq_rv6PQdP)mj-9{31)*0U1bLSf#Y(P5Sx z9mXg+KB#!L1hhQ_AcEKOmHyxM0Ng;K1r;dMsN(RxT)}qJU)n2a|MCw zG8KOIXFod~6`mzXx~cGUJbsZ1zdeM0OoG9JkVY9*AFv+Pas#E_HAEAo+gxPF*Bwx4<$I~f5EA?DjcqJc5R(#MB_sOhUFH4zS1^gxK zthEaf&cjwB+!)PQ;i)^BHrEi;RQysec6z{NJn)BF(MyDXNcD)7D?X-;N#9Fl(uNym z2!B)q=f?a|<9(2Zk;RA}My;$nDJ_ieM#%>ZsjU6PV;}HtsnC-EtqZ8Q;Oym>$ZB|h z;STl)R~w?^FA3s{HN<5j4lIx+TW!?Dkv!ZpDB!Nx|M4>e78a6Ib1YTDx4gl!)pr-+ z+)Q(9_Vg@7s#D1*F*~akkRzz==OEXi`QBMggr3N37?2dGGiBzEG^u}yEmHw*`zIYK zV6#Ux&JA&iowXK+h^tG3czy5^=l#^?FZqj|(P&Q5NS6!PG^QaB9PqqD@MlA$A*-x*NKEVc?zkHTUIH#XPfqaX6v*vo)OrtOsGiNFh_bS@}?wl>d} z5%`(Rvljcsm+a0D6;Yvn!T_wbVVRX2nC!L?#PR7FNPKkO_zq`U9U&~HCDG8PgdMUF zM@+q%$klzBW0?lRo#kp&FtK$_NPI1Q$cZG~DSjiNh!|c$Jd{nd5e`=WDowfP( zSc|R3{sb{IB)a&K)_9Q;;{{KhFb(rUGe~~4A(e6Frr{Fn9sI~KF4YP^XbU^Wzs)>r z7F3z_M(q(h;P*hG53N_Ik~(qh2phL*p06&=`vs0PuQC#OBfQiP?dt z$jjp;d~BBNk2R-(%g@MzV-H7TOtb)6JkZY%2$6A{hXj>;I4qf3XqBBvlrzG*wG6e~ z_9gp|0*?8?6bel-uvuhg)At|9XWwRh$uEY<_Dh$9*ozR>8oKmvjfKBtJpulfAh{TxJ%HU zXAXSjbkl}Nd|SII30-@GVS6U^3|vLu*2%g6#w!l~>e*hf-7Use-h&`RY0%AFaK6~EPHPrnxmV@ev2Z#Q zHQQToWhE?L49h1_{EdDR?osobbkx{waI@Nr{MFm?IS(=HkDCd)MJ^a?N>M zAR)X#;Fb`EFC6M!iCn>Ut0IuD;du}kh8zN5wemB>aguTY0)DzTQHu@a3#)&{+iva= zEVy?qBDarVL2~)#2b+{ZLyH?%euRhiuAEsL>Wwd+COpA*b;N1&$W`~uvx%Y9Kz2%2 z-IqLoXl&O~ETQT9DPxYZy2qKFjx+mHn%NhmGi#XPk={;bQXynSsaU31gY5NsV$t2k zg1fGIm9vkIh3MAoFY%2dVJnQ-+Jh0;90sEVEcZoXYA99k**`9&h_e`jl}zNYl;BO# zkqnpeSx+AX~TLTZHyMpejlLW75KtV)FB+oO%c zn2T&2ar6=+>a^kUg{VjbWf7!*cWX*gidT*Hd$Vjv#tGOnHZ>auW_{cNT`uN5QSYbN zdWiQ#;!+D6$i**N1_^ zNuByLDj$XlDC(yD;g$UnB)ufI#^<-@h|rjDH0Xfp)cw%od61s~&w~Py#QEjeFmD7t z4EZah%ggOh`XJ-Kjc_3`ZucOsc55%JyuzF3fd6=0YyRz`*?AUgDOpG||{N+%4sR!XSh=Ifm9)!g# zn9Le+2UusfO#B+w32`D_-~uVnw=SPclky!Gl(_eB7BQ72j}p5 zQ09b|r81{YS+2}AJNJx(@wPnSSy$!V9qqixe*^Vkwsg^M-a&-B^#w?F9|CWZjFkxKB}Kf zw$9>SvOP4QhTsY2$@F^D7EpENJ)rujp)L5UrJmD0%L77XdOiZ8m?TufH4s2E8XZ(R zg)=;z-V-01k=g5+GQu)rj5&4W4lJ@sehVO{;nwqY5wsy^Br?VTqX^$Dcd||e86O|M50yEJmMXk zP#BZG1ZG!fuOn8S&TJ!--jwBNq7tDgulBR|6AZ}BAq))6MLe9-j;YR`XNmbWx1gFF z0qVn4JYplVUf|8_Lf9nEglhn7BHk5LkqHmfE#$ETI9X;a)L3^DEKj0=Wk z+{(l7_czNh{1*Cw$E>h}t2J%L4JW)zmr;fEwI}IrKCQ8;%cO*4U;-3QVEM*fH)|aqsP@Z8BWod8(3^c=G=EfaGkW>Mrrka8k<#^XUgHhw+TiHToi8H#=v>Js251iYXAV>=K>-44T$eG+R;>LxKkgD3$<8 zakVKtUWNKQsg5ULZO{pZC1%GE+wH^~Pi9qls~-G-*V z%P&xd9p_X96STM_@i%dGew&D}wUsdh{z$UweQB6%nLg2eMKjwFc5)E&p~;n8x>7D> z0wIaK5liOOHqB~>AI@MwS-1+YJp+RY46$?g;_LT;I<90M+Sk%q(!shSa8 z4u=QxeQOAD`1DSr(B2Q8BRFvKfw)g=Tq%%keWrbb0?DV{sn)Z!_gSfN`HnPtdo1)W^WqCCxm%W|aCo>9#&m7xQM z^FnPMsR9+k^*bM?jt9bO?pm|v*&AJ=*_7kC{|{(1U=!6t_%Vd)!$WNg`4SFtSVhmmS3KI*)1Rf#gJF%Y z(9a>LO(+nf?#R{GMO`I{gA@rz*J_=sOnyLI=^){yRqjhE@RlxJZvtg1C862uGq^Qw zBxANC9y8Yxv-PBs9&(3Btg>%X8L*8tjfnrkywxV!fpOs>&7}p$`RAdmKqF=imqw>1 zqoWEp+E>C`3J%O3Ni7`;9V0oI5jNSM1_Z*9d@1)lQj)CTzl0*Zf(4JJQ}at8++V|) zM-i=YLWX2cZ;;!x-Cj?T&Wrd6#`i99rMhtbuxeCqT{=^RWH*0#=;HZ5!>YOsOLEpM z#t~n<6@&2pb8Bh9SbRdy^hlzauPp0MOo@Wy8S` zBp08FTUe98K+s|_Gb&(~!FcnUAcrVd%crF^gU2c7yI?em#v>iq+M@AD&qc+m4*Zu0 zG~TjlAzDoqHP$(rHT$U_?z-W zu(YTXbfQwrrozmNE4kcY&PO~N8xN=4Jf`Nb5O7ZJK4m$4bXvlC6p?fb$&hU!!6+ds zf&iZvn>>7Iy_6$~QC2KhXA{?En%2PRLOvCe)`0VR-O;`fqLV;3|0*!CkYA-Mxj$gr z#(yU$Fl^hHNMZv2K##8nrqWbctkF3XC$Q5gQewXS@vPjofhs{e48Ss(JYsS^jI!Y2|+mt zUs*2EiDX#SRVioSv+AdmMCeX0q=+$jT$n73hP{m_j+`cW(hkd&{`c_>6Oqc+;q%Z%s^$s1H z5cfY-**OWQE)9*615>hd%BD%TYzRQj2B{xpd`2D?E*4rKFk#Cs7A#Cd3K(iW(l)kG zR&BaxQd1BOd{NpgMW!KY+T^Oi4@wO-%S1xZN)!-VB_LYGz9oUuuLgo*XCSoD42#5Q z6|*dm2dfo34^|9cK5n&_9CIJ&A&yBChCIU3B@A;P(##+P^mq?e{U+Fnrp?Towl={= zPB;u*L5YF4>}8c;OmeOK@>d$Us!W*WtFxudl6Yf*gkr)38A#|=Ik7U?mHe~8l#BN< z1n1gdi1m-vFaU*_hYc^nQbyGI9Z^Pv=a*aUDJy^~(`&*PBqY5$+uQBin=YgFpQmyy zeUx1&O;d9K>#?9*ALY4a@N?xFL@t%h0=SsGy(%CeAj=~DlcQmHJ4$4noW8Z3RBBB?@pi~`T* z@kG_^a9JJt6GEn^LN=~EU+gQCVK}7%OR70=U2IlMA!fidU&DWkf@Dbkm2-Hwmu)V= z9s-MZt*8TZz*?*kXhjbM?DMA1`;9U6unkPrTi+nht9^xLTd43CHUZr`G2;E`)xu|*m zGR?p>4k?5RPAk!Bgs<1 zBztnHj;h%3EuyD6TMn$KTegbBrl^;k@|@rgr=(5el)$VHs{~MMW0eoF8DE@fQL(ja z(k)-vPqzd{OLR-}4;!Fhi~wrb0407I05x0)P*LH8ybMsy04M;gq_&0vQG299x^3Fy z;&93SX3mrS!KdI~9=9MKb~vy<_z@81?LhWtfsw|MIv&$HmsRZVV1M=prWyO=GiQG> zUT%M1_Ggleyv(LZ=PXET?2ojh&BMn2aN-&Jqe#mB4pRW#0&thj4wu!57uVR|v~pI7 z{dtoq`+MFB?2jS&SH0}da|G1b-#1oZf1IY>WdVM$Kl{^J+qM8d*`NKL6paP;XZM#a z!~S$&>HzlV-&X98=K8ZgFPN}DRa#?zCzr54&MG$chh1j?`{T4);Xa4!F30{p)Svx* z6&SZoV0Fl&{32h32Uhsjeys2tVukAY5>^PnjTQdezzR8kxyA}LmdFZAt|uim<%ud0 z4lo8KE#P|7w>2Cajn z(3*N$8d+`C=0;X6mwmAe2SNv^7~%fF2=^KzJ>9O1$+ z3bT<$t|%sIoYG>dygpQ5V~;W036-E*TAoCi^SMVY+|MWpREOUJ&&sSx20P5W%$cc$ zDhtn*4P3|{ZKD?CZhEGvi^QpiQ>UC)GNYy{!a`9M@lCN7=tPU=FSpyD54KAD6!nGb zHe-}h%!Zfhi8^dmhRSVAw8UVi)M2G^AaGo&?qHLHtdyL4RvIZko9-}{p6Jz-HcFj| z8%>n*Yp^sA7D_8v^2uRh*2?8)uusl4>slfwBpRDM#jigg$vC)SIe zu2GfM9*U4a>6|fH4@Zr8f*0)>VjlfF?hL9-Z(dZ8q%o42FlQ*6gD7;9tDzkKQ#uLxR={N6d&cbMA+ty0ylB{dUS21ifbZO z*q&4GqiuciKE5VQ-nRTkw-4n-SAC>I#$;S8vdIb^3Z$YAdDDeD#Ljn+N-9XL7b2T$ z60%{+d&q{2y8fWBZLHow+dX9yIuLPfU#ge3JyBMAAmZBgQZJ3+DX@frb+;?jBJLyb zI$P>G&}K@Ee?i=b79o@XO%PfQSYXL{@r($CiL!0=6Ac!v>@!L`ZVEO=xv=4H8AiT@ zeUAqAJ!aACL`ztf1WdiUvuDzNJre;7I!`lPC`{7Q3>P|o+#~bJ`4dudOEuT7%zRpw zi@iz%V2Y{r*_7Ng*8nJQTJ8Z%1d4iaT*>#L!2SxujFov+u_B#>VtO=mAOnDhUUFoQ z+ZpT$OeKjDfa@q8#2f~Oj5<5zXB{ue8ckP`!q~gTd3-|~BGX)&vU?-mZIhd9lf<@a zs5bp}XVZ`J@97_WbN{sQJDYm?QBA$bU^=ogO!UD~t$hH6;nsw9AZmVRZGL|em5$XD zzMxFDSPALDX*4z!o9J|-*mOh8pz)z5a^BEGHd%Qw6$aG1*HSovXo~wRv-K@-Vn|Ez zVxuIvQQS^Vsj^%6@OIkp1Yr?OH9X}qst|jpxDJpNH=sJvyJCQ-*bsX|MC^4!?2RUs zjbMMEjjgX5GkP~_As+}(2)RJ$C><A)!NDfn?rg$;pq;erA_ftm0=NsQ{|3|I zbJ>lQjwdjK#Ws1mi zOaFvJwCj7zSkv3txx*gmM(4?*EX+2%iQ$c!8hRpxb6^(aFE@o|$ai6qK zKcfbE;!){Mq_60g6l|<{xpWjht3|R_b#_vk{I|err#2N4D!jW}ou=+16V!2=uqvlF zB5-Gi>c=N6fXtr=thNs+%?hM2%#3(nm=JjzpW#`7TD@tD92m<40K8ZGJ&hk>G%$9g zDHTW3W_l_&Dzrmerv2C0`n-`rdSRkp4fbezBH#iRS2erk1}bS#271Q8Lf>e#tGZup zZdpFz1E_;PRxnAOPJE{8mK8&0;~5|;_pRzvi-p{um-3cO%ZwmbKW#y_N`uw{p`}f> zPTGfzWx;l@h(h!Gb4i9%+}lBLxV~(n7jss0k9GegheT>GeehpCHu^7*1d9^q$6*Y^ ze;H2gkr~8qfuL9Gzmds0Yc9TJQaSbq3X?#BEwC}oR{8+M3WiDq)kg7HSuCiG!!=76 z;;3gRZ**Qa+$LqeZ&Z`buWlJ4X>k`D`eNSKG^CWqW*Z`jGA_jJVf$AS!)7^_-8kg8 z%+et15QdA&Je1ZYu!M?A^H7quc}UCh)Ij8AHD+p52%Bn-5ej{cKM!s&D3K42K^hEe$4RH&97&_H4{oC zjsU%Z9_!<-ZzLC=1yirh&TfFKLH}oTTrO$<_*kPeLv#Bk;&dWj8z*O%p(69~Sievu zsm1nz+vWnr;)1By;)NgF!9JT5?A*bjy6n~nrWlzgq)bW^fYZ~s)x(nwFuniO|MaMV zY(XiDb1WHU5)LT+b%Zq(sBrX7AmB=9kD4<+8q_&)ebDxyEu;z_mSy^=6EfXCV~T5~ z9ZA~}nO6VApUwcMs4RUc)s~pdhLS$zaBAae{=L5G@(CNmjK=|2o)Gt*H3XW@e>1x! z1c^`IxE4H098snG0IQ-YVEcC*VP)TG7-cbzU%m;B$OjuC|NJ>#PvES2OmLYF!U}ba zO%0c|EMjSjN4&g-Ga77B~wpSZYj zJ3FMfD5&`v6jMBk(S+t;Vg%#6R=vUUdYBnQ2D%7dj)nv-oQCd64R$pCh*P%48n#fE z=OC6l?BxVM{v|je*#3S@Cp0{QNm-J!{BBy+uh;Yup&i6qu|Ds}_8eB4KF@YWo(hI| z7oCyEJe&F5X9$Y{VS9_R>^7gZPBi;x08_-ampREeJ*B~Y1n|rKnHE#wOwsQEU`p8& zosAkJoAcry`PGUw0Q&6f%;6amxgW8)K~QM6tbxDvNl%_E*b^!#t7zf^g8DRzXY!|J zACh&~v}GUbP6373UEh8r2tH9`HLKCK3g+8XY}AqdDo5BcHgQbKLUC1dp*d;SQ{f!c z`l2^vL!%NB z>}c$55v0S6&9r>R&V?BRPQI@zK=DnnYa{BKpygeI3GJxjS{uI}8rjjf)ho^)c2p4H z$BQwY$e0&*+o-4@ep;k##;E{Wp=8R6j@c8&7MYVU=q%`bmye1Oi6wEE#jft&cYt6M zyEVsh)gB)ug&h4a))l%4PVZ48!A4*t+(6dgE>Qn_wXz)sJ;ZxtUaM@ z9C~rso={QwERj5aSJCp790{WwhuaixT&& zYb$>|3_~#kzK`t95q0fz+FUv^(MQ#5PHKlWoJX%m2tl4OF^2iCWDzqao<<9fT5%B~ zXuJ$jHtt+i4wuMIULtlfnrb5dMQq3F^wD7V1!yK|&`1=6?l}A~xS1H}9xA28eTKRe z5?F$_Nz#d5Q748hEx=r3ay&A?o758%zGsrcFHm71yrc2Utb5>8_e2>%YfI?2Nt~IVQ%?! znYq`?2?)QDVV20B>nffOc!tX8^SH4j%mDBu&sC^*?`e6~z=hCmu^|q2A+&5cp(^$A zbF`mHFGX0{H=b_lREAz@MYWv)QlHNR?&3rOrxR9V$oW(W_YYc)Ce~Q4FnX_XE+gpf z*KUfH8voz`EY#;#@iL{oGG*9Q_imRhl25gLe3+n>*{aR9?P6WEI(JL8>EDJvvtT4= z*BBztx?)XdrS=%xWqp9E&b=eHGiPJD8rrNOHgCNaPsBK@NFP=REWb(TW$;0AXu5Bw zxayiWDtHJgh+-2#VjA#~UcxyGmlSnu%g^LN>t{$|MMV1u87;x3-&?JLs%&p>DX-{0 zb}L5dZ;SQbC(Zf$bly_o8ZTgP6b2XT@*4~Su-%gHpJPfGX~olv87l+Zjau{@{ zi0>bV?;i+!{~#k;1ZPd--fHthf_+U|rd^jKPhl$xwyCFN6I@20lF7g@cCFO-F2Yqx zJ=~B1son$mwT&xv%US{p{Wki~af*3C*F&e-7^?^LyoAg(dO*j^2h)3aK)?Ngu=%JN zEADP#zOj^Y3#Ge6P)tnXqOmS4N2W(^C!vQXz=KA$yfc7mFN@$Eo*A`l1GXT< zJ5{YGHkNc z2j9tKYQn|nSJAh1JQ5xRJkq*-HFy+O^_mGm-zPHu+L#>FaG5;>6A z6X&$Ef^bkiT`;0lAQKZ$7{oPf>&=uYxs zgk%{4(ascRZir=Fr|0S9xcAy8hlvuC7mT^|CdJ|b1^|rara}Pwe`o@Gi(LuFne*nK z81^oj32cFh?{zAcK9(1^S5zF1zs1!Vr^8gByy)ZTM8)wLA^^t68K+2D+jxQoS3Xga z8Ms}^{%jhVAWh>7o|^v@F9V7Dw1sIzXZ7D$)R&#c;V_NUdpdWOsPEHwjatS(YBXls zFJlmb*7vX=h8n0&@eGj;LoB3r!79^kGSwmPG-l={xpv9^7E)_6{aZEtSZ+Yofx1;=hZ|3G!u~ zyX*_|jAfnKvO@DM@tO*^mwhUI8ja2lVFwx^i32G0JJjZ#drju1&fo#D9$;Qod-O${ z5t-3~F4M88#uiTl1mD`K?r58OF1L-P0aBhIh(@k73doPf8@bT9u)q>QjW$6IVA1)# z;i(29O#^x>?jLX$f&^CW_P^y>@eJR*EVD6C!CE3WPeTv&h(o8kjn0>b!}ITbuUWpy z^=3|Q5QhRN1LAl4Xs*;g45Dl2s~56)siEHdJ~l{_c5 z=Yf11)E?gDjLZztSx@MtcD1<`+q|1nrR3C5O>(vuM8oMztkGAqVNUsdR0(NvjEC|q z53Xjj9&IRm<`6FgP?uDrlPwyiY zh-skRXF4B_OCe>;Z)7c*MHxAcT!Rr`D|7*pVbWUw=35=i+Jqa#iPVC znId6CR-F6v9A!z}S3FvYrI-vRSvaFR9q2`RPVOeS+sT#8QU8_Ilso%w4|s_;RPC2w zmhf?#r%jXmaT3hfq#Bc)fc@<|ZF1P}tJjSw@Vzw&1#u6gsT^k1AQuTx4k==w37)VQ zg0~u)G7SO?4OF|+46<~VGT#)Cx$XSEdTFlb8y!f|eWs-&{p}_(a+Ouz_e?ljA^=$gf7{8#swbcZW@c%QYD3 zgeyhHbImy0ZFo!shq>*inry@_#uch>#h=vW0W3t$I%Uu)#*{%v-?6FteYd@ju|gZV zq1&DBgqVG733%Fh)qKttqo?AflWqPVD-^QD2aOK48SV4QbVJo@lFBK?$+h&vLJ0PN zICk*j5Zh^*)4N1M*3=UljaPOrymj(Ioa^rJ7U5B~Xp<#!LHeBzm+?K58w0E->8#M8R5h_@r@?j$4b*Q&vbk*Jy3*!mnJGXf_0p3wK@y*QIoV?OqyKD(#Ll0F_-E1^|B9SS|P@=>br_`${C+QU zQy?(m&&8-_XdP98OH)IWc^JC*gMFTtO5h^c}(o7NWy+%HJ$^_3^`0O-HlzzjQ zabwB1jGoUKRSb}4y5>4Zoc%q`TXdYTlm~xq$&nB)|FH~>BX|cipsvoR;nz6AmD_-X zeN<{`3H0Uzj8_|9q;VD|u@r72bwa9>vv~=V2DzvN5C!MJPM__p9&NK~$ z3>d*O^{u@ZWWpONLT`Ao$A2FAyhNLWuRvEdyGXyU+;VbHTKtI=$D`)~k4=}puWV(T zC0kKKbm*XXzQ#ksI~1$d)VMAaQ|;YTI7@dIzj{-5{T|pg_Es@(J3w%=ifo>OWI6nM zH?lyxFhmWUL+MZ&Q(n4@#NGWL$gfk@yB*5{#}78X7nrTO6MKr0n{>Ti^3RS~=Le#1 z^5X7=&@Q|kgDXxKvEw~c8+T7_5;x#za&*P6t()Q4vK%_i13CIh0TDk!j$QN|%x)fMTI^`7M8!p!<^}x|{Whjs>!No(U(2;AdrX zQhow<36e_C>CO}dXzkfj$P}b!1&z97m4fcjuJz2`2f8zRmE}Z+@N7|jE~TU^DoPS) z`+d#RVnMvU4bY$2kM|xW_DYk*I-8rwefd$bUwhM}fHu=;>uy%O3f&e3;`V0y{#N90 ztYDZi!FK6CDWRhv6_=Lsu1hC%1oKl| zrSpB4tMIqdc@UCpe3LpYqQMUJr}EU{sp09<8awTornvKGdTynOI<7y*g<#|ItO@_HjM*YuP3=o2!7s}bQgyW{F#Xxha! ztXmo#eQR`%(EuTzyP7{OF(4dQR&5!Jn!v!``JIOS=NdNXrS#n{_tP4Y9q@Qivhx>I zD#g%Jdw@-n0nK8_1}^g)>c84AAt{X2A;MO9=vtO`P16Cn_UT%OhY)PpJE5uJp&4U3-x>$IO}hVi z=Hi{zq_G&!?S#mIo{;e56vF(e{6|dy<||8BxL6rck<6G7q^TwNR)HEuCjE*#EdVta zEGvy3IVZ>$>Q;{}-tkI#JqKPB>v@dVL#=$>Tiv!;ogiUmo4ujy2ujf!F-gto0_uey zE1NcW(CB=RStIsK{YPpVU%{R)LkEw63B%Liu*t}-l1m`D`pl9`BWX|(YvWg1oCfpX z^GrRl75S}0$w|QmMzzi0unhGS&UWaPgll#PjQAK$#> zCz_+XqI!*bNBLb%r6(=1@c(UUqf7Ry=#H+emjjW60k!eJNZn{WzDf3La2Hby_}v|% zX7lB-G|-aU&-g&xkkD4N%c1Z7JooZ?PNM=2Qp5-ZnR?rpr``_K2>j5n4B%!)A$!Fr zkg$7p6>u~192WaZrriS6V%(kGrv4|fg;s|YGZAbA|5$OyYcZ-Y6QU?RXSwMjA%UNs zGRQF!(rbFgBv@r^tE5NAX*tl&-;XPtgFLs9Y zjqz^t>TFcn+tt}Pot`<@ya|M#IclNP+#G8LVbI$rAV%S%?|tcuitoMV_)7sIRl>$Q zdW?x#O3X}0+(&B6GYERfZhji)!0XrWi;Fq^A_tcOd(r}%?AOGL@j0qMEM9(J$Pa6% z!(2Q>n>G&yapuag&v64ViTgB*i+ekcrsL9g>F4Bl5mgr7T zde4n5D&>RYfQnux*4>*u-yo`7YtY)Gmo=rou*6!|^TJlS5Xuc$sQ0YD$bxG_c7t{6 zH*_{`x?uB#7XkbX-TQ;$zbJ_y0j4tmz^*~L3nwnp`^>zH!S5KnDfIgT*~Eo-1!a2PM<{0!)U+MjXgS(x8yMnQWLb>M^Xj1$8)I7_Hti#|qzc7I{&)%=M zq(00#Z`YkHVk&pB$_1cn!Qth0NR;y9E*0IL{-|1tHQ210i&KjYKKj70Ph|@3yTeqL z;HKO?!xI;%b%(Kkdm>DWgVmpXFw8}Oq-oI~8g}ptlE5o>h23zk5kds-Ro|^JS*QdU zpW(~xnsxq44?UpLKx4!CYds{YfZhQco8W-23P;L1_nJj=TYlq|%vS-~Sy`zfRWCf| zmx6P$&WCN4Q_g~-m9oyf0`(~p{qEKcnL+~Ot;5z0r6IL$7#fWyXas-_joSXqK7sfH z`2S{D0-X^0;RjgaD`bSMD@S><7Ov0pczcyHpqKwYm9GKgBY6 zrzIf#R8CzhdEFFS?l0lqSf&+_azO!|jGz?fuuSov&Rd43ED;f1I;3eqgLT}vFQ9?9 zudXfn#&qjiPKs^kE=;$W%iUrwUFR)bu@GDl)I?D;NS5pr>4nv6(M*)Laurq^s5o4R$#*qed4)#YJ{}h;e;A6$MHK zh*%HEJ{HJ8Oh#b8Cg25x;H9dzt2^~V02nGpycgrn3dhuc%d1ljLNGUSa=bHgfZrI2 zsFzi(x|71PCmfnA4LcBVK!=Y9o)oCw>iR_BNvUXpcbR-h`5xlRI7Z6%P6a8D@;#ne z-vZw=o?Mad`vdug)~pBg%E&jg7JFsn8(OnxpB$F5>_RP$Is!+dZUVg}L%uguo(`F3 zR(aZqzYUeAo#2@<1P#R-Oqw`D(hfWbA|ZrYL!AM8E9@3O|CEfFE-gPbEX6viBfK*S zW7Ef^S=BZfalloHsUdJ#D}g0V=!FeMR|}egJ1np;_7k-DU}J*S_YG?qkrkW#nX&QH zp;s3q&psWxvpMzy5B$J147=IlV!BTDaQ+8lHUn` z92-)y{H%v(rBr#hKT3)6UVkJ+b~s4`agd}M+^k1*8RXOZ_Yb#O5r}1(0mAs8$?bsW z;e+-Cf@4tHjAUnr+haUoWdV15bMJa0l;kC_r0Nh2=lU;J87a8d=xDjPV41L0vth9| zE-9sLtRW!om!=xff|^F!OSXUcq zjCBY^^$ww!#SX!KOjY8yty4@3IIhXQD=NRa2i$!q^GRpPnoPPzMPY+!ob+yeFqhk4 z2F_`m^dvBpNlyYpne=3l{e^ym`K)G~)rSp6K}Wux;_?v<=1F?MumaIsTOzI27;InW zt=3dK8blo09T$U#2{VI-)d@fOfAp;_=RTXLXC*tV$?~`Ybvfi*N6Xe~#kvp#Kq_TF zr-8urQ+|1zGz(8C`z<-VB3JtfiuV+vS)=WF=c*+Wq!6zvnPVZz;+W7K4A6{|Ru~DP zXxVQL}3Lmmi%fg)eQ`o*` z(GQwybEun#)zX#0uI$o3jD^&`THRDUo;W}jp%wVkUgy*FyIj?ec$XQPRM}FRiLEMs zrH;LEeMn6)7Cx+&x5+R9jPEuLWve>L0zf0?>#71iw`Zn9#TqLiwX{AYl3=Xx8XHma zVKt@#@W@IbdsG}x!vQREi}Y5a`t`i?@noGhf^1bDBJR$1rsVl=K0^e-#A_ktzp`N9a&R90gu?{_c- zvI|%bbum5dwrM0q7yYdLFBKFansZ{2w=Aqm$@bJhL`q#yYhM$8?(CVQll0DArtOJ_ zeaq{254Zo7s&WFR6}=#Pk{+Nmil{@q4osvX!O011Ld#dkEGS6noJL%3z>V|)@M(u zZ=34;hrMGYT?Bjkm-00d1y%p^%KD#gckMsLpVh<2^XUS`l-lH%6c>?sVYo6g3>h;? zn4{zGmmOeFLI!O~ljZvqr`9 zmfjg|Yi%-ay)}b)+GV5rPgY%y9XsKV)OTOGh^6_;MV!nRtm>EF*`mZ2ezqvFMW_}f z&OEAxtt@`x8DaQF;kuvF6iNY+GONW$7%umJH{AZCeq$_0wp28f+~sln|tNjJ-(c$XigX-XFlHYy{tzZq`7ygs0EFg2v| zjtiG!bz!Y&6JwpUiLp+mBIbS{yo(s`h&>8Mqz?_pb)ML*)(S?oR~hN4>&EVQ7&y5Y zdo)n%VdTGBAIJNS?)Q|~SPrR2@zGOvL>Sb4WYKwHk9?NuieWiN);Bu#xpD**+Mtp? zzFhQsTo8LXi1g9gALfiQrcUajh5!HJWpVvWi_gt2fRguqDMGBVq=U0rgMDwf>P)in znYgCbR`7a?X|-jSOH?g$#AXvdHc#F!dc2bd7SJSC2hML-?M<&8-7wZ}JtA!ymE(<) z4MPsuN$Rp_3b+rytqqAW+Gu(k6_!=_EOnSdU|IE+C4m+uJg(mUwYGV|RdF|Wr?ffB zcn!Vp-RH$?%R6TJ#3OT#yH2e1aHSQ`asO*=O%xiVrSvU4+u3bdU9E1u)dX`qvGm2!}cA4fSUCKgW=WQo>j-)r0E9GX(n z|0y7;^O;r&$!}?Qs35sWq@qQV30{opYEC~|10>aC4U+a~wUFf4ssKr{UlwyiyNRV~ zqhmE>{*ad#7fPf3!$VG;^s-8jekg+UD4VEzL3&~>AXSq!klLfwf)qdokcMMkmLlg5 z51w<)Rm1Z=#F`k29&6U&d0ZKQR!i(^vIb9kw03xMGKBf(mk|3BoAI^TdL#MuyICq# zw&j--jyk>kKUXo)&?YJkjYWwTU0UhDxJ``+a^KX-((&Pr3ey10Wnrp|IVwzbDIFh6 z-4nsSoEnaUec6;XQ{YTlGaW-_24Ct0SFCmEtpn7bpuGhjZF^=o-8L;?G*%t@B2hSe+cm8EO>>Xqpu zslrvgGS6A6cvY{=@(^@M17Y>byk}`lLG{X}JDsWOmCd?E7zj-ms7-n5SFg&Nl_Yhq zSFg-Jl}>GVg~DKWENU%*eDt;RoG2dqDs{A<4UQ~xviYJt% zo2iFOMyjx)J<@7Klzt?yrH1{urNp3Mr;9JS^s+6NKkCts=}t~vvGvNwKCUE?Qum&C zY&7opow1UwdS_z^bvom`0?m?iL9v+^2xWR84=ekZq}y}UTyToP|CRUsqG z%i^OgdSoJy% z-NYWu)-7+H5%;$=r6b`djRAC8m~9T z6wz@ks2+aI7^+QF?6$M8kXnIi&lClQ6xdZOQ0eJH|>%r;HOiq@=)H=@{X}Y&}(ivZ|-7?Z&(0n3V}9econjSb`H-YEf3q&Oe%~ zs>?oZ?QPMN=za{C?v#a6RkEh%(wZ8&0hn>e#LKFf056#K!lsr{@;2LtlXg*)I~ zEkI*eLo}`+Z0ue3oUXE`!BR#nUViCJDGtTTH6eaftuZHO%$cJdju(b(l@UzI8o1p^ zGGz9PlHVd@^OO|gt}<;D*(4jHW2iT#`HDrfBKH7{oW!8N&N8r3TL2vRtL>HSA#-B) z46e>BJ{^evA5?(%+m&~L9*B&(06j064HD7A>AtJk)Og3CS&9gzfJdmx+Q7?viZV87 z)k~^k+Tw`$B93^>wlrA)ysD(lq}%S)RFmwKCZ29dx9Dp|5{#;A>T?f#QWgrf^^QuK z7?6NzicXWU0AMj6HYl7=bx$*XkyK|ikr(8;>}?;2<;BMOQ#ciRuUP=tYFmCCS1jos7-t$u$i-gR*?F9TN`~KOv*$wD8Z)VxilLFlBnoJSM90tSckM#m_0S?#M00 z>)9W2(=)XfJ7aus11vn+p(S!>FBdaXG{o8)ioy|-Z~rbC_rfj+MlWnvi?k_3qf;X3 zsb;we*%C}nHG4K#2|-G9ZQ6D!#-Qy~8RKLV744yJu|pCH=M5Brc3gf1s7#QAO1gBC zO;fh<5|}$J>Q{!IWjmx=88IPQ3)2hrE|23PrL3x zd>-5e=lk+i0Doql5t_G5AAuIKcSjvWZFBI7D@)oj#9+Wzvle=8Ptg~mfmd8O5bdu_*h*QE$79B%lFmlwcc<9J)Ic!jn;HXmV8YTlS4J}pd)@$I_IJGb$gDD zCA~Kmsug85B6Z(r@y-^9U0CvwDqW@LkJNne&(3IkeweeLGk9CfSVj%oG-bjdD*t)p zOn`HoJ2vUs*Z)2!lYGG*f#TMW%{4lAgs7Xi+dMNwbBdyzyvD*{Z8&!Xz&+uxP_tqf za5nwv7F(6`K_Flb$@#!D<#yoGk;mKT)}K$Xua)PcY`KIYDO~LP@*Fn%;u@HXWlQ0$ zk|D9TvdXK1*!=pJtk`9+qNX7v1M{=26m72JO7OtP&ljgBwI*WL_N0y>&XwrL5|H+k z197dS&ad~kqumiDg0NZy-G$O?4|Fvme998v256-{o&eCyDFIFj)iZTZST11{KQ=i1 zJbUyl2^bk72)BsnaJi#{QHDfC{TprjY<3P)U8b$}wb|7NY!krCbtRI7A}mU5;V7>6 zEjQe$Y7r9+wcq}IvxQLG_rn&_DvT}Qg*!jCpqj)_R>v07c2~<5(r+rZ@NH)cqDL`> zobw}?_^^W!dSO;JTUybjyui8~CqM84J=07YFZf6vkKhWyrbbk3<~0&@TK1#lP%tAW z=t8LazTyO%ofCvjl{Q^!HR_a`DsDisxdYA&OvXd-1K0tyomK3>Xge|kJmydgn+4^+ ze5XN&1HI@IStsb2MWcemu3H;xWHV+2nPjkW2&qMoetGg2-@#D*XjS`YtA7NuC7%;W zEq0?3I+;tLh)5^|eFm7?Ica@}Duqht8Z)IlO3;le$2mU(~_!n1@uS#!;-I280mOsf@ zup)5yaSfe)y1*Rf>3JH5keF;Zl;$l7Y%Oisvwc`VwbeQ5*!OFy!Bgoe1CBVFmp1uh zyVxjgJt*FWvRIt^J9st%U|aqIJ8MdJzrt6(PpM+>W^T0&ZzeQe7&!S$ghN;5ziKUM zJ6uj^Zs%p{Z}TN>2@;pQL|O?`aN>g}dO1Bcrh5z24ykLwnqiXg|Dvue$t_wA3@|Qu<;)y(c;}`T)ss}BB@(CJ~QTv3wW!s(71ru~! zGVUInWK$U&`_90NL)@4t;f*z^XuZrSpB7T=Xsk&^ORMA)~F zEuJI`K%Hlz+?%QvmTuSUP)uV(o@zqtx2~<1gohw?x$v^A8YnEZ(Eedan%f^yNptj{ zouv8y6|Asi{QeZI8DAp&KoqP#L_4FC;iCTLn(|w65A2HES#qXV3G=0g=S;F?sPZIh z(NyUHo--+CwpgNsjaOR0w%x@Yt0E0`qgM$Ft5aL9iCai4b;26vlAwgKNJBf6(C<;g z!s=Q|kd!cZ##Q;{WdhE=`jqj#1GQy@0Y{o!Wnd_wW9pJt{z{M{{snj@GoYP{p31SKUhiuFiy~GiI~to31H*Fd4np+hzOj{r_2w0Z=pm63 z(BE9GB(4}zfo)&QPm(4!dPvs( z;x4chci~>CUN3!-yfH))PO>^h-b}Kg(o!O$=oe^7`LzC_RcaGFsf&lr`r-$jnrhl@ zJ~uc`ln?m5Fa6i+(6?Y9@&jQT*h4d-%c{*GlYbDaCsXPUW67E#=hACD=h75rd*Fcz zN@MhEid4kUU6<$6_!i9=ZE5k%4(Kt+Yfa>1?-WAJ}JM5ExsHk`iq~&Y>L^)$VfiYY{{l*Pc84# z@aX7hhQ0U$z?+g-G>0$aN}?c=L*K(gS@!SMl`{qZN>|j+59^Ae`Zv1LwV~qlm+yR8 z^C^vS^6!il8*VCY50H9VV}m_vy*PQazAMkn_--Nq7#j6_kb2rgI`IorC1(+U0UEDD zfUl9k0TZpc!La8QnaqM1^cuzCyYF-y(d3br3q_d6_Tj5Wl$Nql-0@H>@>>}dt>X(X!_1RQl;_3404?XxuE5i^;-PlZ#gB@ zKfEpdaE5^AC#vDi1j2x}nV3Y#+^Q}qB-hYgZIN_A#-(<9BO_BmUbSvf8hWqe@>SHa zE!HvZM2WT5{QwiYcbURUYg%A%aKO9ol$C^0D(knKo3hSt>!(=_KHOoiVlgQ%)9U`k zj5?%j@@)?xqt1mE8L+`q8;rLvnDD480o1l5DE=r@pp~Yl^V$)95Ly*qk^_gsM|eg| zRd_bV3BK72`9;oXf48Asj8cS14XfjIs$*S``@44tbhWAY1r4@uBAVi*1*j;|^4bwf zS*@=h!28~vBJ?0JvI5(+GJEcHH}+M zu|KK{e@D;vG*R!|@>LS-WkdSy5e4|!?HfiEr4oibnW^*fA7d7Bg046%hHvSzkMEY< z*2NSY+e3k;zi>c-YeIob1{LTt4Bz2Ivzl;1PWrUVLLC5CfLG*&Chh=8&@%!D35W2i zCgQS}jNnP?V88isG}W0ML%o2XRtn~UC;%G`FpND~!_+M|m@=O@=StA77`l0q0xSd(y(K2YwHXF0%ckwNfryROaZaEZ0<$fNtd9EQlVdpI)V6zdx{bAA-HI77YcJ2|P8#;T@2l2VmwA%^O zS&Q_L)F2HwCtgU(SUIIkNEZl;!Q<1;2$?k?S3<)0L|HRZfI=LYr-^qK(iBFj1}BVK zQOtxY>iMI3=aa{elZ%||J(df!a|j~i7p@vjKI}}hpOTcPYEq7-C9gaK6Mi9oC6NX4 zmg96>G(NhdQAPw?YjHt2>~N9t1e@u+RWeuFY%0{vzYj?&T*>@No}th+64sqMG7HNR zO1^2~4558nR#R##UWNwPn<~Ww*J~>ob|A<5scZ)F0rX@ufXxVdEjs~Q*r`On zrSs>{+OoTt)YpY2C)grxCwgYbzSdp6|0rjQoEnIG^-<_8_W=E|@|Ju6ZI5)o%C8d; zLGUx?fHbhaSe5~6-dH#UVIbC`C|1-Y%T!||*74ervJOT%!AQrQl?5mimUGxQAE<9b zN-)N}(gXb8zbkq%Tw_jtj~}8Eu^euK@GZMwh6qr=zKIB|Z%P!tT|XF3>?s`rlp3-{ zr!Zq6eA(SNWXl3TQieeKWqUaIfwShXr4h>@5JZ=O#IPfZ7J2r zKunu}K}wQhwe5#=MD2X2enfTHmLaAP8|hIjvXeLHn>ZuVf?WK>Vii;2O~qFDVUul| zQbnods4j05Pb@al5yagV!+%cW<90W2YAZvPj^sP{+ZZJvs`hgsHy?C?(O+Z+eL1F) z<+~V;n3ltq_5KpBq9f~qiy|$$0%QIq09u6#J0UiTb-p~3_!a5uDpeBdGEl}^90ki? z8Zkn-wDaS zzO%x6R;bJNZ~Y4I*RAlLQ+k)J-&9C&baq6l8W%=0B*|=rPmQ7pOXR~DsJ8iaXVXsZ#K(pc|mn}am zN?e*2CmF7BFZ-5^x781l*H%ABKwSMG^KkWpJhj!2Xoa!b%nD=RqtO)*oDyati^ZcU z#wuC?dHHq)^rb|F!2DPNg((r4y0ssfy8Vbu-F`%-Za*SZw;wBDA5BC~Z^a|0w;vIg z^ds=t|1&5^Q9`?TZB*hFz_B5I|Pf z7HH72(a=)nh-&EArzQVBs$QGf1+!F&uUOR^t<$|#ZDrF-pQ`Zj`Epb3 zOOVc9&gx~oLtq{%wWXviW>vNPD-*km!`yeiK)u29e$YD zyuKsccRtP1*4Bvem_n=rX@8~inKQ@$vZns-e^+mRpMv;d(AG~?o8LljXW!teR~PG7 zyzN1{_Rpuo3~-dEa-|NTlsX`KU|8$ZlhVoq4E?LKe*)wKr1qY+sg01T5>)-+Nc#m| zLv%hnW~9gG;uavxhUJh}bxNr3c3 zPQs_toY7mz36WB5icbq(!0_pg&-NnhfqXCh{fdn!{NQCEN$ftR3RX%74FpvG@KThSCMsI zWFZuh3=z~8^$zb+3N^lVvbc62hWt-`wy~IhHJ3o5hd&KSA1Fy`0EO!GXqjgAzL764 zDQ0zPGn~cm%wbKfS65N!-%g~sR;?_SQ=4qsq%v)+c)aOLosF>i3PQ_b?Bv=o)((*= zr)SxkIS^zmv><2ID*MbHoHf;qmbJ>7@#L?mW>mIS*38C?HPy`4&Q;btwZ@t;n6I+t zE7n*u`sONYCWLrR&_Fv`Wz9q!uc>BKn^o4#VQ*`y8NFzgHM6gBO*Nxbt+HkURMu28 z8rdpqzH*H<_eh3i`Nm_{ShEY1AeNS``EhHkIT1zVa4b$g3=eM?$G*))LZP#}IKv}^ zLX=3OaDSCNr;;PZ8_#hW>Plo5GylN-0X=XLQtameDw?c5s|5MBwRN9*UAq`8<_>Ep z6V-^2v2#31#N7YhM?|_V8YSKF?^4HxVqO=y!MeMP)4D&aKiXViqHob(n;3tX`_BEP zB&`MJnpEp;;)4>Nqs4+Qq=)kwXH?@xm-@#fn=4^Dc)+jKM-#=YUHsc4>P;or2Y>q) zn$%6j+=Gbppwpc6={H;;Ab9Y%hcxk>;^hD2q62*Z^bsDds@>z?$G7{`=T@=b@X_0? z=`o+U&^1F>a#yE#NGS=nMw=-9tei0jbE6@8q>=r92ppTm?Co5HCeX;j5$=!a0bWFr z*CG!@BiLI+Bk|L{`gC-4pX&U(T_!L`C`srbPI=s48gDw+0JiCUm24y9FdQhK^ ztgh9djl@r9*6?XiH{z$KH50AXwHow^`03mq@aa&`r{~0G(s@1iDWg{zs3PwZ+dQRK zo5iA5&Z00d;4WbR3^phLv61_{WQsh-bkaubQ;;V}`1t9ZKFxdjH}KOS!nI^m|K|R? zeOj_QP_~!Vk#^F?T5>x^U}L@CjwNBNS{*Daqpn&TlgBu`+!En@-iZOXw5(V|rlXWj zW@doW2A{r%-{LE_?Y*S5KPj^BkQaG;Z;@FQd6d_3C=~gz-XaSsvdN1a2}Q2zEi&^m zid^JHj)x-KdW+1d$c0|yWGM2u-Xe=Cq6H??c{&t%Y;Td7ms5o7Rw{Bf6uGju$gGNl zS{@EXw)Pg8Q<00kmVIw^xLna&WI;uAMga{S3Pq-Ri_E-&B4I>FLXpYdBC{$IpnE(N z>Gl?xQxPq^Y3O7qLh`AenZA`G+q}r>P=u^hX^}Y<34J*mijb}_NPfX36v2m(7MXb!MMUQmIUS1NSxAe_{{}?@GMo)X@HeDI7F0y`6>51n6u}FT z7MYPjAwYNE+Z--6S-G&cs^w59Qj>`@YA8VWNGMX1eX}YO8af_|)MVVk_u$%(32+HT zYO-ujMJ^3+2}No$YfhjG6mT{asmZ1V6^Z;M6sgIe84Wt1_r6(&OOQ3C7*LVG84iUa zH6b(ik90RonQiNRgy_!sWubENnL`ba7H@C1L~cx zdM5DupqO^ao;cEe+XTKOEcU*cd-Ynb%TKLqr080dw&LqnJoi+Cq2<4ADwm$*Df40e zezb@l<8bG*O`VSEKOR;2P}qRd)&85Uorf*uUl`Dr zMqZi(1T_)VITT*|2~RL z6o+(a8a#?w-5>P__URqm>(k&hr3+sfA%K05lEbuFppy*ReIwS5m&%o(4$QoU*0eUG zkNdcnp*gVrSY%d3gl-f$5{d-YAB)VXh;$N)+!u-j)*p+UQ4!H2MHWMm!1`m6nf(+| zd@e<9eLcge=IVuBI2bKIT4B^tY2_B zDCeBkV-z_Uiul|)+zv|yh2hMGz9t4&RdF;K&dj2BB(a>T$efA<=$~ShtiCF{ozYQ^ zF8;>z+Bu1x9f_+5_H%oW7D!}LTvW`Xdz$SXEIh6IMg0lWcdHyEpb{)Up!TsmI>5oJ zuZ93g;)X#+V(e`HoTx{gT@+4=(EyT%g_CsFxPExQUt|zKW)1N^Vfm`!E>#imzKprc6`EpEs*gH|xoZ{^)T+!~t}pd``;bINWul9n3d&dSgvOUa zdFy>S*g!XD>R>T*AL9%Lx`V9xl2!*e{Di9$;H9gavD-MmRpE&b@JEmZ00(7Qt!$KQ z_bqQL4;P=~P*<`dzO$z6>kE zUNFX&GnxRQS)%Z@SHMVLs764uAM{r0SOy~pgU(mQu_njnUgC)T3`^`a^>gNx^y|u4 zJN?w}W%{|ou-#TrRd@Q=m#=Q{u-z~bYqDXV>K*prZ{6qfL5(64&hX3a*|^KEU~BBsx%B)KMfC^Ehb2E*Q$gGcKo$n%7mQo(sc+}>?Qn5I7d8a=YIH%rV$74&_KE<%nWt6tGclM}DZ_etbahm$ z)#SVuK~j8?P4|BWbs?@Rv_x?=V$9d)kr3M$ z0^sVQTeB(>LZ1%Gy-Ht_b$~%vMS`+)zt&ULIv{p;E~#aISotLiy=qxdkBpU(Za@yB;&Az6b6QOH74^jy1S}8e1e6p>_s$HC$3u6FW!<{eoSsg5nv|r!!(bRp%C8CF&FV$S8t}kM(Wb-@& zw0y0(V{Hm?Jrtf#%?g^fo^|QBv&eum`&@GeJ+$y6VW&~TSH7Ix>taL7Kbi0ovN>v;>U{)o%TqC{4C_mc-k+JjhQijlcc3dU4Gvz^$da zR?!vU`DyFsKgrTS3hU5h(`8ZvI0I=5>Z6&rP)HdgNy4)*s9aX$F7jlsfkj(emE zoz<+hZ%C1!88Ht6qmkHn<9pz)>xu>Nk+rBLhbV5>vl)gN1@j#|Nc4*%0l$dQCWybR zP}w>yIgM!QF4dt1l4T+W%v^o}*{8@m2-h+D6c1tT^ZJ18ki{uA_DNzd^k4%I78=B? zz1JV^=SsE2bn);|csQqr5~%o@PWiLW$I8*aA#;0L=&id?U`UhDff8H|c4J80r@NR> zWlrOlx~u-Ya58I7cQYBdx(3Gp_b1ASfgaJ=GnskEJtdG39ynnP#D_tpHY;E3fnutq zg$dfxcz%)ZQ2;#d9+JX}L$B}Raa>{|7%JD={A{ikH?~FtcB+X z?a!M$=LM{@rb{KeaF(cL{>f2OOXI2r0O9>mM^oG0UTrq0I{FJMc66ED7nN>~${wdX zsPE-;RC4jxM=fbrpVf-1|FPpXXi2Yz;C9#p(N`X6l04 z^zDB=4}%hK3yKOVRi8gLux@DtLX9IwRZTIci*_W<>t;cJ0(~5ie5mRkfN3$P^bpvL zH}J473ZOlzn>qandi6uS)m2^nW|IUF$zssa?vlbc&BHv5^DHx+KAv1SIwZ1$|hO<8u32vge zJe=3^N&XWx6pGZAhevsAfie`C3q?{M=>8zDV&31EM0Yte^;ny)W>uBA9a1kWMNtT>pr@lIJo{%fS0_36- zIGJlft^^B^i`Ie~CO-*#;dlt*#LcOtLs=@`hcn>=VOB-ZFJy`R-P1y9!M`BrIL4} z=x4c>gTFN8(I$M$GK**1Ndt$P=KjV~E&GbpMO%j)?@NsNbT2tBF()L%2B_}$B}lXj z^dq)dBtblp!{Kj%RY6c4!auVv!n@=Tsypp7WuW8k84QBnX61q=a&hSQkbb&IWM}=VuejqAs$-!DEgg zA)_r?JEvU#7j^uTaR<#dhgOh=<(_+T@vlDOch$^2b=0DGcGiM;V(4L+L6=k0L zgmTXt#TPLAMdUP0Sql6`6$uREVeU0Q0r-*8?ENN1!oc^v&x_Q6Kg;7-O}qVrTZ z`K6I%*28Hl`)QFXB33U4PFFZ8E*Qa?&Q=Ya?_7p1>U?9^HLjYvm6FDZ{&w=YuY!(> z(gE)ehaxrVSx}L%20P2WKwndYQUZ&$)D)qVG#(DM)Tk#VjaVd1V4UOG2kDCpU3B*j z?$Zfe4*U;F2woBWPlnBV-@&63?B8AZqto9<)#EKy zkG;E+>?vBTXq?yz(5J{sa(PcKf1D8*4~ zhIm^F{)=eLbu&xi_gHC_(|6H&d(DP7*oN>bh3E!>xnCi=6`lXMt0SIK%<@2-jiFbp z2;*&!meOAO&E7Ybxg*Z?|K{%Ce27DLky!uRt3ZsGOD`ou5!@r`^jq?TaPX){r2Ha= zQ}*m0P83)OP^ctk5LRfhmO0OLVl*0y)EsyVDk95TQcKN&H}iFh1Ub2%do@&JOsS?E zi_{p?tZE5j<4CBb&Y1cXsWGOMcbyEi)FeyFyF!uk73)V|4dy+9oaFb#G&aR31r|Z7 zKdcdK25ccxF}@WT(><#0l3H~OdZ^7Fno!^R#t+l={&T9`2_sFZffYHQ^Ywfs7^%QI zIDZ#4%5DoYI;HzL{ZahrHk#1=j1-+qd2omuYr6CIr7Rvn)#-dZYk#>BNiACycC(+IJdo3l~=}*T_bzj%o zY*REC%L`ZBDiWU6pZ*HQ8ucNouH<4+wOOcBb$7ORadPVW)>%%K+6+3&iSh?+AB#WW z7QwSwDKK*Mx&q_QUkObuY$g0P3Yo?9OsWighC5PQ*L4}UToyAlWX7|RB%;7b_M<;K zBztD{B>N;M*&iD~vNrOM{OFAQi)$YFlb0L$-~8x|{DIYv{3$-?PaQDw7xacJiTC4Q z+&!r*a@sH8`%IuJ*+UPC3u?`d?jK{YoW(hxI;!`<^%mZ*z~78?Wv=n?u44Y}Mv?e` zb+gDpGch)LZ*NMCKM2e1ogsx>G(cUQHRKu%hH}~Yu89kyT_FtP7+XZ*GDlldBrSi! zq@@R(h-c(H@6xRvmloWlwh=`lpl=(q7TEz$qOMJ$ji;So8$pKn(kv_Pr}xGB;_JGE zG!^G`zu*sSZVr8&70{<8!rYp9S8#rZW52^%2SyO(h|OL4W>7Kw(`muZt8N?Pv< zuE2A)qd_cQm5HudYes{_*35Fi`MD@Ij^?N~og01ol z_le!fWaisiZDrx_snVxBjmMc|CC7}=d0S~Mr|_LqgBMisIMaKIeFu4zhT|OKLDG?B zj7SIHEQTk_g&poKf5-&=ruc?++i5hs$SZAC7Zs?T&cL7`S%tb{YEcIh-OGrSM17h~ z%sHP{jlD*s!?cbjdxCcR8If=QWUB}@ z6=gbL$z`D0-4>k2cPH$I0^Hx#C)!fS(VSPn!+kY7V80z8uKDXCk4_WZ)p zTDK%z(kGL);PXG}T(aZAXdN^=iPaT&Um2)Q_nM&GxhYYxFemo!27*ZK<+a&$UUtgE*Z2dB%c=Y&Va$7 z69U+$nw`_7y!gFd6OuGbSxUtIb`qgmeC?xih-Kj&e_EYa>jnIt09}zQLDfP1ouiGd zJaJK4oPj;K_E6V#DX`6CtxUz@`n}4pPzbXV=g52ft_2;NIJ|wJIDCyTC>SgbeV!3k z;t)Em>kQu?MGOt12*joZXm*_>;)#uYNy5hSnXDf*yzG;V<)gJZT^%(%yo4I&!{j=b za-?}jKWP`J4Q1q?GJc{jHM~!7tTB@+f?_#xcn9I_#YbwOTO&C3*tidXfTv(P*;cm4nsV!2Sa z&v2h;uP;fvtuD}G@+Iuk8c}NbJsRC+Bn%f=6x3kvk@4 zRY;3J26>o!Yd!Hi+}U@{mrtW+st-E&O500%4!%P{C&=lwj3^K&q~uX$YN@oYrCaXR=)Y95yv z1+RrYmIt_JmSg-@^h@_S?jnW|#Ue-5m%yNohrZP4W?n_Ya87xVl5Pf1&3PW0akMry z{qYsdc2M4>_|Ng`(2RNgo;}N-5WcgZc+v`A`}bE?pyv6Z(*8f|MWv@8kulF0<5RU3 zEOC1k_;4`Z_ACIF5BXRIw@c=hqW9dpdiyk(8>NS4gy7uBjrv1M?EE|-HB*DsfSHW} zmLC*)ud8PElzyi(dqz0Fnwf2#-^?!7FtP8<&c*2@$ROVK&g_5a!`09CM481J^{sAV z@AsAe$`gB@Bs)_>w-qM#E(Nr)y;?-7T_vaWJDu3GigH`c#EzWb#2&5nx9`NBjk789 zWe8j9o!Ce8oST^%vaN1rL*U^LY-Sf~y;@;rPb;n{A=$I~ozCpTiX>WTX2oLGo!`vP z)mY3UIz@9eV61M6LO9qDZi;F{9xz2wUd~Fdn5c;Fh<>M2bX>~DYNqHsRj;G9{=Rv6 z)eAM$Rxu`bd>OGs^)mf$PVA(v6r*(6%f9EIp>f&E83mNoPZUGfvX`@ZS<8_oEz4hi zjhE|tO?joWN~^Q6QD z6ij`Oe&=_D*YF{?BRq1z@Jl{5!uFeUi^E~~Y*yyCXq)F*cRo)x07ujeuDd?-VqTX1 zY}O1$1gW81Z4pRIF)ioU?~Og!HRaJ)4J)sOE}~$5E4@YftWuuD*(3==$vQt0-Q>}z zjY|`5vI=S665+O<-&%jRRR4^!BnvUSk|jsCHX}WqsMcETSP`f}#;U9IV}<@Ci`6^$ zog3-@Bva-?i7E484AcLpDRWEgdqX4H_a15P;<@>iM8m%Kj9l|ZvhQgxx?$VXLE-w4 znfGM=Gr!}^yhnu2NanqnBed&UbivK3mD21@CR{e>L^pS0a=c!f*@;`gkk;yrvTfX` z6^^0qx>K3c#^E#e_j!Lwn+7K>ZEH_8oH`py*pSz>Ao6v6#uuaH~@76F*Opz9T*6{Gn1d)j-O?E$$kTf?MRwzBO2HwT*5v+l0l|_&;Qr0C|u%eqP z`;5|B{jOT1`H+scP9h#!kL`G%O;?GAbqc(C+uiW~(q4dijho>J0l@2juqu=DX=huU z$yX|zI$^9di`x=#__$l?+PG zq(}Ii%E6R4ErCcQz}p&#l<)QWq@fN-9)XKQY(Argl3s5}vLq1!=|<7=Pmv{IlpFai zUP|oK>2}K<%95aWWs)VaPp4VjIgO42tCB1&M07Wqxh%~@%)ni%h9otin|3(+lDTs1L_j=_?c1_!y#Q4ncELrc` zXlZE&UNi{eWt?_s8-&aCV}*M&k|h^IKtJ1N`|_x({h&{kWb6Hc6BlJf1^DYo!u*Kw zbBpgkLlo(udG!`vx5QO9li0d!Pptv#mDs8nr`CXHl-TZO@}WWEwa%375be&E&ev`e>Y4^jj8gf zjuC=IpG?zkmp55+JmSh6D+s(_F6dv_h zqeS~avL*~Ha@(;+5+)M;xV)_7w?NOqWg*e7ZdM{ZL#qtT4C4=jz z{D4cA2qwOf_K8$d12_W+MOufrnEw0((R>8K(QRww8l#b`yjykW=bT5Hs~lNuVYwQ) zIz|3BRd<_6I+EC0SX{B!wowJfHD}O`RB7e4%OwcxvLcyRMy^p;6J`Zo zL;kHthk(nfP;p$N{^WqmjtaVQ3?@py0Vz)CbVXgP%`>NTPgjc(s*~n%<#Z(#ZR1@g zT-1h~+(MpDsx7PTK>qE>KgwldK_BD@V<;&~w7E_!Uhg|VYM00$bA8}2U%SGYXJ~rD zyxMEz`C5Zjd35z)&(e)RjEBj=jX@8~m)_v|pa3O!-ER%#-9+i6 zvGMb2?`$*{S^fLSjI>X%-tUjDSlWX`wz?7CR=2hMr0<%3!gp#1wJwXMkkZCJnP5B{M^B9*{HDn+CQZU~iA%eDk1Fb+dc6 z=0@KffZvzK(jK^E&>FJ-iJ-)tAWF;l3{n3%5*+_z1jH3u)tc6|inZ~fMyvZJgB#TW z#7;}mzK28mREPE{hIY8Y&>lIa*wHb?1jlVPV=0)f7FTI5tOk7yYuj-N;vq=PHkLoH zwv=Y#6`@{%<7(mtFy4Y~>Pl7?sxDq>IiB?9)oetXq-7L5EVx(u^Xk&AIG|Z$K7JC} z5MVrYLW-Zy*oWT6hv)3WwCsa=dUrTIT*Zjh?+Mcp3Hq@z>|uaU4sQ!xZ&rlq=v6XO zh5k?V#tR!$y={b>J^gKksrYVs$QeXI)aJjfBtiGyhk2z?!oEooure1HJRCD|Y; z4|*ntH4zPAZ(CoE$De>VmRsk#lEj{B>{Y=dJt|0ACM?FC4mlQsC5^=#gW|Pq3?>wl zzkxK7j4yzmB3Vqy7kZa|5nw6WjjT`M&wt2RA4hgFC+409@YagxY7gi}Cey8BDNJTn@kXn0n&~ zL0eg+j#dn>?298Ojb&fZ7;K1UA13Gn2+Ka$9jV|nm9ZK%!e*F#5ftl_L7?9n5R5hb zT*0s%;#YjPaWcJ1t5NDoGOlzhEXN1TqwQwAZlsjfSuP`#N3}2&<_DclOOPlVqq_vX zs4~;vgGYIWH%ygeI+^A}=Z`nB0p>iYWD>anspm@}k;w?fmE}LPFei zM2*J-IAIK8j&v#r?I%p5Gzo?I{D%}R%%8*Jfo_2Lc?Y%}wj}c%RE$0FWE1*ip0BkR9 zQ6`>@en0Hw^A3i(whC}^+oCCSJq%yl|>xKKo-8}AUB;v?#$ zMyY*Buju$LJUwaA=H%;B)aGB6ZW2LJRF~x=1G?%$P;M_3B_8MC^D|3tmBw2w=kPzb)|?+DdmOv4kzuo zg`R3#6>490u-Pi&+F;ijsbRF&u5RsJdO^PV{HeWLFE#;AnOD1#m&lh=Z=>F4=rgz2 zp+4kB9o8(Aj9A-%HCz4uVypxymch-iJI#3<{JFj7tOdQ(Bsnd zfR4xO4I$)m8QelFs~!U09sr!lrnGWL*nWUD&TjsEM*!rqBN+473&s#IOd(zNz|XUs zj*;PXsrA*EV;!VVR>j~sm@OSgl1=lbSua3Am1VS)RSto1V#?OgFili+Y~cEoP3(3K z-fXcbWEJl+D&gJW;BM599Ce+#(?VVA321hl7g8o>1{Yz0i=CPPN^+2m5r+DW5Nh9M za0g?_mO4^+W<#oU&6%PNIp=6)Dv@Lx!`~?862u7X{3Q}NlOd7DSJaUBqt5^~P{20= z!bYX7I9U%EZk-UN)k2)wrxaK&?m7Mf1u(J?*jb>Gq0_IAIJaD5Ptj_V4qY-R@P zfQco0-(T;xRcsX2)p>j{3^|g+NVBNt`}Q5+99-mCX|$Olxac*1T&ddo!D~7{y6+bJ z&+4>#T@Zv0uf)fLESz11mC4~DGBs#1U80%;jM?1+cRS&4`n<`WH{Fv!HGE<;;N3=@ z(UtBb?^NP}8h8ige|mTb4{!z^G#+;50qUqJ;uppRV^TKkdw-ch=zXZbblOLg@i;JOZQo@zAd-%JLa_Eu7>9eNiB}Z?k-F z@Qi|DN$IRTicOYvDQT?d$IcU*#mjjX$qURXPQ#;}FB>dH}f?Et|(4~S3;1aL`Q1Cfj154bxbHbVK(L4_h2g(o;iJ?Pp2 z{~>&!rRyd$Vr}2Fd!9I@r#P%b0zU0fy@SrtrIPCHjXG-68_>{v0Vo7bF=?EMp$t{n z7|^Ps5;^=s#XUBsaH4fjd%+`hwb{Mdo1o*#TI9x2OMZ|Hy78PQGdW z&?STPi`V(WFY~FVbyrdOn5e2pcGE=}P>jxHC|3k;{=Au_gQ`N@wLk)t1#cOv4~tB+ zt*D|=Dwh(Fj7|V@*{?Uq8R?8m7KV^O?DG?=HaZB1Y(b?VCo;e;Vzm%~R$B)zL1@Q2 zJ38K(&{L&9Fk5SXbbTUx*V-SDUF#V`8snnq7|AugA1p%cdkYZ~lh7sVn&BP7V~hr= zv5zq#lVS<&rl$-_t5Lc3Q-=s68Te%)b{+1Bx)c7fJ{#3?G-UZN4swhYH8Ym)kc9L_ z-d`*AHZ=9NnY@n3?f#nF(scJCP}$1 zI_>48NfM$ki>=yz1FcmY4%Kp88hIC6Je!eKlN$RxxvWWrpfVHE0BQBBJtmY~OM1g{ zQ2TTMmzdh3IbWShWR723*BNg`WhB<(txR9Fxe&%62_|4bhHN#!2dbIl4s07CavXpz zVlqe!i1@6VrecFc1u0WE?5I>&t24_@vl_yvjtNC<55(w^{9+2U2M}Y#i`dh{{Add^ zHOn9~gHSAvNDzrZqjsD6WsK@N=Roe$I>uC6dZ5XXEKG}%@2X2YZw6y~0RnX)O%$Zl z9H&Wwq-`PHTr-FQ*+6lKvQ*8JDxRRnBp}6YTdG0cEuvYOie=Ae6mQE&BD*%2HY2OV zj7%Auk=53B@+nha6DIGn-a7u5M_Dc@)hxA6g&*=scDztBYEW$RN$J+FN-@IIq)|qV zHh?v6nSQJM5=}B}@N`?m+VK^goJ>dq@bDrZww)cD?t+=4;ka9BIPPY5(_~H6-Y39n zO!m(1k}R-?L!cZW0l;d%=+v@ZvKllRBi5YJC_PHawrCvWTWj4R&wFFnl$m7xf*qZS zQk<4*EsifO#juybISioj0?3fI4Zoz3n?L-`puVrqzRD^W&WEWSRjDaVwj8WN2us^Df~ucwmh zf>WI6Ls5OOsk0=!r42+qRi`dZsCPJZX-6;!VtP8HC3T@AC2|q%r*@O(GGNi<4J^`( z=nBY)sy4I9vXM++$TSg|Zkbp%%?NSSq_s%CiG}UFEZpqa^YJpWToaKkt-X zHDiw2_d6w58t*sx5*|(ONQkC)Gd`x~q$fI?xWC4`c%6PbCjX^zeABzFJ=64GbvBLP z+OGtSvrm0LaLYayG|}4UY@Tl1jnim_&0f#uXJ;u*8+!v^HTgJ$gm_8g@C{IFLOKlH zx>d6=d2Q^u^{~AUAA4?vpu}|5+1!1#X!AA0z5(8^1ztk%*3YKjFgi6VfsdKl!N+fB za8jx_B7u^v;pvq`LfosBCY3v#SBqJ6qIVDH9>b&KnVgI>+%S9|Y9a5Xf$Lu` z-FlXLZzAuLE#!T&LEf!}G++DFJXq8aIaGbFD=0ag?U`Vhh>m?NE>S2p5lNEad6?v@ zI#JxpO6j|F?Us>~CIx+hv5bYMjT2?V7oL&Y*6&Rs&nEs)Y6W4W%9inF12mfe>)Bq^ zbXf$nAFcgL%nsVU^z|4olLD$4Q%UU>tV7hqEF$g3&3nH<6d_&BS{HX|CN=dYNhVvm zba!=H)#F{&wVp8U)_~li5@WDfQUaYSos7hzZds0PBfK;6@01@;e|cF?Srec@(c%fe zFwA|U0Vox*V&zg`E4NY%Sq_xJMJd+P8bv>(h7|R^yzZXPm^SotOn>wtG%v5rZo zBMGp5U_~xEVQv*8uwKHzl9!g@1+K#WTtvcQEH9=*-wk}$>BOw0+0&1<~Uqn*j9GChcRbWXRO zdlpNa9HmuV7Y}Ab7Wp#RnxSTf=ksQ!cbi$!cYB%4rZq$ivv|{-3fp7RmVmbjXiTQ$ zCX;^)XA{7YD8J7Hni*f+wCkve=_W`a5p9b`d5?-RKno^7{HBXsqKU1gNPlxHnU>UO zi@i;2%dh<)H4s>A)+T9eHQv2V(wJ&IrA<U9!n<(0Ly9rUW{SJ|K$QYIx8g|xRT<$}zhp*7?VJ@j_CvB4EKkTUO()@>s+7Zlu z*rAH-%YWEj+uivO6RLP*=09v#jk}sYY+H@Hn?7t)#q%jwBnR{OD%w#lNvtlX>qduR z@NxMMxxz5`R&A1CaA|vuYGCVa@*i^5z}DO6ldv1c?2zXQ!@@f@eSmRyYWe`5lHAzLK>YoC)t;Cu*zpEs{-`Ex?*M95FBA6-&_VsK#ATo2v z@5~0Gz0M|6NaVI%(*1y(IYbJHq=XC*rr_^wHny~hDBVYDHjF$`aE6g?XBg2=O_kk_ z?%MC=OoC}d>jg|Bn210vs4OL$MkRC$sR|g08m18~VVTuU@ltQlNZ6R64baxuE@EHC z!3~(U|5Xs&9YQMF3_C?nnIns9+pIIL?WDzKn@hS=WUJ=0aL~1lV;A;p8i6fe=!8wV zss7~FU(W5$+zCV#bP2jD#VYm3W8+Y&o9*VK`8e0bqAWql9Di-Hc{tRvdFaTz7F`}W z$?nhZa%6tELp}3Zw&bi|59O?1wslx=+dm%k%xxV$(2=07S5`dq0JDvQMcmho?8toW z9lG{%G*9*p%^0?(*tBKnHVL%ztUberGm}`dX;{QSF1oXXf{Y{V88*nD-!oM29QkRk ziTt@f*dAfpi#q#i>W3OB*Zwnuqo|f;pahQ8AU84(;FzcFq&76s!lO5M&J2~J$?uIO zH5+;xN{%M0ibfMLi+0y)zs<-p0S09xb~&P1a;I`9qE-YZIEFx6sFAUkaN1 zb@OQQog7U{*Z>Tf#To|3JV{)GZAkL;C?t6WA}l$-F#_HWJY?!pLf(|8}$*S*BUPYqXToskL_*oi@9FBBS7}U7|5yP$ko@ zBWN<`xkY!YcZAz2yXha_4m$n+^ls2Ij;sEOyFsTrR!KI4T>by|YzEy?!-J)ey0qa& z7xdY>8WCNXSMPwo`~Ty?`_}#aW2r+?SQJMCt`s;G-<}R z+0O`O+CvZaH4k=@zaFAY)}^dz5Gdr`D%SGsU;LI*^zdeDG1*9%86 zkl6q8RZrb;`{)1k-7j9;|K1y~Uizb7-@WQlk7TL7+F6K8wG)Jkt{z}@I~I>{cucS7 zsl(t$hqK=6?df?l4Qia#0Mges(RuU~4QP-D%aF79XdR5l&5L)n%_Q}m-i!zWx#1SN z1eP!{9s*^$T7V6ZpXpF4koKK&nsV?wR)Wkw|y)u_nNhh2QcRR}KLkU=EW*88&N zrTH4)-y`R;?7M|sB;~JeDnFF$RZJ?btvlLg$XQPWewf`DP!ZOd42Um@POapTU15w}x_i-X|EJH&o7f+7td z_~B2T_3}a8EP^cW0cW#H^<&f>+srT>B?N^Bb$7Aj97Gj{Ik3>Nr~}>;&IlOnaC08} z(yTlgA5lj#1D2$Mc4-jU?nGzynd#6tIGri!5)B8^kps8)ZaoSiU)CS79E#&$4^u3g z5D>(Hd{}qIzO$)F_w+jx5HP*#AA8V@OI~e@1!YesgxQE60cW54)tc=O>+YnY-USY4 z`h6E)n{dX~q5;5BYnn>!en*+&Ll9O1R&hoVf#&dJolEd#2kl}HCHKS%Y2Rs(CAJ?8MXvT5M*PV6J@d= zG>bA>FuR?ASAc@Cxj9A36A?)yhR|kY!8Rk^Cn9DeIaiS?VOL^L01C73FyspWClpzL zN+=>5B@|5tW)n(INR#G7pc8=DSKA0cZwOB?*7ny9-^DNq(>o{2|o! ze5T{lJg-iF{JC>1iqXjb1Ct*U$0Kk!lf&kbWEzpd%dE8f2<$@Lt34~f5kez&v6@kv zNMRV%9`5H4?^CH)oN68;`ra2JT}aT6R1hI+HVT@f%YV4-~Xb zDT8V4IoB>fU32T5K4J{OWuaMW?YfW>1c140jDLQld@{UrHSNv16mYWF1+X(6{@Rc9 z;<)We{d9A?sF|yHIbI4sQ!0o{D@dAt%+=r^LVqF?v23vE&q*LJ?_gJTJ+3qq3(|g( zr6CWM_CyXma;4l~J=tquQon3GjVYH5d8J~aZPn(c-OPS0NxwAs>%O#&S~{3&`&4fT zvN0S3pLI^|J|Y(}h+{(1ZCJn&#zJuYT&D|Gn&>R(s399$gd2{@JjEQ~g)w1=*O3h} zK}Y~1gApYyJUb2!HRh!u!EC+tIlt8_rS0!S0fp%K+|1Qoum)wuU@)s)Yp|sMd@I1{ z`@3TshQssj7j-v&C8>PdV5toG*gp&v+Sva-?BYj)8{U}QT;GYc>haZ=*s*6lKwO*J zFBUYc)P96oX1Ckf*k^dy0MmgBudcq!Zy~4pp!yK3c3L135skL9vz&C<@sHz%#?Z@X zn^8Oau}{YEo1pu9!;J2RNZ;KT?x(cR9U45Q;Fb>#*z|AYkEwWmXAqVP#m-V^B5zF$ zK_GM5lGxYDcM!1x6S=N3@YLI&no>zD=NYmRc^PHm)+HrEc%GBS>jNb_D4@D|e&ODf zG{m?-zc)cQ*7;r9IH!TXNzU!3vV2cnFl#TQlqbh?$}uTv9IntTl2oN1CSMOF?!)A( z4Iw-`m_L)@YTto46-LzXLT5^jJRy@w%>bj22^^oTs1_9XdIWvmvlyp^p{`);y1#JfmM3z*?(Rw=gDwJ=4XaIbWg z)yY~c2QJQUE#v2ZXn;v&rdSZK&mC=GXT{XbOB?q$3O?-Di`|OolzM5Y{LRdg$Tk$E z>ET)%sxrr@W`LIZl*D&>R zW5^wU{G0cBF@5W(?#)n(wS%wufEcA)(iG|hi&4m~NbS-}EVmyT(AK2q>iATev)a_g zrL@6G@^%}qbJnH3FDh?W?edCPm1g+E(RUDqvu*@kJ&b?hy_raF?KV{o?e=lC>j41X z{6RayeV!R9I;9xu>l5BtEh+YKAsee+wJyAt=P7!5+G2C;vCR>Ei@e2v6E30a9_K%KVFkW~ltjRynLgE@*L>pqJ*U?M>ocI1gyX8fb4=<&`# zVC!%=ZXCX1Y2pWeM&d4Q5+8Y-#GP6aw*oMri!ET>L*iGn%D(dl^6%J^KW*tV&ycu% zo5a8Wki^zoTGEpDJVavDrsS&MkJ9Ff-;nsqHYMLByzJE`@s~durP}X5GD_lK{)@y{ zw5j&HKPGXvHi_4&WIGH!r+&6W!ux(oV!M8R^2t$3-tk)!r?mm-o~KD{$2mXy35l<2 zQ}W+_Nn*WC;>UkS;?y>Y_dh}6c5M>BxSqsz-1>J_yGNUn5B`G0b^v|j=Op&FDfziy zjnd|ye?Ve8s{G{9QQEvzC0oZ<%JFyon#6X);av}txI-IgZ+VQw$t{UX{Zz0ZE!>`e zYV`~dAXB|sy7EsHdZrFV8Avu__|%KD;jMSNv5N{yKfb5K6af2}E69SsQIPe1^+$nU zN-lWCGfyfb_18mWSnT3{WM`uYQ)3T?{i<`^3$ffw%#{uzo=1vg*yCfw;j_<6vM5I` zp6pCp9yNs61`B51(p(#R>>dUat&VQ9+maq4?U_=N;!K4nQwGbJY++P^Yz|13@C>&#cBFdb&6ysc=iN93)q7&T|iSR zHY|W#jvody#6O!W-38s%9{ZbKR{vA$iy_97&zto)RJDX)qMByZq6I{I9IqfO7u8SX zrd~)22DPp+($cTm%7nD=MnYQi$tuuy8H-ZVQbU#%!+8_=F)|rx4MI9`cdU{CEyUmwAbt*5-1LZ0U~;JoUP&q&F3;KW>C@Ug{( zu{Xoh1{z$%j+%0#!Ws$-V6@@Da3w^6y=l_)7abkLSP>TS=$Pr>n2d~)VFLAx|2qzysBuKr2*dh43FDvu9xT3cV=oGz zf$NP*D~#X6(=13LGtoOm8qlvQkAb}s*oEDKXe-=;6fIDYn?i6w2*%gLAsF8e#~|7P zm2Z54EK2aJkn+^sqwy5RQVD;P_13<%SNp49tvilf-dg&^218!d%8w_uXGe+PEn>$L zHpz|mH*w>M?U@nGWy~lz{&8kJF&c>%&D_F}8_tU-Fyz{>;!(pWf8wZw7aNH1(4h_8 z6UwbO0h5y@Im$igvyQWqy|8o^CrKOy2wRPWK)Z|#EDZLgurFXa7BH$Jx5%(mg*3ss zxb@d|wP^;PmKzQpt&X|z4AbFR5>6au3_{@lsBmz1xC6sqe6Mm^vFUeGCfP4gz03?| z%GYkeB&4HdwEYFS$7mUAf<;@E$+;I^^}jLRU{$5ZXG~x@<5zRMK}%9T-k>EZA8*i- zl#e%PNy^6?v?S%@4O)`&@dhnP`FMktqEZA8*i-gkEhH ze*2up5Fl>;uZTDJh%AD3h|V*4yDIa>X8y1JP3fQo?YU}VN%mZ~we7Y>gimeURs{EK zYl?At4v0G$R98TlPMWyUGugY%G8|nnS4*R{iyl@5^2WeGy;0vAH$AN4B;7(6?q*pf zjjJArsmXm#FLdboCtuspXn07>w>kGTXdBAV)$X2#UUiloic7RJmUZ2(GI-b!!NwS8 zwv)InIapYW76q20Z1x7LSoQH5+#fKt^L#kKc|T;QpW)n6g^+=%Nfm3iUJ6UF( zLMmLYV=1-izQ!F?U@kmOq|1o)E_Gj&7%zNlwe zKl4oCfVNec;&>Y@GBShW?34s(XTXa|_umXAZFI@HJ2EYd#wpZd>*s`wVRXs&AP4jC zVQg$&0cLa1a%g0jwjL>r^4_?LR2GF^$eD;$?(3C>1ua~k)8KZ6xtn(!D!KM!bY7WK z({HvF)|;Fki=HP!v6!Y_U8BGdrr7rcaYn=RZPN+{vu<*vTK#$+Rcne=LP&bhWB{E|y;V|qS@|;FfPLfNS0SgcVIU1;OFMZ0JW(TY8e^U7%|g(Ay)9FCfLchCU_Yld*ZL? zMAtI=5G58D(j1ZUBymK_lf)4TNt%*GsIE;9pG)w+KB2{A;awA@@D2}&N``+?P@ZuK z3?tEVNEa!Hi5y45e~@dHkt@P>imQ^arZKhFiUU(t;cEK=+}Rg5H0WFQ1(_X)?XwRi zw*f5uAaJkez6K|>xpsoz5`JQ8VKsrkjca{0Eozjhu$!@G1D+l^nq3lbfNwf$*UcfW zP`kGxqd~Tz&Yc`GCy&v|CU)$D&bsBGKOKI{R<J*Uh`=zF^pr60tP2ALZMZp>_9pE$)yV?G;%>B-PyHj@?BX6VBk(pZ@mOsm5e&FXJT&4oKQiJzAV97+ap-1CJ||9= zA5_xKmc*3kF7a4tuR~O1mw3>%y4;DDIh{cUM9PnHiwDhlaU|536Kap)(dJ8pqQ;IF z*OPDm+*>>{A(f|st*s{s8tvkZa977O=4$lvd2KfF|6}L1Aw!z z#R9oxqH87NjaLQTtbh5uHr-bD@_B8nG0NB*Up}wRPWb!(^t`sGNyo#f--A%pu_w*!pEcKeKZAM2?P-avx^Qg#9#$z9VJ*niTv5zL)%$EupAQrDu`y#bZ9%V;@P3?oi+n1 zXL4G*9df{iusgJ!!~U8NZO54*N|80vY3&AU22IONy76Q1Fe z5Kb+?4C2WM#Q(KVV0Ju2zif4UGe20C#xeoG#^`0hhdB(y-r->@(ov z?olInKJ{&@KJOD`kZatv+-KA@%o7gnD1ae3*DUUgfvmc~71V?Hr=E+qm~t>~d#xav z>mv}$krh6~NeUlAcl>AW8^zL&TeW4m947s?XGN{(lP+a%1!aUrVI2VjZfYAV37YUG zO%WA&)epCHJ_8`byldY$2jz8@m)S+8Nw(8l94Bp z_JqQldNe+X1)Vn9t>D8GojbkTPMO{2etaYV-ONvuZj0WgnOXV7&(_1~B=! zvd(I6f|>8ewO1B`E+=dH7}5$0;s6Wpe+cvHx!eWeUj1h8VqQGe#eeHvURv-bbhY`_ zP7Lz;hpu~SU3f9KNssA2;GOj`mq%kRtUU-Q6vq1z697_x6R$yK-IgO%ZsLj%OjX7U zM|A8#D={9>Ny})x_A`k_jHG}4<{hJb$||ucygLea8e~Ej!9C>;F9|LH{ScBJ&$v>4E4y(nQq)l)xYrG1gc~k0y|ir3M1D~ z)mX|QCYM19xA_810aC^rN`)R)-L!cy48kGCU3fm)0_>t*iI>lILoNx@V%XNEf}ip8 z`mwV^@|Z*TCkbITl;b;|y_YEvwwCpdv8W9{7m|>SHKm{)N~6=Sh+o=RKqual$23hF zuauwZic;-|m27f|aeV%$?B-N{J8lT$<73+Jr>3;^3T#@hB+YsN3xI8>r&=9{n|E^HLJYENZ>$~+UDX$L%KZQ3pU>e- zLV-O~C+R}s@|}FIGj?<)69WassM?pSCiB$ZZ-J{u&$OETa=zC3&go`0>@O=f1r7&& zt^c<@^r74HgL1h{&_5y0m2#Ee<6 zzRr%oN$C4NPdrZkQ%^ii9@3K~u$?Kvw$iJ4l?Li!x+yo857DMhgGlnF^^jln;NRh@ z;eDhdBBYw48^i7Hkcevp3(}7(*g)_k!TQvXB2^2qeAz;a_lBd;yz(`J@c(h`%VA|pOiI`>! zPoNO_O@V~c)LK_J-1f__{YWovlaswft%V#KO!B+-J#88Nx12y>y&e|*{r}ME0m%@b zSF<13tY6aU0gsC2!%h$QrLhbXVBM?zSftCH9v~TIbghlm4=tI(EjvBnm;RQV9`K0o zwTeSqY>XMlkrJg2ygxfQ8l%X61=CepY3hKaCmLSs=&td3b|InIk}v8~(n;5C8w{32 zN_uhwQs_sn`}|T}8msHv2(m8;SB;pK=H`iIZe69iDrC-T?OXfzHdh^t8TpfqgQD?dS4x8k-ysdERn@!8y<7QQVou%c=GWK%<~;BV}MCfDi&r20V= z@D4Hkjn|&;4ZirImrS}MozMTlaZ4w;AG?^3pg1$$pTJBPO^ZLk&`UoWaK0ZILRfs zfRo&Z91bktWaK0ZI2kdC@-P)Rv^y>X^M~L>N$kmX!3E1)yWj%7)GoMSp=cLeuynHv zE_~^+(m$InxZoX+3P-5zl9E=#&8!=ek|DQX_^>ed5{w8KJk7lXBPUs$z{p7{j~joa zU?9j|k$_kTmfgJ*r=7qQ9(P8%zbR;MGb?8LD*Y+?rSWs#8R@54xiwE|5 z!a1EwR?!STDEQ-r5bPxG!ViAqgMk&PSbaH8z;|95P9|f7Gf|>j47Au`wnDQ_kC${p z8hfkD6L14SK^sRJ{$ztrLoCf-juT+*|8kr_65{c4oWRR*0ytyK_Wg34K#q6Tt6Q+eI(O37F9no%kij3H-dWxp4xIlk?>`0fjr5K^>I894GK{oIti>O^gq= zI@NYS8m;kioB*4cNDf=yV~lwT*H3Tuz3vDz&66+332bhhfNXuaI00T?juT)Dkum#n zoIud${7YVr6Trsy|M9)<|9j&E9;?V3Tib9pGqT&D_cTrbOTFy4xSyJvxe{gZm5Wdo zCoo!`G)}p;^!NWQaROV4{WMNs zG|HxN0;A_lC&mf<`X*1^^w$KD%pPcOsS9J7Uvgo@F=|hZYpPE6a7L(lMOHPZO>I%l zNQlj>`CD5GH2X+Yy?a=GEgMfG0KF;$di9o8jXa`ibFdt->UCMw-`>)y@jehj*a~Zb z8b3=>@!70uTvWFR)i^O27VNkP+!bAY8?yRV|4sZ64d)BT17?PSshW!~e=cRJO%&I) zcH+tA;x}(@ab(E|#qZhN;&#Q{u-4aXZgC{g2(3S|xy9|cpJA;(vAM;OWh1oy+~yXy z6Oe|rzTBuSX|M^xAt^^_{kF|5j$j?3_^Qn`wsesi$i8Py}n zigLl=gp>36`n)C~I;QCRIA0|`SG85eQJlKii2ik@x*gTl?!_-aFldXKXYIZs;YI0b z=*xmMC~SEs*LQq^<(a9|Ig<0xSBIQ>Gip%SyK2GsBq$6&cAZ<_*Z5yO1q_F&q@Q4ul8%I@9=t~+h6=ila7P}vwNC&t>t9?wk_HPF zL^eU58@2s(hW*Lh*~p>dIGT33-tlctPqp^j3V!AeF&$AiM_tdWkC_RY$jtc^4t4m~ zciW-Wf%Em0Y6=Jzxpp2w6-AOKaHe$-ciQ0~?41qNXZ${oF+*xX$Cg_u5JfiLdP|h={*Brq0 zarDmMi`VmYE7#{_*P;;rnr~Y>;4-)f4n1#rxWcDP{5*Mj_=tX@f4?pEpnD=M1vV#hH|+Q~c9)})jgE@$Vp6crBTzqdyz_|PGgdsb-sc8Sp6h%V z=XaGl;WSpJBN}Ur)0xm?EnO3#66198SB#^3>&GU5vM0<)*4^%6nOcrI|3*qzGj&#j zSB}LpE)jL$m`>|H*ANJc;rm?<;)3 zLA*``N5&n~1X#*8g?PFU+Le(F(sJ4r!pndW+w_Vq`2T@6x#K@Hs^3#z(L&>d&3>bVhGwLC`7UY zmLuAQ4qEpl$%sJ_a9wpfxQly--6)lqD8vkgv|Y(4z94*3WH?Sna)h`kue55EC+o#wimN#H36TTue6#=Cjf#Pxllc)u}>& zl8hUR>ocL2z^NNdQ^MM%u!yLcj7frY=-IMB0hWsSX{CTByFx_k5+y8%+DMTk(lCit zRb@6!ASdZX-LCZD7xRNj@JfP?>X8T?H*py<^ixPE8xoi^JOu1=@L?-4Cu@xk%IGAx zf|Dh+(~Vyd5^ARJoRsNOXh+rg{oL0)#CdCW=#Z|&B~$=~frv$0@ul@9rOdfavqD`L zmdQiKOdgt7>MWj8pOrK%-?WI5!llcbpYatkHi`9NTxO`XT$TYRc#0Y0WIC^!KUZJV z3s)*!3omI*p)9y76}Y7WdWdATr|qX9&}(z9e$wpfQJYOd#t;K8Wb9flbdK@0)VLib zWDFicFEh|b4;lMra_ND(#2p-{HX3lr9USxr;2Cq)9}5@*6_QEPv=k`@!|L%;F5m#W zinVLKfa69g_vsy8M~#3nCVm?igsWMfl7O)QP+e$d_0*B#x+JnOf0^h`(~B_Ahrlxi@vS>#T^Z9 z}lPtw?Bqsi|INhUaTE zB%#54Lkz1C&n_9%>cHZkhl1>yA?|@NgfTn{NJkqbgt5+(YDstJ*Gn;-i8$L2*0$I` z#5O#<@JvbOjVWFDX!8nCrlT!VFF+w7>YS_uc2|2jXg@ zucAz>$QUbQ+yYh#g9Jsp07^+2xg3j+WznoQBGnT_fo2n!rd)TWX!adAhGvN(&`b^X zoaGK8aPjUS+4^nWFR15+V|4}Cg<$CK(5g@BeJJq3woqynD)O-vEM?RnuqWcD_8i;* zMS6Uykx-XhC5tGOR5O!mxDseQLQYq60WdR`$PH}rz(&|f85aa%5y@0)S3RNKZ?l;U zXje`qEhh~4R*RSvw}Jo&8^lh4F@OSCfLAzD#H$=!FHS^(*BosUhT$z`si?3}k0}A5 z$!~0D2I%VJe&}E9UtouOI0hHX>3>6}!XE-(G4(zMDypPCneD=__HRu8^Dg`Pfu8;M z%*Cf^G|+;X;6NY*polxkvoX)4Gl&JW^>botnVdHHTY>PkWEJ<+e&xmw#u(a6v*?=5 z@^r7}DDR5dw|arEv|i{xU>OCnAypP2;|U{q&JVC&UgQWd!iu%*=Awe4ca4>bHWG^Q z9$H5fIV9m={{GTCcrg+A{W=eTz6APU{ksAf-ovI(F9!58Xqm zDcXj>eWBl(jDZpo(07B%0-Vu8u=;8oz$NypVB59C&V+p#GjuYDJJ60{HM=_u0U#k! zl~K4$Ypr^>?gWL^z*H&j7Tfcq_W2SFh=^+pCxr|ZK`>dlLC!R^*fgOw*|93QtStVc z#lpTszG?^AQL*-7#n>o&f5CXBJ1!m;h5aA;+^^Q?-}Xl@=I#3Q?YOhWr)W>iy-s#9 zP|<D;GswclK}eFS{U#4^Nsl83chPiHT>AIu4sCT^g+QlpT(cwS2bqW`dheaAT{` zPEB46LvUADkOt(^i3@Ey)6}^axTqC$8V&!m;ARGfX~!f`Dq=Z0TKK)_7$B|<$Rphi z>INZnm2BAE4iNVO-P@+!463!xS6S0%Ga7xlIN}Tmo7H%B!onRQk1pZu0FK%f#%&#l z%IYx60y7)5y8$ku5r??*Ih;o^G;|(;%luzBgt6O2Z@JRwj~p*Vk!oja3o#M zv4|MSdn1JFIBYRheOIqtfo$M8bMr`eO*=92*9)RDA$#FqaAWVmu}pag2~FSY42=6H9>GcnPAI zw(%1r;sti@57RANg=}FQ0CI_2%s!>coe(9c97LUVsUz)@YNk(7@xv)Ltdn9?DHM=EVi?%W%$m%|L`0KR`+KE2w0%%>Cd~D^ z*pTjHW!7A(Lzm#XrvJG}(%v@}Ny=#}Q@z!8RuVtH?S5zo&4NsLED`|DVNLXy)bIH9 zFs>iW@;QvB9*hAljDLcBgp@&>?lEYoho?+z4-rv$>k^>if8Fx%S0U-9L!No3nG!c}w=M0GR4cK(DGR7ldT) zJg9q2D_{VN5i;l}8f}@e4HJ|U8rV~oNX~5%GB77wAM|MqcZe{dYd#A50-=nfk&Ttb zX?OcNA!w@irGy{R0rL!l2Sh+26`SgPSzI|qvMA)FEwNvjF(1T;k)|?S#Z#tMe*}~= zfK=10?s0k?b&!~Js&}+b(6%0{ULz}UcTIJ2kxxRE+7Lgf0$551cWaCH@7ScqFljNH ziJb#GLc5#EE8~eVdwQ&M&Vv%&_H6}V8znX8AuPBP1_(gjp8k0=se%?1TqzSs7ZtlU z>SL1zs+t$Am3nFfG!n0&RvqTOnw5`WGcLJ`$-;GM8Kml97GR!c767Gg5fhhb9WTn&Ra(74`)!*ZDC?-gSk879k z!y48|53cfiwt`G7aFxR!ahPy5RWq}(SQ>;F$hEUvr489VvK(f-Ht}0d4!>Zm9%z9x z2x03Q0D-QhYAvv3(gdkZFK3HVJSC8|ib5dI5*O`DitQOgLxhY-Ih#k3WTtkdh=0Mb z5X$?s(a~j)NWw^2C_JQr%2Q*Y(73+%9oZ3o85n;>2RWq(rvD3LdnSAve2PjU*KC$UUW znru!|Ec4y=)4LM+WOP#1ZoXvsTFyzRcl#X6WfH2unR}WT>BgW5DMrdHEzBDQ-^5Y*Ne9 zU4@bnkBTr`uWVXsFCVo$lXaW|ho1uy?7J21&%8~Ft1M0A?iJ|lAElt9z4KwXIyAvu z2tiw_iAto7fDc(xButFQ-B-(l1qo$R$6}hfWJ0sB8>Tvn$u3Hiyi4L^8mxWA znLubERl(KvdfPeKice@8PX2mOsao9)GovOs&UmW*SE=qUXQ!GW=l79RBO6}zGC#n0 zm$zpjK2~|QCIvGZsv)N~-dQhRA(a}lxZaj6#X`ueeT6%0LP`u@ujmQ-Jsm57l|!9_ zFtW>GR^lt2)^4J4Uzrz|!>zJz5D=vV2rYYMN0DuC>}A>oNq=@+RA+aa_h?zY^CHwA z7CHJ|z375^35SXcbULpJcSPmccd{{Cy-51eY&ly*WLUQJf(wAUaFIH7(FGR>INjr9 zz)55^1DC9Gzhk>Iz7B!`=VN7vp@b;ofe&wf9G+e0fIUpNwr2t^%=RZ1rI*YUmRUL$ z0v<*$lTAmSMMrY)IwL$Pv2KhnIGcRP5sJ$=#)??F6?XE(NKVt?*+?h~PB?ooDlBI1 zrt(2oc@H`Wq+%n+st87gz^nef7?duuqhQf2tCPH-Pya^+^KCIDCDiCD*q@^&E{6V9 zX$^oA70$mk3eLaPY<1q*wac(xqVXEpE97!lt#w3IZf%k^0(i<7YLG`A7wY%yJ1?vk z-6^b{QDrG=B-;+hQ*Y7!95qqHun1eh>L`!>2V4=A`+XRV4SAkuwHIQzln+bmkYGsgk-SWh zVniZIc2vv^m`B~49z#8y&U6xx%!hyv*mUhEBa&yUcgN`uy@RM2m9GFE*Qt<~o{pRm z)&@@@?4wsjP)Btg!WqpTV=JVN3*l2}vlPmgtlRA3iw$$|D77<%v#jQXw56Kmg*>KV zJ<9GbZXZ)HB2N;g5FZeQ=iiE_1Qf1!&*vajmN?x9Pn2P{h1f-iZ9@ghKy0q2qCp2Y z^|yf=9OU6nj^Gtm1^$r1Eh*Xrb5X#8iw4ZrHFa5x)l-ytTPIP;P%W#y9ZRnR4x^$8 z*QlZ)UUhb=RX*b`v#hzrmCRLuANc}10Mqr-L|&0?{oc`cUT`75>_d2=kd&n}UnJ>} zVq)zIS(Y41kcpI+7e?L6K(EVPF_TPcDl5xsZ=&FHcC^iqM4!{Xo|v9>ULuDKkzSn2 zA?vMWa5+3uZKHMR~{xJS60ksUIDxvE_&Dx2sm8WhpjOg7CvEfH^Q!MG8qy4Hm?b$tRq|DRq)H|W z`V6>Z-z>oa5+qjnh;gMS1awK=I@i~C7&h&&Qjmwhj>4qP(6TZPZI3|~&Z2M`a$Ygz zd0(CLS25f* ztr;dVt|~Q9fQ)yY7gsg)Tijzz zMUr-0WxS42LiB)hU=vryF_5uFjvX^}d#LGHe=iREVz>&$Y6s!V?f`(1gj+orxEh+` z0O<`HAqR7awE8r^TCHAwb#Q^lhQunb`oOE-aLU462cyBorz~7@`oQAolqE|B2BSFx zr_WtDcW~~ah0&tZqf-_x8ho45PCISUISU6p{;PSf=C3Pz&cek5XUttPn3i4=rSAiC zqEpY0nhG!3pR#*rW!2c*Pg!uzKs2~0qLJb4pE)pi%A8XMPl--jJaEdOtFaZJ^QiN% ztj@&)XD)jCKvM1Lix-{wk}Fm=o=K(0K!=oijKvd-2>e&KOucW5%HS zanjs5yHaiz<@Xu2{1F4^&N^lBDIi3p&q{w%csXT7kM?aJzUYjD&O3`@XD&HoS8omZ z)#hg8Uoi0Yfd$IDfif(^4Hrw!IqR%Ni$#n@AmkMBNrs1MLCxEae8YI-tbu{Wd_SJ_ zZIXHx51h8>jD>TTP*E#lm!x<-kNlD9d)vTi^XD!+BRbjhZsS{pZ$s~>c|OnCi_f=| z(|~1Q#tgXklyepg&X|!fET|T(mduy|P{(H68asAAc}q&adG5l&W0wppo^{Tt3+A47 z*ueQqwy1djIg1zm1I5$UkC}VM!czv%Sv+7!dBdWGb8M_`87#*P3gFc z$dT(idf@HM9sk4%|3P?$^$(=~6Fc{h)V7&rQ3IMNmK$9Q&!0tVTb5hAXaTeP$aDF^ z^N%LAZP7&6YAT)RW0FvbPPRqG8*snW8q(?frL>;T5SuDHU`pqr7L=cL#^O`v3^)WV zT72>`=bU!hz>+0B!*n)b9Q~@R%js-~E z(U%|IO6oZvt0!HlytKNWqpmk(bv3V{mW;4+I!oawG<>yo8|C-Q$}b*eZ8Sf*gw0(Txm;1& z2J0R2H|UwbHF^BQ&Qc&oppfUSqikbsYkYZ@Df{ZrNJOQb z31jnc8EiL6;0rgNS%teb zX~bH0I@js!hv%|nbYTp;%weORr7A>Ne z49;bh32Dqi@f_vwX&MC=uH2$i=P^O->P_2fQ#OV-Bg2Qcb28;dZ^xBO+qr&|?U>3m ztfAGEn>K2Hl5%N7TRYj^9&b)n9M%wROrxy$e$!>s#yoEUWhCp`mpRt)>x>y$p%s+b zZPYU9O1n|$VajNJY2Qw|B5af?kKg<DE-131U}o(l(pIO;Z^&eo9sxPdRM2qu{1_eUt}v zIb~&2ZI9R1vIeTRhH|2Z^sp}e75FDRs^rU?`8Rj*qPLxLlB};Mow;bvzyi#N?s4dx z{zc~vPhEJC{Dw7M!wR!6H(ZFjXu(W5$eQ?1@T=R=;>)iJ9z< zw&(u6lcz+(>rYyzzPSK}WKxG;KRjPD6=iVDcC*@{bB1S4sytj~&f%#Gv9@Nl9Kp-* zEDe~>86h^Y($o%m`;V{agla4nlA`-*leh9qbq~yhaBli;jpH3?VkWP2de8g$pNrmiK0GrZeLVkG z^KWg3=S5W5*ByF8OJCu6Q}^<{`<|+L*X?tz=iR&Lk5{~sT%LEy(|26{FY%dE|4{Ja zM?TB8%GUnQ^S(ak_xmmU{ReM-^x3~1@SE_+30}NGNxS&3fBznxA9^f&VZUw0?)k*v zD}VRr2Olc0E8PF+%J1E?{l%}jCER7_-y9Km@%^78_uWPRf<3PPmv=t&wZ$L%@gwit zbDOQcIqPTh&szAV2gg40{vRwn`?I^OJpG$@PTF^yo!=aug4U<#}3-zb>V|M{OaE4*SsjWzw^xxe`~uJ&$@lx z^AFqmk?ZdH+J=8WcjI54UuW-KKb#*w{odogHg3Zc_P+myiUjCHrV@jul&O+&#mA1+jndzY*c$^9&=vbdkuUFXcf*eMe&qFs?6>H*A6WjY4U_Es zTQe?w)psu+{E_#<6nlU6gJ1vP_a3}r#l#o(w)bD&vDOtt&phCp|M}R%tC!Ay;c$EZ^7kIvVb=qH`i;w9m~HPL`1Y&5^1#RDzi-70 zC)oSaPo8?=qy=~U0`dQ$iCr{DgGAH1-@-go)0|M=Pao_qXHProo|?{^Pv z{Pb;ie*W{77ca2)E8ld%g5pW1zVlTtF17b#rro>u$s6za_5m+mW$(xC^5yqlb@>q= zc z;0?E3^S-kV{L=j|-evFew;B8O=bkCQ`>_}AvG*_Rwb#J0uUh%NzrA?Bz29;1JJx>l z@dG|Ie&ZT@FU{P2xBF`+Jh8{dhwc5LYnROZ(4X@XWHE7c?Z=$yxlIl9{I6l z-u{-p>+|q{r;vTQt7rkS6{W?z|U5G)#f+P`^muVJ6v7<)@6@)vn~IJcRIWO zZ#(_#{eSdMu=nGCJ@J+)bKiVzw=bFDdB1(nSv$=6ga7ER{sMb{)45N7_(PvK^QL}( z(B3bff8ky4IIr`MC-@iG`?(W-dj7|sn0?o|{!)9t?;AJ#%e7bh%N5u9SK0gP{`CW^ zzj4eytMBlyv-i)f_~749xNEoff6Kqo-hXk@iVuDDV+a52=l;$1{;I29`;)!zyWx`? z{5$OZgpXbSiNzoO=3llA?y~m>zV@5h$9#R=7xxP8vG>R0`X9IZ(}rb-2lw0iC(k?K zp&K5E)|?)!vG>Q0>3PSW-n#Aemjn;n`;2Kje{kLBS3G`0u+H8;@VQ@{aLo6AeA^d- zC+vOy18=?g#~0l2{Mz7m_Fg;i=35Ux{OwmGkI#MV%L~8$fv3h64!8GddraN^h*OT3yYTdBHfwYN zQ-Oa+^Y0k`&E{XE|K1TziDvMqOsVwtRw~oZ^O|OvW65_M|K7sCY5(AVn!U>W6CB6$ z@AOj^u*6$@&Vc{l{GS(Jb1x(KHNmL=g)RRT^q&`hPemWyYT=UmKELG5B^dv*-QskY zcdz~S-h1Ead+$AM`fH|7d+k2^?6vP+`=)76Mm3WV`%H7YyHip_82l)B z)L&oxdGPDPlffUNX9~{+e-EGcyLO%V`Xi3K=A$3|*gLL#-v@5`?3b_jcW(FH_jRv7 z?oVsKUl>1O-|5G_<>F6&=HI@$&-$(2`L3%!TIe1#ZmY?A?LFh5gAaYv5l7A$IN=Ll zoVa60xl$d!-M+7#aoeXJ`Elp;<{0t z$DX_P9{Z6MAOFP7x88Q=m+!g1RPEYkrx^zvbkr@kuKC`Ij_r4-zv}e|{Q7rKZ~VqL z3(+fIwM*}7_M36Yn+~6K%(2HE|JD;uJo&VN)8{Wa@4}1Uee7l>p9z&Pz6z(;4$HJt}R}^7CnF z$`fWD^xE*Wa_6*di#_4QqTjb);jrSKg-Sa7J;5jzU+*tV5^2ru#J= zdz34e>~i#ByO(#{c86Vd9KT)X5j1dM_x2r?(jnztJI|^1zkavU%wnZ*T`=l|pdYxC0M=-Ozpem;A!9#ff_dmyDTG znA3G!W#}{e?bJP`(Ag1;DGh!2vPTNz!tU_g!bvzv`eVBa`_Z}Ha{Y))W_RrbEc=$n zkhQa8=)13~EG>C{s9R2hj#9a!b6jP|>h@hbbl1jojV;u|t+v{_b6bDA!UTW&aEFeG z{*J-U+eYE;;neCL{x7j7^AJ$SzOLhxd^vGdOJ&cE_KH%)uX@mF58 ze8-=T8GG2_&u`dc&jU{Q*OMM!`kt%bd+n$G{mWnZ#y7wHou57N%Z(Vk#L&}c%zWLU zZ~E7zSCe?xm%sAO?>z9}6TkE_cAqJJKXJ~$()Zr*k#9fnVE4GmGiDxi=v)5fgcI5E ze9wD7MUiiO`>`i}`Aqk?gAScDFtqfu_k8W^Klsrz|8?2rSKfTf*S`LZZ$0?vPY${M ztN*LF>ws^n`u^`FX`9jlWp4;mX6Z<$f=w4K(m@BMP)O4@ZA056WR#W}5CjAS6a*Ee zpyB`(exf3-0t!_TP!T6m5ClO5ek>J*|M$F+yu20%{yzT)xA&cU&OP_s@$NYH+?$W~ z9ypkqo{^V7S-<#!<=b9;?VVkF_kG@`W2cD)SFhc;>8hIg?Xgz9%$Dvw^s{Ea_|lv= z-t5?^XRqW@=^51iXU}=%y~Ce3-e(^86IOodPpe3CdyUp4#}f4vbax=&#pQsiyRIHTcZis_g1J?+<0ZUq}DW z{?y>6__pxv>YML3#3#AMP!-ySGBjYQs;h5+(zOMs;h||t*Hh}dl&zI_`9-UT_{_W6 zrn7o@n_+J7(yN@H#b);*ckL#w7>sa7_A6G{C z&n;;0+M#xR=+mO}oyr!z(duM%psypKr*eWS-`{m_=k6^!`j1h$?)TmNRA47n=myo? zuLk%9`uMmu1i;x%vSmoGLzcXF>O0(dIf3< zdz~LzH)L>#W~gOT<50!3g~NJYFAQdGXd<7uSs3{TdpweD(L1VN%i~d-TNz@8cis>a z(%q19spp0g((}xW>|V>J^to~Easpg+xYQ@Z04)pIZWg6+!s$6@_szoJO9v` z4fz`8=ll!ooC%DT@neQzOjO_>n-UPxA&51i{1pmT)tBwrZDK&Izdzeq#rk8Y@EM}K zOFg(VtBFDcl^W&j*Fw>Qjiu-+HAq@0y5jVC48|0d0`j64TCqscCxGqe&z7oKUkIh>qEIP=R4wu9%eH1w_R1cLp7<9B zD_;D5eSklU*2X#&eb{QHO5xA?D!)b{Kw3ZIs8IX1P_QArLRBGveb|Bifv}VWfifCM zL{!GA6}X~}ZOQskf=b2SIELNRn^7)f3pI?dNx`Vt7O;<3pkIRQT@*g-8b#N(E!hF; zE&;*H5admvxPwhV$tz&*sb+_>;oz!J_#oed6>9cpDmE6&?;t4K!Q}+I+J{jhm#Tr7 z7d{RCj3QH+91yCS!A7JD7V zvTR4Tm7mgQkD4;miAoi9MRcs<9Axu_-%XLLrjRLA9>5xvs8k=upH*Bz&7(!IE0CTF zcW?~!FLpP!_tZ!=upCH5Dts0AP zCRovlK^drg)M|xaPt_{iW2OpIv#r>UK5T1nZNqW&DPijnXM_qR;8*3x6uK@jA)#U6 z+K9-g=onpmLSj;KqNxmOc#YjO9h<70p=PPcK`IrC#u<%i6k{w2!(=Ij(QQ49Db|y$ z-B@f5i-@csttCB0m3F<^VyiM#dSE*s0>$~2+|TDpIgQB#y#HIcPeGr8f`X!g(gJgV zt-!(P8b5=qR|4EtY(jecmYE)^Nj|`8sI9cX_EW>_3v&wVa4( z9<61ut=8(W#Kx8z?B%hsDfpXF+Ki5^2pY)>s3Ng-W-N&(K+v>_@!gwhJP~JhXK$7j zxBqJ>CcUIv+sEn7`LIkrJ2LivA)XgcUPuW`8L#F<{ohI29QWo6LMT%~oyZmHzt6nD zEze-D%C0il9B2h7oMOlAmchRfQfwR0c2|%|N*d?q*o?+zTG(Gy;YhEwWIMEBsRomF zW~4CfOiST#8LXATv>PO)r`<>?Ogl_c7{_3}VA^4p;ycJ-oeVCJ!6N~42GgWB=FFfA znTFsXrZvJv>s^x>n;@nVO{LLX21^d+jDWvyVGyk3p|N#ZVQcF#q%K65dUz1iM#5vz zj1sP^jKxx2=r>|Dzz+kRKm17e#H)8PzlKb=n2p(%Dx)-SlYp1PlVz}81{ca;gA6W` z!NoGTLXUnR2dwaLfYYpPHH?BnVQr@InU-un&WLClheLD^FrDw5J%cWp?qof zMW7gV5@A&8IXDDSSmHK+#ujEF83;JYgo6%96mnd-;8OQd0}$Aa!I~tq9Y*0GL(XX5 zgv%*6Vc?=-7p&YNJMeX^AQ9s zmD(YwfQt2kklr7@5J6Y^L{dw+$&ntT*$6<3O4BPueLlo(;WB4*gGsWerfmQV<= zWGRd*qAOn2clK8C{zBhF^P01uxJHeIcyc9XTT#AG$w zxeS4an?3EQfzoKJ#*P@-%E*g=ssi&RXR*URl#}9wYn4DKZH+k7gIx71)VR^Yo@qa! zxd!Kz)0UjwYA7~xRZQEJ(~u~#!F37Zl|hl-VV(NjUkZ>0lYe-7-QVbg>IN~va43nEJS+CVSjg?QYz zlWeNQ#{ncB3qDJeSzjs!p+Drxi@Hk(9CoJ74goFY?F5dV_*zkN5f*bG!hBA27k-4i zed24y42Wn^KrsW1uI?vLwu!G5F=7l|Jt5kX0gj=_RB3Y5CX^e@WmH&=gc+0pvoV_x zCY7}sX-VN}NaJTjaO7AVhRU%{*lc^4NeOEZkt;DzhwLspS|*6&%5+%*&{A*@^3aU1 zb?1?GtN2=}xTsGGeSwXyZB8gMOy*Ob3C0>YsvjCYrQ*((!EaJq@m++}!{T8%EuKvCuocQq7HI*pN|D;>oamTP@|atp=Mh>- zBcVEYqePB6*MEUr%zDz|BS}TNPY|EChAQzAcOh`}Q1&?MDzqGF+(p2lbEHFtV(uAf zEiVRMN`F6^(IpZ$zSdh{AusiW>?B9JbJIv@G;?`&bgs)l{D77~f{GcTFHI^q!Ccey z5^0Gi3tr(%DV%y>Peb;?FOy~M0U5kp2Co2|$eqyOOG?^GR?27}1WXU)`Lp>=ZI25z(7)6~_iUtu?$&hm^@`;IhlM44S0hdI5nu!}xDuFEWr}AaG0b8x;Ja8U{i7IhDY4ZG>0wG@&zr1> zhcjUUWhrBDR+2mZDCJC6o>GpFA+D4c;X!|oaI%g--aHRO(mK#muR-o{I62HWOlef_ z;va%Iq5&T<2FUQtz3E6Mk1-riDV3S{P`5}JZy9teenaW>@wUAqyG|nI22z|6<{0Yg ziL#B`x-ZjU5)h4q_)J-8EOqE{27sH3pnG`&i3Y(@=GVhLlwTcSnxj@>{$(iRyCo7q zO2ZdC9RwnbcT;JOR%nu3PNaOOVuX{pO=OhQB|*J`k;oEnD)W+e19;Gr0dp+O$+Dpu zOmkpGnW#+~Q$0l?_wdxuP-I~zCxGj|6A_NbU1UD;#tWfGHQb$Q7d?aF( zA|=AM69kbg%pinoF;I3sBJQF<_k%&h>vI-cwj^GBEh+YaAT_$Qr=p&g9w8}C2QB$> zI5@?KGjLRHuKSU+lSn1uZq{k9>d|rvPbzG3ZDtIf+z5a%iPOA};YNZgli4dP&w{?nP~#Q$9K!g` z2(G~LYzC{9mb22dpT|^dDWua$s>_RDGf9GnV*#J*O5scBd5O?|mw{14rg-N9#lj;S z8sxArROnm}Ao6yFq-wd?qK&dt<}JWT;TL4^i-5BX)4XV2;<#ZvhW4`xqbl`vQXX3c zJSK_!cOb)W^WfdHb7}nlNbug>s&_gsd+2E7^^##baMVXg`Mx61i$Y0puL8$0(bca& z;SF;4C0=p3Zk-E}31h%lgO_sYlQ!V!;zp`l|dQFj!+C^tV!ny`(8Z6m8@Lbx6T zVgc(G3t_Jz0de}W1Mkq=c@@Fy2up<>dMVv&W2~g%9dmy4GL={qQC9=l$eFE^-8;kV z1T22tZxAsao6(9ZXzUzcF|9Wl-HL}G%{GMrt7+(R92{#5hi zfH7k?*^DJ#WYn)p%HAEF!X=9odAG&&t&%|G!f8B+G&13+EgXU~3LUUij*k(}cdpXd zp3Jhr>)wG z@YcZB!}o!|19(bYD##JQ(p-ElgTDYQDFa~-IZv0JrYXYFL|g4ZY#C}sXkycXn6{uD zicLNiK2@K|3{527rLFZ#Wc)GYZj&!YE8!X^{%fXhkla^r^oWX2%y>9B3Ec@@;0rSNq744848A0TFU#O7 zGWeFEkhBC&dWFL)x-jGddOQdti2; zYa}jHlPxxE{}C?3Ona#I`O z_Bsp_Pa}F{{NIt0*uqh(AlH&b=eY^7p|YtlmSkFxUr8^ht0UYdmYd*lVo*lCS+qj- z+*7t&(7?jcE7>5x&}3n&zPKDxV2WnN>2hPqQ+OArXI=0vt-v-i9&G`)gWC!^DrTHE z(H(jQ;>MDKPTY2tX0`*U>B+_3vvAX$msB0Wq3&65I3U>yac7O8tV`K-k_prqFt=nw z5>mP@2=_EtZ(LVFB)*+-dv9KGy8)jD?Vpq%9ix%LJpc=8K)0|`d{3(5=aH@VSR%vp z((LdwBCbS4^|MF4%zqrDBPIfFxQ326wUp}GWD}LT5|y~Xhwf+;6$%W)?FIqEZ??FV z`l;9p=X9Dx5}_KzW^GVbUx-%y$APew?_4y#SvzP?CJc8VC1* zamB;ga?m`_J1q^0iJnZ86-S@VUM;paaEVx>Nb}JLVL6xuO2hghObYiS*y1pi3VVuD zTz?tu02zFT3?3+h2LYz^Q%QM&j6u82%|NLKrLKTJ?ZKeIfB-Wx%%L%cl{lfGcEIKW zIL!G>RCH3AhJZd3*C<-5pachv6gN~zFNyZwg`F%ZewY-Gu5~L~MP5sXSWTp2cXWlgYD)rkmJcR(p?(fCIum&-b&ORd8vUGYmk!^jh?Va z6p$K=Q9bU=Eb;0dafF$BP%aK9KAkYY(Fh?C!}0FLO~|*jd*u(?F$^ESDgOxYkY+DZ zNKaVh^NJ`)EnGUqZN9*2Nsi_-1DSCB35HT{g+`PtjcCC9!c62NskLSh8Jx`ppE=t9 zl`F4ez)#d$O7jv+g})uedqN2_0WiTut`Jd5f?t#69)9b?8%O67v8_qD@rpA7;ZhzW zW$@iHI8FxZWN^F;PLRQgGB`;FC(GbbGB`yBr^?{bGWZ@DJVpkm$>4MuoFRiVWiYJn zy~-~Ouuwagdtm{bQR-f{+l77PB0()JwE>YX7PC>+bvsbi7g^lcqsO%bxCxZsEF%4s zxEoD%Z3B#nv4HjHt3(>lY7e38OI<~e#p6zPvE^puX2c6BBATC0LJG@8-=rHIw-z zOdR|+kfIQNNBDv8sWe4BNsT~P1S!PTSux&AB(M?hr4qOd@8uHMg!fEn}o(4WuZk*s3!tVr_hEWZCc#I8yq_7=X zKeP*}<))&Ii%RMY%yHbSKg6O376I-cX%#uZQ3^XL89dnz+^~ajYd4s4calSq$1TnX zDXwWr6rv|rjXz?04KeUnZO6f#ZO6oU63*Y-x#-ZY8|`G_FRIXEHKGmrHHb$gt}fzhg11xG)xQhI zk&@UT!B@>~Lo-Yb@+r3WTD(t}z%wA0>pjH2){2jgDGJ&KuGQ0{HSpFaU^P<`WftD! z5GHCdwm=pHF@=Icyh2bWa+7jczrsd02S*!>Nl?;aQtMe)>ufedEe<%P8LYfbeHM2q z5>*-|w?(juE-@CP8CL48l`zk>&oVnJD<{qvItdmMHXB2Bunt36iOF7U!qfVa3qH| zImCOTZi~C*LlsYG<#-gW|Ep9?c9S~?UV473?H?tPW-6oW=e^I%%|-*rM;oAr+QJ+e z?2^HAW$-*1e6I|iFM}7z;QM6oLK(bB1}~Pu_sifVGI*&BUM7PdkipAk@Cq5cQU*UL zgCCN?t7PzM8T_yeUL%9o%HT(2@S`&LF&Vs020t!?pOC@pWpEwf1nyub8V|0t^-SgH zg026}jgkC?UBZo$d}0_J(O3L`rPf^5Fpr`G1fJO(9gU!l3)?Dx;}*=no2UPMGMExV ziG#x-#G0Gk(Qll{E}-R0*^AVpL;stx%wE5nA~X^xd1bXGB;w!~qkoTg31>KbOWK@r zoHB9$vIiYG;Vx{0wV`kVgu9}Y4z-BalyZ|Si0DxZV(6!3wG$H=I=_ptPSYIzSrdP^ zix*BXNzl0tWBfg-=B34?y*WNS?X5A~4XT<@ji8xdN7S_o_Lyv9 zvVRnv%_~h-__z8ByrX+s?=4f1N%ty*3xiN8@VhrtNxEAl;8jt#MJ1DjVMbW^YpQ>N zEWMhquv;c1ue94GlnZqbGLcq#KKwqSO#H8maY@L2CCF0&;ttjAQ^`ePCRzFN=?q^e zA6YfuQkwq_olK&iAV(C+Q`Lgk(!+l!Rc!0oTpx0Y8VmGO$^qS!#OB_6%Q~5zm z3tt$-s3ZOJ62EA7{Qp8!IT{wJh$~FM zo8$wP{P#2MMGRr8-F;-!EO^oWWrn?|$AhmhE_sE^xOm~VB973Xc=}l^lxROm7Ox5Z zB;pF+gs`7UO;X%~)Ybot*~@QAVHN1r-!~=qboWhhO^p@Nm5y zbklUdMtZ@hz^CBT4wz)wAY|KKw5kHl>?&zS7a0-&1v{~Qh)ej9?19u1_K(xt&-tT7T8uoj;v%^rzzYD zJoOb~Tx?76H>x1^A>aZeID7{bllc+hvsCN(}ruc+6Zl=HcA_D@JMZBL}X-S zRAh8yOjJlzXjB+(DAqzFOK)~c|UGB?=RZJ`%`}5eAoP79fRjk+hWe2|M?ouH-7XH`5Jwl zA|C#k>Xaz*H?Hbh1wZc8x{!_VSM+@M%_H!&1FlpACNQqXsMph7NewOBY@PaGx>geP96vJLg-2V8N zwFxz66IUt*4jsHilN6y0d+qWIIZ2B7H%?Cda&gk!w!Ma*zN0>=_vhdL));y@>Fm$GXMS<^u|qeK=cVnl8REl7eW$5C z_-otpQQb^=2|GGHF>2d}j)Olv@X4qiqt{(tIL|NT>4H5M2NjPtO!g^KDX}C`h>QT19f|-te3spZ1-ZT2QzBvLqeq&LR#tAmF#5pz z?H4UP-tQjW?_H++&}G6s&yC1D5t_N;o_1*`CyXq4_ny4M$1kSM`t_cw9V+vNZ-$Ra zytMn|$sdZxbl7^S$K;c1$8=j~ecIXM;Fy($(uF3QGVKcYBM{MPwqKTi_im9nZPfLc zR&V^VF|Et=hK~om^?BO*wXw;LEiKba)}P$mup~Zx#J;0Pb_P#N4~$v8)b!hy^k))| zUYpzfMEc5Ahn*Xr?3nS&>#6OQj2V;BrhTg)kGwQDqvIoOp4s2+)r^TZKRfi!#&a2u zytClMYe~H`=M2B&>;7wUGxgUmj6MJR{h8e!k9?@ZxAmDtiK<^7?QkV?My}7R?8L!i zt8(|WIbKsZwqdY#T$eSg#!ipewfWea?~kqAHU7hZj!f3Ri@|R{&`p~a^Wx4bTOU)_ zzWhP{tt-}N_4wj-;}07@&FYsv@SP`@sIy-%{P)GBFOJL(oR#-er(yQ&jDi==O#0=S z?BbWdC~{ssn%&d7Z<7DcwmJRB#JsYkd{j>G`h^=`jGvV=YtO3wFQon_r{MCh=FZ=I zpJSi8%AxErhXjtUw5-nbF5JM!OL_uIJAe(iQ#*$|TF`l-_Z z`v)a?jb|P|-};Y7@|JGfePz(dLwV;Xh1<8Msm51CFe`c+V#dE0&s;XWZW;f^AXoH> zPoEq=SX;OEtA;PeN9a;&+FWmyziZ&Ib7u<@@-NzcdAh&0CjW)y)vbr?Ud-R$<$2Rv zXHMkbUDy8IA2)WIkkQcP$}>ySCWQ3}`88$Qya}`W&5Y{S;k5}*44ddv^wp0O=KVfC zVV1hj#3%0@zG~h5<0dX`ap&s^!)uG2v$|knR@<{(k9|;3Yrp3c>xaywyv%QX({5-dRh?X&(l}zuq<3GO zG;B+0-6Ut%SEBP=hbOf)obaux^PjwVW?H{QRovtwUl$I`^>Iwz-}d#I=Y5}>JSXpT z$J~@-lV5r`GdN;dJN?8rPu9+}rs!?wCUt&t>1_QSFUOug)#+vZMZJH;v7@K;KfU&0 zQr>4h3NL4^Uo!6Ltio+~EDYX~z7Su>z}UP#Zxt%mdeEq}V z#r6V2&8)lMifCAAI8v~DXhQ5>L!kEMYo9h;H!NfhO`kt0wCFiz{v)Th8;cGzr*8J_ z^H|Y*&3S$Hl|w~OpE(=#Y?x2+!HuVqvgX7V?^^Iu#Y4-j#bITSCD*+CRPl|t`0?W! zzbsx~KImG+(4dmNyDvEsq7qALUJl7>pHy2iuJO&%{D)sEi42Tvy!O_2B?-$DzHq+K z+1TEmlm6)!>Bb-TT@IQ*>R#iSUqd?>yX-I;YGzM(yVuXg5dq78Ir3?r(!c}%d3FDy zywc@!^(SvmSyuY%);E4WR_gD z+cndguxMT4In8`)&hvXZ3>fsf^@mm3$1L{q);33(UHzZ!J9S)pUFh%!$4{-uU-`$* zS09-A-RIN4)rRev`pvQ~9e3ZjHZ}X=`p0ZHhS?5ZP1xY~PLXZ##D3qVyobA= z4{)?^xO#M|Q|IVB-I06X6Q|>ewI83IJ8H9|_~!1gZGp!fcfDhub2OuaGvKAnV~3v{ z?JTQ$Fu=IU<*ZjvOTTe&yYu1)?N9unJnKAiW6TS)<2BVwN7jw+nVnNTJiX!PQ)P>* z-!M#{a%|T-)g5Ln-8kgSOVtzB4PR1yaNsoSz1N53DD~3@guS({ebGbHw$A=>&m*x7 z(+ZwAt&K~)G40pgLA@J(3ai<1DQ8gZb7eJ8hdlrCqK6)@DVsdn8Zq;e8un_z{`hWw zwe!LqbK0G_t2VUm+2Lba+GyzBF%`>rVgV z>6RCw3-4btW4f`j@65=kZPVwB8rn^@;MDZV`PX_UecyG)*K1-U&K=C0@yUqAitm*R zW+X2ga__OkoioNnU*8r`abbquclr|t7WA8Wbz$e^_-FEG{+4sFVzGL~%;>>;_HJ(R z?#z9c?K{S`{B`Cp7gv;S$s9iG&NW@@D;_MK)nY{Nt-jON&Kk3HP(j101GBbXdnD$M z?#kKgoXn!TPDagEKEynK&(W&cCnm;?&Uk*~?5}Kxx__7R`Ro!xTG97|Qw`N~!W~=g>NR7_oVtc{3oh+HJ_nXG__YoC)eQ|UQ6#%~4fd%komFOy zcuy(Km9c68cdxI#E9Tn!v^7vw^IF2K0}2LTQo8H8`( u5qtwGYG=&Q)`CHBDbDr7z|XE2(z?pYo#Pu;hU4?-28O7~{BIZz)chZUm>n_z diff --git a/core/Cargo.toml b/core/Cargo.toml index b97c91d7d3e..c16d5b47ec6 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -69,6 +69,7 @@ wasmtime = { workspace = true } parking_lot = { workspace = true, features = ["deadlock_detection"] } derive_more = { workspace = true } itertools = { workspace = true } +uuid = { version = "1.4.1", features = ["v4"] } [dev-dependencies] criterion = { workspace = true } diff --git a/core/benches/blocks/common.rs b/core/benches/blocks/common.rs index 56f769b1778..3accf513712 100644 --- a/core/benches/blocks/common.rs +++ b/core/benches/blocks/common.rs @@ -6,6 +6,7 @@ use eyre::Result; use iroha_core::{ block::{BlockBuilder, CommittedBlock}, prelude::*, + query::store::LiveQueryStore, smartcontracts::Execute, sumeragi::network_topology::Topology, wsv::World, @@ -175,7 +176,8 @@ pub fn restore_every_nth( pub fn build_wsv(account_id: &AccountId, key_pair: &KeyPair) -> WorldStateView { let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::with([], UniqueVec::new()), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::with([], UniqueVec::new()), kura, query_handle); wsv.config.transaction_limits = TransactionLimits::new(u64::MAX, u64::MAX); wsv.config.wasm_runtime_config.fuel_limit = u64::MAX; wsv.config.wasm_runtime_config.max_memory = u32::MAX; diff --git a/core/benches/kura.rs b/core/benches/kura.rs index 2f74c5ce1e4..d10bd567434 100644 --- a/core/benches/kura.rs +++ b/core/benches/kura.rs @@ -8,6 +8,7 @@ use iroha_core::{ block::*, kura::{BlockStore, LockStatus}, prelude::*, + query::store::LiveQueryStore, sumeragi::network_topology::Topology, wsv::World, }; @@ -42,7 +43,8 @@ async fn measure_block_size_for_n_executors(n_executors: u32) { iroha_core::kura::Kura::new(iroha_config::kura::Mode::Strict, dir.path(), false).unwrap(); let _thread_handle = iroha_core::kura::Kura::start(kura.clone()); - let mut wsv = WorldStateView::new(World::new(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::new(), kura, query_handle); let topology = Topology::new(UniqueVec::new()); let mut block = BlockBuilder::new(vec![tx], topology, Vec::new()) .chain(0, &mut wsv) diff --git a/core/benches/validation.rs b/core/benches/validation.rs index d2617396271..df41e743d39 100644 --- a/core/benches/validation.rs +++ b/core/benches/validation.rs @@ -6,6 +6,7 @@ use criterion::{criterion_group, criterion_main, Criterion}; use iroha_core::{ block::*, prelude::*, + query::store::LiveQueryStore, smartcontracts::{isi::Registrable as _, Execute}, sumeragi::network_topology::Topology, tx::TransactionExecutor, @@ -55,6 +56,7 @@ fn build_test_transaction(keys: KeyPair) -> SignedTransaction { fn build_test_and_transient_wsv(keys: KeyPair) -> WorldStateView { let kura = iroha_core::kura::Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let (public_key, _) = keys.into(); let mut wsv = WorldStateView::new( @@ -70,6 +72,7 @@ fn build_test_and_transient_wsv(keys: KeyPair) -> WorldStateView { World::with([domain], UniqueVec::new()) }, kura, + query_handle, ); { @@ -146,7 +149,8 @@ fn sign_blocks(criterion: &mut Criterion) { .expect("Failed to accept transaction."); let key_pair = KeyPair::generate().expect("Failed to generate KeyPair."); let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::new(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::new(), kura, query_handle); let topology = Topology::new(UniqueVec::new()); let mut success_count = 0; diff --git a/core/src/block.rs b/core/src/block.rs index 177d8e90118..6d4a655029e 100644 --- a/core/src/block.rs +++ b/core/src/block.rs @@ -361,27 +361,21 @@ mod valid { let transaction_executor = wsv.transaction_executor(); let limits = &transaction_executor.transaction_limits; - if error.is_none() { - let tx = if is_genesis { + let tx = if is_genesis { AcceptedTransaction::accept_genesis(GenesisTransaction(value)) - } else { - AcceptedTransaction::accept(value, limits)? - }; - - transaction_executor.validate(tx, wsv).map_err(|(_tx, error)| { - TransactionValidationError::NotValid(error) - })?; } else { - let tx = if is_genesis { - AcceptedTransaction::accept_genesis(GenesisTransaction(value)) - } else { AcceptedTransaction::accept(value, limits)? - }; + }; + if error.is_some() { match transaction_executor.validate(tx, wsv) { Err(rejected_transaction) => Ok(rejected_transaction), Ok(_) => Err(TransactionValidationError::RejectedIsValid), }?; + } else { + transaction_executor.validate(tx, wsv).map_err(|(_tx, error)| { + TransactionValidationError::NotValid(error) + })?; } Ok(()) @@ -711,7 +705,7 @@ mod tests { use iroha_data_model::prelude::*; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _}; + use crate::{kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _}; #[test] pub fn committed_and_valid_block_hashes_are_equal() { @@ -725,8 +719,8 @@ mod tests { ) } - #[test] - fn should_reject_due_to_repetition() { + #[tokio::test] + async fn should_reject_due_to_repetition() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -737,7 +731,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); // Creating an instruction let asset_definition_id = AssetDefinitionId::from_str("xor#wonderland").expect("Valid"); @@ -767,8 +762,8 @@ mod tests { assert!(valid_block.payload().transactions[1].error.is_some()); } - #[test] - fn tx_order_same_in_validation_and_revalidation() { + #[tokio::test] + async fn tx_order_same_in_validation_and_revalidation() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -779,7 +774,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); // Creating an instruction let asset_definition_id = AssetDefinitionId::from_str("xor#wonderland").expect("Valid"); @@ -834,8 +830,8 @@ mod tests { assert!(valid_block.payload().transactions[2].error.is_none()); } - #[test] - fn failed_transactions_revert() { + #[tokio::test] + async fn failed_transactions_revert() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -849,7 +845,8 @@ mod tests { ); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); let transaction_limits = &wsv.transaction_executor().transaction_limits; let domain_id = DomainId::from_str("domain").expect("Valid"); diff --git a/core/src/lib.rs b/core/src/lib.rs index 7337b88851e..e0c6109e31f 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -6,6 +6,7 @@ pub mod executor; pub mod gossiper; pub mod kura; pub mod modules; +pub mod query; pub mod queue; pub mod smartcontracts; pub mod snapshot; diff --git a/cli/src/torii/cursor.rs b/core/src/query/cursor.rs similarity index 71% rename from cli/src/torii/cursor.rs rename to core/src/query/cursor.rs index a3d1aca610c..0757a759081 100644 --- a/cli/src/torii/cursor.rs +++ b/core/src/query/cursor.rs @@ -1,8 +1,14 @@ +//! Module with cursor-based pagination functional like [`Batched`]. + use std::num::{NonZeroU64, NonZeroUsize}; -use crate::torii::{Error, Result}; +use derive_more::Display; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; +/// Trait for iterators that can be batched. pub trait Batch: IntoIterator + Sized { + /// Pack iterator into batches of the given size. fn batched(self, fetch_size: NonZeroUsize) -> Batched; } @@ -25,10 +31,20 @@ pub struct Batched { cursor: Option, } +/// Unknown cursor error. +/// +/// Happens when client sends a cursor that doesn't match any server's cursor. +#[derive(Debug, Display, thiserror::Error, Copy, Clone, Serialize, Deserialize, Encode, Decode)] +#[display(fmt = "Unknown cursor")] +pub struct UnknownCursor; + impl> Batched { - pub(crate) fn next_batch(&mut self, cursor: Option) -> Result<(I, Option)> { + pub(crate) fn next_batch( + &mut self, + cursor: Option, + ) -> Result<(I, Option), UnknownCursor> { if cursor != self.cursor { - return Err(Error::UnknownCursor); + return Err(UnknownCursor); } let mut batch_size = 0; @@ -72,6 +88,7 @@ impl> Batched { )) } + /// Check if all values where drained from the iterator. pub fn is_depleted(&self) -> bool { self.cursor.is_none() } diff --git a/core/src/query/mod.rs b/core/src/query/mod.rs new file mode 100644 index 00000000000..9b6de03c3e9 --- /dev/null +++ b/core/src/query/mod.rs @@ -0,0 +1,5 @@ +//! This module contains [`QueryService`](service::QueryService) and helpers. + +pub mod cursor; +pub mod pagination; +pub mod store; diff --git a/cli/src/torii/pagination.rs b/core/src/query/pagination.rs similarity index 97% rename from cli/src/torii/pagination.rs rename to core/src/query/pagination.rs index e305edbaec1..d2cc87e88f8 100644 --- a/cli/src/torii/pagination.rs +++ b/core/src/query/pagination.rs @@ -1,3 +1,5 @@ +//! Module with [`Paginate`] iterator adaptor which provides [`paginate`] function. + use iroha_data_model::query::Pagination; /// Describes a collection to which pagination can be applied. diff --git a/core/src/query/store.rs b/core/src/query/store.rs new file mode 100644 index 00000000000..c5ef705c140 --- /dev/null +++ b/core/src/query/store.rs @@ -0,0 +1,279 @@ +//! This module contains [`QueryService`] actor. + +use std::{ + cmp::Ordering, + num::{NonZeroU64, NonZeroUsize}, + time::{Duration, Instant}, +}; + +use dashmap::DashMap; +use iroha_config::live_query_store::Configuration; +use iroha_data_model::{ + asset::AssetValue, + query::{ + cursor::ForwardCursor, error::QueryExecutionFail, pagination::Pagination, sorting::Sorting, + }, + BatchedResponse, BatchedResponseV1, HasMetadata, IdentifiableBox, ValidationFail, Value, +}; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; +use tokio::{ + sync::{mpsc, oneshot}, + time::sleep, +}; + +use super::{ + cursor::{Batch as _, Batched, UnknownCursor}, + pagination::Paginate as _, +}; +use crate::smartcontracts::query::LazyValue; + +/// Query service error. +#[derive(Debug, thiserror::Error, Copy, Clone, Serialize, Deserialize, Encode, Decode)] +pub enum Error { + /// Unknown cursor error. + #[error(transparent)] + UnknownCursor(#[from] UnknownCursor), + /// Connection with QueryService is closed. + #[error("Connection with QueryService is closed")] + ConnectionClosed, +} + +#[allow(clippy::fallible_impl_from)] +impl From for ValidationFail { + fn from(error: Error) -> Self { + match error { + Error::UnknownCursor(_) => { + ValidationFail::QueryFailed(QueryExecutionFail::UnknownCursor) + } + Error::ConnectionClosed => { + panic!("Connection to `LiveQueryStore` was unexpectedly closed, this is a bug") + } + } + } +} + +/// Result type for [`QueryService`] methods. +pub type Result = std::result::Result; + +type LiveQuery = Batched>; + +/// Service which stores queries which might be non fully consumed by a client. +/// +/// Clients can handle their queries using [`LiveQueryStoreHandle`] +#[derive(Debug)] +pub struct LiveQueryStore { + queries: DashMap, + query_idle_time: Duration, +} + +impl LiveQueryStore { + /// Construct [`QueryService`] from configuration. + pub fn from_configuration(cfg: Configuration) -> Self { + Self { + queries: DashMap::default(), + query_idle_time: Duration::from_millis(cfg.query_idle_time_ms.into()), + } + } + + /// Construct [`QueryService`] for tests. + /// Default configuration will be used. + /// + /// Not marked as `#[cfg(test)]` because it is used in benches as well. + pub fn test() -> Self { + use iroha_config::base::proxy::Builder as _; + + LiveQueryStore::from_configuration( + iroha_config::live_query_store::ConfigurationProxy::default() + .build() + .expect("Failed to build LiveQueryStore configuration from proxy"), + ) + } + + /// Start [`QueryService`]. Requires a [`tokio::runtime::Runtime`] being run + /// as it will create new [`tokio::task`] and detach it. + /// + /// Returns a handle to interact with the service. + pub fn start(self) -> LiveQueryStoreHandle { + const ALL_HANDLERS_DROPPED: &str = + "All handler to LiveQueryStore are dropped. Shutting down..."; + + let (insert_sender, mut insert_receiver) = mpsc::channel(1); + let (remove_sender, mut remove_receiver) = mpsc::channel::<(String, oneshot::Sender<_>)>(1); + + tokio::task::spawn(async move { + loop { + tokio::select! { + _ = sleep(self.query_idle_time) => { + self.queries + .retain(|_, (_, last_access_time)| last_access_time.elapsed() <= self.query_idle_time); + }, + to_insert = insert_receiver.recv() => { + let Some((query_id, live_query)) = to_insert else { + iroha_logger::info!(ALL_HANDLERS_DROPPED); + break; + }; + self.insert(query_id, live_query) + } + to_remove = remove_receiver.recv() => { + let Some((query_id, response_sender)) = to_remove else { + iroha_logger::info!(ALL_HANDLERS_DROPPED); + break; + }; + let live_query_opt = self.remove(&query_id); + let _ = response_sender.send(live_query_opt); + } + else => break, + } + tokio::task::yield_now().await; + } + }); + + LiveQueryStoreHandle { + insert_sender, + remove_sender, + } + } + + fn insert(&self, query_id: String, live_query: LiveQuery) { + self.queries.insert(query_id, (live_query, Instant::now())); + } + + fn remove(&self, query_id: &str) -> Option { + self.queries.remove(query_id).map(|(_, (output, _))| output) + } +} + +/// Handle to interact with [`LiveQueryStore`]. +#[derive(Clone)] +pub struct LiveQueryStoreHandle { + /// Sender to insert a new query with specified id. + insert_sender: mpsc::Sender<(String, LiveQuery)>, + /// Sender to send a tuple of query id and another sender, which will be + /// used by [`LiveQueryStore`] to write a response with optional live query. + remove_sender: mpsc::Sender<(String, oneshot::Sender>)>, +} + +impl LiveQueryStoreHandle { + /// Apply sorting and pagination to the query output. + /// + /// # Errors + /// + /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Otherwise throws up query output handling errors. + pub fn handle_query_output( + &self, + query_output: LazyValue<'_>, + fetch_size: NonZeroUsize, + sorting: &Sorting, + pagination: Pagination, + ) -> Result> { + match query_output { + LazyValue::Value(batch) => { + let cursor = ForwardCursor::default(); + let result = BatchedResponseV1 { batch, cursor }; + Ok(result.into()) + } + LazyValue::Iter(iter) => { + let live_query = Self::apply_sorting_and_pagination(iter, sorting, pagination); + let query_id = uuid::Uuid::new_v4().to_string(); + + let curr_cursor = Some(0); + let live_query = live_query.batched(fetch_size); + self.construct_query_response(query_id, curr_cursor, live_query) + } + } + } + + /// Retrieve next batch of query output using `cursor`. + /// + /// # Errors + /// + /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Otherwise throws up query output handling errors. + pub fn handle_query_cursor(&self, cursor: ForwardCursor) -> Result> { + let query_id = cursor.query_id.ok_or(UnknownCursor)?; + let live_query = self.remove(query_id.clone())?.ok_or(UnknownCursor)?; + + self.construct_query_response(query_id, cursor.cursor.map(NonZeroU64::get), live_query) + } + + fn insert(&self, query_id: String, live_query: LiveQuery) -> Result<()> { + self.insert_sender + .blocking_send((query_id, live_query)) + .map_err(|_| Error::ConnectionClosed) + } + + fn remove(&self, query_id: String) -> Result> { + let (sender, receiver) = oneshot::channel(); + + self.remove_sender + .blocking_send((query_id, sender)) + .or(Err(Error::ConnectionClosed))?; + + receiver.blocking_recv().or(Err(Error::ConnectionClosed)) + } + + fn construct_query_response( + &self, + query_id: String, + curr_cursor: Option, + mut live_query: Batched>, + ) -> Result> { + let (batch, next_cursor) = live_query.next_batch(curr_cursor)?; + + if !live_query.is_depleted() { + self.insert(query_id.clone(), live_query)? + } + + let query_response = BatchedResponseV1 { + batch: Value::Vec(batch), + cursor: ForwardCursor { + query_id: Some(query_id), + cursor: next_cursor, + }, + }; + + Ok(query_response.into()) + } + + fn apply_sorting_and_pagination( + iter: impl Iterator, + sorting: &Sorting, + pagination: Pagination, + ) -> Vec { + if let Some(key) = &sorting.sort_by_metadata_key { + let mut pairs: Vec<(Option, Value)> = iter + .map(|value| { + let key = match &value { + Value::Identifiable(IdentifiableBox::Asset(asset)) => match asset.value() { + AssetValue::Store(store) => store.get(key).cloned(), + _ => None, + }, + Value::Identifiable(v) => TryInto::<&dyn HasMetadata>::try_into(v) + .ok() + .and_then(|has_metadata| has_metadata.metadata().get(key)) + .cloned(), + _ => None, + }; + (key, value) + }) + .collect(); + pairs.sort_by( + |(left_key, _), (right_key, _)| match (left_key, right_key) { + (Some(l), Some(r)) => l.cmp(r), + (Some(_), None) => Ordering::Less, + (None, Some(_)) => Ordering::Greater, + (None, None) => Ordering::Equal, + }, + ); + pairs + .into_iter() + .map(|(_, val)| val) + .paginate(pagination) + .collect() + } else { + iter.paginate(pagination).collect() + } + } +} diff --git a/core/src/queue.rs b/core/src/queue.rs index 3d14dc0c628..210f95ef932 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -390,9 +390,13 @@ mod tests { use iroha_data_model::{prelude::*, transaction::TransactionLimits}; use iroha_primitives::must_use::MustUse; use rand::Rng as _; + use tokio::test; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _, wsv::World, PeersIds}; + use crate::{ + kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, + wsv::World, PeersIds, + }; fn accepted_tx(account_id: &str, key: KeyPair) -> AcceptedTransaction { let message = std::iter::repeat_with(rand::random::) @@ -422,12 +426,14 @@ mod tests { } #[test] - fn push_tx() { + async fn push_tx() { let key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([key_pair.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -444,14 +450,16 @@ mod tests { } #[test] - fn push_tx_overflow() { + async fn push_tx_overflow() { let max_txs_in_queue = 10; let key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([key_pair.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -479,7 +487,7 @@ mod tests { } #[test] - fn push_multisignature_tx() { + async fn push_multisignature_tx() { let max_txs_in_block = 2; let key_pairs = [KeyPair::generate().unwrap(), KeyPair::generate().unwrap()]; let kura = Kura::blank_kura_for_testing(); @@ -494,9 +502,11 @@ mod tests { .build(&account_id); account.signature_check_condition = SignatureCheckCondition::all_account_signatures(); assert!(domain.add_account(account).is_none()); + let query_handle = LiveQueryStore::test().start(); Arc::new(WorldStateView::new( World::with([domain], PeersIds::new()), kura.clone(), + query_handle, )) }; @@ -564,13 +574,15 @@ mod tests { } #[test] - fn get_available_txs() { + async fn get_available_txs() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -591,12 +603,14 @@ mod tests { } #[test] - fn push_tx_already_in_blockchain() { + async fn push_tx_already_in_blockchain() { let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, ); let tx = accepted_tx("alice@wonderland", alice_key); wsv.transactions.insert(tx.hash(), 1); @@ -618,13 +632,15 @@ mod tests { } #[test] - fn get_tx_drop_if_in_blockchain() { + async fn get_tx_drop_if_in_blockchain() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, ); let tx = accepted_tx("alice@wonderland", alice_key); let queue = Queue::from_configuration(&Configuration { @@ -646,13 +662,15 @@ mod tests { } #[test] - fn get_available_txs_with_timeout() { + async fn get_available_txs_with_timeout() { let max_txs_in_block = 6; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 200, @@ -694,13 +712,15 @@ mod tests { // Queue should only drop transactions which are already committed or ttl expired. // Others should stay in the queue until that moment. #[test] - fn transactions_available_after_pop() { + async fn transactions_available_after_pop() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -728,13 +748,15 @@ mod tests { } #[test] - fn custom_expired_transaction_is_rejected() { + async fn custom_expired_transaction_is_rejected() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -769,13 +791,15 @@ mod tests { } #[test] - fn concurrent_stress_test() { + async fn concurrent_stress_test() { let max_txs_in_block = 10; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, ); let queue = Arc::new(Queue::from_configuration(&Configuration { @@ -843,14 +867,16 @@ mod tests { } #[test] - fn push_tx_in_future() { + async fn push_tx_in_future() { let future_threshold_ms = 1000; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura.clone(), + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -876,7 +902,7 @@ mod tests { } #[test] - fn queue_throttling() { + async fn queue_throttling() { let alice_key_pair = KeyPair::generate().unwrap(); let bob_key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); @@ -897,7 +923,8 @@ mod tests { assert!(domain.add_account(bob_account).is_none()); World::with([domain], PeersIds::new()) }; - let mut wsv = WorldStateView::new(world, kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura.clone(), query_handle); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, diff --git a/core/src/smartcontracts/isi/mod.rs b/core/src/smartcontracts/isi/mod.rs index c633adad28c..ae5b286aca5 100644 --- a/core/src/smartcontracts/isi/mod.rs +++ b/core/src/smartcontracts/isi/mod.rs @@ -479,13 +479,15 @@ mod tests { use std::sync::Arc; use iroha_crypto::KeyPair; + use tokio::test; use super::*; - use crate::{kura::Kura, wsv::World, PeersIds}; + use crate::{kura::Kura, query::store::LiveQueryStore, wsv::World, PeersIds}; fn wsv_with_test_domains(kura: &Arc) -> Result { let world = World::with([], PeersIds::new()); - let mut wsv = WorldStateView::new(world, kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura.clone(), query_handle); let genesis_account_id = AccountId::from_str("genesis@genesis")?; let account_id = AccountId::from_str("alice@wonderland")?; let (public_key, _) = KeyPair::generate()?.into(); @@ -500,7 +502,7 @@ mod tests { } #[test] - fn asset_store() -> Result<()> { + async fn asset_store() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -529,7 +531,7 @@ mod tests { } #[test] - fn account_metadata() -> Result<()> { + async fn account_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -557,7 +559,7 @@ mod tests { } #[test] - fn asset_definition_metadata() -> Result<()> { + async fn asset_definition_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let definition_id = AssetDefinitionId::from_str("rose#wonderland")?; @@ -585,7 +587,7 @@ mod tests { } #[test] - fn domain_metadata() -> Result<()> { + async fn domain_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let domain_id = DomainId::from_str("wonderland")?; @@ -613,7 +615,7 @@ mod tests { } #[test] - fn executing_unregistered_trigger_should_return_error() -> Result<()> { + async fn executing_unregistered_trigger_should_return_error() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -630,7 +632,7 @@ mod tests { } #[test] - fn unauthorized_trigger_execution_should_return_error() -> Result<()> { + async fn unauthorized_trigger_execution_should_return_error() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; diff --git a/core/src/smartcontracts/isi/query.rs b/core/src/smartcontracts/isi/query.rs index 5b7795495f5..d8ea3ec9877 100644 --- a/core/src/smartcontracts/isi/query.rs +++ b/core/src/smartcontracts/isi/query.rs @@ -56,7 +56,7 @@ impl_lazy! { } /// Query Request statefully validated on the Iroha node side. -#[derive(Debug, Decode, Encode)] +#[derive(Debug, Clone, Decode, Encode)] #[repr(transparent)] pub struct ValidQueryRequest(SignedQuery); @@ -178,10 +178,11 @@ mod tests { use iroha_data_model::{query::error::FindError, transaction::TransactionLimits}; use iroha_primitives::unique_vec::UniqueVec; use once_cell::sync::Lazy; + use tokio::test; use super::*; use crate::{ - block::*, kura::Kura, smartcontracts::isi::Registrable as _, + block::*, kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, sumeragi::network_topology::Topology, tx::AcceptedTransaction, wsv::World, PeersIds, }; @@ -256,7 +257,8 @@ mod tests { invalid_tx_per_block: usize, ) -> Result { let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); let limits = TransactionLimits { max_instruction_number: 1, @@ -312,9 +314,10 @@ mod tests { } #[test] - fn asset_store() -> Result<()> { + async fn asset_store() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let wsv = WorldStateView::new(world_with_test_asset_with_metadata(), kura); + let query_handle = LiveQueryStore::test().start(); + let wsv = WorldStateView::new(world_with_test_asset_with_metadata(), kura, query_handle); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland")?; let asset_id = AssetId::new(asset_definition_id, ALICE_ID.clone()); @@ -328,9 +331,10 @@ mod tests { } #[test] - fn account_metadata() -> Result<()> { + async fn account_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let wsv = WorldStateView::new(world_with_test_account_with_metadata()?, kura); + let query_handle = LiveQueryStore::test().start(); + let wsv = WorldStateView::new(world_with_test_account_with_metadata()?, kura, query_handle); let bytes = FindAccountKeyValueByIdAndKey::new(ALICE_ID.clone(), Name::from_str("Bytes")?) .execute(&wsv)?; @@ -342,7 +346,7 @@ mod tests { } #[test] - fn find_all_blocks() -> Result<()> { + async fn find_all_blocks() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -355,7 +359,7 @@ mod tests { } #[test] - fn find_all_block_headers() -> Result<()> { + async fn find_all_block_headers() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -368,7 +372,7 @@ mod tests { } #[test] - fn find_block_header_by_hash() -> Result<()> { + async fn find_block_header_by_hash() -> Result<()> { let wsv = wsv_with_test_blocks_and_transactions(1, 1, 1)?; let block = wsv.all_blocks().last().expect("WSV is empty"); @@ -387,7 +391,7 @@ mod tests { } #[test] - fn find_all_transactions() -> Result<()> { + async fn find_all_transactions() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -411,9 +415,10 @@ mod tests { } #[test] - fn find_transaction() -> Result<()> { + async fn find_transaction() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); let instructions: [InstructionExpr; 0] = []; let tx = TransactionBuilder::new(ALICE_ID.clone()) @@ -453,7 +458,7 @@ mod tests { } #[test] - fn domain_metadata() -> Result<()> { + async fn domain_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let wsv = { let mut metadata = Metadata::new(); @@ -474,7 +479,8 @@ mod tests { AssetDefinition::quantity(asset_definition_id).build(&ALICE_ID) ) .is_none()); - WorldStateView::new(World::with([domain], PeersIds::new()), kura) + let query_handle = LiveQueryStore::test().start(); + WorldStateView::new(World::with([domain], PeersIds::new()), kura, query_handle) }; let domain_id = DomainId::from_str("wonderland")?; diff --git a/core/src/smartcontracts/wasm.rs b/core/src/smartcontracts/wasm.rs index c307455a06f..cdd271f17fa 100644 --- a/core/src/smartcontracts/wasm.rs +++ b/core/src/smartcontracts/wasm.rs @@ -3,6 +3,8 @@ //! to wasm format and submitted in a transaction #![allow(clippy::doc_link_with_quotes, clippy::arithmetic_side_effects)] +use std::num::NonZeroUsize; + use error::*; use import_traits::{ ExecuteOperations as _, GetExecutorPayloads as _, SetPermissionTokenSchema as _, @@ -17,9 +19,12 @@ use iroha_data_model::{ isi::InstructionExpr, permission::PermissionTokenSchema, prelude::*, - query::QueryBox, - smart_contract::payloads::{self, Validate}, - Level as LogLevel, ValidationFail, + query::{QueryBox, QueryWithParameters}, + smart_contract::{ + payloads::{self, Validate}, + SmartContractQueryRequest, + }, + BatchedResponse, Level as LogLevel, ValidationFail, }; use iroha_logger::debug; // NOTE: Using error_span so that span info is logged on every event @@ -31,11 +36,7 @@ use wasmtime::{ }; use self::state::Authority; -use super::query::LazyValue; -use crate::{ - smartcontracts::{Execute, ValidQuery as _}, - wsv::WorldStateView, -}; +use crate::{smartcontracts::Execute, wsv::WorldStateView, ValidQuery as _}; /// Name of the exported memory const WASM_MEMORY: &str = "memory"; @@ -79,7 +80,10 @@ mod import_traits { pub trait ExecuteOperations { /// Execute `query` on host #[codec::wrap_trait_fn] - fn execute_query(query: QueryBox, state: &S) -> Result; + fn execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail>; /// Execute `instruction` on host #[codec::wrap_trait_fn] @@ -767,26 +771,36 @@ impl Runtime { #[allow(clippy::needless_pass_by_value)] impl Runtime { - fn default_execute_query(query: QueryBox, state: &S) -> Result { - iroha_logger::debug!(%query, "Executing"); + fn default_execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail> { + iroha_logger::debug!(%query_request, "Executing"); let wsv = state.wsv(); - // NOTE: Smart contract (not executor) is trying to execute the query, validate it first - // TODO: Validation should be skipped when executing smart contract. - // There should be two steps validation and execution. First smart contract - // is validated and then it's executed. Here it's validating in both steps. - // Add a flag indicating whether smart contract is being validated or executed - wsv.executor() - .validate_query(wsv, state.authority(), query.clone())?; - - query - .execute(wsv) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + match query_request { + SmartContractQueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + wsv.executor() + .validate_query(wsv, state.authority(), query.clone())?; + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + SmartContractQueryRequest::Cursor(cursor) => { + wsv.query_handle().handle_query_cursor(cursor) + } + } + .map_err(Into::into) } fn default_execute_instruction( @@ -884,10 +898,10 @@ impl<'wrld> import_traits::ExecuteOperations> { #[codec::wrap] fn execute_query( - query: QueryBox, + query_request: SmartContractQueryRequest, state: &state::SmartContract<'wrld>, - ) -> Result { - Self::default_execute_query(query, state) + ) -> Result, ValidationFail> { + Self::default_execute_query(query_request, state) } #[codec::wrap] @@ -950,10 +964,10 @@ impl<'wrld> import_traits::ExecuteOperations> { #[codec::wrap] fn execute_query( - query: QueryBox, + query_request: SmartContractQueryRequest, state: &state::Trigger<'wrld>, - ) -> Result { - Self::default_execute_query(query, state) + ) -> Result, ValidationFail> { + Self::default_execute_query(query_request, state) } #[codec::wrap] @@ -977,16 +991,34 @@ where S: state::Wsv + state::WsvMut + state::Authority, { #[codec::wrap] - fn execute_query(query: QueryBox, state: &S) -> Result { - debug!(%query, "Executing as executor"); - - query - .execute(state.wsv()) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + fn execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail> { + debug!(%query_request, "Executing as executor"); + + let wsv = state.wsv(); + + match query_request { + SmartContractQueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + SmartContractQueryRequest::Cursor(cursor) => { + wsv.query_handle().handle_query_cursor(cursor) + } + } + .map_err(Into::into) } #[codec::wrap] @@ -1213,18 +1245,33 @@ impl<'wrld> import_traits::ExecuteOperations, - ) -> Result { - debug!(%query, "Executing as executor"); - - query - .execute(state.wsv()) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + ) -> Result, ValidationFail> { + debug!(%query_request, "Executing as executor"); + + let wsv = state.wsv(); + + match query_request { + SmartContractQueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + SmartContractQueryRequest::Cursor(cursor) => { + wsv.query_handle().handle_query_cursor(cursor) + } + } + .map_err(Into::into) } #[codec::wrap] @@ -1619,10 +1666,15 @@ mod tests { use std::str::FromStr as _; use iroha_crypto::KeyPair; + use iroha_data_model::query::{sorting::Sorting, Pagination}; use parity_scale_codec::Encode; + use tokio::test; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _, PeersIds, World}; + use crate::{ + kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, PeersIds, + World, + }; fn world_with_test_account(authority: &AccountId) -> World { let domain_id = authority.domain_id.clone(); @@ -1679,10 +1731,11 @@ mod tests { } #[test] - fn execute_instruction_exported() -> Result<(), Error> { + async fn execute_instruction_exported() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1720,11 +1773,16 @@ mod tests { } #[test] - fn execute_query_exported() -> Result<(), Error> { + async fn execute_query_exported() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); - let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); + let query_hex = encode_hex(SmartContractQueryRequest::Query(QueryWithParameters { + query: QueryBox::from(FindAccountById::new(authority.clone())), + sorting: Sorting::default(), + pagination: Pagination::default(), + })); let wat = format!( r#" @@ -1757,11 +1815,12 @@ mod tests { } #[test] - fn instruction_limit_reached() -> Result<(), Error> { + async fn instruction_limit_reached() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1806,10 +1865,11 @@ mod tests { } #[test] - fn instructions_not_allowed() -> Result<(), Error> { + async fn instructions_not_allowed() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1854,10 +1914,11 @@ mod tests { } #[test] - fn queries_not_allowed() -> Result<(), Error> { + async fn queries_not_allowed() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); let wat = format!( @@ -1895,10 +1956,11 @@ mod tests { } #[test] - fn trigger_related_func_is_not_linked_for_smart_contract() -> Result<(), Error> { + async fn trigger_related_func_is_not_linked_for_smart_contract() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); let wat = format!( diff --git a/core/src/snapshot.rs b/core/src/snapshot.rs index bc8b9f8b376..182ecf9dbd8 100644 --- a/core/src/snapshot.rs +++ b/core/src/snapshot.rs @@ -22,6 +22,7 @@ use tokio::sync::mpsc; use crate::{ kura::{BlockCount, Kura}, + query::store::LiveQueryStoreHandle, sumeragi::SumeragiHandle, wsv::{KuraSeed, WorldStateView}, }; @@ -162,6 +163,7 @@ impl SnapshotMaker { pub fn try_read_snapshot( snapshot_dir: impl AsRef, kura: &Arc, + query_handle: LiveQueryStoreHandle, BlockCount(block_count): BlockCount, ) -> Result { let mut bytes = Vec::new(); @@ -175,6 +177,7 @@ pub fn try_read_snapshot( let mut deserializer = serde_json::Deserializer::from_slice(&bytes); let seed = KuraSeed { kura: Arc::clone(kura), + query_handle, }; let wsv = seed.deserialize(&mut deserializer)?; let snapshot_height = wsv.block_hashes.len(); diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 3a0aef20b68..10f9c063e92 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -47,11 +47,11 @@ pub struct Sumeragi { pub debug_force_soft_fork: bool, /// The current network topology. pub current_topology: Topology, - /// The sumeragi internal `WorldStateView`. This will probably + /// The sumeragi internal [`WorldStateView`]. This will probably /// morph into a wsv + various patches as we attempt to /// multithread isi execution. In the future we might also once /// again merge the internal wsv with the public facing one. But - /// as of now we keep them seperate for greater flexibility when + /// as of now we keep them separate for greater flexibility when /// optimizing. pub wsv: WorldStateView, /// A copy of wsv that is kept one block behind at all times. Because @@ -1161,9 +1161,10 @@ fn handle_block_sync( #[cfg(test)] mod tests { use iroha_primitives::unique_vec; + use tokio::test; use super::*; - use crate::smartcontracts::Registrable; + use crate::{query::store::LiveQueryStore, smartcontracts::Registrable}; fn create_data_for_test( topology: &Topology, @@ -1179,7 +1180,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], topology.ordered_peers.clone()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, Arc::clone(&kura)); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, Arc::clone(&kura), query_handle); // Create "genesis" block // Creating an instruction @@ -1237,7 +1239,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_invalid_block() { + async fn block_sync_invalid_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1254,7 +1256,7 @@ mod tests { } #[test] - fn block_sync_invalid_soft_fork_block() { + async fn block_sync_invalid_soft_fork_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1281,7 +1283,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_not_proper_height() { + async fn block_sync_not_proper_height() { let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); @@ -1305,7 +1307,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_commit_block() { + async fn block_sync_commit_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1318,7 +1320,7 @@ mod tests { } #[test] - fn block_sync_replace_top_block() { + async fn block_sync_replace_top_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1342,7 +1344,7 @@ mod tests { } #[test] - fn block_sync_small_view_change_index() { + async fn block_sync_small_view_change_index() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1379,7 +1381,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_genesis_block_do_not_replace() { + async fn block_sync_genesis_block_do_not_replace() { let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); diff --git a/core/src/wsv.rs b/core/src/wsv.rs index 049947db282..dbcb732c441 100644 --- a/core/src/wsv.rs +++ b/core/src/wsv.rs @@ -46,6 +46,7 @@ use crate::{ block::CommittedBlock, executor::Executor, kura::Kura, + query::store::LiveQueryStoreHandle, smartcontracts::{ triggers::{ self, @@ -295,6 +296,9 @@ pub struct WorldStateView { /// Reference to Kura subsystem. #[serde(skip)] kura: Arc, + /// Handle to the [`LiveQueryStore`]. + #[serde(skip)] + query_handle: LiveQueryStoreHandle, /// Temporary metrics buffer of amounts of any asset that has been transacted. #[serde(skip)] pub new_tx_amounts: Arc>>, @@ -304,6 +308,8 @@ pub struct WorldStateView { pub struct KuraSeed { /// Kura subsystem reference pub kura: Arc, + /// Handle to the [`LiveQueryStore`](crate::query::store::LiveQueryStore). + pub query_handle: LiveQueryStoreHandle, } impl<'de> DeserializeSeed<'de> for KuraSeed { @@ -366,6 +372,7 @@ impl<'de> DeserializeSeed<'de> for KuraSeed { transactions: transactions .ok_or_else(|| serde::de::Error::missing_field("transactions"))?, kura: self.loader.kura, + query_handle: self.loader.query_handle, engine, events_buffer: Vec::new(), new_tx_amounts: Arc::new(Mutex::new(Vec::new())), @@ -392,6 +399,7 @@ impl Clone for WorldStateView { new_tx_amounts: Arc::clone(&self.new_tx_amounts), engine: self.engine.clone(), kura: Arc::clone(&self.kura), + query_handle: self.query_handle.clone(), } } } @@ -401,12 +409,12 @@ impl WorldStateView { /// Construct [`WorldStateView`] with given [`World`]. #[must_use] #[inline] - pub fn new(world: World, kura: Arc) -> Self { + pub fn new(world: World, kura: Arc, query_handle: LiveQueryStoreHandle) -> Self { // Added to remain backward compatible with other code primary in tests let config = ConfigurationProxy::default() .build() .expect("Wsv proxy always builds"); - Self::from_configuration(config, world, kura) + Self::from_configuration(config, world, kura, query_handle) } /// Get `Account`'s `Asset`s @@ -914,7 +922,12 @@ impl WorldStateView { /// Construct [`WorldStateView`] with specific [`Configuration`]. #[inline] - pub fn from_configuration(config: Configuration, world: World, kura: Arc) -> Self { + pub fn from_configuration( + config: Configuration, + world: World, + kura: Arc, + query_handle: LiveQueryStoreHandle, + ) -> Self { Self { world, config, @@ -924,6 +937,7 @@ impl WorldStateView { new_tx_amounts: Arc::new(Mutex::new(Vec::new())), engine: wasm::create_engine(), kura, + query_handle, } } @@ -1262,6 +1276,11 @@ impl WorldStateView { }, ))) } + + /// Get reference to the [`LiveQueryStoreHandle`]. + pub fn query_handle(&self) -> &LiveQueryStoreHandle { + &self.query_handle + } } /// Bounds for `range` queries @@ -1335,16 +1354,20 @@ mod tests { use iroha_primitives::unique_vec::UniqueVec; use super::*; - use crate::{block::ValidBlock, role::RoleIdWithOwner, sumeragi::network_topology::Topology}; + use crate::{ + block::ValidBlock, query::store::LiveQueryStore, role::RoleIdWithOwner, + sumeragi::network_topology::Topology, + }; - #[test] - fn get_block_hashes_after_hash() { + #[tokio::test] + async fn get_block_hashes_after_hash() { const BLOCK_CNT: usize = 10; let topology = Topology::new(UniqueVec::new()); let block = ValidBlock::new_dummy().commit(&topology).unwrap(); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::default(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::default(), kura, query_handle); let mut block_hashes = vec![]; for i in 1..=BLOCK_CNT { @@ -1364,14 +1387,15 @@ mod tests { .eq(block_hashes.into_iter().skip(7))); } - #[test] - fn get_blocks_from_height() { + #[tokio::test] + async fn get_blocks_from_height() { const BLOCK_CNT: usize = 10; let topology = Topology::new(UniqueVec::new()); let block = ValidBlock::new_dummy().commit(&topology).unwrap(); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::default(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::default(), kura.clone(), query_handle); for i in 1..=BLOCK_CNT { let mut block = block.clone(); diff --git a/data_model/src/lib.rs b/data_model/src/lib.rs index 614e2d8d625..8038d813b3a 100644 --- a/data_model/src/lib.rs +++ b/data_model/src/lib.rs @@ -35,7 +35,7 @@ use core::{ use block::SignedBlock; #[cfg(not(target_arch = "aarch64"))] use derive_more::Into; -use derive_more::{AsRef, DebugCustom, Deref, Display, From, FromStr}; +use derive_more::{AsRef, Constructor, DebugCustom, Deref, Display, From, FromStr}; use events::TriggeringFilterBox; use getset::Getters; use iroha_crypto::{HashOf, PublicKey}; @@ -48,6 +48,7 @@ use iroha_primitives::{ small::{Array as SmallArray, SmallVec}, }; use iroha_schema::IntoSchema; +use iroha_version::{declare_versioned_with_scale, version_with_scale}; pub use numeric::model::NumericValue; use parity_scale_codec::{Decode, Encode}; use prelude::{Executable, SignedTransaction, TransactionQueryOutput}; @@ -990,6 +991,21 @@ pub mod model { /// Error ERROR, } + + /// Batched response of a query sent to torii + #[derive( + Debug, Clone, Constructor, Getters, Decode, Encode, Deserialize, Serialize, IntoSchema, + )] + #[version_with_scale(version = 1, versioned_alias = "BatchedResponse")] + #[getset(get = "pub")] + #[must_use] + pub struct BatchedResponseV1 { + /// Current batch + pub batch: T, + /// Index of the next element in the result set. Client will use this value + /// in the next request to continue fetching results of the original query + pub cursor: crate::query::cursor::ForwardCursor, + } } impl Identifiable for TriggerBox { @@ -1843,55 +1859,13 @@ pub fn current_time() -> core::time::Duration { .expect("Failed to get the current system time") } -#[cfg(feature = "http")] -pub mod http { - //! Structures related to HTTP communication - - use iroha_data_model_derive::model; - use iroha_schema::IntoSchema; - use iroha_version::declare_versioned_with_scale; - - pub use self::model::*; - use crate::prelude::QueryOutput; - - declare_versioned_with_scale!(BatchedResponse 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); - - #[model] - pub mod model { - use getset::Getters; - use iroha_version::version_with_scale; - use parity_scale_codec::{Decode, Encode}; - use serde::{Deserialize, Serialize}; - - use super::*; - - /// Batched response of a query sent to torii - #[derive(Debug, Clone, Getters, Decode, Encode, Deserialize, Serialize, IntoSchema)] - #[version_with_scale(version = 1, versioned_alias = "BatchedResponse")] - #[getset(get = "pub")] - #[must_use] - pub struct BatchedResponseV1 { - /// Current batch - pub batch: T, - /// Index of the next element in the result set. Client will use this value - /// in the next request to continue fetching results of the original query - pub cursor: crate::query::cursor::ForwardCursor, - } - } - - impl From> for QueryOutput { - #[inline] - fn from(source: BatchedResponseV1) -> Self { - source.batch - } - } +declare_versioned_with_scale!(BatchedResponse 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); - impl From> for (T, crate::query::cursor::ForwardCursor) { - fn from(source: BatchedResponseV1) -> Self { - let BatchedResponseV1 { batch, cursor } = source; +impl From> for (T, crate::query::cursor::ForwardCursor) { + fn from(source: BatchedResponseV1) -> Self { + let BatchedResponseV1 { batch, cursor } = source; - (batch, cursor) - } + (batch, cursor) } } diff --git a/data_model/src/query/cursor.rs b/data_model/src/query/cursor.rs index 1c3f4a24542..12870d971f3 100644 --- a/data_model/src/query/cursor.rs +++ b/data_model/src/query/cursor.rs @@ -1,5 +1,12 @@ //! Structures and traits related to server-side cursor. +#[cfg(not(feature = "std"))] +use alloc::{ + format, + string::{String, ToString as _}, + vec, + vec::Vec, +}; use core::num::{NonZeroU64, NonZeroUsize}; use getset::Getters; @@ -27,6 +34,15 @@ pub mod model { /// Pointer to the next element in the result set pub cursor: Option, } + + impl ForwardCursor { + /// Create a new cursor. + // + // `derive_more::Constructor` isn't used because we need `const`. + pub const fn new(query_id: Option, cursor: Option) -> Self { + Self { query_id, cursor } + } + } } mod candidate { diff --git a/data_model/src/query/mod.rs b/data_model/src/query/mod.rs index ca6d7e67651..5aa9026332a 100644 --- a/data_model/src/query/mod.rs +++ b/data_model/src/query/mod.rs @@ -3,22 +3,24 @@ #![allow(clippy::missing_inline_in_public_items, unused_imports)] #[cfg(not(feature = "std"))] -use alloc::{boxed::Box, format, string::String, vec::Vec}; +use alloc::{ + boxed::Box, + format, + string::{String, ToString as _}, + vec::Vec, +}; use core::cmp::Ordering; -#[cfg(feature = "http")] pub use cursor::ForwardCursor; -use derive_more::Display; +use derive_more::{Constructor, Display}; use iroha_crypto::{PublicKey, SignatureOf}; use iroha_data_model_derive::model; use iroha_macro::FromVariant; use iroha_schema::IntoSchema; use iroha_version::prelude::*; -#[cfg(feature = "http")] pub use pagination::Pagination; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -#[cfg(feature = "http")] pub use sorting::Sorting; pub use self::model::*; @@ -34,11 +36,8 @@ use crate::{ Identifiable, Value, }; -#[cfg(feature = "http")] pub mod cursor; -#[cfg(feature = "http")] pub mod pagination; -#[cfg(feature = "http")] pub mod sorting; macro_rules! queries { @@ -164,6 +163,27 @@ pub mod model { )] #[ffi_type] pub struct MetadataValue(pub Value); + + /// Request type clients (like http clients or wasm) can send to a query endpoint. + #[derive(Debug, Clone, Encode, Decode, Serialize, Deserialize)] + pub enum QueryRequest { + /// Query it-self. + /// Basically used for one-time queries or to get a cursor for big queries. + Query(QueryWithParameters), + /// Cursor over previously sent [`Query`](QueryRequest::Query). + Cursor(ForwardCursor), + } + + /// Query with parameters client can specify. + #[derive( + Debug, Constructor, Getters, Clone, PartialEq, Eq, Encode, Decode, Serialize, Deserialize, + )] + #[getset(get = "pub")] + pub struct QueryWithParameters { + pub query: Q, + pub sorting: Sorting, + pub pagination: Pagination, + } } impl From for Value { @@ -209,6 +229,25 @@ impl Ord for TransactionQueryOutput { } } +impl core::fmt::Display for QueryRequest { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match self { + Self::Query(query) => write!(f, "{query}"), + Self::Cursor(cursor) => write!(f, "{cursor:?}"), + } + } +} + +impl core::fmt::Display for QueryWithParameters { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_struct("QueryWithParameters") + .field("query", &self.query.to_string()) + .field("sorting", &self.sorting) + .field("pagination", &self.pagination) + .finish() + } +} + pub mod role { //! Queries related to [`Role`]. @@ -1237,10 +1276,6 @@ pub mod http { use super::*; use crate::{account::AccountId, predicate::PredicateBox}; - // TODO: Could we make a variant of `Value` that holds only query results? - /// Type representing Result of executing a query - pub type QueryOutput = Value; - declare_versioned_with_scale!(SignedQuery 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); #[model] @@ -1280,6 +1315,9 @@ pub mod http { /// Payload pub payload: QueryPayload, } + + /// End type of a query http clients can send to an endpoint. + pub type ClientQueryRequest = QueryRequest; } mod candidate { @@ -1454,6 +1492,8 @@ pub mod error { #[skip_try_from] String, ), + /// Unknown query cursor + UnknownCursor, } /// Type assertion error diff --git a/data_model/src/query/pagination.rs b/data_model/src/query/pagination.rs index 71a12d95f8c..f93a1dadc25 100644 --- a/data_model/src/query/pagination.rs +++ b/data_model/src/query/pagination.rs @@ -17,17 +17,14 @@ use derive_more::{Constructor, Display}; use iroha_data_model_derive::model; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -use warp::{ - http::StatusCode, - reply::{self, Response}, - Reply, -}; const PAGINATION_START: &str = "start"; const PAGINATION_LIMIT: &str = "limit"; /// Structure for pagination requests -#[derive(Debug, Display, Clone, Copy, Default, Decode, Encode, Deserialize, Serialize)] +#[derive( + Debug, Display, Clone, Copy, PartialEq, Eq, Default, Decode, Encode, Deserialize, Serialize, +)] #[display( fmt = "{}--{}", "start.map(NonZeroU64::get).unwrap_or(0)", diff --git a/data_model/src/query/sorting.rs b/data_model/src/query/sorting.rs index 9ccbc83c610..015aeb3f34d 100644 --- a/data_model/src/query/sorting.rs +++ b/data_model/src/query/sorting.rs @@ -4,6 +4,7 @@ use alloc::{ format, string::{String, ToString as _}, + vec, vec::Vec, }; @@ -21,7 +22,7 @@ pub mod model { use super::*; /// Struct for sorting requests - #[derive(Debug, Clone, Default, Decode, Encode, Deserialize, Serialize)] + #[derive(Debug, Clone, Default, PartialEq, Eq, Decode, Encode, Deserialize, Serialize)] pub struct Sorting { /// Sort query result using [`Name`] of the key in [`Asset`]'s metadata. pub sort_by_metadata_key: Option, diff --git a/data_model/src/smart_contract.rs b/data_model/src/smart_contract.rs index f159fa69531..7091fc9101d 100644 --- a/data_model/src/smart_contract.rs +++ b/data_model/src/smart_contract.rs @@ -1,5 +1,7 @@ //! This module contains data and structures related only to smart contract execution +use crate::query::{QueryBox, QueryRequest}; + pub mod payloads { //! Payloads with function arguments for different entrypoints @@ -41,3 +43,6 @@ pub mod payloads { pub to_validate: T, } } + +/// Request type for `execute_query()` function. +pub type SmartContractQueryRequest = QueryRequest; diff --git a/docs/source/references/config.md b/docs/source/references/config.md index b43fe9111f2..d8153062d07 100644 --- a/docs/source/references/config.md +++ b/docs/source/references/config.md @@ -56,8 +56,7 @@ The following is the default configuration used by Iroha. "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -125,6 +124,9 @@ The following is the default configuration used by Iroha. "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } ``` @@ -282,6 +284,28 @@ Has type `Option`[^1]. Can be configured via environment variable `KURA_IN "strict" ``` +## `live_query_store` + +LiveQueryStore configuration + +Has type `Option`[^1]. Can be configured via environment variable `IROHA_LIVE_QUERY_STORE` + +```json +{ + "QUERY_IDLE_TIME_MS": 30000 +} +``` + +### `live_query_store.query_idle_time_ms` + +Time query can remain in the store if unaccessed + +Has type `Option`[^1]. Can be configured via environment variable `LIVE_QUERY_STORE_QUERY_IDLE_TIME_MS` + +```json +30000 +``` + ## `logger` `Logger` configuration @@ -677,8 +701,7 @@ Has type `Option`[^1]. Can be configured via environm "FETCH_SIZE": 10, "MAX_CONTENT_LEN": 16384000, "MAX_TRANSACTION_SIZE": 32768, - "P2P_ADDR": null, - "QUERY_IDLE_TIME_MS": 30000 + "P2P_ADDR": null } ``` @@ -732,16 +755,6 @@ Has type `Option`[^1]. Can be configured via environment variable `T null ``` -### `torii.query_idle_time_ms` - -Time query can remain in the store if unaccessed - -Has type `Option`[^1]. Can be configured via environment variable `TORII_QUERY_IDLE_TIME_MS` - -```json -30000 -``` - ## `wsv` `WorldStateView` configuration diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index f7f2fe68aaf..d60d8ffdefa 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -3663,6 +3663,10 @@ "tag": "Conversion", "discriminant": 3, "type": "String" + }, + { + "tag": "UnknownCursor", + "discriminant": 4 } ] }, diff --git a/schema/gen/src/lib.rs b/schema/gen/src/lib.rs index b89d32ff949..b808576c469 100644 --- a/schema/gen/src/lib.rs +++ b/schema/gen/src/lib.rs @@ -6,8 +6,8 @@ use iroha_crypto::MerkleTree; use iroha_data_model::{ block::stream::{BlockMessage, BlockSubscriptionRequest}, - http::BatchedResponse, query::error::QueryExecutionFail, + BatchedResponse, }; use iroha_genesis::RawGenesisBlock; use iroha_schema::prelude::*; @@ -413,7 +413,6 @@ mod tests { }, domain::NewDomain, executor::Executor, - http::{BatchedResponse, BatchedResponseV1}, ipfs::IpfsPath, predicate::{ ip_addr::{Ipv4Predicate, Ipv6Predicate}, @@ -428,7 +427,7 @@ mod tests { ForwardCursor, }, transaction::{error::TransactionLimitError, SignedTransactionV1, TransactionLimits}, - SignedBlockWrapper, + BatchedResponse, BatchedResponseV1, SignedBlockWrapper, }; use iroha_genesis::RawGenesisBlock; use iroha_primitives::{ diff --git a/smart_contract/Cargo.toml b/smart_contract/Cargo.toml index 64ba4666156..b0d9950600f 100644 --- a/smart_contract/Cargo.toml +++ b/smart_contract/Cargo.toml @@ -16,10 +16,12 @@ debug = [] [dependencies] iroha_data_model.workspace = true +iroha_macro.workspace = true iroha_smart_contract_utils.workspace = true iroha_smart_contract_derive.workspace = true parity-scale-codec.workspace = true +derive_more.workspace = true [dev-dependencies] webassembly-test = "0.1.0" diff --git a/smart_contract/derive/src/entrypoint.rs b/smart_contract/derive/src/entrypoint.rs index 9ed630b7b1d..e2ddb99e0e6 100644 --- a/smart_contract/derive/src/entrypoint.rs +++ b/smart_contract/derive/src/entrypoint.rs @@ -29,7 +29,9 @@ pub fn impl_entrypoint(_attr: TokenStream, item: TokenStream) -> TokenStream { block.stmts.insert( 0, parse_quote!( - use ::iroha_wasm::{debug::DebugExpectExt as _, ExecuteOnHost as _, QueryHost as _}; + use ::iroha_wasm::{ + debug::DebugExpectExt as _, ExecuteOnHost as _, ExecuteQueryOnHost as _, + }; ), ); diff --git a/smart_contract/executor/derive/src/entrypoint.rs b/smart_contract/executor/derive/src/entrypoint.rs index d89414f4e23..a518fcbd7a2 100644 --- a/smart_contract/executor/derive/src/entrypoint.rs +++ b/smart_contract/executor/derive/src/entrypoint.rs @@ -88,7 +88,7 @@ fn impl_validate_entrypoint( block.stmts.insert( 0, parse_quote!( - use ::iroha_executor::smart_contract::{ExecuteOnHost as _, QueryHost as _}; + use ::iroha_executor::smart_contract::{ExecuteOnHost as _, ExecuteQueryOnHost as _}; ), ); diff --git a/smart_contract/executor/derive/src/token.rs b/smart_contract/executor/derive/src/token.rs index 97b1b3b4edb..6851ee53372 100644 --- a/smart_contract/executor/derive/src/token.rs +++ b/smart_contract/executor/derive/src/token.rs @@ -26,17 +26,21 @@ fn impl_token(ident: &syn::Ident, generics: &syn::Generics) -> proc_macro2::Toke quote! { impl #impl_generics ::iroha_executor::permission::Token for #ident #ty_generics #where_clause { fn is_owned_by(&self, account_id: &::iroha_executor::data_model::account::AccountId) -> bool { - let all_account_tokens: Vec = ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( - ::iroha_executor::smart_contract::QueryHost::execute( - &::iroha_executor::data_model::query::permission::FindPermissionTokensByAccountId::new( + let account_tokens_cursor = ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( + ::iroha_executor::smart_contract::ExecuteQueryOnHost::execute( + ::iroha_executor::data_model::query::permission::FindPermissionTokensByAccountId::new( account_id.clone(), ) ), "Failed to execute `FindPermissionTokensByAccountId` query" - ).try_into().unwrap(); + ); - all_account_tokens + account_tokens_cursor .into_iter() + .map(|res| ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( + res, + "Failed to get permission token from cursor" + )) .filter_map(|token| Self::try_from(token).ok()) .any(|token| self == &token) } diff --git a/smart_contract/executor/src/default.rs b/smart_contract/executor/src/default.rs index 816e9e58ab3..784a50fb2b9 100644 --- a/smart_contract/executor/src/default.rs +++ b/smart_contract/executor/src/default.rs @@ -1326,7 +1326,7 @@ pub mod role { let role_id = $isi.object; let find_role_query_res = match FindRoleByRoleId::new(role_id).execute() { - Ok(res) => res, + Ok(res) => res.into_inner(), Err(error) => { deny!($executor, error); } diff --git a/smart_contract/executor/src/permission.rs b/smart_contract/executor/src/permission.rs index a0f60a6c35e..5a4b0f45ebf 100644 --- a/smart_contract/executor/src/permission.rs +++ b/smart_contract/executor/src/permission.rs @@ -3,6 +3,7 @@ use alloc::borrow::ToOwned as _; use iroha_schema::IntoSchema; +use iroha_smart_contract::QueryOutputCursor; use iroha_smart_contract_utils::debug::DebugExpectExt as _; use serde::{de::DeserializeOwned, Serialize}; @@ -139,8 +140,9 @@ pub mod asset_definition { asset_definition_id: &AssetDefinitionId, authority: &AccountId, ) -> Result { - let asset_definition = - FindAssetDefinitionById::new(asset_definition_id.clone()).execute()?; + let asset_definition = FindAssetDefinitionById::new(asset_definition_id.clone()) + .execute() + .map(QueryOutputCursor::into_inner)?; if asset_definition.owned_by() == authority { Ok(true) } else { @@ -224,7 +226,9 @@ pub mod trigger { /// - `FindTrigger` fails /// - `is_domain_owner` fails pub fn is_trigger_owner(trigger_id: &TriggerId, authority: &AccountId) -> Result { - let trigger = FindTriggerById::new(trigger_id.clone()).execute()?; + let trigger = FindTriggerById::new(trigger_id.clone()) + .execute() + .map(QueryOutputCursor::into_inner)?; if trigger.action().authority() == authority { Ok(true) } else { @@ -268,6 +272,7 @@ pub mod domain { pub fn is_domain_owner(domain_id: &DomainId, authority: &AccountId) -> Result { FindDomainById::new(domain_id.clone()) .execute() + .map(QueryOutputCursor::into_inner) .map(|domain| domain.owned_by() == authority) } diff --git a/smart_contract/src/lib.rs b/smart_contract/src/lib.rs index 62e0a570e77..e481cf04f63 100644 --- a/smart_contract/src/lib.rs +++ b/smart_contract/src/lib.rs @@ -4,16 +4,22 @@ extern crate alloc; -use alloc::{boxed::Box, collections::BTreeMap}; +use alloc::{boxed::Box, collections::BTreeMap, vec::Vec}; #[cfg(not(test))] use data_model::smart_contract::payloads; use data_model::{ isi::Instruction, prelude::*, - query::{Query, QueryBox}, + query::{ + cursor::ForwardCursor, sorting::Sorting, Pagination, Query, QueryBox, QueryWithParameters, + }, + smart_contract::SmartContractQueryRequest, + BatchedResponse, }; +use derive_more::Display; pub use iroha_data_model as data_model; +use iroha_macro::error::ErrorTryFromEnum; pub use iroha_smart_contract_derive::main; pub use iroha_smart_contract_utils::{debug, log}; use iroha_smart_contract_utils::{ @@ -50,17 +56,6 @@ pub trait ExecuteOnHost: Instruction { fn execute(&self) -> Result<(), ValidationFail>; } -/// Implementing queries can be executed on the host -pub trait QueryHost: Query { - /// Execute query on the host - /// - /// # Errors - /// - /// - If query validation failed - /// - If query execution failed - fn execute(&self) -> Result; -} - // TODO: Remove the Clone bound. It can be done by custom serialization to InstructionExpr impl ExecuteOnHost for I { fn execute(&self) -> Result<(), ValidationFail> { @@ -81,30 +76,260 @@ impl ExecuteOnHost for I { } } -// TODO: Remove the Clone bound. It can be done by custom serialization/deserialization to QueryBox -impl + Encode + Clone> QueryHost for Q +/// Generic query request containing additional parameters. +#[derive(Debug)] +pub struct QueryRequest { + query: Q, + sorting: Sorting, + pagination: Pagination, +} + +impl From> for SmartContractQueryRequest { + fn from(query_request: QueryRequest) -> Self { + SmartContractQueryRequest::Query(QueryWithParameters::new( + query_request.query.into(), + query_request.sorting, + query_request.pagination, + )) + } +} + +/// Implementing queries can be executed on the host +/// +/// TODO: `&self` should be enough +pub trait ExecuteQueryOnHost: Sized { + /// Query output type. + type Output; + + /// Type of [`QueryRequest`]. + type QueryRequest; + + /// Apply sorting to a query + fn sort(self, sorting: Sorting) -> Self::QueryRequest; + + /// Apply pagination to a query + fn paginate(self, pagination: Pagination) -> Self::QueryRequest; + + /// Execute query on the host + /// + /// # Errors + /// + /// - If query validation failed + /// - If query execution failed + fn execute(self) -> Result, ValidationFail>; +} + +impl ExecuteQueryOnHost for Q +where + Q::Output: DecodeAll, + >::Error: core::fmt::Debug, +{ + type Output = Q::Output; + type QueryRequest = QueryRequest; + + fn sort(self, sorting: Sorting) -> Self::QueryRequest { + QueryRequest { + query: self, + sorting, + pagination: Pagination::default(), + } + } + + fn paginate(self, pagination: Pagination) -> Self::QueryRequest { + QueryRequest { + query: self, + sorting: Sorting::default(), + pagination, + } + } + + fn execute(self) -> Result, ValidationFail> { + QueryRequest { + query: self, + sorting: Sorting::default(), + pagination: Pagination::default(), + } + .execute() + } +} + +impl ExecuteQueryOnHost for QueryRequest where Q::Output: DecodeAll, >::Error: core::fmt::Debug, { - fn execute(&self) -> Result { + type Output = Q::Output; + type QueryRequest = Self; + + fn sort(mut self, sorting: Sorting) -> Self { + self.sorting = sorting; + self + } + + fn paginate(mut self, pagination: Pagination) -> Self { + self.pagination = pagination; + self + } + + #[allow(irrefutable_let_patterns)] + fn execute(self) -> Result, ValidationFail> { + #[cfg(not(test))] + use host::execute_query as host_execute_query; + #[cfg(test)] + use tests::_iroha_smart_contract_execute_query_mock as host_execute_query; + + let wasm_query_request = SmartContractQueryRequest::from(self); + + // Safety: - `host_execute_query` doesn't take ownership of it's pointer parameter + // - ownership of the returned result is transferred into `_decode_from_raw` + let res: Result, ValidationFail> = unsafe { + decode_with_length_prefix_from_raw(encode_and_execute( + &wasm_query_request, + host_execute_query, + )) + }; + let BatchedResponse::V1(response) = res? else { + panic!("Unsupported response version") + }; + let (value, cursor) = response.into(); + let typed_value = Self::Output::try_from(value).expect("Query output has incorrect type"); + Ok(QueryOutputCursor { + batch: typed_value, + cursor, + }) + } +} + +/// Cursor over query results implementing [`IntoIterator`]. +/// +/// If you execute [`QueryBox`] when you probably want to use [`collect()`](Self::collect) method +/// instead of [`into_iter()`](Self::into_iter) to ensure that all results vere consumed. +#[derive(Debug, Encode, PartialEq, Eq)] +pub struct QueryOutputCursor { + batch: T, + cursor: ForwardCursor, +} + +impl QueryOutputCursor { + /// Get inner value consuming [`Self`]. + pub fn into_inner(self) -> T { + self.batch + } +} + +impl QueryOutputCursor { + /// Same as [`into_inner()`](Self::into_inner) but collects all values of [`Value::Vec`] + /// in case if there are some cached results left on the host side. + /// + /// # Errors + /// + /// May fail due to the same reasons [`QueryOutputCursorIterator`] can fail to iterate. + pub fn collect(self) -> Result>> { + let Value::Vec(v) = self.batch else { + return Ok(self.batch) + }; + + // Making sure we received all values + let cursor = QueryOutputCursor { + batch: v, + cursor: self.cursor, + }; + cursor + .into_iter() + .collect::, _>>() + .map(Value::Vec) + } +} + +impl> IntoIterator for QueryOutputCursor> { + type Item = Result>>; + type IntoIter = QueryOutputCursorIterator; + + fn into_iter(self) -> Self::IntoIter { + QueryOutputCursorIterator { + iter: self.batch.into_iter(), + cursor: self.cursor, + } + } +} + +/// Iterator over query results. +/// +/// # Errors +/// +/// Iteration may fail due to the following reasons: +/// +/// - Failed to get next batch of results from the host +/// - Failed to convert batch of results into the requested type +/// +/// # Panics +/// +/// Panics if response from host is not [`BatchedResponse::V1`]. +pub struct QueryOutputCursorIterator { + iter: as IntoIterator>::IntoIter, + cursor: ForwardCursor, +} + +impl> QueryOutputCursorIterator { + #[allow(irrefutable_let_patterns)] + fn next_batch(&self) -> Result>> { #[cfg(not(test))] use host::execute_query as host_execute_query; #[cfg(test)] use tests::_iroha_smart_contract_execute_query_mock as host_execute_query; - // TODO: Redundant conversion into `QueryBox` - let query_box: QueryBox = self.clone().into(); + let wasm_query_request = SmartContractQueryRequest::Cursor(self.cursor.clone()); + // Safety: - `host_execute_query` doesn't take ownership of it's pointer parameter // - ownership of the returned result is transferred into `_decode_from_raw` - let res: Result = unsafe { - decode_with_length_prefix_from_raw(encode_and_execute(&query_box, host_execute_query)) + let res: Result, ValidationFail> = unsafe { + decode_with_length_prefix_from_raw(encode_and_execute( + &wasm_query_request, + host_execute_query, + )) + }; + let BatchedResponse::V1(response) = res? else { + panic!("Unsupported response version") + }; + let (value, cursor) = response.into(); + let vec = Vec::::try_from(value)?; + Ok(Self { + iter: vec.into_iter(), + cursor, + }) + } +} + +impl> Iterator for QueryOutputCursorIterator { + type Item = Result>>; + + fn next(&mut self) -> Option { + if let Some(item) = self.iter.next() { + return Some(Ok(item)); + } + + let mut next_iter = match self.next_batch() { + Ok(next_iter) => next_iter, + Err(QueryOutputCursorError::Validation(ValidationFail::QueryFailed( + iroha_data_model::query::error::QueryExecutionFail::UnknownCursor, + ))) => return None, + Err(err) => return Some(Err(err)), }; - res.map(|value| value.try_into().expect("Query returned invalid type")) + core::mem::swap(self, &mut next_iter); + self.iter.next().map(Ok) } } +/// Error iterating other query results. +#[derive(Debug, Display, iroha_macro::FromVariant)] +pub enum QueryOutputCursorError { + /// Validation error on the host side during next batch retrieval. + Validation(ValidationFail), + /// Host returned unexpected output type. + Conversion(ErrorTryFromEnum), +} + /// World state view of the host #[derive(Debug, Clone, Copy)] pub struct Host; @@ -136,7 +361,14 @@ impl Context { impl iroha_data_model::evaluate::Context for Context { fn query(&self, query: &QueryBox) -> Result { - query.execute() + let value_cursor = query.clone().execute()?; + match value_cursor.collect() { + Ok(value) => Ok(value), + Err(QueryOutputCursorError::Validation(err)) => Err(err), + Err(QueryOutputCursorError::Conversion(err)) => { + panic!("Conversion error during collecting query result: {err:?}") + } + } } fn get(&self, name: &Name) -> Option<&Value> { @@ -188,7 +420,7 @@ mod host { /// Most used items pub mod prelude { - pub use crate::{ExecuteOnHost, QueryHost}; + pub use crate::{ExecuteOnHost, ExecuteQueryOnHost}; } #[cfg(test)] @@ -198,13 +430,16 @@ mod tests { use core::{mem::ManuallyDrop, slice}; + use data_model::{query::asset::FindAssetQuantityById, BatchedResponseV1}; use iroha_smart_contract_utils::encode_with_length_prefix; use webassembly_test::webassembly_test; use super::*; - const QUERY_RESULT: Result = - Ok(Value::Numeric(NumericValue::U32(1234_u32))); + const QUERY_RESULT: Result, ValidationFail> = Ok(QueryOutputCursor { + batch: Value::Numeric(NumericValue::U32(1234_u32)), + cursor: ForwardCursor::new(None, None), + }); const ISI_RESULT: Result<(), ValidationFail> = Ok(()); const EXPRESSION_RESULT: NumericValue = NumericValue::U32(5_u32); @@ -216,8 +451,8 @@ mod tests { } fn get_test_query() -> QueryBox { - let account_id: AccountId = "alice@wonderland".parse().expect("Valid"); - FindAccountById::new(account_id).into() + let asset_id: AssetId = "rose##alice@wonderland".parse().expect("Valid"); + FindAssetQuantityById::new(asset_id).into() } fn get_test_expression() -> EvaluatesTo { @@ -242,10 +477,18 @@ mod tests { len: usize, ) -> *const u8 { let bytes = slice::from_raw_parts(ptr, len); - let query = QueryBox::decode_all(&mut &*bytes).unwrap(); - assert_eq!(query, get_test_query()); - - ManuallyDrop::new(encode_with_length_prefix(&QUERY_RESULT)).as_ptr() + let query = SmartContractQueryRequest::decode_all(&mut &*bytes).unwrap(); + let SmartContractQueryRequest::Query(query_with_parameters) = query else { + panic!("Expected query, not a cursor"); + }; + assert_eq!(query_with_parameters.query(), &get_test_query()); + + let response: Result, ValidationFail> = Ok(BatchedResponseV1::new( + QUERY_RESULT.unwrap().into_inner(), + ForwardCursor::new(None, None), + ) + .into()); + ManuallyDrop::new(encode_with_length_prefix(&response)).as_ptr() } #[webassembly_test] diff --git a/smart_contract/trigger/derive/src/entrypoint.rs b/smart_contract/trigger/derive/src/entrypoint.rs index 71387f19be9..5fe5d822f71 100644 --- a/smart_contract/trigger/derive/src/entrypoint.rs +++ b/smart_contract/trigger/derive/src/entrypoint.rs @@ -27,7 +27,7 @@ pub fn impl_entrypoint(_attr: TokenStream, item: TokenStream) -> TokenStream { 0, parse_quote!( use ::iroha_trigger::smart_contract::{ - debug::DebugExpectExt as _, ExecuteOnHost as _, QueryHost as _, + debug::DebugExpectExt as _, ExecuteOnHost as _, ExecuteQueryOnHost as _, }; ), ); diff --git a/telemetry/derive/tests/ui_fail/args_no_wsv.rs b/telemetry/derive/tests/ui_fail/args_no_wsv.rs index 388231c5a8b..d85e46478e6 100644 --- a/telemetry/derive/tests/ui_fail/args_no_wsv.rs +++ b/telemetry/derive/tests/ui_fail/args_no_wsv.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,6 +6,5 @@ fn execute(_wsv: &World) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); + } diff --git a/telemetry/derive/tests/ui_fail/args_no_wsv.stderr b/telemetry/derive/tests/ui_fail/args_no_wsv.stderr index 4e229217d34..4aa2e1da1c3 100644 --- a/telemetry/derive/tests/ui_fail/args_no_wsv.stderr +++ b/telemetry/derive/tests/ui_fail/args_no_wsv.stderr @@ -1,5 +1,5 @@ error: At least one argument must be a `WorldStateView`. - --> tests/ui_fail/args_no_wsv.rs:5:12 + --> tests/ui_fail/args_no_wsv.rs:4:12 | -5 | fn execute(_wsv: &World) -> Result<(), ()> { +4 | fn execute(_wsv: &World) -> Result<(), ()> { | ^^^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/bare_spec.rs b/telemetry/derive/tests/ui_fail/bare_spec.rs index 5ea32d7fb4e..bb6029fddf1 100644 --- a/telemetry/derive/tests/ui_fail/bare_spec.rs +++ b/telemetry/derive/tests/ui_fail/bare_spec.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(test_query, "another_test_query_without_timing")] @@ -7,6 +6,4 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); } diff --git a/telemetry/derive/tests/ui_fail/bare_spec.stderr b/telemetry/derive/tests/ui_fail/bare_spec.stderr index 72c5f11a848..0bb06d93ac6 100644 --- a/telemetry/derive/tests/ui_fail/bare_spec.stderr +++ b/telemetry/derive/tests/ui_fail/bare_spec.stderr @@ -1,5 +1,5 @@ error: expected literal - --> tests/ui_fail/bare_spec.rs:4:11 + --> tests/ui_fail/bare_spec.rs:3:11 | -4 | #[metrics(test_query, "another_test_query_without_timing")] +3 | #[metrics(test_query, "another_test_query_without_timing")] | ^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/doubled_plus.rs b/telemetry/derive/tests/ui_fail/doubled_plus.rs index 58fd7eae068..61db9e0dda1 100644 --- a/telemetry/derive/tests/ui_fail/doubled_plus.rs +++ b/telemetry/derive/tests/ui_fail/doubled_plus.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", ++"another_test_query_without_timing")] @@ -7,6 +6,5 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); + } diff --git a/telemetry/derive/tests/ui_fail/doubled_plus.stderr b/telemetry/derive/tests/ui_fail/doubled_plus.stderr index becb8bf32c5..751d4f27b17 100644 --- a/telemetry/derive/tests/ui_fail/doubled_plus.stderr +++ b/telemetry/derive/tests/ui_fail/doubled_plus.stderr @@ -1,5 +1,5 @@ error: expected literal - --> tests/ui_fail/doubled_plus.rs:4:27 + --> tests/ui_fail/doubled_plus.rs:3:27 | -4 | #[metrics(+"test_query", ++"another_test_query_without_timing")] +3 | #[metrics(+"test_query", ++"another_test_query_without_timing")] | ^ diff --git a/telemetry/derive/tests/ui_fail/no_args.rs b/telemetry/derive/tests/ui_fail/no_args.rs index 00a0f60dd1f..73c27db3bab 100644 --- a/telemetry/derive/tests/ui_fail/no_args.rs +++ b/telemetry/derive/tests/ui_fail/no_args.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,6 +6,4 @@ fn execute() -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); } diff --git a/telemetry/derive/tests/ui_fail/no_args.stderr b/telemetry/derive/tests/ui_fail/no_args.stderr index 5b1e88c34d2..bf2d6e9b557 100644 --- a/telemetry/derive/tests/ui_fail/no_args.stderr +++ b/telemetry/derive/tests/ui_fail/no_args.stderr @@ -1,5 +1,5 @@ error: Function must have at least one argument of type `WorldStateView`. - --> tests/ui_fail/no_args.rs:5:1 + --> tests/ui_fail/no_args.rs:4:1 | -5 | fn execute() -> Result<(), ()> { +4 | fn execute() -> Result<(), ()> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/non_snake_case_name.rs b/telemetry/derive/tests/ui_fail/non_snake_case_name.rs index 065cf621c56..97c83ab152f 100644 --- a/telemetry/derive/tests/ui_fail/non_snake_case_name.rs +++ b/telemetry/derive/tests/ui_fail/non_snake_case_name.rs @@ -1,5 +1,3 @@ -#![allow(unused_imports)] // Unused because macro will no generate anything -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test query", "another_test_query_without_timing")] diff --git a/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr b/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr index 2b2d9f0ee51..6bb8fe44028 100644 --- a/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr +++ b/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr @@ -1,7 +1,7 @@ error: Spaces are not allowed. Use underscores '_' - --> tests/ui_fail/non_snake_case_name.rs:5:1 + --> tests/ui_fail/non_snake_case_name.rs:3:1 | -5 | #[metrics(+"test query", "another_test_query_without_timing")] +3 | #[metrics(+"test query", "another_test_query_without_timing")] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this error originates in the attribute macro `metrics` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/telemetry/derive/tests/ui_fail/not_execute.rs b/telemetry/derive/tests/ui_fail/not_execute.rs index 4d300ed88fa..7a63c17d08f 100644 --- a/telemetry/derive/tests/ui_fail/not_execute.rs +++ b/telemetry/derive/tests/ui_fail/not_execute.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::{World, WorldStateView}; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,7 +6,5 @@ fn exequte(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: World = World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/not_execute.stderr b/telemetry/derive/tests/ui_fail/not_execute.stderr index 4146a4ab62b..7f4ab728dae 100644 --- a/telemetry/derive/tests/ui_fail/not_execute.stderr +++ b/telemetry/derive/tests/ui_fail/not_execute.stderr @@ -1,5 +1,5 @@ error: Function should be an `impl execute` - --> tests/ui_fail/not_execute.rs:5:4 + --> tests/ui_fail/not_execute.rs:4:4 | -5 | fn exequte(wsv: &WorldStateView) -> Result<(), ()> { +4 | fn exequte(wsv: &WorldStateView) -> Result<(), ()> { | ^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/not_return_result.rs b/telemetry/derive/tests/ui_fail/not_return_result.rs index 18fbf19d0ca..ca779d8e5ec 100644 --- a/telemetry/derive/tests/ui_fail/not_return_result.rs +++ b/telemetry/derive/tests/ui_fail/not_return_result.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::{World, WorldStateView}; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,8 +6,6 @@ fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: World = World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/not_return_result.stderr b/telemetry/derive/tests/ui_fail/not_return_result.stderr index 37ef12869a2..6652f72014d 100644 --- a/telemetry/derive/tests/ui_fail/not_return_result.stderr +++ b/telemetry/derive/tests/ui_fail/not_return_result.stderr @@ -1,5 +1,5 @@ error: Should return `Result`. Found RESULT - --> tests/ui_fail/not_return_result.rs:5:50 + --> tests/ui_fail/not_return_result.rs:4:50 | -5 | fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { +4 | fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { | ^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/return_nothing.rs b/telemetry/derive/tests/ui_fail/return_nothing.rs index 759960622a6..419325ac0ba 100644 --- a/telemetry/derive/tests/ui_fail/return_nothing.rs +++ b/telemetry/derive/tests/ui_fail/return_nothing.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,7 +6,5 @@ fn execute(wsv: &WorldStateView) { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: iroha_core::wsv::World = iroha_core::wsv::World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/return_nothing.stderr b/telemetry/derive/tests/ui_fail/return_nothing.stderr index f92d23ee205..93385e20c54 100644 --- a/telemetry/derive/tests/ui_fail/return_nothing.stderr +++ b/telemetry/derive/tests/ui_fail/return_nothing.stderr @@ -1,7 +1,7 @@ error: `Fn` must return `Result`. Returns nothing instead. - --> tests/ui_fail/return_nothing.rs:4:1 + --> tests/ui_fail/return_nothing.rs:3:1 | -4 | #[metrics(+"test_query", "another_test_query_without_timing")] +3 | #[metrics(+"test_query", "another_test_query_without_timing")] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this error originates in the attribute macro `metrics` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/telemetry/derive/tests/ui_fail/trailing_plus.rs b/telemetry/derive/tests/ui_fail/trailing_plus.rs index c692d625ae1..3034f0c7f1d 100644 --- a/telemetry/derive/tests/ui_fail/trailing_plus.rs +++ b/telemetry/derive/tests/ui_fail/trailing_plus.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing"+)] @@ -7,7 +6,5 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: iroha_core::wsv::World = iroha_core::wsv::World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/trailing_plus.stderr b/telemetry/derive/tests/ui_fail/trailing_plus.stderr index f613692ad1c..6378d3ff10d 100644 --- a/telemetry/derive/tests/ui_fail/trailing_plus.stderr +++ b/telemetry/derive/tests/ui_fail/trailing_plus.stderr @@ -1,5 +1,5 @@ error: expected `,` - --> tests/ui_fail/trailing_plus.rs:4:61 + --> tests/ui_fail/trailing_plus.rs:3:61 | -4 | #[metrics(+"test_query", "another_test_query_without_timing"+)] +3 | #[metrics(+"test_query", "another_test_query_without_timing"+)] | ^ diff --git a/tools/parity_scale_decoder/src/main.rs b/tools/parity_scale_decoder/src/main.rs index 2f3d3a6f220..f821730be72 100644 --- a/tools/parity_scale_decoder/src/main.rs +++ b/tools/parity_scale_decoder/src/main.rs @@ -29,7 +29,6 @@ use iroha_data_model::{ }, domain::NewDomain, executor::Executor, - http::{BatchedResponse, BatchedResponseV1}, ipfs::IpfsPath, predicate::{ ip_addr::{Ipv4Predicate, Ipv6Predicate}, @@ -44,7 +43,7 @@ use iroha_data_model::{ ForwardCursor, }, transaction::{error::TransactionLimitError, SignedTransactionV1, TransactionLimits}, - SignedBlockWrapper, + BatchedResponse, BatchedResponseV1, SignedBlockWrapper, }; use iroha_primitives::{ addr::{Ipv4Addr, Ipv6Addr},