From 803150635c5a8fb554a1e35836b03442728f9c6a Mon Sep 17 00:00:00 2001 From: Bradley Nelson Date: Tue, 16 Jun 2026 21:26:36 -0600 Subject: [PATCH] add frontend --- .github/workflows/ci.yml | 1 + .gitignore | 3 + devenv.nix | 8 + justfile | 5 + scripts/build-plugin-hello.sh | 13 +- scripts/build-plugin-zip.sh | 45 +++ src/application/adapters/mod.rs | 1 + .../adapters/plugin_lifecycle_hook.rs | 13 +- .../adapters/plugin_user_lifecycle_hook.rs | 160 ++++++++++ src/application/dtos/mod.rs | 1 + src/application/dtos/plugin_dto.rs | 37 +++ src/application/ports/plugin_ports.rs | 118 ++++++- src/common/di.rs | 124 +++++--- .../services/plugins/manager.rs | 295 ++++++++++++++++-- .../services/plugins/manager_test.rs | 248 +++++++++++++++ .../services/plugins/manifest.rs | 4 +- src/infrastructure/services/plugins/mod.rs | 2 + .../services/plugins/runtime.rs | 31 +- .../services/plugins/runtime_test.rs | 167 ++++++++-- src/interfaces/api/handlers/admin_handler.rs | 186 ++++++++++- static/admin.html | 61 ++++ static/js/views/admin/admin.js | 196 ++++++++++++ static/locales/en.json | 25 ++ tests/fixtures/plugins/hello.wasm | Bin 125590 -> 130558 bytes tests/fixtures/plugins/net.wasm | Bin 145608 -> 150541 bytes tests/fixtures/plugins/omit_login.wasm | Bin 0 -> 125600 bytes tests/fixtures/plugins/panic.wasm | Bin 76122 -> 126105 bytes tests/fixtures/plugins/sleep.wasm | Bin 76063 -> 126051 bytes tests/fixtures/plugins/wrong_abi.wasm | Bin 125590 -> 130558 bytes wasm/oxicloud-plugin-hello/Cargo.toml | 7 +- wasm/oxicloud-plugin-hello/plugin.toml | 11 + wasm/oxicloud-plugin-hello/src/lib.rs | 44 ++- 32 files changed, 1654 insertions(+), 152 deletions(-) create mode 100755 scripts/build-plugin-zip.sh create mode 100644 src/application/adapters/plugin_user_lifecycle_hook.rs create mode 100644 src/application/dtos/plugin_dto.rs create mode 100644 src/infrastructure/services/plugins/manager_test.rs create mode 100755 tests/fixtures/plugins/omit_login.wasm create mode 100644 wasm/oxicloud-plugin-hello/plugin.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e3a9339..f584e87e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,6 +56,7 @@ jobs: - 'src/infrastructure/services/plugins/**' - 'src/application/ports/plugin_ports.rs' - 'src/application/adapters/plugin_lifecycle_hook.rs' + - 'src/application/adapters/plugin_user_lifecycle_hook.rs' frontend-check: name: Frontend — CSS and JS checks (format, lint, css-rules, types) diff --git a/.gitignore b/.gitignore index 9dc7a3d6..468d6c8f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ # Processed static assets (generated by build.rs in release mode) /static-dist/ +# Built plugin bundles (just plugin-example-zip) +/dist/ + # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html # Cargo.lock diff --git a/devenv.nix b/devenv.nix index fb5e4ee2..cf2ebd75 100644 --- a/devenv.nix +++ b/devenv.nix @@ -53,6 +53,14 @@ ''; }; + # Keep cargo's build output OUT of the repo. The devenv shell is entered via + # `use flake "path:$PWD"` (.envrc), and a `path:` flake copies the whole working + # tree into the Nix store WITHOUT honoring .gitignore — so a multi-GB `target/` + # makes every direnv evaluation hang "copying … to the store". Redirecting + # CARGO_TARGET_DIR under $HOME (per-user, so it stays portable) keeps the source + # tree small. `builtins.getEnv` is fine here: the flake is evaluated --impure. + env.CARGO_TARGET_DIR = "${builtins.getEnv "HOME"}/.cache/oxicloud/target"; + # Load .env (justfile uses `set dotenv-load`); contributor should `cp example.env .env`. dotenv.enable = true; diff --git a/justfile b/justfile index f223fea9..29f47595 100644 --- a/justfile +++ b/justfile @@ -75,6 +75,11 @@ test-plugins: plugin-build: bash scripts/build-plugin-hello.sh +# Build the example plugin and bundle plugin.toml + .wasm into an installable +# .zip at dist/oxicloud-plugin-hello.zip (upload via the admin Plugins tab). +plugin-example-zip: + bash scripts/build-plugin-zip.sh + # fmt + clippy the example plugin crate (standalone workspace, wasm32 target). plugin-check: cd wasm/oxicloud-plugin-hello; cargo fmt --all diff --git a/scripts/build-plugin-hello.sh b/scripts/build-plugin-hello.sh index 4e7212fd..737df488 100755 --- a/scripts/build-plugin-hello.sh +++ b/scripts/build-plugin-hello.sh @@ -17,6 +17,10 @@ cd "$(dirname "$0")/.." CRATE=wasm/oxicloud-plugin-hello OUT=tests/fixtures/plugins +# Pin the wasm build to the crate-local target dir. The devenv sets a global +# CARGO_TARGET_DIR (outside the repo) which would otherwise relocate the +# artifact away from the path below. +export CARGO_TARGET_DIR="$PWD/$CRATE/target" ARTIFACT="$CRATE/target/wasm32-unknown-unknown/release/oxicloud_plugin_hello.wasm" # Needs the wasm32-unknown-unknown target's std. In the devenv this comes from @@ -37,10 +41,11 @@ build() { } build hello -build panic --features panic -build sleep --features sleep -build net --features net -build wrong_abi --features wrong_abi +build panic --features panic +build sleep --features sleep +build net --features net +build wrong_abi --features wrong_abi +build omit_login --features omit_login echo "Built fixtures:" ls -la "$OUT"/*.wasm | awk '{print " " $9 " (" $5 " bytes)"}' diff --git a/scripts/build-plugin-zip.sh b/scripts/build-plugin-zip.sh new file mode 100755 index 00000000..f810e0f0 --- /dev/null +++ b/scripts/build-plugin-zip.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# Build the example plugin (wasm/oxicloud-plugin-hello) and bundle its +# plugin.toml + compiled .wasm into an installable .zip — the exact shape the +# admin "Install a plugin" upload (and POST /api/admin/plugins) expects. +# +# Output: dist/oxicloud-plugin-hello.zip (plugin.toml + hello.wasm at the root) +# +# Requirements: the wasm32-unknown-unknown target. The devenv provides it via +# `languages.rust.targets` in devenv.nix; otherwise: +# rustup target add wasm32-unknown-unknown + +set -euo pipefail +cd "$(dirname "$0")/.." + +CRATE=wasm/oxicloud-plugin-hello +# Pin the wasm build to the crate-local target dir. The devenv sets a global +# CARGO_TARGET_DIR (outside the repo) which would otherwise relocate the +# artifact away from the path below. +export CARGO_TARGET_DIR="$PWD/$CRATE/target" +ARTIFACT="$CRATE/target/wasm32-unknown-unknown/release/oxicloud_plugin_hello.wasm" +OUT_DIR=dist +OUT_ZIP="$OUT_DIR/oxicloud-plugin-hello.zip" +OUT_ZIP_ABS="$PWD/$OUT_ZIP" + +echo "building $CRATE on wasm32-unknown-unknown…" +cargo build \ + --manifest-path "$CRATE/Cargo.toml" \ + --target wasm32-unknown-unknown \ + --release + +# Stage plugin.toml + the module under the entrypoint name the manifest declares +# (entrypoint = "hello.wasm"), then zip the staging dir's contents at the root. +STAGE="$(mktemp -d)" +trap 'rm -rf "$STAGE"' EXIT +cp "$CRATE/plugin.toml" "$STAGE/plugin.toml" +cp "$ARTIFACT" "$STAGE/hello.wasm" + +mkdir -p "$OUT_DIR" +rm -f "$OUT_ZIP" +# `zip` isn't in the devenv toolchain; python3 is. `-c` creates an archive, +# storing the given paths. Run from the staging dir so entries are at the root. +( cd "$STAGE" && python3 -m zipfile -c "$OUT_ZIP_ABS" plugin.toml hello.wasm ) + +echo "bundled → $OUT_ZIP" +python3 -m zipfile -l "$OUT_ZIP" diff --git a/src/application/adapters/mod.rs b/src/application/adapters/mod.rs index 89a7dd00..60ec06b9 100644 --- a/src/application/adapters/mod.rs +++ b/src/application/adapters/mod.rs @@ -3,6 +3,7 @@ pub mod caldav_adapter; pub mod carddav_adapter; pub mod plugin_lifecycle_hook; +pub mod plugin_user_lifecycle_hook; pub mod webdav_adapter; #[cfg(test)] diff --git a/src/application/adapters/plugin_lifecycle_hook.rs b/src/application/adapters/plugin_lifecycle_hook.rs index 2892db56..072114bb 100644 --- a/src/application/adapters/plugin_lifecycle_hook.rs +++ b/src/application/adapters/plugin_lifecycle_hook.rs @@ -13,7 +13,7 @@ use uuid::Uuid; use crate::application::ports::file_lifecycle::FileLifecycleHook; use crate::application::ports::file_ports::FileRetrievalUseCase; use crate::application::ports::plugin_ports::{ - EVENT_FILE_UPLOADED, FileUploadedEvent, PluginDispatchPort, + EVENT_FILE_UPLOADED, PluginDispatchPort, PluginEvent, }; use crate::application::services::FileRetrievalService; @@ -59,12 +59,15 @@ impl PluginLifecycleHook { } }; - dispatch.dispatch_file_uploaded(FileUploadedEvent { - path: dto.path, - size: dto.size, - mime: dto.mime_type.to_string(), + dispatch.dispatch(PluginEvent { + name: EVENT_FILE_UPLOADED, user_id: dto.owner_id, invocation_id: Uuid::new_v4().to_string(), + payload: serde_json::json!({ + "path": dto.path, + "size": dto.size, + "mime": dto.mime_type.to_string(), + }), }); }); } diff --git a/src/application/adapters/plugin_user_lifecycle_hook.rs b/src/application/adapters/plugin_user_lifecycle_hook.rs new file mode 100644 index 00000000..0114539a --- /dev/null +++ b/src/application/adapters/plugin_user_lifecycle_hook.rs @@ -0,0 +1,160 @@ +//! Bridges the [`UserLifecycleHook`] fan-out to the plugin runtime. +//! +//! `UserLifecycleService` already notifies hooks on user create/login/logout/ +//! delete. This adapter turns the *login* event into a `user.login` plugin +//! event. It references only the [`PluginDispatchPort`] trait (not Extism), so +//! it is always compiled and the Extism dependency stays in the infrastructure +//! layer. +//! +//! Privacy note: the `user.login` payload includes the user's email — PII handed +//! to untrusted plugins with no permission gate in M0. This is acceptable only +//! because plugins are admin-installed today; when the permissions system lands, +//! sensitive payload fields should be gated behind a granted permission. + +use std::sync::Arc; + +use async_trait::async_trait; +use uuid::Uuid; + +use crate::application::ports::plugin_ports::{EVENT_USER_LOGIN, PluginDispatchPort, PluginEvent}; +use crate::application::ports::user_lifecycle::{DeletionMode, LogoutReason, UserLifecycleHook}; +use crate::common::errors::DomainError; +use crate::domain::entities::user::User; + +/// Lifecycle hook that forwards successful logins to subscribed plugins. +pub struct PluginUserLifecycleHook { + dispatch: Arc, +} + +impl PluginUserLifecycleHook { + pub fn new(dispatch: Arc) -> Self { + Self { dispatch } + } +} + +#[async_trait] +impl UserLifecycleHook for PluginUserLifecycleHook { + fn name(&self) -> &'static str { + "plugins" + } + + async fn on_user_login(&self, user: &User) -> Result<(), DomainError> { + if self.dispatch.has_subscribers(EVENT_USER_LOGIN) { + self.dispatch.dispatch(PluginEvent { + name: EVENT_USER_LOGIN, + user_id: Some(user.id().to_string()), + invocation_id: Uuid::new_v4().to_string(), + payload: serde_json::json!({ + "user_id": user.id().to_string(), + "username": user.username(), + "email": user.email(), + "first_login": user.last_login_at().is_none(), + "is_external": user.is_external(), + }), + }); + } + // Returns immediately — dispatch is fire-and-forget (the runtime runs the + // plugin on the blocking pool), so login latency is unaffected. + Ok(()) + } + + // M0 emits only `user.login`. The trait forces an explicit decision on the + // other three events; they are deliberate no-ops (reserved for future events + // like `user.created` / `user.deleted`). + async fn on_user_created(&self, _user: &User) -> Result<(), DomainError> { + Ok(()) + } + + async fn on_user_logout(&self, _user: &User, _reason: LogoutReason) -> Result<(), DomainError> { + Ok(()) + } + + async fn on_user_deleted( + &self, + _user: &User, + _mode: DeletionMode, + _tx: &mut sqlx::Transaction<'_, sqlx::Postgres>, + ) -> Result<(), DomainError> { + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use std::sync::Mutex; + + use super::*; + use crate::domain::entities::user::UserRole; + + /// Records dispatched events so the test can assert the bridge built the + /// right `user.login` event without a runtime or DB. + #[derive(Default)] + struct RecordingDispatch { + events: Mutex>, + } + + impl PluginDispatchPort for RecordingDispatch { + fn dispatch(&self, event: PluginEvent) { + self.events.lock().unwrap().push(event); + } + fn has_subscribers(&self, _event: &str) -> bool { + true + } + } + + #[tokio::test] + async fn on_user_login_dispatches_user_login_event() { + let recorder = Arc::new(RecordingDispatch::default()); + let hook = PluginUserLifecycleHook::new(recorder.clone()); + + let user = User::new( + "alice@example.com".to_string(), + Some("alice".to_string()), + None, + None, + None, + UserRole::User, + 0, + false, + ) + .unwrap(); + + hook.on_user_login(&user).await.unwrap(); + + let events = recorder.events.lock().unwrap(); + assert_eq!(events.len(), 1, "exactly one event dispatched"); + let ev = &events[0]; + assert_eq!(ev.name, EVENT_USER_LOGIN); + assert_eq!(ev.user_id.as_deref(), Some(user.id().to_string().as_str())); + assert_eq!(ev.payload["email"], "alice@example.com"); + assert_eq!(ev.payload["username"], "alice"); + assert_eq!(ev.payload["first_login"], true); // last_login_at is None + assert_eq!(ev.payload["is_external"], false); + } + + #[tokio::test] + async fn skips_dispatch_when_no_subscribers() { + struct NoSubscribers; + impl PluginDispatchPort for NoSubscribers { + fn dispatch(&self, _event: PluginEvent) { + panic!("must not dispatch when nothing subscribes"); + } + fn has_subscribers(&self, _event: &str) -> bool { + false + } + } + let hook = PluginUserLifecycleHook::new(Arc::new(NoSubscribers)); + let user = User::new( + "bob@example.com".to_string(), + None, + None, + None, + None, + UserRole::User, + 0, + false, + ) + .unwrap(); + hook.on_user_login(&user).await.unwrap(); + } +} diff --git a/src/application/dtos/mod.rs b/src/application/dtos/mod.rs index 68400c05..b19c940d 100644 --- a/src/application/dtos/mod.rs +++ b/src/application/dtos/mod.rs @@ -14,6 +14,7 @@ pub mod grant_dto; pub mod i18n_dto; pub mod pagination; pub mod playlist_dto; +pub mod plugin_dto; pub mod recent_dto; pub mod search_dto; pub mod settings_dto; diff --git a/src/application/dtos/plugin_dto.rs b/src/application/dtos/plugin_dto.rs new file mode 100644 index 00000000..7e687bb5 --- /dev/null +++ b/src/application/dtos/plugin_dto.rs @@ -0,0 +1,37 @@ +//! DTOs for the admin plugin-management API. + +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +use crate::application::ports::plugin_ports::PluginInfo; + +/// A single installed plugin as returned by `GET /api/admin/plugins`. +#[derive(Debug, Clone, Serialize, ToSchema)] +pub struct PluginInfoDto { + pub id: String, + pub name: String, + pub version: String, + pub abi: u32, + /// Events the plugin subscribes to (e.g. `file.uploaded`). + pub subscriptions: Vec, + pub enabled: bool, +} + +impl From for PluginInfoDto { + fn from(p: PluginInfo) -> Self { + Self { + id: p.id, + name: p.name, + version: p.version, + abi: p.abi, + subscriptions: p.subscriptions, + enabled: p.enabled, + } + } +} + +/// Request body for `PUT /api/admin/plugins/{id}/enabled`. +#[derive(Debug, Deserialize, ToSchema)] +pub struct SetEnabledDto { + pub enabled: bool, +} diff --git a/src/application/ports/plugin_ports.rs b/src/application/ports/plugin_ports.rs index 475fcdac..27505440 100644 --- a/src/application/ports/plugin_ports.rs +++ b/src/application/ports/plugin_ports.rs @@ -7,7 +7,9 @@ //! //! The ABI is intentionally tiny (see the M0 spec): //! - constant [`OXICLOUD_PLUGIN_ABI`] / namespace [`HOST_NAMESPACE`]; -//! - plugin exports `abi_version` + `handle`; +//! - plugin exports `abi_version` plus one handler per event it subscribes to, +//! named `on_` (see [`event_export_name`]) — e.g. `on_file_uploaded`, +//! `on_user_login`; //! - one host import `log` (observe-only — the only authority a plugin has). use serde::{Deserialize, Serialize}; @@ -21,33 +23,121 @@ pub const OXICLOUD_PLUGIN_ABI: u32 = 0; /// part of the import path so a future `v1` is a *different* symbol. pub const HOST_NAMESPACE: &str = "oxicloud:host:v0"; -/// The only event emitted in M0. +/// File committed (created or content-replaced). Payload is metadata only. pub const EVENT_FILE_UPLOADED: &str = "file.uploaded"; +/// A user authenticated successfully. +pub const EVENT_USER_LOGIN: &str = "user.login"; + +/// Every event the host can emit. Manifest validation accepts only these — a +/// `subscribe` entry outside this set rejects the plugin at load. Adding an +/// event is purely additive (no ABI bump): append its name here, build the +/// payload in a bridge, register that bridge in DI. +pub const KNOWN_EVENTS: &[&str] = &[EVENT_FILE_UPLOADED, EVENT_USER_LOGIN]; + +/// The plugin export the host calls for `event`: `on_` with dots replaced +/// by underscores (a WASM export must be a valid identifier). A plugin handles an +/// event by exporting this symbol; the host calls exactly the export matching the +/// dispatched event. `file.uploaded` → `on_file_uploaded`; `user.login` → +/// `on_user_login`. +pub fn event_export_name(event: &str) -> String { + format!("on_{}", event.replace('.', "_")) +} /// Outbound port: the application asks the (infrastructure) plugin runtime to /// dispatch an event to every subscribed plugin. Dispatch is fire-and-forget — /// the implementation owns all isolation, timeouts, and fault handling, and the -/// caller (a `FileLifecycleHook`) never awaits it. +/// caller (a lifecycle hook bridge) never awaits it. pub trait PluginDispatchPort: Send + Sync + 'static { - /// Dispatch a `file.uploaded` event (metadata only) to subscribed plugins. - fn dispatch_file_uploaded(&self, event: FileUploadedEvent); + /// Dispatch an event to every plugin subscribed to `event.name`. + fn dispatch(&self, event: PluginEvent); - /// Cheap predicate so the bridge hook can skip the metadata lookup entirely - /// when no plugin subscribes to `event`. + /// Cheap predicate so a bridge can skip building the payload entirely when + /// no plugin subscribes to `event`. fn has_subscribers(&self, event: &str) -> bool; } -/// Metadata describing a freshly committed file. Carries **no file contents** — -/// only path, size, and MIME (privacy goal). +/// Inbound port: admin management of installed plugins (list / toggle / install +/// / remove). The concrete implementation (the infrastructure +/// `ExtismPluginManager`) owns the same in-memory plugin set the dispatch port +/// reads, so a toggle or install takes effect on the live dispatch path with no +/// restart. All operations are admin-gated at the HTTP layer. +pub trait PluginManagementPort: Send + Sync + 'static { + /// Every installed plugin, enabled or not, with its load-time metadata. + fn list(&self) -> Vec; + + /// Enable or disable a plugin by id. The change is persisted so it survives + /// a restart, and is reflected immediately by [`PluginDispatchPort`]. + fn set_enabled(&self, id: &str, enabled: bool) -> Result<(), PluginMgmtError>; + + /// Validate and install a new plugin from its `plugin.toml` text and `.wasm` + /// bytes, writing it to the plugins directory and loading it (enabled). The + /// id is taken from the manifest; a clash with an existing plugin is + /// rejected with [`PluginMgmtError::IdExists`]. + fn install(&self, manifest_toml: &str, wasm: Vec) -> Result; + + /// Install a plugin from a `.zip` bundle containing `plugin.toml` and the + /// `.wasm` named by its `entrypoint` (both at the archive root or together + /// under a single top-level folder). Extracts the two and delegates to + /// [`PluginManagementPort::install`]. + fn install_bundle(&self, zip: Vec) -> Result; + + /// Unload a plugin and delete its directory. + fn remove(&self, id: &str) -> Result<(), PluginMgmtError>; +} + +/// A single installed plugin's load-time metadata, as surfaced to the admin UI. #[derive(Debug, Clone)] -pub struct FileUploadedEvent { - pub path: String, - pub size: u64, - pub mime: String, - /// Opaque owner id of the file, when known. +pub struct PluginInfo { + pub id: String, + pub name: String, + pub version: String, + pub abi: u32, + pub subscriptions: Vec, + pub enabled: bool, +} + +/// Why a management operation failed. `reason()` yields the stable, machine +/// readable key used in audit logs and surfaced to the UI. +#[derive(Debug)] +pub enum PluginMgmtError { + /// No plugin with that id is installed. + NotFound, + /// An install was attempted for an id that already exists. + IdExists, + /// The bundle failed manifest or runtime validation. Carries the stable + /// reason key from `ManifestError::reason()` / `InvokeOutcome::reason()`, + /// plus a few install-only keys (`bad_id`, `bad_entrypoint`, `bad_zip`, + /// `no_manifest_in_zip`, `entrypoint_not_in_zip`). + Rejected(&'static str), + /// A filesystem error while writing or removing the plugin. + Io(String), +} + +impl PluginMgmtError { + /// Stable key for `tracing` audit lines; never reworded across releases. + pub fn reason(&self) -> &'static str { + match self { + PluginMgmtError::NotFound => "not_found", + PluginMgmtError::IdExists => "id_exists", + PluginMgmtError::Rejected(r) => r, + PluginMgmtError::Io(_) => "io_error", + } + } +} + +/// A single event to fan out to plugins. The `payload` JSON shape is specific to +/// each `name` and is built by that event's bridge — the runtime is event-blind +/// and never inspects it. Payloads carry metadata only, never file contents. +#[derive(Debug, Clone)] +pub struct PluginEvent { + /// One of [`KNOWN_EVENTS`]. + pub name: &'static str, + /// Opaque id of the user the event concerns, when known. pub user_id: Option, /// Unique id minted per dispatch, correlating host logs with plugin output. pub invocation_id: String, + /// Event-specific payload handed to the plugin as `PluginInput.payload`. + pub payload: serde_json::Value, } // ---- Wire DTOs (ABI v0 JSON shapes, §3.4 of the spec) ---------------------- diff --git a/src/common/di.rs b/src/common/di.rs index 259a8158..1898e811 100644 --- a/src/common/di.rs +++ b/src/common/di.rs @@ -442,6 +442,7 @@ impl AppServiceFactory { } /// Initializes the application services + #[allow(clippy::too_many_arguments)] // DI composition root — params are services, not a smell pub fn create_application_services( &self, core: &CoreServices, @@ -450,6 +451,9 @@ impl AppServiceFactory { authz: &Arc, storage_usage: &Arc, content_index: Option>, + plugin_dispatch: Option< + Arc, + >, ) -> ApplicationServices { // Main services let folder_service = Arc::new(FolderService::new( @@ -470,7 +474,8 @@ impl AppServiceFactory { // Effective lifecycle dispatcher: the core hooks (thumbnails, metadata) // plus, when the plugins feature is enabled, the WASM plugin bridge. - let file_lifecycle = self.effective_file_lifecycle(core, &file_retrieval_service); + let file_lifecycle = + self.effective_file_lifecycle(core, &file_retrieval_service, plugin_dispatch); let file_upload_service = Arc::new( FileUploadService::new_with_read( @@ -559,22 +564,20 @@ impl AppServiceFactory { /// Builds the file lifecycle dispatcher handed to the upload/management /// services. By default this is just the core dispatcher (thumbnails, - /// metadata). When the `plugins` feature is built and enabled, it wraps the - /// core dispatcher together with the WASM plugin bridge so plugins observe - /// `file.uploaded` events without any of the core hooks being aware of them. + /// metadata). When a plugin dispatch is present, it wraps the core dispatcher + /// together with the WASM plugin bridge so plugins observe `file.uploaded` + /// events without any of the core hooks being aware of them. fn effective_file_lifecycle( &self, core: &CoreServices, file_retrieval: &Arc, + plugin_dispatch: Option< + Arc, + >, ) -> Arc { - #[cfg(feature = "plugins")] - if self.config.plugins.enabled - && let Some(manager) = self.create_plugin_manager() - { + if let Some(dispatch) = plugin_dispatch { use crate::application::adapters::plugin_lifecycle_hook::PluginLifecycleHook; - use crate::application::ports::plugin_ports::PluginDispatchPort; - let dispatch: Arc = manager; let bridge = Arc::new(PluginLifecycleHook::new(dispatch, file_retrieval.clone())); let composite = FileLifecycleService::new() .with_hook(core.file_lifecycle.clone()) @@ -582,37 +585,54 @@ impl AppServiceFactory { return Arc::new(composite); } - let _ = file_retrieval; core.file_lifecycle.clone() } - /// Discovers and loads WASM plugins when the `plugins` feature is enabled and - /// `OXICLOUD_ENABLE_PLUGINS=true`. Plugins live under - /// `OXICLOUD_PLUGINS_DIR` (default `{storage_path}/.plugins`); a missing or - /// empty directory simply yields no plugins. - #[cfg(feature = "plugins")] - fn create_plugin_manager( + /// The single plugin manager, exposed as the two ports it serves: the + /// dispatch port (shared by every event bridge — file, user, …) and the + /// management port (stored on `AppState` for the admin API). Both wrap the + /// *same* `Arc`, so an install or toggle through the management port takes + /// effect on the live dispatch path with no restart. + /// + /// Returns trait objects so call sites stay feature-agnostic; the + /// `#[cfg(feature = "plugins")]` is confined to this body. Both are `None` + /// when the feature is off or `OXICLOUD_ENABLE_PLUGINS` is false. + #[allow(clippy::type_complexity)] + fn create_plugin_ports( &self, - ) -> Option> { - if !self.config.plugins.enabled { - return None; + ) -> ( + Option>, + Option>, + ) { + #[cfg(feature = "plugins")] + { + if self.config.plugins.enabled { + let dir = self + .config + .plugins + .plugins_dir + .clone() + .unwrap_or_else(|| self.config.storage_path.join(".plugins")); + let manager = Arc::new( + crate::infrastructure::services::plugins::ExtismPluginManager::load_from_dir( + self.config.plugins.clone(), + &dir, + ), + ); + tracing::info!( + target: "oxicloud::plugins", + loaded = manager.loaded_count(), + "plugin manager initialized" + ); + let dispatch: Arc = + manager.clone(); + let management: Arc< + dyn crate::application::ports::plugin_ports::PluginManagementPort, + > = manager; + return (Some(dispatch), Some(management)); + } } - let dir = self - .config - .plugins - .plugins_dir - .clone() - .unwrap_or_else(|| self.config.storage_path.join(".plugins")); - let manager = crate::infrastructure::services::plugins::ExtismPluginManager::load_from_dir( - self.config.plugins.clone(), - &dir, - ); - tracing::info!( - target: "oxicloud::plugins", - loaded = manager.loaded_count(), - "plugin manager initialized" - ); - Some(Arc::new(manager)) + (None, None) } /// Creates the audio metadata service (extracts ID3 tags from audio files) @@ -916,6 +936,13 @@ impl AppServiceFactory { // worker starts further down with the maintenance pool. let content_index = self.create_content_index(); + // Single plugin manager, surfaced as its two ports: the dispatch port + // (shared by every event bridge — file uploads here, user logins at the + // auth-services wiring below) and the management port (stored on + // AppState for the admin API). Created once so plugins load exactly once + // regardless of how many events they observe. + let (plugin_dispatch, plugin_management) = self.create_plugin_ports(); + // 4. Application services (with trash + authz already wired) let mut apps = self.create_application_services( &core, @@ -924,6 +951,7 @@ impl AppServiceFactory { &authorization, &storage_usage, content_index.as_ref().map(|(idx, _)| idx.clone()), + plugin_dispatch.clone(), ); // 5. Share service @@ -1013,7 +1041,7 @@ impl AppServiceFactory { pool.clone(), ), ); - let user_lifecycle = Arc::new( + let mut user_lifecycle_builder = crate::application::services::user_lifecycle_service::UserLifecycleService::new() .with_hook(Arc::new( crate::application::services::user_lifecycle_service::AuditLifecycleHook, @@ -1036,8 +1064,20 @@ impl AppServiceFactory { .with_hook(Arc::new( crate::application::services::external_identity_service::ExternalIdentityLifecycleHook::new() .with_magic_link_repo(magic_link_repo.clone()), - )), - ); + )); + + // Plugin user.login bridge — shares the single plugin dispatch with + // the file-upload bridge. Registered only when plugins are active; + // inert until auth is enabled (the dispatcher is never fired otherwise). + if let Some(dispatch) = &plugin_dispatch { + user_lifecycle_builder = user_lifecycle_builder.with_hook(Arc::new( + crate::application::adapters::plugin_user_lifecycle_hook::PluginUserLifecycleHook::new( + dispatch.clone(), + ), + )); + } + + let user_lifecycle = Arc::new(user_lifecycle_builder); // Auth services. Folder service no longer threaded here — // PR 3 moved home-folder provisioning into @@ -1171,6 +1211,7 @@ impl AppServiceFactory { nextcloud: nextcloud_services, admin_settings_service: None, storage_settings_service: None, + plugin_management, migration_state: Arc::new(tokio::sync::RwLock::new(MigrationState::default())), trash_service, share_service, @@ -1611,6 +1652,11 @@ pub struct AppState { pub auth_service: Option, pub nextcloud: Option, pub admin_settings_service: Option>, + /// WASM plugin management (list/install/toggle/remove), backing the admin + /// Plugins tab. `None` when the `plugins` feature is compiled out or + /// `OXICLOUD_ENABLE_PLUGINS` is false — the admin endpoints return 503 then. + pub plugin_management: + Option>, pub storage_settings_service: Option>, pub migration_state: Arc>, pub trash_service: Option>, diff --git a/src/infrastructure/services/plugins/manager.rs b/src/infrastructure/services/plugins/manager.rs index 4d6e9118..9cdf9128 100644 --- a/src/infrastructure/services/plugins/manager.rs +++ b/src/infrastructure/services/plugins/manager.rs @@ -1,37 +1,72 @@ -//! Plugin discovery + dispatch. Implements [`PluginDispatchPort`] over the -//! Extism [`PluginRuntime`]. +//! Plugin discovery + dispatch + admin management. Implements +//! [`PluginDispatchPort`] and [`PluginManagementPort`] over the Extism +//! [`PluginRuntime`]. //! //! Discovery scans a directory of plugin subdirectories (each `plugin.toml` + //! `.wasm`) at startup; a plugin that fails validation or load is audit-logged //! and skipped, never fatal. Dispatch builds a fresh sandbox per invocation on //! the blocking pool, so a slow or hostile plugin never stalls async workers or //! the upload path that triggered it. +//! +//! The same in-memory plugin set backs both ports, guarded by an `RwLock`: a +//! management op (install / toggle / remove) takes the write lock and is +//! reflected on the live dispatch path with no restart. Enable/disable state is +//! persisted as a `.disabled` marker file in the plugin's own directory so it +//! survives a restart without a database. use std::collections::HashSet; -use std::path::Path; -use std::sync::Arc; - -use serde_json::json; +use std::path::{Path, PathBuf}; +use std::sync::{Arc, RwLock}; use super::manifest; use super::runtime::{InvokeOutcome, PluginRuntime}; use crate::application::ports::plugin_ports::{ - EVENT_FILE_UPLOADED, FileUploadedEvent, OXICLOUD_PLUGIN_ABI, PluginContext, PluginDispatchPort, - PluginInput, + OXICLOUD_PLUGIN_ABI, PluginContext, PluginDispatchPort, PluginEvent, PluginInfo, PluginInput, + PluginManagementPort, PluginMgmtError, event_export_name, }; use crate::common::config::PluginConfig; +/// Name of the marker file that, when present in a plugin's directory, loads it +/// disabled. Created/removed by [`PluginManagementPort::set_enabled`]. +const DISABLED_MARKER: &str = ".disabled"; + /// A validated, loadable plugin held in memory. struct LoadedPlugin { id: String, + name: String, + version: String, + abi: u32, subscribe: HashSet, + /// Whether dispatch delivers events to this plugin. Mirrors the on-disk + /// `.disabled` marker. + enabled: bool, + /// The plugin's own directory (not necessarily named after `id`). Used to + /// write the disabled marker and to delete the plugin on removal. + dir: PathBuf, runtime: Arc, } +impl LoadedPlugin { + fn info(&self) -> PluginInfo { + let mut subscriptions: Vec = self.subscribe.iter().cloned().collect(); + subscriptions.sort(); + PluginInfo { + id: self.id.clone(), + name: self.name.clone(), + version: self.version.clone(), + abi: self.abi, + subscriptions, + enabled: self.enabled, + } + } +} + /// Owns all loaded plugins and dispatches events to them. pub struct ExtismPluginManager { config: PluginConfig, - plugins: Vec, + /// Root directory plugins are discovered in and installed into. + root_dir: PathBuf, + plugins: RwLock>, } impl ExtismPluginManager { @@ -51,7 +86,11 @@ impl ExtismPluginManager { error = %e, "plugins directory not readable; no plugins loaded" ); - return Self { config, plugins }; + return Self { + config, + root_dir: dir.to_path_buf(), + plugins: RwLock::new(plugins), + }; } }; @@ -65,6 +104,7 @@ impl ExtismPluginManager { tracing::info!( target: "oxicloud::plugins", plugin_id = %loaded.id, + enabled = loaded.enabled, dir = %path.display(), "plugin loaded" ); @@ -90,7 +130,11 @@ impl ExtismPluginManager { dir = %dir.display(), "plugin discovery complete" ); - Self { config, plugins } + Self { + config, + root_dir: dir.to_path_buf(), + plugins: RwLock::new(plugins), + } } /// Validate and load a single plugin directory. Returns a stable audit @@ -108,47 +152,73 @@ impl ExtismPluginManager { let wasm_bytes = std::fs::read(&wasm_path).map_err(|_| "wasm_unreadable")?; let runtime = PluginRuntime::new(manifest.plugin.id.clone(), wasm_bytes); - // Probe abi_version on a throwaway instance; rejects lying/unloadable wasm. - match runtime.check_loadable(config) { - InvokeOutcome::Ok => {} - InvokeOutcome::AbiMismatch { .. } => return Err("abi_mismatch"), - _ => return Err("not_loadable"), - } + // Probe a throwaway instance: abi must match AND every subscribed event + // must have its `on_` handler exported. + let required_exports: Vec = manifest + .events + .subscribe + .iter() + .map(|e| event_export_name(e)) + .collect(); + Self::probe(config, &runtime, &required_exports)?; Ok(LoadedPlugin { id: manifest.plugin.id, + name: manifest.plugin.name, + version: manifest.plugin.version, + abi: manifest.plugin.abi, subscribe: manifest.events.subscribe.into_iter().collect(), + enabled: !dir.join(DISABLED_MARKER).exists(), + dir: dir.to_path_buf(), runtime: Arc::new(runtime), }) } + /// Probe loadability, mapping the runtime outcome to a stable reason key. + fn probe( + config: &PluginConfig, + runtime: &PluginRuntime, + required_exports: &[String], + ) -> Result<(), &'static str> { + match runtime.check_loadable(config, required_exports) { + InvokeOutcome::Ok => Ok(()), + InvokeOutcome::AbiMismatch { .. } => Err("abi_mismatch"), + InvokeOutcome::MissingExport(_) => Err("missing_export"), + _ => Err("not_loadable"), + } + } + /// Number of successfully loaded plugins (used by DI for the startup summary /// and by tests). pub fn loaded_count(&self) -> usize { - self.plugins.len() + self.read_plugins().len() + } + + fn read_plugins(&self) -> std::sync::RwLockReadGuard<'_, Vec> { + self.plugins.read().unwrap_or_else(|e| e.into_inner()) + } + + fn write_plugins(&self) -> std::sync::RwLockWriteGuard<'_, Vec> { + self.plugins.write().unwrap_or_else(|e| e.into_inner()) } } impl PluginDispatchPort for ExtismPluginManager { - fn dispatch_file_uploaded(&self, event: FileUploadedEvent) { - for plugin in &self.plugins { - if !plugin.subscribe.contains(EVENT_FILE_UPLOADED) { + fn dispatch(&self, event: PluginEvent) { + for plugin in self.read_plugins().iter() { + if !plugin.enabled || !plugin.subscribe.contains(event.name) { continue; } let input = PluginInput { abi: OXICLOUD_PLUGIN_ABI, - event: EVENT_FILE_UPLOADED.to_string(), + event: event.name.to_string(), context: PluginContext { plugin_id: plugin.id.clone(), user_id: event.user_id.clone(), invocation_id: event.invocation_id.clone(), }, - payload: json!({ - "path": event.path, - "size": event.size, - "mime": event.mime, - }), + payload: event.payload.clone(), }; let input_json = match serde_json::to_string(&input) { Ok(j) => j, @@ -167,11 +237,12 @@ impl PluginDispatchPort for ExtismPluginManager { let config = self.config.clone(); let plugin_id = plugin.id.clone(); let invocation_id = event.invocation_id.clone(); + let export = event_export_name(event.name); // Run the synchronous wasm call off the async workers. Fire-and-forget: // the upload already succeeded; plugins are post-hoc observers. tokio::task::spawn_blocking(move || { - let result = runtime.invoke(&config, &invocation_id, &input_json); + let result = runtime.invoke(&config, &export, &invocation_id, &input_json); if !result.outcome.is_ok() { tracing::warn!( target: "audit", @@ -188,6 +259,172 @@ impl PluginDispatchPort for ExtismPluginManager { } fn has_subscribers(&self, event: &str) -> bool { - self.plugins.iter().any(|p| p.subscribe.contains(event)) + self.read_plugins() + .iter() + .any(|p| p.enabled && p.subscribe.contains(event)) } } + +impl PluginManagementPort for ExtismPluginManager { + fn list(&self) -> Vec { + let mut infos: Vec = self.read_plugins().iter().map(|p| p.info()).collect(); + infos.sort_by(|a, b| a.id.cmp(&b.id)); + infos + } + + fn set_enabled(&self, id: &str, enabled: bool) -> Result<(), PluginMgmtError> { + let mut plugins = self.write_plugins(); + let plugin = plugins + .iter_mut() + .find(|p| p.id == id) + .ok_or(PluginMgmtError::NotFound)?; + + let marker = plugin.dir.join(DISABLED_MARKER); + if enabled { + match std::fs::remove_file(&marker) { + Ok(()) => {} + Err(e) if e.kind() == std::io::ErrorKind::NotFound => {} + Err(e) => return Err(PluginMgmtError::Io(e.to_string())), + } + } else { + std::fs::write(&marker, b"").map_err(|e| PluginMgmtError::Io(e.to_string()))?; + } + plugin.enabled = enabled; + Ok(()) + } + + fn install(&self, manifest_toml: &str, wasm: Vec) -> Result { + // Validate the manifest and the wasm before touching the filesystem. + let manifest = manifest::parse_and_validate(manifest_toml) + .map_err(|e| PluginMgmtError::Rejected(e.reason()))?; + + // `id` becomes a directory name and `entrypoint` a filename — both must + // be single, traversal-free path components. + if !is_safe_component(&manifest.plugin.id) { + return Err(PluginMgmtError::Rejected("bad_id")); + } + if !is_safe_component(&manifest.plugin.entrypoint) { + return Err(PluginMgmtError::Rejected("bad_entrypoint")); + } + + let required_exports: Vec = manifest + .events + .subscribe + .iter() + .map(|e| event_export_name(e)) + .collect(); + let runtime = PluginRuntime::new(manifest.plugin.id.clone(), wasm.clone()); + Self::probe(&self.config, &runtime, &required_exports) + .map_err(PluginMgmtError::Rejected)?; + + let id = manifest.plugin.id.clone(); + let target = self.root_dir.join(&id); + + // Hold the write lock across the collision check and the directory swap + // so two concurrent installs of the same id cannot race. Admin installs + // are rare; readers block only briefly. + let mut plugins = self.write_plugins(); + if plugins.iter().any(|p| p.id == id) || target.exists() { + return Err(PluginMgmtError::IdExists); + } + + std::fs::create_dir_all(&self.root_dir).map_err(|e| PluginMgmtError::Io(e.to_string()))?; + // Write to a temp dir then rename, so a crash mid-write never leaves a + // half-written plugin discoverable. + let tmp = tempfile::Builder::new() + .prefix(".tmp-install-") + .tempdir_in(&self.root_dir) + .map_err(|e| PluginMgmtError::Io(e.to_string()))?; + std::fs::write(tmp.path().join("plugin.toml"), manifest_toml) + .map_err(|e| PluginMgmtError::Io(e.to_string()))?; + std::fs::write(tmp.path().join(&manifest.plugin.entrypoint), &wasm) + .map_err(|e| PluginMgmtError::Io(e.to_string()))?; + let tmp_path = tmp.keep(); + if let Err(e) = std::fs::rename(&tmp_path, &target) { + let _ = std::fs::remove_dir_all(&tmp_path); + return Err(PluginMgmtError::Io(e.to_string())); + } + + let loaded = LoadedPlugin { + id: id.clone(), + name: manifest.plugin.name.clone(), + version: manifest.plugin.version.clone(), + abi: manifest.plugin.abi, + subscribe: manifest.events.subscribe.iter().cloned().collect(), + enabled: true, + dir: target, + runtime: Arc::new(runtime), + }; + let info = loaded.info(); + plugins.push(loaded); + Ok(info) + } + + fn install_bundle(&self, zip: Vec) -> Result { + use std::io::{Cursor, Read}; + + let mut archive = zip::ZipArchive::new(Cursor::new(zip)) + .map_err(|_| PluginMgmtError::Rejected("bad_zip"))?; + + // Locate `plugin.toml` — at the archive root or under a single wrapping + // folder (e.g. `myplugin/plugin.toml`). + let manifest_name = archive + .file_names() + .find(|n| !n.ends_with('/') && (*n == "plugin.toml" || n.ends_with("/plugin.toml"))) + .map(str::to_owned) + .ok_or(PluginMgmtError::Rejected("no_manifest_in_zip"))?; + + let mut manifest_toml = String::new(); + archive + .by_name(&manifest_name) + .map_err(|_| PluginMgmtError::Rejected("no_manifest_in_zip"))? + .read_to_string(&mut manifest_toml) + .map_err(|_| PluginMgmtError::Rejected("bad_zip"))?; + + // Parse just to learn the entrypoint name; `install` does the full + // validation (and rejects a traversal-unsafe entrypoint). + let manifest = manifest::parse_and_validate(&manifest_toml) + .map_err(|e| PluginMgmtError::Rejected(e.reason()))?; + + // Resolve the entrypoint relative to the manifest's folder in the zip. + let prefix = match manifest_name.rfind('/') { + Some(i) => &manifest_name[..=i], + None => "", + }; + let wasm_name = format!("{prefix}{}", manifest.plugin.entrypoint); + + let mut wasm = Vec::new(); + archive + .by_name(&wasm_name) + .map_err(|_| PluginMgmtError::Rejected("entrypoint_not_in_zip"))? + .read_to_end(&mut wasm) + .map_err(|_| PluginMgmtError::Rejected("bad_zip"))?; + + self.install(&manifest_toml, wasm) + } + + fn remove(&self, id: &str) -> Result<(), PluginMgmtError> { + let mut plugins = self.write_plugins(); + let pos = plugins + .iter() + .position(|p| p.id == id) + .ok_or(PluginMgmtError::NotFound)?; + let removed = plugins.remove(pos); + match std::fs::remove_dir_all(&removed.dir) { + Ok(()) => Ok(()), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(()), + Err(e) => Err(PluginMgmtError::Io(e.to_string())), + } + } +} + +/// Whether `s` is a single, traversal-free path component safe to use as a +/// directory or file name under the plugins root. +fn is_safe_component(s: &str) -> bool { + !s.is_empty() + && s != "." + && s != ".." + && !s.contains('/') + && !s.contains('\\') + && !s.contains('\0') +} diff --git a/src/infrastructure/services/plugins/manager_test.rs b/src/infrastructure/services/plugins/manager_test.rs new file mode 100644 index 00000000..ab351cf5 --- /dev/null +++ b/src/infrastructure/services/plugins/manager_test.rs @@ -0,0 +1,248 @@ +//! Manager-level tests for the admin management surface (install / toggle / +//! remove) and disabled-state persistence. These drive a real Extism sandbox, +//! so they run only under `cargo test --features plugins`. +//! +//! The `.wasm` fixtures are the same ones the runtime tests use, built by +//! `scripts/build-plugin-hello.sh`. + +use super::ExtismPluginManager; +use crate::application::ports::plugin_ports::{PluginDispatchPort, PluginManagementPort}; +use crate::common::config::PluginConfig; + +fn cfg() -> PluginConfig { + PluginConfig::default() +} + +fn fixture(name: &str) -> Vec { + let path = format!( + "{}/tests/fixtures/plugins/{}", + env!("CARGO_MANIFEST_DIR"), + name + ); + std::fs::read(&path).unwrap_or_else(|e| { + panic!("missing fixture {path}: {e}\n run scripts/build-plugin-hello.sh to (re)build it") + }) +} + +/// A valid manifest for the `hello.wasm` fixture (subscribes to both events). +fn hello_manifest() -> String { + r#" +[plugin] +id = "com.example.hello" +name = "Hello" +version = "0.1.0" +abi = 0 +entrypoint = "hello.wasm" + +[events] +subscribe = ["file.uploaded", "user.login"] +"# + .to_string() +} + +/// A manifest that parses fine but points at the `wrong_abi.wasm` fixture, +/// which reports ABI 1 at runtime. +fn wrong_abi_manifest() -> String { + r#" +[plugin] +id = "com.example.wrongabi" +name = "Wrong ABI" +version = "0.1.0" +abi = 0 +entrypoint = "wrong_abi.wasm" + +[events] +subscribe = ["file.uploaded"] +"# + .to_string() +} + +#[test] +fn install_loads_plugin_and_writes_files() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + assert_eq!(mgr.loaded_count(), 0); + + let info = mgr + .install(&hello_manifest(), fixture("hello.wasm")) + .expect("install should succeed"); + + assert_eq!(info.id, "com.example.hello"); + assert_eq!(info.name, "Hello"); + assert!(info.enabled); + assert_eq!(info.subscriptions, vec!["file.uploaded", "user.login"]); + assert_eq!(mgr.loaded_count(), 1); + + let plugin_dir = tmp.path().join("com.example.hello"); + assert!(plugin_dir.join("plugin.toml").exists()); + assert!(plugin_dir.join("hello.wasm").exists()); + + // The live dispatch path sees it immediately. + assert!(mgr.has_subscribers("file.uploaded")); +} + +/// Build an in-memory `.zip` with the given entries (name, bytes). +fn make_zip(entries: &[(&str, &[u8])]) -> Vec { + use std::io::Write; + use zip::write::SimpleFileOptions; + let mut writer = zip::ZipWriter::new(std::io::Cursor::new(Vec::new())); + for (name, bytes) in entries { + writer + .start_file(*name, SimpleFileOptions::default()) + .unwrap(); + writer.write_all(bytes).unwrap(); + } + writer.finish().unwrap().into_inner() +} + +#[test] +fn install_bundle_from_zip_loads_plugin() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + + // Wrap everything under a top-level folder to exercise prefix resolution. + let zip = make_zip(&[ + ("hello/plugin.toml", hello_manifest().as_bytes()), + ("hello/hello.wasm", &fixture("hello.wasm")), + ]); + + let info = mgr + .install_bundle(zip) + .expect("bundle install should succeed"); + assert_eq!(info.id, "com.example.hello"); + assert!(info.enabled); + assert_eq!(mgr.loaded_count(), 1); + assert!( + tmp.path() + .join("com.example.hello") + .join("hello.wasm") + .exists() + ); +} + +#[test] +fn install_bundle_without_manifest_is_rejected() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + + let zip = make_zip(&[("hello.wasm", &fixture("hello.wasm"))]); + let err = mgr + .install_bundle(zip) + .expect_err("a zip without plugin.toml must be rejected"); + assert_eq!(err.reason(), "no_manifest_in_zip"); + assert_eq!(mgr.loaded_count(), 0); +} + +#[test] +fn install_bundle_missing_entrypoint_is_rejected() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + + // Manifest declares entrypoint = "hello.wasm", but the zip omits it. + let zip = make_zip(&[("plugin.toml", hello_manifest().as_bytes())]); + let err = mgr + .install_bundle(zip) + .expect_err("a zip missing the entrypoint wasm must be rejected"); + assert_eq!(err.reason(), "entrypoint_not_in_zip"); + assert_eq!(mgr.loaded_count(), 0); +} + +#[test] +fn install_bundle_with_garbage_is_rejected() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + let err = mgr + .install_bundle(b"not a zip file".to_vec()) + .expect_err("non-zip bytes must be rejected"); + assert_eq!(err.reason(), "bad_zip"); +} + +#[test] +fn install_duplicate_id_is_rejected() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + mgr.install(&hello_manifest(), fixture("hello.wasm")) + .unwrap(); + + let err = mgr + .install(&hello_manifest(), fixture("hello.wasm")) + .expect_err("second install of the same id must fail"); + assert_eq!(err.reason(), "id_exists"); + assert_eq!(mgr.loaded_count(), 1); +} + +#[test] +fn install_wrong_abi_is_rejected() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + + let err = mgr + .install(&wrong_abi_manifest(), fixture("wrong_abi.wasm")) + .expect_err("a plugin reporting the wrong ABI must be rejected"); + assert_eq!(err.reason(), "abi_mismatch"); + assert_eq!(mgr.loaded_count(), 0); + // Nothing should have been written to disk. + assert!(!tmp.path().join("com.example.wrongabi").exists()); +} + +#[test] +fn disable_stops_dispatch_and_persists_across_reload() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + mgr.install(&hello_manifest(), fixture("hello.wasm")) + .unwrap(); + assert!(mgr.has_subscribers("file.uploaded")); + + mgr.set_enabled("com.example.hello", false).unwrap(); + assert!(!mgr.has_subscribers("file.uploaded")); + assert!( + tmp.path() + .join("com.example.hello") + .join(".disabled") + .exists() + ); + + // A fresh manager re-reads the marker and loads it disabled. + drop(mgr); + let reloaded = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + assert_eq!(reloaded.loaded_count(), 1); + let info = reloaded.list(); + assert_eq!(info.len(), 1); + assert!(!info[0].enabled); + assert!(!reloaded.has_subscribers("file.uploaded")); + + // Re-enabling removes the marker. + reloaded.set_enabled("com.example.hello", true).unwrap(); + assert!(reloaded.has_subscribers("file.uploaded")); + assert!( + !tmp.path() + .join("com.example.hello") + .join(".disabled") + .exists() + ); +} + +#[test] +fn set_enabled_unknown_id_is_not_found() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + let err = mgr.set_enabled("does.not.exist", false).unwrap_err(); + assert_eq!(err.reason(), "not_found"); +} + +#[test] +fn remove_unloads_and_deletes_directory() { + let tmp = tempfile::tempdir().unwrap(); + let mgr = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + mgr.install(&hello_manifest(), fixture("hello.wasm")) + .unwrap(); + let plugin_dir = tmp.path().join("com.example.hello"); + assert!(plugin_dir.exists()); + + mgr.remove("com.example.hello").unwrap(); + assert_eq!(mgr.loaded_count(), 0); + assert!(!plugin_dir.exists()); + + let err = mgr.remove("com.example.hello").unwrap_err(); + assert_eq!(err.reason(), "not_found"); +} diff --git a/src/infrastructure/services/plugins/manifest.rs b/src/infrastructure/services/plugins/manifest.rs index 9f4b4456..bb35f601 100644 --- a/src/infrastructure/services/plugins/manifest.rs +++ b/src/infrastructure/services/plugins/manifest.rs @@ -7,7 +7,7 @@ use std::collections::BTreeMap; -use crate::application::ports::plugin_ports::{EVENT_FILE_UPLOADED, OXICLOUD_PLUGIN_ABI}; +use crate::application::ports::plugin_ports::{KNOWN_EVENTS, OXICLOUD_PLUGIN_ABI}; /// Parsed `plugin.toml`. `#[serde(deny_unknown_fields)]` on every struct turns /// stray keys into load errors rather than silently ignored config. @@ -90,7 +90,7 @@ pub fn parse_and_validate(toml_str: &str) -> Result` export in the module. + MissingExport(String), + /// The event handler returned bytes that are not a valid `PluginOutput`. MalformedOutput(String), /// The serialized input exceeded the configured cap; nothing was invoked. MalformedInput { size: usize, max: usize }, @@ -78,6 +80,7 @@ impl InvokeOutcome { InvokeOutcome::Timeout => "timeout", InvokeOutcome::LoadError(_) => "load_error", InvokeOutcome::AbiMismatch { .. } => "abi_mismatch", + InvokeOutcome::MissingExport(_) => "missing_export", InvokeOutcome::MalformedOutput(_) => "malformed_output", InvokeOutcome::MalformedInput { .. } => "malformed_input", } @@ -126,25 +129,35 @@ impl PluginRuntime { .build() } - /// Probe `abi_version` on a throwaway instance. Used at load time so a lying - /// or unloadable plugin is rejected before it is ever registered. - pub fn check_loadable(&self, cfg: &PluginConfig) -> InvokeOutcome { + /// Probe a throwaway instance at load time: check `abi_version`, then verify + /// every `required_export` (the `on_` symbol for each subscribed + /// event) actually exists in the module. Rejects lying, unloadable, or + /// incompletely-implemented plugins before they are ever registered. + pub fn check_loadable(&self, cfg: &PluginConfig, required_exports: &[String]) -> InvokeOutcome { let logs = UserData::new(LogContext::default()); let mut plugin = match self.build(cfg, logs) { Ok(p) => p, Err(e) => return InvokeOutcome::LoadError(e.to_string()), }; match plugin.call::<(), u32>("abi_version", ()) { - Ok(v) if v == OXICLOUD_PLUGIN_ABI => InvokeOutcome::Ok, - Ok(v) => InvokeOutcome::AbiMismatch { got: v }, - Err(e) => classify_call_error(e), + Ok(v) if v == OXICLOUD_PLUGIN_ABI => {} + Ok(v) => return InvokeOutcome::AbiMismatch { got: v }, + Err(e) => return classify_call_error(e), } + for export in required_exports { + if !plugin.function_exists(export) { + return InvokeOutcome::MissingExport(export.clone()); + } + } + InvokeOutcome::Ok } - /// Run one `handle` invocation, fully fault-isolated. + /// Run one event-handler invocation, fully fault-isolated. `export` is the + /// `on_` symbol to call (see `event_export_name`). pub fn invoke( &self, cfg: &PluginConfig, + export: &str, invocation_id: &str, input_json: &str, ) -> InvokeResult { @@ -192,7 +205,7 @@ impl PluginRuntime { } // The actual call. Traps, timeouts, and OOM all surface here as Err. - let outcome = match plugin.call::<&str, String>("handle", input_json) { + let outcome = match plugin.call::<&str, String>(export, input_json) { Ok(out) => match serde_json::from_str::(&out) { Ok(parsed) if parsed.ok => InvokeOutcome::Ok, Ok(parsed) => { diff --git a/src/infrastructure/services/plugins/runtime_test.rs b/src/infrastructure/services/plugins/runtime_test.rs index c377aa1e..d27bcf7a 100644 --- a/src/infrastructure/services/plugins/runtime_test.rs +++ b/src/infrastructure/services/plugins/runtime_test.rs @@ -9,6 +9,7 @@ use std::time::{Duration, Instant}; use super::ExtismPluginManager; use super::manifest; use super::runtime::{InvokeOutcome, PluginRuntime}; +use crate::application::ports::plugin_ports::event_export_name; use crate::common::config::PluginConfig; fn cfg() -> PluginConfig { @@ -27,7 +28,7 @@ fn fixture(name: &str) -> Vec { }) } -fn sample_input() -> String { +fn file_uploaded_input() -> String { serde_json::json!({ "abi": 0, "event": "file.uploaded", @@ -41,21 +42,38 @@ fn sample_input() -> String { .to_string() } -// ---- The M0 exit criterion: the full loop ----------------------------------- +fn user_login_input() -> String { + serde_json::json!({ + "abi": 0, + "event": "user.login", + "context": { + "plugin_id": "com.example.hello", + "user_id": "u_test", + "invocation_id": "inv_login_0001" + }, + "payload": { + "user_id": "u_test", + "username": "alice", + "email": "alice@example.com", + "first_login": true, + "is_external": false + } + }) + .to_string() +} + +// ---- The M0 exit criterion: the full loop, per event ------------------------ #[test] -fn acceptance_hello_returns_ok_and_calls_host_log() { +fn acceptance_file_uploaded_returns_ok_and_calls_host_log() { let rt = PluginRuntime::new("com.example.hello", fixture("hello.wasm")); - let result = rt.invoke(&cfg(), "inv_test_0001", &sample_input()); + let result = rt.invoke(&cfg(), "on_file_uploaded", "inv", &file_uploaded_input()); - // 1. handle returned a well-formed PluginOutput with ok = true. assert!( result.outcome.is_ok(), "plugin did not complete: {:?}", result.outcome ); - - // 2. The plugin called the host `log` function (plugin -> host). assert!( result.logs.iter().any(|(level, msg)| level == "info" && msg.contains("hello plugin saw upload: /photos/2026/cat.jpg")), @@ -64,6 +82,24 @@ fn acceptance_hello_returns_ok_and_calls_host_log() { ); } +#[test] +fn acceptance_user_login_returns_ok_and_calls_host_log() { + let rt = PluginRuntime::new("com.example.hello", fixture("hello.wasm")); + let result = rt.invoke(&cfg(), "on_user_login", "inv", &user_login_input()); + + assert!( + result.outcome.is_ok(), + "plugin did not complete: {:?}", + result.outcome + ); + assert!( + result.logs.iter().any(|(level, msg)| level == "info" + && msg.contains("hello plugin saw login: user u_test (first_login=true)")), + "expected the plugin's user.login log line, got: {:?}", + result.logs + ); +} + // ---- The guarantees, not just the happy path -------------------------------- #[test] @@ -71,17 +107,45 @@ fn rejects_wrong_abi() { let rt = PluginRuntime::new("com.example.wrong-abi", fixture("wrong_abi.wasm")); assert!( matches!( - rt.check_loadable(&cfg()), + rt.check_loadable(&cfg(), &[]), InvokeOutcome::AbiMismatch { got: 1 } ), "wrong-abi plugin should be rejected at load" ); } +#[test] +fn load_requires_subscribed_event_exports() { + let cfg = cfg(); + let login_export = vec![event_export_name("user.login")]; + + // hello.wasm exports both handlers -> loadable for user.login. + let hello = PluginRuntime::new("com.example.hello", fixture("hello.wasm")); + assert!(matches!( + hello.check_loadable(&cfg, &login_export), + InvokeOutcome::Ok + )); + + // omit_login.wasm lacks on_user_login -> rejected when it claims user.login. + let omit = PluginRuntime::new("com.example.omit", fixture("omit_login.wasm")); + assert!( + matches!( + omit.check_loadable(&cfg, &login_export), + InvokeOutcome::MissingExport(ref e) if e == "on_user_login" + ), + "omit_login must be rejected for a user.login subscription" + ); + // …but it is fine for file.uploaded, which it does export. + assert!(matches!( + omit.check_loadable(&cfg, &[event_export_name("file.uploaded")]), + InvokeOutcome::Ok + )); +} + #[test] fn contains_a_panicking_plugin() { let rt = PluginRuntime::new("com.example.panic", fixture("panic.wasm")); - let result = rt.invoke(&cfg(), "inv", &sample_input()); + let result = rt.invoke(&cfg(), "on_file_uploaded", "inv", &file_uploaded_input()); assert!( matches!(result.outcome, InvokeOutcome::Trap(_)), "expected a contained trap, got {:?}", @@ -94,7 +158,7 @@ fn contains_a_panicking_plugin() { fn enforces_timeout() { let rt = PluginRuntime::new("com.example.sleep", fixture("sleep.wasm")); let start = Instant::now(); - let result = rt.invoke(&cfg(), "inv", &sample_input()); + let result = rt.invoke(&cfg(), "on_file_uploaded", "inv", &file_uploaded_input()); let elapsed = start.elapsed(); assert!( @@ -111,9 +175,7 @@ fn enforces_timeout() { #[test] fn no_network() { let rt = PluginRuntime::new("com.example.net", fixture("net.wasm")); - let result = rt.invoke(&cfg(), "inv", &sample_input()); - // No allowed_hosts are granted, so the outbound call is denied and the - // plugin cannot complete successfully. + let result = rt.invoke(&cfg(), "on_file_uploaded", "inv", &file_uploaded_input()); assert!( !result.outcome.is_ok(), "network access should be denied, got {:?}", @@ -121,47 +183,75 @@ fn no_network() { ); } -#[tokio::test] -async fn manager_loads_and_dispatches() { - use crate::application::ports::plugin_ports::{FileUploadedEvent, PluginDispatchPort}; +// ---- Manager discovery + dispatch ------------------------------------------ +/// Write a one-plugin directory (plugin.toml + the given wasm) under a tempdir +/// and load a manager from it. +fn manager_with(wasm_name: &str, subscribe_toml: &str) -> (tempfile::TempDir, ExtismPluginManager) { let tmp = tempfile::tempdir().unwrap(); - let plugin_dir = tmp.path().join("hello"); - std::fs::create_dir_all(&plugin_dir).unwrap(); - std::fs::write(plugin_dir.join("hello.wasm"), fixture("hello.wasm")).unwrap(); + let dir = tmp.path().join("plugin"); + std::fs::create_dir_all(&dir).unwrap(); + std::fs::write(dir.join("plugin.wasm"), fixture(wasm_name)).unwrap(); std::fs::write( - plugin_dir.join("plugin.toml"), - r#" + dir.join("plugin.toml"), + format!( + r#" [plugin] -id = "com.example.hello" -name = "Hello" +id = "com.example.test" +name = "Test" version = "0.1.0" abi = 0 -entrypoint = "hello.wasm" +entrypoint = "plugin.wasm" [events] -subscribe = ["file.uploaded"] -"#, +subscribe = {subscribe_toml} +"# + ), ) .unwrap(); - let manager = ExtismPluginManager::load_from_dir(cfg(), tmp.path()); + (tmp, manager) +} + +#[tokio::test] +async fn manager_loads_and_dispatches_both_events() { + use crate::application::ports::plugin_ports::{ + EVENT_FILE_UPLOADED, EVENT_USER_LOGIN, PluginDispatchPort, PluginEvent, + }; + + let (_tmp, manager) = manager_with("hello.wasm", r#"["file.uploaded", "user.login"]"#); assert_eq!(manager.loaded_count(), 1, "the valid plugin should load"); assert!(manager.has_subscribers("file.uploaded")); + assert!(manager.has_subscribers("user.login")); assert!(!manager.has_subscribers("file.deleted")); - // Dispatch runs the plugin on the blocking pool; it must not panic or block. - manager.dispatch_file_uploaded(FileUploadedEvent { - path: "/a.txt".into(), - size: 3, - mime: "text/plain".into(), + // Both dispatches run the plugin on the blocking pool; neither may panic. + manager.dispatch(PluginEvent { + name: EVENT_FILE_UPLOADED, user_id: Some("u_test".into()), - invocation_id: "inv_dispatch".into(), + invocation_id: "inv_upload".into(), + payload: serde_json::json!({ "path": "/a.txt", "size": 3, "mime": "text/plain" }), + }); + manager.dispatch(PluginEvent { + name: EVENT_USER_LOGIN, + user_id: Some("u_test".into()), + invocation_id: "inv_login".into(), + payload: serde_json::json!({ "user_id": "u_test", "first_login": false }), }); - // Give the spawned task time to complete before the test runtime shuts down. tokio::time::sleep(Duration::from_millis(300)).await; } +#[test] +fn manager_rejects_plugin_missing_a_subscribed_export() { + // omit_login.wasm subscribes to user.login but doesn't export on_user_login. + let (_tmp, rejected) = manager_with("omit_login.wasm", r#"["user.login"]"#); + assert_eq!(rejected.loaded_count(), 0, "missing export -> not loaded"); + + // The same wasm is fine when it only claims an event it actually exports. + let (_tmp2, loaded) = manager_with("omit_login.wasm", r#"["file.uploaded"]"#); + assert_eq!(loaded.loaded_count(), 1); +} + // ---- Manifest validation (no wasm needed) ----------------------------------- const VALID_MANIFEST: &str = r#" @@ -182,6 +272,15 @@ fn manifest_accepts_valid() { assert_eq!(m.plugin.id, "com.example.hello"); } +#[test] +fn manifest_accepts_user_login_and_combined() { + let login = VALID_MANIFEST.replace(r#"["file.uploaded"]"#, r#"["user.login"]"#); + assert!(manifest::parse_and_validate(&login).is_ok()); + + let both = VALID_MANIFEST.replace(r#"["file.uploaded"]"#, r#"["file.uploaded", "user.login"]"#); + assert!(manifest::parse_and_validate(&both).is_ok()); +} + #[test] fn manifest_rejects_unknown_field() { let toml = format!("{VALID_MANIFEST}\nbogus_top_level = true\n"); diff --git a/src/interfaces/api/handlers/admin_handler.rs b/src/interfaces/api/handlers/admin_handler.rs index 711d0716..a6a7b4d6 100644 --- a/src/interfaces/api/handlers/admin_handler.rs +++ b/src/interfaces/api/handlers/admin_handler.rs @@ -1,17 +1,19 @@ use axum::{ Router, - extract::{Json, Path, Query, State}, + extract::{Json, Multipart, Path, Query, State}, http::{HeaderMap, StatusCode}, response::IntoResponse, routing::{delete, get, post, put}, }; +use crate::application::dtos::plugin_dto::{PluginInfoDto, SetEnabledDto}; use crate::application::dtos::settings_dto::{ AdminCreateUserDto, AdminResetPasswordDto, DashboardStatsDto, ListUsersQueryDto, MigrationStateDto, SaveOidcSettingsDto, SaveStorageSettingsDto, SendSmtpTestDto, SmtpInfoDto, SmtpTestResultDto, StartMigrationDto, TestOidcConnectionDto, TestStorageConnectionDto, UpdateUserActiveDto, UpdateUserQuotaDto, UpdateUserRoleDto, VerifyMigrationDto, }; +use crate::application::ports::plugin_ports::{PluginManagementPort, PluginMgmtError}; use crate::common::di::AppState; use crate::interfaces::errors::AppError; use crate::interfaces::middleware::admin::require_admin; @@ -60,6 +62,11 @@ pub fn admin_routes() -> Router> { .route("/audio/metadata/reextract", post(reextract_audio_metadata)) // Image/video capture metadata (Photos timeline backfill) .route("/photos/metadata/reextract", post(reextract_image_metadata)) + // Plugin management + .route("/plugins", get(list_plugins)) + .route("/plugins", post(install_plugin)) + .route("/plugins/{id}/enabled", put(set_plugin_enabled)) + .route("/plugins/{id}", delete(delete_plugin)) // SMTP diagnostics .route("/smtp/info", get(get_smtp_info)) .route("/smtp/test", post(send_smtp_test)) @@ -1440,3 +1447,180 @@ async fn send_smtp_test( Ok(Json(result)) } + +// ---- Plugin management ----------------------------------------------------- + +/// Resolve the plugin-management port, or 503 when plugins are compiled out or +/// disabled via `OXICLOUD_ENABLE_PLUGINS`. The admin UI treats this 503 as the +/// "plugins disabled" state rather than an error. +fn plugin_mgmt(state: &AppState) -> Result<&Arc, AppError> { + state.plugin_management.as_ref().ok_or_else(|| { + AppError::new( + StatusCode::SERVICE_UNAVAILABLE, + "Plugins are disabled", + "PluginsDisabled", + ) + }) +} + +/// Map a management-layer error to an HTTP error. NotFound → 404, IdExists → +/// 409, Rejected → 400 (with the stable reason key in the message), Io → 500. +fn map_mgmt_err(err: &PluginMgmtError) -> AppError { + match err { + PluginMgmtError::NotFound => AppError::not_found("Plugin not found"), + PluginMgmtError::IdExists => { + AppError::conflict("A plugin with this id is already installed") + } + PluginMgmtError::Rejected(reason) => AppError::new( + StatusCode::BAD_REQUEST, + format!("Plugin rejected: {reason}"), + "PluginRejected", + ), + PluginMgmtError::Io(msg) => { + AppError::internal_error(format!("Plugin operation failed: {msg}")) + } + } +} + +/// GET /api/admin/plugins — list installed plugins. +pub async fn list_plugins( + State(state): State>, + headers: HeaderMap, +) -> Result { + admin_guard(&state, &headers).await?; + let mgmt = plugin_mgmt(&state)?; + let plugins: Vec = mgmt.list().into_iter().map(PluginInfoDto::from).collect(); + Ok(( + StatusCode::OK, + Json(serde_json::json!({ "enabled": true, "plugins": plugins })), + )) +} + +/// PUT /api/admin/plugins/{id}/enabled — enable or disable a plugin. +pub async fn set_plugin_enabled( + State(state): State>, + headers: HeaderMap, + Path(id): Path, + Json(dto): Json, +) -> Result { + let (admin_id, _) = admin_guard(&state, &headers).await?; + let mgmt = plugin_mgmt(&state)?; + mgmt.set_enabled(&id, dto.enabled) + .map_err(|e| map_mgmt_err(&e))?; + + if dto.enabled { + tracing::info!( + target: "audit", + event = "plugin.enabled", + plugin_id = %id, + admin_id = %admin_id, + "👮🏻‍♂️ plugin enabled by admin" + ); + } else { + tracing::info!( + target: "audit", + event = "plugin.disabled", + plugin_id = %id, + admin_id = %admin_id, + "👮🏻‍♂️ plugin disabled by admin" + ); + } + + Ok(( + StatusCode::OK, + Json(serde_json::json!({ + "message": if dto.enabled { "Plugin enabled" } else { "Plugin disabled" }, + "id": id, + "enabled": dto.enabled, + })), + )) +} + +/// POST /api/admin/plugins — install a plugin from a multipart body with a +/// single `bundle` part: a `.zip` containing `plugin.toml` and its `.wasm`. +pub async fn install_plugin( + State(state): State>, + headers: HeaderMap, + mut multipart: Multipart, +) -> Result { + let (admin_id, _) = admin_guard(&state, &headers).await?; + let mgmt = plugin_mgmt(&state)?; + + let mut bundle: Option> = None; + while let Some(field) = multipart + .next_field() + .await + .map_err(|e| AppError::bad_request(format!("Invalid multipart body: {e}")))? + { + if field.name() == Some("bundle") { + bundle = Some( + field + .bytes() + .await + .map_err(|e| AppError::bad_request(format!("Invalid bundle part: {e}")))? + .to_vec(), + ); + } + } + + let bundle = match bundle { + Some(b) => b, + None => { + tracing::warn!( + target: "audit", + event = "plugin.install_rejected", + reason = "missing_part", + admin_id = %admin_id, + "👮🏻‍♂️ plugin install rejected: missing 'bundle' part" + ); + return Err(AppError::bad_request("A 'bundle' (.zip) part is required")); + } + }; + + match mgmt.install_bundle(bundle) { + Ok(info) => { + tracing::info!( + target: "audit", + event = "plugin.installed", + plugin_id = %info.id, + admin_id = %admin_id, + "👮🏻‍♂️ plugin installed by admin" + ); + Ok((StatusCode::CREATED, Json(PluginInfoDto::from(info)))) + } + Err(e) => { + tracing::warn!( + target: "audit", + event = "plugin.install_rejected", + reason = e.reason(), + admin_id = %admin_id, + "👮🏻‍♂️ plugin install rejected" + ); + Err(map_mgmt_err(&e)) + } + } +} + +/// DELETE /api/admin/plugins/{id} — uninstall a plugin and delete its files. +pub async fn delete_plugin( + State(state): State>, + headers: HeaderMap, + Path(id): Path, +) -> Result { + let (admin_id, _) = admin_guard(&state, &headers).await?; + let mgmt = plugin_mgmt(&state)?; + mgmt.remove(&id).map_err(|e| map_mgmt_err(&e))?; + + tracing::info!( + target: "audit", + event = "plugin.removed", + plugin_id = %id, + admin_id = %admin_id, + "👮🏻‍♂️ plugin removed by admin" + ); + + Ok(( + StatusCode::OK, + Json(serde_json::json!({ "message": "Plugin removed", "id": id })), + )) +} diff --git a/static/admin.html b/static/admin.html index 88f7a70b..0e00d0aa 100644 --- a/static/admin.html +++ b/static/admin.html @@ -65,6 +65,9 @@ +
@@ -677,6 +680,64 @@
+ +
+ + + +
diff --git a/static/js/views/admin/admin.js b/static/js/views/admin/admin.js index 864778a2..5cf9ab35 100644 --- a/static/js/views/admin/admin.js +++ b/static/js/views/admin/admin.js @@ -152,6 +152,7 @@ function switchTab(name, el) { if (name === 'dashboard') loadDashboard(); if (name === 'storage') loadStorage(); if (name === 'smtp') loadSmtp(); + if (name === 'plugins') loadPlugins(); } async function loadDashboard() { @@ -1280,6 +1281,195 @@ async function sendSmtpTest() { } } +/* ── Plugins ── */ + +/** + * @typedef {Object} PluginInfo + * @property {string} id + * @property {string} name + * @property {string} version + * @property {number} abi + * @property {string[]} subscriptions + * @property {boolean} enabled + */ + +/** + * Load installed plugins into the table. A 503 means plugins are disabled on + * the server — show the explanatory banner instead of the management UI. + */ +async function loadPlugins() { + const tbody = document.getElementById('plugins-tbody'); + const disabledEl = document.getElementById('plugins-disabled'); + const mainEl = document.getElementById('plugins-main'); + if (!tbody || !disabledEl || !mainEl) return; + try { + const resp = await fetch(`${API}/admin/plugins`, { + headers: headers(), + credentials: 'same-origin' + }); + if (resp.status === 503) { + disabledEl.classList.remove('hidden'); + mainEl.classList.add('hidden'); + return; + } + disabledEl.classList.add('hidden'); + mainEl.classList.remove('hidden'); + if (!resp.ok) { + tbody.innerHTML = ` ${escapeHtml(`HTTP ${resp.status}`)}`; + return; + } + /** @type {{enabled: boolean, plugins: PluginInfo[]}} */ + const data = await resp.json(); + renderPluginRows(data.plugins || []); + } catch (e) { + tbody.innerHTML = ` ${escapeHtml(i18n.t('admin.error_network', { message: /** @type {Error} */ (e).message }))}`; + } +} + +/** @param {PluginInfo[]} plugins */ +function renderPluginRows(plugins) { + const tbody = document.getElementById('plugins-tbody'); + if (!tbody) return; + if (plugins.length === 0) { + tbody.innerHTML = `${escapeHtml(i18n.t('admin.plugins_none') || 'No plugins installed.')}`; + return; + } + tbody.innerHTML = plugins + .map((p) => { + const events = (p.subscriptions || []).map((ev) => `${escapeHtml(ev)}`).join(' ') || '—'; + const statusLabel = p.enabled ? i18n.t('admin.plugins_enabled') || 'Enabled' : i18n.t('admin.plugins_disabled_badge') || 'Disabled'; + const statusBadge = `${escapeHtml(statusLabel)}`; + const toggleTitle = p.enabled ? i18n.t('admin.plugins_disable') || 'Disable' : i18n.t('admin.plugins_enable') || 'Enable'; + const toggleBtn = + ``; + const deleteBtn = + `'; + return ( + '' + + `${escapeHtml(p.name)}` + + `${escapeHtml(p.id)}` + + `${escapeHtml(p.version)}` + + `${events}` + + `${statusBadge}` + + `
${toggleBtn}${deleteBtn}
` + + '' + ); + }) + .join(''); + + /** @type {NodeListOf} */ (document.querySelectorAll('#plugins-tbody .plugin-action-btn')).forEach((btn) => { + btn.addEventListener('click', () => { + const action = btn.dataset.action; + if (action === 'toggle') togglePlugin(btn.dataset.pid, btn.dataset.enabled !== 'true'); + else if (action === 'delete') deletePlugin(btn.dataset.pid, btn.dataset.pname); + }); + }); +} + +/** + * @param {string|undefined} id + * @param {boolean} enable + */ +async function togglePlugin(id, enable) { + if (!id) return; + try { + const resp = await fetch(`${API}/admin/plugins/${encodeURIComponent(id)}/enabled`, { + method: 'PUT', + headers: headers(), + credentials: 'same-origin', + body: JSON.stringify({ enabled: enable }) + }); + if (resp.ok) { + loadPlugins(); + } else { + const e = await resp.json().catch(() => ({})); + alert(e.message || i18n.t('admin.error_generic')); + } + } catch (e) { + alert(i18n.t('admin.error_network', { message: /** @type {Error} */ (e).message })); + } +} + +/** + * @param {string|undefined} id + * @param {string|undefined} name + */ +async function deletePlugin(id, name) { + if (!id) return; + const ok = await showConfirm(i18n.t('admin.plugins_confirm_delete', { name: name || id })); + if (!ok) return; + try { + const resp = await fetch(`${API}/admin/plugins/${encodeURIComponent(id)}`, { + method: 'DELETE', + headers: headers(), + credentials: 'same-origin' + }); + if (resp.ok) { + loadPlugins(); + } else { + const e = await resp.json().catch(() => ({})); + alert(e.message || i18n.t('admin.error_generic')); + } + } catch (e) { + alert(i18n.t('admin.error_network', { message: /** @type {Error} */ (e).message })); + } +} + +/** + * Install a plugin from the selected .zip bundle. The multipart Content-Type + * (with its boundary) is set by the browser — do not override it. + */ +async function installPlugin() { + const bundleInput = /** @type {HTMLInputElement | null} */ (document.getElementById('plugin-bundle-file')); + const btn = /** @type {HTMLButtonElement | null} */ (document.getElementById('btn-plugin-install')); + const resultEl = document.getElementById('plugin-install-result'); + if (!bundleInput || !resultEl) return; + + const bundleFile = bundleInput.files?.[0]; + if (!bundleFile) { + resultEl.className = 'alert alert-error'; + resultEl.style.display = 'block'; + resultEl.textContent = i18n.t('admin.plugins_install_missing_bundle') || 'Select a plugin bundle (.zip).'; + return; + } + + const form = new FormData(); + form.append('bundle', bundleFile); + + if (btn) btn.disabled = true; + resultEl.className = 'alert alert-info'; + resultEl.style.display = 'block'; + resultEl.textContent = i18n.t('admin.plugins_installing') || 'Installing…'; + + try { + const resp = await fetch(`${API}/admin/plugins`, { + method: 'POST', + headers: { ...getCsrfHeaders() }, + credentials: 'same-origin', + body: form + }); + if (!resp.ok) { + const e = await resp.json().catch(() => ({})); + resultEl.className = 'alert alert-error'; + resultEl.textContent = e.message || `HTTP ${resp.status}`; + return; + } + /** @type {PluginInfo} */ + const info = await resp.json(); + resultEl.className = 'alert alert-success'; + resultEl.textContent = i18n.t('admin.plugins_installed', { name: info.name }) || `Installed ${info.name}.`; + bundleInput.value = ''; + loadPlugins(); + } catch (e) { + resultEl.className = 'alert alert-error'; + resultEl.textContent = i18n.t('admin.error_network', { message: /** @type {Error} */ (e).message }); + } finally { + if (btn) btn.disabled = false; + } +} + /* ── Apply i18n when translations load / change ── */ document.addEventListener('translationsLoaded', () => { i18n.translatePage(); @@ -1312,8 +1502,14 @@ document.getElementById('tab-btn-smtp').addEventListener('click', function () { switchTab('smtp', this); }); +document.getElementById('tab-btn-plugins').addEventListener('click', function () { + switchTab('plugins', this); +}); + document.getElementById('btn-smtp-test').addEventListener('click', sendSmtpTest); +document.getElementById('btn-plugin-install').addEventListener('click', installPlugin); + document.getElementById('ds-registration').addEventListener('change', function () { toggleRegistration(/** @type {HTMLInputElement} */ (this).checked); }); diff --git a/static/locales/en.json b/static/locales/en.json index bc489e06..df1381b7 100644 --- a/static/locales/en.json +++ b/static/locales/en.json @@ -731,6 +731,31 @@ "migration_verify_failed": "Verification failed", "migration_failed_blobs": "failed blobs", "testing": "Testing…", + "tab_plugins": "Plugins", + "plugins_title": "Plugins", + "plugins_disabled": "Plugins are disabled on this server. Set OXICLOUD_ENABLE_PLUGINS=true (and build with the \"plugins\" feature) to manage WASM plugins here.", + "plugins_install_title": "Install a plugin", + "plugins_install_intro": "Upload a plugin bundle (.zip) containing plugin.toml and its compiled WebAssembly module (.wasm). The manifest is validated and the module is probed before installation.", + "plugins_bundle_label": "Plugin bundle (.zip)", + "plugins_install": "Install plugin", + "plugins_installed_title": "Installed plugins", + "plugins_col_name": "Name", + "plugins_col_id": "ID", + "plugins_col_version": "Version", + "plugins_col_events": "Events", + "plugins_col_status": "Status", + "plugins_col_actions": "Actions", + "plugins_loading": "Loading plugins…", + "plugins_none": "No plugins installed.", + "plugins_enabled": "Enabled", + "plugins_disabled_badge": "Disabled", + "plugins_enable": "Enable", + "plugins_disable": "Disable", + "plugins_delete": "Delete", + "plugins_confirm_delete": "Delete plugin \"{{name}}\"? Its files will be removed from the server.", + "plugins_installing": "Installing…", + "plugins_installed": "Installed {{name}}.", + "plugins_install_missing_bundle": "Select a plugin bundle (.zip).", "tab_smtp": "SMTP", "smtp_title": "Outbound Email (SMTP)", "smtp_intro": "SMTP is configured exclusively via environment variables (OXICLOUD_SMTP_*). The values below are read from the running server — to change them, edit the environment and restart OxiCloud.", diff --git a/tests/fixtures/plugins/hello.wasm b/tests/fixtures/plugins/hello.wasm index 8502b66d5d49694d8bef16fdbcccf9965d159a03..f1518195e04a990e3824ac5d086c3c337fc2d1cd 100755 GIT binary patch delta 31777 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 G2>%aBM9p*n diff --git a/tests/fixtures/plugins/net.wasm b/tests/fixtures/plugins/net.wasm index c1f832a5c88a5378adc3e1c9ed41b83507e0bd1b..d7100fa7c2c93dfa55ec6cd89d95c267ed022779 100755 GIT binary patch delta 39040 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 delta 34476 zcmcJ231AdO)_=dANhTqgq!W^mi_kM%3HKQ=a-^ex0xGVu-XaRFM3i%t^dGP%!Ig~-|gHy?XVk zsxx&??9T6FW~4Mz0|5%$M*-zNyeW7=OdUHGZwLyF#nbu;%6Lc$D-WW znZ?hT{V1NI%qf&b(KC@P}G zP3WkBLx&D~02rsKSs>^&H9N3b-KY|I6@|#H;OQk*b*WxeRTES-&P(3JIF~op?Q$i= zdesEQt7=IJUbjmHyf-1il>l&WvdiVF>rHTZ)nr13Ldm4K5)z0Mpi)UmK$0sZG1Zkw zUKgQY8h(&YO1(h3*X>SEL>w7PhD-+mE*H7ns>_RHyty*06msF|rOd1>{GSM5kmn-R z?FI-Jz`tyi@RHl@!hb-9H#Z~3o06C+E5Vx=mDN|gpx4#SrDg&d(4jU-o7anmqn^09 zv@|7$D50*)rJ`mu1eGVaxP7P&Ek+y6I_{jnhErRWxPW3*^3&5LD*BPZj|?06H&uxn zc>jS(oc4{O>a=(8#+V3lAyqEbcuc- zJtetZO=|ES?WB9|9dO^>4;K#~Hfl0GOV80#8n0fYacVg&R4>pndWqK3o3xI~=yiIH zmeUH_NGoX*t)~t2D$S<_w2&6jVp>9fr`5EE-lDguf;zHsYHEX z-~#okRS=;~>SlF|TB&YT-%;OE-&QNswdxz{o9a$=m%3Zspw?OVTl7ZNujrJkDn{Af z%AjIIiMIDp%Iean@kIYLHIJXxm{TV;HShG?W!`*4Nqk8#7*z7ryLFc_&K!7CLv>Ej zblupx&g6q!+NHf1G`rl`pjNQb8#~iW=DRoguE_PxVXQuPyeCdqbhkmp`D%);7}F$D zHzUoz=}M$mImM#Gi@A)LVw6?1ml>(<%5%jOxo-BlKru2%SGBo8bJI;tXr6ierlO4S z23c*pRcF}F=H(mH(wrLHaY#yMyac@F!~Ghnz%rv>YMm+74S%y=t1FsTU}K2W-MXT^ zVzrZz9aV}OAqEQFaSaq*K^K5HJlsZnF(OGN;@UWRfyRq1@s!r^`+4B6t{Pggc32{z z_@p>p)fF_alPecF6C_~DS62dRA}XF5$A{;LVL(dHSh)9HStP;2t-3p@jC+y<%sesv z3L?C5IvJ;`#OZjdul`&m61-HO#)%eQ%Apye4<4R5AE1=s5;uFPZhQ>GzbsSSG9?;) zPR6Uk>!pl%bR-$C%iKhnD~@_8%Clakc&(JnNTK(*h76IDK)1A-Fpjy%ta;dHJ$JW<-9qhu5VR>aHGMCg6MVQX;jA{a$iQ(N>6$5~+Ud zS~k@lkOG=`L-J7?VUz=v>9CNiLXh&NZ> z5>Kz1n{Me(bIrQ9wx&7eHMibNub9+7#eDnL-tw*Az_~m`;=$Y~J=&Q2Vd)AzWfw!Kvl{EZ#geE*AOk)86C;TN9-wy@YfDU{aa~$! z_HVq^#)vV}wWa1zKrb{!)28^{(zH8DUT&IET~g7O$YK`DfQFTjRr2cGr%`5Iu8-!M zhjZtJs0-xXiS*C%YEoCX*(0E?q**$CUuxD8Fgu$y!SCs24YIi(l(@LMiZS;Mw8dzy zhZrZ!CT&^TZN90sO$ie~Bj7`iK!rL=hRh+YH^wE(0+;}_ldJo-%_3TDKGe=% zR6ZZrbv7F0tlPt@8hbg(_=I&^VzE&vW918w<`AJBu!u28cWZ0Rs&;nVc@7~{wh)Ls0c{nda71zr*|L&{mTG^O*j1j{tkJAvuE%0o0b-W5PVGa1=<6V-~=rUEWqgfV4ycaF>sXWEk(J+$-f)IBu#(f#j zsh8^T0I1_bKZV+@7V`AZ+^{>{P;!+iJYw<{4GdTEl<^$vq@XJ}cJWmiW8Pr+&LHbK z8Bg7vuZ~7EMe?yIFdJCqzd$E-4C)DzT@h>{yLdUw5$5|MHcNuwP#M24r%TVH8tpBV zXV9Pu9?SHjTak`c#M_*M)+sHOplY~T#xSyjs#d`nJ~h5hfX6VSn#QPLm9MRd3=K;8 z1Be_vQ-2SS@s%XX6NxKOD^(7%nnZ=#97ZUo1#48wX}?d%w~~-(Nl4&7v*$k%GFw*a z4sk3*h|?h~?hrj5?W#Y<0Aqt=dV1?v42P&8qdedY1oTU}igAual#+v_O!Z-?Lublq zMR#G15M88b6J_6dwP)lrLHBBtKVLXR23+f_yrKB@GJtKf?6l_ zI7uBN7bH+~s2~|NV~`iOR209*c)ZxJ8uj{MIwM^jZJ5EJ8!eEl0jOWU8}lwii0eBq zXUiyi@E&J%$jl9BFUih}1%=7Xf2knOqgvf#TvRY(IRmg(i7z17hgj2S&vP*=-ChpI z%Hqal#cB$;%QDES_=?8x|3@q z+U~0hu0R;h$k~xu2Ko^{PkyjH7tHp1Zt^Ms!ZJy+F4ksU;7ZI#eSk@2}@p%fc zLR_mtWbs@n2cR5?8W+VtjO8aJC^^1PSl<9oU4ur*2`AQQVdImuSR7}1WP>eUNPaj? zSB?1I5ONh9Fx0?JUc!O`2vy_0;siMMT#y*m@b-kKMFp)rvG&w$p+LivYzFN7Lkzf% zsqY(NK(%-QQ>w%S*WRH&gz9!ib$1Arg&Q$83ix{dK(F7&7zTwfV6Klf{Br6Gaj!CjDDa=;N6PTEAxv@v+X^Byx|Fed6op`suOJ4395#)?G$4tz@#`$R<(@`hE7)kxo{);Q>@8B%2BRbg`&LNK{N20 z3a}J|ZSgUjpBl=m9&8L*W2kY`Ue%XY%aDs0aRI5WoPktZ|2adh^B>`TXRfzP7{@?- ztWhAj&z28sUnAP?&Njdp2+7Xx4dOP8vO^e39t~kb4K+A}?F#J@(bQU78ep1O#vC!V z^enp6QOvR@EZSvbY*DJ#$0vVRAO8V?3H-MthFJlTsK-x;O}ZmCs*WU{BAlrpPEXNO zExUmmhlxhp#3C1(Wu$auK>k?k`K9(-tNJxPRZr74Go&vXtwlBED$n!M4v5ko}thorl?55 zG3oJ89pUx)p!8sonD-T?1tbB|Kgzlr0$AJvEmGww1W|XM3pPY`GbGi14^Mr(_+WTF zb1CNP5q_7nT`=2^;Wiaxy{L1NQ!lJXEY>(ZIq#v^bzcee>(^Vm-}z8(plY zTW>&A&w6{RSkK@${FjS4T^a;DwObtvZqbN`^U=jDLP$x-C?yF&doa zBrGgZPXI_m5@wSM$zb~yR5{DVc(5BSfH`E$W*b7QWa)wZNxaN){HTQWh5gQxa2ZuQ z9?G!xbXK0Z>Tt~TOcwqRB%yn4R~S4I?s)WTEO%DHv@KB8g*0k^KC8vBaTo0S%5pB`aD+zG)Bsx~k zoY*g^Y3l^8GHyLdwmQH*h3uG+g)3JFR{c)*pz9&~3VX0TA#i@tU9x)uXbZBT*STV8 ztitgwyB;P6TO`%`9z4y(LWX}&!jH#5YN4JCnq#$hENRh`blYFcaubTci&x43Ok1pN z_(Q8>Jpi|fFBv{BjXNyiYV6D6nb^ry$xkmjj-O!WN`8Ww<@^LQ%lL^7lzt=h-yFmZ z_7ln33GeVEY2{oe-gzCu@O7Y~_!*CmXLu~u0t#bhh%!8jP=Hr!5*siehjDIWJVvz7 ztrqg29**@|v}K7v%>;>;F2IWSF}7skbvS60GR5p#ZZBWT$sc3)@gl5n(8B?HtcSW7 zsx+*N;fagvVpy=t!9=WLLjBB5Gtke+`N>K@REA&lnCfAOd}(d)z7442eH-q7_>s7A z$c-*ghU3Ar{B~}$>~UrWJJg_TNn6UvV1wI;wvEiuPTyO40sI+Npp2IcX|0U7S}CdK zjT`|s%jBqF`5&DR6Bq1r7brX;P(6gsm|j*HR1A;yu4MfSGUm2oJfp-LvAUZ_hO4Jv z&B|BzgGN^AF~<6FSXAnqwin(D%lN1T<4ZQit7HX!iAzO`xCl?WG18g9Z<c|hb@oQ=INgG0@7`2OOw5YX?rpcvBE54vJ_)4ze||{XN}AA&@`m7WQBV*;aAgk zTI^K|ndKoLs`M7i^)D8ZF|y-%dhlc84oI^laaPJcpI zE8KMWAjjzFFw28!dxA^UtI1&!U@W`1dJyiiSi=LbOtr^fK#HoYp7n>4he|uKSCrd+ z3J%VvfGElmYMU}=h#yDS7-cL4mOr$p4EUov!G__|T)U+?8A`?bek*-HzaPSTuKJWO zCcrLWK*&B|ILncWak9IbT6Cl1Fr7oT!;~jc75*RA_f8M)S3~Z{|FSf8soDNR|L3Y> zU|qoj1^Wn*(SA2Xe=W-$W`i~S1eYBhC$%7K!Crpo5vd9Rw8#c3!;||>3NZ5Lkeq{T z3bpsG7J+J1W4o`}>F#FZ4tj@eI#yP4OH8Ut)woO}q%jP{yl4e98tM2`Wh1#ecUF6p zcRC(rwnQD~@fVezYt%YP&j@!3JRcL5LDVXDuR(81kZg()HR#yTj z&n3H(wI?)jbezHdS#*PO2*cq6CR6(NF$u~sbV`Z|Pn)b}c@hPy!p08XdA^c@tjFo` zwy7F&^)fKa7!Sbk(H($FmTH)h@|Fi{@BjIZiWF-o5V_^YC|LusX(=^Dgf(p`0_H!P z)7Uby%;_*|nkOHt9n!95uNUhZ{w*hKlQIm1*%-_AJa*`qebTm9op(sF-9S)Oz2`Uw zP8Y-4b&S~5LB$_35~GR_Wf+~n6!v$nl{$aI$4GOwe;6&>N31_BVj&97ga(SM&4{?_ zenESrd97mg!ny_n?EeejC9lF)F{3T%0l_x0xBNc)nfRk>aU<{{2oibwymlVeWTE+7 zY-6>g#9S4dgQI49V?R@Oy|H?Eou+ESJot`)L??`PZI$_Dd~cdzw($0(Qgf8IAb!HP zn0br+pxP)k*Lm|A&OU{N8@!lk;MN9t)wKP&5GGKI^J!wWI>{IdhEMX0>Oi#Sd z!Qw$JrRGt6t9b)HTWWJS& zj4>k&heBU8&!L>;Cp!_dK3BM0Yt>33M{zhGWvysWOfilz$eLvvjIn%TAp7wV*pV}1 zlCH|JsEfw#V>NXOn+lRTb3jsd3rQmmdsLGVZB6Bze;3z zxhb=$P4X^&TugqPW}BnxZsACWlnF@=Rh|%4yHbjhwv9u7VJTWoNOo#=D~k{^&O~>Y2#sDLX2k;D2Pa)mb|(pP=$zRwvle zOLne&=BtyyZhn@2s1XaN6l2tL z$%32Uh^KLTv7cLHF3s}Ma`R+nBi)v7J&MKqdW;B}fGAF0cz6)B$Z7*gHt)^qoMfYg zDHn-nS60)$QrNMH6pfWU_FUCVEc~5RC^;x6KbFFH|Gg2SgC+?NlBFbd$-c9|QVucI z%0Ui94|FINRnVbPmJapkQ6U|QvpuXc%)QyEwwm^N09|T+pFKEH63@1Rr2@^t_5HNZ zoLs+$t%jnjYcfBt@2DYc#8#^z)rT7ZY>KfO!ueSio?;&%q14RH>6kgk;xnrmOOZe$ z75ky4%go1fn&7>PY+T@1LHh1LYB}wH4)&NhjADuUMR)d18?DBkINKOLqQ!*aA zBLVy{*CH!KPx&!N;unSIn4=o_`Y&fVc&~sJ)!3z~3!ok>X{^E^(I9Y;m+Ka|t=Ab` zlE!2Ke75;bgWR^V5T;P|204S_Zp}DnTdb-@ZMT6Y-jz2^TJKrZyn%_4}jkai6edo>1$aBOxplD9{ z)2ha&!VfDJ5spq(ABS;;2pD)vb8~h7ycDZumpo?!Pa$?Oad_)Y|C9Bk=Lv#8T6*X) zfASOO%1-~eTl7L^L!6o0ytMu`{u*hFvAAKWg5b%nr95qt&bH z-JV3Wd3D|$euYmb^;q$8I}BW&VL!Tr^aA?V)sE!2y?YRFnjYEQQ4!AZ;6SPgh$i zd*S9|{}_fZmZ5O;u~NfQ);>Fm#GP`*RHa%+M=M@@mWnAv#bhjZ0h7)@e6Bfj3Z1B# z*@iQ*nJLmssaeg;T+W1>UEEPh*VN3^ITLERN-`bf;Nf`)2TN= zqGyl}kft-}eSrKp1Br`8x0&=-P4ezz@&HVJHz4-g7^mxX484mel`siuf0S$jTbXR;=<1#SNlC9 z&LHPYS7_XKM4kYgF)oNAJOpqz*?v*Cb;1v7KE@a2VmU2Ui+wJ$&A`S(a9};ghY`r$ z6W(na4PyXW8K;79E+5Bo;Zh-NLt$ac0S;Wb35i`(gTv;3IId+YeQ?qT+^Aj(^g zSmHrVW1iKcc=o`iqRZScuxYFji&Z& zi59I+dvK3Ri&y{ip|^;BHs==4P5PPjFW(>nt7Cj|+9LD%hwl%Z{}8l<_V4EGLColA z?B!?ZXgECoMw}4|spxSyYCc)QRWgBC9aJ(dBiA@7aqhKJ<-HKUmwh>Wc?1JkMi{uZJCW_r7Z2l&d94RZH%&ToNI8^4d;B#O|#R*k4ve5W{Xzk^jM2C z-!dYH9C$WPa)QqzH+)+vF-Aiu0p3uI)}9x8%c($|Tux_F%dK8t?mwr6|YgNX0=S^C{UopLtf;q8TQ8+(QrbFsMo0x z?KZ#clO_sZr_B72Ck)fQq|GW}R96{<_(NEoiv)3tqH(q6qt#SY$2q46wDs3e>-v)< zndA7EMW6USkK2gSl`O7#$Qn#lRY5U-4du~m;?6gzQ5|{A)M{AbThvG_f0OFean4+# zOy!%DORtM>-lXB``$2KnN^0Yca2JZow<%q$TuCX6`t;jWpChpeFaSaaPl4ycO1df> zZ`W1SEY5Pv@lrERJhqOmqJ?7RI!aA=p2dURCGwJlIsJ*7U`l@RL?)Kl7oNz25!>j= zrao!pVOtf$6C+yMaBS@I(JB~_sNB6K|mi6g2^03#;Ym;Z6>X3egxoXic+dS}8Pfae&6T>X~=1)78 zy}ekFHoTv85ypW`gR-(MdlwQ)&A&d~7VS67pT0UzqGLNqTE7O4)JSUM;!?p+G?GT6 z#cZ;e@nh#eIV~Q$nm#t~2n@8APB`HPUU;}&bItby+;u+%`T)WRwnu0FHTayfI*`5{ zGp^*?>p$i}2xmMOviKTZj8pD}13z%y{_(3Tin%3N&wR5a#b?{C8jD^IO#Ta7ig4q5zK0<6Eb+gUJ6FO*8Y{R>D$ONZrYxs`jp^qBABj{dq z?dl1wi?5JjoRdQ(7O!Qe^6JQv&FbMJmv7E;&lX^I!SS%VLLx1Uv(3H}53)n7@iT*y zq>~G7I`#*$o37M+`I+ANGbF~b><6`+cN~ucuP~OhLzX(Orx>qcX>)AyF)CU8?z1I?ge87- zO!1ysgHXDI*^F$~$bu~ILuao6>AvU3puU%$_j@PGTQ#aN0~?@+&0WuTpi1+%=f^>? zOJ3*(n93J2>IN5qCi`}h%BOSzdFq8`sHdJ7gG+TY#6bGV{6X~coE(o%)GE!wIStgc zznBB(G*-`#Hz&_2gBgX%vX%oa=-9zDrW5ms8MtFNEe(N%x% zdlEbZk_?b!&EfMW;`itIjk|7q2PKWJ7^z>t-LPE7f)cfT zm&*7L5a#U*Zt|S5Ft2`NL30(2|7_9K9fOM*X}U3opV}pxEY;{zY*aGej8ttlCwe`+ zdoR-uj5m8Pz6-bfmMqpAFXT*C+@V{3QjfE{mJMiRutVTqiyNv{i%f0Fz3PXH%;8HK zHU7>jr{Y!@19sq_&e~Z{)qdq))HTgqwF>7fWoiOVy z9R<>+EcLgxNsH29+1l3?L;F1z4_8VVviEz;BTF;0s>M1^j+w~|E1fZ8CY3Y(-11ki zJF)<&#zE|#Fal?R%pMMeD$aCFKC~YS3B${PN=v~*mdICiyneCBOkCEPzBaF0=2wp{ zGKVhH5t+KI37s<6Ec*-U%6@I1R>l+g3_^uNhrF4<|8YM@!`D%4)X`lJYg0-<3KlnN$h_2DR!_+B zZfUR8Kd(xmdMjCCajX#Hz}7UoaYnRMR+_%mV+X8fz3t=PfNMuaurR`FqK*wB#-3QL ztz@fCiPPS-p2itAQ$sd?xinqB$F8bOwy*ZFx*pDH*b+e*8Rnn#2Qh8v19} znkF>eT(_ovqw=t1<}Qo{?k8s08qPAJ^*UzZmnmk#TMe$2_e%J#p>e4Md3>`lM#A!s z+n7)j7q8&tYz}?R2V7v$%`iv2H7MR1Djtj}5cB0*sVXB*Vc zcH^L`3%*)5Q2S(|>d4Y6c;J-I-MWB0RaIQk1@ohKX3 z88ViE*y(NUVuLcKA=YgBLp?(=t{aDs`P&lc8SNs+y&A6@;^SFOx@Gci9#=iQ@$v9b zs0NNpD#nkB_P*Koy=ES(nxN=+Eu~=2&Uv?K7#%mhn@&~c;rE)>1bgk>4)lTf#k(!w z6Nul@q~42MgEzsdF&DRk;k!_b>B!45|FWZh82Rt+Xp9-{Upum6%Xd_wxhk5Zy_b^{ zYCJaqc2oR+N$RZkn)+)ig-g!xnpo}BYNbABXV2KzWbH20{>aWYkil1W=7v$UXJ>lh z2Nu`j;_-0}SVE@%sbzIpg~9x=`N`nZKKZxg(8=F zN8axd`pCu^IU(;g+f=1OlzUbcV3)0=s*C#J4s%OYh8ip}KdZ{7znkZ(+R_^F$j#(W z!}#Ei(1MZ}>2}qiPX~U`KtHyfg%yjIm)h@9oj)IrHQmf4!Mp zxx9-WjcJ&9kc-WYDW-34-Siz3Kq6uo(ov2fg6MN*-@Sf}On@Xzj{q@e>`ljXy=<>9 zO-=(myAt<+wHkoX9^KmsdmiZ@;fB}}Gy8zR@0tT`uP}|)uwF$`EGPc{NiG}sc?YkB z%766WRd_Ey*Z}W458j4%{ZK!=k2q9-_vMG)q-o~epXU6@_E9Cm>VRSLn30It+fJ)1 z(_$jhl4V+aL|T$e)0{N3>eJh~Bbt0RAJg#8&+0pMWYkhe{aWf^3kctgA0r6k=A20yeH=HBUymMZ%QN_PPcIOt4Hd4 zWk#`O&z70Hj@(Bp&1V1jG5LqLf!H5aERU#COXd5w&DNhAnVTw*j9pLGI=FOi%vFsb zlYkY@bDs}Q-n}xi)UK6g%oj%H;#HBQ_Tyqis8n}z!54YzFMl^b_@Zgfg}*Z-9MvO1 z60~!%k8Mn2hJ;>bCLisle!9;5)6u3mpREf)@;7Aw$t$`Lq&PY(X4W=<7>9P4319Z1 zS>~Nz`XK{Pf9az)%~!u{hK2I(FWVPRmLm__-^MIyb*Y-2qQV`5RO~{zlK^9nK&&mG zC*%no9J1lD+V$8O2w1DH^z_Rms1HSOks6w$qV(!L zU%Ba?S)sufg)wanz9_zaYY)jNSj?QNb2ZheoRn@XeWjM#c+f)cpPw)uK61^$Os z;2@<{%P+On;&x0~-Kq~~FtrOzAB?9kO8p+)yy~k&=1oE*Z_I)dMf8LD^of={rnHl~ zdUS{R;fXY8m9J0au`a7lOO|%KwY4Bs<09lPNjFEHY#;vvSBmKzHoD9F{zQGow)bSV zjV<1?_~l`BD;tQbvr*ZgZ+dmE?tETXN^ND7sM=H(9BBz-PtEIh870Jb#bJI)Gc~Ei z{OX$?5V*W=2l4u2`nSz^A7jI}ypQqew<8O7u}Nu+#bsE9RNQ%ouoW8@UPYpg)#deB zEfmElywS@RB81z`7jtb8bK<{Rs25%}SO04PKW;l!pC6B%YRZpSPkqYO*_$XYebN+eGr*tktt*OH_FN;# z18^yEEzxyyM~t0fhTJ7EqAUXjRw^0R?g7lGV3305Z)f?qLYJRDRgVYFy&tBe`B9v& zo3G`yo^)!%CR%G6Kc{6{Tf(?bhy}0iY`TNms!DUj&+WZsEH=7g=r~Kd&|LL%M%#Zg zNo-bS7i&v7H?AH7oZ4K;3u9?QBMbN2thMOzE#}3ab1+k9p7Xb`%aVo8YFl_o?3VI3 zj&SZ-+iyN}u2({+GOPYg=djUG{oSN~w%g)&zMG`Pjd9|j4iifaP=y2 z@qoZm;G}HS?dIuUv&^^7Hw5=SJwHv`A5pAov-$Wh28Q{%UvR7FoanqCyGR)4bRjL) z8ktc3=GI?yjQ8+NNa&sqQ_a!~!3btI3S;)kO0&tuqKr^$8!@*fNs_naX352Rm>OTa z=mR4+TnuAm2og;z-xBJA5F>Gp!i>FiT{RMrt-qTU2MF-q-ZnDe_iUX9^S#)O8o6{ii4!}`?ceMMG;(@YsHkfOewOwC}+P4 z&|^(&H89jI+apSDbV^EZQm*C5-g(wM{%eOO>!qx~fMWkEe&X$GRn|CjhKbqw^2qE; zDY1Mb5sm~L7I5n*22%se1z7$98lJkH z5wR-fNdXvikG8EuY*>IDxb@5Rf?@{nn82KlEu^}-C_?< z=8^3Y|6WW5SLDWUYr#QLxP<1WT!|YDIJ1OG|3f(s6^d=KG`N1{F(?$ihT_K5fHnKv zz)(FJhk{18rpjZYM;*GayW_254SS}L*(U$2c`fdzteN2M5hw^l;LwsJRPFZwBL zAKEG6cpd7R9g*z^8_;LQ87^ag)6;yjQB3rK4>&=T6yqD87h4Qd#nWA>ogTUBl@2gW zi`vJ`Q?*c6MVro)5{LVL#*BBkd{F$mE7hapBDx#hOBY2_2F;{>6$>+{x#~IpEgn?A-^N*6#hC{5Pns(ZGR5C+7v!Vv>gU@l9bE6;2RS}B(Ks7*uZlVGcDqok!PbUTjKEtio?{HwhoF8Sz&u^64E%# zPnp#Y1To7`O=!PZheJqc(dT{|TJ0(kw=|?iv0IpK_M?bkL+VNU#Cr{?Nw&=jt`UsE zsR&P&kzr`MCkueFji^zpcb#&~;1!^UXkg0utNRo=Rge|z!Et`i>9(;a-`8=z17FoL9H zOpHMOiO6b9tvfk8-xhM@Ik>zwE_(rM*Pav)8%NO&iju~Zp1wySmeVUcZXCJ~iB*lM zJ6QI8V`>ukPb`xylGieEi(I;E;GUMPiif4-ut6qxA(IYm%=>*c>IPMxS%B=_pgdQ) zKL)q)^~N~TtsRy*b*d5AjjMDxBQ`Xl?AWaiPI0serL_-5C7Jv^5^aw}JiK;}u=CmaK%yB3#pPW!83$+FHuJ+@J{w=6|*bti8f>wkLnqDm_CoK2TmXw)s z&|xq0p@+9_d>XUDqa6|RTVnkEL+orxjj}(N+_I&=hc_V}QmFFsOVK_T7h6%@e{R?f zt?<>^FT~JRlz&I4A0*=~VYSBwoCJ{uqE};2rqhcF$PTj>A?n$p79v86TXot%>?mRM+Ujzse{M+hWeaf{R*JTkN|MOqumZxLBIp|--+Dr-y| zYM_5<3B7do*-T*HLP)AbMH?Id3*i+<+fZgoq$=WVAMKb(XiN2CtCdQtw&c4iR8F$G zPHpr=>K&|nSgCy_Cby;5u_3)9D%(bQq_vAPx<+2Dc>>eAd(Mln`;27^~o@({=J&TP}DfDlu8u z1O7g*$0k@iE-~7=9~gNv;jo0Y)j97x#Z))X(&%ug;&bXDGT5ogvJvu!iqiJfj*f^e z?Wrs!q%34Vz_25zkx?CJG`%lQcA%QRdC{sPb&M_D#`HpQi=iE_Z_87!5b!llE@H@zKD$XIA9fr5-e&P54qFJh6z=Z2*8 zvpmG}jx6O1tpH!#|4if*(A_ELufVQ-CZ-i&P=&^Uc(VW&jWrQtFGw6Ip#F`{%5sj; zp@3%VOMFlfA-yg7UrjAKgrZW!;F;F(IRf5$;12<4J0xo@=ZsNZ4}aV1U{9;OLS>KCajqYG3zAJW zr81{0WwhMSl7sfKOUExqESE&gE-cM$<2ds}TP6l|r9S^lL(loV1PNd%M#O z83#E64R(&nbrpik+wtuOm-b7=_U?2WB_EQ&_6gA?Q4|#rZPM}S>LP>S@Dzg$SX3oq zu|a$Bc&vz;B~9aIv4pWt1;hSpv8sr2wCS9TJ*M!~baAc-e@>u8ym$>glvUfHzB5YF+Kr>7GRzXnfGpS z8rGkfbUS3>x<1s{*^uCK+BG*lyfQ6v(<5G{MQ%v&OiV^-(?e|OLl44rQ_-|99iv`n zx1rN;;(0FHWuf!Z%Vo?t!TbkeqTh|Ul(9-ozmb0NpI~{hj;~bv`|vF#+Zzr~op|jg zYLdKTF6snr_|o%nCPVvF9J`6y(^Jn*Qv9%Nxw_l&9G(X zimPwN`cZDmwMdhjabPj{Dcuzq@7AVVM!e;Ega-sWc49vloh~uf{S&3ePI(XY@{Y1- z`zLxQWh1xSI)X>WPX1gAI@ohd4RxlnI&)d(wu{Z}zPC_en7lrJ3$=~i#HjGSk>g^| zEm&=Am(dtR&)!0J(!a$`w?cT2ixIa{K4Rs!l0Oh(8{@z%e>nsi46AZ}(fOu|EjO6^ zu-4?PXyb^)9A;ubIaYC+g)t-X&viqigG1BhV8u0{_99pRG6X#cgCHSVovdBU;w# zc4`+J+Rzq5Zl@PJODBo+wt(NxVCF5`@Wn2cYH}48PD8;R=;Djw?mMUleaDtYrr3A~ z)apg?-5r#X9?2%?RLB)tw^!uc$$#-hB-}+e!@j!jF3R@=rEaYh^X?)Oe|4kn-ISj) zkJAinUa)&|4zoy`A)dS&&XoxNq&RvvT@!ceYpnH{`a@rfR`<|*bg|;+d#EpYj#`He z#q|TopL!a6`v4!^Y9%erl?gvvV|~ z;-UMgA)yte577OdqjuS!9-s$7{@sHpJxi{BFgRT-0N&P$Vtic6M_7$5JH+%sR4+^N zCj#KTatW|`hu8{$=F+N{0CxE@WRoE+cqGHC7He#SJH~5F6|TY5$P?UcHKEmD>gYLR z(^Nbd)90Gq=FPvRr?GX1gE5IZuFfFLw&B+grs)6?eIA59Di?tVsYm-oRvxn*I{{9K zwY8@1wYhcfK}uI?ZiP04?k4X_E7igvv|`E@&lh9eUTG7yuNdE^Ewdw+im7QcXVO)T z*7!^XS7jWM6~191ah!su-mkdfVY;2-PI9h}_GyPJRt|-Y)qA%5SjASGY!`c8i~YPW zo`e%fE@M$dHulwx?GY(SaIdbhQbhD{x<2t2*7ZKft##Q!+&i4w)~&@;Efx%?J+w%S z96?PQUgAQmt)0(lsBA@S{D>Q5pRN=eMo|4UIel1v#D%{&#(%^Gdr0EnBdD$aGr8}^ zYj*qZsr*r%N-~&H-OxxI%Y^ZD(UAzaGl7^LIb@gpqEx{WYx)ye%^A z)W_oK(HMG@#Qf0^`T6@8BtwG0c_=~F?=vqypY8=Bb`LV59s5MmU#X$`seESDfiJ>B zwoe5AN?CPye~sZT$aq6_@_xo3HvJVFAhSi_ubAL)`bvTnN}5!1%d!^o+?>G=ROS zPZJL7iQP}r_W`RuSyhazDmtvHGF0UaRVDNJQ|6v95FEV+HR=RC{u!ncpEj+gG>AM- z3&E>}{GYDoxh9hzHfx?s6yVD{sZP_5@?yy;P_ZsRGhEpI7JbH32ebQc!ro}A?Jp12 z$imW3?rDi9pN9sYI!;{jP?Hc0&Oq_KN&exTpg;DT(5a=pONrxpWO+^?4Gu(>&^a z1uP`h>VawVsPh%MI_L7$;m_yM+cqy%-oFcJa^$`C3bm|}7sC48E3i1W1x4Dc)TYs5 z9=Mj9*BZ6fG~lGdOmhC%j~M$ZJ)SjPj-=XlNoQ1OWfV;?RqD;h*5gbDjM#ddE^eDo zrcG7N9Y^elc0kdN3ur{jEH28Xh@6Ho&w8|(V*LVY_CMG^H62`kaQ}3sh+T}oW%$3} zAFYJ}GsNj7G&R(r4hyQcRk1x9c!Nj{ScBb&wQthfZZaIinEbCwJ}}3Z9WW6GIo3(R z#gOX1G6KWJz$ZC*YQ=R3o>LL4h5#yF+U8m~=AH!thC(Sof#KrWWt5y@OFs@<=A ztaq_y8I199;_GG9uEIeanW=$md!7VJ2qpZQ;0H- z3Gwk}`V$fxZy~>p)l~~tq(xvw+`;|PCwykoPif-CRg{pyb`0A{_&^~Wbk3d5C5?iebxfF+8l$hUL^!B&?;*v_te- zOF4XJ{V!`_|1V?dfS`1iXGr9X07b!5xkPO!K5=O!{(|JbwbZKV1WS~{!P$?>PD7VrEEXs- z!nc3$HG58%kk%WLPMs7pcT&B?l^4NMBipFrr*=tH?4;cLPcb~}#J+s(o9_=vWIFyj za2$?>%w<#2_&_nX^NVwYTU)^mRN`C+vCw^di>&(S*Bt)Kcp)jAA&gz5-z(28^7mm# zm&+G+0~trTwX6m0S7R67FfvZ@uQraCZTOUhT(JO3dzlmB66`jwXUZp7e>bhv>yr|i>#JPthQX}yD2N}Z0&hB?k!`;+3tx`fl0mGq> zAIqjYEZV$J10p^)1pO{vc^{wXC>0yur-8p$u6-3YD@w%!RWM$xTe$1R;VKx${C99` zyN260u{?r-Wn%3II0v(iziE^&@6E0oC-2Rs$x~Yvxz(epk;to$EvhH?P$ zUsMQcfYJP ztLXVL<+fb(K6=vVgz?g#*qALNNBB4N-Ag%Gf-)n;oO!9Pc;jPOpsU0;A5$~mE=hy! za}4?1tBt(lqQgEMAF5(79P1jhk2cphU5GEfJhC4hwot6vPaQF9pTHNI)9qP1>^5m! zoT-va{`E}J{s1NW<>#9%m#&NVJy5AU?;B(Nc{zOES^Vu2Y62^1+5wzuTPW5ZfJb(m zIDLThgh>3N{wGxM-#}RQ3GGQZe3D2paHma)+k28Ko;^sr62*iQ)UMG(qel-PRnWTi z;4uRq89sDys|SWX(t7y7zYQHWaM199qaPYINj+CYI9^c#T(#VM`$57|3b~h)8F7&;5aes8*1%?5uvm~fO}7=y~wd|sD089 zx2D_!kbDHjHbgY}mYPy*#f^BlZ)k(0wg~MIuJdThO?dt#T2WHN;?LKJzfdDS8ja>Q zURUwXzv;*5q_S8|>5n+`j43M<~D8HweQd|zfet@xgg|Dv$*cXW&Vyq9oz@;INTh zy6G)+Cw)57(h(dH`5IlGQX}pQi+_rIjyvU_!#mUF#P23W$wYj}qoW6pd~~4L`3w1y zoXob!yJy_%FJZfX|7X>sQT>SH*Ca!`l`*@9YU932KzPih$wB%c-dR03 zaTY3wbtujPhIk;9z{52hU>M@8OB@8;h4sVYBk}GFi;u!PGuVM2jrWYO_*lG$mtTW; z6Vx9n@D>un5poZ*BsvJE;GOv!9%n8&@p*XX;aC`!HV*H&$Pt2>fOi&8R%5c9sPij~ zg~vpbUuis@7O(vZt$3aI@K@@S7g$(*1MarV)HBIRcOjk2r;0Z&Q?I}W(VFrEqMPhW^?{@H zp+g=WtRrm*@*cqR90ZLS<-{){&g$EVs~{;nAJ+opP;>GV5oe}2@f5oW_bAHqqt$zi zS7J2fG2{<|IIu`LGUrA#ur$M_kI9`6t755R&QyWitc3r+=0NOz=@}!JPVx@pO5!O2(v3*NLD+M*i%DiYb=BMOC`wT~Wdyrua-=dC{{sf49BEC&v=sGK8X{Vys@?H;G*xX*jVfMBRU5eI zJ+VGr9YFm=W(G3*iaRsZyJ)v~J43}`X7O1D>S|PxoT)aC5i7sN-wo*MSI;yJOl_zs zL4*kiYY`?RyoJF3=HodRVWl0Ph3684IS9)UZbNYXO~?B}geeFc?eypIT!yd#0lHR7 z9P0}X5LU(4L`zVbG|`lH2wf4b6YG1cuLq8F)s#~Rzak`d)074Xtr3b4ZbcY~FbrV= z!VH9$5mq9+i?AQz7{X5oS=}||7KEV);}NDK%t2Uy@OOk=2nP|qM)(0Cx=>RR3bi~X a4=T# zUV=>&?k$s4r6}XDOx=8drA93=K$HRsj8<$DjYvz-05_V}fI*|=VU#GP=J^5-B}#Z5 zB$D_0&$;$K``o%!iD>s5-4wZdpY=J{TyxGf*IaYWoxT40?+IC!h5N&cuPP25Ius6F z6%J)r<@UzkjGv_CH{Qq_|7GDup8iM46i~J7suq8FWE5`ewMyc5mR;4gBx|&K&93Tr zVqL@fvEB~d$h%skN41u^Iat@RUM=%R{+H$N%xBkKeZ&4YUH?57zVX`Y_rL7wYYxm_ z`{w=Ey?OtY*I&IqYp>3nxq9EeYxh}RXLa7-P1mU2o~y6Z~)o_J%k8$354+`3(l~g$K?r_FVhjCqvqP{hmG7 z{>PJhnYn)dwfn9%2u>PZFXdg3%@%j$@5uAKpM_9_5C;8LznIJW^K<=~qCdz&E6el2 zV5S)4p&$C|ilP|y2Sq=u%R`oD`MNwS27^4$s67aIHXyB7Kfj@v&-(@K>OYe6?2Lte zs}&aJEiK!qRC+9myl91@PeI;_jh>PhJo_8fLTI%}S1JB?CdK-Bt5xuic6e*iJ^+{U|07w(zMK9XK|K{m{%s%jwc-Gw9*=J{)8P$*ybQSo+Pzw!*t{5P|LGtIc z+Tprz%{A>JWa~R;6^BAxUS7%ihqCy8Kkub}wbx{44X?fC%I|v99wyVs@UwQR4Zzw|l$}8V^_3N*@ z@;hID{nbT2^N|p;82aCH_SN70ja&b>%U=J}`A_BF_2vWL`{Us|KN>z3ek=Sz_`Xkt z-wzLkb#wi%hS~XlwJYxam*4!_fBUW9zPPmKaCj^{68(b4mqF?5t7G(;xkd^t;H_v4y&$1ZararvkR$tFn z*;-U#Z!%m;$q@h5-ne{d-w4oR=fJ4rdFrlgmF)|&z@rma!oCYLsJTz6!GTeiq*Tu< zJoj92Sydxf4X@aZC+dpUTH$#r(oHRR$q+Xjh}T&sp-*n0J78v5`Qnbe7qkA)LYaqN zYAB1trE#&vUNsm%&dabk4rMMZWrn2^EG-&N#<`E3>=^d*i}m|0WBC~*rFQxM`kMq4|1D?z4W4R49UifyYeU{Z zSUy2mnHicGLmVtRwm{8}d?197U?XOD8UvUZXRl&zd1DxQ13w_-Uh9Jz_0azv71GeN z?O8V8Hd&%+WGaSlv-0Z_AqpuDrc#vulgc;n^`{qmanta2tMj=Q48pVq&+vhcbBLeb zvr9%Tt2Ii!7r;;!BE}f@zG|+;uVCol4gXec=hE3F5XiBzGmca+av&RK9}JiN$`>@BMQi(At*8`|K6E67TiK-HU;v zt5FY1URWhXe+Kr7`upZN$*9IK5PPJ&5vGsF{!Fc^sjlezhP@~bBN`dCMdl@mLve{- z7VHHE+*Hp#KOm;Et@&!l1%^cmP^} zs8@CwE6JH9tF_D7)BZ7E%W^-k~;XEeIWh z8L1ciVlEKiy*?;Zi&_*qFrg@Q6DXk3;kavaBHRLmifsaV1I|#XjD?gjP~{qz4BF=A zQVoN-Lu&E@6_2`-TTytsvFv>B-W^UGqGV`bpOgvSSdP50;3+W7I@Sung39+tR2Y#4 zWtR5sedD+%N(mLE&~t-Q0I4_b2n8KMI{?~_C?!-d^cpb0(g_CM5ZjC)UmAC#LqXSz zY9q^ciKdOlOh)S0L!vkr{1bv_y#biw!2WS>ulNfXdJM?8fs7mWRxpQAM-oy=^+1^Y z#z4gEEQ^3HpfnJcL4UviJsZsqhk|~9(!c|!!d#^9#LHk^3mNFJU4ZY<<@0G23=$*#Up?wWqNwBWTPB)k8wQ=Z`d%fDKY0nlyXR*)#?Dbb}R}CJ@9(3_)VX9%UJd7GtIzF`$v? zAFIfesA!wk*fr)B{jd$lLG4-6v<@us_uPv&?;mxPZ&IW^2GtTSV>E4Hm&X$C+T4_F zYWGH=>{+9M-upbUeN311pRb09ffI;In;I{Bp%LNE=#d+Nu)0DN8+Mr}wI zVbT$cQ$#OaABZU!k{(T70lT*4qQQKLMFi2)l&buYRP9Qtc3ti@q-uL2RVmnmITIfaE>(rXN~$tKkh zD`A>JC&@~qOeNir1n@{`6+^O;vEXX3Wh|r&Bi<$h3#w@buGm)u=|Yq@u|UPXCcDJG zjF7Ff%>!w}cigyy z!S(=|w8L(XXP_)E(zBv~9D z*d_J;5acCIM_dY+!~McIJgvqaQC0d{UOoul#OoG;u^pMGrHeO@B_?)w5hbboqt+Fp zD#K-)clgfS zdBJDX&s5J+DVTDfNxAmik>C0khO(G`E~lUN+>zfl{qu18Y0n+`?bAPxq@VWOksqD@ zc}MzbPo`@6=dtwDo{VVv=UwTiJ$K|Eoc?)l`e{$5I{my)Po{c0*HXd8iswE&UD#5| zeaLekO}VMCrIP!I=RTftQ(;Rb_c70XBITySmP+mk&;3HmO@%F$+$TNv>6DuaTPnFv zdG50*Hx;&2a-Z?sTb&)M!j?+zvXYt5l$#1$D!GR}_x6;V3R^0!{k}^u?#!h`NvM}Iyo2*KrKnacD=%~%Y(6L@ zJ-Y2nF$z|_6hrxwrC3`lsTsBuSNmr4vBthxY9CY}P1+XUv~SjfvGoRBX(=o+jL4=6 zA`tYGO+hEFt1t~w*_yqCvCOssHh&kRYfd%=7rXTlJh1*2d)>gH`9dY`4nHXC2k_*w zw~@Li>r`t55Gvw`V;Qe^U-_choO7+|l?H=0W`Dzw_NKn`0EyCIv>_X`wKnss*Pk2%XypKxDK{;@_Wd6M3lIqSAmrp;mycjL}yfHYGb_<1VYBd zo;K})n7wLWtD3g2RS9oR8l5(dK){w&L@+fXrvj8IIIbF*p&%@22rimnt*|Htqf1YL zbnCH`wT7^gR1$^_SKg&p1#(dB?;x}}LWn3*8yvQF)`(4 z1rr+nF;gkD^*=;J+}WLdYufGQv1`_{V)rx8VUN2-ZIs3FXutMSgXTD3I#|l^Jp3VR zF`0n7yTd{B&*Ix`hlaV(Es8BHijWex%=+hKIi%;BXBhsfYG?i7hy3}|`Q%XLd?eZy zl9#DC3SJ$iz>LeE!D4Jp44i6_yd)3839OM4 zn0;N0dECwBR+ z>Yu3DW|QXuv!0fLX_Hl1c0~44W>V-fr*?kPQN^;g5)Zw`HaM;L9E-rR8IK{Am#L}| z4Tqf(+1im+6he~#?%jZ~ti4|f!g6abx5d-amri);(8LT37+qU!Xb zhDp~cDqH`KK?xlJCDaD74lhO6ipjD1#6z#0(}q|(7axHP!Na_Ts7R=lr6h;T(9CC0<+~?%7?ub%eN)02+m2 z7Y%iXHo~0+*^)_8Xu8O#akr95MUqMRL?-3Ckxmj%9j3NO(rMh1q1|YxMbq8ktwIhK zKl;|`c#nf``rx>YiPW(bq~$WJ<1(ul=`cSY#vaMs4Bw;bzz=&KX52C!q2k>ZhVQj@ zWuIzSysU|(WF>TN3nhi)N`}}u%zJzc6}l2Uv|mde^+o&N;iBiNiRd{D(5M8;yp6U2 zU?O{{l!VViP2t0gVMxRL23z|V-UcR$dMSICZXUj09Z@)oPYW%qLHe^W{28V1$Y1H$ ziTHf%q6|bdyi++gg`z7F$K+&p!rBb8WAwT;f93FJRmH_WJ#Eka^@W*?z1hpM_=@Z- zy=^N%bLnrOeyiT7>5C_msg?7~?^;=AH-doIQ_4RJ=+CKXS?6?8Uxv*mB}nle#2H(6 zVsY`f#m?#FG*5Cbe*W)NOG)QTB;>o|SH8|pH0L=3HpvpU6+P2vO5TRj`q>NYEG|H6 z@D&2WmL2hPkN?zHJ3BJQ8ck9p>V1pjKC$oxaIk2YLgzP``71vq*qx9oHA2iB=;iHd zq2j|@bZD-0&u@YN~~CXZTiiSav)M z!DmGzz>QF@D3d=(WV@IImQ(;bW(t2ob^GOPIpbNO$pCviFOek<== z^Vg0zO45v&#CI8e|5LPvzr}x=z{m`=49IQ8;V}FKWq={=rgg$n)!s@6@!l6&d&V>y zo1ItVYl9?;v;@nI1KeD24hrtS zejUMt$CQqs$stu@V6sfT(!sp~ZPmQh1pBTr9*QUJG@Q>Rwj>#n*i!LY>gb2`kAD>0 zhP{*EZm)*>1uU;DoM}+Cn9|tQ(jCFKT#X{|sc3K|EN;qt%T|z5I)T95t&OGx}2m_`u zx$KD9zPNnT&9~mL7uBmk3eZ&xVHv!-h9h z3!6FY!Al=>M-%{~EoJ z6yp8ACk8Kuf21js(MYOlbF@RT#?#c7RsE|x5>$ zHAj0r|0f=UlS%I;7B0RX7DgZ$3qJx2V_JG17QS3q{kFuyei1~_ltug#IpLIZm`%;^ zwut9}@aD)VbsC7F%7)NEQYAo6BXll!Apl<>fG?^6HmSwwhzD$pHTq8w22wpXrcShZdw#s`QX{XdJ3;w!sTthVQ|8+<2)ifK zL{L$voi!65`@FiNU_dDAVMwXErGOEHRckb(MJq1{+q3+_>;uqUIlv1Dr}%s~Qf_ zSwUj+pUBx3w_Y4*;po92k)^nUEKLXZwo zSa&KO;f3Sn$uf6XCs`b*=+8N6E?XwQ8pKQ$S0^jj=3Wrj(id~UB7rr^6t8Nr$;-XzC=4a*6ZhlznR$u(f0$+lmu`iB>Z2kMWMt!QLO?9dV7WG6xoF zQnt~b|3XH8zDED@di2I{75cWmkOsD@f%EDHAoHdyXy8E;gY+`c$`{gdsg}1?EejE7 z9#3lEr$pft1}S|jr6ri%m?)ZAgGG9wDbyav#V<#))IbtC$Fo$Y8ftjvbe!6WlyWBcHX%_c`*3%emyaA-DmrVo@=J$ z-ztvf`7HUeS4*x*Jn4dvX5I+rKGQaYn-djoH2V9J6&QIoF%o;v(me9`to=2PkF?>I zInqTNf94`GlB-KP^3>2;&MS*I>$Qn({;n}2=mB{@<1VLhhuV#b>Ow*C?cdhAE z>ron*p;N%qd9`X8JhU@GDZ|q-qfH@{?^B5P2|_8~Y4;m=eS}x;Vkq??USStrA+EG) z@h%Bw)62Ug+Z~!>#`q*Ga4b#t-FiX>cj+k;p`Pt+`EX~kl3rQ-?n|#MiTCoViQ})& z_MMXN@m>}|v%`9>&$i$D5?IfMo!O^Eaddxcz9aigO`S^HhG^cIec1B1Wq-)~ifyE= zi*#Sh=-ZG%4e0cK62jN90-kF1b3SJlnyVjj+Ezc!&flZTt+o1{K$Us^W9HWZcH4{{^&gom$vmw*Y7j=_V?;FN~4c(&6-Lg$cI>Q1rq32`zr}$IZH6M>#eZ zk3tG2y=^@-39HJgP_2V%s9Fc_;~mj$eotCzefzs=^?{0PSWmv7VZBkq+EWcnlwSjU z@<19xv_+~hB12&o@=Tuu&pk$P?P`WP+uZMZXeyr4GUhOVdy<4Rp zb7dfVYksV;meOZDkuPqM#VG4vnG*@)vC=9M?W7mCnIH?4CPS!PYvN0Y8p)j6sRMYapYVnqhaLAwmP71x&O zLcT$97PSk$K}C(rH{UA%hJ%Y+Gpv*Ghi|{@k?i^<9RHK)(H~I6>Dti@W6NC9k$;@Q z-c~qhcv>RDQkVgta&z_b{) zZQhFE_+l;0I?^7|xti>lT}uh*BkbbkXChczOOTe_(wO`_9&N(C+wSGYg`~U`bkyQk z^3KvYb(3U5TgmMODy!UH`u`zwIssZvS)TuT`ef;}d!eVjqJGhoCrxk`V9cuxi_d8m zMj1J^VKM9fSqNR-Z%1Pg*K&+#n*q6v+S(7B_1vc|-e%6CE#3ZxMhAQFQ9k6RZxLGA zMPBJbnf9QnWO_^sGe|e?M#-FJ3BclV#SzMbLO$ac?M zVRB#Ha&#~z9z*;17!sZIlbx!?>>g;^q*3c~8fjndyIN}s%D1L~VS9FyU}OUVM~cv5 zR*f?*l*Q8UuZ&Q{zBQo~{RIf8;ZX4arc+`RMtmv)}-3`>H(OsXR&W;Ft!-<9HZcdLD z_L{!vu3utUTO19rK0tR6V>ypDJE#9@y0es}a(?r8PISkgM0c3EjPB+{ciNvwU4rCv zH*ipsoNi$m&C6sBIz1GD6l?~Sjr&n};h+;6vc+9cGSua{b9FA0G17^!wXMhnGx%os zs>mBUs}@DxP+7%1+(@6iS+1q2hODpyt!krn73LHAX1Mqby4LM34<83nt%!kklw;|d zAx&UDl6@O+&hdLLe*fY;oWsCv3h=zJYU6<-FvwI1BMP_U`Eo{aU%;uXw{vo5Zt>_N zS-}jYX37C9N44>+_OQKjUQJMB*3GAD)r9yq?HPl3;bUIRT;Zjh^IDn$p=nO2Fhtp# zp~Bt_J#8~Py#kpf!}c6Ug*I*!BF5dpWX39zHImw+nf~y85Jg_`1MQ$0JxA~CCi#LE6`Wt|40?>gDtQ?O+ks@%JMyhoytry7PFRM!H}1?Y^0({cabqpqfX59p(YAmd^QLzU zwTEcMtr|6p-MZuB;j7>xyup}Pw2OGb;^+((6y_N}J5(P9TN%&TvNLa39yo8d50dcNOjZa`l%lH!U&Q<2_ktSA36p zu8y$g*a1ar)E_$I7@Pz|VpLP3WB-A~5;vnV7;T_?__#Hr^|*(kLEIvQ{;fM@n5^+6 z?4O^ILhc2=w)3`2b80nSt+fOvW4zl~i&6*Zn(7dB!OwAnV3&r?5-d4%Z{^X$j%Hb7 zt>Q7oN2Y!qF+7|fS1dJQ@q@(P!%w~$@vNcHNef38G?S+kF#l(`!ytfUgN!-5Sub@W zvp*`Ypg_aVIYn>JdXZxeL|WmtPsU5A7L<~4@3^ACP5zbLh50tT5-$n<=^6dj(j#?@Sb#E^y=4va(8||_7_4x+Jr`VLMegU6{w6=Ym%?{ zhkjlVDjjY?)@b*ODdX;3;b*l>9`&HRs|7)4{I@(?oy{%GbC48g_tWTy55wB3&g{*NTsS{(+l{9ho%CUR<}A)&$^%8R|O;tpjz!plVdS7E`;TBt*}J**Y-tIMwDS zrRF&$_1@)`;xoxgdFXm!(1*>zD6=L63OC~KRp8S6T6mKTs$=ur*@4E>?r13fzkWti|Tt+u_ta*9R=B4HRGY>$sJsZmN*p3W_$?@1cNv0}($SQt7f7L-C zRur7sCIHkLZLtMqjjY?UlfMLnHook^=@7KeW?i83)rz)`pga40E08y36xO^1TB;ZrS5 z!Nb7u1|srZ5Q%&P&3`&aL$vSHND)6Z8$7@u~W zu4)+OCY=;wSA)^SvJ9IxD2HpNUqbm;3?@S$LKA#M3!0qTWtLh zJ7_dS(anM+mym`dI@F|b%Dix|h);YCF*9;7t%+m@A_GDQ`mKM7F zO+>+Hj+EHdHkV-$g8*IHQlj?1aS_)*+8O?`xS^Vem$d`ByKcG|;tz-H{ z>Lbn6zwBTZ2L!Gr18?dySEp=Gm~Z-F#n3&)oC}W{lxR{hQWr-80`%h<85ybFDn{mN z-Ll)0I9ZY*YV@1M_~I(3y5gUu%gx9wBs``;n(|BTCQj9L_0K9|j>rWERL>FY6Avug zS(yE@uI2HkH3!gBJ8BU)$5l^(AJ&=Hpc>#Nj6k6#R)bhq)MPE=rUKSMx80?W@YmK9 zT84F+jp_-(R)#q?ZCgDU0?}%6BGA~4EHFYDgWs#BTiSqG-PopW$BppYfRvuZvxZH7 zwSfyLdb0QxWA0>g;*$_0*0o>O2V}Gj&{NEbQ0!9kMq_0rV*#ku?-t~R4CSo{z!1Gd zY+X6T>7uwn?C&+iC2x*n+2u!cBKlt(k!+#_CL-avbL|hl-!kP0ABMAaHt~Y~KA{lW zSG$Tzpoym-b5lnpSQX5{BIB+K<^W|iq7u+E_zGrBF@r#W z8JqrL<6!mntMTzr3Mb%*L_`Lx zIp5+8c4*EypOA-z;zSabktb1}8IsO_u*RB+-y>KNnLtqpsire69!qg~xd*wJf0Z<5 zb6`}CbVt1HYc>mNNWT-Kkqe#3n{zMToCYXYspaKOj7)7++s?>TQ$J&(Ny&yOuF=qt zC;OsiQuZ+RWAe21FkHATsFjZ7gvb8SUE2R_(o@D7nmeh1RW%rmAa%N|V5&zZSQH<%{g^!2_3u}S_lvF&4?1A zWsTMe2MCIAN;72F=;$PLC^m5wJHm&_B0$ss5aGXe*9ykMq~V^Z{$V@R3KJl_GDZ_! zW?I*JCcde!Qg_6qo)Qnn8*Hvv9E!b=F4U=+h6M>WV@p@3grnVRn3k@x(|?sDg~L(_wC(6zB_R z|AF;|WK+~ob{4p_W=fv|iiWCTWC-$98xpO)xpSu8*;T&Brwq6O*` z_CZ?~8#C~$86xHxmL?ha!&}C>e%18-lDjmm5luqo{b~!Xgvru&!-p*HFI+7sl3G9& zB(};(S}=OW?;+7dhSUO(+EfdW#LlB=UdpKg*dQZ~><#p^uP;{V1y%z9OdrVAixH)K zW9(NFQ(zW>h!jor1(nI0)P+W*6(NHdCXh-WsDN{j1#_||! zuJ(_)wM0*XiXmDi8I71kAz1^IrVGdxQHPEAs_=kNh?cRShjx%gBL=k5h>{H-PA;xr zNMKd^1w|_iOpkjl?LwrX7EfCLy+xnHMvE0r*Y$PE2aLmCbN%y0tj-pP;-&GiqtZ)L zn1}a<$zgaiP``**5<{U1HImB3jVXQMk@`QZzL_M`Jk5WPH&kiu2-Af*{Xo-kJTg>G zzMM(wz3@!}FtYVB+Am`EZvZHaFsIpcS!%^pOm#8*6?JOI+LdHv+h)b&%|}h>O`X_= zKz=#0-=Jq;3@QuT;VJSC=?R*w!sI(|rs1rA$pm2>j2CG;0%^NXgHc5xYvVaCc{cGV zIOLEFDiCtRCw)e~Kh!6{AU>paWG0jVFeM+(grx!+7-|Ur+2;=`q)J(Ir${M_(ikU5 zRf4!)0#QQ+v6>ydgqZffDIarIacoOP5zGdeW3UgyrU>Rf)cn_D^{otJDG&5NFB zTp!{Ag!y>xUOTXzk5_72(~q6~FABwAs*0&Yy&1 zG(S4pBhA0QRHa1}7NzO~Or8cENoZ*y@Cu2^HMz|eY_^-#N8A&gR~z`}l>MdgEMOqn z%bCk;m4pJd$!{Q6p;!#TCWm_bY9cvTZ!=Ed-Zg}+IpHBf?N(zVB_Z5y`MS&C3_6S9 zzAJIob=*&($XKh1PzG)Dthtzpk2mLHT2NQ6YtGL@cU}9r7LJdGGBNqM0Hw<-w)`p4 z|CN@y?2BUdvM@g;q#Der?I43?d#CXQ#Kz}D1Gc!5&3dat;UK&Es0$ObhQorozOSPp zyI@WTFP+47aRF|Db=qLg)il*Oyz**TFM8}l1dO$Sk;ItTTF~f8Z^x^|etb@cwuKN` zc{rPj*Iu@n6#30|mehJ)_b4lzg8pC*AVz{pFt)*%6I0qL+e;%3x=s0M)o36NezAAH zm1lvEx8aFm>gG)Rnt3%6Igc$Y3-WW>UKV>vPSFMoFv?7bb!@SgC7tp(O^9GCG(bYK zNer9fvM@`b3K@2l-#kx-m^c}CpUP1#SPR3D_ku+gAcO>(31qcuu=;Um%Oe>zN}223ai zYG?s5WxixQiR%x$g9_lPHy&0!MYp4>)oIgy7=@{g2hdJ!JRmEY;zUO}Fc{WjqCNfp z^>v|p|5>3A@hnu!_X$i>`4)J08DL|%2&5ti=6d}tN=!L25p2=1*Lh%v_fpqHwh9;3 zKi%7zMSh#=8!h6f1s;+OVJiyR5vO^PkC9Rebw_MPE|OWGMKd?x{Dwk@VQQ*-e#^)e z)b%;okxc8n_t?rZkv^@pX}YaW2-%68+!C%$ml$u$yIE!@0A#sav+Mvarpulbcp804j2jX7g>k0TkjxhnpZZPf zZ>^`^K2BmJf$N934vvFQL5r*#uPpQ3q7YoFE+XZyW<;^L@@mU>xee_iM)qoOrsn7Q zd}gM_!~f|BZy_pxh;q5_Odlp%kw*ZQVpf?YQH1iC081q`GnZ@8YH_6J3Pf93!!h4x z15wz_BtNCVvR%h1!fuDlGol^ucos-2hZrlv=8O?&F!(m&5GpU3C;x_0s*{;27A?<1RI}Bj+|3Ke%ge)5xpM=pM$6xF~1M827e!+QLD$|{6|9Dh+n#j z#4eeQw;Y$v-X)EW^;a(AW0BW+U}_%L00R~gO@p!?4_0%gr*Kv}xB>3<%Y7s@n1_L@AfZ^jxR!xhb0c5VZYMzKwv?;Lm zFy?JsE0fbOa$YNdNMGqlb1s)lQ(M(t=G~DY9LtVFBZ`tW-Vi%jCP1^{tzE8n>Rhk8 z_;TQ4K}@=lj-9*ZdMI>#JR-DInl-&4c8&xyU6kuBEUAnjtbq)UWf%3*Th~UXa2=^$ zT(!|Lg_TQJw$Twou+hQKj2GMJbhN4I?E}M@IMR|y5QhDV;p`h7oqiR*(cyr`HaaTI zM#mP&s<3Z#I+KkK&@3-MXot)C^q{a<#1FHNyFnYQB3`^051@82P5lz5Zy&}6M-mT| zKViFDZm72?S-D}f-V@hHe#B!Mw{j;n2k#6F>XGa6KwvzKAvwe>b~+pQ%q; zW-R-Uk3t(Degqg2m0X?Js#+iY+~0!lqFg`Pz&!(VY*;UuxUQ~-e2h0D%JR_${ws8b zhUZ!Q0oxzb7Sc}5>ZGuHURGFCE0j}p!+($dW^?8#kW=8bbI4uVpjlDlL0WH_1IhZz zLwbV|$9Y-HN`o`O=L8k;?~WgwZkCjs{~lbGiV;opw}Ie7xNEb-K#P7xBtjEz(v_nE zN@EQwq`|Rvni^)4=sPB;WxZ%I>FeuNjHpVs={AB{pJ-7;1TD6x&~{pEiS7!06BiJv zrKv8IMir;U!V24_TU~3@t-{daRAHyZ)`S+V6g0RXb{6%wc+`XH)>cd zLBCKB)rLcLYM9ImcrTU!b$z>*4P6l6}h_(VaI*c)P?$0vScicv|)`S0neRN#^jk@u5>@zI9N z`GZR4D0GC0f<})_aSxGUf*bLNXxI=RZMJQV3PQJuodwyl@NLjVRofjwzwBjYcrb&x z7>!Y&7D24euG)7GsY!CX9j1HI!`lr&>9ERVJn^y0b0Jtl~Uh zmc5-j5yJeCsO~-VqV3u3Vc&TD>kO>63E2wPvz5r|cr+kma&>(y(DxY@ztk34>Br^z z1dFYGtDqp?0$5L=U}z)}<#|1FC_eHLCMW){)cUOSY5R4%3A+?W@%c;SVixTPc_0+E zUhzmqGtgPDND{WP8k{M`1D*r_wm>1xZ7sjGDP&P7#MEb+*m+U8enbej(OG3@bavSt zZ7w&A&M6m0FP7v+2;g8Q)p(&i6KNd(Ig*y|-f7VnY_w8T=P*gcY(!EbVqU^S2QvkO z$Cg#TL~>^1KB}kXoz^RAFp+FjX40r$@Fk{-_>_6CY@`KAS=Fyr{HnBzo|jBS&&eyk zwe(pTM~qs}mI72L2%KaRZ&xnHb^eAnpzqj__Op<6$6w#VD_6+jytYIxOAv^05pXK> zm1mA#q;(R$lh*bkzMTWXlrOfxxp~Ql8t&9@96gWed3GYavwUM#5;ee>V8}PGl)r9A zey^Tv0guosDq&vD0Lt!gz6cl-q!XGVF7lhGi&D&W51Pv+k3uK}z`&&|slrmyr7mas z)6$>hUh4|G5%fXU8y&F1ywca(#G1?Ed3cMJ^Rkzqxntzu@=c!@fo3&&>X;~hQ#|}W zp2N?IXQk4{ix%TkUscw|;g1?4ccn2{`dhSvi5ol}%bhe6c^sbYV)ke`CE5T?7txN5!PxPhU!G=pZhW?>hOgAQtYsvwRuEA!;b_TgSB1n``H&(-=J`+Q(Jf@(`sakG5oli z5w6xqP81kVRQF)YwtG^ja6PdoKSFd4N!#X%skQc)WT~k-l(+P&Y)*A1g9PwN2E~~> zGh^v&PI4STCgirpQUy_K*^xD-xn08E$v?M_cI#65m?3y7+O0ka;~ZjiMng?IsqSR+ z(YW`lfK}Kmon4)oYKW&Mcq6Ll6R_BAH*h0c zJL@Q6<@EV5x2Q`I1f=0_3ufavVeC^_HRUejPv)zFx3snh*=ZEai~_BcbfIIa zw<^c3y0^)}85PRZ{HLRTIRXeJ9?L~{9QDiNybR;#mRFbzS*2mg7dTb{q6(+p^>>c5nS+2j>0YvXVp|GO+8P)``!eI<)WWo@m; zFWwx5d{>eaa4oV_yFtvWGTE_3l&nC0*d9{YlqhsBVtAoGjPWZ6Da^ab4Z{f~8{|nR zow&!U<4B?+9YQv!WqmL3I(wU?5JBWPUgpkZQ|K!Jjl)*~oqC-|*OMbIt*t&ihDQi+(J|xAEU`L#S zd7chz;aEZ;%}G$=6}0cdjBpXS|FTMkI5>c=-m2<)B@V_!)mDp0qb0Y=RJqLpW|a%C zZ29XvU&Y#~6)zp)h6C|BE6)_#N>&mi5Zy_KtF#XJBHKSDo*BVFwF4FR5Wmt2^VO&u zeqd0HE*Bb6v<+GA73I{y^)u|s(8nzQN$WHGKr3A$Dh%*g;5-CUGNciK6ubb+0Kkl# z`jwM7SxbbK=z;;-SO*pd_NEJ(g%Hkt`b8w6MNFcFuC}3ra-HPfI>|k1b<4qMorYXM zkP&Byaxi>U12yfDOX=pA*Om4PklNCU-sW_|F+zi&E^YSdXRKz;3j#cACPTAxhFJC; z03Q%C*BeRd1>#p{KnxVb(~({FW8>iNawe{{NXdt80XfL-M+AuZIg59T4@u{fBX%O> zipe^e%T*}8Lnqvk%Y6J;rQq2H#)E69B)nl|n#ux_F;yH5tvw^x4zRZBmWNHH(b{aq z57}8vx17p@j%S4?{y-fz1h&76~tF2!)rmY51$@9qCW-nh2_ zRThhc?;j&KHA6g>MmkwUE3v&ArW-pPhxkPkC7(x;*Sq#}e50L?_<^4;7CgDI8$syy z0xh8KTN9CJ{=Gd4@8cn@;5P0FfUvTC{kXfthu1tEp&=2Z)Xoyl{qVYd2f!av{U!VW zlzR`1kI6>g7tB1CL|C*t%A25@y}AK7rq%?w483Xn#z>(d0=mdre5(%Eow~14t`Asg0y1lLEUD?1WX0adIVui>sngA{bqR#f8Tn-DEI-x;5e$ zbqGTwH8!3;juAIp?*8)@EL{5mVo3ycKV0+ftAIufy6){%(Tu>S1|qFd>V~!y8i6Tt zXd9=DV`RgG1E%5_Ri2`y#WBkKfDz8Fbmj-;D+jt!4E>{C8ScWPV8RDek2($KVbA5u zdibmuWEPz%K!M}-3RvAmh&6_V^+8*RRN@DymP&N166?GKBjIk2a`|?f>=Rx2Ncq;1 zU!AF6S}gWKzc#bPHpT!ewk;txOL~izBlT&&dVJ&3gFYsU^_k|C8kZGEUt+GUnlfdd zuVWfQl$^i}Y+pREyN+Ba*528CL2b#JO2tiHOjTxld{*ljm~z!K?|&+UrVnshIUOz_ zV=d9?jQlegJ)e)rLqStnB!D!nK)q6(wanV6n0YD{Ca5EI|MH0kma`H060P_xUOQrG9AUd`;$iW1#h}J5K=|9lR zTa#FVy1v{^!pjy#vsg%B=?d_cO~H)rC7Zof64zt7ScVjt?nI+B+l7J*_B{5-to9$D z)S)`12$x{1faG>+54RU@0h38V>-^Q{y8X(eMqSEh+-Q56fQ*4RL? zPpn0J)J{f1I(z#khUiNPH5Ei+rwKT-@{Oag`22Rf*rfME(*yH z8(kE_n^G%W5z=f$B8n25roDxVVSoHn^O+-YphTBkcl6sx1~BO3lq>$Ix{XY+~>u)})9PQ{M zNWxPSaH&~c2ON0d$qMvS0nQ%23ApMD@b21x_tpk{Z4iAZcsN?4KD-KSTcCwrL$Pjx z%8=5%Y}_XXpw=gS+=F+bp%K-p#84lQFK9PFYqP*{C?TpmZY2xVZiR3w0KGMuEq3ju z@c)u!Z!PC>U05VistRDSOaL39*r|xZ-E7!JIIF%4nR)CmJ>U1=KFgh2H+oB_YE8Cmp$4&e~XwLM3Rlu{Wn*dL2 zytRN=&}nVK67U>RpAL9wm!|@Lo#L!_zx)pQP36_DYGyhMeYsT)cn>W}%n!z({mH4?KG6B(>zCwo>|H#z>$;)mcsTe4eqistyN@o5!p7Z^zU!c>}A<>4uA zmMP-#=SexK*5`|&i$v?V1GRi2+=RG*-vsn&@q*Z}$)-5F1cmT+4m)QaiqFYMM?q*M zCUU&o(d1@?y~Df1EtgB>4`9E|9!^88pElS2x$X+Z6H0NN zg0|_OnkI1K4A_^5qd4c{1huqug4Kz`Qx70~fx;c77``=8B!XLo+(JAv)sQtjrjZek zkARPKH$Fq7WT)o>84%8pC`SG=T0|)&4EVlmSzMLZDLu-{;+R`=I{sZRb~(eU1DkQ* zOu2y;$}_5F7T8RSE3upDPzo~uea44A+LXnGXw*<%&VZL9J~ovtH@o|qDWY5f$OzAY z$r%_sJF72gt{kXSC%BX{JY@Zk^on`rdOEZ~zDtt{`3c3jyw;gv&JuXMT(^xodOKfs zE`*6CU&Iy@6w(=64skyPE&w^4$RhwLgWsPK$|kcLLoJBpC8)(}56AO{3zU6gg)!yS z-h%twp^N381R@LbVIfEt%fAx=1i%TRQPpub${?0C>^>lE;LwNdp58@U^PtxL1BV+n zGe=zxox9N1MoyfQ95UkBSa!y8)P}6ipd|V8qdeu<#>V>qJ%X(wsx3k$eT%5TuapFC zH)@*!M$lG7R48P}g7pyT}wJK`KbFEoDABL(TcTiii+O zaN`UQ%pV&?00?8Jk?q+$BW3EbDvk@xLDm6c zyC4A)#mxn2Cb=M4V^yh>eUD6uv||~CxDm_@RiBu|eog!>|1fUuHe~R^B@r(9FvwV7 z+~ZwWdt|w`1w)1(CX0y?`54Yyns>_-J+Y|xtdfYR5vJma-FOn`A9}~P79|@1#ZZ)(>X05cG#4~kC+cj82*-;04VE$Ex3gs zrgx03tN%g7Up9Y7iVbz@E{olr*3Mbpj^?M=PzK$s-PWTuHo|LGz1^w~z3QCo*o;&Y zWX4C#b7*Lje+<~wtX}-kp~d-59zy7~GZ}Gu@uQ@8jI&<6OYhyjW=e2!)T&iSR?Mjm z72#pM&>E5_5<-x5Wl#aZH^eyc1Y3iFA`RGWhWI7acBRrOt_!7GC3qXT$AbFPy;SQj zB-~i9Mzg4Q@vMj(-JHgZ%tC@)n6(I|Oq0Ny!D0qB9nZt_tEWkz5cLvy;1CVpUx9-M zwb*lew&foW3*^N%bE{M$d&7c|z+%>c0Mh#z^*cAHaSXRyPL_@ZA|%D7Wk)0lS^Rag z6tNhtxeF(3tTi+Is%UWzySAvn=1!GAcKXV=n}a$QHytjBcI?6~)Y6r#M=aKEVtgkS z2;R$902|%%gB-&_zeux)3z5h_Q8hAPno{PROPLJ}TR>(ewI-psC)?^7gb-ltc>e<{ z%dF`Ym8%;jS#0k;io({IXjF;+HZ&)XAE&wQYKQ@a%#&zNp!~O?xh5<%%@O@h)CbKC zEAD67-0fS8*PN%18gh$-TrOZ1@i$Q#MQNYniK|qaRD~aF4gcN4oP|-mJ1AtB=N;;Gj zU9HQu%w@wnB_ z-)bXar%2fQgJvhm6Ak3%Df{7OHkwp58Rd-Zq$=phEQZI8aJ+<8l&Xa)W}!_F$>85P z+hv3uF;qaUJ#vdX!7zqDXQSsJAdR6aJ~am17AwgCvqIh~j+uj_PkpgL<1(XyIV#pZ zAZ4rnn$QeCTx?-H%ZLGw=Rl`Ba(+#$(51fOT=bH;S7*SS?If3ue@jzh%rdBRJdrN5 znX-5c!OwU}=jfqUdrY^G_l9B_J@(!ez+=su?|6e6-LX|fzr|Usd;*r%AuP{L=Lbf><^NG;)|oq2T)%!RHLxxpF2TJ2mAm# z=m>uygt-TgM7Nr!@f2@4zF#|j9JZ(W5|O~#;s*H`*s&u^r%;{8J5@v5arS!Kay~9# zVvj=?>7~$}TP4KgscX`pjJRT}q5W6@facghb1VM89}^_#lZ_mA`xb)Y9S!tMSNAWY z)u53cT5U07<%u6aS4|P6oZ>5xS;p)E%S0mlRu|uj+5sOiVxyl?S_<%VF zpar3Kqeb4;Ds3)eQ1M7DwGNOsE^Ox?LwwriM4X6)o62(E<+Ln)RVCAQQ$*0{WZueE zo!qZu{ukbfS6v~OvNhWsQ(j;j3fLzz7ONL7Rao6H=)mA6|OsY6RG z<6qxGyX2Jw=hwkQ#mlSRAqVTNTUtPBlPQ`pS{JLEuxTZ?$ckfAq6xtM1x>tgoF0;# z(TAI4)DTM8p_Y7(5Eeoi9KMzQ*i`+PA`U4Z_AJa_fykw7pB0qMZ08u0%s+}jurTNc z^wcRc-&qj{fOlhT2#Bqfs7I@g{O!RRraW%bclSbIR1H+6tGX)hUeye5ZB?a4egNi$ zkIbuv8roSR`K4N{_#a~B8GN=)QH}lMnfO$f=&S~zc?*jdjZ3pzt+x6-q35+J5_^Wk^hY}zM)*aWocn-NIF8VgFQ@UOiJt>h|k^h zYO<38^go?BtyrusLVOv0;+Inf*A9FjR&`adOQeP^^M&^ zdO7Fw!tL{Rhz+g(*%mQjM04^OR{Mxt9$X;P)bk(5!*&pXIf1#s-j_V1m}~_yu^E=x z#Klz-TI3Oy!yKbjPA(^ktAye(lc)|GowP?Dm|5vU4Y4_q_=vOm$T7l3^rh&A@^6}z zXUu@x1X_GgDo$vUW^wg}`lLE`0HM#bxoeCaK^Pk6>hHkKCAS&jPxH$GZ~BZ~wub8r z0m^i;GN@cZz(snoYpiQcI`skIdPX_t2niu zNwO=Xh8^QkgCAxB1Qb>QpAww}aK332R`#`y$bAfAVKl4Slc7c$5{8{l|0>otr!VBR z=&Mi%TGX_d2(F@b<6_-y!bN5b?86a^(1f~_oY3Oj6rScwZi~D!lhC}aohx2K{3aI8 z2Q%-F4*@O{=ztKiSf;yiCo&YlD=(G`_B zh=f_1s{@ztu?z(#QQ(r`=%o*#S1`Iy6d-um64As2)Dk25Gzu9Y>>@m~eDubAniNDl z_kDY#0(L7ftoBIIteAsR()U8CRkj%ZH6>8i1ielPQfQNz2@Eq>c&ECL=H$?vL3PiS zHY+6#YPJj`L1Ua;Oj8C5IrN`;(|p<4Z8h#pHc1bp@_fVQ69K7T^}-_Dq(75S^W3ki z8#5Gi9R)gJo}d7hF+ll*P_qg91bzR~j2X|36vbDNle$`k1Cct#SWwj+g;+gSL)3p; zXQC=jyj`7WPW878e5xy?{}t^JTGfx{v!@?j1W>TJT!>G+g|Q^!{b2qYIIawz(rmwq zBqm%RWZxx^z&TJ(h(=NzQ5{x!Y>vBA;?Q)%lhZ8(*txX$wb zC0gfqqb!VbX)9kfRaVE%@yqsVWe8f1wRh3J7a=?s+rnUH#*=RbUzlO#rIiK*I+f%T zAPcX^divllr{OyTQYt=vf^lW~?%E{jNg_#Rw&|`*Jz+^x6(6@GZIJ6y_gNCM5CZVn z@sqsYwSLT$U}_U2qH`2*Kl~fxEa^W$PV7pdS{D_kP<@sqOr!e6mNt!Q`R&SoyE%9c z-AJ28_1W}u<_kbIW!6CTnG;l>YmGNh{Srs@OF(rW?@kM$kV#F?;!R;B$8=<_wlOu{ z9u#hL{vwT3Ir5of87=X;gXUtjf$D!oyI0Ck4wG*df8pJnLvS9H$KF1B@+Ca8643*GvzZb?N=Sut z3ZzaUW%NVVCYCH#DFXTa;=B8o@biRSC_VAX*-Ie5_dGRw$zJK>NABWtW_vHy>+%s^ z|8$SPFZ2GM{q}zEA6>r~zu%L;cFAJ=yTAN4`|;E*7hK9Jh%N+hVqdA*ik%@?8Ee2$ z4XTj2+p|Ca0An7rW@1eX3oTtf=I6Qrd|}?IsUf z9ue6+zhZNit}Q4tKJ_7zs=HsN{?V0i0$9>|5oJ=?eHSES7V4XT)y2-~-YvieS*wTT zjW!1MYj;l%?8ElEIWTM{^}rstf#oL+>`|^ALtZ|xx8E~8ut&o`(ZJNZ6jty-ST%MT zkPu_cm@CMMt&)?{dD-WF(FVn5O@Ru1)(J0<&)9U~i_OhsuB>PA^C~D(R!oLWXi?d? zEOx5AXqmpY;y{5&DQ*Ly(_;Yfoh+mMIM~bU7;h0CxZ#FCcB%9w|ro4IE~t$H)F zo+3oKS&uiFdvs)<4?k}!DFrKNs}yj@QKzi?O(+qWf|03{oSoPK`LW6lXlLDmtX(p# zI;%$QmuljH0PH5xFitlA}+= zL5#`n`x+&R6vRN-QPTc|YW0W1VXuyM2Gf;jx0d&%7GN}wcEf{Jmpt4aRstr!WDnaE z-+HqssI4!awkrG9>Fcqx_Nu@6LaKVQNj`%zy)cLN+ittz zqLExMD&*8I7{aAiD;^4`V*B6<>m4j4Lr5e3Ri2Ow+0BJl-~TcXEF zwLk}j2+r>OLU1CtY7SuuzJ+Rfh_JWT3{t!?gT8tRJk1~vE{pgKRy`6cMl-0z;(wwU zta<56YfWOSUhaH4(fjJ@JS}V2&923wA8MWUg3M{pDE?0oDujek^`lBzDG1kOcXQFv zrT^-nqSf4-FrjSiOlxf&AWR?|0r@JhKsJskyed0D95>T3h5TZ)S2%4Sc2HsFq_3+F zIyqUVJ)uWfF9fYagtXQH??ZvDaf359IsztPaABSd_98kRki%bLk}Q(lGF zrWR-GbK`j{;@08YBR%_^mLc8N~;D#SHGEe?jcD839Hre4vH+ z(#=vncKsVXZ8)Z3+a)8)8b#zA9FNh;d?*_K%MtOXDt&~~?G}aG6zavRIMqCK$=r;5 z3VZk(y@roHTjb(yJl7*@>2e8r?u~onHJ9)`uAacMa{+s^C^~!w%gdrTpd_n=oIZJb z3e&eH?0j5YwW{>ukJAPFGi{`?K%G2j#RM_u7fv`%nXMQEi3d;B4lw8(4d-Hd(>Ix* zaYkbHS@}#tR&rKkE#;(pNeQf~OoGxh2QAVDD#X;HSjv$;r4VGr9ZUb%08bQ{k$+z}|FZ}-9kU(s1KGNYMG4n&1<`x35E!BaI%qMZg50IW0M zQ^A2UC^%*{c!Og+wRb7pHWH3Hs}xNxC)iO5N3b~ zg>+{J1>Ya9YqA4pl|ubY%?{06a{MqzGl|Vrrm1zpPa(pt2BOs+LJ{ttcPJXj#2_%+ zfAi$*rlAY1cSSg9!P)UO)!=M*>+l%c__sm`(`uONp#pPoQhDmEQU^X5CLU?nj`A&% zJekcdiVL~`wkIhon2*eTYO?|yw zJOmF<^k?40=DsR>aOS^IU=f3ev zYFEtqL>%B`ePA*Y5*%s(E)+ z(^j~xwtJ7yd;z#cLj3=8c{^}Mr2mMrv7mEace)o6c0bwuHWus!aKxSwS<;egCm(2* zJ)ZMv`N1eCR@vT7EUe{mp~sCsaGV2*uWsEF&p3chr(tlyS|&SdHy%B-hb_l+R(rRi zV12ukc)BatqIOU)YlHX;K? z#U?78Ur20K7ZTZTgHuzmSa|iu5?qOQ+Xk{S%TiG1nR6cVGpWXjKF4wJU|ae)vq49G zMQ0SOSV8b=Z@oZ$Q|mEvvadDm(Es(&Jf>u6FD5$#;a#kQDZ@C(=A2=>)eur}hX%%i z+fE@D#TcMr`A#V8H5)P1ho4XQDz;}}m<9`O!jId#4}FX94e^G9sw=a-go^fvDL@xB z&}g;K2X5ud_eWx(;@bWf+eOFtM+IowmuQ1^j3-s5H!8@+iJurUCBat!pT+rsqN#?h ztSUU#y?zzvqY`$)2NNlbia}>Og@A;@7-ii`qR+0BaEpM)CSHew?v@BYNt)qdZ3nD% z`zk^o`fTBJV`bMqVA0dJhp5;)&fc8EN5T_9?CdJ(WeSo6eg*kwHPB{@Hpm2{u4^h# zfp$Zj_i2)FH5Ul!w9oG3tEpt7;apV2x~j`nzrmr7?9`MHiS$U-?G#n5NwUyMwwurM zh$gvpthE#XRj1b#OYR%Y*w#jCFq@;NH>{e*l@hvI{MBhgrL z+#xVe^Prq9JcaF`9D|u1l&df_Wgu6D3k4e_fAXm17%(JU|nDS6iT z7o2ek0fvFEpk6+rWrghz#xR^&<(kLUAuh`ht0msw=IcNYWkl}i*xiB!S{`j=an^nQ z(QMo@f;C2xgYxN~Nyy>1S%LXht-^lJs_dYg6@q8A>!0OU7iVEcI;)G*AX29f_Q{1= zeR4s+5ENK&BNt78)e4Mf?3F{a^vE7V@VXMK)8wJdyDJi^78$drk0P~e@Kahe3A3pdI+Pa%*E87D>o6wb50P< zflHOtGd|f2{{ntBm9|Q|=wmW8kDv;xEtNqDPT|beV!4qLAaWpFXXRi!NQS4)nV(QK z*Nn4r(>3g^#>7*U7*rPRGj*Z~(eO*Jq3wSB!)G&Zcuv!`0P%o~J=}0AqXs(bIYYH}M!oeavQ)T?KT)vmhtlhxjk}?PxA9L61&|L$Es(eGSXLn?ON0B`MA| zny=YS!&(s^_ZwQQEvOc-A6~@rIh7|FDJ1=Ex~e#xDHP0TED|C!_alpip7F4^e@=~fG{(NNES|+0%dax zd7ETHTA6?t=!EkpQLwz7xjvl*NG9v1bv;-9~00#l>2HtQhYJ*S*=|#GU+%3~yBFdjy>=qU&3CJrj z$zQLyO%e z&5FV$K|1S=WR}+{4n0QWy=I+4&f6tt7HJe=ygJ2$R74?|$L^39;pB*Vr1PSb;gJq% z_v2(UMi&!!1A35#otH8y5>E#2HG!M?n%hiV)C+KPqc?DDaRyt;!UhW{L*%b?Nfmyp zkx_Xqr=FBv&$lu=c%eO5bh2Y^v?55JARmukyKZ)FV+^-8pdZiO5Ps>!Nl1F+Q(XbG zCD@b7oSs_lF(PN1*k*7jczqN0a5Q7(s=2~>&<3uSsV7uQ(GLV4pvnQC2|+0yjK{HY zQ7VJQtG#^EccrbkF3}#X3XhPAKwD&SssaYLhP!ThEq62Yk)dNk^ae%zMv~PEaf;$g z^hK-i*F&Ig;A8myV1a!e+!Iho|*t*Ijcl0Q4BN#wn6M+7Pj_-iE3As>|OogU9(*e<4 zt!R|eid>TkJLV~;Zh5H(B!P6JcH}$5^0@}L6uPCgK52gAoXa+NrVoW>9^=~0*f)X| z#0=;O{vuJ8OiT)lrH>(!0^Ia)reO|Fi7+c*Eg8~0j0%`ADeQZqK6iv*HdnWZfr{G_ zct$9~!8mxhf`$b=>q)@1p1=zVP@u5{lYHIqFn{&e%$g?BdRWy*dpJcF1$Z>-IMuX~JXL*>=6oOF?0XfkI3`-^klJ z%|t+VAXx=~1QN#dLvCv zf^8v10{g)yv11bkAX5EDq!UJr)W8w$lw`T;mR@u+t+;hi7GfQ)uA&4Gh)67yK{vo? z?_z#H2MB?4Y`7?s0N zSO57g1CDN&CE{6&F1PG1r{frH|DhY=FrYNo=oMXI6ZkzcuF`C;SG28UN+sDU@}7?3 zB#|rebI2de5K2=zOInglp`Q2@yH{$>;>KM;I?N9)(!DFp83XvQD@#e*X_aN_Js6CD z97~%dcNcNp7KBA}a|fHdLNnzy+87V2DYDqo95k6K2u;7S`=sBlI)heYjYkM4Ly2Gr zF0m&4YY=z=5rxvh8lVa<{Nq=Jj3Ss_wMrm~UNqD*DOjlo8K!X1Ac z_zYzOUU^Cl``1mz@!c!{O>iTU!Bdi01rJsay&#NIWX+7~XeRYMtUoYAO2J2~*rE)a zB@h{94fClevhEat314{I4zOs`(8+vd*uV-Xz+@BwhvQUeGSqQE_aLl3+?7E@lb}@6Clv+C@op9vG0lKH#0JyOHVMZZt!IAimBETYmHueb7SM5n` zPRCS**brbqDj`M#t%Mi!4RC;m*(XD%`M+cHA03-V4|Z(agg-hq=Ru-P(M_v{Tn_`m zI!G&-TwN)~Km>1Lp46IYmGiJx;vg#}8AK*}a;ppTbpBJzlynO`(89d?F10Z4Wy88E z7v`bQ$-=ziCL}|#!FUCyt;s{P(Nj#%h@8Xyb|Qn4W5km)Vr%_Z=l8jD6OtoNBncrk zwH-itVZ0f@1uPllpEkc4qtS3fX1HHthVvPwrir10bPXAs@^!`>$7xcjpRR?|ha%7d z6`>ia&w7-+#hahflk$84aw;Z9-!LaTTP3k8DwDGa*I+A=N;E1k+bBw0+Of}c%a~v;PuI~54nBz%2k0qy+FOmrf+G{bX8xHO{H}+11Ktfs7!@P8%H`! zGL{9kBB^o)<1}5^7~pUObH2VNt`~KgAv@__}K;JO9Vh04%)^Bj$;+{OU5~gCPdJ8*H_6B8eM&)17{S>riIg$r#d-(5dpm$Yg!8%TY`D#nJBOEjm#~S0(@! zMk!sDE>2g@S5)P_y}}CXj1&jLCc^)JcuR@Qo2LWbQ1K7OTk4;>#LrZ0784Epu0ahZ zEP$3siC7hrPz=J3aHK&Tk@R$%2ZLdaP>e(fq(J5hD-jH2|jG8r#e}=>V z0%lPjnc^$5&ae?^7Kj6MQGO@@J=kjzEUz38Tmyz!#H>(!5R<}(GKT*obhXI!zSg2Q z3m72=fwpN`MK?G(I!9or;W!GglQpGncxEV1=JEak4sn1S`4F6|>2bBHk}9D^e$>K6 z)bxMIc{olT#m{oe5mqR~V>5N<2*&qRVdgBFZ*-Wt4H%SlOe|jPHAo4mM=JIjfRTEn zVy_Xp$&4!Y8mEHfBNclM$e((oLasrBlYV6X%zjRLLH2%QFZqnC!`AH_*270~TprAA}>YF&t|eKm3w7N`eD z=ydd?rC#=4kuw0n@E5BHGX04T3ReuYcRhpvl+rREoo0~*s3w+o77ip(5q@Qk^q~L{ zo$8USr_o)Mh-1V4-4aAVUla+>W(nfDFqLptXb9Snno{)0IluW))J!7&xi?Q*m4 zNj!?Vt~JPOkR&xiGxZM-^GLjgOT6JQiPs=gz`P(aA}w0S4A|KqTn^Q{pauz?*hvb zkG|SK%pUkTiZ&$_sM{m-{!$=>4>O;Q09~8>i@AXv)j8U9u|j*-LtEpM7WuefOuF`F zJrtgA2mF8x3Eg-Of&L2E!ur&-F|V7kre-%+Y8qM$dD>Qkt8z*zq(sHVlM-@`<`+ zz{CML4hWT~AZJO-6r>VSb9J=N^S}XT;I7EEEkGiqQ}4`Y+iU z*=Y}0s-I|(?G z)jW1@RGwu9lm#%hg7xZEB2ViQk5@4V6ZD z77&GCLW7VDmrgA;A-eN~yY~yi84p28N%j^cdrKsHM6#l33Q2U##i=CCg@0m})nFsg zthLiY^cYBA(ndT6H^Dl+gx28$maKqp;zipYltdV~P5Ph%;C|1D0`26kMnc#zV4d z4>gtD7vED?vGKF}e(8Rg-N*5wDD6j5`KkU;=Yb0}PA%ldE%Z!OHzFtM;!bji5)o&! zIH=`2xAWIK$i~?zcdicfZ`|ovZU8=t*w#9XT#yiW@H-Hn-azb1O8cA>I+0QE!X{)W z65_gB96TsWhyjAeXkng27_}<`#G2d{0p~}VtJUI#tC>Q2q-N@8PNkXpsf8L;HZ^Ld z5*QFxtOPG&=+D5wE+Wwg7Q(cE z{@WOn*hA~lbFS6sX%QX3HQbo3{aL_F(M;e5sA zBQJEMi}eI|{|YsQK|q)aCvr3pO~3{h6;K8wt^&%?EGm2&Zy~r6V+GKlH5^caYvK`k z1$GBOGr)3^$um|++57`}omco{#U5uXBlnoF>bNY@PHw1?v@8y(5seM%xMWNovd024 z9pmyeG?^18+UG~J{MdM)!(f31Ek&ReUET+ksLi?0+s}$rJaUr>R28liBW=vAf-@?I z26dBu*)*=gvjmYQXhQOid`Cdl^c}ApQiHxfWS=}E7(X~qmw-yfRRv#_wGYuY-Ds+i zmz2vsM~+KUyL13_b-q#_xROigoWy9PRpKS-3f=L%pa_ibd)^E9n9#Iz z5oLnf$kkVy?9F4bIM3ZdR+9YBZXdDetGwUQ09ULj>YVQ!*!8hF1N7U2?p0`k=p1R7@rkArpr`OQN7F z?-0EmD1T#ZotQToci=xq^I@Sj3_rVZJ4n5R_QaQc)LlM)pey%u)7bbG4sKV(9w!%L zS#%zwXoqW6JBAVuySbH9!@~Y9@_n4)l>c2=(`SQlnNw{qeQ+?n{w@9YzxBsCd{_q2!4JhMG|kUmDA zN_uaZ4Z5k!T&X<*(oHa-rQ8>$a&rm+g4#godR71^F?(bWHQdW{-#fttwR*tMPkHTFC9 z7*Rz;FwmwO{#QW^q2mEDF!p93p=?Bu?8^j+kUe-EjYwXdKxrrQNJcr?#d}R~W~i_@ zvC*yDD+FW0$*6^{CB8;BMkJkQB-I+=u4;qJG3a}oZWv=TTW}2VeroPCE`G)ThHB%w zG`aBpgbPo}#b9>M1Fa+wz=|>?8;L206R=MwnWf;G4d&%8HY@144m;xeq%_mGPi>?l z@8;Yp2%TXT%slT=bSj7qYPwH4`^bI;0GlY9rc?dGY!*!5063};MapD<*jec?&4uU} zB%7xw!C=rIMGw((+f>wK>ljCIXdr9RNND6RfDx@1=>rEbqP4L@LTC<#I&#}Bln(@S zZ&K>vxy)Q(K)FKYj5oj*h^`8$fQJD=SsREK^i;6-6k>Q{oZ(~VUq;D}bWYP*0T(BE}=6cd7GBg{PSIksg#?(qVSd%GW z2doYQ0aMHcRIzu>80~Uy{=gaPIL=wTj>gq?afrEbh*^ELPVo@;qI1x~(l=~?b$k=^ zqTmMD)QwZWqz0_+RmQXB07vtuuE#3*S+u_YNlH~>sYhb6kE6s+7~^CZfV-Q)1$=LQ38 zG-u%WC`VZBJ&)&9V4r9xcI5_?h*#)rH*9(q)vz1VAS5Do>e|_rXah~O45c5XiHedX zBmuDH{*`IZE4v zYDFaSoB|?0G&5qTDFFg3CV!dOH0N5j%*kTuEyQvZ1$CH~4E#j#1O1O`X0XD!L$Yz2 zMr4``2xb+s22g+opNvdnWkjYS#VHX2#2E*Ac#=FS|F1-*8LF{gAQt=q`fyJ=E^m4B z5nu%_E|!ayJ&&9OH40Eg5?QHsS9Vzn1P@~(Ob-Aw@DTK2yUw#gmW=8MEWiZUnQ8=$ z&~OmwYG$V|3a8X2B7q1ZmKgZcE$1g~X0$_lwv#Y2EBH~-r$g?59b4U<Ez|o5v~O+=CY6Wpfbd4iKgyf^D{p6~H%W8CSR?P;e2{9>XH~E!}7HqDo}6 zqY%c>=MWcE5nB{YGU|Nx7$_pS)DQP~J6ajHQqe9@HqJFcm75+NxZS-tB z7QQ()$Y)8YlbD1r&;c>*kIG{I5oCkCWH?p)gun!2H^6vkXOZ7vA`5X9hjRh5aImnU zs;lZgg;pYmTPdn!U8-cnP=G^(DjAhK;VKwx*d#oPyI~-dcHm-4l)+IDMZm@qC!@B) za$=%zzvA1l5}LG~F!(dL832!-N1Y4P;R$HCX=nsOf=WpJmJFPX6bIniW*M;ei`pRw zI_Q8USrR-##e{gDqL3gl2AQ%$b{|c5XPEvugDJOtvf*y;bwH9a$ zHo$7ZGGND!c+v;3#EuC4@yK%Fol!6oG|1_x2%7V{&4B{)v&WP^qIN_Ln&I>WwnkE- zhn0sZ89Y4?8;F2=$3mtdp@VgTe#o)1c+GelQoghZdx_-@9>zmEAvz(vxh@rQtaI2$ z+o`xa49aB)%MU7?>TYkvo3hb{_+$csnS3)y6p@#2qLB!_GW%6Re2jq*Z-(~K8Ssu!YLWW0Dr z)gc>eKnvPO^BB3h@I}Bz*%j z-S(lvsM8OaB0WHe7q|K8flRU>aJx*C=tPk1)B!H?$B|X~@DLMlel0hQH5#L;^zJf3!5LXAwLHC=FaH+HwyihB%9=S=6x^ z_$cbE2XOM_687@%JvAMhvVc_J{ODWA&f(l{hd3B^Rt6fRhu;G0ZaKH}A<%#$>(1>m zimC8hLT+9}E#(49(oKfn3JDqzF@Xjdi4_`zQfL55l!YdV8WJH*V)U_`qhypQU>@N- z0gIz?~oZX8U-I9!6cFtsgr2< zcm~D&NJXxl#7!YwvAGC=Zm|ZiX4P7<*B3L&XES7mg7g;=j~WOv;IjDMm7b7XD`Sy^ zu`D5Z^#}NgzLBZF!3M=Y%m@5$6;@l!5*jT5kxM;rc+QxMSAbc9k;fR})ddjGe zw9X+`s9eD{h0VY-_>=;6&cz^UXmG$?^aNhk{1IPQHjWktIZOoW6%u8Q0S*~$Eu`x5 zZfQ?IJB$(NGs=QGPGpgmaNXU&3U-BaIcmbW3Ud5ooVW!zVZmn`&(8r8ZszO>dciU6 zHsvh%pB<^8Fb)r)gTP~ezZQFLJ>Z{*E5v%WVz+ZN;KRl6(P{23o~4MkG#0==h?a`2 zg0X8<4goFyL}S0?lRPv(X?e1>$QiBLp1_Jl-4$|+gT}!6!Qv>cSba6Ph@;^s2en%G zgV*A8O)pxcZ63Bfie7Ml)$Sj0PS9i%P+ChO7aFOa?c}n!+coq>wHcrrW*bH5Llca! z{gL-##&8j{OVM^b^$#^{kf4Eub{Js@QCxRI;CuoSkac!S%$K2fN@r2I`HFu%XHjO( zH-^#g0av|@{%RZ087Ldo^ua^K??Ku5D8YT$Qyxa~5LG)Ds+6n;l9KxRcy(Js<%oDM<`fcEdCsZpwDZ{FW6cWlMRR4YKd z%?}CLu?amws#KNH&O*h2h!_c3nzu!XAQV`sH=uC51KFnSR{)q1%7mlgYftx^&+Ol*B#7tnMXA)VcLU2rMFrK9WSy))OHV zha~z&618nT5i~1FbnY|k-2oCI5{4w&E{R~pZ>{0vmTdT~Kb8n#E+o-|lIQ>phw(xZ z?fS8jT$Rju`NtA*$$)LzD~S%!JA{moL|;mx0}Km9BT01LvxL(q-n7I5u356W=Oqzb znOaN4&<9NPjwFJEL2HTN<{*hKdXClgX+4oEm^zP1qMofMf}AHMy(ftdFm|xdNTSar z(E;EDsa6tgex7aW)_QfAmn6}(lBjiR0jWF5RZel72B*51bgj7#R4KNHsTS~Y9jG7} zDIyiBRo)Ddlfjr3?^T>nQzUIxQWC=S1_|mVPCW8he5~m>fp+4rJcRKZUKX~YBn-)c z83W>bWLApjW0}u%Cqh%^c;=AV;%gQT9*ij${tIvbZE9LUB?K}i=X$qawwavkBiAWW z4(aJ(gRB&UA-_0SAi>109#Hy)0a|>*O$Yjb0|PB=&loD~6k>hs5UO$eiR#k(iD4%< zqdtJdZXFrIHibwC+w=zXgl+iuAhs9OCpv}FSCW<@5wyA9;R@O+gDYrD4lJMZU}{!y-84B2#yV9ZmzeOOrOi!Uf=F~4Ez{w*jsHQ6kM;SSi zk_m(mPe{ShMz#h`Km;4-B4T{{M2mNnYSLwukJs;P;(Uf1y^KNn$pX3%+}UTb4T zjdA>d8fc?vPYO_2^H+cZ>yS|2sSK^T?pW2F`m;e4h!Z!%W z`ApQP_h#V8hl*&VlaIF1yZ&;&HWP3&ybTW^)oXoT6j-BUMwMaOJLhIHzW>#EP@Wt* z$qXE41t>3U|^S13fo7QcNM-c^xXbGbQY<;V4aLi@mlM>`& z6ME%5_yJg_ci0OOhMg5lVcn!ofo-zHB>@L)NCb}B-@tthq&h%|KM1KVKq5ZG@j|#p zNWcQbB9wF#45w%*6*D|}8j1zFwX2Bj6Mg~d68vT&NXbB3v9A<&m9c-S`Xz51%v1U9 zf|eA^g3Ut}i7X+hH2}X7A_qhP#cFY4pIgrdiY~bPEbC=L6ESoMRpS{B8%-*T=~!Wa zDF`PBIRDVF2UG6f;uW5|2v9)R0EGu;6iP?Hxst(JtTt`h_@G_{obz!T^yTK}`f~$8 z36xD$8XOisvbbr)9wadUZ;@KTi8>%)>BK<_Ag=&?2~hXJ=X)K_H7X-J_HSe?@bbx~ zgoCdz=;f1>pASA?)XOL9tOuVDdy-WDWbN?a^JRJYjDHU+qh65+gc6fj0XsdY1C|Ev>vgfb87V<20#Q28 zWDqvp&3w*x^33xWQ_o&+<=KZB&rByuVsh!|A6~b?fZbN2Ic$t4enjS^Bta+ydQYHs z6BA!m68E!#0?|-;3pQRO&0S4n6YAE*y9bcqa$1_9Ni8!&<&0*C(v9lf)Fl5B!t95 zX~OoaZ5Z&-8|3J)(Hh()4PC-b$_v|{l(snk4#GBSY)IyxK1!eRX1Tn=F(6ARcZz_s0KQ9>j*YV@ z6$@uHS%1%olyi4(syj5<{_E~2vt+6}AP&$MI>5fr?bdK`5QzsO$XN$bCj8=(G8aJv zJ3?Bg*{1Xnz^DvDEf7Z!qG%XwlhP@RHYh-0!X?ZtfKz4`4ps^f2U9F^BsBt6tP2HB ziG~Ax#e)E(#e-<3&GLFCp-M50Oddt;^lZM7o2aF`YDP*%q_7}1_9V&^GZfl`k9cZ_ zpuM*<5ojOq&_0lX_G(FjJP1;V0NtkoS^({-feDUKQ3rLvMHZYYrC`8HD+r&CA+R3; zAbzKik_k5QNhtuxzbGOdyb_ATfyxesCTBv4)FDk^X%H@A+ua#G#TVyk9(~B_b#}ls zO;7+OZ!XTpWS5=_N32XcDLXr#GKu)a+G4Z7pP;Z&F~mo3kR;;3r-!_>dJ5z9>hyj& zHWFS8qu>g)P&tJ6_{3QQyyJHw()t`m?{EfRzdIDIoY|84zd#IUFpk zk~ByK3}?Xmn89QQXk!8#?y4292Z;^kC#b0N_yt&~7Qi}I_Ub4AL5CAC$nqE_a!lIo zxROpJ#d12D2rB`bEkHx+zY=I1=j0OsaO5FV52aC2`6)??P!d+bI0Q1 z<`sbML6ZdMoiKU>fE%NwM`2e+r$=8LE)~#o;pPdo8YTF_=6%%MNo=rWfES^`C<|o= zlM{)LRK-{o{Nvdm0^~L+k$`NMx{~NPcAWxGvUdRm9bgnHHH$9xlofF?JIOQOhc?zzU_Z1RTv3lrj_+)3QNBO4?Y5 z5Fc1sqz-C$L8$5wL~wBzqg)D!M`$&HH-L*g(lvI@c^U>3jh?q~z2YU^c*R8$BY*}~ z(RC0#P$&ACSeJ0eZyF3d?|Y-yVyFYa7J|~+rh3SvX4}Y+cp7M!82I5FdYF9!d3%Mrlzr=0dzI6*R zpk8rFQaW&n>EnbF#nVxdt>5-vY8zc)q9P+EjK!HDjj-0iaYhD`ZG|w+T11$ZZqR@W z$bqj5^G*i#a}W4zE=hwc5CerxK`Ka%X={90_p z_}J)#clvd)tZ-otqGuujX9(lN zLONwpS;oQ`K#0o)BWcp`g~0`BC`_fl=7XSGZ^z&{@I-WPB6BnJT5l1-bnzU3K}r1M zaU)sVf~u67D0EJdDWMT!RB}^QX$qTCo8<_8DUpsjD4ncbqn03ICwn8CSd^v)2!lo- zITDBz7RBU6$v;`ikGtcbQ1(FjuV^0yp*#HJO?7}@vN&6dY!9_2{~VoHh=njjvkP!>D!0An4n41SDp!dv$&8?Y@n4?@j?5s-y}y1?)HYLNOH3iSJl zfHrOcU*5il+qy@bpc_3>Z|LVfV;WEx@0kUAt{iOwplUD#PZYRnjnK16FK7vwVv7dh zO@S`EJz%Rulp8wOer3YD?mounLfdeUt>|(dCEsw8Wplx!MHkUxA4%T;G3m;deG?Wv8u!V{EOKDEn{KpDlluTr_b*F6 z5VZ!*mB|M*HE8rW7r!8?fP%!zT&8g+n8tuV#Pp6ttY+_Fv1t7Tt*|nx=)N0tDAhwV z*+bX@(|ZVxF8zXUAIL(yM7hL=4venD20jBsWsvz19C6`Xf^WKKhbDNG9ohvCV-|t) zpo_GvsG>aJuw+1D0ZRtC^1W!r(DX6=vd_S6Ih$Vjp$b5yEYT-dBn6*2=|E zZhsx2xq!Cxq!(9ppJ#yxZh{gWxB;tpr(e^y%2~hdk~g`x#2Afe!7K@kXGIZ% zM>XNu0XJMMqiy;gJr>zBYsVRJq;;Bp{YVq+_fES;C|_1XJX*=K-m;U2z#*(K@-pRS zNh$BWw;-2j(OOIsa1nl0kK-V#UgjQsH43I6BcF9AphqTrQc#GUGh+vnypJR~MOx9N zo__6>$CtbGqGfC2F*|2<(a~ox`0?gV@mxFG@nL`Hj?M9GmWTV*@is-6vgETzTU}%z z7JX6Jj;$%u@CQEpTyzAxC>>;)8zhONe0y*_KlCg6>}F>b9X%5TE3}OsCa&W)&Hm0V<3g);d=g>1V`qPF8kzf-@UN4*@KCgf083 z={YAT!#$^TtH|0ojYkgpfQiAb_+u4)=dQ@_*EZULlQA$6=fO2p20=O-f4Kh5w{mBp z20j8~k?mJ}7hVh6YHHdf38uTci0Rx86oc+xWMDv7L-~(FZ&zsj^S}I4uR`3x3MU)K zlJAITqv=W17pxBp)?=WO1G^oiF_FT0c`sd0OR|kPU1V&sQ630}Rwr z+yPX4;FEg>tu4ymT(s|w{rhv)qM3O3ZT{M#w&1GZ4Eu667G1vIbYHxutt|>~F524k zVAHk9L91Pn7p-W0tJf8hiQ5%krn+LKb;U~Sik0k&)oNFQm_yJDjA__;0`nEP zK#{&__Vk%HTR22ZYL*`&Hm`lZ& z2lQn{ltff*C@bh~qd{snDGGrVUg8J&p?~Bh8-r3*VF=hCcJ$+jnn9EYE1AC@CVK?F z3{7H#{LZ)eRZiPwKyZcFFd8rl<~y3ajym_Pts+1gDx9XjU?Q$4&}GUGJMX@%Iq$wk zo8-DlT`2`1mI2yAG1fI_!zwGgm`rE~6+Jl-YLU1|QrM^C?H&OC4f6ILz6LatNp@u> z!EGwZV|s>7!LJJUI2faR!iYd)FdVGN+Wk<1DYRp8O$qp1iqRWzhYK8J0AqxMg)AtR zIMe_FqQPe%17GYLYMmGgKjcW|6^5%QA_n0nsFqmdie_6e1?jZJSZY-sK3W6^AK*t` zBW9=vinDk=Nzzjc)(f{A4#ImP2&(eh@qzj7SQ`&Xa0xI*ImQy8S^-Odhrqg;!_Z4? zE0rT`!Mf=C38P{aCM!QF0y+cSs$i^AP~uM*vCT8UZ_1VUbK%YpGJI6zH9NDFr4AL%r#Rk+qnt3>pgKv8A$m z$5f_gm(ABOAjNKFTM#3hT2dz!`h(Wy#V`x;+$&nTGpdng616jty>8h)j3-*wYKN&s zdZUVcY@ZrNnh8J6xq}elKY^+14T(59ScznQcaYh`VTx{TUdJlHwQa3ZfgP>D!@k-u zf}K0L%waCrY5OJGAcK?{`;Iu1Ru~L(xWxdsQWAQWUJ_S5Y>f_@=8rpQ0#Z_;8T+DT zZLTd)h9{%lEoxJRkX1R4?*o>?K9P|tmPE3c*IU9IDuCjF;GbWmS=hlpX0wt&q%Z&rK5Ff+Y z^C?^3&H0YMvE9T$aChz_#8{$#>Dvc2IC21~d4QRehifc%;SX)LQa{|u4a~L9GvBe) zXAy3L7hd??Skne6-b584%|&(-TBiSw_-`xxFf!xr-*qN%u+vu6)u5hKC zzTEP8f;d86N$@|xR}J$Hbya;CXB6NL*B*3dGrPnV!6pT&q?be}wx3uCh;wTPrVB}F ztA07x{z!(nOwiK5IQR^WyeJv9Iqq({NaQ5VZJ;WeOpgew(ysn9<;D z=Tt4>5hw{fxEFU0+SU-aC`_8199StB8xDO`Q-%D%l^~hHw(5qctlpWeiq8T-7Pmmq z&k*_pgP@{qn$ww$T2_g_hm7yqz(ZW9QaIh0Io49hpIqDrQiFoP3&_yHWjX12MNu>b z_Cps#t)keTIs#+Yx{NfXNPjv!x*sK!~Gz<`polct4BApQIg5%)40Y1kI zPnLMuGO3j%PYO(D!NLxR7;)1vFzq>rbi!u_c$HEP(Lyjfw!xi2fFIIw;m=LGUI+|D z?}UkYo84i0$C@0ym7%^Mq%nhAa2?u_ARW$*O=uh*BsZO_GnJ$fL{b$8!b8%yo;K$q zIIgI1&5Qi>o90Cdm@Ut%Mn#zR(+k6d*1%Za&V5fHkHe@6hg3K>%FRChO-5B988{cp zi`Mog)5T9wiq}+8fn4aJADD-sin2#`o(41_2ryulI<-PzESMn}2C+YjE5q27LaZT! zgb$zdH9O`7W=5+ex{kc&pJ?m}fLT)~O=7$lQW@CDZFzC5H)H7F7LbQ3Z4**6J%Aj{ z9|R#y0haR}OZOJrIP^qvU?yZ){=uH*G}v=SFdT2b#DTD{WK8Uk^^BgBCZxy0KS=Gc zY~K*q6gDWuTyA!15#s@&q zATzRCvPl{9E1CpyX4%RcgpQiY$Rc(-ZX~grksMs*8v&4UuwW1&q7^t;#%K&o8XOqu9LVQu4G!MB1Hu7=o7BaP$c9X{ zusKlvOAyIy!z7Fgh{{Aa!S*#{GzcB|0ILf3N9c(r*G*JZH4wHiQ&@g2Nn?dsLs8X39lEnO$E?bIUM-qLG}S60;&m+FN(wJzn= z%ZjVYOYO#nvcALY`oz-4M0H8Rt|_y3wy_tkY)I7GWpy=6?DFc;#0q<-c4T>VNzIbl zszgJ=&BH{gj2VeL)K`_GFqOByp}4N0-Y#yicV^iO8yoCIb*Z}5+DjRA#np>Y(t(q? z1=S!g+PAQ#5d{?54T}?YRifH1ua_p{C7-A|`ApjxVx?8()d_oN&@QQ|YFtu{$GK9I z^wI0x5iBI5c)P5o4o#{nuU^DDQO}}=#mJn4#{Unqwn^)!S8?2{RlSo+1$60k#?(vJ z?2g94Wh<_)Pt-M(*HqgJsuE=Yf6T5cU$nSkfn8QyUX>^B8Ewm32$Xk6N{C$;zQamJVLFysZC#6+>3_t!u1r z=nKFutV;A9&~NyVe*N8_f~xX`1$@ij`nnRi=EJ(;x|IdRRaG@5@)*NYl_+6r>kAe( z)Fl!HONwg?64ecLEBn>eYbsl5qPAYHO8S;2mH=%~TmOCo`VAZ^WmF{=6_=>w|NW+y z5H9SH;Cg|KOtPgV1;r&phLsf;5A0tucv#88l9JN?0}_d$1N#qKSa#IHA&KEf6%Q>P zS~h%0E1)P_(jWybu33^OSXfe>sH(52F6dWMT(_vEpf0hf9C*1>s#cYj)D?qV`<2)9 z9WZ>*@RG7&B|{btUO0I0(6WN!>XnOYmSZRYrTzmYk5@X!y`Bd^((7O z3YIiBBvuqu*UWENT$d;=t^X-7Xi<3Ga^Od0^V0wOgWIAZHDHd-oAKWnpF~|I!O$8yXUI)&G(5YCwEtjnzV=|0x7btY|2&U(&a>v=T@7T( zH*^pU`YD~uKo}DHf1QxC@rll>U^4CCgd}%uE*c-=_!M_Rg6Qzmz?353y5i;YmnAUCxdr|QSUzO3(!~4v;`vQlvXW~mO#WA*l&Phjovd!`X6Xbc|%RHYR52X1_ZNat&o9gUEKON z(k|=IVuyoaU^XhQvSpSlgerjh1hkN9^uJ^=#YYJ0rHMky-i3u!D&|8&8J54(>Sd3# zcgF4I#r1Y#MJ+@{WNWCg7Z)!}*aK|jt?MJ&#m-#0skfJ-WQg%l7PQWb6A(1*+N#Dy z<<)k5@p8MdmYNWxT*J=a8BhvOuhvw9!>Jln*EHD0QmoQGAi9pQ%NzKryt=-;R1}PS zr8Vu0P+?G7Ym9KCZ5VYb1aKu(%#X zp=nxYe53eU_;$g!E56Xv?vzEr7qFXSXYgaF0OX_ynHcK zJ}P<`*F;^_N@fMH6U9sHQmC^SDNRe5F>M0M-)d-DHhxQrYl}JwFE z{mSd-lPu$F!{O--n9l4Z%PkB~ zzZGzvhjc^m<(PZ-N8_5fl1yu31Tc^wM^QYd_+r|8ynh<7=lD#isZLCXvV(VdnhtkK}$CSVWYcV$m~`SNy0`KSZ{~xmSMqX%hY=q z28?-E5!}Pn^`L%&ZXkHkLfr^O0uzm{C{NdiX6vZY7two$^fF8Lqftg@!!l#oF=-fn zJxA9}&FW@$H+sMlsRx3(5eeyiQC_1F*O!@=fqiG@U(f)wHoy{%pg(Nr{refwc2@te zWgZ@iVolrd!#RS@@C^$Z#>J+dr3YA@X*@An(;v&z%yabxw&pK4G)oWL#xz4iKP|np z;nOcNy0ppC4-a;Z=z1TsKl+A7>OJ)_fW3irp`c!%9|Zsyh7UbI(g^Aw5pX)#VJsE{ zChBkNKlf>f@ZhuZ5$fbR)Zu`7kN1y{46shqhvf7^U&H1AlpD}Tnmv7ba1`RM4+;Tl zmZ8r#4GVzLuh7k4dx5SR351RCjnM%lB7|w7bJ@nsAUoNSuvX83Egzu8e*AXjTO_U! zC?)vU(tTP;H$K-tkTz*pB#?0^QMq*Z=A!e{^w zS)Go3=*A$Q&+Ldk`*U!Ji>diW1T_5^>jYpGAkfd~sQFBPFlYpNSQjF+xiv7TXX_n& zdX5&*bEQ;YslFX~Mp~NngYhYg2kf=Ll7P0LX`g1F7S881ljNnzh~$uM#W1RE zd~Lh6)7u*zjm}x!eBFbGfM_bLN~7Ai&Ah{S(0JbXgYjbYrO?a9E5>X39^YHWU-kE_ z_l=M2eb!gTH@Lk z*x~s{4J({5Y4Wt`GiRN2^4wDwlqAY3>sPET8yndO^RY4c*NFIo+(Dp&q{8zOh#Jkxe)Gds;oM{NSL-6mw8?{m@W{aIn*eal_4$ zV5olwU!K|3*Y)sW)^WZ9D;x*~M%zbN(a;dH(AOn^U|`cG4m~RCs6fA9*nha$J!mw& zaAM3K4CVC;9@(MG;oaJG3{630W3xI3!u|=tBSMXlqEScsNBF}26a2a_X8Iy?f=2g+ zJthRhP1m0q9~TMxv)UH=!~S;N`dA&Cesgr`^yq|8c>K7o6N1yTCI-T@f+xkZ!~XH% z?&h%*hnm@_csR=LV}+Z(=o}bfcAu%|49wbiSy^MG>G88Cmt<|~AL|g_dYNy-v6ud) z@Qf!m3=bS>&GjE19v{y4wOxOEVbc?*_y+Yk&Ke%b9qo$*LYKeX%Py|J`up`q<>=l0 z*;a7F4`_SJJh-9%=O2b zrx)e4-!$zIzrX3F-o8$CeC%mVHgnA^v*|T|)Y5aJ z)-ZHFKiJ1IvO`C#KPlMVjF=;=9vG&kZ#Vfcq4<1$zY*{U1EJh-w@Bw`=d4(EG{=gW zZQ8UAb8>vvMZi??)j|TUWFsZO`Lto zsq;${=brZ~wo+3@1A`AwZBZb z_@QT?c<%X$Q>MkFS@w@)sRSb`I)Rfi=hqAP|c`kQ<(s(`eNzHm1G6y&b&5{2#+Z;etXzLiw9x8)*nE45RdHC;F5iaR%`W~8-J(Pr2`EI1x9%^D&-%#*D-p{9+Ux`jK0CRfKXkq0A1sOWSDK+IhYO+Pt>gwKg5?L!$PA zLq6`ap!bpe_w=s0etRF|M!Rp1Z|#2C4-1A|xqthR@AbT)dboIK&#b&*H)mfxyr5HF z;ioghd--R?fK%_i9cLDTYD|tb8dY*@01Vs zzBTuS_lxJ*+DE7E)7Q=K*N@tbracvkX_L{U_wePs@7=$GYwA}02Mj!F(BL6MhYfd% z#*7^|ehtzehv%n9lrH4m{|xu+-%MByL^YOW&iReC^BZbJYo-Q-_Y-zg~f zZ+N=P%u6SC+xE!DWBTlV`orm$Hcsz<*&7c`Yd?4TKYBedapF0%FMId&H)r;_q;CC` zwiP$scH^_fjkiYnpbSot{9+N9#}Fm&`?=31caLc}|4!?V?*M!U;!9nVpCG=>JBT;< zc=v;G&1ajDmt%x|PLh|`%sUKU8(-!fj&J%sbw@sX9C=6JmwMPpd`IDX48EiB?TN3K zH~rqrtMyQM9i&UoTZH>D_>RSQ9KPf6Jr>^y_)f%k622S{j^Xk6PQjP&rut*rLiZVQ z^7%+iI~l)|b!AI9%~OT3nAA|bV$ErFiIT>;dahbll`nxsKnz2P(lzXW`$1Nb1sA|1 zT39HfyrAB$Pb%#&BGlB^m(!TEyu1OAX}wX2$18(FqHY1om<78A<;ydn8Rp^_)`+7= z*?ny9`BpsZgs&$%z6;s0U9-Qcwy}C8ZEL6XtEyVIggAO6 z`rjMB93SfI-hDZ)+v4keP@UL!Jem2#M15lwAfG8SW0@I4;mXYYy|(l~X5zkg|1j=p zEAZ}n0QR&udH09nKAv{p6ZfS5LVQjusj8`m8KHi0`I1AAhQwfxI^4$kqkUuvmW>!~QE$Wq$(1CtQx`*Kee~+Rm$Ptg2dAQ&UAN32aFDy~>A` z4;WH@)WGr~gUSaC99B-dS>v$A0Ye&(8rV2wP$Ql-@>$tY1IvaC%Inv!U$Wh#ZNkj! z2kAcjo^VdTCk^DMr6=uV_P*W$W+ z+I=0a^V06?aZTLx(!-1<_CoJ|E$-9v--Y|b)6(CK>-6%7`{WB={&R56aZkS|jJ*3R za82GfI_=p8T$8VQX*S`SxIp-L&(3t8;YVzfKrihCe7*PVC;1RRQGCh!PQ-UQzBBMW zjpNyj)!?ywSQh8cbUvfJVirtCuF2$2iPG^)8k|ztx4=`xI$c^`kEQz3L}`+qrlTO@ zcrw$t6^mh5L*5i`c@}BN>!$$~6BDZ&gsW9zfq&eR+J==AmAB5=@7qox#R+(+`4&6~rIpq7KmxY%ahQ4&dCB}{LaGH!;RT|k1uJ@`w$O^ z`^EOy^7`7U;+6l}Ox;-REmBmi)GXAy4Eakzprr9}Q^(uO7sCa|uEl86f?W&@tZ!)L zd9_`$umX!6t-NyA7+QNHW(%(Y_JYC%sp~#4aMalg=CypZCiMs_8d#X|R#}>r7GK~^ z*$E(eZNj^&Zd|eu(~$hlaBK1sxa-EUz+>0eU={@1Zm6rNl9d%@W6z)4*dL$1{24I5 zms-DR0W7t;Qkhr@?hn4dkal|Y%&SYgB1bziKUlT zR$dLtw(}QZ-DgVi6hf?bLErM~vR+j%3&CTmxK!318nO1mWp%6q*^A*OrvSp040xR_ zLPwWibt8F)Sw=cppF$4$!g1LlmASe2lUPxbNPwAOs;X;D6j#+JfI#xu=SoC9N2~ie z>UZ>3^}G2o^;_|k{5Eas=VOxk4*$F|I!0^SGj!!+&KPa`tEbN%v}}yFYs#V}kK8;)8+qP> zy(hgjX7rZ3S9HIv{n%+Azy0#wF2{{M|E1&o&+ls*`^BWUo;3R2J@&3E{=9O`iocIN z&&cm{`Z!REkwKie^5oU!SLy-WXm*0}X;4k>u=h@Io|Uis@cdj@o`t9^IhecuJ+FMn!${GID}jW<`n`uEFT_+k8p5_x`P9a{Jpq?SAUsizj!zy!N`r?$1v?uej{Y@;dYQ&%ZwA zZ|2lt$Jc$e^_|BTRv&-tx5Kj^`2L#XJFnXHhh7i8a{N^n7mjbZC2LCQReNvVbxzTg zkx#zy^8NjmPl*oy`Iho;Zkck!m^Z#$-|g)w=Uw<><2AqRF!k==Ol*73hG)9oGxe1HFTL>aH6Kj9kX{N=EVW=@;`?Y&gm7(sl4jM?yvqP@waRKbYjmb z`49i{oZ$2w#s9o@%dMlPN7u~$N5{VP)2Ghe@&3H8ZkS$j=c@}Fzj$MMkJ=~ah3;=N z=You`~Kzb>=m<7Ok1F=CKP8+cELiGv3wJSxS-q2_s8Ga z;nTmIF!P#D3ts>D#4~38zQ>9`-TdAIGmmN8yY%VWPiAJnI(Xy{&m1v-#=%E8*UyyD>}{jNy+to%1MCq2-sY1rF;`sGPS z4%+_2Yr9@OX|OY4MeeuRa~{d>`@!Gmj+ygG-B;HgHfY719b1>>6gaoed8YGCVkDM~nzUTe9<`<_Nf8#sxL7RHd z?LYCkpKl*nJa_e9oChYX`}y2cPHgk{F1vp}cV+!?f2@64n>TyfoBrc}7&LFm-k(p{ zGqPgdN9PA zv*ITIuTEVz`@Ie`C+t4;wqH!^H~8GP^G|tj@5&9e6Xw@_Ft5`ux2&Ci#GQp7zuWQ7 z`Jc=WRqlS{z4`yR_vvx7U+TW#vlFj6XV!HmF1X`}GyB~#y7&7au*m__J@H?sr!GTxgBQJT!RMdBrc!-P&hN;S)!wS&>IK(N}j*w-Ek+bD=c~B z^xG;g*jigMaM5MsSKN7R$q%E8PMWpn&m~ta?)By1KC#j#9{sdo%+Rr=EAH%nV!LrG zOK0tQux!pRZYv!U9kS=khu$e2vvtg?jXOFe+SSjP@~2m)BtCrdv)HC%HzwZydO-U` z=lc@HE7qR;+e1D|jErpk>g7Mh%c9Ty`krSt&o0}#e*WJ573Y?Heft9+?Oyn3*{~}r z{(jN7UzD9O*7xq3`}-_iMQ3&Y@Z?`F{l%gWdfxC!kL+g_wOt;Z{in_P z;#V&GeV^b5gBNENen0g0iOR(j#{RJI%0sSReDX^VeS7+%mloeKX~(KXkA%x_n{vx7 zd+r-ue)7UsUg`8+L-{9#&t~nmZz_Lz?Doay%-B;Nowcjz*79~0TPs)nsq?0Z74`l( z6YO`_RRpgc+IP^$cUFYYJ$;z|!TS}H_g#O+BZnPQ*?(64XBRJ@Uim=fzya%KZmzt^ zzwY}tD}GyfWNFQ*PaB_B4jvg9vi7kfsy0M__Sn3;=2iXS$zhk?zwP|0C%%4S^xpaBHskLq#Li0VrgeYg9>NlUBOt^f9-_b$J#dUx?RYx1nWRQFl);71p}9jjS( zdF7FXUB}g2xY2)iaN(+&k!^Y|9k=H8nrAvJdG;5V@2y!kcURMck9Dqne)yUfW_FoY zJ7)9cV?VGr)y}x-vG#}e`c3WME*x}OP5sBUxo>EX9CqWOOJ}un1{9os($dN~=Y4QKJb!UBc;aN{rUsQMV zfNwrHZPK%Kk@>6Z&z)k_KfCOd7y7?Fq<;O3I_sfJtLk59crt#^o~!Gv6Ib5+&PgxV zpK<-{Uv&F8($H?#7jG@9e79dt%jo?u3z`Y z)b@>$+otV)@t2bt7cDtIlDNL9ac6M(lpmhItMQZHw|o10^Y4u>|1f#S+9G?|mQmYJ z>M?!BvVtkQK6-c2S<4Mu-&im?t8V4UUFVOuYTNZIk6*Ps z{N$k5SJvKgcG-8^b60Jd-M48(X#A?09m5u!ea>mC5>8Fi9xA(@~WA8t0^0063h*a)7ZN7iimCv2t zbM+Tzb{b!F!<^OM%y_=?tl+lQ!;XCHiJQZZuYU5g`uk>OeZBgtPqvlaGOb|Eh>N=H ztUSMDO?YJ9?f&H#ubI51*W6tfKDXxfFE1JXeK&LM<&E0rqxTM7YhIw;ble+D*1mnp z=t)y=x@PTbbuV;#XT~dQw{5ldc0Dp{-Ti;wP<=vS(YjvS4*mVRyOymxs^ONS4>|3Y zbzZDyob{AoDM5EGtXY)eeY>j?odqmVxgU+;@N<4fXD0p%+o_fq6@L zy=Y!Qum9FBb!Q$eJQi9FsutvShKRVoMvw_(;evUr{+IUx&Qb1e*yyZ zE3%;zkA}TqfmW+EY1^8O@^6YkWN zozA-_^PpYPyAR=>_I~f)hx?<_?sITY+oAXVdXzUV?fz!mk4(F-Mtb@UrrSv7G`l|; z_k4Er5VdA;3a)AMrA?A`mqIVDD;Gx#Sb|`kg?lUXTqw?^BWyUBd1jSQU;C?e-fGqyR_p`8} zy0NUzyG#9MdNHD)f8#Uv-$?s^Drstst$1NcX`*aRyo?5i1{fYrIjv9OyguPVn>O=z zU+7YsiWI3)`l7u1C3ycYhbCj4~vN{ony@p&_H_?&uDM< z?0WNXeJZ~5@#QCoFY8`_Z!x|L@h!o(6yF%Wd`DAD8NQ3~U5xLNc~8IGXW9oPE1c_R zFYS8HZ+fpkMStjw6F!XI_2}h$pL)`2X{W3e>+&dAQfX!GZ7(UWo=+###jqf0+O?o* zu0P#@%4nZFQ2wJ+`HNSylK)=h&q98+TPo@0D!?u-wYl}Bz8wCggh6|J```-$A3b6T zSn-htsF##u(G0MK@vl5l3fo+@+K`7KE2A4|#uK2$;u_fA(mc1T6AjC2>MGM8rDZ8z zD1*le-KUAt;?h#A=Fo}y|7q_lqw-kRH6geKhhTvKL4wCr@!o-z4tjYKkk}!&yTrlYVpwhRM+=bb#--htyj9i)4*>AE~4WA=+MCK z;J=0HTRK|k+E|(b-oIAHRtA4IU&jnE59&JudOkpXYWw$ias0!77kuWwqyfIcz_c>kBLaf1eas3gE$Rp>Ot=7S-6o z3NUB^dSM-NAk-F!u=!=bCehacdqjipAHbUV$7<3A(D++e{?#s9z{lCZ*1*6Ne0up~t7R16}<~MGn}y|D1Qg zYZ7q3LV-U72>8kV`S&;Z@7@Ed`0p0^f0Fkft>!-}{O_~*k5=>luJHc}9rQop9R8yt z=zl^7{r_|LFHiOV(XsR&75+cuA_Gf+|LgR2vAOlW!tu!kwFxtId;4_-0_ci&q$s0g zM=4Y%s=|>d6v`gOC$0yV+~la?B5mrmrO5c`y2}kwsfa0+EsV5dmx+(=@O}#OKBDlA z;kw+EgDCkO#<82g~{A1~2CONIyo9m#S_XJ*7sV3RI1?#wE>x%-Ex{h&vh(;L*tF?w%q<#Qkc5 z^O>oT5hsgpZl0>JleX5(-tjX>Aot;L-+M%s5|4(hM;m&~<@1(F-DR97Qi@chItu<6 zK_5yYy6s`|V2WGvnL?itRuK?TxF_^D;`+?eLF%M08f&u3ZWK^b~=cYg544Dw|-TyPilV@MNno z9D&hG_lg(sF5H7K(8K7~GYKiJnf23_n@t9pNyanIEKj-bd*7aj3FQJxM8t&y`bczZ zK2<(ZejzQK!N$YdxhrVYg~)h1k*?{>D~%|zPAjbD)$ZhXv?O&yORB;h{yy0S?TP#cQjr-k7>|5Vw-;&IQ?gvEd=IJ@{T=ZTGGquAj-aRU#N8JWy zs5T$Q@E-S5Ho6xpvpLu3)v?*TQN%B+vND7yf0NGUdF>NTP~L=N33+!=RFOUqa!BS# zn!3B#|IN7&TT@I6*WMvGE-Sk4CEk9}&@B>30|V>eRMt}qUy!1d}9AT69~iM;g%oCldCZ+ zQTc`~LfR05S<@jaFOr&*A(^ z2dU}eoD>lV6)&XF2kUF@SKmJW4LGRij3URwM-fbj5nM1vu=5QyVL!dB9FlyTD# zX5+q@Sk2p{2vfRE|7wme1=;2LJsB;-s(h!un*bpzRj@Xht$ngPl#tx;T35OcYFrPp z^IGJ7Cdxq|g=j=WNN;(?8KiP23yMYS*butFxW`sY{7&PtD%=oznif-u>-xcxPyNHb zS^rsTf>7$nA#D;&K9db4d<&y*i=vOu8>gpk`4%}QsePW!eJXu&HkG#P9MG6%8KxL& zY*H&|HO`SBz}N3GDG?X5f#1Sc%~g4gYLmjQ-F@l(&yk=_hWTB5mbZx#9G1KBk*^$% zG+h$rey8R1EUy|VikEc`YccE+yl@oHT+H-QzR#RF-q$9OyeXpH2okZWN&D`PbIz%o zQa8n}Q8G15+GS5g$kfB-{d&O9ZYIRr6cod(_qkc$`YL^*z(0Wr>RIZOM%iAAY>hv> zV!{1`&odv7i@8s9S-J)NhU2aeo=;Xj} z*&X|}&MByTdS|u$!FeczINFSoKGN{=2eX*<+9v?c1 zO?_eh>69dzgayu{^shQDWArYvvS7MsQ-#(TVRv4WLG zgsed|Z6CX!nUV~D)$zm~={|ldj+`+X*g-NSN1vytktIs8FR*&9@NKlz%K9F)LQ@sE zGQHgR{fCaWCcMNOF;eM7T8;fAd>3y5b^T+)QxCmuT&vxc!YbL`+!=CI3Kx;RP1Z@@ zVIuB4zwzo`o{ZgJgSds!cR#z~;6djJfnJ&j6KM8X*0kaf55Yz%6P=W(kS`{WcL;^W zJDd-jdykN^L_S^0-G`eqGFfmPFum!CIFl>0*-R7$g*b6pC`0^eNM$aq+m^I=OFGghniCLMGZU%?}js;5GY&R2m_2-$T_1x_bu;VAG{e*rS$LR2L zc~XomfnxL`4|;h-<~ULjk@S2H*!!tc>5l=-&~o8w$&Eu3_>>|`T@Td!eyb-(0#x4u zR~h4!uH4SUx6}@4#u}V1Liv_rlZRFD7_aS`ynjwJGlpYveS`c;%mY#|S~rR zJo%PPIncQ!vbb57kBzE*5#P{$t;vN}Oud|ozJO6*+5Gdk_EKUJ+fD^_ItusGkG)r= z`m7%$3DD#EUN;SAn8vW~w?fRJRP^6*9~pN9h}8?_9}2vEr@?!RXbN3Lt-6Kr?hX2v z+-l^-t&TNR{Hus!o5o$gpU2`cnYIftE9X@zsKy3{uMX7e1Leo-U!1PcDt7XHGd5zh zRkrc5eVY(^hso9RLP+rC$gZ5eJXy=v+eG-A^yslopIqI~l-lhGZb3DW-Hrdr|9@kw>&;RcU45}^|KEUg?zyD z2We^T(AvSa{8ZS97ral*hi0!M<3N|7&CLID|Bl;ZtP47q)*oB_>bt}iFQ(s-_Z{ia z1zXv~+>#_q0ct?$GDzKf3A}5g;13+?3mPe{mUp;HBex z^)62bCshvqV;*u=D{Ot3@h0jmL8mU_*~nW-3kiyo&gGcvwX@s7qs}i2LF#o5T&5ov z%o7P$?A67ni_1-j+lsjqkrkYh$Cd7*4+w@qQ-k*yn>9VA>nt)fMwCUg}aU4(tpJAZl0AJ$*x z^H3XaYFkn1R*`od!Pt_y(X8(#HoCODpfP$`V}*060u2tU zZt=i4H9~3De$X*W`l(DCF=J?rCOjXdmq1%Zd2S4roT8Z$a6G=%^`vHjBCqE?(MW)DCI#zm$snGXK zFX~wr`j1HiP3LsP&l3j6&1}M#Q#evjHMnB3^f~-E@sPVoqH^JFW5d$&oM9s=cV7DK z)2r4D{vDbdfmWT~F4>=tWz^-GC~X}ylqnjcLjC08Ew9n0uHj6$cE3{99#O0{g@BY1 zuY#b1HWwLpcwsTEabyFO_NSYWU-r`Pe zMeca><4UDDhQ{4V4RnOp?XY_nqF$@avmm$k9?CS+5o`0d?1an|DVlWa;JaU7oLYLr z{K39xIH*`_Cq>cz;p$m+AXfF>i)RB1=w1cm_cc(fMR-{h867PO)7c7eZeK)_rnDrF z#aPULO6SJ-(rxv7_$|<>APeMJS%%kd)@QW*$Wv%AMU@|t8K|Tn&W9^a7|qWY!_0vo zac6L{?Ij=7^zNlX4*di%8P2T|c}wSUnSINQ%HRnRWYcfT>U{IEdZ6KHoGVj+=54dT z*GwHn)?-0ifMhS)EaDtvpj=kHkM9u1gaY`fpDqrhY|2~3eDWvlXA{|CLNyDWdw(qh#1dAgLr%pQ? z_=S>e)^2n05KJ4jyAtpx4f`?zh89t^2Vi#UYgE%R&p^uSE@rdl7!^?DdtEw%+GH|FH2eI+Ze#4OLerrCPIX5H zhWJim?ha=z<*r8oxo(yCOd=WobN#^Zij9o%Qm#xq6p#JzAU^Dy!^1B=CFIbIMk9)N zG~w!XMZ2LnGjuRKLY)O#wMW9XRuj(J` zRc28oyp5BT|!3YNMKeN{F$>1 zA07o!Ghx42nY2goV6kWJl~iOXTg%UQd;5<{Si6LQO7!!Ng46QuE;ZsAq!KD@Z zjj^1fr7tT+PNlqZ4_+)Ap5F^g(^d_8%?w)w#E$HGGTmcoUTFzshdq-mboP0j#mAk@ zc5yY{&nTRUsk&i-fYJ})b6OMdaIYBn!Xm9dM8bU~s&33K{WGibh<>)F<9wQ`!)sWK z?liAAP>)iexOZKL6J-JMSJ0#vJ}pZ=TngOwB12fM$wF+-Ht{CW-zkHm;~#8bLHD9S_YyE}K)aZPPLY#?TIt z%)B+mW?x}i*!@u}zI8|@^XHNIiW7*Jbmc1&*|02nj-b*Q;H|0R){Pb9$O&NTbWU*p zcpH{rf#I`5!31AIsIHGV^Tmo6`1i+uE8f9>OMfb!JpWArmHBVH_uu&KzjA@pf93L> z|H{eF|Al+TC;kg3X>R=&PGx%dFZ||N+&{TMop9qnIa==I_CNWXpT1H5;GX9sTQ&dS znM{RR>;K@;ZG8mc|KMHp&Dj-ya{*vQhqU}R-wuK%>j8&M{h4%2y7rt(e=`VA7u-6E znc2U1WQhf{lYhWpy!t&NKaNr1Up(tzaG0QD;y2Iq#S+kYr{?>c_vYe7Hso67{^ne$ zBoOn=Joc_XIF(s9!Ahsf58ul_ICIZObTh7aB+TSrT)=~;3LCD^ zbvU8@7e~vGCRvbZ!tZD~{>3N#U!Dh|)W|0}#Dlq~2o@&Op8Q%4KUOoCXDZL(KD^$< z4}Xid2j=j_BO0yjBct_WN6}!u*`K9e3Ihd0*_L2o-dX_E&+X`T-O+=T8|T2VNKvUfwycf?S@TT(|Ya z8IjJMzWRbDgYWHVX$02 zAWbc-mHV0-WA65=|0DKNYx)^x-SZ>K;+}gttTwt}c3~$oW@9#s_#0QwIr@eYXr*{K zkIoLsyQ}$t2$!ETusg1OnszLU5A)mANhQbrU#t&!o2W94o6*Tg+hcA4S7 z(@Yn?DMy(dkA&=u%;878STHEY4~OsZxm|Id?>3}xR^V63s_3uJ;ZS=KRS#+Po?@gJ zLGxj2$lp@4hT@sbfs+nWx4LGzXEn?RCRMMuO4FR-jwkkunXh^(c*}q{^2zjCPnpMH z_U&-I9Kz#jhSK61mXdT*y(8-}5Xh7$hIZX(AEuMWO>;=)r_x8+(@iF_7P=wQ_#W%? zmbqm#mm9(WCC1Uf?!sAr-F;sqqMt--yUC=@C~4rO+z4h!lKZy9nu+L9N1J=ztIpX2 z{`73DlrEg&s-u@^yJvDcBVC*Op4^90qj4BgHmYMMSxv-LI{k$jB25X4;bo#0!EY#R zZg{Zlv3FZynDJ*2=q^-$66Dbu%SNlDYFSZG@Tk$RW{)^_uGE_OI3kxbgjl*Hg>)*P zCvJ%A$DyX)nIrA2L|mUcgC|3GzB@v=QdllRBL zI=f-5AvJ^9d6Md@5B?!`hu#q5E6yze*6n3GCx&I{MPEE&)n@m1!mRN14dp3G1?7L#s?-yQolw6-~k-v?(^@*>?V zotZ4Dy%g22dJ&_Rxx@h4h+Ac~z>b=2vmiczz z;qt1thrxEv)_qzN)M}El?J&8LLDKqR}@0{ zg>LGk#9DA-#%k|>CaW5k?}Rzov#ACFiUSrRqEM&P37HM(S8irP)3rlU0}Lv&U(3>T{wdR?2jRwNT_w zs#k>F@$MZ#mU8$k`BhPreH6fA)B)i+H^Uy*tSCD6_*NlJD+lrO`Y7QV?e zYpFvkN?ADN)rjxyQe^AxDcOvT^^Ud-J#XTwD-gQ9!6k0wBy${?ajNmPDKt*Kvrxo> zc6jrIGPCx21k<;(QOXF<5A))2EcC-s#|wjVV~q~2PpXyf&p48%oEh2@bzJ7|_#GLJ zp!}btRPPR3Z)ZntQI+qCd=1+)=o^a;IYxYL6yG$)Rc0pKeyn~I=c9A#YNsB%^dpd$ z(@w{}apUGN8QuCO7I!aHe5?UuN29(7Qe}wUqzyP4}R|I2cJ9k?siHA!{KawTQMV4u?VZST=enAD|#bd zm(5mMsI6;dCbeXUEjOK&&4p|ATOM*ldrp(>2P>(fNHn-Ezuu98AsM92FEuGcOU}nv z`I?gkOZ9YxHU~W)>-jE=h5-0s5Rq>9s^fLx)X{jjLO`_0jFX;E(3r)HYis;wPFFvsEyXV?o2vhD zaRkaf!u7M$*JnT31}g9QCObtGZ0A1~m+F*5wjHJA>))DS2EudU;JFZXl$myoKGci8 zC<=!EkdgSsCb|1kl$Y{-x>9Lyk{*9v00~dBw7=8knooE->QvVX#fISrf=B0tGT7;fEBQfynSW7rE;G(SK`_M#_$Lv=K< zd7Eoq&})PfftIF%?`)qF(HtOR{29{XMp64)9*Gfu=gt1;14in?iowj%M3+YVl_b{$W zuxo;(r?_YLfl$QPE$jQlBI@Hshf54R#hnxmrG(p*Qz!n)CR5x<({|+(vt(=5!76t4 zx&|;kev)#&hAMOcmu6!aO|9J=`3pJ*kR{ht)jfVQ#unGGV+xI}kTW2b)zm7AXQCf+ zylq)=b;O>v@B3<(3*p$veu;$CxS4r&OquKSaUx}yWbj(i zmc2E!p}Qa-NsDoobB6zf?@qTa1nQWq5$$&b)gB}GtuIcl?Fyng-t271^f%tYKL%Bj zt?~!lDul9nnp2``kpvvH^8z0iG-85oiaXeHo{z>{kC;3vuwCz6shkPRVtlW^^nqDc zeC2wkj*}>572?9;V$(TYu%lLfLeTnAhF-1x#alaMOnocD!|VgwAI_G?%ev@4L-@MK zCjDXyXi7v?29|4({2rSco1LAWzCd~xPUjo-Qg2+_CMp_c}0!)|*sv62=hD-ffy zNf8C26H|$L)jTkyG-Yd~i;+ibTcKWaF%l;%)?}^`O{4nimx<7myW1`oTIYm~Zw8G& z?(cpq)j(6h3P-6B*P;#JD|l`9!amkC=|p}B&+&>%4ufHgp^s<%DPAGivM71Z%CyDX z^$uyVjpt_xk}@QkY`2-7`t9?HBcxZeaz&6zD_7z?P9JyH?enn$tP#Cf_isxK;;Ys_ zDvr$+pvYzk=5xOAaLXiQEf7VUkk3TGK$lp4DZ3Fx5=67>!wfA}jCddwqpeYEWLmqC z!|#WyB3nRo-Eh7x1iL{r9R4Y-SR3Ot=*($&$ER%E6Hi;n)Qx858zZjJ2Dv(17V$NP z|A$MN%KKCWqB2IwKFZnz!&8=(Wge0IoH@6YyNWNLA&&$SadLyVVd3co)8zaQwd1IW z!{th|;e(x{zOPZfX=psnJIPiZ2;QHmxmc*MGc^8+R%U?PHhq>Cl|+41u##ooU&6m+ zF<6dv*>?73LKP9=0XIB0_-Qfr?5O+#?np-ZerYbXmKc%uIxhT19~U+EB++Dc^am2*qGK2#odE0^H)JSy}q={*J~-JcG1--8`T#)56q4xwF}<<=yh2g zM5HXC&HUIfIniX>QyWq&xx4&di&5!(^0;v-U?QFiZ!y)dv~-$ z!e@6$%i2=8;q(JX>9r|&p==a>szB{gcyUO$(p5)o&?r7h=jfMWoA|N{>Ka?}65p)t zv+toQs66v8?Xn~3W;Xk*U)m_S7Sf{lw_3@l8-Lt?&Chv?JnC zKRV%ZV|yC9l*&s(lM765+k5Kgy42jMLR#mLU8jlJ5w6uyjc1ZRn2y#$4h;MQw#lzR zg;s>*Gm|J2ig(W+(IAU_CPK*$U~{+iur&J8iv*;Yp*cY362oh5YSpgYQ=^M~Fx|ox z^IimtmRb1Mh%m9?{&lfSR7_Djn>lDH6h4G_)u(R#HlHu_h=(V?9e>dy)?pxg7+E~! z$%m9W-4Eq4xFe=xQXpec+-$mv+h#Reok^Z zAsS+IA+H5MihkBHiR>Z|`Q%A+M>)SE7{7SqTYY&z=c#>pQ}IrJyh)KGZ`IbAGxOTk zNwd;jPnmTcE^K?1Oy5-kX+cY~*#vS?vRrqbmNyxHIO@vYvphF|I z9>Ho=Lr@yxfJZO%P9gOtvyt zhrfoz;9zn1fuvRFp(GX~aeE=Z3{&}y%$Nq)%h7?Zp?qp$B4cOM_Zu?rcG5(JDc zL@bLkMB-kA@94#A6?U#mH~2AEHWRb-Hg9Iv^T-_MmQY`)Mm&jVGNc-YOE~Q2?;@bS zx8~ z3P~4a59~f4;(_Y9EU`-m-jU@=}S=QHe!VY>($W?|BCoUDwjOsveTEUc`oY^)$wc2*8n zPBun1CN^d^7B*HkHZ~9&I~xZZCx{Wm1Y!oUfLK9nAP|Th!~x=DXJlt$XJ%(%XJuz& z2eGrWbFg!AFmf<)FmteQuyU|*fH>GWI5;>tfhKYS)dOFa0t9gag*Z9E@l`;`(Jw#& z+us0p1o#*@J^>7H`hDzoc_75#uk`yE_&4BvaQdAGF8Asc8Uz-A7XV}c5CV_{08VVc zmJxu+pPT~Nasi+PAOK*GyPd%CRlj9{_rX8~06qpTO96lb063-+ z9QzF}ivR!-09YP44_p=uuuO1#9XtT=`}x3m;4(M>z;eOu1@D8){cbzB4rDH%uK>^i z;0N#)fEEB70KNdC0Av8D2G9;*0Kf`>3jomEXb>0xUIUN@-~%8PKox*C0KEXl0jvSI o0RYE?27wKL6aWYS9{@D~h5#G^gaOC~Pzsa0CYTE)7#sL8)FL8 zI2jWhyx-rcy7%4J-I5H+%zkDt>U&@PJ$34wQ>V^3RX2Opb+2<-mbv@fckRg!9XjL= z?Qw^)J>K5a|Q#q&E?s%Df^mNz52@6?|4bpT3%qLUf}$!y*z*Vn%D1F z2iIM-KkF>doVse?zH9bb-qiBE#*gj0>Z)w2f6eu;{Wp8BdHt&m;tLL(m+!si$5*!0 zeAV8)*ZiB6;7wh(|C)VQ8R#o|@1(r*v+4YH{~qssH*?)?yOHNzr~mc3-5KAVo$1cx zz05T-?|Z#=-t(^Ox@+=0?{|B-TjO2kGrz`Xd9UYv=5p6_KI@T|ubo|&&-!jo)A~oU z&(4}#-)%J9+^i*L>y_*rt@*s+@-8KL%h$&gpY!alR}-$$AYG;S-`N!F`bHz?Kic7~ zK?eZnGul;OKI`(#x*AHJyK~Oj!2f3HfXpuNllX#}nHRn=+sLT;l%OlepPVsiJaokX z0S>a?)M&bE-PKn&bC<1cy&ym2!s6mm);*Mk<6pVoo+tEd|46I#x~pDy&Ay+Y<5&Ib z*Is$xs(shJ_L{4+7xk~X`pO@B?OrD0+P#p{RjTL7$l~=y{ zRr_Cc%Q)ab6+$1-fchl>i7Hi`Pcr$ z|MipabXR@KecJtw`+|GJAGrU=J><@r=|1PC&))qnUiR{E`73|qfBD~Dcl9;5xX0Wh z?u+iH-8bCl-CNzFd!M`2z2Cjj9d&PWZ+Gu-A9U|>A95dX$J}A}CiiA{#Ql_ei~D!( zXWeb?-R?c^z3z7R3+@5;8TVQDyYByXpL74&J?j3*U2@Sg?udVlPyf!+ViubE(b(d9YZv)nW`DXL z@ve2K$hP>-!24Z(R{^HoD`yz|An&~8cWZjQIs)xSYP!{_0!+f*7YA}H83pX0N!V628VW|L1Bg4ti$FY+g+OZdh37IFqMO$;4YqV1#i6pooi0OFu3i%Q$+yD(j1Wa9iSTo?f|WM=#L^i z-G2p?0?B}~DbdUh^E5Avr#>&5;KILrCjPa_qP0;0h|f+h$H1TGO;(&68i)K1zJ>`G zduC=DqrM?!=#LNc;QDW~VL@`8a@K8x7ir!#!X`lGAwMu|y_}@h-MjNQ4cfc2L8oXA zTKTS`Rdo6{s*RmF*`YHUw2F4o+1)uf?EK4_tSj2gLwiBB{qAR;d+xb4H&fZ~=1s3{ zFqenx7lu>w)NB@0qrnu-cKSD|(ZO^YoREQYexclvL)7F$IIUo0+OALpjU+<;&xVoG<=_N|vP))YrDz$oOb0iZ z>M_lRD1hp}LyZlmW}I@m0N5(0UzIdkU@ls5hFXJZ5h{Ikcua{LvSJzlM8?hjt!j$_ zlmxQIs2l8;O&X3K{f(u?tp6^R&AK0SV;XV>YvCZuY&Y49{hf?E8#wVIv`%*b$?606 z5$-{r#_EAHpRs~D6vj*(9Bt3CklTDY4I>YL_G~wDS{#7r+1jT?GR1qePglxFNm=*a zX5NGpMd~770D+f&Vl-sF#asgksC*O-E);Hl(4@UQ-xa~40-y+xVQXpFj>BVW=YdN= z7L8ZVc!)%Wn5o7{Qmw_GePQv&n+{*U0LA2xB3(5QV9Zmbjlva&!V+Gd*3gB z+i=5ZHqV@I!@*G4uvPd=XS`^=*GfrK>VJ-TnhJXs!m&da#adJ01J-~S`?SNkqwt(t2t7&TcDP|7Tz#>aBJ8?k#)~TL z&1TWTK(+3u-3mwPu<5ca6TP*=n%J1XY^G5*0i09esVrukcPRv6jlK;S41zrPgpSP6 zVTt3RzG5cQ-O(lC%6CmXAT+GbE19vfsNjt=aZ)8+Su(b+^`tEMn}=R8<6==YDx&HX z`Q3-1>_}%BOwy7ZK<|n(kwm%)_(U9<3HaD)snd++$O2J=C=guo0!@x-nwDXftb3uW zWM?rybd~JvjQTer>rA9WUj3iZj{%ECD3WL|eD`bL<2#UjNnf=2H(EuRi7Y(y+)uLf z2Em?%E~^oOZ{P#c|JldyN1VWeKAa0@Q0ckn+CrTV-$VPI13x~@<_`q7K$hD-AO0s6 zY4BI}qNkd9#+qq{zO^5o$yL64sa7&XxH~W`Svw1du2X9ur4{o1q(AkiK%fOO3(wdq z{514hm)aKrM_YW}D|i84Lb-vx_!TPszzi}Kz^h?oFIUQIg5Mubep#)mskVgi^$Tbp zh>G^0DP}K7><=?h^%g&8FU>7}LtKf-=0|Us6-|loW|(7Gq)={SY!Ts`4NT)888{1O zuUF8RKtwiCWyGKUsK_?P#fp`u%~(m!ELp9!$>XP5Z{B0S*vqVgt|{ zaE3~aXf9<)7J=!6O9pLobE$^mXrjp=P}H(Py9a$EbDQCYqV;bVc0}4>-WY4XPfHMQ zBd}|YxtIb~uQ8&cCAU97+9D0g%0zn_4pzD#^0JEYgqp_jZBK;^4c2BmP617Y@S0~tU!2!06#fYLy`2BL=+I>YFW2n7QJN&^p^3Uk3g zG+qYlA{PzXekWF?tG=Xov%&yxBh6wOJa4FW41PRxvL~+ zouW|19oVQ=WqaJp`U2zFhpdfPJE=P1Z7G!8&%M=+B0~(3`D;i_2lBj5E4hO9JFt@2@ZAqK(0?N4q^ZY&cqK*3p zsAz-Cq)2lJs>Kj!gOclv0&-#kwW2gpF*^fSbgWUwZ%fk(XB;Mt3}qHXeAj`{SU|G$ zhs}#ODs>}8AuYNp0LfHYrhH$5jtxr197VpMv9Sr5lzIcHO;X+ST_w{(?EnYOfn;~- zkWNqm0b4={rr|d_iV6b;;PWy!K-aK6mROu3MQbC2vVqtlCh1Y<6|gHTI2!cxEFy@W zx>V(dq-tAIwH@VNO{zA>Qk8-oz)hskjO?r`u;((V+FUMGn`5ckj8au7ETt+VY#7is z{cXWlm#j=oU9z$OO-NSMm6~MLL<&Z5B}_BuBw1+`9MTO*0FQ)LF(fM)bIK5c$e2qR zMr&fUl7R))Bm{kP2nY5n)yw7961O5+{Nt!60YRx2_u zWLPmTLJ6I(T$TsTD7Z))OD=85tHoN9%SI^4HJ&pqh>~2YuEnCpzN|Ep>`MvbQqU+s z%m2or2!evA;t&o?5;JrZNm4+_#}*q%vd}-UD+9zske4(aajDR@Ul@m{)!0#0rLV=s zgYZqbb_9&<09a-&+BlS$*b$2;N#$>~uAD}4*~T65X9P~Ux5Qi~I-Hc|BB>z0LFX{0 z8@A8_E}CJv6FsACNCi}NRlYrrB2mc?FmgJDC@h`#@Z7mO{4o_G9clQudWc1=GfLPL zA?9OFoRA&<@Sj=1GS{Yw!i!4Y;crQ~mW+%{Kaa%RThq@}*ixx`H0ItuS=ds^y)EY6 zk#bXEOC|SM%)Kk+roxs=?wv9Bo|KykTPnH0`(zs2iCFNyR4~=ER0^itdsD7GclZY; ze=en;_T1qgn*8}-`f1M{{*lR_52v5@+~FUa{P}45X-}qV^5@C))1HiI^5+xjr#*N0 zrzd|tm44cjsZKwi(UYl`*3Ix!uBGyGQOQho%1wnWmE0pS_tun~3R^08|EtTARW9|bfHx;&2 za+hN6Ln${Ewp4N-jJc1b+*H_7$$dEHK9+J*VM`_V(U|*q%1wnWmE4mt_sNu-3R^0< zPsH4(Q*J73sgaFMe2fb|6$`RbU15UA#GC|cQqXuCg)L?QksS%qdYhz!6nvBmX&gvd z89EUzJyZh8kg=RmLq+pagqR5!equ4h1RCX5lxcaAUMSMqc~w#i`+RB?Ayw7L5oAi1 zw6lJtBJf+X81scy>7YoZ-2n7h3bSu-fQ+sk_Kc)aUT>?0g!+iBWh*cm>_J<7gb7m^ z8T$Q%MzzyRiIPw+rg%S<6xE7l<%O;!Z>YCv6s394et(#5_b}&#%97#T8bT3+PD;VsukcFO}I86l#(9Zj7u>JR<#tfB_1!u+FD7? zP#QhO1sZ*|+x>eXQ&FWKsfnUJ8mi;~AT*^BaV+E2 z?#qwNa7~N8(qMc-TWcBG(0eE)w6!DJXtF|^ucOUJ3#6rCj!0-z?Xd;}wMGnSZyI+V zAW<5OHe|h~)@I(Z$slwi8IKhJG9dXx-$MU*K;>o=GK3RaG*j-ToLDZliDeA7jpUcM zFQUY_zXPn)2yaIIB08foQyZ(DAP_Pp_Oxk}$n2H-TGh0DtxCk!7%wo%90VO35kzSb zRhleP0m>8{SB}h3;N~@iD4Jj`Hxh% zc!idbcaiKGkP~7!J9k2oz6O%V9n9%SKnM$FpyD8KBMfJ_~e@&#Gb^E^_ zpVy2HdANi8W>Oa^uNtWr{!<{K!bUp@QP5BJ`< zv?%L4)+^utuqtSW41qD!IszuI8qfVXEER$zxK7nmhT`|q}D z!XmV+Kb=_3tdr!wNBQH-&D6euW0V%(LLx(=;GNnX52-=DUR9+j4{y)=7A5tf<=vVr|-twKF!%e!yG|d~5|_ zAB_tqzP^N`JiMThYb{M8a3d_C-gu}T2g~- zGuEUif?YV)rLqNb|0xNCnM~ zv9esZdy6wiml2v70gbc(Sb9Mm72RdgZ#CO2hm=L?mZ4g-NdfZ`O%4ZLpd|5eiE23F zk`0<*_OggrLD)S2Fk}C6V-MiMwGF3OTY6!iV~2_I_FeArQs zKnMYQ7V+)5f%bqDV>_X>T)md z;0=Ypdzkm%tgba2C>URb*=?G4!+B^bg_FO4HNCkt&-zDHvS{OCmK98Rg{*fUIyh|Y z&PtcFPcG-&T+VIznGxE@gB;N91!~Y7@dXD9aYFy6ti?o=ZMl_kOGmdd@W&xG7$Ov* zRiXPHKVDeQL*0yYAOyq`Xe^Kpe|n?P7$cRjL5v$pwDP{mRK$RBXpx3DfifAAF;d04 zcOPD2q-v{w%s`CI%C1FESg~T;RjVZGomMx5JMO1$_+G0Wp1oZ^Zh0Sn`yW(GS_8J` zh5l^m->ekzx03pYV^7REcB|-`rp*pL!mGU17oBiObDo9sMiB)C0Z;}4bKn1*8tQ%^ zXRR3XOg`or(OLN)ldiP^62`=9uC2l`Geam@P96+hX76n?Z6-5Ys#r9Z0xrr-Z{{Ff zG-p55@M2Xpx*(hd=Ot!;BmuM}?YMJ2o{Z*xV}`~88@=}aeHee?0QwGoK`-83puXnI zQD~#auj;sA)vzKJ)IMz*ln4i)grK0u{-tQbJaL^g0&YxMD`i%SBaqh)7Kwa{WgoC| z5fy5I{0wLSGGB^o9@1xcz$Q{iKzXS}HyPb8*RM(1Zd~ zjM89PZ#y#S6>%oISC3^HDoZm>Bp8od5)nM3%_Ym&iKv-oFp7}^WBeD@mu5IDIAf}k z`r+q{e$4~dD0P@yYP_?QRm=ks^+x@-ss)=`2(4EaSN!frzDUfnjd6(`cK9tkH;qEc zEL+CRvIQR8;)}>Eo5#$uC9rjLBKPygRnH|?$15O@5i8`@{}ZIUP%>zyTp37t*#xR@0aXdtM|cg7VgV_!eZ-B? z&AXcW(HKp&XN>P7Xb}nFN8K3XS3uj9fZ0GTG#KhH6EITm)a=X9E_qyHx)6xDT~L9N z+w_DyZxv{Z1ce>b3k8nyv=9Q~VGM2%L5?8)h_Dt~YHEA73qHkj$-5}x@}2o>;@c%V z^F8rx*UtP3ze~N}?&9EXb3?QBkaR1IEwRL=2U!sQt!&`uTsFh3747|jn6L(dEf?=7 z1i`cVG8{88OA?^HN=H%Kw=n5oYAm>cG||jmb(*0x!`AS_**pAx9_$e$kzxmWk%_7Q zQ4LZ}ho?1g7)XES`p1>N!@n$!KM;qvi!w}V|4!u?vV|`}G*+0#L_rlBw`cm9G*Yu$72U0TdS8!EIXDJ*$E zuck2-+$Md#@EcboNaO7VVseD{{32Z7JN)@-REq2Ge^a%T^b(qTlQC-d+wMRuyNlF= zTeu+mK34N6xly--@2@`g?r*ksWQ-`hF=ExI@J;bO@y++at)fK=y@c0_h2E<{lenCP zJiXkm7KC!)O6-#mev6Z(2_B37Adq|1;l;H^EPdG2V^7(Dek`xv=^LzCh^VO+hEsh5 zxtNMsgx^^a)-;)_w)iW`D77FhG4d>4M+T*dx=p~!bd$#{v;uGHgt+h^Wq1%wFh(7X zgunQLd#ND~TD}D2@OT+Tc`)X1qkk#Uw!A=={51lW?B!kPx;vsr1b2maS7;OgCrJ3Y z)$iY_1_k}W9sU&*AW~ILN0>^%Aoh7g#IeKwDB|K64YzjsJ*uc)cQACl(l~Yw0OEbo z@qU>1E&de*uGx$Ts#q-C@t3s5uIU%YFfs!T19EGA#PvU>3@{`UWYIL(tu{s#Hha&v z_LMY^I6If1k4WPHI2en4_zr)kKt-RpLr-vejHgB(g(iD+S&K|^Qb;tbLLyQXGP;!k z%h_&NDk&Ml`-wOvze_!JhPLV8tp@;}QpoOs*uwT&+H_+3Qs5fGUx+&q*9S)Vk@_e# zizmhyIx)sj58{ipgmj6u{x6NOdZs#t&yTL&6C>T4*Lq^pZlI!N#i43|%cnzt#;K&x z#8ggqgNHGhhHw}(eOy2qc8CHp20EyvW{bZ*a_@eyH0B&$wL}~378MgQpR}SiSsHd? z519|aeYs&s0*2Z(v2xm#*@VZ6mAMhcz<6bTSp@frqCH-qcd;qLBhD!53v}dj(Juz( zRi%!`t)=ZB1h-*t1>9g!;%f}|ghsJzRgHq>F%7B`Q))vk-R9y}s8$3%6%8)A(PqsC z^Po*E0{Wf$h1TzoYw4X?N<)Q6p3f@&?UeTYUsjLdj?XUfcPB9YCfdQ1wyZs-v~mk@ z_t5vowt|ybSbYMW?OU&k{N=~ou%Rs-F%mL=5wy>~21SMqh!h#L7*v^#R2lS&qEo3d z@*%KO8V%W}D0HG>8clP6mgWOe<6+118AP>oo>)*XHI>ANhsDjXgZ>Sj5i%=86Alt0uz1Mkbp#O zIx~!Y!I+e$6)^TC!rS4m6BK_=)Jo3puc!VsdLhY$V-IWE^8O#+$Rui4D}Paaw0#Mn zr>QTW%r|)|U@%-BLvp7tHMpk}+=$~d!%Ykn^Br-^&gS>j@e257wQ46Q8Ho!YUJfVI zF##tvysgfQu18S&WbKby?Z$YN%WKc5HoF-r6CPPrCh;~Xf}MWj+D7XOITIfE_GQw8^;f zUJ~uEkfe6CH*bpUwZn&YOAcRA9FsuOYMR(7mKRscvT5MtEgJD8K!Yf}7|m635N)Et zYCI3K0W!5@(e3mP`q1I@gRzQCTtXZ}#33{2(b0^p%!+v*v`dB%kHN{XFrzRQ&c72D zMiDR;ei#zFYz58I@}#wjz|A@rOYVyLnv zbdXdDkkbgA^PdmE=L_HqD}YUEv8vjTAADXzzC zrP6i7o)7yOXIWU*e9_yUu>t!ybXW8+nZ4AV&}$bX>(2a0dhP7YkMe3gh*ub;MiAq#N#X_Y%|Y`Yw3$QV3ELD%4F6=VKKWie-xsSQRERlS!W)0 z3~wqLSoyh_vJbl+IyM8@nxAw`w32y$ly`Pt_Wm&Mh-=i?nK~)k=+ApTqd!lhe@QiZ zW4IE180gN7zAb8CTh#z$UY7+mJZNH&UItq6d|EEl^5(K-Ap*_g2@U*|C^S|sF-Ymd zl$KzQwiD3|){#1bSt0(^mMw&V51Fzg7ks$WRy-G1JZ1;H-^rSX2cyUY*9kMg#?@ER zMLsQr)JqGYVWO_%(28j}n&%op1dL+OXjHWLbb^=Wo~EHc6KH;y{)-|dS{mpcfil*? zl=pkl3ZXSn;63dyo7pN1cf)o`)rnF{UN8n;UyEUIt;Jf2^VpqMVc{rI$Bk=1@Qvq0T-Y5>B(;YUOUIc!N!z-SR6~aXUSJAr{tQ% zlf0&yc_W;ArJ5RU9xrjD(cjC_SIIo&+1Mr)dp2b@JZtrg;{$C(69p}aHog)?q~w7- zm)at0E$5ZRoAuhncItK6jGzaY?FZx`UnQpm&1WnXi|}dY0oja{nVbhTp-QyMJV^bq zxd8o|9IqLTv(bo|%t%L(@}-v3F)arft|M7Fla#hTG+>&JP7YL>PPrbXff+glJe`-T zmcc_iW0W#H*)41e;iEW(Y%LK=ekT@8dwrN!PVy-AL0(}OULmfuYVj@!X4A{NB-?G8 zV#fFcEO0DM_g#8I26yU-th__d=2qX|nJ=YR7QcJbD@)=DUNv$2jkA4+5B4`Gw zm>Xw1I>QClvu?RJqkwzmupkXO`c4H1b!MQZ@=dlp*6b4jn#^ z7Oqtb`>PfJttQ<>1^2ok5?eZ)el0QKwg8Ggct5GdZ}zyEqKt`cE*^mtOnRHRHVLcB zs!*I7AE7zOx~*jcbamyj>pA`)L01-TY2(JN*ule30O7|yVs zYbB(>b{%HKM*hJuk&Y(E2QzlMb~FQcs&yhh4^y1S%?&(U-yOtr?1NBO zdM7fFJs`H4vZMC$j!agx7=heqoc_YdQv>q!b?u}?z`F*@o_=x(Bh%-j*$bqo$#M(= zcLEoLDwlc8{6rp#B>2P8jKTnlSqpVSNfhIE(JYKTLUA`OgKbr8#c+I)7EW}K(SXj? zWJ~I=HG{suE?bUj!P=N->J@azV(r7>uhrn*ZNWrgE-4o|9X0rs!Ui?Y=y!!&di=sb z2N}sVk3S*$&Ab15R#6J(;4{b6jhD7F$JJdp;SF}1LH1(Cn3o?szFGRjKsjY-O_6oK z>|9$xd93K-D*PR`MXm2kO=!XU!jZ1`9v?;CQg4!d3 z0Y&vGoNo$))P7VJE!QL2R%9{s1##U4JfeSWeLi#(pbaf$zL?rL%tQA55OH?Nyv0uB z<_kb~K!ekctEs65F`^Ns7mZF4a25tA?nUz;h3%w;WOmuE?vfEc13(wv^OwwQX!buN zEYXGwAFz~0OzF;1NK*(^0Dek*u1mxI=$S&vhR8Q?NIiOhK)3hmz zP!fhfVa}Kgzf&);g>%NznEK)E$r2VU+KwOwn42eAdBBz#{fsvMruK6|Pn8SG2XfI^+uHL_5g8VxGjHfl63)EY-5^s67aPA> zuBEAltbsj6jtth6m`~`N;`ln~TC=-2avVf80(QUw9wrd8#*AeTXFrV1b%x(F;U`D4 zTyDg`Z3>2+SZ&x-c%)2bP>*msoGqqw1r9hBchAVH(%{iWf`A!HO%*-t=2RO_YpOfN zteT+6bTs3wRug{Muy+XJg^yVgZHbp+Cf3pv2u(9Wg(1q`3>Eff=;00&V0a zS7z9_S(q7j3)2nK5<3W}h)GTEAL)Nn5<#0O)nm%p<)DakXzI{)5tE}~&+;U4qlISH z=0m0z-T-vDd_fc6l}36Fh|B5==cg-X{Jv(N~{YPYaV8%n{`I>VDFzvvgD`BAaX zMr{Q^3}<14$R?RWO|L}BRD!A@802DQJ1OkoeT=Ugc6#(Nvm@cKL>|Z|YjirL?uOIg zNb_s_RZN*s^TiBHb~i*-4;-y}f3qzc9XCD;K!6z->3LU?!RtZ98l0YhSu-BM_H_m}wVljt~1U zhl?6AGa&LC;r!9yEW{b}90OPs2|b*$b$ZsY+>5*!2@y)5gQ*}BwAd3eEv&GmiZi`K zFinY`5%dA`@?d&Q&*LPc=Vy(cIpS^9!PDqjSN}lI);nyJC`Y8InTU2vqY+*q=wl)m zUZLnaov7rM*z#tLXx33jB;6HBuPM4B>1cNxi2p?o!#PcJ%Sd`1qFE$8SCX{mKJt1C z@!VDaC6@z^0R{@?#nATDUXSrARf5zzdF>OWsPz|#Etzl7wII5w`J#Iun0c0@^kaS&ld~q=3SmgQ#GU}k%v^N(#Y_i`kf7c0>}SwWN}V~} zZuh(W^YDlr1^9%tmP{pQR+P*{Zs8Uymo)D1fZ7UM!jsl!svXr4)*LgGHyBl99D|e7 z3XE!Ebm-YgEQO3dl+q?Q%gpsarZ@oTn{AlZ`mmWS%oKI|Gb10a?jVjUsi6H z=G5LU(OSa&T!fpj7NrhQ8r31{Li8s(!7fdbC0KIkMCoEjbAS9n;Vqru2=~~C%U@3` zFPs-t?jEqUAQOCSHyn*YmuV2XPtn# z9g&tt8=MGq*hVQCc8=>pyzzfU`}lB5y6$YV>GI68H)*N*cY{!ASnb`5-^y>^z4%+i zs_X6|7`$^i-4Xu#N>I*@4|Vy-<3d0=^@JuYDuFONRK~J3$yaV2`??@hI^2S+(Jl`Q z8oGj7oHxDMm>i*uKSr3YB7gt+@f=cCZ5yMN_f({{|7z+&ia zF|l|r2TLDfK8uJABTlnk>bHJ1hH)n3u%SiqVXUY(?ORCd4HZ?yx;9WUogr z@UuZAw=Z^<5+Vd2R!hP(Qm5?NC0AL6m@6r|v8i~T2hb!f!Hpg3L8;J67ZoIGNGXPu zWZt0+7u+#nVX1zcC_G&MW#T1?V_jb+n6>NIiJcnY1|Co&ra-3zjmBX7Ci%qLL213Q z#Avy(n3Fh02o$V$zwRf3=+kC}DF0-It1T(T-K$1n2w`7VCbq2R0qIZ9Kg&VE|#6eL*%G|@_RqqlSVo=XlXO(1V&nxZPCsPphgd?R;fCSNX&n;MIN%92X`C`I z*hyLOHN?!w!L%mURxZ-Gf~b)W(_YKDs@R?^sK`>g8nglN>)0%pEae*uH^Lx5m$sCs z{eL z(h+Us77||OE8-{ZsJ@9)bzS~v6){J6!2#71PpQN2^2yk*bO!((041QOcGMzp4$Gb# zKddvYK^4Gt7=c1fEC;cwsL9fuMqnLu+eHci{=&X)hw)jb(Gl#ua5HS$@VDs-2#$Ap z?$P0_p`AOY%!+g80u#r8no-*kH^OfXQhE~48aCsr4O~Fclik8G2Bu>jQScLVZ5hVs?{V2GYM1mYD(-y_6vYAc8Zd&IHq&jUIU z{f`DDn<#;aNOnTO0Prm=>bkVwx1oy#o~OVFvP(%8i7>!)$L{Wtc zL=_sKoH=A;RdCa%wyMp@$W&85L+-?q4O3jBp&?K91z z>Ih?k8XFttk_fy>kV(#w4bGsF1K7~QB_}_CC=ps#X`M?AL6MGB3fUDpS_vJxIH0@% zBMy^AfTq74;lFy<3gc(e2$NI)upMfJ2@qZxgNZIPt!q6K-=JZ>LsKM&l$;q#2?xXV zHdibT`2wU1b!w(zL9WcPrK?rI(a~y{mad}JeTUqU5*EFIFByZ%61s2@p=9HLjl#6; zcyTE?bDaCIC6jxgnYehY%$DM~@380}y9I81|0y>%G;;I>w13XE1@84TMGduQZs>F| zA!%@zD;q|JAWyX+(dugeG6*`aU*0E~iVs4I76;B0(2U$NRja%aSz8(%PPf1{%OvQ} z?rs2eELnou&dUIRM3gy^5m9liG2zJdn!50_x>J;u%QU$Sv_O5%M{5gjV+MXT!@Ylo zrEvyv*_N@UTQ*%@{HGC(FaG;P1FeK{YP+F1Q9JBpqgs$BwSY9V6_s%+QRKRXh(r?^ zQVT$8T`fQoM;=AHoo-at?L`h1yQU^M{1^Z{QJR8q9dJ{5^B{QxPN>I*89 zH>nGaNGn2yxGZZ$ouvdWVs!;a@*nQ z{vgs5G+Bws_i87Yb$`-To?8&+(sl%RM&e9U&fzFn!J#>!KJd@J;7}q%N?r`AlaeP* zZ;TA3$dphbBN>`1liAY^*C`DHbl#}j1&Tb11h!_n!&Xwb84YvdLwCS>su>xhYgOG> zcN+k+=`F&RVXPT%I6&;O?Ho>pMLS156_%JxS*~od8X{2E^z!tgybP!m`-u+$AC%(J zSPSwNGycV^1RTBVGB1WI6-KS2!_=UIddWcKVIpGEnyjr>n%g;Oml*C$N1>P1AYC<3 z^HqZ#uNi5G7%)-^$LO7JA<&K%e3Q_DE|{V%nIm`{jN!zv?5Oe%SZJ*(b|Z^f=n$qp zP@s(!(v`=Bj~5$z6`&;*m?{hCI_T9}XlpFoOJFeIAPIb&WI-5vvBQWSGmDgoF}Id! zw|e7NnFX!gm%1Jgj^)VIRhtSLKhq3|5t`baM+_m=BGqI<0vgiTOj|U&!%Vbu+AqWu zwik~KVB82R08_d7?mnN7j@&2WP!q6#n3E+s{a#1dPR4q1fn-hi zNBKHU4WMZFL0kN9_v`%ZUDC|D8cdl0mwykcaN)AuMMwUBEy&UPb)f93>)O4m0cS*ov*E@= z@!;79+0Zy#rW~)+<1tg`rj2HYx<6Vj2%3?z*Lt1VX4Sd%#7_Rmu{kT*GME)T(YU@P z1PHU?+y!&A&W0c>y$O z@dHw2T0qfIs=gr=)1aerA&3Ig+r+dOM7SbOVpF)66akh93oDdg;<4FdCwl*Hu29F#6D+42`D%(5(XF)oVP zi{0#yJA+_OZQ~d$+cJ&MAvT^A4cOvJHtVgNxlZ=*K^rD!4TlBw`5C!%;#EnI50<$$ zA*v0qP8-a*nx+~~r&tZELkD}Jfua^LZWt3=3-Mk&*2_I&KklfbZ6QR~8GK6Nn#(ql z!rl;vqgwY>k9O6b!c4$(EWz0Lx{|e1H0K96s7?84sAmS6>lXfeVYcBj#|P<%ATc#@ zDtt?8u&#z;>&b%rT(-bsuQg7z0Rs#&6Jjk}tYrbGJi!hk*b)tpkZcM4y13*6e!!?g zhF#^?{lE|t9&JJwX>H&IYc42LFWQvb73XK@Bwh+AC=0M}P)~MasOi4JB9XPyH_)uK z;1AhF8Y#t9dDu)}2xHpnUkEeJjOAFnZbOM}>QUZ`e0zoijTjB-m0aS)gH5V8$&IRx z)+q5sY(uB}1vkFaY^>QbWY!vnoUg9;M_$RqO12k7I z-zPCC`M6tvn~M=Jiy)+!-z<*i-=Z*rF<`UYRomiwp_8&(gp2Y&o%@(Zew*qW-mGeN zgNOG1TX4P~jWjRvF;Yr5HE}H@2a%Rk-28C_t)b9iP@3qT-!e`)fw2kuk7=E^esF1# z+qtZ@NxCgPd+bD3wnRwM#m3tT6PLLN09o!9QjQUOT@ZX)P@wkHulLXE$QP*yF5S$e}!}5(!GDOLfRdm%PL_`1>%8T0Iu$$Aq>4zjTy^T{0VQ z1st25N*W#OuR^_tBCl;=Y8KW21K0vEQrDqwlep%0Y|-@BfKfL{YK9fQ|@d|4T|%O}l{s$fD+|dEz^J8yss7v$vIF zNecEw&T9n_=_?&+&f#QfYRkIgiU_q!hHxx94vk=Eb;ET5M*s_p)8L@KwUIj4>MXZ5 z+AN4kH*M;^AQ)+fLESKvD@)(+NjKEMJJ)=DO>sj49#!wrZsKUl}VT)rdkFEEOY~=x-gD(-3CO5(6zp-ws?PB4!rtNK6i;L58_B zIMz;6!)y}cjtOd6D_TtY`dSs^Rvz1Q8^Nqiv?wBi78_!XNQ>NhxF1uzdKN9tX{vLj zQ6 z9Hbi*r~Ofv;O@Ek!P)XbuM31$!Wghz(cTW5{yyVM*Jng#zr*|tVkd}F45jTL^woi< z?31WfHQU-!P#5&5U`9dalmkl?G>N?~IC^~W(-VwJis#>>6RE%@A)=_I2*xLCGUxY8 znWL)*Ocd05WQse83=`alKSaa2aBsbBYg7&nHVr_!O z*1ly>kiQHHhDH+Co~}g>g?m29ckiU&Lg{%wImn%i3b#Kg3rztG^>CU(v#)(*G=Z194jHF#ms9&9Yu z4K@{XgYS~$MhFltCe?VZI2&mk{uz>%ukOjBAlPUnFa0n{#H>eBB4S>|L#~sY!DGuR zUL-lQejnA-@=og|HJC^?Dl=(RE%*{sd3egAPS(?cq^#T zj3Y(?FO&k5>k=`^B;KwZg*EXFZ9reqA?+iObt}HUkypOa4(Bx`a#?~vOcVj9LSJ$A z;2f=!@SU`_b9VT;_6-a1;3*`b~i5F+E?H2=4`PV^(nL+?ar?o$pcpnjQXx zo@@b+(kd#UFJ}N{w?CUZj0w^SO%WIQjnzdd<~pa#A(2NQ6fRI86f5e>@zw@f$fPry zMa7Iqy`-=kK_6tjkz*9*mA>BOuCgp_)3;t`WiLT<$H>8~c;P5K`YcIdegCJ8k=xQ3Ed6VizAmO?xszrBFI_>b0443RNB!P2fcLj&T=FXN zkv&?$go2&vV3M_CSNJ8E~m3pN*$U8m>RB zyhUIVFkYtXbWKISaA$s=W+Lv!kJ-S@M73f!9_LH7&yO}s-d-}ywr1JxzkcG4@BPG2 zANi#(XK$pd&PZv0_J!Yj=g&U*=*KU3562p2fobUg>jnv-N z-Ak;`{vRo||7ZG3))74`^T>Hj>``ZZSliXUpY2lI_tSo~2GSrA#k3mOV)P$UGs4v> z$%z8P$@2V4(TougDqKx0%8wB3A!*xOrTcp|$u_rAGF4%Z&8d7cOnjVVP@KgeWGtQa zNe(^8gxtnZsvv4DJF?m|Hw)N1#no2VMn)-p*bqE%ZDi?*$_k@18mik#b(WfV_75z9 zRoE;dt9!Pwll{T$SK_IAWwK+6Ub!PSaUIqICG@yHKiM%^e~1~mMYuJiN(`N0wKH-w z8z>BnB3Ok<$;aC3{x@0Ky++;T|EN zj6x)=2vd7_>itUlyqc9&RJ(Fq5He@#0!OQ%C~_BmS(SBtHO=d~0JmG5XQ$M_jco0# zqg+d-kC#P@x)ebM)&CteZal}Vh0kN%P`ZFNp`-3nKQt}?w$V6s)c9snHiM7Yi0F3< zx(<)cw%g%lTci?Q7f@vV-&0@8@5irr<0Vj7mzmz9(cdgiOpiHsrIZOAWBd{veTN4c zOHO=UMj`ugl!j>NwK-Sg8wOeAewzvsdP>Euz!2>s4fT&VYz$J`nUkBKo5;2K(@sb* z;-J9&%qQ^}n}X(&1?8Y#ZNo+!&euVm<;*!VaX4x4oUtbeaLJR{dk%O{ZvHSsVMa#LZ<6f%<^4-8Wd{ zj?rl~e(1h2aDG>k6L2lERJ%dUt1{WKMU<@2qNhEiuqja(qkrLr${7=*_B(M26}e$J zp=6Cbson~EtvZ1uD$?Sr1+}cN6<%v^(-h(oGTh6Ybu5LM$V>@n9B~zp*J~SH!xYh} z#tLl^BEoo*+X&lY(Znv%-GW3>Hc?8Ums;vR?U0m-`f$1UNPUP9=%VL$0gnPHq?^f_ z6c!IjG32rwykId;4qG^ut8`{0D2WQ%cR|KA4}|TqN^+y`0f@Cx){T{LWr?b-7B^KE zoC;LsCJUHV&SPcEUla3HteIMgrCnHeAY5zZnL=9`3oe;Mcan3J)*)YH`xiv%0~n}^ zCgc3zHyUoX95p)~41G-VPg{1QS|zMpn;n9$YFAnNIcfkBLGsuQ}i|?561uvg1WTXrJtdi zwI~SiteJH6&KY9SjR3>}p@GIml6ryol@Ex4f_OTzLwal+v|i;=m}rqgsU@&i3sOe} zi20eX%Zd+4=kER`K^_&8H8Pj0Q24uFB|mToj~|Hfy1T_TF!53hm4r8}OkG((GNy`y zzO`rM+5*-_)pCDDn~m^ZK^5A?L>_cJEi~~5>aZcO{T&r+xWJ+8rq&ih1Ux|w*9~-- z1xH&VFL1rk{RLk;Zva*1qreBKk(-(!9`gfv7ST#9=&~qaQojRZe)O~9r+{kTEdv)nfymAR{BfcMm70v60?RmZ|6w?tJ52#aw`Y00FhSIqFN)dbKV#3?%z zg&zIg>}o77Jof4Yg2mH4P7->?{ujHYFW$eH>01!3aD#=zgvTitOHJexRWBPTCsXeF z(*`VD#Q|bT1or4$i`~=G5Pd-|sH(T@6zzgf4MbX_R3dFJGy+rP&^CZ^dv?EIwDZ#} z4g4n&XTyX8^7;N#Cg{-M$AT`8I`bXIYKXw3Ge4kMIneFtGREl<<~wjEd@%K>Q@0I! zE}xDfX2l@G7)>G+IBYI~)m>Zx#;~wH$iACOykT6TU6xoAOE417)Tln+M3a4@tr)4e zwd7Z8;+GbSebBGXEO+B#fEC*o5St~vQOl9~v|k;*(-tocOcv|2Eh;rE>K=B9xu$B$ zlzpDuG+Zrm5;L$)z4Oktc6)aCL*jXbz1Wg9kxB@tn5xM5^sTC7intQ#`tIkQtH%JR zl{3NxWUM9f&e)*|VQ<#EoTjqC1;n%h^-6WtGHat^=BbpMpbpgi=vSER0r?WG_5)Vp zb&Y0Ble}isfAdYqO};dGdwhl?a$#0i7A*axhV_?xyh1Of#zTY9P;3y#gpt#jV!HQt zd}FMR>ez9+TpOh+nZ-g13+HlRQ=5V*ohLSXt0b<1RlN-008_KP57^4}7(eSj*d6TG5__B3%*nX#V?_ zexM~yEGTrfY!InaUFWGz50{;WTh+?)UTlR%mPInO%LpGGn!v}KxDQhzL}Vgc0} z8YuQfqCkw=N+cxT+dncyUreYeArd={!Kq>@;^MPxS`ctTA1fo8pfRW%XV~Q~T#fL+ z$^@aTI%h&cMAa&DRs-w~BNq16EAeFd3mT_N>w0`bI)z^L+d6iKFBuCrw>=4V?CLt; zqd07IQ3!8Bt%!<{W^>FWL(S`jiLA%KzIhR@v;OQ&QSr^R&mTwoYHYU8{W ztg*ZeXhZs;9f;Kf>1G4bpHNN=KUOe{q+r~g#~3JjTdGcEyY9nN`4l3=AEI$Zc*sM6 z0y>aW8GTW_z%@Dii)wT#q{W8`kGx1MQMK89c zPT+C&Ls3hE;#nIRn=GY-UR*TnZ4}dy*xRU3;c1PP2;Py3OzVacYeJGjQDet`9%T35 zCH_IbQaRdb(5cW>2V81aI|2@{@MH=4sQ_mWPr(Xs)feFH)dBCU4*2RI#-R}5XpK&S zZ3}cImUX|2&KI^X8+N(7Pm8NQ4#7LOm~k6bfuY_ZU(jxV)@A{BC|66xdlgxzcI)c3 z9MBts>3r923jYsT_NHR?Fv&u@1|=n88kC`*a?2Up23nlCY@>3?V+ENZ@cU2{3J#c9YgT^T<^jkw(ODY!^n{X*gjLNkw7C|N4c`86mCyjK}gD_eb4V$7PfGe6C701oJgV3Dm z1IvJCS2qTpJMC5jUY8bY3zmS#yl^_;rCpv1_%)(uUBLxb)_e!RGe>Kn0RCOJaejbz za4>72Fn{1dY??0o)8>~wDl^V`mC<<86%9}C+}9-4NT*i{G&bZk59FeK56`}VC*$dP zByywG79L#tw3!DcqXNYUjbanOrnOIGu#%nZS!LbC{h`GV!GX49r{Q$<;7Q}t(pU-% zq&+;5CRRBy!Ob#7ES(``MXmps=WQffD+W+2CL)>;=ZKq-T++Uo4V!F=)ALXWZ=2XT z^U%GTjw=ooWEJPv6XlL3Hzn*H+3jw=Tq?f<`%U(68gdKW)QMku@!w?|i`GUMpvn9+ zIj+w!RVbb-5ZAXZkUQig}D`x~8nmbsq162R}$WI}#Iu~*bOGmI~R z$4hidxTUxAWamPdSn`EzF+m}nvE>l=Q{a4%gGU|#NEzb(j8Hb1Q5kAMB+o-FR=Yo( zHC&+VbH^7`PVLQv&mFo*@kt;uw-^>K*JAlka-&b%-l*z$G|C{BHS8`Rt;6ZVc2Do3 ztyxfO|G?q8jm%LSr*j+HT93y$$sr@2^+ju_KyAqCEJ~6;JMbyTHa4*j&?DGNqS`EE z(zl2T{7OmSbfdPkU<7SNM1?}9TLwT4Ydmm^6bO>95f%Ku2`c8RFd6{i2l7+0@gZi| z0t!ScNbXd3IzEjcv1BQ09rtXgXY^k>T1H6?MhpZ@PT|2qV;LnWTx5chAQhz4=E4uo zQgd-$MMMZCxN(XHri}F>0EBU*k?q+mBW3EbDh_kZLD zZsox$Wf~b461L*nPFH&h%gwAVdI@OMULE8rc!fJo2mmxyzO_BG06<;znIe&V47xIJ z{?xu$Y)ad4%Ek~RK%%&XAWfwZBx|fJwKDd|lt^>SlpAP<%B~p!!*+Exeqqu_8!~v| zkO+r-7-YyX?(wdpJp-oJ7K{cDCX0y?`54X{ns>_-J+Y|7StSusBTR({?54hxNne|s z4`c}h--=Z08Jj6`RAW4YGEu1hFL_?N&=d^&x`U5e2&|+9zJiP-@ z)&nLlyE>TOdz${q{~+SOv3N&{_2qS!#qNl;^Mcq8Nj4p2y=c~M>Va=dgjcWn%x@ri zLqArXksX_nYJ$x8htSyy@`5Uzg*9#62<>*7Td=jMPaKH z>19FLw9f{eBt@dxWs?RYmibJIxwnn{soA5?5+I4gj~GDh1dyHDEwe>ecUgA2rhkT; z&y@)s0!Rf78XQ;q8WZHzeR!W)6y&KdTGKgYBt6fGmm7oHv-?5;w{gw$TIw+9= zpp%G_4kblb>#{9#S^rL9JkgoS;wT&Q@Joh?wEoPc4EVKR$sx z`v8k^W0K!$BTW;+7WT@+C+eM~NHmb=Q}&5^Hkwpfo!t`=41cvKl-E*It@3_Bn-bYS zxsS=XIm!idE0is*K3cnL0?_+EZzIO|pWrTwPryy6Vks?PP)J(EF>T=P)YlaRl^GH& zII)WRC>q`GclE1+^UaKB5!R1)IMAt7j657xs+qfUvpOdeul&CFb5a<`|4dV2#=@y{ z;+-zD*)iXai+)|waW_<|j_DJM*wDR0_Z?e82A&rl_#n^nR>D<}5&ylMmr0SqZ=Mtx z#+Y08bdn9__=qbnnys8jiyu<+^e#0+r;)fVzy@o7kOmYV4YD|Z>R_Q7g(ZLMQ>u&t zR<8nf&I9y(GnpEle#7i$_RJb3TQv(0H6*iXl{f*T3R`T80swqg=dBJgr3Rj z@oSou`#A63<|od_CiDw&ntRQB9zaT8K6!g9q=*Yw-xRI}I(cJ`sX-p{L57LSf+VsL z{wXS~SqOGZu2yC_sZ!__YQX{WhPmzbgA0$^oG@TnwW+L-T|8vT1DR=yDI%zKGHd0^ zPLApD`t$E3R$kVL1ZjCAPLXvVboDT*+I6`Udq(pUXWE#mO6h5)ZE_XM%e;s8{(=?7 z#uDzQEElzgFaMn-K?~t#AyK@@*54=Zi-J@66&*1?{JXLU1vZ!oehY77CKk{tTZFIQ zOuOV2qi|TxhLV>znE+wV#L8xSze#QK4@pg?XvSz=`Bt_OeFCe0Yv%kqUT~qi&DN5F zlw}d17vvNVK4Aw7p#b*ZLVsD-eXDL6Qa)smTZ{s?jIw3c1!86|$ADxpQ4E5`KtG_T zR*}Ws6lec=H^zpt*iMOhw9=$g*NyNjC+OP?Fg{fsRq3j#%6qJ8#>o~rr`p`4Y7knK5MaeX1zIv5AQpKfNkw1Rh4uk- z)YgH07B;Z}7%|{$^}G}Ty;{9fHRwkCZ=mt@71k~53S&dkaZNhd!%W7cgwBER+>Ot+ z7kIVj2oF(XZ|EP8-3S{Nn-~mi3=f-=j2q9QCUXaPg-a8}m;`J*Lh)$mPMIF-<-Ha0#390TTjqgN-jmL%|@ryu@Z$rjjVG zlF%ZLt2iteO63%0qPvt(7N!!_VV9G}$OF?VU8o^8BoZHCS|7$m*oeM#6QN?7rWFm- z;{<^g-xbBVj-*~(eW5a`jyWCl$*>p>V{QjS<4pBkvzZhsBm8N8aq6Z|t7WT%%W#>P zyeYjhTm}O*AlmTclEr|Ixlh4hpumjmnIUdwJT_TYYhx3z)Wo*N?8&~$^{?m`m`wdH z25#Y76=vv)(PO)%lMaGkR*j;=CJbuBx}|eU*m?_vu6bJ1bl6b~C<}TjgRj^gPON8= z?7Bw7TzAyqhnf8Vg;gLyWFuGSHSj6p1nW?6giuHAfrF{jnt!`c?<3nfbQ zg-&4d{$5-6EG8aNR4`=yq6tAUN)y#J&-U7n2kDy7vnV%R0tm8dwoUn%;JSYYZaAGhE3t z-ZfD;d}IUd+AI*ZMuTGG?X<2qJ=$RYbUBG8O20|5&f*V0m3fAGs{P3$mc9U z#B)Ef5Ki#aC9c{RL9=2GN=e^yg;v?T|Cf|NSrhc~45aH!rp7Q#E$=>9U_*Td)jh}9 ztPgQey=52)8pB&LNf{{Q(0}Sp^JV_pa@?8hka8%UdDvX%pZZlVEW&mAGx;>jnYyYm zLqR*DKwjlB3Sb!nl+XRto3PK8cQ4JDac`t3zJi?8)iNB2)G5Y-s_rPn>aiT6?x%gz zL)VHe_p4~^a}wef6PfLPqW!}(l~R}xQ|nmiwLTOIdT;F}YHo4Z(Bp0&_JIr$YrfU> zc4j>JSnmZH=5bo7K_GW7-#nRnY1Yw~ZV4mU=@9kdv6GA|(}(89Nl);hp3JNjRjJ1< zX`-O2#On_X@Srs%82v7~JohqW3MPvNN&xzPg7c=?u=dTuWM#rJhD=I2Q}iF@*M(-%X2?|*9g z;stGLj^4@l+ZHa>>*7&f|734`U*!G$`|bV2A6_>KKN*w1b@3?t-Jk!k{dnr;^Djk} zK%oRUv9I=tY=3;Jz+wBMx`$iGj+wZYCOXoe586MFzmWSp{ho&px1hBMqK$L0M6StDG z2(s)5Se=NS?A>lAA#3@tVxzTzz5njXfxXXu*9V5-sT$a0HZZ?pV2^NK8}f<+`-YkT zPHAsc4v)Bhq=Bh-Y5m|sH^}Kkfp|P)t{^A&n~{{ZWuN<)4T|r$0u`HrNO)LFY`R#C zInvEp|1A8j3W}6By5n=!3e0(N~Wxp9sCg4qEjAg4Kj@zC!?TD;tdY!u2lJEc&;P4hj zqJ)P(#b0Uv+D-%?aC~i4{)(u|@>~hKv{U7VpHG&?RZHkIcl8^V%@CS^R{sEPaNTUf zrSvM@NXHd6%|6;3TSN&Ew76ENRc~e+m3|g&qrAyBs#pi#|C+6&6fB`FQ^1|B6u>`I zhZ2#gK1KD&*|9N|AIprX79=3Zng!D;S6?$!x?0x#%#@eHn~c+V+0(QEmV!`t$U!e4 z*``DhGyW@aC0=BWmSjd-*99A1Cq~K9H}N3GWIX?VC5jZpKp3OaCXZ^>7r|k#mbO=u zm1wt;_k|W>L2^jD{2Vn}xZnEaBVa6@?0O`@QtKJnTpjfAJKhj}7a{q*yx8VgT! z`Su%E>rzq1gdmzB-0zZn24#9-4(+!c6C}1J#jcddsbW`zORZKsbPo+vK1PtPtyPoA z2Tcn(T%;v~AhN(BTVQ=w86y;U&mvn`JQUeN1zzlGE3aUdd|xb<>j!1W_Xu&!k~NfB zW`n>D7uHx=Dn_>W@zoZhH>_(i4D%^xQMI{YxXCTqb(_JiR!FIH(XLycnQ{id@$Oa7 znZYfLmpMJDwvm`}eTf1U-UN^pVUhSe$Su+1xSFGbTm)x_r6D+xTRDfY1RsAjJw(`B zZ3Zb`o58qx2|Udp4^G*{87zC`k{!*U7K{ImX0YO=&%S4sNok*!@BcVu-6)RUBcTyc_2Y8V)`&ZDQZ8cE*0)2+q=A%{kh=-Cj20vsLyz*7Ho zo$*r#IvdGUgiEA$a&y+S?*i6f7`Bb`fg`+j*ilBJQ`(4BNdC=|=GE62=Xv*M;?3F- zt7r_MNAsPd0{|jQ08OKt8bKl+q_GZLO9~HGye3;sq^L4i{#UfNXYZ3kQl|&=%z5HS z6lE8_^Bhc2F(QZQyGe1LPIa-1*)?Qm|ql1!&^_;tfVxcXw^UpfNIoGbQb*AMaCuUHnv z0VP=_6fMi!Q}_=Q>UAEm!CF;1;caxm{!ANbEKn;4t;1W$W!8171CJToEM7UNfpi;A*P}h~mx%w{;mdY z1(Rr}1_c1ik$x&TPzD9Zv<7c*45#89S2$JDz5L~2dV_|hfH>_@%y%qtL}59irVJ*X zo69c7ZjYTtwh8`QTcB(>JBn9RY#MMe zH;y74gNF2}A*YYnHQ1m8EQ2!fsAGod%N{^%SO42bcyt~KT@spED=jSk8sc|sZ^F^n$xea>+)8+v2e zmj{~hl8o>n2N*u1l8~*@ zAJB1z%s(GyfCz>3$PW5y!EjBD;K40-bifl8JJfT@i5@l0BsN!>rq&2Qxd^))h*oz9 zMYuoXP&AOSL14Q3`myh(rVFi&im=vnwBYRcs%mhyyK!WQ-{4Y)PTIH|jg zYKqG}ZXDJ(j*zq2MR7qF!1g3%1@n;(^ZW7szp!KFiZgnvB#&(?Ju9ZR@^%7=!*=^)XCZN|5i4b`jMx1x%0UNfG2$gie28r0ZQyJ3T@N78GG2*jjMvV=gPL~*1z z7^Dtl>B1g#CT{(XR|a8mKIN4`F+OdTD}&5-DFY4SPp&YQ>=joAS!K&V<&{BM{mLNO zEHxAH${h8l+{{d7SL=~Q8kemRk7l>q_1}0S)#;)rZ%pj| z6F`v;fo>#nQjk*r5p^O+HjVnXs7Ci3k;Q-)uRg)V3YkxZ^E~Z5>{ehn;_aWLIi5qyKg`CruRSd z=Fk4cWpC8)&h96VfAy|kdCNne`#-pdabx#;PB+M^%Wi|2=zdV!1(9CFOE#2(HS5ut z!H9GNLSda@Ozb@QE$|@wNUTRWkZRWj#-SU@=k*H@DJT`9o~?xHVoUsf)ig2K@n^+f zq_Gn=aYPfM>v!$fV*JH=lXZKPC|v(@Hj!71#mHECL6EvvPXp2Huf17C`L_r`0Yd== zBZZeU=Oh{LJ$1v*SbTZIvFX_G@-KDBabtZOQ3Jh&SytPlZaL^XCkB129P}-IH5r}e z5!|0To;B{?qr8wRmt*0`a^}VmRK>Ga9&sVx?h(v!m9G}bD!iI#CpxAS?It0F>r*#h z?cTqW=9dYWDFG=&cK@r+Q4(64Cxq7Kl4Zf@eKn!AQ!%k;5L%~Y+|3ntn0R_tq#&Y! zcIx8k>1E>S$Gl=$)NvG0on-=Q=V=90)hP(B^;ik0PC44`nu4)_dhiR!zWC9<_`~1+ zKa+r3`t>7^-Sy#jeeR*`%o3{Vv-`7tHCu+30Jf*LqlCo5!%`Hntw{n++D**jz%r$1 zK~_IoA=s`Mt%pCfYLfeJlN{*(XZ;P2r^Y-zgrnmOIc80=B@aheEE5*BQ16i46DX8)+!jbtISHmffI}RRfN*|ZJatrZn)4*A= zoLj$R>pAM1S`XR4$iC9FUH8{r-A&2To^OUdHNu2-TlTOrAqH&D8FsW9LJBdUfw2&_ zlPk_MIA~b06S^;)jTq{~-3ed$_6!VrD2githRxlFen|L+c-=wOm13k=C+!i_&1Td< zqt!kixRtNiAJo6`a{d?1yk-2O0yJ%~(kZYG$I#}oaS|tnT9x3-fzK{Tf}*L0t*jgx zQGT&FU*j+jA55hCXAC;HHUbHSG0LiygsHY|4rT3N6EEjrjO~PeuG1~?9`MHiS$U-&5NqmBw6Sr+s${4M3WrX z)*1@{3K^A^Q_j<;?w1@mDf)wtRZmJ1U$4-zknf@!t^+hIi%b-&V<*vbl~VjtoH|25 zoLQYXvneJ3JPw&Jv@%xwQ3RuFWVnZ`p=#o=)qt6>_^BEs)&iJQ3vEnpyecvXk_400 zNTEzK4XF(k2}kQ~kV<&9KAl9+G{=weFfbfQW+iTgoL&LNXm$W5qDsm^_d`?p98#=0 zsJGY{A9`cyfF;?^HlFR;plKg@#^vI40!z?S`V+Z%*`i)bACo##bz9prOp-QsDy9q7 z3Aexi2J+|&TTXM3X)d~!!?=EKU9-e)}@EnsBd~4$P5WAypl<9Iv-S2{yxhh5X zU4aau9sz`^&fZ?g+Y1SmqkF>$a@^Cgcp|?pEH2)MX=?H4eg7YO?*U&`m9-C_cKc0oLk-oF zD{4?6fYcz$2}M8zlqQNoNNyk@B$z^z5{in7gLUkRj=ekfHpT`xHpV_<0Ts)Pj^bFx z85O?gS^Jz@lHf3}GvELHec%7W%{^t;wbxpEt+m%)do>>-Rt}xta)B78XD&wmEISYJ zPqWy9EWnZ}`Rlxp9ybT@_z&Z39Kk3h{q!tHcj+OPC5WB!t$B%jy#e;dP54pV5Mi2xf*YY^_g#& z#gm)UvyhMsaF@y+;LnXfEQncvB?oJx4A!fBtVI$TI<)SkhGa$gmJ>+~jmCu%R=}Z? z=jFgX+dD4j8wLuAU8{<;G4<0y1P;q??UCmr=|M~&&$$(m8L@c64)!iy>_eiXl%Z0m z{xUg~eEvX!Ao)ptETih^d$WKbI=6)Zn@It1IHPqPT03;2O5j}FAG_0)d_*dd2<={D zWCrB;MqS&UA+F`DOaiKK0!THgK)f-&?j z*#UqsGx|yvj^_epbMJkdWI`I)fHvra^Wam&J8#Qb`RxZ>Gt__4T3iP?J+ zBMhj3E8;fG4$_ZOK?N&Vnvw%;XmJp4v74Z`2FthCJjNN8TD<@?u|F>{d zv)Uko-+7XvR(e)|?HMWC3*dp%-Xt5~c$Z{ExF%@{Dq`dk0@{sO;#SlKF(T57bQ5jK z=vN!cpIYp07AXnHD=^7q z#A_G8NOamNZSulXWP1?$t)!QuIK^TMrG-=lc@GVngq3y(tRxY^6lye{x+S$`~xv?#GdE49h0)2J|2eI}c}6B%Tc3YXUd(HMg0#s2AW4QAz2xID;)^ zVS@#fAy77yDS%uAcQPuk<)9c*gBKHpMJGGvhIxYI3G(sywd-c*HpXyk1Nt!x zwD3zW*hJDJpXLrQTY^2Q%;~A+9wTzLiERc4HsXUl9L-p{YOZh|w1KN->WPO?aRdbf zyj+yxiGmy(7o{>-yxI^ceOKCw>k{qJs_+P@2((2Or!baL!Qrl(Ud#QA8D;305WPVW zzma6MLY$)b5`8ss*Jb297h%LPT-buwP64lC5U5S`8JUD+4wKyhq7$Pq_`#|ECv6U7 zAu6nv;+p7s%g|8<#}#W-60FR_3Z<_DHImaRmU!Zt2p-NizbCJNdoqYNQ&osOq&Kq} z815vGv^W|OogU9 z(}6Tyt>{Rl6}cu8cFa>w-SScoNCN3b?Z}UY<#P>gDRfI~J@6|v+p-O86(OLo%wt?T z7&J(*f|vn4!Cx$@5@bAxQxNf0As(ZHGYxZaN`zSfYsrx2VN}3`Nnzg;^|>Piv$?uO z@L1fI!ZSh<4#vU56#ysTSx*A4^#oo}fC7yrpmd*e3-n=d43&karE_);6l=vt79+01 zT9BDQoD0f2ui)Qc2k$7}tFK!@GXqAzD-Sg5b=zjpWA{3>jeq7;G6n{4ovu;HA&PXaz(N zG_rkaa~6B-&JGz7_p&;2D1}ba1QB=-WOgpAy~Mg>DG<%tV%X6)=jHTS4UeN8ILLw6 z12PM?g%kV<*HkH(aE&p)9aY3dszl*D5z;--R1SA>bI4+QGE2)*O3S)xl9w6r#iB zf>*J4s92wl>(EU&IKcq%3swQf2$9+hc)2Xqdrb?%*Pa-a z!x&-z`7Tq~Q(cx&aV@&svb&s)W3>H;Zi>Tz(p;lgbcLPtkI1-6v%Ox?wvs88WUG*c zx<`(##LpqWK0_!?=`3kUGKG5LQ|wWxHH#Z}1?ez9xJdVrFlP+lzpgALX{S||srO(o z0&msh(g0N_AF1>MAXr|mo8{>X8MHX8GerZj~R6%I^jXfs)cGVdq#Tt(g zPKFY}*kxi(`qv=vB1sCRD*{RexpEN}KD-8Mew;N+Z6Fm~oSGFPm1HU#X)VfBHr(KK z0?-6yLCAuqBnb+!y*%`SFiMd%Gis@s)bp_Zzzit` zAFX1GGH{kaWOzEvr=rNZQv@b_;ca(-MVp3B=Ifz71(=K?;BcIZ?}j?|314qqF?F~M z@#lf$)kuX!cJw)(054~30XVVWHA577ow{qL9(QH*)g&mD^hrg5a=hCL(;cd2LG0vI zdD?(wzE5fy64_23QsAf5kenT44M)nw&;XlQgQq8mWqmzxHHbbAYoEwva!;b;;=u}=Yd8lj{Ej9XKYVyQ8>@#-iqLm*8K2l0pA;pyT& z+SpRu7s-SH7+D8LNezfsl<4nNNaFs<7;S6@m%X9h6l4@bniareDT5QBhi;$*F%xW% z;n1Lo=hUsD(7LX#GY14GKfqh!&VpO>HMdbDd`rtuZ4N{U20+8%Z7DTF3dxplZAQ3 zO-P1fgYgPZTa$-oqoO&7UKq3o zZ~;pO`KQfq#t1arkQwf`nBjbescB;9AYDVo1~<%{<2X$!_0zR*`cQ;03`*ok{Z~;N zy!k0TDGz2Kr()6Q8|Gx^Yf0>i%H%AL7_#1q4TxNcgHtFWKEwE=?T*!c)Co99*|R0 zqN+*MKR_j=0E*IAEb5reol+t52(>9+ zicAJ3dlj{mcbh?dR8OuRLBPg}6iJEY;m%t#l7NEmuugB&uRi`jlXg}PZ{-#SbQN=ICzz5i3`*{}_eK~<(c}rp{2w%aW4spa4)IkhTw_IxvA|jAW z!khU)Cr{bY8zGCYP8)0{WI6xQWPy*1ywXGN?R1OHP0Yj`t zRw`>bnD}-XLpMUrjlR}mSqm5;&w#e6d7vAd<(xw>)bIcW*vWy?b}lopDf4*$0Eak0 zj(l)xYJ5g5kEBXyksq~iH8lMnavqFxSMjri0)Z6@@!(M1IfT(pRlGQhb{HKtYp4zk zqGotO)G*zr9;qN|07mMO3Zh2nCNruaYE%T1k5mvfAb;wSik$|XQI2NN6;$HH!{z{? zj6vwZF(b9N8SUQdgXI~F)(vZ?q0yLg^w<-WZh@&rp_VsHr{&z}so?-j@it0DX8TvE z(b(QvXCiBFja-EV>cL?;JvM1_mrYdU3_vja#c}|t91|``)oIkx-Zfb3;gc5m=>3W; zKs7O;vv44RigzrNqYnju=v0qntyT0@z{Z9lyCsN#z9cG>?=}yV(KweCw?({Ahg$dJR1EM(=kyKI1DV}7Q zKE<2+oZ>yLR}l+J<)#f7t59$;*jS@In2sbML{y&r&2MvUmoW= z0pB4E%+MTivQ<9~x-C*b|A!$ECIZkkjX|o*=#rvqBSqJ`Q$T@K(Y0>tg<9WXx^3gC zr-nmo@@Pjek`WjGRciF3x7HuC2YwExaR>$K_AtG#6bRwNEMOx**CzjBZeT}sjy8Rz z(B3sryZEFNrx|TMIo00fM12#b1R)B~d{U{Q2jUYHW z$(dL}NYfF9IFYHeKt=^Tfy`>%6bWcHN*Y`E676=HycrCu#TV5g85(g}m` z!kq|d(}M8gye~Y+j10@|TFry-M&(&%WLPjmq|1y98%8~d00P`lL3lYywhY3n0%vf8 zkeLj^>x7HALc$>qCb?{ z7%~Fb_UewYtkv7lx1rJ~$|4HE76u_1zL{ETLUiW|cM}(cGad<(lI$%?_LfNY2uVd7 z6O!ndi&IIO3;&`b)Z2&{Yc)9t0|V(x+K6Jn&EtL?1~CpNG$9f@TJ3jsaw|Hnytlg% zU=8l<`R>M%?{OP)5J*8WW2_PofcP1vVKW|=aJjEm_D?_=tp~IbJp(ujs{#5czvMZV zsBef^ighqx8OKDyh1y^|B&(QEQ`voSB6SrTKfCXj?uXfZ9I%SgekPTl>JN1u_%h?% zM()5u&qQ@2a-uG7(1s`xaXyz-g97KGrY6`d+}M`R^>XLxK>x;_j&%dzqlj&-!^i~* zfd>Zyan23IWb+~Cggi0|Uf6^TMM7M6je`e82{AwrV?^djgi+fYK&;8_4e(-=xmvA4 zxSA=XM{1^i=2V)gpIWFvWmBVODiQubCTVd1iOQzh-oP-cN;8%14H=1*X6nz-OsN7Q zDj*6FuOrRo$(z8y&LYtW7Q(cE{@WOn*pq9(Ik@No&4Nrs0y=FC#tNW8YdEe2*Tf_83OEZvGr;<{$rEQt+57`}omco{#kR7Qkq1mzbzBx{CwIn3 zS{8@Y2&)ElTrwt)8Ds%4tEG9z=WA#(#~$tTqgj6JAkew_4vGXKrs(oM=%NPZK5t_x zQt{AHCQwzlbFH*7vkK0r92(S3`eoC&oX!$NnxF~EJMmIjZ(4;r94q0f9CKgwcQ3lk9|yF=YuP`gw9Ef)>$Q9lCIDl&#k$Y zzSACJq^34sqz$q->z)QOc_$x6o(iP2%-zkkO!PsqcQr)rRG;$PN*9Y>r^y2&g7KI3 ziaQ)=M*RaUGCVt<7v~X#Vn$xw4K%+OGk2fXQdz|$9)TOqkz0C_`+O|o_Y zxKB``J+7t##mE}~DWyiEiJ9_#>LfZ8<`o1H2)$3`WXsU1``IPOJE;)*3q{3b@uU?S z$6rgLpeyeXy&WijqimgW?g-q0{~W=GMcNSj?7-~+^%B|>U-nXW1^9uk+`~;{<5xJi zT^ZX(F2=Ix1x8~eu2t~ z9;A=ao08sJFB3}}76ekx{?bh_p;NiROXXxc1$&H4ry8CmAcVrf;#F!%3;>28Km_K- zSiB@lp*|*PFFK#=n=5TgtKn^FpVw8i&-H<(u?kCON#)RrY|gZ3>i;>tMh$tgWoUb* z8$0_Q+e%as5e&5H#_?4ULkxI842-=QNGKZ-B)c;~B4iIK5!5tS{pkggyvwV zL&x1h`9MJTJ||+HOw9!ba4w;81`c2gL|27Wz@w2M^2h^mYY@i-`X^Y*KSAh(CARcW zKpSb05;vt(0m-sOMWKPna8Qr8L!^s9+i>yJof_`R7$qpUU^f7b9BGOS&Bowi-+*Hm% z3rpXylhyH!%a4K^V0SjoK$9AZ@zv%zAu{4Dg=9D&;`JBNkH8ETG> z=U_S6h;#>ITMh&QLMF@3R`K!-uIOT)s+}EslOrapxY%3FrQQ52OrlaH_Fz$x;F=$H zL82Vl1`c<8?i9d|aYlfTa)i|;@_0@qHhhL+*R4f~T&Ty~huzDf8g@k*#5Tm1TRVFJ z+CUR6W8z0?qM~F8NnmSJV=`zUU=;vbW6qMf`5+I-J=`WiNustTHMl^xu~C2z;@D-2 zVQ}jUNPR#?J4b1oP_0N6$!(i^ni(e^1z^+CP9~A(6$Yj`Jp_cik^nW zb$5ef;X3BJ@-wmACrwx9GE(|Nu>laIkFq%>Wm^64O!j3-fJh)bjk_VdMHd08csL&- zRle+|V17v-5rYe;P@)P@eXIo4iot>_#n{;_^M8)BL(WlQ3S`#8LRU+tCGaD;2hak3iOz z^J#iQXPex)mKA9d84Qpl1Y^xKcrW`j9~c!5Ps06SW8$GMU|9%Y3dW(p%RC5I0s9zu zkc<hDtg0Y)mJhZdO zZ!nRCxQfHMfLSv{w4oW+4 zF(t|bGRz zWTZF%8=g%YDP+JVF5&4Q0SCipNfZbb+~HG-LW0B?WXcZNy)@mCvnf~{VMR>N*US+F z0{b>53l>C_swpH&8KX!5oToElZRFq~j8R$0kREFzCo|SYPKGgx6P+7tBgaL1Fmt*| z$Ykp!R>r8bSQ|iT+C0aI*F8WBG$oQ(I;V)cLATDK_=J- zbeQob{B|~&6q+Ov4umCdehL6~WVUNIIlw9+z=7zm(@Qz!nn#ZB;KRcubl(bi)&5~j+Ex~IT~Ahz^CXGl!I}@8;_(hDj;UGuM?C2RO|m0Ge>}ilcxM#M1PyX}D1zp^ zZgZf3{OmCS7_}p6&8bv*a-yOI~p<#2_38xI7W_@#cKx6kn*KP z*c2>p@Gu@~g6M=e<+@bJvCd&1aragx`m3C@0b6q9t{ud%;*yJzkoa=YVPLZ0JO~NW z2T+y~SP;hoXX`SzDk0l!qiY;qJBy?G>Sp0%8@2!y&_%%zdGVBbA-jb#Uc9nVa>&k} zj2AE5EH6Yj&3Lg@y%60Ze2M(=7A$i$S7#N+E8$}cZ0G+^eK26Wd*@jp^Ed?9)l^!LOb34I> z%33SW4V} zXpYA%GBOEbA(?pJsiAD8ip`o8iL4zO3(p8 zv`_|9r(M}nqrsVx)LBs=$134(rMsCYB`sIy)VP1s5&mS z+PT?=r2&|2$S5?CGEAKwCw#yX+Ms66@{l($#{m*9k>`p`;|UtX7U5x-!wnP2Bz#9^ z6y<;y;*1iKb*d2O6d#J^WC{F7yj$WMS_rE&WML2^m?j>>-)ApE`k?PWTN>802%deE z1}+tCxfv2eoJG|v>e!566m`}BIQeo3d-<9*jY>_&?kXS^I6wLpvU51M+aa0Tvog>i zJ&qPwcgwk*4}k_8S$A%iQB1|r5_0oGV<{I%l5R4NR!Go*hzT^vNUYExltKegqAWB? z_>Tx_5~Gjh93`Vf0rLpw30OScp`_eJ-o(XI{Ls6Vv@Hy)CHKJ@9#l^yfs-Wvw8a=@ z594GZ=WhWC#&ZRP)JZhFIfLSUrXtr);-(M|+gyY|w?Ktt&8oFzuMcIE&t}LB1?ev$ z9yJhTz-95hG(91?R>mR+gHl5B#xpyFCETPtm*`7P!kf1XN4Zvs`Iw8@QfC+Sbf*n( znzc6akdgAMPZ>#|fk8pTU}Ly-r;&@z_&w@Wr*U;H#Bg}Js<`KP2TX?~z@>R=)E3sM zv3whaP%hImPmG1$MqVv>Eh!K|uSouqtM$0&l3CvGGw!*b9`{^!{sTo++;gxBO>{-5 zxw`AX?5er?&#AeF91<*;3b3`*bW=76D7_Mobtl1X>sX9zBFG~j8dz~c0UIH&(6cfM zl>#fd(re79Fn<>67nt!NrAs(mK%}Sb0awXALP!c56OK|q-Z;)0pbZMX##LBRx5He4 z;9lhx8NtT#s^X&g!fPAXm4E;iJeW;o!h|DkPUNt@_TEcaA z11s2-&XuSM2PDWjjvOzvGmZtH^LP*rkZ=QMPtXevt+y#>!T;<~4TW)d2p#NW0sOVt zE98&)xI)lYO9exR4;SM=r@6cIz#uiELA0f@0RBPPQyk+FyHVa?BrzuZ6OG-(C;3e6 zS)Obyaz?ARC$M5scZJ;IpfRw1usDhI0=Noi zU@T%NyCC(jhdhkpA*yyRLMv2*a6``%*ptzGVN=d~SD-39M~j-6jsxKhjRPc!UBRbF z(3D&((jp&+Q&4GXgd!d8|39LImfcCy4b$@Z1Hn)@63xoaiRHFw+pc|wj(H$NX)Th0 z<+Eum*(;b}o;#xvz(9p;NH*9GM;6XJG`O{M!+ygE-vuDk3bbc_MBfK#Jc(NCsXfNK z!CFw=-KXx@^LBJIK{?8Ni8~rDFD6*jIUC|?fk(eiJpv^)KYHUu7tqP0H*^Bp;%2(e z3gkd$_jG~I(rz5{K@NcSH|}_nBZy&VZ*JZxcWlM_pRMwa_2>~&rK*f}5-J8n#7M}} z+{Hlwp}o(dv0o9d7Vu|_1(`WH~Y)1~zRgH|Mou8~CW zWR~jEeJ4;7HwUx2hb2*`))OH@h$MPN5=C22gqRwV=sii)w)I5NtR&G_KbHt0EhN$U z7uh>l@mp&+xg{HZ!OtZ^yb4LQSrYA|;V@oEqT7G2Bv&PK9{IUMTryyrwn?IWfB>-{ zB+=WFXdlA@(MS?~D~XQeO-n4`nkB2d_a(v!u1u{ZVhjT&+A4|QV9;73Ixo>!)Vb+pR@bBTL|pb}NzY57eT*IKGm_|!l4u`rf>bMsK9@vYTdxlDk|f%&oo#BJ zT0rVfa+OmYr@^UYO+<4Ys8VcC@od+D3WAX$QlVPq%@8>ej9Kws#Va&L(&hq6LYUql zLH&^vk31G1YdTJ#o%kycVf==dg>5JaLvmoofcPGnp5pnCU`=--G-Zxw4w)@}V&UMy zm~!F2Ad}QmDj|?DIoG@Wvd!dNAGtw^a!5}P8)T&*4Ee>u0tqH|^?=eZWL*g)VLH$U z92jU}d&W>m9D3tunZRw&Z|t&J(6(>Cf4j%qZ_n^^QpbZV4)7Qpi@a3+7 zIx8NUI>3)5M=V9t57XVf5FiS{wYRsX@pLqp11Lx5>sT?SdoC~?Yd#Jf{Mz9M!Y|eo z5TQ}Yye8JQg)S5+D6v-zMy7-HUgVJE{$|O61VCL^O6ICns>4>~3CmzmeYeZ-ymq@x zBuAgXd}RB$beuW?u##PZe_T8D8f)(85}J;^v3(&uOE%YQ4rtCdskI*R36^0XGTp}{ zbZ#Cpoh*u($?np(4w?+&%GA$%E?3I)rSA*t02 zJbCO+*L`#cz~|T#{wVen#c0uFWUUmcB9+l!C_{>P%~Hz8y3ed1aPw$ z&*>MZ{&Ju3iX;kUlC)q0XRvG&;dhooGH*7(8p`u8iVf;8Xr0SdHLOhYfg^`T0L2jQ20AnKx{POW_xKE7@lhL)A)Wdo zyTe8(MGELg1}U&7>K}$5J)*-Ceh@3tHRefI!5V~0&|{#mqKg2x-*FT7J0NfV!fFVA zQkOT#sy9Y5xB%-c-vbzdQ*mSf>Imh_>5FC;@zaa< z{`AA&zufV}-c>8?Xz|V`_U_^R>=o;A_s&CKeemo#m)!Y|mY$4nR-eAExN*(e^&8IH z+|;;wT|A0#K156KF4+2(-{hE!#U~|5c7|R#*MAPy>7CkwgkfjtsjzNRr@%H@;*x*^ zHY5T^?Qh_|22vd$#2>^)7a$QI;&>rkBP3t}Vi8I@3Wig(l!_UiJPpMH-P%>gz7c)_ z=@R^A97xGPTd}VccMD?Qsrn^v9L!Vs?t+#S%Yw~A6^Se%sWkvA7?A^_fMT^cde5!r zOGOu4ewOtzp@|qegsSljr-mjKMGqs?FKQ;UkYDQhL+O%oogL)BgF2HTjmz$gG&kY16;x$!ia9I4v;wCmWk{E!uNUh*R9T2c| z;vfZ(R{*{QsC)nOy#wbOl~J4)_djEymrph&?0>$Xmrssx-v4}2FQ2Tl?teb)NmBij zwZr|-m*wR%{yl)g;;ZTde(4aG|3-uoN`Rb<(eX;7y!Cwl$gW{*y%wXurzRAuZ!i)NC`?2h|;+)gRtpt=5uz*vsZ~~z%}*knO2^?mhsGV zq9i7lj=u7`4F>GC63t;_JY^*^GbIT^A<%oEKC%(YJ(>uE&z_-O5YsdUuD}e6%l{3hG5*b`2Rtb=-6klE5i@X9DH$MR+_ZzliJw@U zHd)LIV8)7tVUIV&j*f7#aCAFZPd7NaoIrEI2tv3Jkq{CKr3u@wwqd|SZ-Ar2Mr&}J zH1rHNDKBh)QrhDDI{@3Lu_2j%dMSZ|*d+Q?0Q>n+D!2{N6Z}I3t3Z1p*U}*^;Pm1G zIV(zQ4Bn#>=|zfjru8SPnB|g6$AB!Q+$jRi9QZC-lpRni7S3q0{)rPQ=kDB8cYrhd z(H(Rg;7xT0!~yz32iO<7-5L%~6!Aa=Icq=4gkM}z<|2q-M@Z{5A)7t|7?lC21>)#_ z6b*xIQaWYP1_dZgxP-X{aLUZW!Ab#Qe~Lwpq(-2Mb)mp1(Qu%zco2ZJxF5~5SzeDM zR4JyB$)l(y&*mGsm0EgAvobtlr!0_;^27{<_TVF)+97D~?MwvP2RyV7WT3rTk{}O) z6e2+Psel$hdum{UBUIEu9dMBar%EXpu+j>`r(+20hX9D*DWYV8jeJrH0P-)2NC&Tk z;&7nOgQ3acP9k+k6IdFAi`WhBjGp3)Cu<&k$m(@=z%)%z03~lO&c-fd4#xfA)K8u! zmJ_kF^C^>DF03?_fNWF}L~tS`0=lQiuC&xxcy)Te6y(T!@FV67{6ggr-s2Nz4e*X< zMWppP48u!`1p6t*-Z|0$#A8S)Cj7)d73qwNEh_9u>dl{%Z^*YG+@nJ>=ZRVe4gj?S z29jccX=NNC&1WLEkO5Dz01P>hOU*|fmvs~LwXt#adOReLZ(a(XSx^V^O%}%YP#M9u z7`Km;Tgs61xQ?CqATUst0ahl+r-0y>Wk8?}%MXZ1qaR2hub|0yVu`2k-vq1#NZBilu z*)DY@(Q)ir1)gN@0t!07C{$_|U+O8>C!l^arE4D#{K=wnjnP&*gmf0rhVviROQ~Z= zT^*ZdlAu5q4mPNkBhXq zGkVU_lETnWW=bf4^63tr!=0$^5DJ88OadeX0THJhvni9vpsMB&2gMZ!97E;{fR_+K z8<`hil*HIgpp+x7^16s29l{w~K`BFFF)bT3q@;~?2!Vc;MQXo>7lf)#GXxiRG0LTo zc!X9Hcmue|<6&pec^(E7jh?qbhqe?D3{+FPNMZ!gpeni!q6g||J`?K_?)XiHf#-8? z^jZuR;88XU5krFFz0M;nhHYiwN?SK9^LTBaGBOp|OR zz$Y}EG5l{C7EXp;!Eb7o^k~?8L=CYTI}AT8(P&IOfQGPL_hak72JrevY3`>a3+xEH z!vS6YsLk6xJN@ey-e3J2;F9Is2TW*||32dwFd9l&X8mF2-CS${cqKn9Rdx^=$!~p5 zwxV~zH2lFvddepX8Hgh-sa*+;EabYl|1!6IyI0S}fO^FxNon6DrjHX!6i-J*wtm}x zxovcTiHeMvFcxQqG{Ra9#~B$&w$+`_M3`1AFF{GtyFoog7MRrN$->lqAiAUj^qKcytQU!!4S_sy3b_=M_aWCJ9$0 z8!Wkiok`RF=P(5u;p&L3C2`2RXiUNvH~_9o)}035JJ~a0?+W7mTD)!xsh@q@ggC z{#qn2wcd`wbKr^S-b7|)=(VmH5u%WqGQg@(690JINY=KXDy1e0ofAb$XhdGmwIx!P z!lslT7{M=ct2z`J z5XB}*p9|c;{sC73)`zG-pi@)}2^_2^6Q;Or0aH9P6buEAXCuEYT-<;L1hh|1r-p**XYC;A|x^JowzjWK6LwmVW<3OnaCPGFB5=8q@yI z6z#vu*^n#)a0lT1|EPAs*?V#$&V2SfbV(OOCpYICjUx_N?3 zl7dgbU~*CXL4dzs>IM?&pxPzPOqner-SHR#f^ps#7+(qL%)1ThPE$U-1u|(lJCz84 zNP4*;_^RN1Y+b(AYG3NC?A`Fp^(J23>CK7Icsy=-tBiqlT&S`wECb%;I{tdpQ#@cp z@!p(uG&k@x4Buo*D1N7Jk;aHkcfW(sTtHiT((}9*gaW33fKPBel<2@sSj9X2y0%r$ zn)5Duk9$ju5lF(4z<8GCW8n?T0(4Xpo*i(*#WLFGKcUBBILNx=j5yLdO}~Az5%znh zT?3Rat3DoGz(d=zlc%{MtT6I2$h#+AEJQx9P=;SH)v?&WhqA&OpW1hV}7WJKOPL zf9M?>;@K<@_bcLUiZNx$XQ#HJ*g&B9;;N?V$0@@-r*x~>S~rb^!-Dk~sN}$IMrll>uwLFv*VB@m zN1QG;*4ro#1jBJoW^cqhJ_~uzT#5%^H|PK?e$OKn06m2yF4b3{y5{4Z>yG!$ZkD^# zvpkfR1!JX#96@pb;0R_k&^H30XEbUjUh-M8QEbM1HQb;8jEHK?(#+w8x~hg7v^7&k zJj@Z#%@}bPS=|wrv**=_Vq+9rxuth2Lapdr>_5TAOpurUrkhK*0S#98kk zDEgR*0g*W4;lZ?cTOP_FX{*H0I>k zZM(o^lTU#bOPtd4RV(8b4>k&;pUt~sVF+67io9sGEAj?i0a(4RkWAdJ@G{jEE3GS5 zT34)OSFBdM62u&WUSLea&KAs9-~z?^`eipk;#-V;*b8L)ApDL%crfzFj2@aMx zlEOY6Z}$NBZ;-c-@HL>BOtLLA32swKp4KyL3Vv0%$H5ro6Gj9YgW+IB*6xQAOraf% zYf8Z9QjA`YJ6zx(0~jOV1q(%T3=TDbfN1a;$iNrdL#-1-;fEZlyuxr5MZ_Td1l1CY zT+wVRrXZb`7)!0n!$*tY-~;@~Ys3uoKyen&CrNsW!Fu6#!$EjY1VL3^J3cVqJ66R* z5?lg|QO=_TsFuPK;32TC<}maU+e$_42kWBmCya_!n5_Jy2}^UbHz>)X8AkC@XU5IbvFZiqs^4%x+(jv)cs0G_ z)NWU&EjL|4imem@7Zt)uo{k`dJs+d*Fo~_kMys8y$@AX&Q|ns^sR!l@wgmIhCR(c~ z_^Vw~-rlH@z^j7L%1hLt#9&RCe#Y$@J_J{uBnJ*l*bu#0aOBl&3;}(Aqp7W+5J6MN4-^ zHL^^ib|$jdE!&6jM9W(3Fx7EyRI!ikYr{x0;ioxw5F-31Fm=5l5l06rk<9N7GJ7~g z(XGwvSS7f&tu0VcLM!mFw>E@e=T0tjhzoYweu*~7AZ5lH*8&1*g~2d~TMTe3C81~O zC2`fm*65&V{=9=GASD%=v40XnGi!5gfigT9?QT(bHJ7V~;b zm_r3nJP`cz`!owXxQeA-IADea#yjtWhr{ecBZXYM!+>>LnDcn!z)JlZQ<16A>MA!X z_jW#)yy^-CzU3AuL48CPT*EK}SQKXflalVQ-VjD4ayk%JnDKzi&pK8R$yfV$x$KnK)> z*RgX{gU+MlmAinI^64T*p#Yxrjfhqf+fUF@!?Z$GR9{S{1=Qfu0>VoE4Gm%rn4Ca# zbb<)Q)~O2c8f|D?Dk*K%Y-c08xQ`5RnSWLNU?a5QqGZ(OxSQo7krOnxfvRZoG~%O5 z$7aYBim4-QqdJ%C1tu&DX`<{OepN2Dy&$s2fU8Av!t0yd{fX)X;iV_E-{LL`-fM6i zd)Y=YUtl+A4?O8n>AWTI!192&%3#VOAvYn3hK+wD>t0+3vU%Op=n+SxKWuv7%!7s_ z?jL=pPyr@ybXtvYPXjXw&ggLK!C){s_lF`g=HcY}3}@Q3brg;fjAyE3@=z2G?7N=0 z>CQVG7$fB$euJJ4f^_fjp8)|jd3a5uWxd^gfS{`i>@6U`mIb;zZ-xN<;#SN1~}-sE5xYnA+F>? z$5|wUhaPic+*pZ{U?|I=bOhqSE-KqpE2#$N!enbw?4>D#y*%Wxm;Kl|b{+vis8NvQ z+R1+I9Q&_r@k(nD*N#ccYIT6nbQ&|`DbVfffAtnG5h@k401~=9sD~zm#?A@ofvMhJ+yiFRJ3BcO zOY{Ry^gr&xorAX3$1Tc=CMO403dV+W9Mx1IKkyVtX0WZ=K`N_vwkj!6gkFm~9Oy;} z^*{pub9(N?MlD`|zXy!zQqMD5s4+O*7CY9d5HGoQ52OYKq3LAk;If?byrL+10{fwA zp>a_#7h%U}j%p*|8dWV0Vt(<7IHx)RI&9X72pR^M#m*v4X^}k5`Q`_3Vdq`&ISz;? zD!gHtRJxJ}0j9HHVFyHvxak;}_8bH<;WGogN--+55R8s(aAy$UhqPSybK|z{fx+nA zrJRerz3i~8W66!q$k0v@v6!(dxXkSA+`{(Vu^xZ%Ai1Yp9hoGJAd;#u4<3@n^|Uz` zv2R67YhL8r?080z0%pr|no$9y{dBT0p%gGww{zuIHikhH4ybfC%FS#1n+%#jGH||^ zCbzcrm>ztJQoN>$hT}pH{lGj7O_M#c^EIFeL0|)y)S(mtW5Eo;Fi7=TT=>PF6JiY+ zBwX~I_hm%g=-_Cz1kaJz{NtVtst%IGcrju!Em?3&jAJ<&Lx)xWd{k+h5Q^#G<6!gSD-{z;UA=S7_M)M zYYH2b-Yqvxn#4ww>tL-~l+&Fs7uMz3HVqE}Uv)aO8LbfKT^MX+_IbHUw%4QJ>mPgav3sJW?u{*ZRo$6k%n2*ps*`Z;DVz z0OKKepC>%h4>K7!1g{{mvioFgBpfM#eh@3uvIsr5An%6|zWnQa)4 zaRE`8=qA{{W{d!#10OJd$QIu?T>pVFP!fr2{Lz7mJm3U#gxDbfiUqV4nUQMUzsd&w z$`U2kA0cgcm;O~;T!KL?4%5~u*&D0#F0_i)b^DAJ@vzzj3ztaP&u#xy;l+5hVLg{! zuzs}yK!g@8`nuT^nby;Gm-J~5_QC(WIa8XsFKH=tJqEyC= z#2xCYDo~ipTUTFFTVH3F)Z0y2_S}YgJ5gPxZngGOMr}#;Je0KWWNtw<$cy&Pt!Y33 zMRxuCgk6=WwkztS$#}^ps!l%BnnJ9!s-ik!HwEp|nyQ9{)p(pMHAx@6-W|e1GK#m$ zYiiM?+KTFVtP}OjtDld|IcWUChUS~|bWX|eH$y1GPd zeML>RJ*O&B4)Dk9+KPGe>*v_zB^6bPvLd@F6t>Z~@_KbCZ*i$L8T?yVU9q&VuD+%= zQMkCeY{<|-)n#)Rl`pGZSaJCB#S51W9(3x!#Y@Wj_FFn=dGFeWy87M#?A)qE?|yxT z4(ij_{VA-fm|MuV{H?1km1{n%Eva2rSW;D0Q!0-!JXMKOwzjTtZhdVcQMj;VQDLIG zzIIuk+B!{TD@!b@ldIC+Wr>AA8`RdfPrp9>2TK`MiFqZZD*1oE>7|4VJ0!SXC?k_> zX=!0e>7XIyB_;j)mJS?JI=8g6tZ%HNE={9Wb=Cd`Rh_ zxdZ1895}eVu%vp~{F)^g3P7oEf63#O&N2BPG_$V0O!azMU18m_>e9l64fTnoh1E5) z>*v=dO3Lbf2@F~kUb_VNv7mYB|NX&j(U2N2$L7uW?~G5Pwzj7BmjE$^nDw=Vi%RP2 z6SdX0AcF zkl6ndh0QG~T~J?J^2-WKf*p*zaA8f^FKJk^thvCRE2 zqmn9HX1OA$0=Q2=3#mr`OXpL3grHuQD5C6LR79m>HZ+tW1x;2@d$`>cx0jUE*@>l# zASxnTeT_Z8WO2goXCrTIFVQZVa^qN;{@71efK$r8J&23JLP1MtOe z%C-y2D{AZNF^%Er@Fu;dhV~TH02UM%Y(DUh=4C-su$SmOkl@3;T&)M!NWh|ISCpj{ z#Nnu>%#9IQR06h+5m}n3Ev=}7`ZvF(u3j{S2EehRuBNJlDUXT9w6LZzsY(diC14 z&c`>7ulHe@2jW{oO>QBiAZl`8#vEO$u?x|0>5yHUsBfsP1~!#cyU<)RA8I9)N#IVR zwrUx(V&D@c3+*zf%)lB=OPDcjEXv=6&Sc}av}939X+`}qyJm5sw!Erl37-AMh-u65 z`=hC8hvSzT9B|0h1LxN?R6&WKJ%~l^g#3zO?$LU~v55bpXl2Rr;<*_bNRo{gWw1C!Ihgl8(^s$k??PGc(VEEzEVjZY=?{ZS4C=}B3 zEIp)~y6-S^Sm@9^-5!h#R?yPTK-lP}7csjPM3S)485ZK9x@A~!`!eWB|w z>UvN=PB#$$Xs&LAB7t#67nG;#gR^zi=!@t*LVCHS`_U+)lVO=LY`QcIzn-IOre<|D zyBXbK?bHK71d0jiy-{9+5!V-+mVvEn=G$lhS{q=AM$jKN^uB$JXgjNK*fI|eMX_#f z_~Bo{X848#4dYT%&(Z^|&NQ}+(DbMCHS=73j;;AC49(KRwlUez&`(S6Wcc(;jLvPc z^n-()BD&to?2Epkk$Mk(Bw%k~?J1}i>W2dWhT%ic4>f}N7X+LR_85!Bz%=y_^oxBO zf<*YN0z^x>0d+W_-edh^BK@q>^g%g2(burq59J2*;bsq?9y}7E+XsXIHOtUvn}!9z z=vV1xu)RQ6jRYc3_(tjg5)s0*(79}5T9BRWNLZ`qz?RR@Vn2Sn@GTNo3X~H3Yw12M zq#NJrVaw9bL;V(FhZXo`^!$d|2ZOK$W$XHLI0IPMkMDp6qNL@1Ji=%I4_Td#t?b4C zpU>=wKKpZU4veY!h6ObJDC;<26(G>Z=&1Qje=ukSx?2|^I=awa56H#RK+QU|~R;)3{r+PYV}t`bzTFp13{~-^1{|6Fg%Qe&_i$t$o`4 z#m(-2-R!;|6B2o(m!J3KucZ**z}e+OHA+T{%zJblLMTkpK< z@qs(roO#x-uC}tWbKCUnH=tl4?OwwGh3d2W7Y!?cIg@jh9m7d z4jNi?^DS@vF*NwR^KTA>haFj7vFU=`n%Pf$@#TqgAAaPUANNj~difQ73J)omcGc!< ze{=m!H{bEdW6$^_(e~Ynjv9U3jW@mU;^si7&hdkeJZi@$pMSac*)5iR;6Vo$96qFI z?Dz?jr%aoE!ilp^nNyl5Ur@Jn_Z!G_4lxPSOviWk%{Jj=$gTy4&h+lu+c-!(qO1>2VcI~ z#n+nFIVAy}K*)3=^Za+Te4~Fvl z1P|@d`QWbYI))~qvQb%`0%8By;31)gNb!+}`iJ?#{^R_*FJ}58GlNFAx!uPG!;Lqd z5+5B2`?J~>`NRHpU3*y_8y`NRY)W)&C_H9#m$AVqS>poX>A@4?*Yf!L-wjX#-d?(=ud$;~-BRDVR{cj3C=qV{8!w~Mxm&IomCJaf&_=IO;b?blB} z!0&H-{V?B=`TC;XW@pP-Gva{UBA>oy`=O0*9A@c_O@jceosEC*Il&5B#=6{56NWcF zb%bBHrun)IFxF)EvdW^6X>Y3I&X8f8*ur{%Gc!S!Uy({83BKiCRO@`GR0C z%g7ELvgU+fH#1@mv$|uL8h=>t!-V4V`Ta(~9}I+Y!(AhtqMfp0+0h&;X0~b5Hq=4y zXyxgh%+8@MdROCs4z_ui(L2&d?`!ol`s=qCw_3La|7rZ-+hgtx-LZ7pIp<#2cg6|l zY&@^)yV*I%O!(o)K7~ikI(ha7>(Bkw`4`-B&m)gMyXCpxzqjk7y_zK?F}P^h@Nwf$ zUjHk+yzh}mxBUL4mv?=HcwjEU3?s#yQkGbM{uNg}_tMK*xjl=9jUG4Sq*G>>CC)wn z7UX#LxgEPc+MSgsOoZdEmh(p4_ta&D;(hPnz}J-}mfoTzKkxJF*X`uIbus_R3Xv-u2#& zV;_C2L&xq1j5&JZBofW4)%QR9+UxJ^{_5M>x=r;B2lpww>8=N#*!uFDJ1*BoTykmO zO$WTRcjBZIPYMKcVuuud@nv<*;NeFVkDfBGVcT=t|M1oyKiRWavuDTG?y%O53U;yl zxod9EZoCcqY1VW#I|X&C&>CO`5X;3M$PG`Fl2wILtRD+{*$|nEfKXtj_+3*?2o%O=#EnP4Eaa$2<~Z$YH*1gr6E|83VtJ6ip&wbuOU;6T*pTYIm4s2?xRwHkkC zb}@6Zz`p&#m^KZ+oK!i7diT^>D6>QE($-nFcD`?pc5>UzTAPmc0a1I-0bll-bJ(GM zcOF)A&HK}?daPu+_HxOL#2>Dmq5UcU1a0TFGw=K$|D?}%y+3RFrzI!b z+83wn)>qH&(}&uPrac#mX%o<-Pw?fu@7=$NYwA{g`}IG3z`#L+hYWR!M~)gjW+l=e zgXgD5lrH4m{|fi)-!xbzMCq2L)Y%P-X4ltW+L?&^^W-GaB`<;rJej?@{=Uz_$m!Uf%S3FK?Nf z*Fn1Uyv4X5iSHvN-=pyzi|;sm$K%WK;20i@??in0ZjwKy&2^szre3s&_dOIMy&n<#Clt%FPkOUXi51jP81C|k)6xF2K{S#S=_u0=&M%5&=M zx}?$$BSKAGT?GwRODgK|n3g1!c#JYQBx>iNjOnnKP`*49nqe+}VU0NANV}KqJ>P_9 zdH8y=<42Gk+cmq-PrLsk-t*qee>Se!XYYO%8cy8YUps-9uOIStNGoRm?g{&m4b^oe z)w3@uG`}4eNdg)cRZQ-_(WYp6(FA}Gh-bh)=j2(x=aGdxf1}-B49Ex2C3wRub5d3VK!yspvPT;_&_z zg9cRe>p!HT4hHLnAr1WoH5}f*VbFjEJZs>y^27U=4;ql)r%#_`yGh%Gnb!}}efmA& zoPJLlC`e0B+R4WEQP`z8Hs$!zp61M8r;)9uzcHwYbht zyRXAFannl=Gn&{Bz57+TPtSiJ?hj5&e?P9%%OmcSFL?RS!8OM{{hl!L?ytf%dEbb% zXKQgyKI^4fk89!r;p06!(|v{?u~h=SwBzvg-m{3(NqU-sf{5eEOrw|1 zhhYtQQ@rIxq#>`L3{*^vtF9NWwg659qZcl!Up7v81dXbgS5ZH?rf!mJ$DEj$=Utwd zsIBq%R0TTO17+=j&P==Pjrf8!X@$Toj>BfuMHsfU8z#!;CHl-y&=bWTJ{%rIFeAFR zz3qOpAWxiud=G#oL-_UXcjNllR?CAAMjy<#;6W&@tgc?&c=@IVRJ*+U?P&LbY2~&> zquG!BYiBihTUuk&$}v$c+k09drV%esK>Il-3ykqQ9bXSOX7D|}q&@FLJRt6u*rO`y z7FCrj``2dbhH7siq-vRFq29&FUj_mtjgOu*#$GZXZay&VW2%D%y95|mSKrF>YP)7` zB^Fd#dF8HmwDv~K7G4AFIYo0)*S%oisI}*u-15=N)FZ5}VD-UU$!S(ve2zC|CxGaS z65d^P!@{|khU9OC>y($kU7MCgBzsW}W;hS_JUareevndpMGO{sx_h( zz)~wc3lht~{lWL=(oV0Qd38yfxnkn3Mlmf`q$H)=M6BhU+E4@U9IOby7cITC@``Fu zwp}m}YfuwQCK6(Y751*EF7H_dvk<(pO3Gy2p#iHpT)M}KlszA=cnTm~$$)3uJalv+ zRyUG&m}R7sbt&Yaza5tyQkk2JKZ&KKi3FGlrmEV8L`hX$0tl4+>~^K19wXGFnd*1M zCiT1FY4uzAz5F(=@8f9rY;RL4zw6(;M1B)5zQ|vD_GY6Pzn?B1JD9)MUDSCYen)(C zW#8-YdtUcv9(x170}lRnL3E_nxO4Ebr=5}7=C@9tF<|jXZQI0o3!l7gq&EEgIlE4H zf8>ab_b=^sSNlS$yAo?WN@@vPBn+8j{$$stXn^WXgVpF8_~Gx{$ZHxHe8WX~}@ z?hbDF^4!^DI#&DczyF~N$6Wc`nD~b`ZX08+cHONtLa`a^r!%l~LI z|L86iGe$nt@#>@RxwgZhufFuk(cQ*h`OTSY17mNP_4HRgONWpBq*Ld?|2(;NY{}-G z&n*4+#<9z`<$d?YZ{Ha^Vdcv+w|tp9?&?`1cR#pb%(yLwPyPG`|B7+5Hs5#eA?xoM zSGVoj&HX<5Xxyfv-v?Kn(q;VRWviae?sDAtrk~zj{7T8`xZTl@JTm^s>UXQE z?%O^7rRUmhIP?7;$2dQBs{C`O6OXxN_~Z}zO+N3Kw#V)|@yN1gj+rs%s;`b+`Hy23 zK4ev2`%dA6QC~l`YuBGkC$zu&>u#s)x^zO9D;M3+(Cy_3=a-b9Sy5{q`|UrD`m;G{ z$g#EGZ~E|=xz)!W{ln1gM}NBR*iOs0{h{aMZytNirA1@vZ_k=ocFnHaww+TvaroAE z-*}|Yl8Mow7jLZi=j{`38u{+u*L3}0;`tZ7)^Oc#I!wC%;c;!xnJ{5eZoBNy-?(ed zqz;$m-tg9k_FPhMSk$lC{9GHvqgA9f%2<&S4i?sC-)>we>?fKX}$;alMX#@;k2i7-(NcCxNV0HnBM7b=S#Ztq-QIdQ@#pJaJ-)}pf+v1+ zPH@T{C4akfcIvEe{!yLx&c{>hPJQU??iY5Q_UV{=JAD22 zanr8LoAb_>$Dc9n_uZGidfO+DPCKgYVP(%R`f6JCTLXvhdEubxZ6>aJVfcuXravEh z<(h+o=TF~r(Uzn8j(>Lg@S=xiK6d3lri%GoLKz{n=k;jhy*a?e{kvG+^n>J2oxODRl0f`9h~#D<1#!gPBKd zZuiXR*L6H`(zZ_D-gM5fC-(2w_a9@ItUYm6j}?Qvw14o#t9zg1oBOBFPh9)s2_shq z<0t)QSm8xio<04fjp1PrkL7nMGF`dtey z+_b2)|GX>4EWP*o(mf-JPnf>*kEPel@A>zEy<%lsp8C3eF(q>k^;-qhI?(r-u?H zOIMxvy92&R43BL3{*71T< z-<6*+%JNd1rO|{KVg$`s;b0^|I1Hwf8y(p|8V-e*XQ3e{*LAIo(xyqHSzY_cRn5XczM1z)eZ^NrFJ|qqZ>@M^)aLo;Ox;-#oxZL3&Wd)Gn-(m8wbS}>m397^W9^St zR|c;i+b4lS!W<$2@l1p|ji2CaJfkgB!OUp;;DeJ5A_Ve62~A35)WsxAN6GUCqzwpI;( z==<{yG=8c&uG}N^em1H2x!Z0jU-Xi!@y)RldC|xX zSC0D3UcYGStxvZJ6`+E_=b54FNh>=Y;0%>E}6LJ<@*}G`hB|(elq{k@W!4AcdRP57jHar^9kLj zOkG?!aoZOk%{y!Hqb18LcRcyT;`S>yUU%3Zzg~Rem4)Xlez{=DqIEy?o@&lsa&Z60 zuWUE>!XAX|MFB-Vwm8JT3vtB6f5?HqO@cPwlKR9Apzs)xnPROcVHhkL!!>&2+#%0GYUlQIr z;GJcQZa=&H$IZFRH_qtYI4m?~dCeU|=A3=bY0DE;2d)@2_@3pfkM7mQI{l;Nr_B6& z{^*Z8pZ4}8MFT&3dGcwm3_r{G*gXBTG3Oq(ZpWxcPMa{~hkGImcAqxezx?W#PVcee zyEF5~6yG#+#XqOMyx^?hc`Jq-`t+9D!q2SO`c2(K)3g4u;`^`8E5Chm;mTo`bZ%O3 zLFvly@cg^|ODR!AT>= zPrCKGRe!48-u1(&Z>~CTleMeMp;@aR`QzH^F;QI~kJHVHQy7$r0ji~#;#HBo6 zG%qgLf9sd}GtW4%pey>}h!BL%lv!687KSJ+TG?7ovp1RP_I3A5^Y5$N|NHzu0Rj3J z+0ctez-BN0&(0hL)${U?_e;e+Hr`=a0J$(t&?Ibgs-Jghi zKD&O9TDLd}*R=c6F3Gyfpc~g#h_eN(L9o!mjTX8tl;^Txbfol5D_{TVW9|H7KCArh z;^G|_uKsoovbOs1Y&l!-_7Hr%`wnO;?TX(0wYVl9_0}C8!!^2>(U)|aPlNlJTVLH! zUhCbZeltB8QP98fne}g^{Xdm7wa!*Dx3nx#zA|1;qeDH64=0`0tLWrj;Ub%M^ABMQ zNq>F)Mp%MKlSP0dks#&G=Sg-%D_73-?}|@Ag=*H6972D0|2+J1wb2s4gg&M zdH~P>fRBOIEd~G#0T=-=S09+Bk=xaE63BaJO%T#R?e!kA#sBRda&<@QMqdx~f7Vr6 z{nRk?0@_rtrkR?=+}J`B?1*XvXpw;R0<3AU4XOfY46LL4zn#zh&-vO;|Hb)r!1*Y^ z`F}-a{q5=cbFj7b0FPx|Q(I%e#}qsU*Z^n%fc=XBuUPQF{`AELhT7a1Fq{En3n&1M z_4NS#oW);(f50s>0K0-@ZV;0Aw{>g#Fi z=>ZlUuv0g98~Dw@RkR%dJsQ~U{I^g&OGgVG8%tBb1K7&gO8-~)waow%p`J6K>jPA% zw*Sl*$G?1d!B_rM8sHxc%sU`t(ixaG+W)Y>i+>J;K3Lrj7D#JpVdhL?0BC7#odH$7 zIamn@4!G0?;$eX~Y;14-$1yWYODk{%Kwtl}k$=pWRQhy=bR@RU=72`f6u1qRR<8hm zU*Hk&_eFuF0G{#|dS-uXQjIOF0HYS58`d@lLVAHno}V^s5b zZFIrUrMAw1m$|O}&)A`#SO2q24;T>eKO{S16CA0px?h&`F~cFg5~`R z1~%6>2j5FzE&xhc@D#EH+`?`CdRPV`;ec-zLrWWA$?5%7q^oTKo(6wxJtW$?*7m^d z0-F%^0W%>4GO#|tdl2}$6ucI}-xJ_8K?1COfROx|0F^OfC-?yLPbckPb)ZOSNq*Ji zwzmK#o}&ft7ZM0hEr`RmmJs0C9$4}ahJY-v{XrTCev<}96__@_oB+Fm8v!;=;A_#r z*wWq>n0-3H90zO4fq)dSt*8>PrGsr->A?AbY2=T+(birUxbe0I_GUow-}{;|kpE*e zN&fc72251oc>y?f|Bix!VEE;K5e&!%+d51D{N4jifjn67pL?k}z<=#E;7)^w_GfRw zvjh+fY{|e-|5TF$_U>Q%4)~b_Jg!jS-xCCUWqrTym4chV!(kmzKigqw6l$M5V%} zRJJfuj$I}`I>UP@OnZnz*M{q|Qw}2Jw~$*MeECB$mjbDz!IR4S&QG#WQPICR*~<%= zP75ougbIix78W^~24N!lAWxeL97ZX(DoiPNnI2Qp)e z$|CM)K!8UhqrH8M5Ek>R3C?GtLPne{zP^5}!cO|WX7-kkDFV3V4Ihw20N@& z;s#tB8pYv+r6UJ05c)z)^Zb%&AmvKkS#J|Ke%{H}NF!O&HTyTb0a4k|TY18cYERaR z)D+fH3PA%f*`wIl);`Hfj8q@qPC)Sn^b5aNLy7X7dY&|g;oIRK`+(@IvQ@hhZ15O? zn`=|R(JGT*p|hSy%l~MrJ{*D3OZ$Qc@iyFpFwn#3#xn^it(nE(yPHi0nMuYIjx0~v zue)C!i3w!`N`%FP0{TdFY78nLDL;`G&S2wVZQm9&>Of>X9!u5q<&{R1Sf>?M^JsPQ zIa-psp(Rz}4u73^A;Vscsx&~IqUe#C26-WFq9vN8@Y?-$CH9T)lP^i;f_DSLcJp)` zcrLmxg&5o66>cAt(4%ewGgO)nVt9`FDI493l~|o?bn95{-6-OhRaodll)gx1bHDV7 zCMa*hv4p(cFRDl%2st2gBu(8}?Em6ih^-;2iEHl=9G4Z{_Z)98Xy^tBq>h2Le{?rG)=uL<_b>yQ4)h?&nyCMFSl=0 z#Es%3&)<8@rw5tH+2?S4riIjSaZZW|go+oG?}POAxniiC>mv(XD=;&96-4L zIHFD;TL{GHAz>@3KS;Z&3$b!tPpsx`QiLhqq<=QYmxSzc{hExHVO73e-%Ws!l`2r1 z%-TNL9ZE=Uc%>uN2Q{t>*?A>=HxuQ+pF%XEE~vY_;tW#0l>x<~b!-TpW87h@CVr)M zSruxCJxPnH#C3gd$*cB$&#eD6H9;_SN9~5a8=~k(7vw*}!MvtLmz>Mzu*{*Y3Xb?#D>b zCjI;lKJ%MIadyj{_{bLyhw8oKM|`@iYOqMT&DDhpruHsy`>40($2~H`yQ{HO-59D8 zTN5oC7pX^D%wZqqnu=#=t@ZZOSiaJ5c$Qa<6vfLphqV}X37k8MWiDp=DBWew9PMcl zNL&}uYy=70)TDj&$2sHBNvWG+Q!kksChfAPB4q60^nN+uXEzh#Z3>EE(*4-1XMLGI zQQ)7z2=yfOQN3)pMW)6dUZLRb-sg#r$N8KAZI(_!zu~y+J$a|@H=9wd<{X~FWltaT z=a;JK17d}i8A&xeqq>D7X_{Jn^J!k4!tFZ8C zmaq}xG@&hFXv9A=hiZKAY0j4C(Z|pC?LGy)LzS?e7(=AmX6ghy6*=QKUYhVE?>tSN zb@3Uy5Ar%w%ei3eKn&{xcUmouMUiKnsll-5!gmX;Tn#1IQ`N_3!nESpO1IGmU8fWVwMPd|qEjE*)O9nR)FyStH%eaPCL*#Nvbgo)SO?wuKP_>2n&Iym zmnp+j_MKII65}1-xM;yjBSO}os+Nyk&`e2&zsh*xwp1UV6?@JYHS8dnqNC4a)W{O0 z=qFfRSNJxXS4w&wwSrR>xYE5``27ctwkABp8!?jUM4FBLB)sRZ19kjk!cz~tZCtC} z6~ii7U*8(CR|*x8y-C(i-)1E4JiGSlUY?BITZ6cP(Q`k&X6Hud4uM{p2;*<|S=O*( z7Yo5gDifI$uaGMyk9P=##XFb}n|p_lvP3>z%GHOPGcs9l6)?T&i8zxhz1d6@28B3r zQ7BFPVn})5s`Gf4%mCClIaftOwh97s>zK* z6Zn+EOI`P``21Fn5BaIS1g*IuGSticKC?!DG0xYx4dv&BPFn z#rXyDGch+v-ef&1l&`rWDe(A9GUY($cj3j&x_oR@t@HSX_A3oewBlFGx#$ZR^_9&( zj%qK&C$a66QKzGD4ZiKZDAi+mFF}AF*Y~n%IKwoCWv>-t4yB_1mg~^CBS5rXF#mx6 z&0BSz8$?s+s#hxCG2XsL|CC#ey!gFi4Hf?~qS&T!$M46HSWKqvLd?opl`^WazTt~~ z)%rlW@%m>cD>Mq7ykCrs7;Kend~Dw&gx+Fu_B<05cs{Ztt0za+^7$qa{yIH+Y||%K z=OejU$pS~4WS!`x$TypO_2KwVsUV-aaHi145Ysp4=U#5r>BV~bOnmf(7O>e$HrXlK z{?jcF4^Lec5PSXX14JP2G5tZBn%gvXuq{92x8nuw67!+i>d4s9#c4A0Ki$3M@)+xa z&ZY6kR=fNv{+$QY@6h{}^v8m&Ok(o+ye5i@LGh=?-IeiCE#5CxV|8c;eDQ+?6iIL} z*I|sr-J7x7BTbL;Rvr?fj>q>CDX90y+EW?Kd58NUJGBqJ-U@COjr~3C5vJR8xq1(- zx<&+u#x2+7w%wmxhVOZ3d0)KE)5b}ah5wL;oYe|jA7;FXdPC5ugLpdfM#4gz;<$4; z=4$QqX7I4{(?XD1odc)ohXwOQ!WDZp(O2@ID{iQ;24Vr~E`T$$5o1MKIUGnw&QxJ13z zjU?rcT0=~S{^S}_bQna7c38uR^`4JK1*J7LjmqSh(Met?-?iGNF!0FMjm`EGE*@9W zB2p8&iVx4jzUZDkzu^n(ukyLCjW@NesC28yyNY0F$=qnxa}yn1T3%2ey{K|4*?4-< zib9heY+A@E=yEh%u>dgcllmIY>4+aE^pBcZg)XLWBp+*VMP=x6_;BJO zcalV8!`sG&rQ|rmMpACQ^xCIat?B(cG&TaQI=x-8KORY|$u?2iI;bmAG)9H`$;Mk= zp-o-EnQ-oWrm8)pSZfLaDIs14K?iLvRDLQhpWmVL-5Ini5uvv1dn0OE)*GD`jRDaY zg2Xk@w2liq?@}kshRfe%F^tesw3rqUsk(^`Lxg66C^%TVQ`n(+^Dcsx3`5dev@ko<>nY_cPCZQAzrt`&TWWVtrGWw?Cv`#(@aOK z&6~1gGE<~z((n6U{Q~1u(;MdZ_e8=$#hTkG3ikJxPpSj4s&}6~8CXE~Dj2`3fm$uX z%c98WXpx`JmWOluB%Cy*DRCsqZ2m(kH^!Itd%uU@0QL5M$5N6`36%| zxgqI+N($n9xYC5t{CrW&90(G3dMDdn@<9#nUMl2J1Bl6RF6GD@T91qD8zxkGPlzC! zep43b>*v)24UglTnf%mmn*F_I>L{`v3fclBdeJV{KxgIOnd-?i`ex2(Klaa|2r;T> z@_pa$ZUTH`2zlh9Vn5mij%XHMy^b1A(3Q@ycN-S3SzRzrX~bXUZT;-uNAM(tbY5P# z!$>=6xb*$jZFYx1airnYNoNC}V3N(+O)egSX`@zG0{*07Uq-;tBC6H^%yxZk3rXLX zrhsh-MND>HF)~B)eIu^QqHQwBS4ivr$PVqG*cbYr5p8NSuZL3#B4VtB8;p71hdteZ zzv}3Swyh71`vLv5k^zGVskWhkOZ?QaC9*@@QiJ-WyMn4f68~swulf`p2~=Cg{+vmE ziNp+vYOQ=VtW$Ts`=zEra4Z>|YS`0Kb~ShL)OT!KCC+=|pUdCQb|0mw`OpfJK1-w| zSXk5#zcLeH+_*BuMs2$~f)9RFAa{)*`~E=i>Gz3(<(B*K20kt8#Z|#f;g^c553%LFE6a7<}GqU7Y5rJ z?T3AfVK{Ykv^IUf^XzM_tL=WOsg_^-w2Y{d^mF?hwNa|C{`C~x(yIwY-}Iwptf86D z3k(>fGUj-uialIMyVv-VUhzMKLluZ_#%m_~IxR%BF^{&`K+7jCyIr>DDv#S9@(Y_s z_!;oVmnJ7tI_MU}6-eedV?z8`QvKpyq2PwmB(IL5@~mA;>9h56ni0Xwc3w4_#q*>3 zA{4k{ofp;=(OXvi(3tU6{bRjKO~xqYwWKKbT?wvQJTP3;ufL*w*f5cEtNWN-AG!|x zKG`L>AzZMsG&)@C)RD0Jm>+N7uyW$LDqAJ{kQu+gvIDi^Lh>SAPI_l+jTHe77%|4O?vLrvgE@l&t)$>gw>iX z$m(npZxa2LGB`R8BH8>)j5jVSH%y&<1)VXfaOy~{FvIE6I|ckge6#D_-s=!!j}-L=^@U1vf=^${q^69XYfCyUkWA9 z|DagP{13eMKk%D><@~At%H=x$m6M$^Ni$s%^y6Iu~2jU4-VbdM-cu8@1kqYuK0)Z15b2F%m47LAZW54 za5&Vjq*Kzh>s0!iL3q00)=|vN{>>vxESQ}91ODdK?-2QLj0*qeS^I;-1RWEI-`~797ca6Q*E07v=R_qrql_3B{>^<6Vy~Py_`H5`{!OF?&FBPGHEqd)CHwoX@7B&Bbaq*5C$Gw*I%5g59lm5@o0#Rz@k{sf}+*23} zlW|vWEr$=Q8O$@4=5X&{ZsLc(!P^CM_~H@uR<@DR`mw`kFyHLYQY(dlf}!j#t^+84 zI*;TrUXM_Bd0qS_z(-+*Qq3(t?6?jyxkmszn+(ExBjj`g-@8q{3TQ2u#xr}#f+0Oi zhn{r>utJxzkswWpEI-Lj<9QJZ#N!N-o>7QQ#|b@!348S!@apoQuCR)icAb1HdUQGu z!H=%#u!PKwIz)a-?Jye%(Q9&Rj2M`!0C8|w8}qan!bQXd8f7Qk$aA|mhkbm?b9OpW zBr?ZF;K+K{K=+fMoS44{^?aV#TQk`_es1J^@;O7z+Q`TxeYmv|IjNCR^AUl|_3E?7 z4B>q*j0i99oEJeZPmizKdg6>oXHH&xLNTGnlc&A>%+d5@H`H=xAX3;NBk$@g1>U6d zr4`cVL-mw`*eK}ai3n*jE(PVAj7a@h8bO^I$mt@_w8JCPo^$txx^Ye!!H}sHU+U7` ztIFkk{eYmAaYsL7W-jTN6#Cu3j5DP{-Ko5hM+su5j@y@}J=Uge+`*BZ9)y%Qr!I#g z9I~Q^AqjB>346VxLgBL8Ex4ar3HJ}=c_?qcPBLce?k`Cl=oS>^ zOJ5P*l52`+#F`x1@fP-PMSwOq4r-_E8-%Gb!WHhZt{`-)>rA7_K6X|^?ZKQ5BjdIUwnD>k-UT+kqIl>)} z?H4m&^i=Sa0dL!r?zNsWkHPHQW`90}$Jq>}$vG@3;iPg))}zm#DP9ciy3syND}|fp zkjh7;hq9}aOk^#1O{D%c*5?gV%V;hagg#1)qrTm_v);PUew;c%BsRedx{3nxBYcC!&<{v^k!#CDlgvqhu9r>LyWIDw**+Xmu(*#mZ2AY z@`P2L-P;bc!q+>1oR5ngBoViKx>c#-ANjx{5V*AHffWXWz_@&n&%*2dwg`JNL-j~h zswIAB?90&F<|KX}oK?xQbhC6OvZVG>RKM~i=x)=IH7Jos(>8`Ag*-xR|2k2h1z(&; z(L*ZM(KFI-l9v|me;85`z0HDTofhq` zhs0LAU-hcg&qWaI2${X45X3KZQzIqTgcCJZefJ|-#khPs%*mdaEhwRro;K@CnGc~} z#k4$xuj$8XS0{v%e zql@5h0iXI_>u_~2Ch_K{Z=u_sePWF*WoGiJ+f+#|Bprn!Q8UjcPtF$ko3qCK;@ z*Ju;pH>2#ZRohYWqA@pm@OOkF=@*Pj*%EsL9G@*YXKg4}-=cRWinKPqiq%k@?ISW- zb(ubWm^OcPM%2VYnJ&K;ifo{wnYWSjY-1a;LgWX2d4vbu<%oK_hPs|05pLFtMO)&V zGa-8`heme^n=Rk&`{IS(Q-3a)3t)!>b~QJ zA{|{R@1yQfK5CDHO-*yBguL_t@>lbk#Rom4Xt9L=mqcuY1Us3Fu)m(GBK1(2TFrYY$Q zQqQ0Snt4SDiH`g7Wmwa~*O_K5b!bH?3nx74@x5INti3%Yo3XLp(UzfSO`LTFf;ZQ= z#El$ejsr7JHNG~5#;La!3Rut%uOCrn)?SWa`gS%-8sYh2oGk^T_M|4~xq_Mr79)w%uuYw=vFLz(#OGS!bz@v* zX2Q*f>eq2T+9$4dYOzb-0(m&>wCx)=t`CyYt*>KocSFU-8Zfri>x&?jhuB;WFzN?M ztBa#Js}R2^t>}~#;ePj^&cdlh(2`*^O>})1oAyo9K_Yb>sXp`G&s}Z*W5@38cBw!( zoULywW`qhBVbymRJ-qRX-iViFvy~RA>zbKKEg7QAO{ZmZ;hO!H2VBse(`0+WiYh4L z4X(>CwJzk>CLC?o}zRjX00Df8A`7yaDKoDO2Xk7R< zl8Rd7U7J8$p@O7c2^xn%MEq(OO#MXzXgrJl_!8!ywH}w=ZU-bFL2UhJkQMw-r`G&T&cV?Uk?OErAf_Bwa!XgpXUAX;R?NzW%} z%woc|HGVy(qZiYb;un=o)&HqVXw1;fA3Nc?1z+|D7JrYq!HPF74k5f%x^3FE{sq=K=R)R?DeAfWQOk`f|e ztk;Fz#CUYO?JeCxI%E4CjB66?ngHnu?&)116!BHd`W~^c+IZ2y5eZ6c^I8UHQZ;*_w5*vYow-K1`3FgsiWjGHt+x*%(GsYd3rTg0? zJQJwC41?NZ9FAx16@2pQ(ON#s-WuA_U4WOQ#W>43!+*keyIThWbxg*H<|~3qj}iR$ zPfo7w@*>*aY^=z1*WSV329=Yo@(0{11haaYQ=)2-_#L$J0v{ICV}h=WJ6Lm`j>cS# zm^{d{UhQ5gp9;xfe67Fmfmv2~;d-iulPGBw;==4=(>YzRty+Fe(E34|PPP5n8#`o7 zJuAY4?0wsB&Xz~ZI_N(_c)Q0Y{bCEKOGK0hmV#I5hS^{x^BbZ;xHHteapp;lU%CPa z(YM&3mj-LYZhAAZk`^W_5Tmk55&5GNQ;B+2JuoCSWNM^}kwNLFVQ#S62 zrzL3WMm_U|0atK?Tn#RZ_zJ`S{e^VpU8+1$8G}S0Wo?4t3G>P_w{U*WoLkCm#ix&u zhx~~+xxrho@N@!cvi=8Jaa6?NvZdMZ!Ol@%*C<~%G@j%gXR8bZ@6FVlFI3nW8h=JB z)5mR_KFy0tdUaT^l4ags!nb5GSdMnlcKUik1rgyMH#|1@aWVGvu>2hEP+ID4X)d*v z7?I~HF8o>#8|`z8B&u*uzO=MM(=l5s{v^J68m3a%nC3Tyo&7HJ7eU&+zBEc#YbmC7 z(bXv%)#u#zOpYeC3*P?dby*!mq|BkseAqBK(PUdw8t0m1^N>go*|fx{?BsWo_k2n}m)C>T?zPe~t7*&!DrP@T%7BQtK+Y*;DA9V` z6OTN$W24i?*FnKFzVGtT4v9zoXobp+?Wt)~DlZI8&N01h?_NFCdBv3~sCfq2b&{AJ z;aVNlcq-w8>1ZwJK+iW|oBRS)XhldqGl?>xaQpND4YJ5*B9v?&Hg`)GOT90>h+mQk znjLf|KD_3pTJ73BHM+;X{a5ed5+{ z^YL7lczE*5(I;JEZF<7{k;N14d`QWYy-;pL4ldnh$bMXZcmaz9%vrw`D45nM@8-08 z$uWtRXR`UT!v3^U+0=e-(?nAD(qD`{o&IsPB*Jwn?_Ina163o~w;9>gkBeCTLkDNR zUPvc~i`d?TCk;6@>ox`L$0Vl{q9H~X@>&3-$VY9H$S(2_15fH(%K2@9_{D4A>Wh6^ zPpymVinn^>O$zLJtG31*nOC+>8kO$4N-XPeVOy(YdamL~3z{0uCXkB~I$5ad;jb<}I9MFMFJTpWAc4g|Twtg6*rt49^dXeq_X-{OHZlro8Rm^zzbR%iHG@-jMWOnUQg9!{yn z=ECH@LoS~fDHf90$W(&cKwZ5|#LTt~I-XF17 zM@M>9Fz@W9U4>G+iE^mrW6Q|k_K(C=r-XXKDRxhqr4lIqjTdd5$}Qh@5ye)Vuo9u= z)OQZ-O3YU7234L7Ab)!z?;;=9yDNnJ+>;IUek9)K`?LJU#_x&|FSTGM?tR?INxsQ# z8c^T-_M zmQbImL_7*>(5D)Pi#zP(?;xPQv*nv+t7=b_xU@;{%nz3IWJb6X$>&0&{ z3E_jC^<9C`)AEdSGi%fX;mf+3gq9JRR!BvVM*r7uQWdEc@7V=u*bj(kF79e((wCsp zZA1$R)~llz@Y2UbeM~yC;ePtj1GVq;=w;$UWAW@Kh!W@ct#W@QF3voW(X zbFeV5FtRYQFtf0*u(E(y*jU(EI9M528CjWFnORv_Sy@4>Y^?0893Tb|BZvva3}OMX zfh4q|6xXJ_Z&0J_Kl zG!OhT6(EQMsKmhmj++8PiGBhK`1}pc^L4S z1)vH5xUa|nfLAa51h}twt;sE3Wr~}XgU>?98fNKD7TtHko04e~?0K@^P126;N0w4@P z6@Xm;(A;Pc1OO-jFaY2LAPGPlfF*#B0D=Le1IPpL1;7Y^Zvf5#Ao8F=U<05Azz#qN IfGmLj15AsAf`cB2A{8c-Aw6+}2k(N5R#>eZ`P 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 diff --git a/tests/fixtures/plugins/sleep.wasm b/tests/fixtures/plugins/sleep.wasm index 18c4ef8e915b739cd3c4a8eb0a631abf3e2acb57..a6527a356ec1b00c173e3d6c4dd19b193ca5af7b 100755 GIT binary patch literal 126051 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 CIEUx} delta 26992 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

Z;8Ie@+>8SRU*!4*3 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 G2>%bt$IA); diff --git a/wasm/oxicloud-plugin-hello/Cargo.toml b/wasm/oxicloud-plugin-hello/Cargo.toml index 0ad59401..b1c75ae8 100644 --- a/wasm/oxicloud-plugin-hello/Cargo.toml +++ b/wasm/oxicloud-plugin-hello/Cargo.toml @@ -20,10 +20,11 @@ serde_json = "1" default = [] # Misbehaving variants for the failure-isolation tests. Each builds a separate # fixture under tests/fixtures/plugins/ via the build script. -panic = [] # `handle` panics -> host must contain the trap -sleep = [] # `handle` busy-loops past the timeout -net = [] # `handle` attempts an outbound HTTP call (denied: no allowed_hosts) +panic = [] # `on_file_uploaded` panics -> host must contain the trap +sleep = [] # `on_file_uploaded` busy-loops past the timeout +net = [] # `on_file_uploaded` attempts an outbound HTTP call (denied: no allowed_hosts) wrong_abi = [] # `abi_version` returns 1 -> host must reject at load +omit_login = [] # drops the `on_user_login` export -> host rejects a user.login subscription [profile.release] opt-level = "s" diff --git a/wasm/oxicloud-plugin-hello/plugin.toml b/wasm/oxicloud-plugin-hello/plugin.toml new file mode 100644 index 00000000..9e6d0d5a --- /dev/null +++ b/wasm/oxicloud-plugin-hello/plugin.toml @@ -0,0 +1,11 @@ +# Manifest for the example OxiCloud plugin (ABI v0). `just plugin-example-zip` +# bundles this together with the compiled module into an installable .zip. +[plugin] +id = "com.example.hello" +name = "Hello" +version = "0.1.0" +abi = 0 +entrypoint = "hello.wasm" + +[events] +subscribe = ["file.uploaded", "user.login"] diff --git a/wasm/oxicloud-plugin-hello/src/lib.rs b/wasm/oxicloud-plugin-hello/src/lib.rs index 3e9c2983..cb6b5bce 100644 --- a/wasm/oxicloud-plugin-hello/src/lib.rs +++ b/wasm/oxicloud-plugin-hello/src/lib.rs @@ -1,12 +1,17 @@ //! Example OxiCloud plugin — ABI v0 (M0 walking skeleton). //! -//! The default build is the well-behaved "hello" plugin: it reads the -//! `file.uploaded` event metadata, calls the host `log` function (the only +//! The default build is the well-behaved "hello" plugin. It exports one handler +//! per event it subscribes to — `on_file_uploaded` and `on_user_login` — each of +//! which reads the event metadata, calls the host `log` function (the only //! authority a plugin has), and returns `{"ok": true}`. //! -//! Cargo features select the misbehaving variants the host's failure-isolation -//! tests load (`panic`, `sleep`, `net`, `wrong_abi`). See -//! `scripts/build-plugin-hello.sh`. +//! Cargo features select the variants the host's tests load: +//! - `panic` / `sleep` / `net` — make `on_file_uploaded` misbehave (failure +//! isolation, timeout, network-denial tests); +//! - `wrong_abi` — `abi_version` returns 1 (load-rejection test); +//! - `omit_login` — drops the `on_user_login` export (missing-export test). +//! +//! See `scripts/build-plugin-hello.sh`. use extism_pdk::*; @@ -31,9 +36,9 @@ pub fn abi_version() -> FnResult { Ok(1) } -/// Required export: the single event entry point. +/// Handler for the `file.uploaded` event. #[plugin_fn] -pub fn handle(input: String) -> FnResult { +pub fn on_file_uploaded(input: String) -> FnResult { // --- misbehaving variants (compiled in only under their feature) --------- #[cfg(feature = "panic")] panic!("intentional panic: exercises host failure isolation"); @@ -52,24 +57,39 @@ pub fn handle(input: String) -> FnResult { { // Attempt an outbound HTTP call. The host grants no `allowed_hosts`, so // Extism denies this before any socket is opened (offline-deterministic) - // and the error propagates out of `handle`. + // and the error propagates out of the handler. let req = HttpRequest::new("https://example.com/"); let _ = http::request::<()>(&req, None)?; } - // --- well-behaved "hello" path ------------------------------------------ + // --- well-behaved path --------------------------------------------------- let ev: serde_json::Value = serde_json::from_str(&input)?; let path = ev["payload"]["path"].as_str().unwrap_or(""); let size = ev["payload"]["size"].as_u64().unwrap_or(0); - // Prove plugin -> host: call the only authority we have. unsafe { log( "info".to_string(), format!("hello plugin saw upload: {path} ({size} bytes)"), )?; } - - // Prove plugin -> host return path. + Ok(serde_json::json!({ "ok": true }).to_string()) +} + +/// Handler for the `user.login` event. Dropped by the `omit_login` variant so +/// the host's missing-export validation has something to reject. +#[cfg(not(feature = "omit_login"))] +#[plugin_fn] +pub fn on_user_login(input: String) -> FnResult { + let ev: serde_json::Value = serde_json::from_str(&input)?; + let user_id = ev["payload"]["user_id"].as_str().unwrap_or(""); + let first_login = ev["payload"]["first_login"].as_bool().unwrap_or(false); + + unsafe { + log( + "info".to_string(), + format!("hello plugin saw login: user {user_id} (first_login={first_login})"), + )?; + } Ok(serde_json::json!({ "ok": true }).to_string()) }