From d63871f3bd86e9d05745f335553f769667bf205d Mon Sep 17 00:00:00 2001 From: Vo Date: Tue, 28 Apr 2026 13:32:26 -0700 Subject: [PATCH 01/21] Add Chrysalis ingestion wrapper --- backend/app/scripts/README.md | 37 +++++++++++++++++++ .../scripts/ingestion/hpc_archive_ingestor.py | 14 +++++++ .../app/scripts/ingestion/sites/chrysalis.sh | 20 ++++++++++ .../ingestion/test_nersc_archive_ingestor.py | 14 +++++++ 4 files changed, 85 insertions(+) create mode 100644 backend/app/scripts/ingestion/hpc_archive_ingestor.py create mode 100755 backend/app/scripts/ingestion/sites/chrysalis.sh diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index 711f360a..32e6c94e 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -59,7 +59,11 @@ python -m app.scripts.db.seed python -m app.scripts.db.rollback_seed python -m app.scripts.users.create_admin_account python -m app.scripts.ingestion.nersc_archive_ingestor +<<<<<<< HEAD python -m app.scripts.ingestion.v3_data.lcrc_v3_archive_ingestor +======= +python -m app.scripts.ingestion.hpc_archive_ingestor +>>>>>>> b798238 (Add Chrysalis ingestion wrapper) ``` Do not execute scripts directly by file path: @@ -120,6 +124,39 @@ If operational complexity increases, these scripts may later be consolidated int --- +## HPC Archive Ingestor + +The scheduler-agnostic HPC archive ingestor is the preferred entrypoint for +site wrappers. It currently delegates to the existing NERSC archive ingestor, +preserving Perlmutter behavior while giving non-NERSC schedulers a stable shared +command. + +Example: + +```bash +uv run python -m app.scripts.ingestion.hpc_archive_ingestor +``` + +Thin site wrappers live under `app/scripts/ingestion/sites/`. They should only +set site-specific environment and call the shared ingestor. Ingestion logic +belongs in Python, not in shell wrappers. + +### Chrysalis Wrapper + +`app/scripts/ingestion/sites/chrysalis.sh` is intended for the existing Sandia +Jenkins workflow. It sets Chrysalis defaults and requires caller-provided +`SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN`. + +Default Chrysalis archive root: + +- `/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` + +The wrapper defaults to `DRY_RUN=true`; set `DRY_RUN=false` only after validating +archive access, token storage, network egress, and candidate counts. + +Compy, Aurora, and Frontier adapters are intentionally deferred until accounts +or equivalent native-runner access exists for those sites. + ## NERSC Archive Ingestor The NERSC archive ingestor scans a bind-mounted performance archive directory, diff --git a/backend/app/scripts/ingestion/hpc_archive_ingestor.py b/backend/app/scripts/ingestion/hpc_archive_ingestor.py new file mode 100644 index 00000000..cd47c190 --- /dev/null +++ b/backend/app/scripts/ingestion/hpc_archive_ingestor.py @@ -0,0 +1,14 @@ +"""Scheduler-agnostic HPC archive ingestion entrypoint. + +This module is the stable entrypoint for site wrappers such as Jenkins or cron +jobs. The current implementation delegates to the existing NERSC archive +ingestor so Perlmutter behavior remains unchanged while non-NERSC wrappers move +to a shared command name. +""" + +from __future__ import annotations + +from app.scripts.ingestion.nersc_archive_ingestor import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh new file mode 100755 index 00000000..8e6b991b --- /dev/null +++ b/backend/app/scripts/ingestion/sites/chrysalis.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Thin SimBoard entrypoint for the existing Chrysalis Jenkins workflow. +# Keep site-specific setup here; keep ingestion logic in hpc_archive_ingestor.py. + +: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL is required}" +: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN is required}" + +export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" +export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" +export STATE_PATH="${STATE_PATH:-${PERF_ARCHIVE_ROOT}/../simboard-ingestion-state.json}" +export DRY_RUN="${DRY_RUN:-true}" + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +backend_root="$(cd "${script_dir}/../../../.." && pwd)" +python_bin="${PYTHON_BIN:-python}" + +cd "${backend_root}" +exec "${python_bin}" -m app.scripts.ingestion.hpc_archive_ingestor diff --git a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py index b9738bc4..8a112e62 100644 --- a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py @@ -1005,6 +1005,20 @@ def test_module_main_guard_exits_via_system_exit_on_configuration_error( assert exc_info.value.code == 1 +def test_generic_hpc_module_main_guard_delegates_to_ingestor(monkeypatch) -> None: + script_path = ( + Path(__file__).resolve().parents[3] + / "app/scripts/ingestion/hpc_archive_ingestor.py" + ) + monkeypatch.setenv("MAX_ATTEMPTS", "0") + monkeypatch.setattr(logging.Logger, "info", lambda *args, **kwargs: None) + + with pytest.raises(SystemExit) as exc_info: + runpy.run_path(str(script_path), run_name="__main__") + + assert exc_info.value.code == 1 + + @pytest.mark.parametrize( ("value", "default", "expected"), [ From ff446c9d623c9e48fcd97b58927038663ffafe33 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 30 Apr 2026 12:08:58 -0700 Subject: [PATCH 02/21] Add docs for ingestion work --- .../codex-implementation-plan.md | 168 ++++++++++++++++++ .../ingestion-sites-onboarding.md | 122 +++++++++++++ .../simboard-hpc-ingestion-architecture.png | Bin 0 -> 487641 bytes 3 files changed, 290 insertions(+) create mode 100644 backend/docs/154-ingestions/codex-implementation-plan.md create mode 100644 backend/docs/154-ingestions/ingestion-sites-onboarding.md create mode 100644 backend/docs/154-ingestions/simboard-hpc-ingestion-architecture.png diff --git a/backend/docs/154-ingestions/codex-implementation-plan.md b/backend/docs/154-ingestions/codex-implementation-plan.md new file mode 100644 index 00000000..59322338 --- /dev/null +++ b/backend/docs/154-ingestions/codex-implementation-plan.md @@ -0,0 +1,168 @@ +# Chrysalis-First SimBoard HPC Ingestion Plan + +## Executive Summary + +Extend SimBoard metadata ingestion beyond Perlmutter/NERSC with one reusable +HPC ingestion framework and thin per-site adapters. Do not create separate +one-off implementations per site, and do not copy the NERSC Spin deployment +pattern unchanged. + +Chrysalis is the priority implementation target. It has the clearest current +path because the PACE reference and the existing GitHub script both indicate a +Sandia Jenkins workflow and a known archive root. + +Hold off on Compy, Aurora, and Frontier implementation until accounts or +equivalent native-runner access exist. Without access, implementation cannot +validate archive paths, scheduler behavior, token storage, network egress, or +metadata layout. These sites remain documented as future candidates only. + +Primary source: `/Users/vo13/Downloads/EPG-PACE Collection and Upload Reference-280426-174740.pdf`. + +Supporting GitHub sources: + +- `https://github.com/E3SM-Project/E3SM_test_scripts/blob/master/jenkins/chrysalis_pace.sh` +- `https://github.com/E3SM-Project/E3SM_test_scripts/blob/master/jenkins/compy_pace.sh` +- `https://github.com/E3SM-Project/E3SM_test_scripts/blob/master/util/pace_archive.sh` + +## Current State By Site + +| Site | Current state from source materials | SimBoard plan | +| --- | --- | --- | +| Perlmutter | Already implemented through NERSC Spin CronJob against NERSC-mounted archive storage. | Keep existing deployment. Use as reference for scanner, state, retry, dry-run, and logging behavior. | +| Chrysalis | PACE PDF and `chrysalis_pace.sh` show Sandia Jenkins and `/lcrc/group/e3sm/PERF_Chrysalis/performance_archive`. | Priority site. Add thin SimBoard shell wrapper for Jenkins and run shared Python ingestor. | +| Compy | PACE PDF and `compy_pace.sh` show Sandia Jenkins and `/compyfs/performance_archive`. | Defer until Compy account or native Jenkins validation exists. | +| Aurora | PACE PDF shows ALCF GitLab scheduled daily job and `/lus/flare/projects/E3SM_Dec/performance_archive`. | Defer until ALCF account/native-runner access exists. Do not force Jenkins. | +| Frontier | PACE PDF shows `/lustre/orion/proj-shared/cli115` and local cron/unknown frequency. | Defer until OLCF account, owner, runner, and script details are confirmed. | + +## Common Architecture Recommendation + +Use this common flow for all supported sites: + +```text +site scheduler -> thin SimBoard .sh wrapper -> shared Python ingestor -> SimBoard API +``` + +Thin site wrappers should live in SimBoard because SimBoard owns the API +contract, runtime environment variables, and ingestion behavior. Wrappers should +only: + +- load site-specific modules or Python environment when needed +- set `MACHINE_NAME` +- set `PERF_ARCHIVE_ROOT` +- set `STATE_PATH` +- require `SIMBOARD_API_BASE_URL` +- require `SIMBOARD_API_TOKEN` +- call `python -m app.scripts.ingestion.hpc_archive_ingestor` + +The shared Python ingestor should own: + +- archive scanning +- metadata validation +- idempotent state tracking +- dry-run behavior +- retry/backoff +- structured logs +- SimBoard API submission + +## Shared Components Vs Site-Specific Components + +Standardize these parts: + +- scan and parseable execution discovery +- metadata validation using existing SimBoard parser behavior +- state-file deduplication +- dry-run and capped-ingest controls +- retry/backoff and deterministic non-zero failure exits +- service-account token authentication +- structured startup, scan, candidate, success, failure, and summary logs + +Keep these parts site-specific: + +- scheduler: Jenkins, GitLab, cron, or site-native runner +- module/Python setup +- archive root and state path +- secret storage and token rotation workflow +- network/proxy/egress setup +- local filesystem permissions + +## Execution Model By Site + +| Site | Execution model | +| --- | --- | +| Perlmutter | Existing NERSC Spin CronJob. | +| Chrysalis | Sandia Jenkins wrapper. | +| Compy | Sandia Jenkins later, after account/native-runner validation. | +| Aurora | ALCF GitLab later, after ALCF access validation. | +| Frontier | Local cron or OLCF-native runner later, after owner/runtime confirmation. | + +## Reuse And Generalization Guidance + +Generalize the current NERSC ingestor by reusing its durable behavior: + +- archive scan +- execution-dir validation +- idempotent state +- dry-run mode +- retry/backoff +- structured logging + +Do not generalize by hardcoding NERSC assumptions: + +- no Perlmutter default in site wrappers +- no assumption that SimBoard can mount every remote DOE filesystem +- no assumption that every site uses NERSC Spin CronJob +- no single shared token across sites + +For Chrysalis, start with path-based ingestion only if the runtime can present a +path readable by the SimBoard ingestion API. If the SimBoard backend cannot read +the site filesystem, switch that site to upload-mode ingestion after access and +sample data validation. + +## Recommended Rollout Order + +1. Confirm with @rljacob that Chrysalis is the highest-value first site. +2. Preserve current Perlmutter/NERSC behavior. +3. Add generic `hpc_archive_ingestor` entrypoint that delegates to existing + scanner/state/retry/logging logic. +4. Add Chrysalis Jenkins wrapper. +5. Validate Chrysalis with dry-run and capped ingest. +6. Move Chrysalis to scheduled Jenkins only after state, counts, failure status, + token storage, and logs are verified. +7. Re-rank Compy, Aurora, and Frontier after accounts or native-runner access + are available. + +## Risks, Unknowns, And Assumptions + +Risks and unknowns: + +- Compy, Aurora, and Frontier cannot be safely implemented without access. +- Remote DOE filesystems may not be readable from the SimBoard backend. +- Non-NERSC sites may require upload-mode ingestion rather than path-mode + ingestion. +- Site egress to SimBoard may require proxy or firewall changes. +- Token storage and rotation are site-specific operational concerns. +- Existing PACE cleanup removes files larger than 50 MB; confirm this does not + remove metadata required by SimBoard. + +Assumptions: + +- Anvil is out of scope for this plan. +- Existing SimBoard `/ingestions/from-path` and `/ingestions/from-upload` APIs + are sufficient for initial rollout planning. +- One service-account token should be provisioned per site. +- Existing PACE scripts remain responsible for PACE collection/upload. SimBoard + wrappers only bridge archived metadata into SimBoard. + +## Concrete Next Steps + +1. Ask @rljacob to confirm Chrysalis as first priority. +2. Confirm Chrysalis Jenkins owner, token storage mechanism, and service account + rotation path. +3. Confirm Chrysalis archive root: + `/lcrc/group/e3sm/PERF_Chrysalis/performance_archive`. +4. Get one recent Chrysalis archived case path. +5. Run Chrysalis dry-run with `DRY_RUN=true`. +6. Run capped ingest with `MAX_CASES_PER_RUN`. +7. Verify SimBoard created/duplicate/error counts. +8. Verify state file prevents repeat ingestion. +9. Verify Jenkins marks ingestion failures as failed jobs. diff --git a/backend/docs/154-ingestions/ingestion-sites-onboarding.md b/backend/docs/154-ingestions/ingestion-sites-onboarding.md new file mode 100644 index 00000000..2da3aaac --- /dev/null +++ b/backend/docs/154-ingestions/ingestion-sites-onboarding.md @@ -0,0 +1,122 @@ +# Site Ingestion Onboarding + +## Purpose + +This work extends SimBoard metadata ingestion beyond Perlmutter/NERSC. The first target is Chrysalis because it already has a Jenkins-based PACE workflow and can use the same ingestion model with only site-specific environment defaults. + +Tracking issue: https://github.com/E3SM-Project/simboard/issues/154 + +Takeover PR: https://github.com/E3SM-Project/simboard/pull/169 + +Current branch: + +```bash +feature/154-ingestion-sites +``` + +## Current State + +The branch introduces a shared HPC ingestion entrypoint and a thin Chrysalis wrapper: + +- `backend/app/scripts/ingestion/hpc_archive_ingestor.py` is the scheduler-agnostic entrypoint for HPC site wrappers. It currently delegates to the existing NERSC archive ingestor so Perlmutter behavior stays unchanged. +- `backend/app/scripts/ingestion/sites/chrysalis.sh` is the Chrysalis Jenkins wrapper. It sets Chrysalis defaults, requires SimBoard API configuration from the caller, and runs the shared Python entrypoint. +- `backend/app/scripts/README.md` documents how to run the shared ingestor and how site wrappers should be structured. +- `backend/tests/features/ingestion/test_nersc_archive_ingestor.py` includes coverage for the generic entrypoint. + +PR 169 is an open draft for this Chrysalis work. Take it over from there rather than starting a new branch. The PR currently notes that local validation was blocked because PostgreSQL was unavailable at `127.0.0.1`, so backend tests still need to be rerun in a working local or CI environment. + +The key design rule is that shell wrappers should stay thin. Put reusable ingestion behavior in Python, not in site-specific shell scripts. + +## How Ingestion Works + +The existing ingestor scans a performance archive directory, finds parseable execution directories, tracks state, and calls the SimBoard path-ingestion API for changed cases. + +The shared entrypoint is intended to be stable across schedulers: + +```bash +uv run python -m app.scripts.ingestion.hpc_archive_ingestor +``` + +Site wrappers should set only local defaults such as: + +- `MACHINE_NAME` +- `PERF_ARCHIVE_ROOT` +- `STATE_PATH` +- `DRY_RUN` +- `PYTHON_BIN`, when the site needs a specific Python executable + +The SimBoard API target and token must be provided by the runner environment: + +- `SIMBOARD_API_BASE_URL` +- `SIMBOARD_API_TOKEN` + +See `docs/hpc_api_token_authentication.md` for service account and API token setup. + +## Chrysalis Handoff + +Start with Chrysalis. + +Current wrapper: + +```bash +backend/app/scripts/ingestion/sites/chrysalis.sh +``` + +The wrapper defaults to: + +- `MACHINE_NAME=chrysalis` +- `PERF_ARCHIVE_ROOT=/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` +- `STATE_PATH=${PERF_ARCHIVE_ROOT}/../simboard-ingestion-state.json` +- `DRY_RUN=true` + +Before enabling real ingestion, validate: + +- The archive path exists and is readable from the Jenkins runtime. +- Jenkins can run the backend Python environment. +- Jenkins can inject `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN` without logging the token. +- The Jenkins host has network egress to the SimBoard API. +- Dry-run output shows expected candidate counts. +- The state file location is writable and persists across runs. + +Do not set `DRY_RUN=false` until the dry-run behavior has been reviewed. + +## Recommended Task Order + +1. Review the current branch implementation and confirm it matches the thin-wrapper design. +2. Rerun backend tests for PR 169 in an environment with PostgreSQL available. +3. Validate the Chrysalis archive path and Jenkins environment. +4. Create or identify the SimBoard service account and API token for HPC ingestion. +5. Configure Jenkins to provide `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN` securely. +6. Run the Chrysalis wrapper with the default dry-run mode. +7. Review candidate counts, skipped cases, errors, and state-file behavior. +8. Enable non-dry-run ingestion only after validation. +9. Apply the same wrapper pattern to additional sites once access is available. + +## Remaining Sites + +Priority and status from issue discussion: + +- Chrysalis: first target; Jenkins workflow. +- Frontier: request or confirm account access. +- Aurora: request or confirm account access. +- Compy: request or confirm account access. +- Anvil: removed from scope. + +Expected runners from the PACE references: + +- Chrysalis and Compy use Jenkins. +- Frontier uses cron. +- Aurora uses ALCF GitLab. + +Confirm these runner assumptions before implementing wrappers for non-Chrysalis sites. + +## References + +- Issue 154: https://github.com/E3SM-Project/simboard/issues/154 +- PR 169: https://github.com/E3SM-Project/simboard/pull/169 +- PACE overview: https://e3sm.atlassian.net/wiki/spaces/EPG/pages/776437853/Performance+Analytics+for+Computational+Experiments+PACE +- PACE collection/upload reference: https://e3sm.atlassian.net/wiki/spaces/EPG/pages/5477335106/PACE+Collection+and+Upload+Reference +- Existing site script wrappers: https://github.com/E3SM-Project/E3SM_test_scripts/tree/master/jenkins +- Existing PACE archive script: https://github.com/E3SM-Project/E3SM_test_scripts/blob/master/util/pace_archive.sh +- SimBoard script docs: `backend/app/scripts/README.md` +- API token docs: `docs/hpc_api_token_authentication.md` diff --git a/backend/docs/154-ingestions/simboard-hpc-ingestion-architecture.png b/backend/docs/154-ingestions/simboard-hpc-ingestion-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..4e364fb081def9f54edaeb5ea63342688ec27ed4 GIT binary patch literal 487641 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 z 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ⅅR}uPX}zz{(P(|Az~B;xLbjSTc1XO#p*6y-%SmM zIl@$uPJ7m01H=UR7s@qscGSOE&X(wiIC8=887U}C-D8mhnkvX0WuRBE-kZm})I{(#KF5ol>a`>T<_OGnei$eZ& z4E7rvHdFu=E4bK_^k!$Y7Ma0NlNFNZ-upnY)>+5ts58HY(04S{&@rL@*e+Ru_0+QD zq2Hg1J7eW3ly>je-n6+vCm*OfJ_PLD-K-2mQYMoVFnl!~>X(FP3@XRisKagO zRd86;U649`a9aR@(?c}oh5a#r)20K-{g;H*^Sw#r7ZAFyrdz;`Wqs1+eV?=EL7kOx&t;+;Rg(fqS9ugo;urE!e zcYf!1$_j_OfY<3CL}h$Oepu^^K6cbI%*RS@T*$h;?7q1yuCG+JF&{g?M8@rTEgb4w zY&CJJ$6xYQM1*ZSRTUupruaB&Pky-}d3s%S;yzy{2@8=>=ebl2W>AG7rM>t%j3-Z_ z<8ixEml}((RmQE|qAwLzNhXDp*bi+$WQVC3HqV7xuqL$!0vS-$kDy4 zv`SP`E0;$GGy_!HTZPgYkbGl$2np_qip7$vcz6rF&&4024z5Ih_yu}MeXI1N(Yga^ zx|nimcRnfHZ(zWa1HAD>$%f&?g%eU{9duhA(I{2Tzv+L+TUip4YL!EdIMrDaD5@0d z^{T(E>d4WUX%1tNxV3A}MCnHi+*p$Z*wGKHH|$2Y$22`$CEQ`5O~heick z^Tk{))XNDnULVt`p|4=2B-Qy76(tkOiW5UOe@;s#AUaY4L`Pl9r3D5L2W{2Y*Rtw9 zCs1G^t3h~rWM4`Dhn!XmNZ;*tI zW{PYVUS?MClZLt?l^@Uar_Em&y0?Lv9LElh)7KhOPDyE*?xS@GZKO6Cgxxt_e2XW9 z5Rtl@unu`Lt|7xRdBJRLY(t%%aetQh0Ep>H~2 znH6wYJSsRNDZ>+C)94@Y;Qxwp|Dgz?_q!wOT+?mi>tSB#aY8MK+rsAHRcMxWQdj?s z)PjBw9sp;rNu+=SEe|l>k?G6i;^i}?#-PP|Rl(&j*L`3?$6_2v4Gf><)d)SgJhuap zG~?1xpoa#dEGB(v`OPJUx~Ow56xaYyO#DZ z5{4bM-Fku0O>uqEQ?+eju>;&R=2vAK7@p=I0rORQupup>q2h6zi8$lH_$^%7RKe-; zgZ{>Pfwl0d%}gOe$N>|2=*2VxGAsBuau7YQ1sq_BwTRQqd>=?V?oU|q3}YnDUIm>4 z0#R!dot8R<=}JY@1QVy@eed(9@SE!QxSQ5n!&B8v&B`#2y!OFIPh<1z$H(O3GJMUB zUucA#Ny3TaklR9W!@yc{*dw*O$*DJS7|4GV8w@hC_-KfI8}bO4)>SkMW87gGL2}_6 z=9O+6VJ$oiHL^3$`1}$$u8{2;Lqw@v_nC#cSWk)lLBa)Qfp_XEMZ=F5ly58zEF!7= zw}=T=t$8UKBH5ppI0$wp1Q2OrbMv;68c@9~#Z9nPAq|+wHoQ&q)LJM{RFp}#Pq zwF}kkQAlS|_a%~4SLl>|ZEQGjNcz=58tky?^#|7Z_#QG%da~&=u9;3%o}Y^_+8MaM^?W}E_dipg zHn>cr<+5Aiu0%e5uW@0Zl#=zMDa^X2TvBW`G}48FWJfmQX>te4Tw$+F5>0q4;+(Kf z_r(d?db5@scY|N*6(;dA@H-9=w%QFYlQVDhURP^7jG;aLK*Z)m2)#kR>?wiCreryT zXg}!Txf2WI)#A0@ZUhk<=srN}urZ6@bKUC>J;&0pOjs6Uq5>K96ff)zEdpe+tfMe0 zfpwKxhw8b;fuV|VPNnBHFX*V0kw1~>1bHxlfjAOp7Pj!29zQyRyA1An=({{-xGb>! z*$Y%R6Z$Qygn1qQf9fBk`H}PmmLc7V$puMJy(H`+)4x>V>4CJt1t^wHM<{x)3dBW6 zNSUC{E?}z$00e7z(v)8#2y%C9Y_M*^Y5a1!{q|rf84(i;?-vIUCAzQY;b2_b{)N#U z4QCiFj5nsScPTeQ##`4#V|8p1H3hk!LE@9s`{P&b<_7nZ@qkS9q|xA$32 zS~ifv1bfN$r$rCc!h$%Z$I=etI*UwW=!D}ZCv6=OA_9T8CpwlLwr{hBMemE0P};0C zL#8ls0pmocm(^2TO}$eQkA-%-gPAIg10_^nXO>@i$^c@;`A6xFude2WQwTag9hQB& z=7F=s=Mr?yVb;Rc_{IM8M-ocr$RA}sjMURhK9RC!8xzDg!_p_81zmVk7{3V@5(nP} zzj|>&n{pyYeuZLmu|~|BpuCY7_l4Gh6VQ%`QbHnC@3s;!k*0UPR38cr*riU zi7rc0FIW7S6Gv|qUzc}|hUn`RY?~cpAGlreypnU)^_>f_ns-wJPR=;W+OjH9bpDn` zvEDo&(88IPLnOtB6~EfaF(er(gNju%Nnr4m)cuC$;wlSEsqoXs(jd*l=7}@No;Yy5 zyd&*P9k98VA*&l4W2`odL{t7x&_Sv%y^nFQHpqueQ8uz#>q8IZpp-W)uqVWUmbzfR7+-^}!k*%;woXJ0Jp2C)^Z%4tVJMSoM<}t?W0ssi=jryg!Ud_5+6pB{6lvmwu4p}UP)w%#( zDRi912>J~QPhQg)k=IJS5(AaP8!K|p0%xN@y}t?pEDUPJ$s`(09x+bpyew7#2lfZV&8qLs z-rGGEhdMPU$z$`y(&!{b_#ZnAT)}4FpAF-}MMT{W*>MyoU4G06{Bxhz`N;H*jiF!M z9g!l`8qT8Sc4T0q#blGAdmtS{d9@_7A$!F1G&n#u0}BC$ zDjrWF9ThWO;C%WE#$-YRgv%KZmCjx>A}UH{S5VgKhlPsj?aWAUiCa+;M>3Zzhngg) zq<Q?Jx%rL)oiUB&xT;KYJbwK-QW{-#j94*?1SyU zatOaWVP|*awS9qW`Yy7otudbD&B<%k49 z5qj^C{ln>@j->UcqnD{2P|*`fmuIYF9S5qNZK9-EKw%C;gr^NYaC~9dz*bYWep=#c zmvuaoKtRj!0-%MjExywyoSSVXnA^hln+sM2zc}MB1eyN9&O0GRe9^COk7p5%ZQ~A_ z$G8%kLvcfq_LqVUV#=24hU zJ!R57Azoh})*Fm{x}vZfHh2rA9G#p#ToIZ!_GisYpd5T)T3qy}YxYr)9PRB+cO&~L z=Fa(wqZE#u27@M9SY(jKqFTXRV8S8|nn?ZoyEqir0ilkR(rI6Q>JaPXFclycSPp`ZXCU22Ij3BLp{{W1IE%+T+2t!E_`GJA z*R{~%ft5(A%x|q1d~w`w*F&@se0$za+jhxRCdQv43kx)fd5Ydn6Lhvtcb>*stl=zK zP#od2(^O19wsw_1RvtfRnIyuYtF9m77P~|qriJ%Lr+twc$j#zoEX|eWc-(bj20Kf) zP$sMKZ>V9gHSFUjpE7}9UuW^SVZ@=e$_OLkFxq4PVK!d9wtX!G!X?S`1Sp3KTEvp> zdQOZi2wm3qB(cVL%9Gq{U>`&HXarPMpCi++_ev*R4 zA(PF5^lI?|PaO7gomfr?yM*}Pl`u)Cf8!lkGJ2X4Wxoi-0oKek`xtH(pogcod*)}j zb~#%ufPSA&IDo@Zn>x0*?1r65+;-aVW#Qd^UtB#@oy8L7{taO-aOoeBDzPT~0KG9{ z(mU8K-errYn$gj`eN!Z07$J6DCKyTE>g|KS%P2S(2BNgm7jQbEGv9CVS`gCksYfVR zK6hiu94*{Ym#>>cGVHe&__jkzaJ5frLhlobka{)pW|oeU3?$nI2j(|A(^c0qt8ji9 zO3sI>aVY*p{+S{0O1g$hUUM0XDTx3A;Ngo&a0pCobje#-d+aG>GhB9UuFR?o^z8Ud^3 z8|SukXNCLLpq zioU)Vwb!Wo2`%~{6fy)t!Eh8Sq;~`Vm%xeb2Fs_n2CnyHo-&VZ-PmWx;Lv39WR$uO zht#;xS25N>gK7$*PL00M&r4u~6r)9wVka}X>ftzTy85ZgGz>T_!)iZZKRXVWuIT15 z=P9vP*D<_$#tugGD#p+r1?sETJIgn2*yiB@5Kea4udHq~*%6IO{tVvzFG*9y872O3 z=-*;VZJ@^}gAWvqNhQ-t(Gt9GyxxLm?2{v4T0#)Ks5bh$*1pmNE5#&fuh#Y2DwFv{ zotjJ#QoL-_tf@jl&uwKha069w)!u}mcd#M5@m?+H?MlR zeLW5s)Bzo=C-<)W=hAX&sm#-{WB$91UqY3FJ(!17SJKsB+8on7&_HMdp<%yMQ{pZ&Gs&H4qo0D{FZJj zM3|;ZLLEw#r-F-oDE8eRB&dl#$c)u-mhd#E7%v6vUe{Y-tgbPJ;q#N&}hMT zR4v?J_-~~APwk|*ukWkgB((CT;eQq7{EE=k^t2_tuTPKPR9Qs>vg^JUc2BRf7a-2T zz(%#tS;0@_RaWuPZq5i*2)oA7fD9R70*vJiEo-F8isGNi=j; z$y*S$IH{e%1M@La$uGiGL8gdH&Bn?gqiH_wv9P&MOB&)#QqM1=j0}xJ;MBdHMBkFB zXa6}&$EFD9AqU6a{(`#jnvBg7M>~iAgcoVjm3dXH5I?C^jxQzsy8xgX=&VwuOV_e? zb8mCef@C`{dx2MeHeo5W9?NkVJ%63vES>jt`KxqX4y(Q-#mQ*)aTIXFs~%V3_HGluvd&a=v~|uA_PaM^7nd4<;L1!Qh$B&pK~|* z>3n3$s`?yYz2xV=W(hVZI*nP6puK56A&_Ui_CM6V zcr?~H1Sfxj_PkU%y3CQ|&>1^BNmGxbWud&LZH@AR|CZc6i!P#saO#GFCY{2iz$pf> z8c0{q4B;(|-CWXH2gy8qzZP4}oIhY+f#eFF35`aW?mL=**GHe~?`;~8fX!N_N5ks1 z!G$D;4(R)p=$}lo&@gm;l({)Qps_W%fojuun#TrnlVrm%W}p)!yxd@Mz2eji9Y0oZ zH8n6k#!FIs*@qYYfr93YpWBUZxI3$k3St80!6sKdzMWs%l?FUlo|a&h$Bz>E3WaVS zDrc~(EKfd`P_FHtpwc;fus%tr!A>zGKWd?|lqL+!mRfZZeNbp99rCa`<-!C5?4wb< zluP7cN>v%re|F46H!}RmQ+{v0ou^)JotdBlo19*f z@cT1Cy3k!nR(zP|NaulhH#rhnUHe050IgOLRN^<$#o%mzQI6hoEnqSeLLV zN!I#5&)PaDp*|<%AS9zi=6~gA^AKOuek&_JboYc($ZZ%?OhrsJ(*yBjA4jU#7M%aW zlizu_yBTbTdaobn)5Y=GZnI0LzVf*Oy@kGiUh*TY-J&;UT0BvQ?9 z0Q}(jBMV>TgG+Hy#`j+R$KdmGsBB;%^o-;#FQzKogN zueItaKw(ggH#%N80*LpM9w%4UCmN*tgS|Baz;1Z5++1gWH4@9xX&qC^VD7^}6o*x_(u{)qmZb5;^^~9D>kDPxDLR zw1$%@uG4jW$i(5qX{xQ?Gcl_%Kn_}s!Eay{Sbw}(q6eUP1!AD*C)X`U`t0n?IOUJ% z6$-Z6=8=?dzS8c6uiHBL;%~b*4vOAO8iuF#_ce`e{~gJ_^!Wbz3AGrd?^7Hg_u)r= zPRZD;rDr4@4x~HS{rjTy>PMX~mZ7@Bc`e02d{;yRqVA zKrlw}rgMrle#(-_Fjrr8QndKHBgrUVGa8Ye2-e&N2=EuY)*$HLRDsBqb5~neE5VqM za7Z>pwhQt1O&ulSkBB9U-iLhfYQ5G3ejwt%$dxSa8LGXESu!May!Qqh6H0Hwp22UC zoe@b2n;$!(=Zps)CLp@W{=THZ(Z%t5{81)Y7+G%;6LF}BjR1VL;^Ar!pe^ zyk^i)!wTzekmT+oOk^y*73< zTMTExX3b=QshqTE3*5EXS}=8_q+0G7Wt*d)HUY30RsSO8mzGezy|p9I>a;^(Sy^RU zrpRS`Hu0aI(|beNZ|&l;UrtCs!Ek~noG{W?LnY9v;COmn?vKf>ye&1@82p}tJz135 zUo4&yZOD3Bh1T0|vJ=~hpOBR%) zJY*QlQdVZ4StKW90H7dU{rw*~oz0+qDxR=kyX+p;)dA~8utSDlo2|~r-0v{##sR^n zP!9x4&S!mv&?v9GI#^f_1aO#pegJn$trYAW|<TB ztH~S|Ihc@5FsA@}CY#BL=~XSkhv>;=pQ;$c zD&EU-R%A@??8sLfzDbW&`xY9CVS7HwKrn^cmnS9{xGwoKPbKuOfg8C+hpXW|Yy{k- z&$=tS$7yXjNP=!+uO$M4^Y2Mc!u7m>31T7U^!E1hcf8-a-j&|^_5BX2 z{N4yuI+I;Jboz5ZzBc4SfBGFTcG?Yy(l$sJn?@QvIl$^IS3sW-!Mg5iKvBDrKU=tZ z>9tR;hykc#m`6}xAfxzx17MqE=DXS4o_wiHQ|)oS&TxIm^f9wok$JN12XxiM+pe@P zwH*~{UK|>rFMjmCVu_uMyEQ+CKa4k%d&{a&v0&}W=^+C)I>?D&Yx*q|y{R|)3QA%1 zy1xXU_+K33iyCF^YRwMw{-1+$e+Fce(~b@Z?%&b&pBmP$PR2Jg4FRZ+O-6N~Afs{A zAh4q&G(w`%5b_}IK={_~`#L0p9BUOyv?bIzZAw?o-d3CNzg1`=wy(O$BmGi3Q~x%4 zJYEPH_^0CjQy0IYfuv+)WSh)gR+}&3#qZ^DDklX17(oJAb``b6!)wz3Gr#`Ku8zKq z4J1H(p`7Xv&fD~yQO)-_dE#?g!cZskfdg44h}`P5E$M-(!d$#?80LUZH?V z4rn!|n>umvowF=NUK@4Tm6c@zo7LsUEc~BUYX}xoQx%RShTSaDi?K(G4a6N7-SmJj z>3yvi3c2PizV%8oEU>c_J=*yNQpVTKfo#7ixXt}WGIXXr`!U&nZfHn>2aIr#N~xK> z&U^)mTK=7QrG3$acHr-+&Ku1imIUcbgM`+Pqu~6s<{i}9B~Y97&uwC%8{(F86;jv? zpX`~mp61tbvr5+9z!U*1Iq6L<X=5d&uNeUCaA7;c6ZV@KBh0?vW;Rh|)~ zFK(Msd|pHJ^EPZN-FWDV+(jm-9iX7$gJDRgsy+La6J-01IA>Fij}F6fKqi?c(5DvB z``@k%)A+w@#tw^q;(sUO-!RW94M)IImN?uDtT{bXH{KM=t`mF*jm-^9_pe+AcFR~j3q5n+##mZs*r zxsBh^(FqEePIqc7Y|<6ePaV13akMt`_U0ADymQ(UIN!fey7zeEHCt%qrPi&55qDM1 zb9ck!W%ee;E$Ac>V?btpX>u-$BZwB3W$M7Ez^fh%n+bqcW5cMC+GI(wzG38aic3om z3IdPBniI=sE|5$>h@Vb#K4w&B@3LB~gXQ#`(+238r<^TJjzIIEq9RCXOg8y^)q<_~ zPjLRt@SIS7$|stMIUe)QlHUmfngyzCM7w^(rtzCgGnv!{nND;Ie_Q|rcAchKs%TE; z(g~D5WLj)|108`ab&3r&fRD^Q-bCk z!x?p?!3T64z>)Gn%MbI-MkQLXb){S-t$$BdvE8`j`gMOt+vs`2DUHQ~^nB?Su{Y2g zqBshn*McBRUV3$R6~xIxDbV%IE2>_p(*X|o#(^Lfoq;^z7;*n3P=fqkzDtQD31x8a1e`?q`DG%?_EeC5x&7|lrJ<%4GIhPBA|iRvw-WgYx{eqO>U$@& z^bSXGM#Eq@`**$1SF?5rP|O|3^%~kQ zkhPHojqnY~^^CWLtatB}@f+n^s8u8}x0T5DTt`rmuIvtcbad8n4cBjwd$6zwNZ>YQDPb%zgB{5UZiNgi(5eY8< z0ZL`aPDygdff!@i4P6P>+)xq_XpIWUQeU|hp*DefvZONC(qs4b9U`i2Tm)7aBrxZ% zQr2G-TOg{O1@_rx(l1)ERk3)_(iN9nX8+kOzPBg-c)>}qW?L81juD0La(jqE*icht z_!|W+m|YAW4-03xlh;nVcpZ74ZS97d9y7`vHjkrHh>w7t2prkSNRD_s@IHJ#lw6@^ z$hyrL&cq-BYrb#@$lJ5>bccCson}pY=KSp0V${BHbmd;#+;={)`f-6N$|2g%`>*T3 z$^MfhdEo%A;)%YJc*6fbin$$V&y`B7UmM?-&;U@Mv#75%-efd@ccmRUmtvt@@kEqsdl9^Z`P;|50yN9f^U8uQl)c%pgRjb*aMjDq3?2B?VM)L`O z*BqNrKlF!;a*xAfk$a~dy~*;aB6>r9IZtbIYRq^i3Ap)+H}TLgH}H(b1|-8qE^^g(E{1i?&ZW9`WI!AAKnmTDhn zg3cp{DV$Cn74T2tUeHX1VHJA3ok&|D13)enP|#py9eT z)PQKS|G$~T7u~NA{!0(-GtVWB38xaIaa*1d4sd_+@c>_k0=y;WneTL!a5FGxt(*-^ zl4K81GsRW#i3N^gkjO5bbI?wjYLLNtZ#=*jePwv?L$qqPh-f?N)m*9E zi|aN$x=NfDF7)PVyBAgJ5XautSlJvr(9H<7?yo;-LynEZ!wkus0CQsWH~Ux{Fk*<} zW|(El-B zP$-3!1q9zvAyp08@@Hv@hdg0l;P1M4Po@RaiR{eC{%e`0h~B7~a>^fu7C5(lj$*z+ zb_b_lFMR(4fPV!C*)}mYO@c;$t=Hthra}Mo0m*o>Sf#>W@ioUf)+~n%auR{Hc(89(Kn- zQADp%tgSDXO{W;FcNWJcZ^~3ty-H!{E$_7=P4%l}yK7E|e_&VJE_`VWpJ??!z=1DA ze}k%QWY>ZSn?cAqkLgENucHSLn_iBrp!dXN5qpbsR7nA!ZY&}$y~y9C#rQV@8yy5y z8>lC#tdAuOE)hE3;W3(&BK0&4+$a?D^KR^mMmsUjcNw(@;D3rj5@Jpo`94XXd^4js zRVdd$7j%C@;XQG2gzwXJ=%i&ZJo+Htpo+GU;CkC_jLH1SrO>cp%95?Hl4|I2(r?u* z64#$ZtffktLC>)#^K^lsP$Zgo=?@tu)o{8TGwzNp%<=Z`(2~q=2xgy6AsbZdCmKOt z92sr*8y|50jSsk6&PY!HZB?pK%>dso3h`@FaD}?FuYFkatOrzij5%gUw;4~rm7uW| z?V3npR-^F93<`q|*!ABVCP>0{f$1{@Ya2MkqQ%!;nihk_>j$Daij2VIxOXu)YlAY< zRN|q=vcmlp!`~y)(n?rM+;GLW*&OdtrR6?S2lI0b>1Z=5Up#={=-)2eojOs z5O7Nuy#G*}vF%X5!7?2>Jeq%A1KJ$^LllDdNCk2kfB{n9Mx?N$1N!r)^y!at6>*ON z_lOg*kXcu>&vv!8Bk?`1&(x^6my$VD>fraSx-<&MF+?;zeE9d}Zep&%5&jbD-w-j< z-&!3>TitIyhNDqHeJ_jzL!MHQU(}GakQ^8~kd^|HoAJtH6yQ|gVeoOuTCd@Q)xiLv zBUzr=eC~(l{D&~B14%J|TFp^QYfm;4dgYSrky=4RrjJ@Pbne{&VsgT%s*+Qs(H}rP zU`)9*L{FWV2NZu<_Xlo-FX_|}y$V{gS>1xDS6?IU`-AXsm^!4$Q!3dX<^`R-J$aXJ zs*9D#P|R5@jlUQ?od(!Goq7?%FekxsY)^Sf6Sa)%?bmjG?lN6vW<&P)%Cs(n%7NZ_ z-RO80j}$w-C;O3uUsh}Mu5W}q&OT9l2LuKlbwHe7GGf(uh z_W!B5cah8%tD}L^c$gii5`I(fp#b%6o_hz(q%#i)SlgiTu4eKdFjL%+a)bgaSg7Zw zB_1E#B4*3xs|K_>%OJ@{hUUhn84Wz#oYL-A3i-b5J=>HZ^{A9+LjdcB;T~**vLio@ zwR91Cn#C>;#!zV98I(@Mf>j1Iug$h106RW04B6fH=^brd$aP9FVcw4W4%n<#!Q(rg zvfRm`t@kcQgAUBC&Nl|BvX4}(8gO3SsZ^#rU?MEOIVE0H63sc$CRxv5XCu+d+^Rqc7>eonUzOY%97Kp`Eq zKg?g)8x`?ft=G2pi|nZNG-i-@#AMK^;W>*&dFy<6=@}gPo_M8QaEV@rAj8Ts`^EMS z6`^1&*-=`L@K1PZRpAdkLw>PHlZfCJ%6rcRRDwvRv`N|=4x!d~M#0#~M{%G8H2q{< zM9^S!cCVXgHA|HuLQXY<{DS5xLn5)`bX$hiv`g^NnD8BC`!hFEz;wC%|8a64ktC2i zO&4{l8;+#3`wh3BiTHxsodwZ(G4pzyGID!;gsCj8%iV5w29SJ)_k5_9aYo-_V#u`H zaX{X{GW;j7=YFPXo2j#dfoF&kCfs-wq*90a%qpe#)aB0>Ntu|oUExGxD|PudySqaw znUjG5Ug23{;j12w7Ki|fNM+g_Q6je{1}BC~;n06{4ptSw*+x~Ni_PKAx!ml8xY%F; zH&>P@_v6U+au%GS3h1xGugK$jqfp2uN?c^DXL@2i$+@{=SZ_UUaT$<%aeJ5xfv#8} zga{Ia=q{6(NQaWAvrJo};V|xz(zlF_LN==@wCu&uwlAmR zR}vrj3Z)l1Om64|$_fIGo=X7{56?1=6mk|X&dAPmI6)J}faVwN(F?f7vOC;iDN^Qu=BLzs_ zYy1?JcX)9A2jti3FIQDaz922N1>r(3oO6MV(VX6)u&Y_w!~`Nq?ZgB|qAz>>m(Pw> z9g*SaYdV1gUZ$~p(K%)~cRfQ>@44k|T>&=8iQ$jj;XG5NeJf1!ZzIpo;)j@_^az3?q<&Mugi-{@`$4M&vgn zl9bcBV7t6^oI zJsCb7GF>|O0_mR(3>xI(e_(UI6DhwT-%S9XB{@C%c&NV;d(dLh z`9ZoR_L;?qx<%og%ppckX42iACP|~g?3hewk*tGRER-ibTooGSy>0s;IS}!^pKE*v)O6xif&D2$)hb zG1`rt&;9k`yE#xzfzZvT+irXv$Bje~&J~vpZp+A6mcD!f7$|-KNV^qp<7s4m>cB&h`;l2@-A5p8`ug70_8`JH z!%1}T%Ng9MUDYuHt-ghEM*F8Ym^@iC(M+ zsParpG9X9C`BFC#?k$7vd7gS!HzK%QAX;ehh-y=4HdsQP4yF?Qs1!1;J9z`$6Gg;0 zWZi$a4d;rl#`g7`j;bDD7UFN-?yoqy4z#@8jfig_ui*ZpA(2M;hnXjb^0?S6P;>*T zqD>B~wNqSMKO6E$fG6b^dym>i3myV&RiTKQnS!86eF3^fK{z#7r4VNTE$w=4K1N}V zI)q<>w)<%1;o)ZZ2?qN@`bBaO9za$2(9+O|A#PD8e2d0ku}miPD5rx|yMqo62{71@ z$rV@1?mfLnqT9%0XLts18BHk5HMzBPbR4+u7oEl~E#_^)?P=!OoItZ$-GrSnHG92o z9%=IG3YG7^XzKwR<0MQJ-z}UjyI_8tEkTGELsZV6r&wIlpMpnNEPjp>?*J&014q zLjcyn_8S=e-OpXitRIX({qoqNK1SdG6+6}TSFe>h7FNX5nEz$%# zP`}hQ1yZ!ZvrApxDc@3pR61XrPExpht6Ph=PElLLCyP1fftoGT!hO7b_y{g_YkT!m z=OUzqt&;L6(6F)IidW6OP{n5r;Ru{2buOTFKUqYuM9Qo{Hn##WZ|X^3Fe21zcWrTO z3Lowk^kGRno+PqPOx(D5{skGfNvTR6M${rLXe;Jp7B5~RcZM*T>&CMHuKsy)CD&dg z*Pg(-XBHEgv!fZ2qrN8ZNg(PF?L5XC+ZFKT)$R}B($#HRe=1qaRhK4HjyDqblx}7) zmA50bZste=(R`2LkBAmZ6@~^0zYhXzQ&bI3oIT2Bmj0ZF)Lay&9;q1fl^DN(yFj_7 zLX*|EGQ)}W25Zw*Nv-hL^aTLehCdAqkO6~aFuz@>VP@=&r8+0BJ_Uq`v6cpxNjTkw zwBqH`pN4RU6qB7{v@sN01R#;A3L4;phuw!`Q042rzk_+$3m8Iyh_L(Io9NZ0Rtd|H z9udLhc(#ZTjBr|5N1-~4UtV5Lpf-LSi#zk-H`V*+^y6c^r-)oy^rpThS3$(FV#0bK z8XD%$A%LATJ{?E@wyzrMnfM%pESll)x8mW?pWY)v$BKXXtr&@nke;&xY)nvx$NX)` zMtx0lnw4`LJqK3vjZ@_BQhwG~X}7%Ju&Xo!^>CR+;a+KWko(Xx)mTwZox{(Yp>Dlo zy|Sr!H3QVdI@E~%w z$Tyl`V$dg+NK0!C=x$c5kiOA&Xu3#*2XoCI~%-2l7oJ9bAO; z^^aKRAiOh3tReg85kKcK*MQ#S&in@_ zN%XCMs>A8p2JdC*t|n-1fOR9rsXYpN&QBEnOPKQ4y410`IS~|a+@pmpSUYNFW*qXB zFRZ9A3QYz8bAYj*C@&8)95^kHE~3WiJ|)SGtk~3I{K1g2ryW2jp#iT9MrzetnWzoG zJ|ofn5WZG{?Re(rPju0!dr@xf?7FON=TBHK&91@C93-rTLnx3(b4gt84($&3+S-f( zd3kNz<#(CCoU%i(=53azEaHDfi$#}rL)*-SHwhk#*WWG-1+R*lCQ2NL%^8H#%n=i6 zV4z-3MNA(~OHSjsB2eHYc-}cknT?D?(S~s_^VZ@R*Fp;}%Xt+i~ouB#<3{?6U=2F3B1lTglVd^V7GWeqVj zS2jzGmBr&2NU3rM6%lbdff3t%A%IXD%Cm--!)7s8S1QY{O6%#YUFRR1?Ng=|pykus zaq`Y^{g%p)Uz?Ci`N(wxg*%0c9~{AT)X0$%I9T)9J9qzk8*e`n`SYLLgm{h+y(vu<>-xRij3ITBxYupAeZV6(HzHfw4p z!D)lLL&-dRR^ruXewapObHBMH>UZlEy+^T!f?sfnOyjxUrGwNi`z5njk+VO>UT#6a zEZa_OCJH91cu3B;K*Pdzu7;EB9`M!NTMow?&vj@X$CDcn$gg8;;zjo`F-@l{^D^AY zkriEtlG)7tTf@C1=7F?TL#sX5W_5RZurlAhCrTEJGwAz;@&EmU={yMEXtb3;>%?NR zi=D#l=)-hc`b{hj)9;S_toIdb*W=>k2ptb&NLsWj#B!&zPngLTAUQeAOmw_w>re~y zxp78Okrcx+L6Od;$CC%*N;Op}AjlaKe#&kE;$VXd!_}qstn4(fioecU zt^C+Y3XaM}FL5zaX3asH;tOC+ii#ahpNjqfjc z;d~+^5=fImu+IP((?vOR8aq$DukQO}O4zS(I?(VxQxJJ#;=y|Ba_J)r)*!0+==#%^ z1K@beR9N2maHsipl5mVx+2I1phg9`x1AAWKM-d#{3PDAHhgh_!PcC;uR+!CS2F|lx z-N8GU)%Q~pbbWzz__z}%i6NR6gA!jS7t@-dm)lXQAWGJfRaIecA#WHDLlDqkb9r?; z>Rso&g)tn2R7}vCOtz4efE2qfd?!^eVWRFZ$>Biqi!u%&{^>C%OU2%mB9%*Ac4SON zzogLUBqT0&X|(_Q2ZIuOs2Eu%uy*w+J>;&@T?@^|=X?5>k1!lzu)Tqwi&$KC$f@7l z5^UWv%zcGyhkB&Zb-!4?Nw-vg#BRx?QiZ<`N@YpCI*|OF*&tge#~&iMUGY1(fiGQO z5|6~!1_|48=(ahXq_XEo)#rx?$+>)vYSs?Qe~jW*;4{7RU@|>M7V$8juAH2IB@1b0 z0rE%Qk6v|3J+>5HlWs1yr`#B* zP}2FPIq$g8dQ>A`PIP1V$rP(Uro0>6KitGf1Cg2$KA4VwD}@Jrh#1?6xvFCHg$bPU zyjwFXzIS6EcGI?a5n}gC3!uFk({ntw#MwEi%hzZ5q{Oj=CVt$p=H_|?IRPJtmD=ho z*yNrKM{%a2SH^tm{$L zw8p%0fsb^ey`UdLjoOy`U)dGudq|Phg*?Z1x32K${!>QR>!(KpwkCw{Q@v~%Ed5^V zs3l#00)BaqtV9tNadYXSqp88GGV^vsQ^mzHJh?wY2>YzuZHFUix_|1xX8HoSd~i?P z;Aj$Uv~kY!havPyLbN6?glmuB#_)$&d%a3y8fKxAv>f*FXyt;`jap}r$SIWhMo*C& zE9TJqqcXvBS2_nnQxij1Yo~o*&!G3YjSmt_jS{Y?2J=n)Rc9>u^6$}yGBR)V0Oj_R zK8$+TJlKuZ#l7H}7)Tm+8W=)uk091}ah><)Q63X%!1bgkTZST&2sCOoViee`E&ct;;`sx4T(Zm@KVMGX*MRbHVE>+8 z46$M^7WOS2sqO;9*(X>*jVw~9yHcVo8{<$Lo3nhdYEU?O2caMck+dOI(dJ!5J{7}6 z{JY!iYWZn+-Go>_&OjdU@{z-VSjFIN`UC!p>Tk4OCZ%6P+a16Mw#n^H&^xleD=N(z z88?KHQ7w`-c(soJ5`ib{b}DQ43#gq6wx&=AY^Ys*F++!PK>tZ(ZG+T;f|&6+(L4Ko zRCjli>RSJyU%7qVvh$OkmWHNMf+Gu`h7Mbj$u#|XG#n2N)33z(*9BEbw~c~qUhP-) z4r3Zszgct}c;_&nDD=!`QQd$06At;~KWs9;46>Av{dNh?k2T-|L8i!pRh1pONH8J5 z3Upl}3$f2ytR_UoB|K&EbU|N)B6n>&-fL#zABk4w(%5;_M~no)Ub)hw04K)8wTm|M zTdh1iZ2!St`Zytw(5Xw%N|Ve8B#f8T1^9IX1&$+)M!f6V-cXBu#Iwkb8A)ujCr(3YQCJzxN+yhM(u={YC8a zcs6+?xZk37Dm%2&731ik`d(Q^8f_#P{I4ANJYPQDQD%<_+?f+*jfmY1Qik+=sq1i7 za*_OX?7yDZO^lZwzBUbSyvTu8?&a609D(7}ibH==6Tnq0-UtjK5lL3Anc~Mn<#&R? z`>0fYaw=MNn@Kx%TQ4UNt?fzSlu?al=i(%^zZ3oX2rYSt0~+k^X|uekqUR=6rzZ8< z*t>+kS!`wOFYhF>M})d}8KSw^-zAmfm3~W+)q?xqGj!p@WACV2orRW|f9B?Jd!m%y zPDt_*5a|A_WnM3hhffC+DEhsgTLveT=O7Ri^3vjW-r)T}^vTdPNa{#U_b#5`Y^U&b z0<9^j8j}S`ciZr*)Zy%&9Vlemtz80ti+Ag0#D8^#J3ea$6Z_)RN1R`50iJdeYi@d^ zU@0p_>8i#e_TaV2kIn%!%i@0i;KrsHstyz4{9F( zIOvMjC~XXX&v*UhpKcHX!-riHMr2Vw>T^LinLpIaI1%6cWu<+fHs9%H-n3Z#|Ihbu zC$Oe$gNh6+cMW~+?e0uycy{W_X-bS-Pd%vaf3UJY?RqWo_4*ytAxqSA^!M%e5Xam? z66PG4zNe?hKD~42=MvcmDQwTm-+_dbKy@zLs)-`oms`7;bLjtExwmrg=fFUi#e=#g|eRZoFMrI!Nmsb&+1Q36S4m(vdH6DB z0|r9SX}sN=_KC{!k)apnD_$5z&1HLYS*wg@(`_HXB1fH2ysG}2KVANoceR&+eX_Hr zOb)8l0Bf@M=g`ehoV@{N)QHH#kUaNRwJ@f+Q2l9YOOex#!|IQa_*Z;<``%lVd1OsX zAJl#kh+2?)6=U65zOG0|#{{5$8R^TrL5}ScpO~GI zO(Qao+<7&X=FB1&It!Gp=1=WzfBc$%U@&vQX_FUXb-zM~JRp!_%jIoqpchO3k#kMT}*pvl=|_){>3om-9A z6B4tZNeBgB&)KxSG7>g7n%w(o~lD(t2WKQ-n3fz&;c_-!QwKEI@0Zhgj^Eq zMx{`;o__^6CqxjRw)Fm50Fw&>nIt)-wcUy{!{d#E*c3^FEsv7Y`GfB&ICD@mn>|rW z7oj71^y8G%{E*Uip{C41xw%QP7G(^Jul5O3sv{Ssx+Fwxp&uX8yXrfWi!n)7C{N$kBd3| zV4~&%;GmZFms1BmAs-E-i#}o)?`a`!iN%kbG8@ggB9X~KYKLP&M`sFF_fVQx_;Ctz z+O+q=5wAZ?+86lhJT|oF3fSyz%(Pyw=RSK>w-T8>`-N5$vDI3Fm?RGh2ON%WUPG>3 zx@afYJAaS`R$vL{XR$WS6u=_vljVNLE4n51_*iTID1*f9@zv~V>kpFP35>nv3WE2w z&$sJQ7*=Ogo54Syq6b22%GHVoslaWSk!5sbvDxh%duQ{X7TQK3_?e4guX5tRJMDoo zXJoQ=Nv%oFY?N{Cvej_cwEKS^nZG3@9TvNSgB>qZ}e-%V){QJ)?FhILP1J zhovZAXRsc#y227#V$!WjLIw!-)rk2B4lg4c(-Z1K` z2f3eXjnv3}&b!Gt@;?gLQn7MUd^{EB<4Ft#*BT*d)d*wdG{bu)G}@FXz?L7}Qr=1M zg=BFN3BEefDD4X~(qtX62Tp`~6a%^{wf6KH;3i$j{CLCn+|YfR*EanLvUE1-bnA#w z`kc)!T1{ao0mGjb62Hn-IXxUAtLA=WS+|irW{aUoDZo2k4Sa{jZpNAlLzkyZ*q~12 z>wjWzM#M_KaKH`HGK%^W@t_$-c0!T}2#>!WPrdIrz`H0UpE@K2Wy zoZmS?2tSnN1F8xSbC-Ai8HXATf8pU6g%=jWCI8L`@3@;_>5gs{JbL-a|@Yu6Ats#9vyvjMS(K+ zWDL)RChefLLZyn{+_ct?J+Jun-mhumI><0JOh+7Xmac^U_opdRv!@du=Y#{tYd%eJ zr$g&~MZbNpJ;s>JR^9=t=Y4@WpQ@B+P-VKkucp6C%nje%%$xOEe3!-LDjvpc_JCJC zYu??E0u9iu0~3$*4)(3mLDPvr`G)pQ7DLR5r4b1+lmzLKAj_ksvjjX~OEofJNlZl* zNX^A7P<%0FD!pEnWkmg*KCvvxueFl@8mk73)i(6!In-K^_giigS$l zlZ3#B2i+@jGXE?aVy`iW+;EMBN$MAxY#kB#h zt)Ku>tmdp1#vNvixc1lrzZ}xfYy}Ve%J+UI5u-2y0z&ve`i69A2I=kihzO8?P596+ zr(QLHCJZuvZ*;7!+-SVl^@WA;{oj@Ut|-q%Wi*%kUgZx(<}mp90i$nKf-pazGs+8b zc_v@~dbIwI{GVuF4!MyJxl#FG+dvUVj6jN@fmP^4KepT?C5tM~=-hG;K-V5~uHemC8li&5g*qzy zv_A-62r=eh)|$qS@*Q4d)2R!Tyz7kPB%!sHDXZc)#*QzqY)^FA5O}K)n^3_^g?hGO z8WOU*bL6I8QzA1AJ1IrCBet~$^mY9@M*}=Ei~1zG;|*yq7#eC|Cq|;KA@Gf$d}IDY zBi(}!bM^S{J_D}ih8+3w&ub3<&o#@yEPi<3f$0&@Hr@e|8c_2Yh}K%_$h`|##<}@g zN5j-{^@BpTCPcF(9Xzo_>3MsBtKd-Ti>@6OWhc`=E|s4E0&3<~VQXk6k2Tw=&&GU{ zTJR13y90=a3(XM(BP`c1&sx#!Ko(O?{uQor760$dfa&GkVfM&qdOpcHLoAm%#axU_ z4r(`G-S+k}wnm>_?)`>K47X2L7sX*&QHAz&PekfeyS4 zs9};u0J6FYeA|d6K=CtzNH#-^nrr-6l=I}6ffwO{y(t3o)qtm@$5d_&yq=lr!+*sgj&f{4{3w$t{ zE=!JwUxlM{qqw+>2p`_D5i(seCA?KkSdG`o)%hq%b&6b`nRw(05?!)f+2C3R z{FK3ryWGe-L0|bU>!7lBzDXk;OXAnz;2mV--M07i7vEv+O4|QZ#g@JBeiyF*03A%* zN;+}hzLnrsm*;T4M9Ljh`}{%uX<{GO`h-hYcLN?7+o#bRu4@1MeAPw-ZCLx#`{alE zzD_JX`HXwYDNFcIuI+HgmhnV0x6;EMYASag%b5A!#~P6a$)`&&)fvBb5i_jSBLBz=JVcvA53r26f1zl)y)-Zjj7 zms$!An&q|+&-c6cd*(4T@?t`K2a^@}^B;>|MQ83k!>9@hV2PVmYo=Jw4=87IyW$gz zFKm~C5>XNph3s!)h-jIar%VyB3h%Bbz+7U%yKw;rY(YdjQf)Pl;=>5i<71ys9O5py zNCrP&CrJ|0EGY*wmaK|XCz4ZuRO&VF{q_&uJ-Kj~{PCPCiD>HBI~f5s&22eV+sH4nO1baJpCY;gT+l;G4?8bXWjli>8XQgShC&tamno~wGtcMDFq z0!^S7OD8GJQ=Lq9W#I)I+FtsOdaxe!~vRTB;OtSKFO7b>N^U)m2Ekw4_D@pymotF2rLXAA_^qbp!;1JEgqIdXwSKhC09P4A(Td zkSM{xT~z%@x^i3bgDHb+Ap`1v)GQ3&s?14rwawMty^Bk5#*+eH3u)QusGrZQA_{PyIv%QF9zTb$Gx_x4^4UmOMJ+H zV2nNeO+9N`3dN_V_g8~9oD`)!Q=sdDTB_BNM(56}{(LRJ!HhP? z=-P)1UaS4|uT9FAsDKRfo>}h%F2ffO5ICPkBJF0sT|k2&xy=)=c5aH?oxab6_6%gE zl=4=k$?Pa$S9@74Ca{-;K(!0nnQJ$DbN`%HOTQ>4hmmqSTM5CcSVsuvlSOHD!f<3j z27*ONZZINj$|Z{VMDV);AGu?4;4nJoPUwxa-MV7(A+PLBR8(4rG&J6l2DypSfJbX% zVT@A4{x~C3dYjDlo4W1Xf9;qDpV0b#m@}E}z>i^v1_-2oTfJ16Wz)&FJK9h`ZAzB2 z6~-B0y?p=Ha=GP|83je1Vp&irwtALOHMyF_-fHm-5f+;xhO*Vo_g#a@?IG$TnIfTT zdkYg-5{}`uO>`O#)MwerN+n6mjD}#lh8i7dpuVY$n5cH1p+m`C@dLQmtQAx$BEV!a zXsu$(p#eZg4t+f^y*_tg0WV&Jl1Sa*?zhfcV7LuJe9vZ@A<_RYL@X6%slMbwh z^D_AL+FxN#j|u(If_7Uzjj{Xb#|h>Z#(nd|E2Zw>fg0t~<(MPtd#&CoE7Xp@KD5fb zFl5mQqAYGe72$BW&2m8hHbIWdLDKg_a3vs`V(-y!sbl z=n^>CCPPYr+{n6jae_m^z+Ex{JR)Yeo)JxOTGr=b3k+}1d;%M+W{n~?-NQlTx@{*^ zX?ZzYeHjEzaJ=(98G7+Gu1b5vQO#5Ih0}R5oP=a>rWvMF2^&9LRP={5hMZsvxe;We zrn0rsygOx2Wz6tcxMrOc!KMyVLGF0}YTtJIp!RNbHZn_{_?t(IfgMc9<4Gbfu5r)9Qj z*m16Z*A!Zs5Kw-fECx5{@XC{PQOh(s(~@d3PSmYF-T6k6k{>UL*fV<0V_|WZxYqHS zi1RgYGg)-QRT5|EC80tzD7IR(jmNf93~gR5`VHJ1q+ut}nIPR=9u}6eTW=EfNZcxU zNU-CiE~{K#l&NqyVKh`(;;u=Qwmv&Bpk9EEJ9aX zA#_^I)x%LMCZGNwjD@G6ql4iWl8V!%%gGq2PP%bhu*AnI_FsvAeu3aXmP<3TI!bH) zc=Dn@o~lG1-s$EBoz*b7=YwoRRf%~~$Qdb%0*?Gg7KAP$Lc;umJjojgDiAyPDesX= z@i7`nCDXLw6_{54u^`k$a3inXJ)GPK@(7T|6B9_|I&yh=2F$F~OtjD*g~D|M~%Gm`12@qChjCLUG| zo$@-0k|M>J8zl15{X(k#)C)`1J7WdazhTOUCH$ozx#DW*Kvel6&Z=wgf(Ei|EpklP zvPeLnq58&X=FA+a` zcqAsHh=f=VT+vfp2mRexSx)0VLs3`}!=XUXEc98{lJi=8jsAD(G~KO+XX~zwOb*ML z;?l+Kt|Za1Oj>4!*wSImhRB=&*n%B{?lg9rRbP-})E)oDV*ozA2Q_QHc4Z-`BZF#t zV7wgX1HE4ARpL}9HuG;F^ez5N1mQ^Nz+>6@D&vqeuNxugrfof$*4nM+eeQ*;PmkOS zTm7}c_Hl&%S@#*=^#b%RtOmY)x3vpIob74X;rE9M!0IeWmTmpj~q`RYLG|eZg_N5AM;bGP!KS@uB5Y?|LIM1!d8)^hK zI3UUh1bwNrJsfEa9iH$s*{Od~hX2N#6aKNpCG{~*l%L@C9LZ^K+^boKn_~OXdPRN~ z*0@)KChCa$iabyR3cqg6OS|S^rO4w7YI4l(25QOggy)d^*e@d*MKnW& z74S85Jfw$&Fr&_ZPU0rJEG+d7d8%-m5K~B~J5w>uCZD3qn4;AUAPc0RNl|0!GQV(; zdoOI^=3p786E6m90QT0vEF1E7alGN35qO^ZM40zy3&tu7g2(E}wGnnV){E}WVCV(K zD%{Vm+t&H!CeSrmG_557CDio$73&Wn%3 z5pu}oHf8UcB3Xoh<)(r6`lI&_27|jT?Rw7re?iRcGNNdovy`Hl! zZ*RZ7wAHfbDbOM_#enHhqD&@|&yi!z@hl;pW?hY@v0m*XgXD6C?tQzZ11)`?RVE9` zCWdWhq%P)&FPm1XP?7lbv+Q)S4BS{}ozRcrE-X`CkbGEZqd|VZM}mKht1iQLIjn&RD1v zqZuOSVG>rdRRl7X$ibdsEYRi;8Y4v}30#)~ArHcaU3zIAy)F@So*9 zRb&@2VwaqWNeV~)vig>RM3fu6IqRa?QQQ)$Wk%dGmbqa>cDzsyL$aIH;h;Ln^ZZ)| zycwBcej1Ii*O#|j17ZN}m2e^a)n$*#62(`zaL#A&fgO3W&GV*o$@E$lwfm;BiS*n# z&0HMF-1XI9#ah4`=~hYZhvVn4I&S9p$XKhz^O<4@!8CATFDAGUR~W#J!!>-76cm6_ty}f!;ZiI-Shd|>LM6lf&ntdEG&~XrCeZxk_D*QQ)_%>J$m8H zt_(m+w=Ew*@Ocgfd^~^uyo@mnVIIfpC3Z5QYXy6&ZZH&JHfrdNQDCIoGNM6GKGV6ufhL&? z;&R-8ux6tByC5{I@*p~ad{s|Z&pY0v>eAzV`nxr!hi_cxf@J0!>xkXepYlp)7U}G{ zqPg90FZ=uGbyLR}lOl1cf9H;GalO-p+o9bu8@TOCauM=OO2;QB6@(BcC>!^jgazKR zzd4~$22cY#1cUE~c4t+(0!1wKgH&3<{pqh?e$0|dQ>r~t#FgA4I{1Dr{>hjdt8Na- z6*|I&3IHkyq!M6qSvJ(2Fht+?tAkU+#b#`4=|z4b5x|Urb|fe97CO1IEsrSX6sNA^ zgNhnbrv@O>ax@Py2W@z9P(mo5fyome=Ry=2+|E4ktKl3sDwN$8{!+)rsQF>LpqL@A zmQX@r*y2ZF>_mOug~HUFXm)TjENA zfV6hI%kw|%dT|70PBr z;95%Go<{Im;jcRN{Yx>Q0y6)JOEqu~CSXx1P2xXc9zAhiLsTNzFm}GzWlh5l`{=C1 z3pyl~OKuS|se77tL<3g~8TmKfXIU+pm-}KI*hk_<*0XtH0!d|1xPL2?#pA!CbVQ!omKUr&?SOsPG z+DyJ|4y!_G`$u~4pZ5Ulp_?o(VWs0XL>L@*WjbItlCFCmqLU1=o=ekw>&@Vni5^4}bxIqx%}6%dlK2=W@?R}{JZ2cmdkf5I%S9jk$etK;nU&%Fs)~Bn zFaUR>9xF;t{D=h2s;f!C(aOfF^4wyp0slpq%zx`N;0iMBC zggYRgb_VB(u8v2aPg-Sj!W5Nr=UnbS3RU%<~mFAT64stzJJq!$fOl+~v8;%$T9rg1&P z`S)W_8vtPSA{FRxh0K~qVX0j8CzFwPyFc2Y-AUzwmcc}XzR7$&L}9oIgwCZ#+!(3% z!kN{Y_u;GaLkr_&)rvOu<_i$5PnVn;g)HAID1eG2fhmPKxtAO+Jrqk=;Nsy^Zz}(+ z+iqR4xTt75QJR@;EALX`{+0h-Mp)xDZmcKS(Z1Ed&UcZXq}r3$Il_v?N*_?`-LwR1 z#YIFEf~M5N?UrplosQphz^87eSCx>j(+9q0%*v9*&SC%1^c>;nfC2MN&yXk{YD%85 zpo70FZl)|4q)fDAW>FjB7h!V0HGSq3th~NDCO_`6qNO?2x$A~q!2XN1_ZOYu@8jbG zPm|VvVYJJem~RSrv!(cK>_wakygR#;a(CLqCCt-*g6kM;w*9jlcnkHifh5z7;IF%& zZ*apn8ygu2t8ZDX#hDxJ9YKvuqLF>@S zdqw?wQd0{P0(+tGxN-XFtQP5;EFlX$LcL^KrOI1yTd)-L_R2sfIZ^Clw0y#p3mi?+ zm@P{0ROZf*$P`J269O`_@_>YgfpV0BDr;+nAF~+?i&|!^RtgJ>(`xOJrP7+yEitLb zW23^qgZFZBFI@MX|76dgroCXtCobCkRAwp8?tcRV^P%(bHTU_v+b;+2p1qc`hx?hD{DVFGwv{qw?{KKg*i7c24x#nR`e3CF zHBjmCn>V7g2I31kr%)cg)&mGsNlYE(@~J-q``7bHuuvhh)slC8Jvt>7B|PReALW%) z`0$NKCrU(qiC!6;Y;7C`C1sGeuSQH}RVKenmHD_x81J646|@bKU;!qZVIc@b17WK_ zuE!#BoIy*#fWp$m`!6Q57OKal5`$(TxN+lu^Oegf5af*Nvkf#b3okv&30}kf(V6Pg zyE(r@rRg&#-wW2(LI&3@e(h<}9czd<#`E>zAmg17QUKM7H~ja=AMRPNL{x-wX{1fn zvqb=xfU!}}`vdL6SvTlLI4nU2R3o~lS7djUq=wYBlS*_%B~*e3W>ZHV-(%&5_AA1n zuKd!THTT>?;M-!!Rryj$z|((YtSU@a{-ve$azcQYONlL@r#Qz5!_Wi0wL>y`@b+J$ zJ_i94XQ#k?Fa4P5nSxB8#U189fbzdiT`Tp4Fv!itf9@R2vcxKK3!N5A6XSk>U8;D` za8=g(*!Ru+c1!Ay3dk85jAFwry&7wd$VCeq&mQMQTw*W(-?a6w7Y`4jGB33A8{7)N zLu5k?q&Yb8K2uwWlRUk);_fKtbAd5EOE%eEuBRFtlmJ|kqA8c%X9R(8Y7O@^Vo)KN z=n1lbw(9f4D9=yz5LAgDeIr4XPFm1&VQE|>f}c1W9ox27yrMi6JVIzsl4$7iR~GX3 zHDEHpr*C(Zi_}?dc^u|YgiPOjHQa_6AQSUHp zh)-0dZ94SUry}>kA(G;;75psFcm24f&kjG1c?@0nSU~F5yT%&OjU?te)rB7Iw z^f<+Wej7G?gb4T=-eqkdwjc&r-6yj16&V()$zk4FL`N2VmPfsns}|KJp^#e%ky}6> zJI#nOsmb!NV_-lh3hy$bKpF1Bpu-L7$uj|0497nX+Omyh_a<62&?T9hM*hd6+Qbn^ z!F*>0WV<^eY@6#tL=~?+Qk0bCpu7<+-*?O?&o@8m_S3OunK{vz{i?BpPcIgu|M2uiRpF-E4bLI|ehS49>KvSrAHs?w?VR>$VTV&%oQY=Iqp24m!-Dh8NaXz_E!3HW z8mA@CE!qh|!C`@ZJ|3)8k+Ivpq>3at3OSc4IfDD+#gu~CPua$%JwQ1ZzjK31)39$O z08mhvzejzA=~(i3U}mQ5-*w>sNm}nuzr3 zj2+Zz>jjiSH}p00smaFi9%eHiQ8In?i)6~XjM`9nDoXZBM7PJL&5&IvoiZrTb3v0% za+P>K6LHL0RkeY5zd)0h39QoKtquPYnC}ol;!=FZ<}vPmT|%q8lZYuPjo`{qR?@94 z!#8Ev^^b?|j}V&`w8Lek1S+y^+sW{fIRYY0&DyT`QtV)RQBSO9G zC7T#kVywX?Ns;H*sR_0Bs*PM6CL9QD=pCT>0|M$vjo=o$u|xTYs~`1Yl-jf<<+{>%fk6v5)`IR$zSV5kMr(ty0BaA4KtH?;LfT#`XNMKDqR zzCTrnPf$=m@prHKpTt`g9*=jy#tSzYKC=cB|N4xO`i+ff;5Srn`@-2c)H2(AQ={;0 zWKCHG=+%jN?d9HYJ$7l7%U%PRM#q}HO_n|rOanhQ7_Kc>)6uwTfk?_eueO{Gf)>(S zJPb<8sU(9l3RU8RRphtifcuuRh$VM3YoCW{UW>byMoQ+jcp%%Ct)*_Ad$H8K4wQ~& zFc;oi6GuTDi=qy$Rc4CEWvXIBk( zXOblaTmip89yT2oPhp~_GSwQOp%c#M@$PDZ?c)|tt)jBtB}{14%!VkG?&^NK`_%^c zc9XY-#!agUAbW$v3sT~Wt)bmfI4X)p6BN|D$K5WL!{&^B(tOIRy-Fijm~}@j&OBsm z(Y>^>nmQ25Y>O$j`|P(@{f2nD6I%>N^%4iIE=0=iOXb{@5<}xkXLN{tc3=^k0lUq+ z4Xq!xNt%%075!XX__`N0s)%wUPvP#`zEtq9YQ4$LV3<3mT|KaXTJCbW2A^XX+>?yuk9;P{(s z1$|B7;_-Q_IOze7yD=TCIc@#LvlIk!LDEtkG0m-Dy-7{lZ@g{>Fik_e5Okt2vo=$R z!dCa6)B>Ewn&d*U&OGmq9o|1*lc0x2WTIElc|ZJI67!HM9WflG44>Yh?}TEo4O0o4w!Dpdn9CLP;P;Tp0MShZYpD;Jg?> z05JbHuwS42ms!1K@dn+fge=s*f%%%Ru5V#{PS}=GTR2SwLXc;PyCiTXjvuApPK5Uq`fl>X*D_Teksl z4?keVlE)~{U{=_HS?E}7N1<$t$zx?k?EDQacNS@wHNFEg4+a4PGm7e+uBfHcZ!+a= z+(K`+wpQjCB6By2Ubn8@UhJT8Ut-79RDYlDj+ghWU}SOntx)vGS;+9fnAh8i<)Iye zH4DaS#4NsgZ^_z2!Y-cotS!V>D*-5go)*`f!7ursg{Ma|$e*xTkij{&PiD8QZ`~K& zW-~_qw0Wvc`zZO;b-7XO|4MhwYq0R>|}qS83KLnENljlaaC z$ixqEo-;o=JGsY^Im}!qr5`_$vT3B&>OFDMe<*F>J4{C2i3XR+%wRpet!wnvv;T#W zK0(~_v|Ss%Fnq4l3R}#SmHfGhP?18JM_++bD($-aLD6etIt40$=~=m0osCGH;S!+t zlk$EB6IhmpH_W43*>VHz7Ur7icAxv^YI9p))nPk6-ph!L55Cr7h0JB_gG-rN&1)Oh zt$;Gm|IJkYIy=9>w(8Y3`vLUDd;Pq2(e#?B<3=YySiMf%hqU8ay(mZ3W zeP1#=KACDD#fry9_rd^)_Le}O>dTr~<4CFG3*{Crt{;8d$PgUkrt^t=>?qV_O^9pP zZ0PDR+~I0FaoRQX8;i`e(G@L@bjL`D^&&Xt8_TO{YIfIfESD}}QE)hJ&;V2= zCWcp9W5Hxu*He#0K;-EcJp$ep=Fwzq-{*!ciUUqu1jKPQ%K%OR6^)Nr7KdG~{aJF~ z=}ArXi&?RMJU#Zw$Z&TDAv5xKN9EYi00n~DNlnwDcUKD3JaPgT z{Et;@!z{0O=kZ&`Z;l>#Wn85+4JpQpuSzBm9`~#LWdTckoCwuJTy?Ub z`|)>x?|Fe}jcy;DLM+E#5%bC9n;<^jBg6Twiqm1*iA$JYFd1U0(D=D1NM*7~@?zxx z9+wWj#YKe8qX*yqK+LSLEDhbIohi;Qr~8@j_*ubr8>z<=0P&T~iU~a9>2d|7oBe#n zj1chI7UDX$0$z$mE*jb&S7DsJMC=oUnD?r#XMu10k678?ant(?|LXYO;xn>(v|V#Z?Mj|t|k`jy}C<${MCoGbYeCkwSyO)~8oO?G4>Ml6po zI|nC`8sXAjm*nxWvNv5DVtzygoa_eng4wJ;#}rZpgtC+vNt(t=>5Mf^j9Z>gq1qcG^#dBehLPGM;J5z$AT}o+EfArzhh&hz-Tj^7-l(Zh}ReTy&6Lp4>CP(eZ`vHUT%Cn|v(a$z}x`+Qi+T0oOl$63AC#4{}zn zsS8y?$EEddA_k{3O~k_+|1Yxe_QlJf_fGQzsJ+7)e4`tdad6mXr1-tmY?eo#<~{uZ`f`)QtJw&~s%NtW!<-Ipc2KW^ww zgK9a04PjIA$&*TVL(BIv&%PoCB`R~5>Tz4XI)V~BQOMt_0SP8TbyM}7JZ)&*9G!UF z+%AmCiR6_cv4gn*`q|B^qo~q12xU}mQmbXSdEjY!n7L$M%dTR57>a59P?s*7hO4ee+dn|?k{5ei7PA5*wGhv9%J#e%o9)N(kAg^ zalWb>MkQ@F_@5`M2cBv_ z9Mob*J?@1L4{a~?(&;#BgY&$i1`ev$ftg3Y^!*GZX3xpm;D(fSpHc>~4LVO1T-Cf0 zhmtLU4W2XyxTI{4B@FH_Y zDSLOAvqnrK5@!^o&7Bs7>MedAjU89a?OEI(Mee`vNL!Imy60;nXK0AYF$<~48YH5JV z(IPuL^u54LgReo*`VAoh9NNR01V#Ce>g$3+K+>Rf!4CQ$S0!};=Y@tl%!k_(-UkX` z86$G!H)4-FoRAO&6V)^Ufem4Nd*Dyr$?il+HE0lpY#ujCHxEoI$!r8YDGh4ee^;L4 z-3WzbEy0}W>3v*|D1eK5I;Z)`Jb|%O8c-rk$RxF01M)2%9>=`K|D^?xbHE$9>iJ-i zqy``Va7kuJr3r?}hA<}E+G^QFZO{c<)tkXon~bpr@Z3c>n7O8tc`B}3x6apfx%U|d zIIqD7P&`hBPsWbtD*?#IulD8osXd4&C>QXdQ{I@ekjh~Q*4%sE3Pt)eDG1QrzYF#S z(NYkM;iSX^UM(Yisb8P<=t5NYt)o#8&{wawB*_gsgbNxJeE9BVqK+AnP;OW)Mt`@A z(C#<9lzlS&)_cWB^+TRwtH(1LnLn6C8$#p%LokbN3LX!*Y_aGmQ1N7VhHJ{3JRa%m zlIQm+Y#9c*1w-|6@A2s$E;+t;!L%T5>WYb>g)m2~SQz&%>)(5(8 zW~+?=4mAsp;FsW8mch$MRU<`in~ST7Gu>&-IGFBA$!5M!9BXJzXcp6ACMu@fa^Qde z_zG7y<>o%U&%cwHrpMo4Vsiyn)99|||M+_AsJ7PSeY~Ymq_hy+C3vvnR-izz;ODemqL#r>C_bI-l^oX`FK*4lsUtYjrS`<LZQ1Lf19AHp;_zuC!9mZ<)RUoy6+8kQcbiEPv_ZjR*C3 zJ*5FRRZxxy3{RyhsdV-wMQ#C+vr`hb(D$75oM+3LzIPX0&e{xRv(pMREuzUScEG@$Ic>-DOf6K?Oo2*#UCk>LwJQ zwWK5;C0^O2)PbsY zHMM7;Ci+x)4uhC&Q!ACx=3y7T=*XN?&srJaY{=cobn)gMXgYt^CW3^?bDb<^N{E&T z9%50KyH{8H-$aEomwm%AI(lII%&h_{mhaat3-#4nZmo+oOtciYt~Oleq@m09du!T2 zA{Zjv!PyNj+?!qCf)Q%boifIpOH-4Jkv#>zsCcR08ZB36JREkFTL@vyw$ES=Ew0CM zb+VwjuSd*GO+H;X$~GZknu6}|Q3FhoBjb+uXsVM77l>TC*qV{gSy3v{DR)eGn7bdy zY_3geW5es0QTRMC9|CK`%gx%Y7ugyMYlM*-F24Y(J(=ZdkjRo|_9!>=fK_drmgS{k%;@HR|tb`ksfE{8X77Vd(yh;D(<= zw-8bhb*6^65f0J8YDUPo!GjrrJ(*Ob-rgI zMN@oyb`5Z&LIz}&!prF*$`S;$v#Z?~L94t@Hl|Fq_SWA@>C%rY%8IMst&U@@8%urV$z zGNaDA(5zC2$!9SyRTXfZ_^}o6exNSW<i9R!>})-a^}#>3_J z$8q0y2{m0)tuJoj?{nP+T_k^gwQ@{dH-IlJok4B&xwQ^vlf8-qQXz%~lrJvBjGWcm zSl_CEQg;*h9dMLK2%~dx!nkF98HJHWdojERnWi{|!zQYe7^Htiq*;fCgvH*EU=9ve z#JN8v#+`Hyczd^g? z;)n3hhY>AmFv~+JUa8TjWZW?-r3bp!_3|alj;2$xEiycFTQgAE89jeo_mJ>sKBb}% zGf$_QeO8o#IEFyOw~LGI3We#MS89=v&31oX>x{2W76 z2bGT5u25ax$#d>4XghlL*QMOK4IS4+Io@%(@QvSX>;Jg~)C90Z{>?Ww=MTcf)Ql)H zRwYj!WPG^ym?9or=;Gqy-}HZQD+|aOXmCcmKgDFCKPp4bwq;iN70tPn?3 zb+hE(CSC#p8+iwdT>LIeg>$%|OBCAJ!0uC6;pm>5CDMa4DSN5)x+c@uWSDj;LyJCG zI%I;I{bE(5@0EMK4M5rXaC(0~lPq`lG*1hf`I?&Rn)=Zk-I-oyzZzDoj-GG*8v59# z*!JY^)r@6zS5_4py`L!}B^n4^02{IwYNgxj)#Ct^=s76`i!~7K-bkLDrl})~#=gR@ z{@V04Sh;DD?>**9cV10=gJ0iFo&?oT9rqQaoYZ-hK{xWQnIa)UN2Q9{yr;7fGjya^5;HC%u$L#Z4FJhK^T z*aT}(O5Px~1t?ee^0X0@4JD}U+K*M7F`E+As8G0gknY-IMvmF5ni&O>mDl3!Ml;cr?!bC-2_?d|T-l2yvVoLK@EsUG3+sU?`?pDjfGwjDnN@~X| z7j5Zyp(7}3Kp??cCbkyw=XD-IdKPSx+;OBEjLdkx2Wr6#JtZ(kWwr9clz3j1)R2!> z`N;5Ro*)E{n)X_dC+aR1vm5jJRx^Sh!htY<&1Fe%N|r zh&AwSf_Jr63x0Fn4|(_NxFciM8rA^ZPJ5Pn*;2>V5_N$mHds7C5n;dq zUJM#(n&Ca@K$LxL#iyBW{YrDiV4}(ooRsof<%g5#G};sD!?u{Yvy!*VA^V+r*<07f zJ?l+E5CcfLY~-)=f$SHW9s~ggz#=VGcUC<#^e$SWempzz1O9A%3Yb*Gmgi{EB!Ans zxPXrQ90es%E`m$|+UQbSF2>d!`)dD&y?zXxVQiUX)kiKXMUjr)_JE)ECJK9+Ve_qM z{8xDI8VzTmh7EvrkUS%IZ2k)}{;M$t7xF?_)oh}=%)Moz6!R`Lg-jtK?erqjL@su3 zKCT)INNs_s$OO-_h-o51v#$;veU|6Lsjp8)_qc5bE$kvaAM<{Lmc-W_wxF?=yvv5T zbwZq0Dv#Mx+NzT*`|MU_@bkXZFDadXxwuNdR8<|YV#u^L`3o{yOWiW1v?=e%3U(?} zs~A76I6iRWa7l=K0Z4f*S{xVw5t8e4-U8TeYDE#nf~zPa4}m8Yito&mSshYM9Hm z*_lN!LuF^UG93plG0@|`#9#ngezsp-)Lm4@DR_l**_3Wx-8!o&FQ)&Qh9Y5k&s$E( z*2RHrOPH&mYfT3AOEHMRTenEZ$9<6gu!lLo58)fIZ8WYo^j)ZH(z%$!vJpwuO~HV@D>K zq|}x6CG}d7rfch|&71EjUF*&qi=1rMm~Ih=^dH5-$>=dmO84I z3STe?ZK-auz0^uKb>W5oCpGAg=FYE(kM4q5AveN8j#ewM7;~V~Da=AX8jI|@034?c zN0Q}}xp$Ppp^*=)!Z|+)ik&d(sy$=%(F`w-mPJ~rfeHE74i7bt??;?G%t&@S|c(1f|alfnUc4TH?4J_S*yzuBK3)6;LEh#8A?jza%>$84i%ofWm;4 z=^U;>2yQDfxJ7B#gNL%9vRkM~NUwgR6kqQK-l|C9AZq2^Bjvj8cTldm^2R278+3@% zE^xcWVTI<9f15(SRJrr3Xl8-2j)?XGs}Y*@_NGH>+^gJuUi)!;&zAxw#hVrK(mUb4 zCVsUud#w2181JtW6lNfn>EY%XYYcxT_oql`yO$!OblOk+xJ<_n-L$*ot(fck3(7>7BTUQkJtdzr<%VZmcA*~7uT2FKbrg@`aW7(*P<3hqpl?KIP5Ypp z1}`)cna9rNMUjZO#7Z1gO^*dr_ z;(8;EbUbo<_P1mCAz7<(_I1@FaxdT3?B^1`ZyJ2zeo=?kqPDf>gK9PYnAD0=hsVuO zX9T16JDw~1)~EfSVwr3of-LzLxZ-C4XhSXy$$P<#cYa?}cNbj=4+df#_VahqN8itHXBy$B#;Wl9^{2?Y8foO!%Fe`RLV11 ztR(_Qpd*a>90V2{201p-#15yVa(+%$R|zKMo5bWrhsY23`3h%Li!>_V=@~7SVAiAG zhz0eG-$fDH-IgjlP;qtK(sCI1wpIg0!{4ZMH`>hFXUAbB}J4(w;?*_slavdFhLM#QTWn|C%X@;R@qe zOOZ>$aOw@(?@qMCt~fbG1Pk}B_XV;DV&p@3h{=5Q1A&ca5s}fkvXGY>P)eCtOCvtU zx8v(A{&r1-BXRQD%eGgX?u)NHR`w}{+V320)3wI=J4!PYDOn2T7pblQ3R zN;LPA)mGLVl(8eImEVAli%CCYOi6@;=!)U9k*~y$F)`m?Sw$IS$>KS$3Cp6G{Z< zKcIi7%T6YsDJbaEI9iRE-fw5o$0gr$XRyStdNaW|khz$Kku~^AR7PBv5^)$hQ%&y8 zI?^!e!Jc(-fxJ`u%3C!hR&`Cgc9#MgaZirW6XNM2=tv~S(__~ zC8$>ROOf@_U9n`ZuN8t^2LEh7;-Y3;q#m?{n@-8^Pl~)_P&csuxLzR;%DwtUEZ>y_ zs9O9~CT63a?`}|9sj}BzTA~l#66hqmX;+~Mj@ngizR$V(30eoPiA%U)Rm;(RI|CIH zq=bq^e=^A8BWOn@jD{;VvA?MEQv;G`BZQirJL^a8eB#$d>eh(cj1k0zGi}`zY z7iPA{xvMRY)vZVh-wEyYUZ{MybV?Ocbem4Fmm{G{yapyCc_1K#Pz&w4aP zezYYOloxhV#3sOF@B|0O4U197FDUo7mJoEDuRC=0bQk+CR4Y8FI^UGsB{=Tab9X{} z3;l*e9D}*_fdkP|Q5Ck2UcV<8Jvk9)>6TvT$jdh^);3xyeFjZr^y(&@9)U_P57A8o z{iW2&M`gf8?V;P}qhp+XEpLC|N zRLWK&4|2J#4<{wf_WiVH)KjZCBMzjce(-o+K^#EKoB1*owo6{WXHB^p&y*ZL&+(vq zFDNT}!zcg%$eLg&e*Z$~cG40*n?*@k(c7h}uNTzQ#TuH#uaq5#*Tx#!lQhe7wG0gu z%Rhp4y{^1@M%rJnARtxNjt=o&PkJo7`Tx)zUcNK7^1{VfIgp%3Yw8*AO`FLE7czCl zX*dzbt<4{{sH`W8QcCn60FLO>#lOIceSuALf&p$LauE`y*4QHs#uU*`n}6)r^S;sR zT1dF-G={~x>ir(xHm=8M#fajb1@s$EdwM0}@m?%n9TV`gi8y?$Z@)0W5cs+=6KnNu^d96=iVQ0r2wZmstH>rb6(0UT~?vM zZ=9H{B>H(g-ohuGw-GyBa1^Fo^_tWB(Q3A%u;jUaeJf$OzA#1>lfaN17R9bV;+0o% zh6zrn5kMT&K3Rt2_d4fVKAs`#cS~yd6iCE#QK~(EGU|^au;$~b{xEH|E0#K~{1CyI zINNEy+%{N^Bkfs^!~Pw`kcLuUw8bCE0J7g8>UkTwtWD$4@=ay|EA+wz6LU*)War6n z<)q5>yKChZp7;u;8ONsw6orfL(CzgEd;=z^Jin=Mw`6=X1p2XXxIwozc90%e7N+C= ze1kpTYkpitS*y?IsUnISv4LS<8Q#|?MyG`tQs?S0b-hG&^7i9d*0)P6 zD#_bd@iFfsMPSH3!jMP2_kIJIVKO^$4ep&~vnvtdj!rxlS?>LYATbs{=|&#$OMYIV ziLem|ueW;$H@o|`p%l!h;kJHe6w}jwng6Z;wlF+I!DDDENk|m5V7o1r!dmzi2C|W? z+%i^SFQurERiCl=lvLggEB+z!qM%}8;F!w^twPuaxUPXAQ4rrnflkOSBHXut<;p6} zKj#)FIaad4N-1yiYu^RB@x$1XTHv8E`DqEld%?vj;Hbl&b_6x0e;up1XuH!DOyHlu z$W)P#WWUkYdoAJE({aECR5g(EOhR$oGMx!{aJMs+xo@5%@Rvy$TQ5(8eA>$OJpK^5#m@tOiB}@8STxny z-ut+uh|!cDbD{+wHf^G8!2j*>oJ8?5z9sl_cM^lE#jZZ-90ybVa{jW$j?4M2(36uu4pB zxvsgL?HZ`GYS_`iWfegjeV6IF;0=;8W4MIxDy}C)zuj7DWz2H@wp-wQbrpZP;g&jQ z8*0$pQZA|{0|bPny?^ya#ax8rk|iq|SoOq>&re}DH zHoOf~#l(<6-N~2dl)inExNOR=dQD36fxuSPO=rcMInMEmGVUlc;inCRT&VDbdKNyr)xi*AvI6u622=i*1OUSmQX1#oGgx2 zge>AYlZqTFYYuBQi;=P(%%ZE5FSUdh~+(8 zj&j{SE83=q5VA?;8i$6-$Yn~>U@GyTd#3SC=o$Rs+i`tc)ghJXwH%w-tI5F<<;3MDBfHymaUCx#RA4fKTci!Vm%pQ zMvQoY81az~=9`i)y(p&I)CW_Q*kv)c&tvD5It#^KqQ4d(AdmUBi7im%9Y$-e3EU&JPm74oFZsGAh&HTIIkRN#m<8xAy?$lbeP}fZeY2k zvaz?&2oCWBJq$({Fa5Zt|6d{CuUH@tc)60Iop9FakHcbM{MljNQ_YOD4 zn2KZBy{1O^PT@AYZ}-}jrXqoAx){NxSNfaDSwcvmQX$6cYt!=aqU~4(i`YS|&UPXT zQosyYvsOA+5i{C8`&kmN@SF3(6~Wj#UZIl$3{>k?wBGr|SQw*t=H>SDM%myHrTFu^ zGcDp+R1hCakAxx{ATsp9m7BbB{`gg|5;wW1{mCqBH_WdCYDZkXCu<5j@yW)(qUZ9e zc)j8vTPi(4rnY9TF`-bCmF76Ucq)KipxXJEaj<3h9`=TlUqZI9MhVJR&TvBKZ17|( zgEHz$xa*s?VYPQ_uBW>ug?{;H3_&k`O*xLqG36X9?!wXgq04E^MU4Tu3d1dQ!gqt$ z^z(IHPT!@pI1BR!6_|anJuSw0no=ZC&=W&H2hT1HjJnJ8@C`pQKP4Fd7(n9J56Kb3 z6i87$=o#}uW}n|QKJl>NV|Q(~DJ@;G>wfi+b%IaPiXoTMJi=U5-3^qExoBi;kzLV) zxZU?&b5~vBE!?{j@SPeEsxdnc@}&xLk<)Rr1@m49nRB+fq+PhGwr?W-VWaJKQXjMG zJUC1mm$SQ`>+ScDYL6GcPGpX?O}uldYQkzv6e>`w$r4AVx{Sh8k_1D#gH@lT$$f|b z=;FkHuYn|GQs=MLQR_5?lkSaGy%gpZ#oy3OH>$nzsCLrk72_4ZU=~6)nhcDPgtggW zP|Xu!nb#*izuoRAoXEVr?X`3XD7Un{Z~)QckI%T0q{P)^@Z zN#9*dom1Qw^|>i{CK~{97nUEXW*peBB?jD3z@jf1G>U$I`$eQ;la?Z6wPNMbyir>u znIM_f`Qe$AE8dJ0I2plWmgq-Y$xz%3sb<@$I`uNhRYOZu915i9c3 z*Dt#zm~2QfKTTwE+jP+oE!!W&5l#oP(b9{mvmuIDxy!-BQrpJr)y-uf3yRc3=59?` z7jNxW?(Uua4Y$%eJ-&S2tthTXI#?U#s~CvI!fkjt$qcVN;wBO3UB3yi(QU81f?Z~= zRPYrB6S|ftwB>_fq48 zVR)?Aj)gvl8QWhRwzfYTo(!~4+QFddm!16zoMRLmivPsDsXL4%{Wz&!llI&mq_bWv zPTsiX72=)q@~z4ka~FKzEQw)GEE_R74d)iA*CrBTQ%0BJ+-h0Ym+o3!D|??0C5Zve zdiTH9G#CYlw&Q;C3A19ly~EWgZNBS_bwyA)lL7kyouN@|N~XlLVLgw3v*(y>$2Q#k zQoxEnji=OC2JOd?Ms65pGQU9#AD#>_t9mXo&8cs^)W>(%Piv;7ASm z>YD3n%U_dc37Q!qOuZvwhqbxVdXsn_Fu&n7IQ?m7`Bi-$utS`C^i-qH`rh$^*r3#- zp(Ba$Y7z=Kq*LFq+{#W4JXLY>&{iarOIw(gSTL?^){peeZ})mYj6qnc^%^RK40BGNS+OyWCSC6@5W8mv<3$^3*Z1dnR*E~#?I$`vmk>^3L! zfhmK>DN4boA&!7-3k0qlVi7G{A{_<2sx46`(qFoYDJH^-S0zW^(3DPX=Nj1?bO#-x z1HqazEqX%9+n=e>#AsjwpGT>3mA9LJAg??WGQjjyFOQpp(nOw*XfB6^ObXfv@ z2h)40Drn@Jmn4pKh-#C-6`%;ly3(a|SN=7SVCl`_Y~d~nB1L67JtbfmEon54Yv?}5 z(6e@VX8XRPhVK4q6#E+G+gWH`zSrSQV#|!G`}dtoY7^Hjz``F{TW+nA> z$0WXem7_5^1zR8t>_Dsb;V0!-JaV(=qs;)_Oo>g~CW%k|hX(i6obhtJ=^~R?go&1C zL2T-%MmZ9t>V`bs=6$+pFNMZEo_-x+ zQ!A2`oibE7L^o17&D6Is_NkYZsa-~KkO42omT!0HG=n0u+rH*(VAv^~8;owh^ODga z;KU$ImEs^jkA{LPPk$D=R%1pKVs#Pk3a4iphg2(S@BD=(nDv74Is;t$~r&M`W!zHi>9 z0>hi&mrECjbV?q0e)QQ{#JsmSev(r5fCLU4s#Rv`)L=!3S@xS;BEhXax)M5EG;OBD z+eLn9fu##-vPH>cC835xS{7lkMy)I_(PSaI;chTR#c|ZGCfF z0*br&0H@`S)67TfLvR3EPpKSC!#D2rC1^6zLXPJ1HH3@P~8i`jl3FgA`VcB_v)P!U&%IFEdLMmWX;KZBy@aMCDob06v z1uXgx$maycl@6)FA>xqr-zeDbmVW zeTHF5JDWE*5-@o-71NQf=bqaJ`XM#hH;R2MbBsdeyXPTje#sQ+fA1 z`aQ{>z%cz+NSZp0&Wm~YsgIa!GUn)!OHQTttG%JmYwg_=_2@1ulfvW4SH;tsQ|WiQ|V; z_$qqg{ZGLAI|U{YMr19Kdlw5SM!{++_4=NW6>Rq_U+~M!P2s0);J^Gg1zKcz=?cH# zcmkb+aJ_n%GN&hsUw7PmK15-MdK3lp8yDPSxO!e-%gY({xi;-kdpr$@2Hdfc+!w?`{)Y^9KS2wm9) zm^3%P_BMww^?Sthv2+Jx`7M&IJU=9d4N%Q=d@uJ(@eu{FB{x6~$BHqWT+2w~is8C( zc7zw+`f}dEc{4y-&giBQfRi}rCFVk&VzF7ZxZl4s3d;*YJ~@qkv|b%_VgEvIaCViZE2%y4fA zff2(<w{=c<<}3xfiOgGth+Bwjza=&N-M=D_D;`8b+z4AJL1ah4XESHL4&fytC?O z`SWc<9v3$>8vfsjf7?Tj8_ZlvRaQt45oKgu(LJ_*Kn)sNXD-zzHD<2N3?l|bMZhI_ zhdO}5UP2PtXhhW4*ptg$ww){=iqe#WP#ano;E*aGq2*y~bH6s@BVnKWpUm{q?aP+f8j_~(* zndtn{_AVN)PtcO1Vov1?U%%AOHT|(diKc3+#J-{FWauNc&Ak;BpgwGvsua`G%;|Ov zJYJ68Wp8hv(Gj|3rf`^Bz7-au8ar)$XiId{i4{5fJFy z1{iYpR2(h~t?m$R9j&hEt0V91MG{)IO`)fI;BXKsPnR$l%jPGgQ94OmDT1&+^W`!u zuviH`iDR%a0Zu1<)V^rEqeZlF;hy8HR0)9@$Th* zun31owb4^K|NV>M*cb2Z45?Chy#Vm<2!%3XZkcYAM@eVEL+-@C0aSZy`5qM4mM+vw zT~}Ov9#J134Z^j<4H@d~b_#85oqb)E|NKS3qbXClCdgR64NK(RLAVKj$d69{F&YJy zuEk{Lbf_ckaQD_ZncZXXlZPI4ok7cUrA5|C*LP$7A~;S>cWTF_l7Dor z>QCZ}>c8D^NG5Y*=WUw|)?xi4%KVX6{7x-sU~rF@-B2GjoFJv`F8?gjet|7PW4P1Iou;LAPZEfgp&3BOSw2aLd|hhz>Qy^ts!ZROGn^U8NeQeUXF=YDD=K zvFrd(twvkS)&@KE9Q)W>s+z7Vaua!qqr(VK-k%#=?;tO(WZ%3^O=am^m>?V5LQh^v zSpD&pI^~_xj3nZ*dE)h0wy63?Djzx_PNSjN6jAY5*V}zI42D&Bz>B10FjmP-Bdz61 z>sOaHnUDzv4~wO?i<(PrDuWZ-CExP!I+c`riD~JeK;lX#K-{<(New`?#*sxC-f9fW zc!?x3qgi93zeG>?zNI6%*eJ#`4^5Tr%V*zT@<^flzJDZ`XbF`LxOtWuWxQ@JdI}e% zlOHf$O`0Sm6HR$&ugL$p^}m7a|2mwd5jnZJ_r*;6TUuh0R32g!lYf0ToLgKX36FX2 zc1;db?cUm8;n+QW%VJo4k|fT`0YJ#BE?sGU747->CaTq8sP_ac3Q#nIx0?4`F&dfh zc@J&M6zg%G4NpHx=xCJN$zL(d3`2_`YLs)54;eTNbJn)N|GE}$X9QVPY!n>j|AAxw z4QT&;0!6*r2jlMsmEku&i%~BVaLc1O+1txTt`O~4HYFFM4YZh@R3FOxEgX=4B72Fn zZVuaR`Ojec_blqqcLUM;;yE~iUSs&i8-;c8@cZ+Uo35lhKL+$q80mG!5psI|Vm)4J z3kSZumCG`Ip?$E31^4ia*Pmx6?mz8@-wWe_nnA+gpb76P@b{~MLU6zK%VdCS`P`D$ z#Bf@}STF4HQg~M?4-|48!tM-7hvTaT39U}2HU%_4f6R@s70C+`e@38c*bdwvq5aQ~ zkPyLqUDyQV);IxImLS6_0Nd4!g z3#Q z(Fa^VlYxc)z5)>s(9}u7GcP6bpHO+6*L&;0@l&^7s(STQgOV0HO769*DWxDQQ=nL# z$H^FH2UBNc>V5d$`ePsbZ0&V`Tq%@8VLmR{a3b3B4G&WyY5w!jRxyY5k%)aYkAhH1 z$L-+EMap&TDm|&&%_*SvC{X);WXUbBtcN=fsj34)QH$Re32h2KcVrcdteh}nOj1s)v-fEB;mlT8DWjJwwvFIxDSqH{+5V6>svV|~xpTICdh*_4Q8tEN zZg%%cF;$L&Y$8Er0xyLJX7X?-BHLk!%%Dnw-(G%yhrUIZB=yA7oH#qNj-8S^OVA^xr-o zVF>LPY9=)(+Q4QeAs!v=WIaIO>?8hSxNrZtH zg%82|l~l%(M($BGRA;gyK%jKqPrybS3+_zX3S|)IUTz`|>@Kd`ulVX(+qqSqw|}cr zvJ$v`30hz?GR&8B&ealfXZ7T+J>oN;nav+-5IR>+xLi>ukc(U=XES$nn)$3VJ#FTC zIH_hnTT7hmNZ2)es!^cY7=VSPj0}Pib$CQ)5m&n(W_;fD*u1_JNRLYS0EBo{rqq-O1kq zA$Sk{uq8{CGm|n%2eB_q?+y)a_P;J0%VrZWXg7p$F^$dTJU--_-F*=9L$-mnS&>Q& zUfC&&u$;f5t%we2T0Wk5xx~ZHRCL4_bSibV5zmp2^|QJ_NBBfEt7ncjAiBGSx6+Il zI$Zv99U~1diN1*F1lsknaMD1(+V`y_2A#TBulR2PD8xZSO!MH7t7tUt8Z%{%lT1)$e-f+eHPgz~;(c^OkFak(`_NM<*1&n`Pf54q`Yh#){~_ zxGv3_UJco8Y|}qBVhAkG1*=pzo)fi%q^QWrVQ#SQh z9SF|b*1gTS2Q@eh(P*FE?oGYK^noD-Bt9k8AuU`H{pc&tHxtmLp-@d^F(H4t9<_bQ z&Jt6SD->Nhy3fK|?iOLt;|y$_uC}D$q+SaL`=Bu`%%(qyltKik57VixP?JZxRVuKU z##YIZ(hwfV2WGnmXI3|2JM&yZr2WIv$GS;kA#62szg7w7b4wUTOm)UOS~jnkD$GED z&gG{=Dtf!w!%W-l)=<>u;#=Z$R|GB$g%lS9ly9tn9uo(0I|$Zz4{M)X$kC} z)W5c`{J;kIS6id%$XkRgt>6secLZ;LJQs@Dx}l_YHR(KrSc$aiGL=I|;=(-EkbwMy z5U$hF;sR0Pl@zN3+vwZx9~)IKWDdKg-B#R*G&~TLn22t3kwn#tAM>1|bC1jM@HRZ99T)+L31^@+4|Mwty z1VEwGqn6!q!av`pLkMvx$KF?@FFgQ@Das*k%(p!Sh8@>_x)o`j&a9ADP%XAa#hU?z zW9tEhFjdxb)v`2}oIH{YGHX8NJoatEBHb#^i7$`>TO{|Ki8@~^FZ~bdmAn&3AimF!cLJ{ag z&@Hc$78Poj?|T+&@7^2q=+Tq2&f*ptP%M=+4&9iwT4dEzB^up)iHFLdEjk@MFd~ae z=pTmRYz`EC#R8kDI=XXOiS)|rlyW~w7rosd!{Su}X)*=kQ1kVVk^u($9~F{)>T|NT zIR6Po{vC+LCSd9K1EnW4GSC0-!}$sgH8X+KkEJK*ONqq>UP6&P7tsetbrlIDL9^|2 z#&|5|Z)r^-cG%@60x30~)B8zNrRH*}O1Z`*s*MHGPA;da0j9+!W0r&c9b3uO?P9(j zPauOLUHW~MX`gx*33d`bfkmf@ZN2Ls#y=*tDDJp$UA6P0VpucaCi!@1$L6XkuSK5G zPR1RI<9^_4Y4j|ljlYfRP?XFH!PVo`%1mpdVcH6B8|gi2y0(X91kmGR;bMLx&GsCZ zdwITdHWs;N>*9tp{C*oVQsL|czd{SfXClC!c>1HLj2gl^IY`&hNhSEnHe4d79{L|t zCl_p^V%%1gi9=>opnHj+cH;8ARn%kDfU}WdmiY|@D4=qxCrUGk#_@YlP)al!MG$?M zxXgT!t`dEFbD4Y`14u-C22=FY*_i0{GNm?gqw zGXKM;{_?W%w@?5%KAgKP^3QCXgyAIsQ?2SnEV~>uBpVB)#Du3Hga%eRAkQd*>rXYD zE;g=GcVqmoUQ^R<#%tu&e3uu72AAXI7O`Mg4Vmqp9Esrq`6kGG|Ewe3CfyY=SFVC- zk7cy0OINMl%UhZ)Qi&|O{ zRQXgR+G46**W~A77j3ia0%!Tv5EQy0=`^nJRf~Jsa&Jnll}00SrPHSnMpw(K?ttKTG*%*!s_ckR1JvZAV%x zu79s#L7k&t;d|A=HNy(#A zb`ua1tRuTcRj04_jz#Objx2$;_E%-XdJ}a(+eOqiXaWqiP(D|IynY>L7H<1KwfS0twI+^-&qxl2nUO;zs1k`y{axI*l>w7VQq8(AD-nc@AB zx0llDQ=sM!z3pVj3GTt+sm&v3RhvmvSKMe6$IqU(qWMyo0-C3B9^B(P5om+BW7xcQ z_1RigNfrM4=g5680PVRkT&lOXk@99X+W*h^LgHO5{Kcof+M#8a{-3~roYtF+N~m#MM<%giGO%fuO7OMZ}zAJy=;lK=S2Nos(+DUjEdCGXwiGCz1I`tS_|y& zV?#S&Vx^U!8`w74vMlc{01}zipW^F{b_^-U5}CHe!zqGp4rsv5j!ME)Ea7nmeAi)* zy%#3zbtQd96#KC*I^q)CV!0CpH)p@0BR0Mh!AEG~Jlyo5#+LN?12@GsG@*>xb*oTF z4kGIn%n}Zoo{xLv!z+JBl%1XN_Un#ZM5wqsMiNKB5(fH^8N1+P6Hv?Od@mK z-1R@=S{77w9)MEujnR3o2|II(Ip`X}g^FK`IgZ90fO=5{W*n9xqMZ0e^7cu=YfuJe zLI#fXxEtSF^s@+rr7n?{N4#aXD!Y{4N`8@p03~3MMw83Qgtf#Qq)=*iXl0_d(QxxC z{QGhLI7UoVQPj^Cvf1jGsEXBJEb&-${jliO58}}rwr3Q(T)HQDfwi`sWt@YAvU`%D zlX+3^W)`_?3*N41YTsOKa7510px2)8295ELymz3%C8Jz~CiT)YCZ+*20jSnbm7$>0 zorYPde#a;BYfn9CvCmB%5LxP4dBkVE1=H9xR(Zs?=zkhPrmy@X)aek^>qGeZ>0*U-D_A>4X_y9o-hGS=FggC`t>D>*)+-IsiktYzJHNF@e)E-dljPqYC zQd|(nRdMILe=5vDErVkFgP-%1~O^v%g{6_11Kan2u z{=g<^jKZuobEav7>2NR|b5z5%q(w$l=G)#qh%Ym1h{}i8?Zm_Fp+Jj5%qjhJ0fvHl z(L|4`<2y=^WQ9x7@1WyTiZ3eq6`$EOOFCXX-xOC2qjQs$UxyfnCdupG=-Zx=TvsX2 zjrHLq)zfWcN~{-lk zeCX$c$>=?G#m0%hC%i$As3>K-}iI7ob z0o9`c0Z9E8nhr;GfeLQ0vc(Ven)m|_;053MQHtbSGWeFP+W^(Wd!3yqD&+zkMOdJ3)B&)NK6$z@fNmsFs`HA7J8=EdEn!3-J1@)we{1rx z=39A4=tlL zWg9}kPx$hwRh^n+?fm5~`z9@+M;YYc34tyKo1@c;?C`;WH#US;Bg@)-f>M<+iyJ_# zjDXY?On;zyL@P)SUEX5!ZiU#7GJOsBh z$;{$tv$R<=X!n~aJH=~4kJH3#slfD*LB^e-W8rGp6lAk5?}74|ubnQe*ti(+{Y|~c z4uj?-ugCpy3zfD%`u{Tng|-TbVM0*jJ^FAzy0@5HUozl{Xba!{kLxXg;beDj1cS|=& zcY}0yOE-Ks=jb`=dH=ult#vQg{kVW<$ILY|*UapldB$#eohT`RDg71wXaA>HD?w^Wi&e>~tcx9+CC34t!5Gk^0x^HMVLO z0v7=RFG$G*G*hS^SP|9%3LiKyj5pp%Sis3 zKo>-x^_F)wz(TKLEGnNkWt3Plng?loj{3an*IexQ9IYP)lgN_>sSR2R$;Oqr;+0dw z6yv${yb{H#nt{cTU3^CWSyw}}Qv;GC^`NdI#fN1R*r3DsUR!LYQ>Ih-)*3=%cjP>& zb_>D{uzV4k&%sYPP+x~%BL0hkV?u2er!?J=<+b=Q}c!4_=B7lN< zY<4Hr@)P;i(rN|oh9O@&7T>nmNdmsPFt%Xlfh{7h&^#zhP$fn5XxC-(UhPH5mFXFe z>|pQhe*CwO)dqIzisZZkuu96%;AE6$&yF`n%{uf^XO)~c=?=)+7N<@yH)#TEkt*NR z*Hapkw)SG6-^5NiS?$+XwYLU#t+5x*fPn;Ig4~#inPXZOw$NwMlm8EL zll=jLey;Ii3A2O1;eOf5?^nAByl=;R1!^cP>DPjtyea6^F$fhH- zhcp}@EYNOwKC{B4W-BU#wC-|qlyD9&6@6!(m#c)VA?0mFc-|9rH2ut6>cwJv@pk2_ zWs0&%jwCb2x3t{y<9tBkR6@WM0>40H zw?$P$)k*^2PNWHLT*1w(PAR}wHr(>MHY}C|$!Ep(G?IWsg@hp2j*coQ;w4Hu-qJy5 z5`qgU-Fxd4keY=#$M)30#jNBK2aAO>iQO_-CN$dIb&-9o9 zisB&lf1T!Djb^iR}$`vJMFNBwb4 zi}17(Qp^W0UG)tcx%G znWc!tL@d^Mc)Y7{iHiWhMJzgKsWiW9PGCmodZ_F^W!Rs94*>$GoU_5g$8Y=3Ba8@*30=fu-SLYde?~VzG`b zIurt#m7CK8aH%0|sXp6cAdwS32;>W625DHU#eN4}AgjY}rOUUw0Y_(IX5;i+P4Trt zI@BBk(B%|X`vEiB#r1goTyTWKSE;{+essd#t-;d7u`8^w_gn!?*U-L2C;3E)NEX6(|kq=+> zqE&4#4!m;Zasth2tT&58@vHTA&9FIbu)#c@Ntf~>QYccvp~p~>x}0p%wt097$uw)) zvb$VD^?fdBJ6a{U{O(mPog0q#n0l{0`MeSyzq&UK)1AVF5QqxHo$xIroLsJ=g8$p~ z#w>Yv>OCChC=4b8=jX(|sak}V-Kv%Dkw^;9#HZlkFH(8#uwJWHgr6^$G;gf72aJ)r zlScD(tQnOjo#~XCAp)r+Cc)g4y-NZ|tbfC!ERn=b8 zaWG^JXwxhd`~9}An)^B7e-z8#kDI@p+B=y8PilA77-?|iUuxk$+amlG7aSLN8sKR5 zYGItF8l5lb9J*g)vs#QZ4y3hp**Yl%FkbAl5JkK#k2ITY(xFu>S@8D%KC9fUoq*iI zF@9EUHs1n3%+W!;7XF$|tWk1?=u{P`!-+}@H+Vz~p6`6`Ap8snzlv^PF^1=f{cje{ zAC@*#9_T}&TZ=UyzYlQ*(dk;yGMZ~5Brxx{4{C%p3sZ6WuMe(gJhQC2PK8u)L|*i5 zxFbK`fA_%{70u+^ht}XYn4_!B!_-(1A!%z<1W|Km_P{#{*Q_rJ0WTizZ@7Xn7Vwx% z6h}?ZuPgQU^@B0!20;s^vlmM_DQ;a|M34#I!J{o`W@so!-az=O4=C1ja3Ic~F)qFv zI6AFHOR)RBfP+J;?TL7FzhUlFu)6d2FbuEmz7{xxa$OAxN@kMpeKqGS|rG#d?=6i9QNl zVzav@?5p$V$7_QD07`=PYDAopuV6l}Mi-k>Z_r5=Yc&UGxy7YPIiKwXqfzgy?o8~) z-VG5_sn>unK76O#nJg)Wuy?gQ(T8xlz|6i0WTnz-nwzoDLmW|+bw#vXB+FL2DE7uAjVV@E*+yBCpz{GdMsV zYl7oR8Dmk!j&qtV^o?w1aotQF$*p(t(ULEhivYNIk7pMUbM8RovD8UuTrf% zuA|ykEl>i^RV{&S4SB^c_cJ-CDe-UFAV1&*6cHQqdFZ5`aL<8;;hW+aVJV3P_$p6^F&+kSCIoW}!$e(aSA z%i*%-?So%zwO)n>V#SOkt40`1d|N=28Sti1IKtD30;vPDl~qG~y$5ktqt*(p`GF3d zw!#P&z;3pro$m-YYM9!MJ0dQK`XCZfi1>DkPKrZ6-!eQm(I(pw5n=6=pG)k%CzX=IrSh01+eu3K|Re2nM_@z;gYX zGkgL)CCS~?SS{$9Vcxc}Z}~i$QVuy}cXB*pX{O596SExMxJ6yMC;hrDpY^Hof68|L zl|pWCItaHUPD=Qo{PaF_2w#8CZbhiy6WHwa4RXCP1jgLl1f}Z zmCG3%_iQ*u^&HOCmVlwt+$-JKlv?r1q(Fs{mf0#)S!k%mN3ecZO!&1(y%hK69Pb;_ zvRU412jqc+!KC^+wdec>S6?Pd#A1qfx~=IilkA(h_vCXr&!C{8CrpUZSxz`g0nYh* zEWkE}seIx8(=0P1g};0TgI4slB^Dv6ACf6o4JW!chFRgUZZR9qWVJb~fM8ozE<>Zv z>1o;~O-mQUI~Qxm<%7l>ili3Tv$PPD#0f~#|K-g75IBzK3t8%5&dUswH!Q6 zOYz9ELxRp-x`iZ zTxznsKY(adH2QObtEt>VUvWW4L?GDUDJh}X)YtP6w&Tbko%IhWHWQN+XahDgDv?H2 z+F<Zvcv7zXj!tsuR`+oyCT$FlPjeAkcRh{ z@)7bE!8Aa(PXZbo63~VuqsR6cngU+wOgmU8bT7MZT)L*v+oEv+C#;Q(xAI+xiPG0e zqU)7iE&WyZ@|X;h`sWUZA%l4>3fI4TO}~EWwkNkt^ucKsjVbcHi8d-6HLC+97E`_t z!op#U;X^x{u+wmhmlJ6CD=w?!F{~nm_8dD&cx1PJiu*kW>D{Sb191Ll6cV)>^KjVr z?`jk?b8diJj`7ZJuWix&A?SD~s1;d&hE6OW0gOU)e#TbKf>*#*tRI)t#UGDMd=gYM zQ(2I@+h>Y|xMYs?Ep7D`P_LaY{Y>rlSk9B@DpQ_n zDbF8z3VfUrT#x&EZ2X<^_p;0>T3vjpaCTuxuO11v}6_1Ap2kg{AA za#GLv4Ea?;oc|U={ey2`cvB4{cP%2hu$e!pD3d7ZI7g`-Dnw?dywemu{ znQy>Mn_bwNo#2HV(|G&>ldr)67~UBo9!hEU4&%Dwa=C0#vj`ALs&hIc)gS{d%e!=w_iO<4 zjP8Cng zIEiD8d<42mv5a=FjAhBz`r+JX3J8>Y9Lsk2uJPm*kkApkVYcwDq69m*=ZC(h>ev?>Ad|U2l8&9rPgMDY(^Mc32sMCP$ z4pwMv<=XH8;scfLe| z;N{&#Z7ioNGa9X?7a_&7ZJM-*$GNb>1%7jZ z$CH5Wl=jh`vk`I?<}nQQt*-Vv&ydZcp8^a~(}P>Q=ysiS(3NgUD=)uKwfW-6-Jaf9 zrHLB0l98Ig$BXmX6yu2Guxc_%^0c(e2&MuUP4_!Jj%toM#e!U`F}EZiz>}0iG^mSI z#`o}s27>oDcvXMMU#2zqD`wNKouvWG*AUTEfq;G4HHYpr5?@CJ3KrXzR}B!eng}SE z-Hxeh^aeaB)&tY@yz-Bn+^_cp`c<%ly}AaMdMgv4UM~g73c#cS1##WEP1KmPkExxd zB4>cKBH(bZJnlFeg*hYGO@Vrw(-loF!+QSa|4r&~*AXqH%0>siW#z{+1;bxq2=HZg zJ}2B$BrMMm%3$DK>yCg+()P2q?3k#dQ zu@4XyBnY~)TfONFj`OeFty*gJ>ARN64Ns9odgs&+k;sN>TnB%CxxTdY5wHe+iJY2K zb*9ylLlhC4?fLRFK?|;$yacGGQvJAQWYJupXv&xoAx?npAeIC&s_mGie-xu~vk@br zqWTB`J-I_oe3o`v<*EYRL`5^#rZ->A`ZyzR`n>G7tbl^WqZccRKmnt+R{l72^zKl>z@?;1eO)cx5Ro2y9Jjbqs8!Md`m<=>@84XNtIQyAIi0-cAwx4j+k~n3 zgWyR2&oYKlaxkP1aY0odI;45B)}#D%s}U{ZphoyVpw0@qF(MxO4-tzdvbVMoS*-Wk zuJx`L5oO0+41FGeGf^C3EE(0qBYE=bW&&~sGC-0nPf)LciBcLrCG>;+iN1FzK3Sdw zTzLm%MoFd4b}A^`FEbDhjspSdd0nku$e6-t6+GSo9?;E3K(*HZ`aBV}b2e$Tx_VmO zMH_cBz@jw*++JzNC$!fWH`d4d(va#sB@5D401yrgV)POL$8HclmLftRCj1ePj^cUL zUmPr_I0jkn*u-{h;Naj4r;E5oy+(U4lk!bc5Oy!n-~XLM+J*4`^+m>Yi<0Z>)rk3l z9YsPs_OE1%x7i&Q3JNc4i%nncH0@UHb!2iqv;k#|bnerFHf9=9VdzJ5mp$dSwIcg3 z499AGMI*y82^%7}EdDQVZH)v!MdSMFit{Mb%&b_HeDhE46b{LJ0g?ty>D81ZIPnu{#IE}P zkQDt;fCm_g`9ReUG=KFQr!~V(H%Z8?4JBMclA}G9TMqDF3`en$$AcA_83#&#mo^J1 zR!SKRXw!gd+t+I8h=OpAaArGd*&v>d7c0Q|7Ps|Q<&r_hP%Capl`q5OU)ID&i-Pw2 zTu&jTN1J)2@e}Fw+K1e!Kgs=CY{-p8f-gf0TaSln^wRN%t@U7(_5S(?};d^IjvVix0_n1(EFhslGeFj?r5t_ zz{0SnsdvWuL|SfZfnpdi#cH(zD{^Z8ckbKyW-&GpkfF)n))zEXV}XchsYyc()Z5=d zVcJ5J5h(PFeez%w{K~YuS|PW*Ts<0lVH5MC)T9vQjk^?sdrA31Lgk}-_}vDorbd_N za6v=5RyHoD9AAmRW78XO{fByd)|mewjgo`EM(B{y*)P)zLpfQW3`D}<$m_CREfH`e zWJ*L=wNL+fPri&6DjD6gEIr+^+ij?^4rFr3w#M3+nf{EJlVnJN&PtH@M8!U7xp9B7-sTj zL?wKW&EUuJPCr|>`(wO&WM6E%aH-TVu?^mr68emk8FA?L$2L9e+DK$YxSq5f0_A&_ z1H!UJPEIv#lz#Ohhz4J+rA>W1(4WyXIq6{kMmgjqd`#F~g|cMPX~K`F?_S1@crub(Q(} ze9wu_RT62ovq3-sJJ4B{I1QZwzwaB5D%MI(O3}>~*5+d(V>!+)ELCq zHIxc~U^X-Pob1RdZ!3-R_#>J1kLuu?B3am5`($JgrKhJ`>|aZ$D`};6Cl64YntCq$ zu(TgB!5nELFBs_@!y+%({*iU=8Itdp1vf_a2&exkQraW6cyJ@uAJBLy1WN{9qaU)9 zs=1&4vaLgUzHaji4O6}XE`T`n0n3?ICxc#ejp+!jB@Q1`IIn=U>7PSM#-%DFP z(m_s-Y{EZJrsO029*h0XCd!i)1s3h^IgJtnfY*`tmXo+KruD-W$yiv)G&q$!KTnU|8R%{Im?HJFdhgrT2ZnUgK_s zeX)+QxSEkzJ3snb8>B@2W};C3#o_tBH?7+xib?g}1VRR1?I+;mCf4^r9jYK|u_i)S z&f;AfQP*2m*7pF)iJMaWGkV|!m;jj1twgAgxA*c+;IOi_p6!5cNSP_uB~~-}cb3ZTs35wjdm1)qpDI(%Ue)8ke)@t>*K-=9081;1zIw46|<;-c6;%4%`uK20O}x)zc=@++c{SIctMcJqk?;Bq48#B0AQh# z^XgZ+{_fhxBwy|uNB|(g-Zk4#152wl2&zUZP#7w+Y*m_)OO;tAF~u5fLP-YTd0Qx@XFCVBZAwQ%;I29pkcU*Wu|J^ z3m~*Ou_6UVJ(g1UF#OdIb?O~T zk!3vI=2y2@+!VpO(U>gNglO>ZjKGi`HXw{AbA$PWB$v{zHE2)w0N2BTNtLDKq5m%Z z=}&RQ@bC#z+`gdM-c04J4!>XoPHuPxZZMeGK^@(~L&bQC-O$L9oHQGj{K4o7$LcgT z;5w+^)ydu?#{hoJ8xoYxg3IpE|3hb|L_d1|k3MJactQ&`0g@Y_dD}aQ!+hDkGZ=Fu zTYwK}B7ZM46uCweu8~C-3$!+nK3w53f8hGKN?>4l=tdlPxy~2B&E@}IGQIz|G}0)i z2ljM%n%llHkabix*Y7%b`k2g{5Y-#K->7-|*RFYNe*W4?UH`>;h-d76txC*ZO0rgVA7&G`X{mBE`vW57NE@zizYv6h`CRCa)+O`u;#R}t!2j_ZlOe%@12Y#2bh)y` zP`w&rMuhQ;5H0>rc8&$si=3BBx7>z9{?(!Ii5G~4GNo5BesO641o4m;Te8_w>6eXI z1`41JmNQ~rR0Ab~Xx*O&2GWzsr2L+ASV;LXDE;drco+zzig>Bkjz z?^+y<<_ue zqQdsp$>xw3K%oq0+Y;&azN9_`lBP6GS9UMxbKUuTPd#?>%! zQ8b}e>!RruY=Q5G-&oTe*M1j8wKO|yYU|F7eTGKvA5&KmaN<}>J^3|u@pA?>m2NVn zQnAkQko(u39ua{jE^sjD#qBg_C!(V(8v_Zi;C7URLa_43Zj<%D+z$5ibqKZO|@qIFQ?D}a3X z^3cJsK>Dx2zQ-9O1VZ+y2e54`^8i=hz5OQgolscv_)68fC^qwTpZ4Qn3y)`Jqze?- zrhq-I15WBW$8jzNc)7U-BoAsedjk4n4>K;SHHdG;^T9}Mknfk9DJwqq$KDPvuZr4K zf~UB$$-@k1x{YNgP1TxkdCIS~PkGh^q0{c#o~-vprs7LNI1>rE6+Kh!RJD2uHVZJm zIWF5_@l2F)-{`Lk7r#iLTW=nZ-0#gg3zx)DC)5K9ykAFsxs`DgZd2g9ui*M{G0SDR z(15!jlcxyBP~+{l*ji=kOx46seWPCW0S90L3u=2Y)Ji<)+(ANWD&6dWALP_b=+a=h zn%$J#d25ANs9Fie;bhZFsWFQ+k*~#i-Ehx2n9^*RAGurSaD-K1G&c1Jf0;r6SC`dQ zFv#&+g7K@h@cXvxePx`6w}XS8qG$qRzLi(Y`q=b^zd|*>#~R5J(4wZnR@J()PJtyX zel3rLD<02=LZYA>d2O5DN+eXZrV&;Cqtt^N{I3cb)B+YzN?@X%8IXk{Y?FaCkn~wM zka*wO?*sVphbic7zKtI2J220HI|bUOEF;SOgTZ_#J2PxQ-UtP4-RAR%B=vL#I5=I);gyi$ppLd1%yiX2%@_MBcxNaq_cBcHz zCx3S$POO{`3*@`vf*G~#)O1#-)0g*`*0>w}Djzth`-sC29*cGkXx_5?-sLca?(sVM z05np@G*x~moftBauL;eRujnr~^lQlYh_6uu_^qBBA-kv0xX7VtuTJF<~xAXRzLJwd>3NxdKIBy50-#V6=_;(kIqDF62*r76-stT2$=ej*a z%IDGAS3<>nl#t!zyZ-LeIOtlrP$Y3ajovg!3(P+=ru z5RcBGcURtUSK+3voUnu(OB9iHUy|8wo9&Hb=h&|G?wag*&WZ&)p)>RBrGIs zYe4ZM;dArikJq=`4+3}3O=}q0XGJTHa{4XOGuWHO-J~SN6*LYdTCc_CksBmFmD6ij zfr4?Z6~e6*^RbR*yrS{Xm7WSvKDay@qk0dUv9=~Z)65m;6K1+)zXvAWx)KPz>z4RX z+U3UQW9MQZPjCwfUKIWW!m{XlX1W;u6YzhZB^n4(QL*h^63W*S=z`qW2g@U$vlrPT zoXXK(U_gC*^2@_LhJu*J1LDOt)ukOI^hQD9Y2B`{IlFS3AbqhKu0>CdiH#x5!vnUq zufSnBdny!!#`6S%`w4_9y+_%x6+Dx&u;a65y|d#A=Pr5!PNliJb6eWCw;t89CNAL{ zPT(Ur8C!F;FujrS{_*V@ak2g@jM|As8Q5$U&A{QJj$WSNJr@iGN>zLm^42Qj>4W<9f?#p`n;z=au+!YzoMU z=fFn|;@(xPM!(4i5gv@STd1Z@#fFLo*H|oHs3L#HU$TS1_qVQ>3x)UkZN+x+!~4u{ z+>XxZ>s;3J)A)|t2KE_pWH)0C`Pi6&rTO)V|NIdOUSBdryzTi#4qSr$@HWFHEF`|C z&kR3|Z}8L;FvQ2l<2m9M7P{DK7i>l-PCAw}OrR(CDoV{sv6>N{^DUd>aqtTwEL7Ay zb}zuH2MdN`d1*Z3xbMST;}{x^>;mlPD&h@&aS0BhCtmHXOc5<8!4cbQC$h|Cr$6~^-&b#Znd}9I})pIFOG^D_5rASHB+sT(r*Iqmp*cy z-aD6!t&kKL-d&p#gMXPQU?~XmzID0TUzA0sY%Sgp)V?}~J3UW%$ZB=&Eq(U$A)sMcoB!EnK;Px$hKGWFfnIlOG>5B?Q!IX_XYiT?*!oBjY7ccT1At00uJe*TF zUPk0Fp?t(IW=hdGh5K!rRSCf2*wq?7Fe%8(V>nHc*F7E38?u-Q!}U%2&vf5{#YOEd zmc(3lJ8;rAe>`?1lxpzlE-NhTU+?mN`nNJhsPmudRHG!t#FUKY z>r@WPyVb=!%LjRM%EI}i#QigX^hv}wgOh{q3&`i-2jWkN!0b71w%+{$B~PF#-aOXL zWKQf>D`VRZ9Rx7y>_FU38Sy-a{ui47oEm0__Lt^if7e!TeZtPgO7YhoKdM1C2|jqm z{_Mpk2S^lxxSSk6dOYAFEYNug_H?F)zke%JwKe;4Ul_B=4Ba$s_ z^0U7Fmf`H_Xqhk@n)viBn%Xx+w5pxYcOp!l+;3@-KQl*V{!1m_B^b!J}5G zo6$EV{CM&`_jB3@{gHV6>FKwpD`M^=%o1XbBCTCrYNm&a_U%!cv%R?^UK7P(Tq^vp zSoYuGEOrFNY}q%vtL^WO<<#?FE2?R1Y=N`m;&uLjNH^AcOrvqWNS!k>ch zQ34!F<2?!z{WveT`Vy^XRiI>I{{6C0AE~*RWD=vKkJ{+y7l@zA{{sMj{pj&o@ayEH zpZ;K?I8ct7Ev39y3F;8sS)fj)QSWDjF4iAN9Nn77V$gr>%J%Szq|9k2Pbt^+MwmqT zo%1>PGl>{KV@w}!hyqSwyt})*+}zwLX(9Xb4ZH74 zGESTGQicOF)QpFrn2eSyulaCIR}bpVKRP=4bh5d@urlfT%NJD{>VVOU7)__ZWak6hnKs-zv&Mbxz>tva zpxdN~#qoFcp`>rk-ym8j0kFw5#z1?(Dkqgaa)gqz&Dhoa`4u_rzp$c;0_HfIZ=w!s ztAoBN0(4kPFi&Vs&r~!vN%f6Yk-8^T zO*mHA+?AP1)P@4Kyoe(7y`4GFPdDEE`iQ(8x3;(7i{9@baz|Kv}o?Ozf16jiQWf$>NNJ0E7{~byb?P4{!}IVXm;b~(p+tj zXd3~jp~H1+9&X6ElDQie!;81$ZF27 zW;#(8kHY8*f<{k62E;lrQU5I?HI+M_#Tn~?^<^4K<j3yqPbZv)NhoRala`SY*&H&+{gRA?l*Zh* zxsDpn3XeQw;O2H-Ne0|pzJiQQkWyY$Z2iTp&F*~g9386<_e|6EOeI0$U2m(tk0O2d z)u-W#*493lrqV)u-cNAg4-1v?_vOwZy=RxcmbKAR*!g^@JF3>h)y&zU=LzsBf$M;)<{_aIPw{|jeSJM@XrXB>tc?9$ zhm(wD=sRl^I{4aHfe>NHD~{k+UOw2H(q&Bu$*iQTl9*!o;`uWU^C7M#e+-)NuJ$)S z4a~1F^Yh&>1Y#}g{Z-8S-pdW1%6K#63S7c3s&0>8>CTA0S-3Y zE9S4o**JRIN?H1GSWZp-`E8_76%LQO>?K!YGQ^`=Z}}={GGAPXXeEy|^f0lVpq)5a zS=b`nD5WU6x0iw~C7N%&u;zTjPu!+n`uKb9{9RtrHTHZMupEuC?wK%G8LpEjF}o#b z)m5RIYUgVuOW%9Z%d84Y+}}PJ;@u{EzcHwJs9(DAJ0D2ql5n}3^m8}UYj z2vd65rpwrFQH=VOH+aK|F210{UxG@|0|Oq!trSQAH-zWE9IqZcBYPFJF=|4U2kU4fvOvDy=K2_eM! zQVxk_k)}|b9rVSSH<-UgefH9%jh+fyuAEyb>C#!>*Gv; zO|v@7mvA^XUIJ{$f8z7+kpp*X9<+EOYkpn=zca8C@W_UBtnu);$|i#}$;51J9%cwjfZZ&DgC@O20= zUm20oB6d%SbV`5uCX$+)8@u6NJI)In%egI5U5>((D{d``D?SZ8y-*#TAy99u)E{?dSMI( zTyQ~$QRon167?vHh<8fT`+8P#f-6luUFw2C8@YnP^c{S5c|&fg3wZs$HXnYATYrtn zetqZGfIy_Lq+tvBVm_JdMV!{mn850$>&32#(GGP$BWP{=K=9XBgAn&|WhO@_K(8wf z7eMT7Cy*dk|7EQ0`y9t-YUOSPbvV5k6cqHHzOXw=llw?Fs)!!t+vtV_&JTby#Ds0D z%a1XTz>x%8F$epfh~|GdHIHbc2C+mih(SBr2DI%nOgQi@CL^}R8L~Ek5Oug= zA?Z|gUpuROs8fqyzS#t)L;Sg5_GcG(`${8Mh1e7&xy0t^bMEo+&HgK=%W`^DBsvtz zePkAwTb9>*1zBjI8k(ecBd+#Cz8J;pDWKCogzA5NROe0I9w(yN);uw`S^bP7ub_|x zPf@4iTz8dSddA7!rdv_a@%~_elf8{6cv3hy!nmHNMitiQd|oZsz~R2e1EcSjjsHP| zs561h2)kzr*hyLXY|qLM;A-wud}7UNd{z?M6769p8{%YIczCY#-+l`f|JR5fHRG!p zAYaoV`P!JY`s(RxQ7GA>+2Yu33x(|Bv!R6;q^t89!5cgGe88#!db&1JwT(-HxLT|D zI3{jbzc+aj4iAxZk=}8W;+^vJRi2gX;DD=E@u7pQAic9R!*}#Ffo$A4c<$J6$^ZY) zfUvx{$MP_+R=3oolU^}vUFeRMI}_UOAu5z)u=pdXQ$M%9IDZtaV(1QhtG16A{gt3M z_M7I9gMp+=ggJ1ZWOsR8WnE}=n~A3uhg>>Z2ptvmc@#b9^GHh@x$kOJ_-3_40)K`O zEOVyL)8D*+KY(H`gj-Y7L(OJd<6335hl+wCZEnsbKR5S{9yv8N(bZSr#}oOUc(QI< z6qbK(Z6#!L-AL>m%a(YB#ig&DbY(JYgh*6Vk1;TD=LaAeE4n`qjqbXvqX3CxJ$LZh z0Wj>t=H;tZ&qKT!dx=9m8d_0e64vkO&^vM9qHhL~7e*%eaw_o@dLcLI$js|gDW?X;HD zRlI?;LAuGIJc6fxGC032{?`yFVmt|jMh>S_{-8r!1qIZ*qY(S;Gp;5+rGB?pW)gQc z-vZd|4?L~FrKP2Xx3|$1DsAa(6zg*#AygT_hQ7_!Zj4s1l1V1OXQ_c2jOG_my)atl zI}D2txY{ic+iI0zkweZ2I!$=#l9#WZK1%k$+I?iy)Wn*ec&GB+%~_efu#XE3KK`cR zQQ5@v>O(7xr1W>gb8&J#i;F|ggnUTkpib`HSG#qqx_!5470i!<{zF+}bMvZ9jy7B!05A1U~Z1zZ|Gy{62pq9Bt zS3s1K0p|sF`{348!=3)~Cpra5vt%rt9%V{)s_}y(RC;DkFh>*9vuo-KgGKG2PG1BZ zZkA9?Nz<8%(kVZP|5GCjzzZh7ALcv5kAByFYIJ+KjBU*5$9ZW126VcVUwpwEE7RLG zeDKgkm1Q8!CYoood>Mkv(GIR6DT!;k*c4;8Hz$Qot1BB*Tx!!bXSBAzDsi&u&IhQ* z>68u^eU#WL`mp`pl+?RgSPdd9#u{3ffoX2#!@&p7KYdVEgwYTn^UY}_fx%0?Iw{|A5cV;RX&h{dN$8x0BV(K`= z-)2d*8eUffjOR$%%heTTW@U|SYEfl%`&&3&F294jfyWU|+vnO-aD4&)BD2NoW~5Ms z<<)Vw@9CYn`vXhmvilJG2^6*ZrE3x_H3c^~)W?s{0N0c%oRx(jMTgyll!euK;0@-1 zF&)~BeGvu%h;`C=!vr*>T-A<$z96)dfUvJ5Ynq(5(>ESrRlM;7rqvl5A9`X%AuK`k z-#qaLBkIM0QyD2KHxcs+w%YR;e0}+!u-J~Wde<;Xw>L;p{Crm@vxx1GBOH9O z9MdX*7&Aoc-B%S8L$-cwzVeFs_I+<+FR0>dw|ayRVP527{@rYp+nF&9$9?1`IT2A` z)Mu+b;v&sP5$Mv)CU~3~ObAPW!AV_wxHpw^Q<)xUZMaxWk)mxrtzbhl-E`-=i|4%k zZfz<@eQ_w2UDB+{GsJ!eC6U1F;dZHww?FIN9%ZmwHE-Ogf7d1}=#kcIcL%&#TV#Mnm1KuoRFRg}&F428Kab@JenJ;-0wCcA!e6i_9}F65 zEaY_j+p_)@J>dJAbY9@y#fox$%O7%u)Jqgf{n!zp<#LCkcZ~PobaH;4K3y%Dc1csT zIMLj+cwX#$t$Bg3A!B#vhwj`*g!gmDxOa(C@ldw9UKEw&Y$5&p-@o_nBL_rpAEn`H zC(h~8Q~Tjz?Yr%@0EP!uwp*m7wNOPR@VVaD z?leZ|}oJWk88xRI;)`oFj z^X|K^E!Rh(SMKd$tDc@&ooiNqzCRl5VvK0~cDJL%mDbPz?sQtJRnS0~9~82m8!AH* zdq*ZCr0I55A_|M%PTRidzKC77?3-+}vG+{1V#}G$=@jDbxOQ?o<*=zUd4*6SYkwU? zk*b!Lo14n@u+B%~`-(A_cAj$+?F9@>8lK&roaX6c<@`05$;L|!@*Aa&u?65vnEV&P zI1Eu{+G(jNCA3A0Uy^|438QjCA?YGVB%pcy=BvKRb2`t04rRl| zN)WsM^5aH5Zxa8W(t{bx?k zkGf#;3Jb-dr;{HBq$KK}pB@f?N|BMJjI`X#JvFzk7*GdKXDUrZr|gC}%H=hY79RO` zd0AP}V{m7uYXMR5J>LBppM;&jpxyQ~VI7It4a&ScBVx_9nJQB;+NMilxaBYDAgj4D zny#cc$GD~&GaQbu>D-OeZ2~D;YFzG|k;LN#-dwH+F=3RnHf2)Y?%SI*6hk)1b(Kw? zHAAfJ`A~P>t7248r{4_=;tv*6hM*bL8+4=XUMt4nyc2xeK5R@P3<1VMCha;=`_{X2 zuZf+V@#Oe;RI!K#4g}#pqE0Dj&E)>q)@*=Y7O<2)C$3Y4-8k5PmCW@RAWniGa9z_y zyA@7+oJ9;|{`fVoqWrYSK#TI??%H_fB*6*c))2nk!s)f*H&@Tu1X-~Y0)K{&|Bg6$8N6@Yf-h)Mi2<`; zuNeGSfI-b244MoX7!?0Ii2Q*^*5x;0N!8@K1zun8y?QEK&IH}k_TveZK)mSjZ%vU! zYUGvYAx_Ne7tmaC4CkhoR1;pKKBTwp@>P>?%ot-8W9{!=|AqS4tXt zL{C!`mSw^%r^&#lPr=)OKTJ#@)scKNf!8xRDO6!qgc{vH*s zH=5Uz&1l2!_a`I))pb039j3>bbeYf_702f^OlfK^yonQpM@LBt*D?$|iH+)oioF5I z%nGfo2h-O6gQZF}o}RoER8;9eWTD{ACeBQ5;|$gxQJR88dQ z-~f(Q?PH>pX2@wmACZVVctaIX`K!mkEHNQK<~RHX)=R4Kx#??NLVWNVI5oRrpy)=z zXr?z6%++u-BqQ3{nHsKd2Kv&QUrtR5FF*fvR(ip0o2=yXD<8$?X%%PkJ+PljZ&(DO zONFlkPKQax)RAATpfccA)O!iCHaj@`p0~VA0OUfq2UxN* zUU*2)kD+5H?@cl4D$kDvoBJ!S{h^kd`WJY9&rP~N z@Nh50-`HKTu{jmagfw!twI5{|PA$DU6;ZC{`P$YO(~2xK79CYdVW8jpe24y4@>SNC zS3iTu)Jo*=(vSM|g5jm$za$v`j%@Y_hKropi&W};Bol?piUzwLsOrVO5^H=i6LtlQUWSj?wI0Gd<_ zo}M${8H?Sblhqe{#pd;_y* z&pH{Gcb1o1RvJawtT))>oHq(`b2G~gh7y##Oab&KL$Mf~Z|#9xrz{y)aPDk`omT{l7!2n5&Q?hqijySsaEE!;H_+}+*XT@&2hHCW;9 zeiys<-hH}HpB{INJX94U4^?Zfx&BY*g&xE;p%>2I4E;a&CKj;_*Lo+#&7WS`HDo& z2ML)M@!Zd8HDej%R)|Nd3 z9j$(Frn84R@D(by-Fd7&y#~|>*(4~dLv-NO6`DKj@ zF}pvPRz<*wcHb8}itn0jtFGG;dvSBq0G_{x61YkcP(ZrEV+YZq7^-_BO+0;$MEZMq z5hF&>eGhpTb2`TpilC+|Y&G=vM)!{wH27or(#(6S?P!|K4xw5ux8)c8q`@)Ub-uxE z`Py99A13_IreLk6`hJ;SraE%xX*R=|_KPK44HSE3zYL&iSD@Mm3*6v7E%(FYi=pcB z@mNaMyq0)cBY7#wo9UdKz16@iV$;($k~+^-1bHnpN={c2StqB0kBWB_;+`)vRIDV& ztozw&xyj2Y>^jxQI}8_LD7O1H@O9}Y@;O$SdIS^{>F#6)NES z-n4RBZm;JVM=EzZFYe<#w7e`7BO4%sU3A9}N|;pH9Jf~QZWdP8SZ}~xP(d#XB%n^y zcu$Pv6tDhx`{rTywD(xnAaB`*(7k`lR`tQ5w}rGoxts_fw{!Uq@Fn>I9rmWY{9qb? zDR^EVLD~JOrz()mIy(+!1R@D1UYSvPc|Bc#liM@XpC1HKyf0@Kak7AH?0Bwtd|^X_ zfWiGP(ly53%)pEzdD`KNP-|eInTb))C9tk}tlL9807mP~&LU7;yld*UdXnDu%ocE! z=Dhq^Yl&M3;b}Cgg{MQb&e{5S(`&nX61gG9bKL=LNnU2-kt6LfL`6@ZA|PTscwk^$ zjC1hewIk6hUJayl`~RQYLcc*-R#mW@*g!#5QBYBF+R}+tu8k2qyv{ukp3Wf{7%1d; zLEydL&uy$wHMx7R)G;$>&z}y=dw_zx7?obm?0gn3JW_W<-mc`$Qpmh7B^G__oKpf%9r5gIWrZc+o^}p@TKU*Pd)>d)57iI*ajpeJ&)uSz>vO&pv51^ZR z@nP>DZ+Eqi+j*Pk7Z<})?_+l;{8}@Ilbjh03=PS7Q5@)FRUEL~B{0V1e5T@Zh6b0^(jj^` zDa|Qy{A|W`xVZs8Y77us#EC=ql`g#W$8j^v5wz#M#99K$D2(Gl>^O3`;3Uy;EJ}v8dC0&|*E_f-HQd!XhD);Vy zA$-Cg*FAGY67vviCdI5j=TdscOpomT+Y7`*GM1N9^Ga-M!eBH$&MRd%8NB+8me%<} zcD9S?4;uY{4#l<%bV2`Mxx1_s?YJoO?{1;#zC{PW#@x7@3@;Z7N0-nO{sbCxlKhAk zA2&JO!bd?}{F`~9CH6#gCE#i)NxyKW1!`t8`I{H23hki0C~!9U_WXV_$aqy5SiZS}Cn)SAV~aar6YJaNf+*8$7IJ>q9pg+K z&iCWtX5+YKgjC`d1vvg(YL;Sf+UF+Hay6r^+GD%sPWEq@&vQ;>wYkU*l;eOnT10vv z{+Bpx74zLm!gas&S|LFeO7iaKTSplfe>#+M%Vg%`oKdb~4-948nW>i0iVFCsaB8H= zR3DMr-Y&CLw*$sqVRQ4E)_Ken>5i^}UM-|>r!(uWE^%%CAz8mqCeQ}F8MW{L@c}iO z66q=vsd z7WW8scql0-BorkRzC`6&Im!R=Uuqm)M8Gu+i^0m~Y+?yrq#$b;U5G!%u}395KP2Yn zdpPXes3^p}+58WJj^^6iDEc=~wcby&^Qx5Wn$+)k0d1A{MXjNbXkPMMrjn?RRj-;R zf{IRx)|Rlw#`mlK2pMRPc(Pdu(y$}SO>LK0f4!i(Ca)*VDew-1+|GK|sOT{U#Zyr{ zV117Rdk*T)FG(HsJz%ZIsMRiGBcfTP=gt4R$_2DuthRY_0EM`i`1ES=#8^}HY2Cpngfb8(e7v~WEnu|_zssH(KC0#-hYo?Iewd&;h zGRwVXDmgwL?cKZg1>p_ip^$Ks#};EvyfBKv=oZIbgmyHKZvd?!whX*k=35Q4jLcM6wBcrDS<^@MDqVD+1~h z1_sO9AN4oRKyl5jEgaL;Y!T`6zj%44YQ+IWr{wbjvwI3xKWI28 zJOrj+JQ-XN9M0y1nGRdco4wa+Myl6|e94E zOy6Jry$?17yzGOb#&)Ogi&aJ9Gl}$G{jYWTHHHTmlP?y`MvF|#DwTM$v|i*co}bHq zTp^n$Rg=gg5%1C~?80I$=TC?1ydn1BC1?a%5!vkPVu9M!FQGUVt`v&zq8>d@FK~Mzam5YAC^sE$}3@ zf!!iysM#6rvq7(i%b)YEV8BIJTR63@$N2W?(cDLB$$=TP_oiicBCD{ZxbmJq9l`?h ze!abyyUuZ%Hc&pDb!xu5n+@wsGkC{cEH+3%#x@|QU@Yyt`TBJzk5vY)Wpe?Le4dVzEekU;#>$FDw1@Pit+dC7cB2c#x6$Pj$0EK>Hr1^k8a#NoonAT)T$a^o z$4PUYzT)VtwIA7RNHYWN|MA-bn<$&aK49!HS?)Qsd*btJqFOk+oMEK#14a$G<~}RL za8q8dr_Do9i}tj`C&t+e`m3EpZJC^-E!Fty*!t0$>TOYo$+KPLWv`xa93fE4qe_T| z=*roHH3MB)_I6oAPRN7mmoVJ7Sj7GhV2Dk2qE+Hssdtsa#zu+CJm{aCHlf+-Zk*+B z6cSlhuU6crGDnH_n0E7#;XT|-z$Ff{aDQ<VmDhH^I(AQ^nHIb=9*4x$D;5Jz{k{TE#7HP7dY}PZGiWE z;B6#Wlm>7;++FM$@+kKcz(AYvp|!kF@_5= z!D76kOTpeQk80<~feo=fC_q$QO8D*;zsbI39vyg^X8R=Ih3zsHc&wdm7Q0mhl_)YQ zp(VVg`CjfmZG*h1m*oul@b>{&_Me0FTPWmh{juDb&=_aCw+8u#TOvENp3Eklqqkk^ z9^#eRIHuny0rB$Rpy{7)zexdtxh(;;(;}YGH##-=;I~7P0+N-fS&B9uysuNm+eKI# zox$@{bxw=(Rqo88*o;$q9_Iq*SFuJ(Y8^rbT21C!DHiFhip~v{b2>)egolf&x%~4m zhs5@kz-lQs6&jPj4RZF<)p3j?DEQyYZ}T51y2MiTgN+UX>X#K2xsZb@3q zQe(0BzJ)_()j_rlc*g#wvvhA^SQO_c86b3B5+GG>6MdOnyY=}V2MRU!q92yi`?#t6 z-1xKlNDHuUA?gXGuh60XhMmT0Z%_=n6_Vlwb8l4@qFe)m%JS4XzZZDa%XP$PM`{bC zOg{n?^}m7CKi?Xo1M1!9p7Qw^rT~0Xj_Ooa&@O(Nu-uzZ7*nHGONe5&*IcmeHG1Lr znoM<175?w9j`_V_KcU_e@eYVJG^H%L4GfGJ(0Rl8LVTF`&b3_P*FV&jB%Yg_d*EL7 zGmGm~fHZAGf1ZnCLbrWJ$wJGki16oXI^f=6DKR3Y+2GCl;?6c|r{=0=KoA!I371Vd z&uSOcS%+FhTGQ9}WpA(OMPt;k9l@}UCQN@+^U>Z$ok3WB2Wp5+A|)lIiQE#(yhodsBxY_= zZqHo`AO@2FU~7!T_?UQBfSwBqft-z!95ka6f!8s-n#Q_pjd*(h;T>C7SxHGsSQXi>;#^U8&X=xaRKW zt@}})nIj!LX*PFFbXd0Ke?|THG5h{FO|mVND#-Toy1h{PdOQXxCNfd5)9-@R^U56h ztydlq9unC7$Rqx&hf6A7sf~A@lnLpSMT{ZQsvI<-IrxM4uWj%yhNK0G5^nL?4sP?V2hArKo;wTLeum z=mn+n)hr*~sNSVI&?4{K4;PuI+5Y4RiFMDxf`c)}5{omm&*!^*lVEvn*D>UxNhNhI zEFqdmUys)N3ldyZ&0Wq(_sSi0i{qvb9GMrgX z^YkKOMVZ6$2+4bQJG%GrwTRob;OiZq5f+BDoIk1t7z}5z3yn{SZj=T+5VZ&F#8GSK z`}l&l76tt#Ysi_CNHOa^ZEKVIMN1Iie64SolLCvHx}N;>sJZ@$K%u9TVR*;j3JfB5 zZfo?Qc(tHcdYcuzfF!djgW(!eZK#G}NlWW;g%*xpb-E~;5Isr2X2o!Ir$=CR&}E@i2{n;`{w>OVPcFJXxB z?AJgy`6?3;?0qQmQhX%&?p}wjG9Nb@|vEsb{aWlHDs^WG$P%vW$h; zrMZRn=3{Wsl*-TGbpJ2##*nWQd5)jQ-cV3BNW@1g%PO6THM!_QE1nL%`g;!d0t;r8 z=EM0Chvhl6=E>-n_ithw-@Y+EXVb;{^w;wEOHTjCh*$#)fQ{Odb7Oe^X?~de<0nbx zuq?`hTyc*4T}eKZy?55@_6L+#JcKLLrVLQ^jqbf#6h@<((WGI8)ar-3j0+^Li)=QV zWI#q|Y)G9%?NTD2QDMYcpf4Xtl3gss-NO-6%6ip468yZg*m7ZWV(DJ6kWUKO<+?W| zU$)(*x{5$G6pKee=nPCKsi^3SC<6s#==_QoFXZ=kP>a$rVR<&xW$8!%{JF%3@Q#oD z8Y=?`b5U{R2l{8Gb2_AR6%X4(eIn7t5|*5EZ#R95&0<$Gl4W0sB<%v6EiaSivR5R~ zvh;XAS#CTN(tjZNC9kXm_8737LLBnLY)k2~H1Y_(qSTS=W&m74GnT6BI`VT5_tCT{ zlsZf%9me~Km=Sw>z$snqAkjLVbGVoxTJ)vo?0MwLLOpRdJ1jE>5{?Wp#&k%2I& zogZ2LU>>wqQw8vGV#toin$-X}r*`j7lB@+jlQsiq8IcU1E36AJ%7=&Jhqq$h3KA0?vYW04j>Vx%6<0Gk z6wiPv$^9nx$PAyv<4W_=pErBohx;x(-BJB{=QJjxOLf=|wsv-Amwt?<=%7uof72nv z*Y7dlZKeYxir#dy$@)xV9dY0K#^E=WPV!JdHhg%UXnY+WqKtdJL+A1rM*R;kHO7G&hq2FGTxoBdhM z)QgU?X{zW_xVV;|JJy(pV~m9iQ3F5F_m|Hz!3NGJ`l_C4>YD8Q#w6ozkMPwOF8nz} zxiH52*zk!K_HahXnHI^C0t~vf?wkDe_D)W~2|ZOrJU?4FJkn=)N@6uGPHB;zfFmY$ z`!$h{0w~c*dLMo|%*S^#p38i$sxwQ40D8!!>V#)x6sXIA(UCbmq{K5&aDn?vg<-KF22qHb&J zlM0C`IG4{1)$ek?X)ShvzuE~p$UM>Qxs<7&IBL8I-fJ$PRZhSB$kh%w>SNJm0uho~ zB#0LrEuZ}E+cAAar_09e8Lz8k3ExNiya!o0knevClun;e6gQ;UGc9nw<=Hk}8NEqCRX z?V^aShlA`PyN;B@zt+A_2 zeBPRvUeZ=ql0rR^HTW|@td&b;Y3?$C`?E&`-lC9x{R1LBU#JbCf;KVDh0|pwcSO)i zQ!r6iQ+$3t;xZieQg|n(um}^QP>chB0fe}?xN3rXgBuSH839A^^lIi03z^%R=g$K| zPFT9MZHaE6yZd`tQj6_8Okp`ItB4thxc{)K|Cc?#GzN$*Q=fEw?t+&(fyoyhqoLQ3 zj1v2bl5Xu5i~q zB#!FcK$q=DfsmjdaW%Y%Sk7Z>BxO*k;);@2?U)XaYU4Wrrd}+mGZ2{qL7e35a5|1C zWU*=5loofYbTR8JiA)kzooJ6DwYlJ@AxnwvbWr6bon0Qyhd$lkGQX!aq|Z!sXN(7O zt1!E28}zb|+3Xe!fpr33Z_=MV1PQ(|Fe4C8fia{87t=<&CDJmq?j9G|I=jSnlx{_C zlo8fHVNRqAo$I$zpZ`9`#l{e;JnU3d+SS$>cjm7gC-g@b@F(w;{tOWvHILwc&k^aq zejs>>JHiD9oVFJ*593#fI*ZB?nz(0`Y=F#um7(hWS)=G#QnAp@E7(`!JxE|5{KGz zfz8<-4^Ho6cx13Sp8ke0|Ei(=3tBOb{bLi(pT_gEszR5N2{1xB9V1y|xm2<*6@zNf z_m;DySH(nHUcrOiPn(Ku_3|kem8L#6N&9Zs)zukaTPI-d$h7e>I8p@$JRj%x=|Ga4 zoE)~6F|@TRz@ODsf}>Uvi+dnOal>;&3~~~)7nV6-#Al;V=k4x(E~Vs_fgp*V!5g-H zn@fmVkNkkK3vcQ~ymVGQ`p5XrmBeJUYwa#$0_2iGmrD^jr1n8&Pz5}`8m008(oAyQ zk-qeo+poYN8~t-sZ3WL$JNYmN%(b{}0bO>1SZxd@Fo=#|cN)9_S0 z=YGJLVB3#&r}fuOJz57}k;1=zsst0fw^pW0Xg;3>4&r5dE;H8_5Y}Bs5$AB2nYFR8 z-DN<<3k+0gV0JAs9VRL9nGc#yp8GMM`5tOLY4MVDG#&h{kctWkq0UJdNxE3Km^G)~ z37VrPZD#Y9WNo5-t&+!P0Lr5*OmEa``WDrrS_5iOfQQw29bHi=%{JZrlA793+Gh0O z0spc@p8bX!BYKI>H3`w##N^Ikdrpd?oonch95u&;WS<})Iv!RZi!e(P;WX7?JSD+t zIk{UeOzVJLN}|i0VCs09P&QOhU(@IAxaB$UY(j11Bljsse&T`W`naot@ePH?6^&Yz zcNoJDAedCNFF8oM;@}U5ozXHRns{-JVVY9yF$s4-PQ&Y*sorM8|6{J@{#Slc;|J9c z(kynmQ+;J>r52v`Sk!;jZ~pV;`QJqRUMZAC(DmSmbpyFF|x3Qe%`o=Y7IAcH70<|yaI{-=U6<4dQj;>90 z6^Ht0Ar;djiHao!JYm(k!8RINTvat&?SAyFGaJQmXi?}BICaZrMsVxv9UPSRZ3qnw z%uC}$6yexnoJvYYCt4Wh$Zll!e0=Oh(Q(n7_n>nvXG`|r<>V%cAsV84(_ucnKpm7> zaZ$alI;0dje0s<3-f_AeUg|Mp^sMQ)WGY*tosJ_0?|3U#*Ujbb?N;9XV?GBeTe2T< zPlK;K*h#7fioko){2^ft82pIBIqn4%XtSEK0N+!pqJUK@i(6U1lHhL=oVl)G4Z85x z7CV^biluRKN=Tiee0;Mb7u*Mul9mKh;oEiyP5lY75IafBeL4#K{NB@fA=icysUnv7 z9wOVSCwa^W@If*%T~@m5YxXBU+k)obT^W+$oO~Y21Gk3NFl@)hb2+c+Eetd7!M)x8 z&zJQdkG-)2NGi>yBz+pkbsyP1V(_#X(`0|N(M~<>0~|3?mn09*|-c z6e*Tkpe5(rk?4$8~G?j*ad#$qzS@O)Rc74v53kr<{*dofPV@!U*$qAh^e$ z2>kR6RRv~lRKuRRtLRLy7#NJ+uaz%*Qnozr_Z2* zI)RYNX~A(W^pa5PInVL7)V}86+rxPpvXbYL5+w)-=r)ZklE>l2=?(%h<1P^U zRYAY~uB{Pj-*j(MHo8E^G*fKmv!We7w2qwSR^pM9Y0{bTG{6P}R;2yM+SQ*c`BAL; zS%yFqEB}!Fnp{VUFSMQv>Xhu7^E8dv8wUYWG(px@+UD%TCf7)EPX|DEMNI$T%yu}K z(<)x5sHvCY$0xObtOf#C@i(tD%U&HlBiH<-D z2DU{;h1fxShpj}Cs}=wAPxk`GByo|>^LPQl1qLA*v{VF42wnY-4KG=CHO$^OoF>P= z*Yt>V#2MjiPO-!kEN6P~5DhQ!pf_ptHP$z%b0@0gV4u}Ewcw>~U4ogK-|M%a^x#;R z+j#l}8?NV$JiLRFydlL`WoP#aby`-hbzpFBx8W>Zu2AHBZgvb-*5$vAeE(nfr{Tz- zI1Ue$I-PI|5!wRk^@mJ?q?A-t;M-k#m%Bt|^2Bb_q}&RI#Fq{MPL_$@)#s}y9UOym zaOy?#YI`YIrRD+f!{z%zx94L_T4s@^y9IElI^vPobKehgkLf&Nt5zd>Si62|x57o= zk$%3vRwmpLEQpSJr9Wc#4Kd>EK&)3wD_{N&arG+FHep&@OPLDaM?0pci-W z8j*yFy72z^UbMk*rE^u^*b)T=rSor{7OLFG^(gxDl1~e$)*4PK1$P&Q_N_iRC^`W? zV$+KTsE7Ssjt;zmilbh4Emvh`I64Qz<)frHyER`b5y6MT=Y|tafHubQJ3)GAe^9f3 zBy$waqnK|vkZcUW){zeK4i4aGo;8X6qVKiOPUZKaB-i1WKhYt)4*nv{aQj1&E9rW8 zSlv-|=`G`Ej^KeR2#D4e?Fc@-Jv#RtoN|{Zt|&0sPWz$MJ##fvh%K*2?VIWo!~sOY z_`O*i+n)|uakZ)Lq&R;Nl|#065t_(+!}EXLs$z6nb@p-61M0Mtc@5_?qQH9Su&g{m z{bf!^1}dr|^ekdi&uOx!Gu0Bin90KrZ<2uh&ql~yiS@**iL{NL^g{6Al@r|BtB`C1 z+})PcNc*f9xaNIRKY4$g%+I_u7X8i?&3HWPcz0(U>0)qOE8ny2{xk02WdZ)# zn=6_t1xMWNaLGPr}6RJZoAehE7pb+la$PUmrk8&*`})V>o%A+ zo}5l2o`&vXUz?lv?Cg^FiSz!s^^tbEJeTUG`FLd>bt~eJCrBM6dMtCDjh<&T(wBhB z&#Ew_Na@X2I5j(Z{$bd$=mcbVKXuas3WZ=X^&>6P@c8mxeIRitm3-rPh$xKI16zGU zF)>y*G`L@1uBa)m%R~Gg;fc!c{KR-r?B*54*Yi2xG*rh5nUT6#no`R{l`-NnlS`5n zgA07k+Vk{IK3HK%zUrr+1kA0(Rg{`$NWbY3I9gr8Su?N$Hfv7ZEWmO_9I~Jmv3M_)BH+fLr z?1J_A0E{i-e%0L>;}fsZP1E1qnd9THaks1%jc(CZ@fx|8U~vj5fBI2ywT{q!Z;-L4 zsb@ruU41(`yne&I$ z7L{|_t3D2q2vmL0GWfy{i~`CDMb+rLIv5s091*q3o*|3~J}!{=D%XjI?;{H>`MJJ#W}ktD3@-Sx4c)=Juo{ed_L zi8m!+x(hS)!S7)`Sh@(lM6Mq4hzM&xJNz-J3u(!5wKV$!P6NL~;sN;;J*h7HFf5Kl z=Hq?z^l^Xt{W2|#{iR;yvR?S3(D1(LtwE!!V=dR(6>GhW^pzbcli`p|tws+BRW;Bi z&taYW1yfb<{+#UbIB>v!EeT_Qs8?Hzs>j%aZ*WEgo)uS4SSs6F3nX zFDvQYT52Lr&fr7ca4&G4vnPsIF30wk|2u@D-1O0m<%2h#CqMVLk z!OYSHxtxSE17Pj+-M@Js|1}q$#Neg#z}NPa3)aK3QIO!MH_>G|yb%;2k&-2%+NBF? zBJ^$maLfb2w@HumnX~7cr^c@~o8QhN`W=~0X-H@MyKM=+PbT|Nq;l>X-fg?4C+$rg z<1$+`ctm&GPoERH-(OV}P%`BaN~W@D`I=9oMXg$nrZ)4eQfU&G(b5;4f8ciQfQnM}}BMbkH$ioyOYVXI;MNHB>+_#dI=dLZAtut zN+s0^M5v?II+?r!3@eH2``cM{Z^uZ6F7La8L!1z&hHxCt9<>`iFq=C$OHky+LsJ8! zlq$aQSU%og<*4T^6+{93D?0!Ks1D$RPxof{?-547GydRnPY$gOyBh8?w&($Ps&c5w zrI^)r@QjD3Xl2us_Zw_DT$5u)3Ibd@=bl}Daxr5=ZEai%a&kqSJhnX_PN-9Bzdb>p z9JH=^_592zp@p%zz-<|I@XjKjB zH4dFjD0OxRefVN0SN-0WF|VXrQU;vF2gKd0aHdDds%GmoXPY3u3f_>++GHKMQtT(m z$afShRNc^24j?UEQ!-b4e}-{|F8g+UpI_R>fp2eME3$sgbr-_cDHP@g`4Ww){BTCXmhVNm zt`eN=F=)k;$D--|*`)0hh$S_}i}Z?SbnK_7D$y5!mx``rHD8O*MJtZo+#_{lyfkJp~< z1VE_-qX_vo=4wI1HSO9rP;Mo3vTJ@{au>MF#Ls!dH&uaB9?hXX1-{p}ICHw&qo@1Q zRwDI7L*jlU7YD%Qcpw^%j}k z;T5(^gU@D~dij+lrPz+`&r>~u=__%*U|kT4K$F{tqqYqtwJP&a#HzpqY9gY5Jn2*( z;M83PXT|6T0-^m8-MbCa39`h_=wN?d(PVZr3ebF8GH17@!a4&&-1Vl>QchsD;^Q>P z1f)buTuQS)LEJOtFk4ocS3eW?e(8=TNs;C?gqnxf|3i=Ui?PSw-nH6O=- zSb+VhO@6&95ShJ9t^=and)EFw2G|UykgkYKPgaEXBJ=JC-HJV|XK@>!s7%|PCs^d| z*U8K9&5xS&-n+N!a;Ac<`p_7v6j}-BW0;aUD6#7=!17_Z1?m^KP7(0nraWP z)kHP9d%8BDHA%z}lBOInAI!3*gv#{t@Ov^-6=3xo+&rx@?*B+FN=+YTO(z}yrRi+EMBeU$3&4cN zRA>mydp-2FKn@E0&SkzuSO=UTWR@*w%aa{J4hFR5XOUmh1iQP7S{mohgwHJ|l?`l{ z!?lf_p5modHj%>pX*sUtgYB&4EvYpH%;cR*2(=8h)FQ?zCgA8e-Z`hkw+XqqAzWw&U{`lnlwBYE$vw~)t{R7deCyrz`)?8HFIw~`=|h8nMGh1OwCSy zXxB9DGT8uI>ElDgv>i&U7KCM_mUP*)=~R;F6ythV=)YS?iYwRK66R|yu7XFJcKlb> zW`z=r$;(DAL;5<~%%81V*GLZlY4{pse!*c!K-Ym}rUxey6^<#rsO$YuAraCeu#t)- zGP^cu61+cu>aBq@I>xL2DyBXYrb!z%c2#ep-pq`Opf8#BrKf{GNNL86)vq%<@RgJ$ zQcu`7TI$0~QPh3<#Y_LvpHY`$74szP)fHgmuiz z3u_(*&xQhhU4j5~|8{IBylX0D4`buLyndw6(*Fr(Oq$c~@?L-WVQzCR&YC#9%-Wd4 zG8Mfd6O`DC%xtO5PP3M-tiMZLTKAyV2>61FD)bQjuF!i0n9-*D1CC?iU-yACzJ z96x`5O8e)V$RCnv2YaTYDd87JD=E9c6s07_?y5y;YCr$YVX0h|A+I7>10f4b7T;|6 zHjqVHfC{NMoanSqIk~YJ9Rg?*Dr*c{+f4cdTZ9TWJZ%*}$_IF=o`8&dAjZY!a*%Tu zkWY#5Dfp+-1W`(^+Xd5aKdrpF{H3pcFGA1qF&eFU>8PO!+OhT3j0xEsBxZ+{gkGU# z$8xzRCv?f*j^%&e=l}Em=dmRk1F-E@9}yv8u$ISG`NbmIld#}rgx+$++J{(@^Qq&9 z4MqDKy&f1v+DlrMiUdTJZ%jHJB3qkV54SKb=Rn>=Wn$5yILvRN+6d9t-(Swb0k-vG zLVG7xIV}?qrBP1xe;J9tQA;;%iTHGRI&g)dse1Du2qXp0PO^jNaH>?P^f$r5##MpD`64%Sj!cf}^ z1b=9dUTTmv|Q^C+>)ej-Zu_Lb5r@uIGq+S zW?Jr9tIuEc3CK{!$aEq+{0MwvqoXCUxZ7f-9tFR;DwtiMVy}-VQ`F2pi7+jXD=qch z`P;w!KbPJguYr2O=cQZh)_Su>ww4d?R|Vi;6Q?xbroq;&HxucxKMzlPk20H&=tlyH zNb@J6rCUolx}2SA40u(rwzkpa-m|}kPwrS#NT2nUkCg%Jr)DV$0XKGz3xj&WWu?TfMFoo`lFj@zB;=G|d8+HMN!mxolt3!Hxgsm}3Z&ueJ+>X#wQ>W!D@ zv6|%be5=s(#h;O{6q(}vqVN7Jvz5x!X1Zi3c~aXLrG>DA7>D92lEVCErjNEYkA5|| zwT0Sj3vF#Bw@q-py5Xj1I%yi)b#3mR+_+*Ppkrh@wbalvDJX-P#1FV?_i3TcTYNbI7^vx&l15fp>NVId*ZV|!h`l)DY_7OA+n zI7St+l(AX{&eJ~5J-A8=)N*4>lzw#)#Gu5RV|^6em}BzV<<9q?cKFXCD~b@+7DwyV z+$hs%FTomU7Ea=8@CnteXOqE@R(fwe-eS3s={>>qq|97*Q2-ByC0sj(U5yk-$R zd)Nn55Bc?~r6jbt4;ROhqg8!W1Oy6$V#_R3yUBoIsqMiA<8al}XQZN@DRBcn+!Bd2 zBx}Cfl4)yNE2M0gdS23FV(O=crGIwY2Idb=Iyp{|!6?`Cgmx3~*@0ZJ%^m#2p@ z?Lmp;zp_Jn;=gmz(ur=T41cJali=QR(sMo%2veOK=_FsGMGE?m=rY`HZf+J<z=Y8Yn4LQJ%QGL-zgYOV=mLj}Bu~)le?6US-eM#T@rg~S0GR#J z1&o-JIN%h(7-bn<5c9-Kk0g*0-D~!VD0Cp?7y2*v>7RcxR(Q!YQfTRIt#fv4CjQY2 znxqmkB|{f$0Z%L%G;KPM%n0g*c0J@e?{0BPxSzH9T=pwdJx(qA@&LV zf~eF{qUV2QhfnE0KuOWR_-=c3`Z~Qy%2mbcmBBV@#kY#8GV|w`Lr2Q9cJ5B_Q{nkU zGJQ~^c=ZgyyJyeIPku##nVi>0P2~DrpA!)-c3Lrr-(Yt zOEzEUfubHq@5PVe<~i9%M=Xx6Pn}?|ym;~;qPlERocEbdHTeF298P5D5O`f%8}0!? zq0!IihmaVs^jP{0Zq(6cH6dO%Jp;x<=geyFsl`qg>&}mQuj;7y z=`m?g)SAYMP1V^m^jTq8$uXfgIuMP@S=e3aLR8NAynj;%|1I+DAQ$qCOf|)cCe!Qx zTFd|Ab7Y`rcKz&>i->fUkQBdD@r15If<&J~&w%4C{W&r*1_^t3@i;y5I=>&~LE?PX z`4V~W=GA@g$ViyW<&K0_TJG+`rO4fuXSEEMq8Bw+qXY$m4%1M9a6POYE5XOawXY%c zYId}1d}##Dv$uoHJ4zSW>mhB%co8VC(+D|~M|^~3RHYs9yBZCrvG4zMNdGH0{cj(h zC4T4U>SeHJVQ<#$8BmE>3)zCh2y;7UWx&z@YCC8wwEDah_sjh8t(w9{a|6rdr1VAJ zZE)P=ZZ+D@D8_lA!FkVAjkUXt4ZV?Ho{x{fLYo;bVA2$i6WyY6;cT+c5y3ymkSMa3 zhJ}_K(S2G92+9perrT6o3Ow-r-oLs$#>0dE^VxcEc~ig1os@S7?Za&=V&WPy+s*$K zzWL|l%FCPo6`uyz3iJq%u4THX=&c<+gg#53)h$)_E;#))ea6c#ovhx&;PQlac|+BG zxsSwGJPXQ9b%h=ClVmr(UimTAB#2amjU_NLB6WK+yWAjidJ1K?(`UWVV31E0IiNg| zqob)xf|9sq-cC!!go38(cKhf~O2Zo@-G7@xeROrmUi180R`Yg7w>wBSRc*RZf!uNN zgD;^??DroxIL8M&JX%>pG_=|OUu#F=kG0cw!fgyzp6rK@Si|e&^&3>iKmnFDON?l1 z;&x(xgPUouznW}l#w)dI4@%!)o6JEaiwxj^sz~jvj|$Wk6t_;UQOW916uV%Gs$LWe zQ5t-FuPi+ac?pRUsz8^sDHAqZnv^KPItmLEx506KP_q23jlu4EZOeB0{53}Qs%N5R zJoTcg9R>Llq2GfAU1hyVPe-mDC50N=UE~pVp=s_}6X?J5X8+u^`chu`Gz`rnFK|Yz zMTy4BhQz)8)EAQ1{7e#J`Erj&tW8~qL#1;Qu5iav#KaRTgr~z~1DJj6_Cy@n0o?LH zUgOzU+G2%zSgcUQ6N)*LnPK`wUyY&9Lb--gVWDy5Fw;W3tKZ;Ink-wIH2raIdfn#V z7WjXDoAC|lJG^qmarm%uel$Wz+^-=VTzZ&Wu&p6mpD{RYJf!Wp>6$j}+0FCmEpP;b zlPFve3NdN9R-*(nA)%m9txBS7C^r&PwE0uAS_Ci~8GIHGGIvZl9cj(MR4kPXeDk(Q z#yUPm!cb_`GkXIq$JJoJ)+(<3HduKKINjRLpQ!*-f;x$53e@>`t-NUotoZIvLKI?uw=lA=^wb#NmvuE#5 zT-W=0UGLB3-zocli~g_4F7d9`d{Tc&lX~3hnhtqh+R7>9*E0zvXyL5I`LIdCfQmak zY&>9x)ZBGFi$6VNS)T4@)SZsOc$fk$dK*BC(vJa=%z&BfPLChy(vQjcN(&9$X*p81|mp2oDZ*H6J%&)F! zl#uVM2^n|Pot&HmVwZIwp!z%>`nNUT-(&Re_2loc7}(kaN|ROJujTyuxu0NJ3DE1X zzrOh%IMEFvR4RDZzQ0b`wgDN^8yMZ5Ei*-%>$(t|n5<0G_)JJutyCEP?-LUK`(Qk8 z3FiP_uO&(~)qU0I>3@Ez%>VeQ=UW?BI`|5a&%V5)rOx{!Ib&qAPFO%j^%*m8_?FS` zbLOzIY!l+Gy)Bi>H<$k7cJyD@{%_#-_vM()v&V03u7HXDyeG>isc-$wrwb~QGG})D z@YHSBePz|tqCQ`b_^^!g+aV@2kJ6HA#)f1P#bz$ zGJ^Z}&49JxeBE-9#AtD*Yq95{E8hJ6b$sKwEI_?}$8Ok=vPo0oZr%B#dCY$a!>e*^ zEjwLmYxy2eoohYHJ(>sf-4yutO^D*ub(0}0`{RIyV7k=ckGk;VsL!# z`3+{0K_!Qe>3$BfNM3V&k4*2<|N4PhzdEZHaox!~2RNzl9~aaw$?w$0svdbDkFNCo z>0~7&A#{9iuwL6K>2|LaHtvD%O{tf4DwBdO3A*BJ?kCsVG-{4*ejJ!VZnnJ+pWRZv z{^EGs|9qa#p2iBW85bM)GKfrUsglsXSj%5$Fn$LmT$%V3Vojp<{~V$hL&@@qLRY~H z?or-0Z)S0^zUXC=iljg4{=`4#Yon$=O&la4HimvoJ#He5^)e6XuCXBC8Kt{r38|FU|7l%-YPWPWmB* zurXKhv$HT&m)Cy||HsOg$6RO{ln*DhMo6%Pg?JM$|Ht!reerz6k$3?%)}ZdSZi*J0 ze3<`!Sn)>6#6ghj!Lp=QrCq|h%KEzXK&6X|y*>TOnZJ+q>))?k-Z%M{_0>bZ0>`#+ z5njKTTi>LB+sNKaGGCazRzl)ab=ggOT^}wd{#@(2h$mtLoK$lRtYp)NBI2xS;;iuv zqbY(g3h+d;1t%RVnwcB)bH5cZw#IT6udyWYQ^*C!6b>bQYaWd|+P_6vdB3m*^ZPr( zYZG{1;pO!C;{iqGTjECA6E)F2dA}#;uk4%A)q|w=4LR!*<^>mXMN?p|{nQ<3zZu@! zHr(pHRVrije$M6{ES03;(q>2uB_0J>r|La8ytkVIh+n;NVoO;9hM!QGtv4WPxw$p@ z@na=0{iS!@Jlt}}zx;_4|G)kXcet!qNS&jZ`PeP3c0bZ=Y!AXMNY{1o-=9%_+mP{c zu}8VkH7ExQd*i7KZKTPGw?RP6taO3*2?$C_-Sk?z!L}=MP4W?}1~${5s;b84HA|{g z!7~M)O)Y+Et)-)Eym4AL9Z-)Rr^jiFvmIegT(H`nU-H-9{Wa*^u?hV3(P3sWlfM=& z0lncOiQzq!Or>j+9Qprc5B?uJ^!&Z|!wLNP$)>W)mw23aKh%U?yVz0Q!*2bojhv2? z>aUlMw({L25Z1Z$)u9Fo>!t>+8!dw#ZKGoc7J9RD%#M=>(zerIy#A>W|FhY}ap!=J z%=c?R(Vf?CG9R}>tqx2d?Tpnr(yzgM6^)>k&L==4S_VxDiLi3RS@Ya28rjo`G2fkR zmi*;}!S=FEE4nCRG6DwFHv3O|=Y&xR4s2Qj^t^Ukuy>V;6u6>gtFag?XK2z9la$ zO%4x#Rl3L|N#kE>F$pst%#TS@o_qNF9g*SY)z};v-OD67{0$>z@9u9r%URXA9PctX&DSn=#-QSXN{wZ7=QVf0j;2mEPC6B$0$ zME;@lGMdt+_oNv~9r!iC=FZ#)a_Bx*q)g&ORIGIb%$Rq)(!v5Rt*++Le!KSlNh@T! zF(*Zh;xqaqM}1M{U5I(}SA>~%wKdya3bqI$7G24THdpSDJkq}cONFf6XVlLo+2;?t zdynPa0_SH4x*LkSq4%tl+-YMak{VpE0WLSPlP!1du3T3R&bsULPtj2L@l`#GA#c*P zwS~Yi9c~F_j+2Drm$ny4IxW@JXEq<@PYUN-Hsrkgi82=z;MbK$TGNhO4|F1DiI}uy z39_+|dk<6#Ur{EFE3XpC0zC;)p-DLD=!Wjpx*PZUTchgJc| z3{HGGyv*bJfb2q(-v`&fK@K@=nOaCTuK5;LksjJ`7ot?Y)YcA0KIYvc&nREzRQyWI zwm7prX>j(>-3OMCcO!!>SAy?XO2zJ5uANmSn&Zab~_ zh*#ca_&eVFZ}ZkoB-Mb<#=TUGCBDoo6z9wQh}_mbqx9R=@~(t;Tny)X_XDNNrF%9R zXQ3FSqU7nMlY2~3cYz5|oxlU4iZv=rs7y268t$LJi9B%a?bern+TBOK5|F@YCWQMU zpFui@S+Cv?5G*;^t+)OFa&Z8aAOU;lm~>!;^w#)U02qtWn z5~y>FM|_HmQZDHrbg}orF-d{m;v>Y0Ll(h2^}X8^o0LEX#c%?i0JfGU=xbZi!_sGh z$mrcqdX!0RUCd`wOEq_XxdQ*!8UHc-+dFs6vQd**Jk&9m^t4htwoU$(-LpiThv1v< zg#4~*_$g0?Ong%BBx>5|N*e<9y?4C1QIz(QeyBGET9uM9dyclYsdR>dJ?*xLFBl94 zy-S>usk+M9zZ>vstlWcT*CV5p{)ulgx5T*f+9xuPJ){GBuD--8$KB70r(N3NVxLwJuAAN=`gPZR{u~^UP)%=u7O-l0`u{$OS#M1dV1JM zLJQN@^-~r8RQkKiWJhm%6>MiRoe>anB(T*xs83lv-Ym_b4Ee} zBIVp^-YHGcxGTMJ4y#+`72VIk0UbOh^JrW$-k0e#o|N34T%MmFfn_>cI}Nawqs0lL7=3g4 zhn1#duevUkM``qg@*e7ePb&?`l5qHCQQ~z;g+;w!qB)X;IJx~3lE>au0_SRjuf89z z=g!lD@haJ4lYoi8(v7EAZC?C#MSXul{qyCxm*d_d;g|!R$_eip|B*Y=;CAp=VViQa zWa!=zl%Z>yLFD37o`(v}O+M9>iZ3;xFL-nK$DE6?qNVFNiKn^~Sd+UuM8>EGx;B%9~ zm=xvAWKd8{iIPDYSB|NKd}10v81?w{Hkx767L@Xp<(xGFthb3-viGOlyjO+`MC1%k zXyg*Z?UU=;LfJh#vL6r-5-yy2Kc$t! zWmYLywUp;{XE1wyZjI4}E-@|5Fhhu#1~EX7nVC&5gRDBoAC6bf(><;4c!adI340_@ zQn8j=0{Lnd9zI)zA>Q|Ma}6*gq-4%>1xnd?X(L)ko_$>QPE0Qu8z-e<=_Y=#)P9rh zyxFj%o0*Wj;r>3=)#cSd!;IIT*UP?qOPl%GOJLexah$_(h(~neEWZ4)n8KZ0N%bNz zgi;OyU8qyX-1>vsFxss`>s11uwbgiq1%>SCta|*;=JCo$w+8UKDJyiyW~#7jc4TCH ztT7XI1Juj~YBmKa?4OAEJ<+$h!sZqL9ozc`CD8;P0ad^Br=WI1m;Yxdo7pS&?M@n8hH|*#p8n99#PPoqoD6U zh|i1+-q~r+y5=~K;NI=i@I$#!H?Rd8h}@;QvXLv-0>oLN{!Z&BV%#+=?^W4IGda9e zDS@KiR6tc3J!jYAF19r)@Hp75sN)C35CyA$uQhen850m2pj)F z!eNAW%6=++w0!#JfkOH1W}2rxBu@mg+DJGd6u1sa7}dC%BI=awSf8%37-xGw@tTs~_I{oW^yJ`Lf$j?t@U-+O^LzGmZEl)gi`iXj5zn^|l6vPJ|d z@uLvD(lGsFtRd(D_@NOOQSo*jpvM4tV6{^Ucj@{BG&ZM?JtY>IzK0(5{o3qu`S)wn zCDcvVs;b^H3BB0NKce$q;~V{)C^Fj#Y5=kapAt~Y1w>>7M7p8VZYS&g2wRUioBd-GL5A1iKe_h0MHv?ou^kL6wB_vxq#OAe_r%wpQQ(l~ z8FR!aT4O?a%s3(fR$5g2Vu)51u{zG+!|bC^WS|Slr9!-;hiGxLks)12BPhA9kejp^ z#$gyD_(Rx+?NCao@3CGxYYZE0IBvwudP>rDTV8;3>d{PHr6}FVoRauzUm^FTtW0>^ z$Q}jH58XcYm|4F&pwP_5+Y89vvK&-Xw!|ToihppcC zEP=2OijL?$G4rV}q4OIUO|9f)F$rehyfU+fQzpnO=60lgLZ7Qw%T&DxWBnBSejzp0BKGqv2Ti~q5|0%9IkeOd78x9uc+tZD44zYN5 z4#tMkEj%{K(myy8#Qd()n*Cx~37_a(sj?6G1}F(-=nnib*Q1-5+K1vU8%&3U4}1xf=->(eZZ(u{+>J$zifaPp~O?VVfl?L5Sf zOOoI69vZR>m^?!U;_+$XPRfm&TU>(Oj=s<{fuS@NeUG198M8XBf!pOfhu>Gm7moVqIo1P8!W zAVT%(I#{c$aHPh%A$|mjv|Z3c6H2)Ce)vmy^pKk`1V27btr0&TMebfRjR zd_aFlZ%tWr`iN1*;$AoI)TTl5?Z`!eP@Y^iX*5n zI3=&Ra@jz|$SzCRLBLKg=w0i+fzj!#^RzD*B7&*dI5#D z)Y;7N>a`;a^+5=80s=GA{(v%+Ey+%;hHZ(ttt1Dd#U3@P#bG%~c}z#mz7TW(={$(8 zAMzxZjQ&!wJ|dFjjw|ERR=$dFPjW|>jKY$MZDI4ee#9)3Rh)POf(``Hz>^uT5-sTS ztKZ3&1(Q;!tHPxhvd9`Dzl)P>m?`!-4^Md;bR}k8@}5q$7uG_RRAR;}9uw`6ilLRY z$0b?MV(#<;3P-vlaJCa2o~>GCRTY;Ty>#4Rp-f^6BhAfkL{EdpoNyO!J2GT4NU>FBb8my@qI zDXzU3u>Jw0H2*{7_`k1(E>V5E+}709-PeD2tY3YcsIOwX6`g#L(x>sbU4}~WXy!tj zyiM}nKm``BdOHn}NMyc4lp@s#D_D*8-K{FMOGs|DN`mM)5sq5Hkw{-D%5{~Ge4;dl zMwBSA=BCe-fID6;a_ky)g0|z%Y5mwKh>3<~x|T&G-~hreZ9E`r&45;;YJ7{>TmGow z1bwx%x6`>Z9a#FK7_Sm?Y)vOVh`+!_hz{n}=JncbQe&K`0%h*m_Zw9ybCl#a?|*Oa zRcvV>NTGEBk_#hVw*ICZL8Vik@AJ`GdMbg@gV}ZA_nlD0;Gi%GcdYEAp>)CQw=YW< zSw0b3aP~nWzGE7qEf#QNbx&uv?dDm)7|n4aY-MDN>>&_n1NP9;AQX3%D2(BAZW$6<$2GdJ78nLJ3oky{5HGC5_9&2{dmkJ-sktEjIHMn^79sgZQR;!rWk#QqpFi^+*zv{>rEm*bG~Vm0 zxYJ7eQf2L;p#DBh=v({L`*_v-m$*m6_@k_=k+Bx;oEfyR{=SEgn>4B5!N=(ar~u>+ zw=reF%QgSDTfdifBd; z1oihHU5V1_x8X&sJ3HKNIY3sZ^|pQ3rdh#FHcqMU;l7!?J(xg~UPTADa^;fORut4} zW9RYP9_k^WkQu!n%?5EjWlNgiZDMz?We-R6ma6+wczcbEzs9 z78f5!cVsNJ$CDYh1zO&acrxYgI|X$JsOmN`tDfQ3hG#;mZ3bwRmy6KK(S@2`_C!hD z4ab@YTikN9m;AytikU%#gB`Avr^!)2bYp1nc~8Zhd2d9-G1Jin)+fIZS9c%kD@J%- zOgyy~m2Z}bK;S}iXqPP&CtUKN;kOGPNr@9-Vw0T>lI+_%UHMInE zqqa`G#lNq|DZIY*<#8WxRpv>cyi^8~m2)|smc30-$Ns0YfmC_kW!^t@F36RP`?gMw z5!5MfMMq7rbW3XSiDaa*-8X<*x!k3$@EA35B=V=uvt57vvozC)O-u+r%Cw`+rCrsi ze`|NMr(NTWS@R{}!t%6BYpBYLj81d#Gm+4ZdlXS6>LDwaYLI;N2q-;--eT}`)_CmT zZE5_m&C-Ba&2g8XH+91Tp4!OXQd@7Zla``WDF|pidpMc#Qg^J_q@il6plLx#Gj*j; zfLc3PuH}oc-|F5-siPPieX@MY8Bp3yXEokcM}^cturp}(nP1C`fjU#RwFE7ewRw!E+QH!R`H{fhDCCWdgV^gb+1k-x6?!G@Hm2(b;3@$1G2_q^Y+k z>O46I2Gy1hDZjwLI$4ryyv%_}r3~-a&Gw{cwztMz1V~w=2K{caVhSfr=zh{s_Md0M zljIxw52KlNwW93+MJh5ACzf`eGm|@L&7D!mesq*6?S<8J@?^B`7Ml|M&18*XWyg|!U-NmG|1A7_Nm3jb;{d_bj2@EkpLLQ?kGYx4HvHd3$t^*u9?b9cr*}f1sJ_j; zA`Am>Wh>}%F<-<>LO^N5Id1)Xs1D6Hu!=;Z zhOp1E(iRX}r?AT82O4EboTcBj&S%mP@U>7NiaWF)n%_T=_?R6Om@G54#nlyxYK|JRtPJK{@pT}aL1VnRynqjDCJiSGFv%tr~uI8~1mo>AnoYaz1 zKOC)>m40+~=%VC@x|=vE8_0rudOOf!H@>{ga@YO7ABB_YaAdAZZYr;T$=1ZXR@259 z%me2=J|{F=IKtIK`5+T+R|?xd`G%EJr(e*EtdHl4*L%n#Y}{`#UPqyN=d%>!4y(Sk zm3C!nO}Tknhm5DE97(Lnf~6U>TTcijaO`(E?+BtX6w?Z&(WBd>HxjjZYy7QjSaG7+ z_h@fLuHh!W?a{_r8}y_I^njMSjo?!@WZ$b!xQ{#rT@%cu?|tNCHk|x+XO#ll-$%%h z3NCs2>iGsum^Sr%2c=EOQgeKjL2J6t-k;(J-hE2IHh^dMzx8&INCASr7+@_%>A>B}x%BOFoJN2*Q z3wRW`Rk3;N*3RM$l+ktmOk9ehpYrY3Xg^j}XGP(&1?`XB>FznUxre`?TL+QsFDI$& zYyZO5q`8?D#NAgbVX|<)@2z>OqdNS?Vuxj;9)+-#7CVgz4NZ;b!Xq+%yP&FxH5cWU zpoaomqzI>MAJyA-DQforh5>Fft2B+8M*DKTwf7H7=5s znXNK&Bh)%cl(*e-)c@lJK%$6XD@u?P$Gab|loh>@Dji$Y*Njxpc+j-KQoyv^EIg6K zYd5c5pWlq^W~^_%BIZAvCPN?l=&i^rcllsOC!HF2QLJy;TEgM_s z(StfYUNPc|`BXJY1ZwBvjiW+CoP?Q2-2_gkbgP|pr5trG4=B}o>@z2EySz_Btt&|? zmZ&lqYVvSY?yVjy30)5g3eB>>=WMIg0nr_4db|a-Kjhp0NF6I$?nuEMnwY0vcpquM zfXE7P7(0mIw3aH4Y8E#!p}{ayx(9Kmw}pd%nh;D7UlDI$#g^Ypbc{+ThOi(b;N`g_8bNwk|iclbi> z1DBme?A^I}Kq5~XH{G~bN$yw;y|OYZN-t}>-YOWQrMAgLmeA`(G)#XK(`_1C6LQw; zj-6Xj@^ko7nSGCp908=OS9HYUV{%y8#Y%9!#Fr1Z5H-`T^;Q-+!<_jE?lCVK}p`|{VpM$R9{>~a3A z#mC1DzFX>!F&R|SkJ(&e(TkAtvryoC2u`GS{rfDH|5n!fwGCZ+2e5jVZ3*mG?>mCU zAAy)F4UC+~pUgqewo`Uir%MB+6YM>>G8o)k;m>H&TLBO!6=fsjS&Gzn2px($EOB?4 zZxKje61=z{^%q85UKC9FmKrHMPNo+~(xJOYxYD!X+(3Av+&Mq#YoeIN z>EDl>o2}VzxYXS+ib5T7?j2Shyc-#LgWTgkcdwpQ)Tyaee?^mrC|JGM^ly1QN`O5E zec*TTUNQ0^Z8IIM%bkFo9R+veooS3;=O2tscAHaFf;<2olrZQTIG`9DFnYK;CHTw} z``pWrt^ZGXcF0TpOU3kTIt_3JgjLP@FV@6-o@!r8RxE&1OHKr%P$?K;kKbCM&{x~L!-~s?v)7)lnUlB0r_U}*2%yT-`O-#yx zrr_B#%;x@UI_~`kSpd8JUN5Mrmn7%+ycTA>b0ABL5)x;t1TIg9>&|2j04OVbwu7;8 z^O%N*gBiK;s$%UcIliRBnXY(yd;7{8XJ_Yue@UzTJr8a10A`bGUAZQ2pdAkw62@V` zvu!m6-QMhELZPRi7tglM);M<7^`yPMI*O9{*&fF!n+t1mbL(oo#qRQ0@_G0&?)NV- z!1q610zY)NO8(*tjbnR(9sd>tc-j8}L{k8C6<~D$=sW@b(J^)n6O67WftXNJQbqu} znJ{o-MNQ*)xwUw?xmy3fCOw5_DgU4>{5iqkmdOM9@fT)>ddMU~Szis|n>_CJ0a&H; z!LAd8v-C9iEV7W9`{;V>f+8^MU&a>c^e1Hlf{uA_*{6S`xqj^?w}~&^wDVo|LL1%u z6F&3--}?*yhW?LloOlcB8Xor!B1CHXRW0OkD433DPF8;VxBA2{J?Vh}Ks(-U=LaC? zi`SSE3YzWo7)?{Ivtxq0$gcVx3z_1CqAdTTK;0$_q& zP>F&?iw))b6n_O?drL*Mq0s+KX@*oFtzIGQ3tU?(IjaUvfeF96tf1-P$0F$if zsvpd#$BBR4mAbB;w3&5qa8;|s;BKe(*F?D#Zu!cM2}+xyK9yQyJfOaxaJ0MrGW6b2 z>sCQTN>8)}KHPJId^8ZoB^P=R4MwTpewNy(-&AUO$*xTh6=~WWfA@vScO@RDBgW>Y zrbwW`eSXsX%%ee5p=rH&w4#*5)!uAP2aY>;LF4~8U_#sqnOeYlA!p) zvh6Wz;Yy7I#6*n2up^N_mWWwXP97*W)NPO58RaGu3udjngJubv{5j1?4~T5YZBvv( zoPac{d&_8a#BA>X#1GZ%Y_NRXwT0K@kE4!fG}Dw(J2x4&FK_)7ic7&SxyoVP&%giw zYYm%yn#yT&d+A}&j_RrrjI_-b#|-0F0ED*-AO~VC>ZS!_&rk~s#+sNAd<{-Y=} z#>^0#10ES%#V<2CqYRRN^~L>_XUFPB=qD6SqhqU1Sk=o_4y!1^ykVP9-2z_vuk4dc zaKoS*?;C}m*JkoQ!${fN+mFejhn_TZPm!|50A-upabiL;k#T2Clwfdd(WiDp35BGY zMs-dcV}^miTI#1e-`r>w$^ zWfhqrMH6TFEjF0y0(7jVr$uOIh=6!2pbT7Z69Pm&fF7=wG4n!vcH6{qdk7>FG3gd~ z@YithDxV2Z&a3@Utt9&g80Xin?HhZ(YkO`0TlPH&7x`iuByXVCKBh`qy-*1#UJh89 z5!>^6jcsddaZ-6{i64h1Q{jg7&BH~ow{8XQ^nJly-WlBn*J{6t-5aQJBXCcB!(a1E zw7PTLxp%+eMC|w;`KL=PUtiwACNqPZxurnzy_I@oCokAPlO$4dbZy0`qB?9@8n`3n z5~U(G-2)Do5;(H5LROU{M=Gs`^^Rs^8|Y5@AnxmfF6eFw!R$ZIa!X`Zg1ZHQ=e(BD z>h7q<)=0+ftkjV`*hH=0f7?z|*PrPa97)L~qUTi(n_~b6D5BKomTq|Gx1>;PI&}*g zajA-T;_i_)uAPJ=p9Q2Ou0m>xBt-jwTq{ED@zU1kx9-l0)H^5c^>{b_U3~Z01_(8f z+V!IXwE$-L3D!((x3Ju?2cc(po7nlJx?bv9~%6Xzhntpk0w*(jpu;EFIat(mM4ycB6IkB_@a1zgJa} zJeqCfh1C$ON+vn&9UyFG17&jU+tIVwX)!l-F+UGq6s`;%DA(~GdP2|GcU5qiJt#Oh z8-11_S=6u<3Dal#7B_kw$3G2hz3^7+bNO4-H8OCmc5=({^LNT0|$UW8H-z}G*pD=uR$oV znTg2u-UxEHj2le&Aj}>G*Q@dmm(kvp`q8Id{`zUx&I&S6RQ;Mp^LHbfJHpI|^X2M9 zYQnu=XIdo^cJ_WhqALWO_r239x1{u~+9l!a*JcrndIEw~ck7m^=#6<7B=o1!9GkN! z>l$z7LsQ6`w#LqkyR!X462hax->->XPe^o+vJVAiQ;Gd!VqO!T~kk zu<)U+)S9Z~yQWegHOV6g&%t>>NG5xhz#6tkAt1gl+CBp0D2n4Tvdwm?mZ9A@p3^Xc zYAvQ;^0-sMb#!%e;y;gMxy3`8obAME`fZW{US^iirLZis@&1Py5a4r;VGbnme;Yz@k$ad&9W5SPE#Q!$lceGszCI7l(a|u=+e#LKL$8D_=91D z6{e-&#Yz<2xdNoKq%RSga({F{t^I9OYiR0yVS_o2d5j{E1-yB5x~@P+(jG$OMF%5y zO}#akr!8?)u^F94OX+?va*OQAoova<1mEmc;jKB2nPLf}_5sHvB~G0CpkwploW^_6 z^ddQQb70=KAA2G|9WUQu0ywE`meE6y(MWQmWWmU|sze}JspU|)1HZnNoIJBl`Q&Fw zpKJY3cUDD&iU&*d>5!+fqkdR2mzc$nRfhKs+`f6c{f#{PdJ6--uzRG!!$42yi!S#A zj6Af5GfIFeIi=zS^C^$#&egG}Qp4us*em{~y^#wq-t5>K#6=*-wH}?V>?WWwim38z zd}_1(-T?})Oi79cd9v|xrF{&ZCW(3wqfakuahcb)^DcK_P-tfE^|sgINUoawluIay z6C=&6I5y=HSi&?otM|{v_83h1H#+-vW9xD(g-!23MFT+%!9M^>e~${G^UkYx)?sqj z+r&WY;dmu-Dg5#Pi@5VT&$#KwsEC!;t788JPO$*g!LW6fu>$^wC?<$7ir~HxQPp?( zed4noodiBnkOC0(o})nW|9+ zs=~NYEzgI`H=?wZjU90M299$1v}dIy#jSvRl|0a*pQtErX2#}2H+~p(I2{m}o$KXQ zO`o2~4;2(J`Gm};1B+kNpO!%l-yc0N#va{01q@$02KI#--FJp8yxZkEV%J_^-Yz&e zt&Ai~!EMv82>T>#Z%|Q2PBs*cZI_BJE-wp-G)>2W8t%%@@G#F1?E3x zUsV^_dDpx^r|%C&X6>2}!{a9EPq4&C3q_-8J|==CrKQ;noN3V_=sHflEC~v9ZeeK; zu?qjY74E?dT(P0bNNehO0ixipTeBAE+}$!|_^uIUS83Uex|4}0C8I|pMX~Oo`9ws_ z(r*Sb6tCF3I7EYASIS{B@Uov9L_FsWk$z{-pkIL#&4`YfrE}aDBmga)*V3wmdk~-B zK1TH011`?-_Z!k|xY@mv`!?1mYaKVYRNbbFM8)x?L814YRVvDOn_G!vHMijPCul04 zmoZ0Q`K6Ja>jr$9l3rtmY+Ch?rDnF?7N9h|lcDQolomYFpd!Q7XO7$A8SC{~{K-oJ z;AvO#FAw(*Qist1Ti=xVYT9$*u*~16#tY;Al$}Ueum4$yFKw?}bngc-qNe04dZ_>z z+?(@-?E$USjxjqH;Dlru{q1iJgh_nOX+fF1VJ@~g#?6uGf?MWJlVwsV)fq{W#GHnJERXVwS@i$+#O23lDkKi=LWLc@ORmH$B zky^rM;MAu?M`?`H(o{%%C*C?A!S}j zXWbm>V46Y4R}cC?oLxP!iv5#kGDchi>tEUgVl+vP`by(&+odJv@a2n|qct(yU3Vx8 zhND=_IdhQdQ*N?^T>~N2U%&0|25(X*iG!uY_f>CgXxCfTSfJLtfz<1{?BOB}k26>W zZN3==3HSH#Q2?w6`rA!a=~Yt!a7?kPO{jG{*taVGQS8r!J=gfYG99G~^;afzO=SGZ zTRNuQjnwXxjd7(i+2!30&h_()C8H=}RZzzmw~|UL^sg4Cd)~FRB)gbNUE}t_e=0Wq zlA44fp8P@CHKUyyg>SFvhx%kSQsSMKri@4xZ=K4Dw&2WtqK44v(yW3_<>`4RihA0F z!Pq|L+<=sPi)++)r8EXKxf-FB^twOG(A*JzubS8MQnAYkS$Jij_|%()GAz7ub4Qh+_|@6=W-k!CHav!vP9|KdpoWV;9lu3%}6(l@2|m6)#8 zyn=sS8E_=#WR zj*0(D9J6j=tciZ`1~U@){7!_jGaFQ_rPg(m3Nu-&9;3Sevt=zVp3}1K$MCusEvXbe z@88y|bJo3`H8DHrBA!j~xJWlFywxwz(x35zeMO7Wbrvl%+%QLQ@y11#o^B`}@d zU*3!W$+=;Z7{5Zd4X~io6T-oRlS=2_K6ri+;w@@}@buUxT>H8~Ro{&Z?((-9?w>)s znExL>Tvs+S0hsp+0P|MRmOr3nfj-}3!@e4J#*9i-8XC5-e7UV#N1AL6b>CQHo zW3HF4w#jFGMvnQ0XuC*#4?`A@jUfV+awa09qUd%yG;iO_eKs6@FcgDEm82HLv&XcK zZ3UMm+8LrZa>Gl2qG7vJ3}s|6cb^GLPz}NuQ$Oan6DzE9$oQ1k?E@)x?x0n;yT2+h zrGGPuE^aWtt|%@#*-1Ld!o{bl1$2WnUWEAnu2zxiE(TZmRA3m51Px74usqy;BX)pPfz7cMD#$x=Al;szitW>xv%u zTrqZJZ~}{yx7$VtQ;h>|xTJ47SKbe#T7Tiu>XIS!ph+e=trWH%ue6~Uyp@}~9#;2O z!su>otlUbVTxUj>bBEFQ1}TVU3?ra00<2B?qroeV{B9>SKf2ni2Ctk#;`-R^_NjSv zO^UaGh6+GGVPr9!^6=JrVI@lKTh?Ut9m-(Vk*$w_SU~Acih?7HJ@zT!{+W=B#MKS% zI}3A4c6YBF?Wu5RpN@X9W{SHDEByfUumI4Y)JYk5;yj!L>frdXoJj&s9|l=VRy2TZ z!k$S_$C&3BmEyKDl;=&y23iTAUCJ>+-ubM>o!7r;nsOi7c_gdkSGrrDe49V&jc2mO z#EIAtuQZr+-w<2a91Qp~VV^*%?xn45006L}LizD_`D%K1fPKzzl}AjcJ{;;~Yl}yv zcmFNF8II}>Q;HcBaw6r&wSS*EeAZr}kXyMYZmn(Y5SigoXd~_kcx@~kN*`l8cS(}k zZ{eSL8Fx)|bhO5aoyFB^1hj1OZ1LAr#M+lyKlz7V*T3VI7eL%{eL@fDX_Ekx;#!R6 zIthE$NG~7`di47nR2Dd_Jk=u4b_;v4F>nDzoqNb@^@y+aX99v zIpB5P7%tG(>J5dCSCBb!UJ)O2sEVe23D`!zydzdow|3J`hpOD0wh{qRhXS2bg9WPI zCs*>MLDCFYzVIC!x(N1*DUR)I3gB9>P)Z;}(->Duy>=(=go-{{9llL`mSKsx3;2p*= zU%!1=86vA~)^SOl(JH5g^47u`?WGP4CNH^_r7aXCLERoOPnwkj9j4<;9>zj{Hd1>{ zwb`DycmnO*4+t}fSN~Mhr_RWu)_r~M{?aLae<2q6PB(&7^%6PIdD|ue3dN^gP^xt_ zP56Y<3hpuF=aJT;k@M{h?CDnlFq-PXHKPgRfDTi}O_}|* z=of~C%iXe*8t>bhu5!zpD1c;Ox{`=1)9lDpx>;!z z2VTksIID{Fi9GUFYN&+gi$L+v1mUv|{WL^Ca}w#Gz?knHVwT>3Fq(GD_hT4tT{)zF z9F&{CsJwMGSx}Fi0SZ#-!N_s9ls7(d_&i4AWWTnN+tj6c-_%1WRk#hmVd|v6wtZ*~bH&<^2?FOa15V zZq?zPxi{1@9f+BOA`|S)(ef5w__v$Vh0Azoy0`Z}Z>o%?Kj03I%m(Tz(f$sS?EqF& zvZyjpFMH?6V#t$DsQiwb4xH?6hHZpoNG5gHyX?-n=KIr4EYR@F$#vn#XE5^Q*#n!_ zi8Mo+T^P9LVV7_VwSGAa?&TkroO<1AC+-{k?FlyqxjB&WhM(?KmYny)6e+h{fNdrE z*sP(Af(S1?-Eg_3fYwdp*6`d5Ex1p?jJBLdJSmHVWFK7$ENzxT?!2boGhhSFuz{Y$ zRVA*J2fQkmp}#S==4hqG7Y^x|8R&SQs9EqI>gCqyE0+$7Mv2v-a)xsA>%AM(vP5y) zT7A=0B9y^aG3$AI2lUbO3II@i-lzM@#pD+F_Nd@E>GbL$BPXkW3#5LzlH`g2cLaBk{vHvt>aIiV!NN4T?6~ zT%3gdV{^==@zO;m`n4S=y8{{%TF!LQyPDelEN?Ol^4o5^U)CP)(`5eu0S--A@#Ypu zP?utK@7BGul0lOBw#%Z|3(YTif!VZ;!Ft2@FhT4d_4;IueNcTl zjMqabc0*}zX{zoiO7YRBG%HC9B9d|%H1-)f$m%3ZK?bBd8 zpb&c<6vj5DTji=5B+a-$yA@vWH2MI@O3~IzRP3KsWtkMsR;#N7rNw)N=eC&CV-jE3 zNA2l&Vt}e2{%D;}Dg07->-=B|*vrbeu^4pqX z6iYb-D3GHlKnRD+eD$?7$Vs*p&<%sXQt@{2$839 z#;wLL&I&+KvG(su-we)f5el2 zr6#W*ojX|_s9E?{@i>_)R^BUccgq0K&8fZ4cc5@}Fa=e7v(u zfBz&wq2r*FP_{jbmce|_=uTklUwqhv0>$a}M>D%k-uSTVZ#ms8U953q;^ zu=tos&)NyFpj}x!hh#*ID-tr8`jb*1LEEdR#LFAm_3jobxZ#?Ih+Z=JFW;YkF-3%R@Dr{8 zukHdxxEucdKb9H*&2qg1dXXP>k%D#bk5~L=f7Q`{e=!dR?zA~}A2 zE>I|qnEsAO^6zGH>dZMHV!JLDS}026{gBB!j=%mA81HY8q4oSV|7EMz8%s<2duyU! z!&xEYCcq+Hu2iP+{`i->j*vJ~;oLX|=$&JIjeT;_2p&Eg^i7=`=l9-AzZRm$#OGB< zv5(@3Qop~~ICVeidYA5iBHe)BoW=d?W`PTZo9Fj?m6NVidZ7LBpWMnNz_;a3H@yBj zD9*>TKdaDg5H9R70U1f`=4aEE( z+9>Us8*x7Ej-^bShljIn-%_dv9lKL5{pH@kR*BOJocs#{&DpOeg>L_TT>bS|A;l*% z3Io@T{5F@3!WoUqLbRQGY}gjHM7MyNodVFqKy*w;mLF2I)7@@z(2N{__E@Ooe$TxO~Gx0+tl&uS%dFefoRB#LT$LuYjkWZ3lD^AI}w z0X^w$Q&XXcn9WaWosX2yruaVtwvuSS!Va1#&Y$fxwC6THnylEUPbSMnqi1~;x*q72 z@|*a`$0ws5Ll;ssd%(3&U7|J63erkE* zf`uZTri>iHK3Me~vl-M|(-CAhT|()pnZ-#__Nm-CMSTu*Y?dbX8v}~H=Xpop-x{H_k4MKpC$o-Pn5OUJfNpQ7puS1uKQKYD70))+ zTE-X61Rkir;=jP^WIm_>sRCNN(Ve(0y;u3{y<3##h%UjRj0awH#We=bf+UU-DEx!^K2Bm(|?&@kI z$!4-x*?RHxJy^P~`r&2wtEEuim**z}z`IMUZpTXqg*;{HQ#;TzlxF`RdV~Yi^?%qe z|7=#l?0*)?9>SqMJeGb15KoT>c4?2<=KvrL!%F^2)XLqWoqnDB*1V`%jXBdwBZ{yZ zL7B5^BEdjgMhOKt$o2q;^l2;HOr&z zD!+?RH24iovA#KzX#(V+7{B4!Dib0=rywU{JYY{rLM)G$pjE4ocLgwdlBwvsZ2n}} zJYHN;oZ@c%4lgq;qHhT{W^(D$Jw*X_5K^wk?s#^DJ<)r*`nbHb`e68-eLc-2rEToS z>%#7OW(F{`C6g>}yqE2yEiwAI*TU z`x4|OCyk#?l_l9rstl*^f3r^hFOdEf3I92+XxMy$FNodtip<|XVDeXXU!kr4#h=vE^!z&!g?g|0 z$6T&C4#H-vgr4Qr(~MzGB>)YvF|2y8&XVxVhP40?I&!)Q`LS8JPxoN8`-iph5b!7% zdL{2R+?r6*zmM^7L;^IZfw?~Z6GRR>DJ`I}L$g8QU|txO3><;=ITNL%8?{Lv(?+SX zKFet8&R*nwcE+|BEgMKG*fyQvh3${ZEce1-sGq)^lf>VfiH;3r71%CKc5!XMM158I z_cIag@>%`iH^VUzQ%xVS$Qc7 zi&5*$va+0XA0 zqpGvtGNJJ4EH;*L1u_kB*8PkAlHW;2e*q13_b7XuJX7c-@>x-0t1?Yugsgw}$!Hdv zf^tWs&yiej(_&C#m4Y4~m(4TUQ~@!^a6{Gn<@;NT^@Bl8{S=}dJi9F;;(M*CexU{_ zu-kG$y~9|^r1t$Zw^!u(5kZ$rehVb-K58z#@%&|AfQj(WPAPSQ6AtxXDfa(*0XW(0 zphw!w`SpK!1Dq}q`m6{};{D=qf&;?n8#J1&LV)ftR(bvFY?nVg8o>VaptqsNLF){e zM8MnKN&Cx?k4RITAGFi@-H-=7ScC|#P_C;W(jQa*a@mDfKoDcCYjlcWUzD<4Ozp~h26%As`ih+56$)A zJ8=Tq>X%fe6TnA=oP;EPFo80rOxSMnrBbL4AY$FZR;cp_bMphtv>b<& z`iZSdqMWl@lO>wP+S{L#{(vD3O#)>sEvbLQ^M=-0>dhG$@$NPOfxmwm7j1e%es}9Q zGy0(6s5+H@S0*hNr9neui1K8agm`7oKOZlFSVcO$`8yy@ z%;6_2UW%;e$$@zA_z%Wi%StCCCJIo6{9y*rr_6xl^Fh@De{@56&)mMa`?I2A3=Ce+ z0WaXz?}o*$-}O`74r_nuljcz3LUM!D5AFxu5~8!l2?!!QzByJcuV#z8ZQxl_;n>`d z$ZqDz+|zTjBZ+gAK|7em1or>#vFM7&K_&9Tj(-HKY)HM@2W>eZlNU}EltS8`9GYV0 zmc$xR>3xN=&+PV3`USCGDkQERcgAXf!_L7uW{*B>5EN(p0afJ{dQwB#YEb;HII`+d zo%vD{u{e!eQ4QDQ^|l*7Hpdz_0Fv%{i0{i<*Kyk62`*AIereUp?~#}H;~W;nO;8`Oz<<^h;A z)m9Uty>eHlCQelCStWR-FtwjbRWfEmc1iX>X54#BgrsvS1Cp6Go{IltR`|p6Ph_(9 zJU4*P7P~$QQ)n_DREZg0QyJL=eRW*8bo-LRpHtGCw5|f=5GU9+hGZNZ91r%xZqpjE zW?M?~{j@E^gyXrC%KO@~Y8Sb?(0ilTi*V9Y)o*cQmKw12h-59Rc7J{j>dDdL3*C&4 z*4UU{s;)WeipD56>nl$kr>T|Ltyz0PkJj>`YP~xTVu@RsZs64<|5j;z8PQ+GBqhSK z*t>Z^J?Lesu1&zG3DYj|T9ML-qRR#}t{ydKp!ALVCPwyD2Fqq;*>t8rNW-TF;4Vyj zjQVIb5>SeY@tgGayu5~v?Jb5;Usbm)n2Z5yvK5OM_C>6^d$NyXJGlYU<{SJ;Ssd4s zYa`(4ids8ftSK&XNcH)HL|m-pYKvfSsJ@XA8$+t?D2%L6jJnK$OYCu-dsQfl<;JdD zxV??zv_b8V@v54er5P)j3y)?f8yfmQb9?0F0L|BN48tM7I8h!bXOxLk`hOrJ(*hvskeX#U|@ z*NnB(LoVb4c%Sr>FcqS72(o#FhQ@Zs_J*BJ)`b6~$KU^N{&mOWw)^^X&rIz(5sXj4 zPZ1=y(^jW2p%`OirWsVdqJ6rN=)And?!?tL#>?bYw@}fe%3CcN)Sh4%AAG@%)70i= z8%M{_@l6NZeQWd#PL|JOtwhzFb_oAz=+SX6{K}`n?ksr$L?=cT5VI~iKjAN~#EMgh zfMd$N(C!pbtqWtxv%aU}(4={Y9)KaWi)b(=Hy4I2WYxkG(-qjer?1E1{2fnE+p*g& z9!9rYFUil)!Ep9m{W6G!xl&eHTgOSPvm_jYS-{_&G0<@)3Hs(R*D1_`=mzHYB-AKO zZ=tdd4+oczQfdAU_APb5lz*qn@NG|ExjcPHUsg6DITN*HI-yyLdi@gLD0;8$N}dIy ze*dQny_dyhgQTb^QI2`Lv_wBDw5d*ZoHjY)raJ;%zt9qF2WC>1gkYk8C|ljvuj{On z4mw8g8eNPOq%ivqYU@6w&1UVmH2d@<2S$8VsV>k%%B!`QSw7Lw!8Uk$@m4h1&_l%1 z{a%fc<8(_S_Q}bw>k++=u+vPYe)Kplfeoo6tj#m0NQf^Cm($&^=pB@7Ox{Q=h9X~0 zFz7Q&H5&8Wh)e0?N0o|OX1Mv(BwY2UOrijzj-W`2(W*)2lX4Yd^hQ&<)KRjHIm06y znckYTxnk8%bH(aLLF+6AgXtpCO}wV1{hx%Ysd~&v61fK3i{0Puk3%v9OF#pc zNsSVK$aN;uPlPe0y&Z2RIGmoe&;zLlgijOUFRT>vEp(9~&DjtR0j_Q++L|h==C<+? zFZ~F=fj!n)3-vx_;epd7)IqkUe;?5}$=iwnUUrQs*$2;}f zq=_kR5J;J`1*+h3+SV+xK*r5v-<5n$@vDp?v2xvcsmLvsX<2{O-@sp9(NA zL|(A(OOZM3MnIW}h5j(*xy~8c zRE^6RlsbeNl$Pdj2!^6I;&*?jD9A5}|D{W9_ef4Ey{Jf_BU%em5$7~WqK@Q>2F**g z{4mfrNRmct(*ERy#0T21L|01+frqL@rQ_>0!D^R(>XH5$vcAD!eiYIPEL7^EYXl36 z)%7iW3VMy)0Su?=xytyF^g7z@SbWP{aA(z*U5CfUMrK5t z8U7+R=S>Fs6vysjRp+pSyx8hyoW%vc-hcV^~O&vU#pL)7}2n1UC zuu}I@OVj;OEv1}>`^&`sw+Mbpdy1GwZG1SjHva$?v;6A*RCrS4-wrM^=5M&4SRTf2 zEXZ1fjfy5}QSNs+dj|W{0YKV z%uqyCA9JQsm@WGaMg#6@b}08${G4@NuxX|i+Zr|a(VG-YRHFEQ?u;)@<tMd523sLud^`38!G34c3RA{xzADv+9Ha4JR^U5Z zc#kTmFUEK;mmla)Q^py1;r|1@GF!IMK$!0)e)=LG502gCr4qyJe)3ujo>c24PXb$* ztJxu|NYO`up?&lvA+P012$T#D50k^5QLHImy1mmv38R~q|`CKyV8V?wIi*kz^| z-K4B}DHA|46y|z4nUQuuM!oI3G4PXct~hii(hBgu>knTdf2Z9!nK16k#TWwH7{ zqsa^3ciCQXzdPG)%Mf$_vI|Rxz9^iiz>-f<_0Q$i;UbA2r=7aOaEK+Qi-f&TyE%G@ zlzI72gv#0yIr4Kvc)3uy8zF40H8uS0R=leauF+;EZlbaqHWslu*$eZ{u?d%-(`<8)2~IIHA@1T)g!YNgFS zvDv(^1G|Ram6}j~CNU9-YEel1C04*j+#q(|L~38tDT0@;H;Q+Hp9>CTI0UtCUF5Xk z-qm#Y+0Hj@6@NAtnv3o=#i!f|?VFr;l2UA(L=*xI%3P#l-lUzf%pXK~9J)V+G zt|ruJqwwG`OG%zptK4gmJ(;X#6<{m*idb(2jH%Vt`siOIZY0P^bUBf-O=#T+)v)L* z$~EPSXDw?u>TpxJ)AS^5UES|Q;7`q~3J0GhEKAZM$KjDkU9-$-Z+mRBv?jMP?sNO*m^U8(wZB?G`cSIWTr!{ zEgE`Uzok|)Md`jiTqx}iy1sk+_Ko5~8eQ`}6mLpBt8(1+;fyBihL*=JQIR}lva9`m zMpZCN18JTVDbj}h>GCQy?{eE6|JC9nL!o1-n*Fn)auez%tnU|WJGOIYdQit`iF9u}53kN@_ zJ!)M>JiJ}qk~hheH{{g4<90NOJ6egnxAAi++$5KU+2@4KK+2t2sipT3N+FEt5T(&s}uVFou^-a)~IU0%M zi;rLpP-I9OnQ!`{zBEfs_O;;)4tMnTn7fDI1lE!LHGgsAjo5^RO+8$XhZ9O6%~_n* z7q9eZL^tAP(c3k)WOt&p!1mgB>M*^Pw){?eSGPykXP01}MWCT9;|Wp0+rMg+9ZcSL zYcE+V4DA^V_iJ3@qaV1r71G+x!hWCH6Wybz5Dhy(vA+H5fRWLEg9+-}-#fUD?MTnD z;Mj+UtY}GSDX`a>qcOD|lN8zYLU5O?_XUn1<2mtILW+bZ7HeCc!7z#^6D* z^3w56t?NzZ>x76b=%e#}>rOi2wrJakRj)u~<;J2e)h0htG&*q2S_w$9%7*DEJ9Nm^JULLeH~>WoM1cw1BXVfILZs2#|sX% zmaZGec~PdXO6ZnGXg21uBjg?N*%$lmu;~I`O?KVO}8sRqdU`0y~yJb(E}o`pO-$oK`V6cDU)l9-^%LJ!eo|&eR#t~++D_xc@ODNWXt`PPkP%DMfTCkow}c*us@BxX=cuLbQ!F1+lOGV9LmuhV9L$cxRsuZ^r;d7jpG^ct@gi*@v z>g;j%Cxfp6#WKGfU26OLB$gIE6;zlUntb3+H8#! zQ?wg1xYvsaYel({M~c@P;TM(Y{B_CeXWx)+L-J9;WuENZ_!cQ{Zr-&SrY_7%_|Be? zyuaaugNc+9oz#z??M3|QR!c=}t=E&NCwlMPq=z#l)tw@ThbFSivfiKK0^K^f7Jv@0 zt<(9!pP3L~_nXsO5rg;H9q_(N*01F&OS36BLP3o5nN%rHMjgylJ7-36e3x#Vsfj7snW*2DljteZy^3 z?DPvh92d4Qv-3&C8vXk(Gis-}X@GXP%u)9flCNN3Ack(n#a?_GMmEN=I7auKZy>pk zVy?IMYrzv+-s6yjf-Yf{dHDoHLBW7#MJMDwKJ-k*k$#vWg#i+Cih_*V=SYe;)@i*A z9$ga)Cw#Xu6kKhOE0WqD<%XjY z_36EtnlaJgF=I&@=nRT-Ps;`;C96J@(+&pP=b1#ps`GpNyfb_QV{7T01VWRWPRgM~ zTI*6(Kd6$S+|>kB##IDaN#8Ia`Ln6x30kZzE6MIQHI}Thj6trh7(ZOp!}5u<*J+@$ z4JLo8GD3r5dH+_|~F{%o^e7z$6cRdiyeYMxeW^$|rA{rG^rwe>lA*lVQXt9p&s zdeD06v!`Noqj%Lm!_`-S-9J8feG8F-{K>YkZt<Uj=!cScb>%U(A6Ddk%c(>I<>|!`YvM#@!bi&5~voUxc zoR?=5?Pqdz$wvo-3cYZB+PJ!YDCC7lK=a@0)0Gt+r3B$egs^1f@iwELZ;pp!a6Kv* z?M6M$DiE+HWOa1yN*l@XAIllwISdAU?~Tf?aohPUbX-e&@OI1^`s2|*ajK3+;qL-A zwePQ(*-6IiFU*|?FyGm1J2PF*uVnCq{4(_qL?xHd5p6amg+Av4;`TmmEnPo#Ax*)x zQTLQGEV^OK!C2)-$FO9C|M+p2c)G04y~VO^5Xg^bH^*l;4zDRM!TEpAXn+~c|E4nC zgWu>*(7N)^<}`!DlAvQ&@a3@(X{pS!kGkH(1xRL3c+xqejEm?j| z4@L{q`|G{Df=Nwzx3wS%UauLbPUGCvB!lMFVAC2f<$bM13|)=l>zrxCZuOby#}gQ> zYrd4nIl$M571)XAAYL|*%cJLVY_D2=`G3yn-`DSMhS?8!@r#T;f3TeHI81u=7lxQh z`)&(U3cOvDlzwi%c;Dpz=V>(nOMt;rCJwsL&%qO%T%JJ$oRk4)jxUaX-gnSCet<8= zX#JDt%H`E_{j%o-AOAo9^Q$+p9)$kU%;rj8DemrMrVh*B{Oz>leHr?bb7+7eEs=9` zpnBE+$M)^#NjUFW7kX$8I{0quZQQ)sDcx5!rz^Ug&DV%@*xlBDQu+6E%Ptp7SWSOX z;CAu6yW`A2qp7ku<*QYgP=bP~UcTQW{y9}UhG6@vQ#q%|H;p*2OPpSR^Tt1U(-5>n zFb~qf54bGBkh*h|3-!5a4R7yypxwO>yt&-_U5R4PPMYwrJ-RC*_O((ODid^-px2&z_FB18JCC9>D404UG(0&*_jTnNn zV?A9~6zA;L?E8|SKM#nf+rYo`t+D~K@p2fVO)Xh(eDu%Vw*yKXKcu~R2K|$g=Be)A zu%I;<`5VttQu_Vq)VfU1W$or(eb`S*Ix!#;0s0As4AvNFa{~5Ha|o(p2ci!iqnyO? z;$qyq^`T9JCoR||TJ54UNMAIg(5Q|vcb&ljLGohky*=B5Q<%*w3vzU(AXe=SG+1(kv z1q6(k$w_BR?cNv3Wcu94E;`M40>v4VCw@Iuj4koB#rn!^1K#CRuMx#Z!Ztf$zzNP~_f%XON{V*hor zbnw3$9&_9=;zo4H?;as6Qv@No=Dl(1CRa2?a?+(X)C7DNrq#=CXkW5Z;=${zd%b&9E z9_G8VW*fEC4m%dEt^q>XEgQJS#8O5T9bjT;69_*>tdGn0@Od@ovOItFXUbTunXq9iAd= zk;DpnZT=86qRf8fxv=^3e4Fph$%^;}Qn`4a<8-wdX>e#kW^q>crf5;C*vpIkDGtjN zU}+@^IAi7Jg?$-EiC8t-sy^w)?J zkPmYcMGjb^ofCB%EoloJt3SE9N)+XV3`t5gs=bv;S42|kES16cU*Y!wXkg)5^TUTB zw4)KL>n6z>lO+Ve--g6(#Z3I;7pA=5zkd)(to`Z|-isM)&mE8a@x^J(0>Q%b;@+tS z(!ty0*!|6PrUitP(6^AXHsMRzdu0!rI;gP^t=tk)lgaW9BNhMPsKG@;A?twYN zzIhkB9KpS)^DgN*Ql9=CNny+qr#&fOwA+h}@tbdWt|3gsQ7T>I<7#pu28B19&U|5N2YWrxIcPd?w=#`+clH(y_0P^=H*8e>ijB07cEQck z_I!-l*w|301jvMwTc5R+wKl+*kjN&-9f!!YG|8#8r|;XXw>K#`Wwoi1PqriFSZtv{ zkCm*86CE0QqnYGwrukewH`C=D*qI{5p@x@}0N9uHxrKv=f$I^D7~yJ&sz@^{Rb>TS zfx9uxkd+0v-ybm*=k z3a;0o5;b{)DVp938Y8pn>8Qlo)Yq0Pnl@p@&4)kYXW#c%vd1bz{flVlXFj>b#vHeT zCrp~oo?7e$?Nf*3bEC(Pd@pKqo93%EbfAJp;W-4WmI0KvTUl1xUY9Sf~;n=?y)8FU| zaHpXH7GM9s#nEF0t!tp7$_k4*f^DPj3bCPegIJ~CeP0B4)On7A)69PUoNfpt;|ycc`Dt{_ z-tnoZm9yGF7tc5f-m86%sX{uq`EEHC6=IL5sz8)*z;CEnu?f4m3JOA2$NrkR$OsY?pgt#{G4-LR~@a z84Z%^#@(p=X_u9@E02?`+^hR~o+&I^?rc9NTd8f2>F9*6{y|p3(7TIjY1s%Vi`Z9( z7$GtGsj^7xQcyO))5!1@;A(PEcqi{{>?%h|<>XAZ!zJvUj3c0Pyf8p`m{?9QJh=9o z90IcYkoN%whuGQO1w%yf4Ugfk~ zQZ%`A*5bUmVr+J&RFNQOUXOaempt^o_{kCT1M4TGJdMK`lYLX1Ac9 z!f8#MRuYk}m7{j{O{Uwg_L*$%@y{wwHC5=*rc{d4{Wn$8tFZ{RUYJ zbhlmPQ$43uTP_FVrDQ&!HxL6yS`0refKVfMfrOi|${M4Ks^@BnDd)zAY1{P1EDudq zeIOz&egL*rA!GF3P25ctwEl3l$EU1mLk?BR(kw_t|FqM$78lqCeQi1=ITtR|St=@@ zPf3^R+|nHLxC(0RKh~!UfzcMQzx{nTaCIx4UfDm8KqBR$x;?XLK9@&aYD6~-*ei@^ zwcdj*P!ojIYS!ovFFPs-UmduY>vL=3{Hma$^^zrG^$kd zF7S03CU>m=Po@G89PJMZ28gv$$vRU}Ofg$UVoz+k=RKFj52U?G1IoQTGa6-$?zdUa zD5zGB5!}|K_Z9e~ahjg{_^y`_Zbcvd;y>IDX4x!fwi4Vgopx*iV0X)aqJs-@=*jV4 zpC>9&Oc>)kBe9);D0K zsNTv~vL{3v*QXpegeI-|AZzPM)TPBzYz&b(O|DevtAnhTL)E!5XJZt){N`JzL)O#A zXOcE6mK`RH;udwwZI`p@ONPB|@|Zs<=+%@}bsR>S&T|u^!(^8N2Yc|W)nd`fuW025 zBEDH*$x$-=NzSWXg=TaW4mHR_^o%a8tV#~uEL5*vJNz?$`S-QTKSQi53I8Ut~q}ut|k-f%rYG_FOqpdM5^`=48#=Oa43`Yb?vQmAZ4eJBObt8 zGFT>j`ebEG2n|}m5eFRaWWc9d$@CL2yNfya%y~gHULtHo~Nj019w^+x@yOv7br1){1er zq?0_on;8nNy@TnT0&YupS9+*?=dWOlOru+wgZa9TTsK?#fQTY-%BBc9_-xa=*)mhz zszoR+vZ4YxOQEa~Cc&}dn^fl_bBT7u6Hv$n7b*G{DDTz<7*#2nv5@g*1jSpn-vd<+ z0l!Z57E=%lJ<=B@y$G$*BQNde3=GGU@%TLHG=1kOl)MeaZS)OslT@fMwo15QLHaB@i}_t-`Ozny%T=X6=n)(Cn8Penojg z4STd?`P*%J1OiHep9YeHoTZqUnbJ|{-Jm&KfB^_ozGiu{_z38t`v6`Um-bc-89q{ANUrhA~aqO`ru zJ()V!ehsd(=(AMo*Fx{XbveWR;yLh&2_mRqtl7*DeWSRc>U0XXW7F2Nx{~8T2m6uo zc1r!!O(V?iI3DAJp3dG5wff9GmTC#*p`t_}%L@pqfRF^8a=%F-ZVO^fB6LxM@!{C6 zWzUx0s{Li#4|C+d0Vw~r2>x+Dmhd&qh8U8es-mI>UFuc-pQLA^#LDdDT0#%n9{^CyIv?qnM%?y+W<(0mqh*n5adXvWSjn_4;k{o3QGYLE#{HY#ZT z>oCynM+-c{ppFmse081RQ>$7+=6K{BeUagK9F!^6Pr{j3c?S4g!Jq1vE3wy<&@ena zL|y&L*OrA2++D_LR(9cpFWJhMx;>a}6wzfRSD05Jj&MNOJBNdm9Wlwgvq5IAVF>{7fiu_J{r8xqcDYEtsU0}wK45jz|e z7MbNzQjF@S-IMu~)@Q>NoaWMN@N9;brdpF>_TW?tIo!|79_yw^hhwoO@YKdkS;eCd zu8}Z$7QopoQ-5bgSQTsCwDGH)2afD;rmP2dBfQ|ODY~6F#Gyw3HQ(RHR%6nE+#x7w zw|&P-3sR?HaEo%>#gInIH5IoqEHv^rK>9!4F%Si)xm7vp9~{i+g3N7f^MhDj$v zOc$Ab-28PMMd7#99Y*CxWctgo_FX&Y>5r(Ny?#pNq;7pG%HP`(O%X2nfM))N<@_uz z)}2prszj7O@SvMN6=typr2LIe89XWAM}kL3y@%qR$w2qB*ruoxU^sb{^bmY5CCS1^ z>fWw^k*GgC)Ps{I)fKA-DO1CKe#8qzMLRV*9eeWOQf89xEYI|PKM#r<-qzP{SvCn6 zEi<7BIXke{)>VN={ahabeSMPEohrvXx#b`e4p-gTo7~qaZQ+VQWwfpauoJ+$`=($l zyPsS$Xmd1p^y9prZfOJ8(Xeb~wYOEjc|$pE{E|5GM98Mpnsok6RTk?=IZlUO8hpI) zSsD{FNvz}H=&D{Jxf<`;)k!(i>zd7JA?cLoJ|Vr8VKJhWOe5FB=`sXHLZaKZKHQ_j z@+rCuGsyZ(H>O}}rBW29S$A{q6zEL_bVZUnH9;O#IPv0eTIdFqsx#WSLYT@|vQ|G| zu@c8#|BlMeRVU%-+LVy%d%QW$-$P26OvEbN_%xqF9srfKfy6*TsNwI1Ghd#6u~Pu$ zOstyF^!8IWZ)n~rWR)yn`tX(dUuFNlaGQV0crPP>V0!nAi6KNb__5FUyn)!K9#C*j zenFQFY7mxqC$T6%MdAXGXtO(yK=XVhSZ-aDx(z+z@sp2u9z~tTgKX#eXmX_#AZszc zmpIS@c66mt11B)SVQ#vM-YGgR>dSb#eu0~}wX;jxAt#gNYv+FIwyTMPqSr;PVg!ga z{?PA%s9RI3`{$yMioHtWzDz(<1k|?l$mg}~sECVDqt=(E@QrZ!`r{bdlc~O0iw_a9 zA#}wGj=0IwKygpY4U>f``6CF>y)~pG04bMv}KDSE7wg&+HBE`jp^b-MG7+R zjJaAU3dRq!`pzVceBG~hNj^7lSj9Al_6QZu3VfZWys4w=smDLtxMD>BEmvSTHt{(O zStf5!cT7s6-{=hbu-#Z-k2P|ULI~2^w-i9S<6J%TyP`&ChTpjR8!Y+ZFog_$`FU3I z^-H$D(yZ(9cF|B{3J=>omG2-Y%kXAGlfWlZ0;6Y1@Too4iMiKi;~zB(scfcsL}nsFriRS3U@Ps{bXE?jOApCz=PKy#PBXuAu7coX$OfHUi>O%Qp_ht?i(f12 z=!=v0gGd|1?brp)u<7fe+~V}1bU7p|xH3098UtV(jm7A;L=S8J51{1#2s4~<0;d_L z*T>YG4hkW15C(5&UNF9tpCz)Ej6`Qnaw!YkmcXa_&{kAXqG*ZEX0I5$ViXtO$ioH} zF*atmj_@gl2M&|jWIvhb{)}EMS(gZzKMtl>8*Vs1!b2pkm-vlP-S75o)aE&oqiW{d ze-TzUkhBl?`67%U%`%{MiprmR-fkxu%%$qGWN?t2XPy@@fMmON74Ub9Y&23*a-=w( zt_YVVFY$f;f=R_e&DxUbSG!zGI%?Z{Ucq)5XLGWIXBG5%1pHbvjNw@U8Wbr6mv29! zCQ=Xqw{&op*w|>W@1tx^kWTYH`UnmMyE; zIR;6l`)!4ad|)VJh|b1Bai+=;-<{ea%}FKr?FPoe7|3n+A0uhurqE*P2q4hsx#q^`O!fJMX2?@6#R3H<@JWb{O^YD5RdS z#zwK_aK0tU!_XB;f@~mFwMfi*DcDQSXh7OpjeDm-{^9Lp9x>mB%Uf?nGjAD_0ttmI z)|%LW#yP#Ewd&K4KF$fTXZ8H=wFSm_t_!{h>D+pqW8ZgY-%jKRpKQCWb3eGfcwIfy zdQn9Eo}z6L)Aqc|E6Q&;oNRe1(Ou56rm@ue4;;HklZ)){I?cbkM*P<`{yX=d>&rwk zi5OW0Tqmo!z7+IU6LQ3R1xVwI5~*HPu19^pkRA#Me24 z4`&|rOQ7`)L|mFGj1wToTq&6<#ck)tRBcTr2r!vxDHKCTv=luW88Q7sgcU7SpTAHY z`|McKx_Nyx>)+&btQ)j05L#z?EY!R~s4|%;=U+ObRH7<97uuL`;{3yh-QddO(vb*0 zi-w4>t}h*&cM*b5S(Qg^U*u;Bf3+zCH~}w|Y?l059qN{<>SKZ>Fkyxjb^Tc$(@dfp zD}i1Bx_?mm)*aN;;)lYt6fm;1SKbK6R-#`b7T;(my9U1cg*8=R)8$HGafqOPCvL~K z@Hv3+1qDSmGEo&CWz44|=V?6C9~MDzUGA|C zV(td;TNSFD@1i5-zaivOkX-Vt3$VLsmt=?EcAq#lywKl5o{YHnWr`{EV7(G|$Ft%N zkGrkO3kwC4`HA<%aLb|2B^EN;EKZKL#tZZ9%r7T2P6unTP<|-sVS_;>6n{M1F6Tf@_>b!I7FZuWh>xgFnMWF(o zmbwV~e>`FSx=AMd=7u80)*M5Ujr0c^zwwyys9kdcg^na~O@^~4@?j4jUh(_Nz2vCr zNG|X`r-fQ=&a0bc;^R5PF-5h=+TT1W#-ayoqkOsNG1{>!e3G5iV#Z39OjzbVL`MF@ zn{&Iw=7n{$R1&boxMHNNIa_`Mw3u1wNJJh_3oL^u;H~4i>J%Ee9E)T3a)p#S^X$~A zg#e6=Ky4#Rq~O}BkcTT7Q2b#D5e_`K0yxQ{Em?-pUj_1j6n)=O`bL03; z!#fq~-cR0O73;Xc-rBi!LP299U2F?Ne7B7S zb!BEEu)59AW*(V6F|wpvMO3uU}Ie;LXpAYt$ zAu~&*`W5bi@O-no7HdPHIRXhC9wr>gM7HNeo6&Iv`eOF#Bo$ArXTvgr`cg)9B5Os1 z7ToYW)aWAJcx5F!r`enH|44EoIG=rFHB~$lTc`CppNn=~*lKQ|WuQ)Z8FQ z7GdYdG1;b3b;|}dfAQzd(|a-0o52)3vQyVb#Q9ElA-}+hJy{|}$CcZqlk|+vDukvB zA=Bv$8XQ)8KYE601u&8_LaynIPn;1q=B_59q^(&hp*1$0IgH24@z|hQyz_(EV#8}u z9x1wnj*eHp5hu+KX6XETX9cd5E)M;2=Os+WcVUBOvrEf;l(bkSi;{*qleu%tVixL5 z`Gd<~m|cNL(#-D$FAY_6!!mpw!F|=RR23z?1g4blp(l~h`9Pxgb9r3HMb3q}Ax8AD zQ**iU!VlLGY+}nSk>#>Fb{%L5KI|lO;_s~SMjiqtCnpPu;I;@|JV8c`)Iwia92tqR zxw8DCZ@C|0k$r>&r!!O#s3|W6XSW;NEGY|;2-Aj!IQZYbzuK&X2!@G({By*1 z=Ac)JSpOgAZHL7hBTcJD&3BkXKHpV?*K^v{@RcU!66|3VFIjV*fey47qWsWTjGSbm z8&^i86S=+*Mq=Fr!%{;k-`^u3Kf#1)j@+tpc9br2{F1QAuLidH){QH=MyMoK~kWRTB;Kv}dx*!zM6pY*A7D{1oJjQ^6o3&)w6p&n{ zA}pXo$cMtKyav|XA3|KiKX#D%z_NLkF?sv?NVQB%Ch`KGbc5u4)M0IYY5&2jOb)=& zhrbf=t>ENOKcBVMPXSPeEE9q%1@5|EB@B8#*K@-`%GLzum6F}W=A3Rx$E*L3v9FA( zs_WV|KtYgh>5y)a1_eR7I|Zb>n4qy)#*r*b=jqp!M&oi?q>(2EMLVm+*T2yqfI2a?omFfIk)UN=(pt zsHuI+;Sj<;pVVHd7Hv{4Kf87bs6cgj{2TaZ&E3C1&7`x4w0#~K235IiyC*gi1^R9^ zhF8|2DyZ#T@3vn$g=L7jGlqS$*+9j5!FX-e@WyZPyRf}gD_f$7Hvi{~466OH#z%IL zK9fPS&m{=}@+u9*#x494=}Y<}IaLZ64zXhMsLhcGZs+e@PTxr5hX}(AK{5=jeIvg; z5;DZ<+z!%+Yy{Z3+3#qH!Ec;6b+B+m-MAf(-;*}*US|uVMa~5!c!U+3p`WV6G6K8Gr;z(!8BvtXGsd}iq8imX$inT*Om??^i03eK$Wlm}a3`k_WO*QHp^rtRq?^J#k(;=z!Blfo!Ly~W>4S))A z&QF_q9%yuw4AqgbtrP+p4%S3mmEF)B_NbBE){iRJMJc|Ew7$xG9gbgCSeOQ(L9*M)?{~tv8$T!|goP?CA^_57BqXBU2FqMi~mcn}&0l&7x!^3yu-n z>2w#DymA?a>75{={2ox=ae**$>UK= z8)K&0&970avJ*hR$7x)6uF7az5ljbF;+l(jD zg~vX{o3$ee-M{ABgel8IvV;$T(w$N{KTnvc^E$h5*#)JV z`LZ4WHH9uGCMgKh_oX-=qA`y-3b+O}#l4n9*yLSsMTCWIij7*hMu?lQ6>sYG$DB?? zH^Xs$Qmtb=Pw~Zd=zfC-E;^M5(^e!ix)IygSrmXdAx(QKHe(28U@E(x#0;gk$}u;L zFXV4xaxo`7i#Ezd>ai_1v!IOKVwut@1KqP_HLaXPf8hAqZ9~ChDR%h?e;|=o+Q_WGO{&kG z4^cV_((Y3UtJ>R7a$lHm-m_51(ja(6I`c|w?BE&}jn>AZu_uoAnWyXg8d{4tEiuIE z-nGN+4p(TK3)?Hd6!ypmfVA&O8B+7uYDxVyE<4WX4*M9w_J$U@B@gVR4R9Vp)0+Z6 zGZn(xcER_D!>y2)H57mA-H5+r{5B6Aeld3mE<5;ay>()E+W+g6tJV^o!g59uLWnQ% zn2Q}#vM<&5-g2(ZyFMh;6ph1z0+q(}%;+^Nb|sT?1p5CnfT}RrUdb2{4B=V zB(kunJ#xI*Y)kxH*gJ{XLM2-H*)|r+qlM13<_Jh-4UrSaLw zDJ&z%ZPu05xpiqAl3CJdzRZwL`#PC_nK$wf>X5UDIqAPg#fk{v;lGRfoKQd?m7_TmU~&-V}Xo^#qg^avk% zfwK4~^vgQ><5+DfMl@07q#CNgB`HP5r_|XK`gxOwq9ZOIhfldmR+A|k=yRC`Z?<>M ze{^$L>C0(mRw+=3O9X}4Q8AKyb_3tyJ0uX$fZ4f{crk=5;MJqTpm-wwvK>SNyg6ZDkQ=g=FaE z^zwWsP8y-Wzc+RFCgQS1BQ)TDHq&KAg`e#YJTS5BE0|MTTjTMjgCHq4zcGt)Cn|Uu zHLD)s4V{ugaj9AKFFfFTug}K@wHpv-d*|6gyCt{ehT+cHve8y{2bVR}EMsj;2A~5L z!V0cDOQOIHx0n%hU_7+ipbtw`fbTviERg3(!VAMUjCaf+!e6cq^YytjH6*Z_%V>{j z){keu@#g0*Ul9m63Hn*G_~3*`;%`tI{H1$w87gkXNnTRhPOGet>}JKyW4RuQItQ0h9wyH>FUroRve@b_Ke!JdUuk{*8185Pf%#>yT-13TRQt?yrCM&uatG zl^Op*nvT4hpxo&&YZMJwj$#=CBGC6ZsTA?ufbbbiuIg`o3M7M(v1V#)waKvhC-%0> z&(WT1Pd3&RsJC!qEYv?2zB-iNvQA&Kv4nyVb|*$*nr=5g!tlxKz+&y!H11=a7U3Jm zZ+9H>kuUx3h*p2)2Ih`V{_{1G!gal+2F^FnA4hA>V5a zsGd|r>Kp|o&>faF+{#)cFT0nZB@(DtMs3`}C?aQgTD5$O&*PnyP*pz(-5yxmW^jzt zG*0q;9+nPP4P#|x4zgvbibKX z%=dM%U^c{xN>;808mXyod#%pF0M^Gt z+(H;bqehy3?)GFm#)Bnn40*oHO)bwA$=}IXsOIjfmR2X_#IDE>>Q(< zUeJT{YfyYXBCZamdGXS}I=Q?EIB`=(+<7`wC(sB=D3tmfo9)}5iDS+(IDEs%=*iC` zOo>ct}F+G4FkSEnM_ycq~&prm$Tp2)oo}%*98z;UQ z+!@wY>#TkzLZIpy*dvKBn6zkLLK27`nF{ClnaZH%+$TVce=H(DO)LMwM_)n-gA#Ic zeWR9~Q+Q#@lO4oly;yW4dl{tIWT!Su8S@p=Q3?#~zT%p=*zKmu79%4Y9#t}n%^wu) zS?=YE&FB!cbx!IOS4W9QYl@!&U#9ttFmupqZ1Uh@%e>yA&rND+l-sY+7cDKQt$rC0 z%I%>3(HO3C@KJ?Gek!Qy1(Qs9{P9nzQi4Nkf*i&GEJoJb-J$T9*J|~@JF*@AbJBS^MaMZNbSqh4RS}ogpJ~ng07HA( zgLETe+6K)@L!%=!_xZp>x#1BDUor-h6RN)cuT4jUi%G{TLgWUuDkUbR6?9m8qO`|0 z;h^Xt1~T(fcYVhhsM2Gy+K%{_&OC%!7XLRF0ALJLt-!RI;6F8pA392ejfdl}T{p1#X%Zm{TIDL0{U+7*d&(T+%Dk?5|vIDrOj(S001lf9j_Y>63s8FrwIhh z)z2EZv3{=v8)@64v~%@?oOi|5St0CAC`m)7T<9UY?rC2cUsU@#ymP<~g^Vig$9(xf z_B$*!?8tpX5z&aA#=D)}U8^HY@6-FUSvr4U3^J`Ui8Sv+Ny0s8(6q?Oh+*x|e9=O{ zNo#&!f1hwvkYe4g-Q8|pUYE-2a?7hMFX`_0r53?y7 zm!50>^!8s@(Jp4MhTZ3GCXuUmev8GFPid!2p8FRSh}%nLX|Fc#rbdW0nu3*?|jy*AiIQ zvctkWtTr4jbu_U7-CH=(y@n7q1eiJ=Wsb3;MJqb1*d+|t3qW&3@X@BGmzOilb>Wkj zlXqD{;Ks9;{8h9K(`b|~C-Y>>ubxP^PJS3#bm!>_?{PjpFC4AKbVKORP5>xB9-wqgeLX|1 zvvx}99w~5J_Fc!}ko?1yM{>dTag$nA8jE5_m@+!5A>fYgp?6by+&@rx1H+ZC zhV~SGck>Alc`PU77HXf)usSXw2-_Q9B2g!bb1w^9C*W6U)Z~FC2zWngVS6-RZgN0; z^Wn{=6bKR4-z2p+()};F=p=jgN%N#0vq-V#=XcwS&{xcXMo=7NW?!eXtA829z`F>i zWl;0OE%tsq8^()2${U=Fa2qL=@W}(IZ{d(xi3%U+u%27oSjP!9vXj)ydAzYyO($)% zmu;i=;LjElqVSK_M_rj9a7Tqao;ab&7|&HIC|s1z&sPftKsvbO%MU5AarHR4u#Oxo z4jW>pny>xwY5E5T$WQdJXB&K^X<|#93&n%NvSI+jNuSb*JwHhtd%egcpw`s-emZQ0 z-y#bGsiY9H6I>&Xk_S{l3Ds-INF=I~%W{q{EfgDx-1y7@=OlHeCEm}$MnwArEuq>W z0BsOAC^vNkOR8X9|0*(YzdDxV&h+hG)BxjZQK+BcYwYr`$9uFBy7%``^W7T(VPfSU zdF|CcyiS*$^Re)u`M>QpKb)c?`G@C1VdDkOFEDaB6yff%a zQtJHvZ0~e~tS~+3T^$~Td%m}yzl67w07%qjy4q(rA}^RYX{E+eo2rX#H=SnpOi!Cr zSGZC8@QJ;eDql?hMi}BGY{BmdSTqxyng2mCe#AxPyknCUdHZv&3Wlb9e(#h8HS2&Y z;p6Tut|A515594~*a95J$YpcxUsj>Q$Bb71Qn+_q52p%eMN*r=4_1YK{6wRysKEmS zFz@ocG&D4jd*5`8w8DY-637~2(bnjzK;qS3`Y9@EL-LNXiGCk=E}L#nw$^BQ96Y&8 ze6%8GY@mPk2Q6jjQ|_>V2hAR#GRs7Nv{VD);}wMhmruAS%gfWr>{}?5D~Oiq=D=zz zIy0ONVaAWM`+%@Aw#yc>B3*?t445qzY#YjlpDoku)UBW)cckA*-&7Qa3J{z0xi}rp z6NJ>o&~2+KV`oG=97$#0n2d=kQF~KW1;z6ky%4Ixkv>fqr&1>>Sz65wpL==R)5U~Z zGr2e4E{#G-nN#c>X=li;#%X}nUT{zNRmVscgw^pdyptKY0)#TTyx75Cq>&-qnRQo+q@2*1M9|%VtDTVCCd4ePX z)w%{EK+MA;wBHb1gQGu%y*!p~_n0B4qV;K=2v6fZ0r!v&(!$-&I7YiwQ=rxY_^Gks z1;P0WQTw1?Xm@2&1z48XTk-8u z=3a5`3>jPvr(3Fvjmj^KI!JcA;cD~nE7*r6t5!K_G&NZSh5eF_2U$akIhOP-X6F6L zEo_?6esMq|p{axy~l66d}4#i?}qdpl80)N)~)9!+@6y}p!-Wn64(#$8Isw707+ zx8IW9keR0)H4?z4CRs*>TST&Ox1aEn}8r-`@|YCTT8Qj+8-Sv zxkUa4WAHSkq7i@`(`uy=mJQPR>oRWj(Ok!*8a2i*Ukf~Og1lY;GWH6{o_9N%sO>>G z^t60oW2cKVN85}ned;JG`8eyLE%OIsX-s~#I&*K;_r@VcC-HMey@^TMtJ)>lq{F7CuT5xOdqW6TkM+9y1Ju( zr5Uz%_jM-jU{C+-q)h?CcxPrE0M2_7R|W0VvE_R*1h}^urP19*N0=9)PM#N8TFx?_ zAxSOV!iD2&ZyC1si6E!@wmA)hJgEu?d#5w++#>E8`c<3iVHP9yHu1>R-e+2>t@ux_8XsP(E=b4u^UKZ@t8pkf6795(Mg_+7yUYcu6yY*|$9K~4Krqv{wg9> z=Rx*oUeg9alPLdMO<8YEJ3Jsa_3SzupB{!*<6)?uyRR2*C~yyG#v!h!qpkSpY`~ z&>lbRw|jp6&^Z1z}F zeCr(?%3Tz=-y`-%Sc!LUzu_@}51>lht%V+$*`4S?RNj%%PlUm$dT523o!3F=W!{ zOXED#4Z4yrYn^WTMjUVtk@})sqL2}&Ff*Pyi~h4As|j>11y4fzMI<4*0{Jh60@>iF z11g-5R@|3}(-p96O=~70Dyb+{Z8g4^g5G{}+FqC78%l3>=Ew{bB~UYr!1>g)mr~aV z#5aLz^8q;YzUTKU-}|lus_u~I>J~wLI4y-s<7Y$wLN1Cv7(~hzxZt0(nO_9F&Be+p!)k}X-v);oDqCH z?p$$&w7dpxZP;f>oYb@ zY)1NZ{a?APnI(tyvkX#1qHx+pn8FK2^t7YK#mZwh44LYv z<)%ddp~2+dxDbIM`TGh^OLibx5zpeXY)*RMM?546bN4?M^gqh9V32@We6Kh9e0Ex3 zw5x{@|7d)><}WLTIr>TbwVbOnXY%h1+`EA4-frx8F545%%=HxSOdEV*ee zqoEY=ymt5?cHJ-W>N2aD)rIXY-LD$JR`5a3^(U(3UdCD>PuIjOr>NHkFQ=`&j=P>y22Z5#L}$TY9v{QaZiL3pi>?ZN1x+QEza3DYkTZ zK=T+rI$dBR4i(sD~QIkOwQ{vgyaGt7Ru9WI)l_GJU+lx$ozNW%&H>5ie z;O+6oFb!jD5UOn0vc36eHR@Z!k$~<|(apq8k~faYt>ooXtjUW5Wg8V&8?r6*>b0bH z35vKNx$QIuP5PUVK%j@jpS*?G&gcPCu{C>pgrB$FMLtw<p@!`D%Y(u3l`SA{7Su8qJye1@`LQ?x5e2UM#T%fOSA`BA zOj&oqx|9RtHp1MMOus0kPp5H&Bh1Tb?-fs00+2T>@q zR|-Zk-Tje1Y^84hspDEY7w8~*>TMkndqn#>Iu+rw=ElOAD@h6wafdn2Ah zmiWp>DI<^NRx}{Wrx)@M7z2{7{Gi^~ zGbqTwW|(<;*MwOwExOKS@S*)r;+9{2Qa?LOI7Y_0DU0I4gJfa)k@4>2Fqwfq(#g#q z63>EuO1Ciw!&Z&-m^QWE`LSF#>BA={HPibe(W~hWu36K06BZF{9M#e)BW0W3>$y4y ze4x3{@)cbaFlvot=efv613y(%Vg-d1o3_rPMmc^)y;(NJu(hMK0S0J6Z|_77$9H#W z?v39^44U#EEYfExxW#Hl3%fJld$%~7kH61sQ@|fn^i^A9KK#{|gQPv2+2}MiyEr#D zcM}OX_ZDAx$LR^LVEj%)Zr2D7uD7bZd9+ME=Q%pAesggBqyhh1E$v{?Bhs-BbV(mV z!#dcj$ehn2+(2y`^Z4cLYU}P4x|BgX*9Y3>YBtAIdV`dU;mAhp%~&+KXOz4@Wv|k0 z(A$@;lU6o_1RFKu;#13t@8~qmAwauY7)bMw5He6x?Gr#Ch}+LQsi&;f`m?0CAo^}C zjLudEV5Rs}K<2A6hJ9itw(a&U9tp|2z9ikfbgI&s2jlqx|0Rl1&CjIBDRTV3y4wG4 zy>e06EX5J&FeLri2#^cp107iQE61p}w*kw>=mOS~D|G{{*T)Wp{m8hdhBE;Exv;}} z^`P;AaEMX6vbL&TqS?-3kx)p6Pr%2J_llhFw^dzsCGEMK6K}r%!^U+$0nq=6(Pgz1 zG+ib(EUnV^0rkUMB5qX|IE_Zzw+L&kS?M>wxp?U$C#?*h!0i+MT4Fk^?o`6U6D!sU zZ;cV^ZZ_;#6>Iw$aYav2(Me*Qaoh~&ir6j+#3l+|&?)?Bf^k;Z1iqE2wxp$PR8*TS zMopb28`e%t-oBSR3LCng!Xti$+8K=-1AwX4&JZ1skc~0qxl9o@vSn(4IY*Y zBT^EsmbRYCZ$c!yPJy;~S{YNRcN{+f1eWq<%_G$tJ3F<-E4RbuSUe6>Q67Cg-z6NC-s<2)%Mte3&L(k5XP zO=16ddg|wky@@q5ON7_Q@4%7NdUe6~&jbz+H45~brT~HplFb5{ts%Rz<`Nhizsaml z6o6bu>wE41y54d9&h7_f2-11i0^;5jF!2QCb{9GL%5subZ! zcQ{jyL%<&yax`cQ|1@ZvGH{BUNAHp~c{Kf)9i}!9Vib*fX{2D-OAZ@5IT^h%bv&PQ z$LnBC$8|0{bv>R3@Y|cc!`P&?UPZAM98j*l#{&b;DWp>zJu99{SKy zbv88iLbZ4zG|S!`x;*WeR~02~ogj9HUFh%%H8O~}l2duEtK! zyy0Hu<^?~@(f*7E-pjwnWN#<|8?_ob)Qc~S*)ECigdFzGX z|09R={vWVH(`f4ys}^2Ap`1BE6>+%!uDAQ+C0BgXXIS)EF9VPi275&NNCZw#PUPC^ zhAfg59vW+ufGHEFSRozK3Pz6Yd>(t`So}AI=Z^PNslJ*X>ko-+XZ=S?#`1QYa;Tdg z$G2>lu1c6IL`08Aw0(NN6MYptE`z?8L_|=gOhtpHz>|?eJyI#J2m5$Z` ziDFs(fnID0ENGYf%;GxC$);x(1CvH+E2YTwGh$?#?wR~{zs^*k5htq9<53Y2a6-=O z$*YTib|Wb|n@+^Hq+#b~9OoY1J8!-MC4(cX&HaxCS!D}~R zcp+m-6q;ut&c3D&+s1EL{4_DFR7rzpdl)6sdwU(!)jPD;IwgH=O9#rtQ6^VM5|l@y z*}=}>J+@U6b)E+c+pPj%$Rdz^mJ`BakBtp_-E?_><#T*l0!hjrW^4?RmEk>ncp6AT zC_L%6DuhgNj`U(IWb6|+Twt&ks&I#QAOYs@@Z%6sRGwh1;+bFGfq{YcpFaOsay#-x zy9Ko-FBnwLlCzpbmoK}d9aQtwHP;Q0-)*L3BMLUYlHo%`nV^VWa%s8Wgixr%TJN)o zOUb_)23@!=GdAc$Z@3H2e@{Pr1Eu-1za@N!!>COcaEaM9ntnLw}M-`H#kih zOSf@R{Y~j3-}_qUT~Osp*wr_%zp#ToP9FB2z>M34pz7nPBc8HjVan7|B3e~UxKowC zvD;-qbU-%Zi%#x{1u`}EbH*?j(eMBM5JTX;Ni`KG+Nq-+)A)OR>7X8*nr^04+^S>$sQT4CR79w&y4-$QYGV^egvbJ+R>EbZPi74dDqEw;d`o>M0`{ zl`ZCi-8Yq;_9!POZ-XcI4@{~oJmuOs^*B>B@$UL%@@nFGF$mdL&yLXsu@=t z)#>-^eaNE}S7n=ve6AEifz20e6MplLyv+D4-2%?j^$&)aUoWECuoWY8($c)@KER=C zfVn=C_QwUqzfVBDC7qF#zR<9W@xMhr5#FB={QX-DMo$RtrQCGet(M<7+Mb;e-nOS} z#cⅇWgFIb#(m+ypEJ(`@WC=`Q{#y`N#()x#7-5NV;dkDyx-ctX_$4LQw{Wq)?pofsR}Q@4q2`AOYr#( z=~u|CpHS(BJMM`~$gyu0%65^1c86_?`+9`cz1m3`Dv}Fg(n%_`gY`AdiF^kCGW`T60`C5wZg_Kz8PBO&WR^*PCLiCT=qMG z_*{7Fq#Z<++mTpKM;gmBp2Z+d0AmT&!tg#X~$Z;~vn#cE5 zdLxQ>dO?QkDIjTP%S?`(HQ_iA_tNdVp$DQw4pPi7*j1!|$a&8I3`%&V|C`aTM(0*B zU(SyzzFb(%8cC-{@!lfWy98s0F-pUau4Lk|zYxf~NN-rRLDC2`F5bzVUD*~~z`VlP zv-R@V_ZvA_0Y(Za9r~U~#_~B?_9{`8I#cI8zHM}^OJ-v;p`^E}a}AlNMftcn5I-FA zj_zBqhWtI5?^3h*`P~U)_Oay2D+gGC?kuE4*QAlkTgutyz7GW>u~JH+J5wteNCI%l zE}vaexE%+a4}`9#7UlxrPd?7b-8(abXE=z)1V&A<3e>b1pj%m=$5-@_9u6~-!rwWA zcru}yge@xF;crNpUy-u)N$5R{8Fq}2pE-=mI}|^~a$JIt8>Ggupwc6KRSsZyNxs^-Vcq_<|B`VO5wyqCZFvS2BdW=854D3|#cj!pC%eqE~sm9-7J%UG;uX4TEZ=i1=EU zV6R>dl<_@bH~-NVaoEnp6z`1wU|qpm5KCPho##xA$|<{ zwXXoW>s!myUd`QUO~NX(ksWWFI*ZSZNA{}vAswH&O9m_%g{@6ULdn+gj4u7rN$1mr zDjc#6+-A}b*bv>*E&q?F#W~*q67w~I4|3wR+sm_fx#kg@3W#5r@%h>fV1~`9)u7Q$ zZ(fx_ogYgy(9d5)EeyC2{m+^H*Wv!fCH%}gra4Cje97&GV!GV-vr_+>?F$lma^7i%mge9x%P=!t9$WT{f0hnTWUb{ZNu? zSpZEriPs#>C}}=E(6_O)(eUg%-JFP4N8<9l_a%m|j1=|Q4>l&)0u!0=^FmjAf@$pg zOTlc!&3i>Ycl#j7XPjYkPY+zsj%alOX{~EEEH(v=;f2b(c^G<mF7NVE*WzFBYmHwuax(-hb|%#) z_4^Q{^&{-^RoH0BlQ|7Uc$pWL9$tUDw*vKKQ;$RFO)6{jsue0oKAnBu2%Uah&Kn9; zxuko`hoJja`Jt?X2Hv+sDzIVDd`JLcBTt92f5ESR&CjI9B&y0mfni2(;pf9>w{(IY zvEcDu;*hJi(5oUPPUn@cF}?evuMdH-YV*|w8s30YVtqby^0^bGfa_8cmVijZ@rJUi z;%u0a8L|ILCDdq|2z;Bq$tr2W8Ny5u@%%9A-&W{9=IFm(d?S5<(P3~rB>tB94R0~u zWS|rNy1J%O0qG<2aJciz#y4@R5QM z5tpGX-1$o;zOLM0*e4j`VX%X%^a$W1z`~q9y<8d zKQ#4dJ|0Ii8uX6kJZGNb$86^-ad5x%i#Ir^*FoQKsH zI)C&jQAS;}V{FyCd^cT2-(b7RcK4eoBVnE``Z0y%N?=On){NhnkvEI0y?V~Rcearl z+x+T)hZsdj74WIfL^{x4`qKymxL$_zV4{!Nr@f&riB+D4PE`%Z>>9yFyImeeci$n` z_P&^>Q>!fO{*B{E8&?K*4kG?EB5fMZm&`7>q0T(Ei#|GLHDY~pTxE5z$+no=buS|Z ztH$4Hy-MeATMC_G&CvqOvy?3?^`Aaqk~KmobIJZNR)4x_z&Ab4FqKBlG!-IoA5DYg z`qEWIrYvX3K4m@vBQq(twm0n)8cCt&2xTyUBHycu#vg7E|kT<~+-B zNLXY(d%MKbYRm<~1++Yte*V0{k|{{epw^s#xHrx5`)-XHy!L)w>hS9X$!w!VKtq{B zzoC4Sp##|~JAV@?CIxKlg_!w@_D=cY&(vhEs#e7yQ^Kh73VhFobm~>L2~WHv6VCJO zn{HeiinYv4rs};U(;w;(L1%n7Yso~RaCVbP4*u`Df(Vl1Ksmvf-)2u^PgnDF`VP44 zUfuvG57RKd4UgLiT!ju?F7#u`0B)IUkHWNc8pu2w$5}7AxKG4H612AjuRrg}k%saL z&0P!!+qAfDNgg)WUHQ4)#J#NhJK6^Loy6#8d>sZOo)W+TYBu}5^4wAsN|~)1*;c7L zjzz}l{eAzEfkX7@wQC27b;g@AZGr`vBNMs?#hDsqAx%LF zs3@Y|S;f_F^tt)D_i!yMy>AIGi4RQY3lp15UkH^~VXbT)vlu1TnNF$Ne)-%3xU8W# zrQcom_Z|DCPJ3Qn!SH6m?rpDFoYhXFWU|j3up2F+(_mjf9F9`QvhE0;4;#DKc00S- zT}INAnH_Le8O)r?T(vHT@;NK27iQRUSk9R;ymfn|ZfN!}>&;19u7%7{_bZpi1!MO0 z&NCv%pwSTfrpnPLZGxbSPU0c&!$OU?jQDGzDVw=nGeS2Bpe7{zwo-T(vrekFd)id9 zlXnDLG6iUzgBR7;qG31bQLYv4!K(-NSw_|7UKbn`c76RVmp5OS7Ye@PaPje-x$M&B zQvA(xnE+GynTQ8>{S`0~m2rI9bZ(%5MgNj_JRD2vop{k!ShTrun};`Ur}lTzgPl=hYOTW0@?wJ*9Uafyt{~XXGCnxe z8BE!wZ^X#u^fq~{eBv9W>lTd!eTLH5rZj`)tz3aAj*(}IOn&7V+K`C?g-XkHLoN&t zaZ)m}aVf;_z{^}JB)mEmC&BE<$;H|F^_yzl07bBAp<&o{mdE8Z#(b_)iS%qUHj`$m zIt~Tuds=bjH|I*=*3%vi_3fbgGSNiZ{LCMX(7(`U+DOiDq5y z$v`Zcz2C$;e9r|{c^!Wt#m)2jt@kpFCQ&p31lT?UwPv{kK9&QuyjP>;LtSDd2vb-RF$TjMJN+)~#CNQPBiChm096O&KJ3(YtF z<$37Jqocjd+nn=hM%RFjH=1wB{4LLe+}aW~kVxZX!Bi*LRH{Bi?*5S_Wz&do_@fDP zMZ3pi#REpW+>@W#X>D?1ubcKa^~Jt6 zak%s8V;^{qu9_ZJ`JpqO!K+mNOb%=-1l|43{~<9E@bGbeUbSh3uGQhtG;EUHA50Uq zB(9;xESxH6TAROG)%L6(7N||v>3}@aX&(O2BRbPv3cYNBau#>ZbehAMrq^HAef*`HLRCzlKA9bEp)(0(T2MxsY2N zQ0sJ%xxh3?pfh3jy0AO*|2*LT??;wrz^05ui4M)D=cFeuAb8b}D-WBAC1 zuH@nTwqg!lUQY+&EbO7P;iH@3)AqZY`0z3py5PTg|2`-^X`l8`u_ie^ZbLV+aTpdm zzhemb*5P>TRUczz-7G>iL2Ygiy3o6MC@}P+SLAQ{za3;hJQ@1dFbO;^DzJ)tOgCA;3Z^|f zS3f~Dn4}FL&}CM44jH{a1eFS`wmgX!=+aFO{{K=>eb0r zzjH9j{pQitwb9Kgeb@T^mD6K1$oWjB4x1k9^WRfkKXjjjL$~Su4d$6fs1UQDa|kMM zhfiXWhhw>4`e3`ZLEW3kr_mVDd+GLA;a&>$42N!jxlW}2t}F)ux4kWIWvX$HwJr<1 z1mAQ$xPPuc1i;}g;`gmMBfxeC4&j3&f4s^6>MV;se^La`7_%1l>Tm+|5QCZTG4!v2 z4Fl|!XE>-7tO;rdviQ|k%u|0;QT@^ZBB7gpfl2YJrs6ByhfoYvm z@G9@4JVZDc_peF5{~A^O^Gje15LF=0>&7uFW~5FW;P$Ayj@|C70KeoO9}w4uNB^^H zp4Zx|GcbR=MlU8(>%9r;SrC(WCK3@+mU13QAwq){78Q*|9HgswhG5TNk59vdEQAKq@CINc85${Ya{vwsMY^&v_E_cl>O z$*`U6k)02$PA;Y4l?h(9R*SBJUhmlE+&x8qj@tI2?c#&Scuuo5eKvIe2yaLy{BDv1 zCb{nDhq9Kd_`Zf~U-+V%d(mqI;6%YmtxQIINp^TKKVYdnf4bHakv$u>XmI^H{buR> z?hcvxfyuKEad|&#mX>L)$_lYx_sAn@Ho5Kg$!>fsMC(Z_Y+$akr&#&_3WLYJFhRKV zv=alC$R7{%!v^kPrb=atUfYm{Z6j5V<#_ZCtr-8av0OkzLOKlkiC`|V_3gQd%jIOG ztq4@C^eR;=M>SHAWS#tCGEf9#!E3G~0rx9HY|ZdcRZ>@bU*{gX`yHxWJOoDou#Q^aX(E`3n)5!To3eiZ zM}`_^XBy%eVnfyS6Q^B<+5ew9bbI@H`?mige%%V3!ViHU^Le(ERcQVxL)8>ahHFH& zHqriLwI*5B^nnd`(kn4<);xjOs^H6&^t3NVhsAu2M(yDOJ(u0ak0d3UT$fbrGIcV6 zM}8%g+)3&{GxZ}um)lkz3XNLxv3$otwzAg<|2U6zFlnF-?L;PrI87THgt|H=Ej(1~ zGfj!C%tZR9+xLC@BxAZNcl2EuI6iua0>E*K00H^kl=SuVea2~>aPU9XN*ueydv_oG z*guWznD?uj{U`}F6; zpI#^pGcsOh{Of#vPY%~nOFcz)Z6Fqjso;eTcNvOojn#Wb|}J$mN#bb@k-#v>^G@exp__ugZ6;$$-zux zLku03fF|XfPc5|OYsG;84h6Py5ows&bd=-Zn%kU4i*EEl5_lw=&v~but+6~;Q}OCW zmEUpyoPWvuM$723#H#nrW<`@_P2S7-t5!T(IHI}DLWxc9!q|=d6L2r6Uqzz(!(fi= zqi7nWbN=nSJXvKP617FNj16 zv&zZ{rdO*ni1pg@fL}Ko(I67TdH}UPwz&2&f`(#%5!DHfi?$aAxt2o_YG=^s69q%j zAU(gFX$y|m3@*4%Udd=PHmCd^Th;gX-S%n~mOhA(c?qCElB>3y!97$Ny=P{0u~@x4 z+udRbRuh5p${7x55Kk%|pDhSE@l=IW9p$E{ayTdIYma3jazLsb6058$B-7Yc;!3si z2;r)dE>`+NG?KUs#=p8<_sF&Do%FF+n%p6Afz3?{O3v=LXnDvr==N&O>&#OQ6|04VW5gwmKvK!+qs^=hiYnH^MpkQ-7Ic?J89m?TF`(% zz(!D;h+RGXA|P9HH_BEfeqTzy&Ld&rf+yql_@CN~cj~iz+ zUFw*k2%~U^;Br%gn~j|3Xpyuc#$GVdh69lSIyi))Aq0WL+BZ80E*FVQBC=l@1vRG{ zrWGm;x~1L3e_SDhp}3UUhAVo31ny#sZX>iTQn1d_$v4A-H$Xk-bSxTK;?6MaWqf7? zK{TNZattWG6fQ+55j=R^A1JznckGL*KNA8jO4wTUYFC2Y7u8tag?iWoioI+c zy=BPPt$m$|l*ql=6RCA+viy_RtY1+U29>ab3T5fnLS>yrjm!U|>@4G=T-Ua*2srdm zk`jV+OLvM&Bhn!tAYIZW4U&Q|Gy>AyHGp&sp>%gh4-B2}jccuEKkr^^@8A1=qC~eL$f{*^h1ZF6*1FWRz7DdTWOyYeXCXqqt7K8 z1{D0eCbK9uuinvrzl0m!7n{iiHnx8DcV{cUz;lq;pDSMq7qMDk04l$RVDa)?xVvKPT5E!7Eqb(zL2;xlbofidPE|>RCEbPD`1V#Qj3B4KePzIo5Ps->GNDTwD zI?;(@f^8amU3dLzvnNDvR2L7nLk(^Fwy!S|SRNH?vPR)}wC@; z;5N!lG0?24(hco|z5BkskBV#$<~e?R*Z|~LSgh>cw!1%9{!>_$Jm`w5qwci6m1_;* z60X4zB7cGDJrJ^_%~xWJ9B@8LL(ySjaK$gtoCipd_)Mu@!v>C#=WnJvb(*AAw%j9t{6P~|pok!ybRp9X%+}-fRv*4ZiMuT}0 zk>_d6rHz%JYQm=YM)j(&korTa^K!>a8n9>H zjKXlHp`KPoT5>a~*vlrX;<(QS-t>GQ-ZOV{v)AshtKqmT6l&r~)|79d6@vW^?0kY@)9epD8|_4Vlc6E=BU?P44I-*joW>nl@ozYfqZwr!Y`ZpIYBR* z`eoU7XB%%nLJu}Ia$ZKw{*Ymt2W||pX`~+Gkyy;SlQ=4t zx+Ki3jXjvOBfM#qdLq3bHUBspsWKc-ZQ%JN2>N)JcYF? zzU&TzJ&M(eoXx}N9Q1<26dYDnUT;s9ceht)NL7?*xBLuP@`qy?sI~`*{FIyS2*Qzh zp$d{IfnMTDfHYhKrOwnqFBdsc{mS{$w#ndX<1c0&7^0L&y?7`w8@zDyb~v*b{8g*e z-sw#l(!m@YM>H0v`Mfp2!0{88yosR4AuGyCd{IDHV0gLRwOpH z;C@f;RRO|m>AI$;tsj8P;#LV<7Hcsm*%KBM)%EOj;EI$Tb5S-`;Y+>>w*|R*%zHMO zKY`L`4uJhyVU%qq>ZO_zruiBi#K>C2+Z@|(@C^NNpA3h&G0tGlsR#=@J$}nwl7epg2l)r+jsc(D+=*g3a_G_g(6UP6JYn zoYHhJ1MEMi8bDPH*N~l;{Pz~wQ1+e?OGvAr$Wg#S$b)^8Q>R^mmL@= z5#auOzHUc2l%sD|bh(?>nlIVI07`IL$hPj){LPgPzR`!yX{`G{BbxS1X1?tO-send z!m;+HvH@O1J5h_#ac%J*Yx(NlQw6EEAl(plmHb|1xb2K@flt&_78RQq=5IOHP6Z?{ z`jh>!XWxDN&{yBW#orG^GV-lpFSh~(U3G2OjQ(6n9Intb1}oW^93dz9A!6FaX2iq1 z#hR!FQdQUEmay0i@jl_|E(+=0^*kCLtSI*@)AKkbp|*f9v-4!|Exp9sP9GV3eZT)= zKqo?zDARzsDu7`SeI;cxcKTEmD1QbW*lmV;+}=ZYoubF$I9UXQA9SBun>iODI=SP%aWVz=6pLKaLp&zb4z5s-*d~#fb=GV2XLY>` zvx86zjZ$*p$!df(DIW)gh|A8rWyepnz&@u&QMa`!t7G@qgu<}^S~-rDhCK&bh92J4 zHT^(cGgia-R0lS_{p>8jz0k`FUie%MZT}M-Q=>xjv-lgUX8rDlnPVYku*;o9Oyv&_ zxm1sqVCuB!0K@;2mPYPF(0<^R@VAiqUBs7ZYpxhjSWpZfEOnw}Qo6pxsOc<6s!b%- zE?1cF@MDJ!ig*kNxVGkNR2J;0+gg`-a9bHjm*|=WWvy~xXiIC&?)2jq7*Uo0;Plqy_(xE*XBZE1*0CgE%HV)~wu8y?Qy~KxjirxM(u%J!|OI~nuT$ZCmMsUZLd67 zN5`$jJnmXkcWblaK0*bCANh_OFlI_GYFqD<>L7~}7KQDx@$wO-$oEB;z`~EWR`~}> zp&aem+}vy(>=5pj7utoB+?pJZK1Cr?AQkrMIyE(zM~~Z*1zB~*i`F^Lgca9SanjL9 z+A>jf^szAXw402r=gMILvDl0u2)GsK(S#t(->d}CDPpI#vT^j6z<4Cvr#Jp8bcuS6 zyCNA~#Sr^bALPi8IH&uxA8AC;_2Ctq&~AGHk6|kPRFu z=!1i2IDa{pxTcme9)C}aG2>`U)bZFU(OC&uvYVHq6zpzDKAwq({gJO}@ACDxdArfh z{}#nIT%WG8{f*lCD2G(5=Ms1&ut9m((hH03V3Ayom$|y^Y1k)LdosmF67dH=yMfr^BRT|(0=ZuYzOc>`h*rvJ>^KBxVLn$SekU!0axh?p>zeRy@?v0(9<3sucr z=o)0Qx~RMj(lJcyw0m}dZ`1^8l`<$Z86XvtHnJln_b{Z~y7@M!SFFD{e|2Pe?qnf9 zsYb>|m`TU1h7jEQM8HJFmsi`S9HcHQ-9hLO^a?WTsDC-A;9k0`q&U}fR0$DSe_A}@ zEcq7U-XeOqvj5tos00_BbyMkDe@=2R#pidt-|Ml*!OvFU=yJ1(v;s9xP)I?qzJJW9 z5SMCbquOH5OcM;-BCq!2Pv$KL&ckXy{peL6Y0-Dbd2rRfsn=l}nvu9Anux4b%jAcQ zn&0J{&BiN-b<4b(IuVHW(4qv5Sd4ph!6tDy+J3}g(@{ocb4C{gA$a;*=*z+bguMqR z;s06K%OYlb(4189>ff8DXhx8D8E@T?zr#RNlS18hi0B!Mep6u~gg1aknz)zRi}I7p zoZIqQD1KKgp70Iy8GMtUA|YjS$D8N4AqYBQHTzDfa|)=lI0xdY2a@&My#t9ft~Mcgy9!47;d9j&zeeDdsd=hjagr@&fjW)?&eMB_vs zA$w6c(+OIp8%kq-pm_4dAa{s&ioZSk$<7mD*ZRjUJ#QCjPLn)UFP3B%P$s4UAQOe5B4304!QRJ+uwG6@xA$XDCd@g3YpR>v zLQB`5k3bDcUc_Qy^jF>$SCbE^Z+2ODBr9H~BIWTUJZXfjNPCK$?Z=OT#*-aKeXh(Z zS$$V66hEL}Dg@IlhS^QpKD*)4+304$nhUL}J>Io#<}bx%_QQCypG~U&BPhIygO}U7 zye&}P8N9_3iY4|Qv5-~7YdvF#^BRhxlnW%LS@NJm>Kg7qxwW(-| zOpXdV;`5_O(W!EXI6w~l&~hcv4vM5A2wKdY*yV%WQZzs8<&HXDPZF>@SgNrqwbCQl z73l2%Th3r&ea5nXB&-{Vem_DIDoln~FuD*HpCtEKn>#MDIQe0R9lwCAOqk68jNc(S zH~E9jI6Zp`M;9|B3T=gSO8_aVgkG^j4<f`P+s4Ay@=H%M5D;87Eb5!~>MTy)z# zCb2^7&mQ10zOJZ){wyuUZEcTT1r(BU2oL}ta@~z#?xDRyx=SWs6%YSgkz(>yLsdQS z-|G}E9$#iQ8|ue1+&EJ~f;@#u@GKpdofuIm{n&QdNYr5kHCsIwF@)cDkKr3l73~?i zh<+!}L}AODHgWBMu5FDed7&3 zuCi*GxGRhSg)q6P%CRKUtw=y5&0E5GSA^L+kb`g=7c)~gfbV)Cd4HSqr~!K2S-TFs z)@*ienkp_p5&+q})oi&F&Y8z;IJz@LXXAI{tn(^V-S@6bTlkE`8*2;|JS@&Yv8-*z z>wP4ZLCBDmft*UGGzu=+^qpR z&q+(Y-XqrH?@kF9^Zg+C0V`eA!n*`;GxOn1Y<$W6x1)wr6~?(Q!^-Tz?yca851kEI&oxo0U;UIsLDBy; z{=V)<)|MfgL7MPzZg(-A^^zY7AfZskr42PRz_}-`avE2!DzYQYxLxVnnz3fgY(NK} z*=;GzGYn6122@Z%ke)cX!}Z?BvhVLpj5m@FR_mm1$mcc3>+SJU zxbYV9@s8p+Yiw8|8A|Ur9FXF(9q0DGj;LGjbP}Y*Oz{=v{+%UaE!`g;( z!|j$NZl$3aXv?tR?#>LzOVD#&gV;xuaOttl3TG~h9e&3lcBXszIZJ4F6I0pDER?h# zWeTCKLb%XNEU$h1bGN<^^@yOtRfpq_qf+-C|FP0HB2!ZyCQ*KDA;*yq4~${S9xqb2 z-pISobuiiIyGOY%72`yN;BFS(>vW3(jw6)4{&MrDi~d%8{O`cFkpMaWm7RL0?WKnU zV%fsY342@n%ZXT6 z6^s197uPXzIQkP>BCw00$N()45`$QSec>|tP9*Eig3H7mct)aLps7M~B3+7Hd2(R| zio+Ea@#Z=)n`-um;@+N}vsGx_)lEZ<~cSHo=TjYYdirSL=x4gy1rm8)RK2+o~TgSHL*9 zzPZIeSH}%lz$&E z_oyKkoyHbvRnltOx>}F{Qr34T4;)4DD(=i%{NeRX)U8Bj$@pS@vkp5MwIAcTvV0_? zm(7)@`L#6}QDU^U20q!iNfMJ~n(cU!R^tUKBIj3Y8!G`k*6J;hm?KA6W3NdpYM(b% zw$cnfo-lYiG`ldjx?Lpqm8yHNaOfzW`3Pp`$~E2KSj(cq@q0r4XJ|LB@*sY zEI>J>2btfreG7hJv6yxG@=mX+^59|Zumf}Gj@4vC`F@f3f_|8L?eFCnCBwdnH+w#R z=g+=O^TdIa`V-cJq^EN7bF9J2*TgUIw^@hce<}q=!ugTe-FwK4ghEchegr0du_NFo zxbZwS@*6ykqIM#tEN&(^QLh30wlhSJ>Qk~PJ6%-?E0GC97eA_s;iV~2q9eGM8+dqP z(20D}n|*~%AC+2>wu`KHq+%bBSxC(Q5FJcXl_`V8sr4_XVC0CHaXFzdLPlC+*=E`S zvQf^J2W>yheQqtgh@{yUB8W-h-Y0ib957LP(VHm~4hPNCX>2tpA3(VdPj1t`C<0ZX z=D6*=={jTAyC!YUCyUBZ=$G9W{y2&Lek{Jmaeq{hnS^v+` zJBB?-ZtJ@5yrk3X->(Ff?zY=gB9uU%JwQLEvS9fN#ut(DyM$4?WUnc5m_+BpB2| zhrr8JNy1{wUNpb_C+T_mnLVnAmSsXLsT}025nOw!+RoaidJbC<^}A4**Lc?}vK~6m zC>H7HsO*%$YE9^at&P^` zoUt+|3->pzk?j#aS8cSN7mbcXqKvtQ@=Krl3*EeUkvDLbG`^rawThT2?r*m|6DwWm zakJIl_gDi2INlZ3(cNdPYS(jza6wf3Waf;m&y$`CgR>5z6N@T5lTcxQ|9yp>NlQw) zc%o8ZaF#-btnP*IFS^;IA4x#hvx)wsXWKuDg}8YXou8as&b0qu|9vn`TgM`-f6u+pu(y3G^Y+TD(Z zHD_-AZWqvbfl+P8`2tx5t47qc@;PH!xUP(lKx`H3dczXJSyKZ zz%i#Q=u-dRelT0AfshvY-_8JVv__DDl84oJ!Fw~shK5WQ$z0~Eaq=VcIH!hnot$^} zB@Z@Vr35~eS=3F`d08Dh@%uAB10d(o4?EdF^WGD$cjHAO|0h7m@EpUIGil*^=s0RS zJ$;+9JH2Iv{jtHZCh)udUyx^URI0n*;@sBS{_{76`M>GfE3Wwk_LcV3mIWh*c*=Pr z=pX#tSH3^4JClR_q~O4AHtmi~^n0Lu*5!R$P2*9j;31KQ?D z>HO&3wEYkG+COukx4$`Nujt=YEtkAiLj-?ICkH`RU@h^${>|xcyz*z8R`~kqnNsaT zR*e7GPY``K9O<^{jd?295Vw8``N<*%?WFP!%h0?dfa`7oPA}STaQ1Kh|GC;Oy;x?A zL2)#C#T3v^?izOIy(Lyuc;hYOpC{utx~uE6Nn+Ci@S3k2Oo!rg43|^))dpRPt2|qb z=Kt}7Z#?of?v8>1vMZj~&Sd=e17W=Y+yTcG!ra;#5JW zzExZx)y(J!XCt&Jl@c4}$v?%ybVTT9s$J5r8b1VDO*M}onxMXa_PJd6cl=IW?cv%0 z83Xl}@-#FL1^vh4zgW>);!kVAwZu`|loMiN6Jn7qM~{65U6?i+;}NML|G{?h7qz{& zzs=MHk?zfpf?UnzV6Cs7h_Y`w@6WJL%uRHc?N487k=!h8=-ZfS|CyP4J^-G&22!&M z^bHt3}#3iV3k2AMX+$a-W-U zu|IyrfPPiN?@Isw3OC|8v}LYiq~`~x`3~F{#CJ@&f36z%wEdfyLg<{3o)i#sD$G=9 zqkp1t7rSH#do85Kua>)C@HwPJS4*yQ0cNar-KtJSpo3W11mAkoL>f~Jnv06`8(UW^9F7Ie)mog<9l|}BJHZ4}XN*CA#is86 z3D!OcTgllS_BrO14^0 zHYm)KT{p34*H3>uw>@WaTVJbvYFSgn1^?{vpzKastz2jS((;Jq4*8O!Aw>Iw&3w@| zJ+a~wdmCRGA8DNg+kBS0wjq|2T;?csc@kqm2uprPR%-*<_ep*N0}Re0mnU*@=xeKO z7IAA`uo*dLS^XDKK!8jXbZPESsQo_L;&6^wJ=re#qFe9KcWL0o9*D6H>E3G?dt_S! zjLYITeQueb-DrKycp6-36o#At+p$dUhg#~ zc5YgCxP$mAoL3$_ezyC~X24>3Cs)6A!KzEROP*)#4)#oDX$lYfwjNO#=~!hGYc>#< zec_T|C1`7*Cb)1kh4O}3Ahv$qMMx~gu{c@~k^tbZ{RS1f4!;(BEZ*cZ-1UzHm`fj! z%sFz`Su|-;j?(FqHxqUo;u<-66$cju4YycWU2?4E%5}Cz^PUuwj`1O|4CzvXqQ8qN zq%i?&ot_zs0*vo7dN#|kQFw)U>N)*rl)h`@rX!!p^o1dYQj#MP8)vv}{RP*?(@HVR z8y_w}eq~fCDm!Y}HFX@cPDeEhI_LUT97QYl=rh2_CN)=^pKOY?DkeTt${D!U0LbpY z_~JJG$Xch7hoQwUi`gxxLdWO@w!lkXffhTM$HCE^tQKOC5Mr2 zIj%unYwNUp%4&*!?B_2r;+*u!rf*NjY9x&|ikDc-^rcju_iNR?0D3!xov7S1;z7FPmny9_!A^Bm;bmxmBab=ok8{C`F)Am0yTn;1DNY=bGU3vkdV)( zpKUtf>n^v!msiG@^*6zl#CB^1m45tC2+p?m$s;58TCKoQJ z1~)0@$YlGNp0Awursx-xlJM%9y-q0{Q)CE<)qw@Z{Q`$QUo}=g6p7ypr7mzgEi8BN z4~nVWw4?B=4;?XswYCSF^cf(KPRUh$iL4HbTGo1(Y|)Wr$K&sy!5~SsBLEsi@+%i% z3ToV3%2l(fgwgS|HQUGL_Ofai*lcMvNS6aN=F4a6J?-q6IN!PlcYJPNtF#jxZar&S z8;)04(Use}XM_Ro{Y=xi^IB==eKJp300^xu)uVCttrDz!r91mFcBqhpgKm|AO+5N+ zfIW7#tsrhK7J~W$7;Q7XOJsMv)xoR7fxb17d&Fl%`lZnZ5f2bDM{B?A@f8F?HYt8} zB#0XxCu{BfqAcIh9ii8GD-Vq7?gj}rDTt^qEZWlU&h>-#JU1meY$t;_E!QggH*iOf z_cdSv#o+_c60FUHS%LT^XxU0^tuOI)&EB;2H+fUat2kbiG{dU(uoU=j*-a&)^RIL&D?w~DvB zxe4~8%4z&Z}ogDPPVm2|KNWI#Vv|B#jbA5dZH)5di9%k zxfryJSD;iePJ*+-`=jS;YO2Rc-`MF9ub-xe`Fv)!Abm@W%R^CCKv*fy)hmU8a|{(V zFTK`vE5oXh{p#MQnz@Kw``uMj3P#9l0Q5r*(91m=>^R&{Y<1-=tlaeQAD}q=Wk(wR z2pBxf@A2@%nBtg_6|E<$-kfZ*Lj%d#w|&DXoEd_?61ORF2K-st3zzul-d^e6^50xN z_GvuAh=@q8MV(Jb+1K=qo&9?+#h;57PKv0+ZGWR)y5#RJMzs;gM2#3-8UHx3z+ym%W#!l`RWNIB;L!%}TAby~5;p8u%4@K&eFsQPXu z?|6}PQoJ@TH=S_3?{hign(Ka;jjLMVs5g@STD7KtqtCVr1na4{s zIDgO{qt~cE2WA_yKQf95m{nhh45#9Lc>s9lHQC_fDEo$`URT*mHyvesYscPRRZ4r1 zYZVoT6)B~pW$MX7<(w*l3D587sGngfgq^FAJtmRV?vX_a|N9?xt6gJ>3niz^+@;fmXM5)<}RNjl(4)G`uRB@u&K zl!_xUTaq~(5=1o0L2(L=#Nb1qBE4{B_gon%m1m`>&k7U2LdD%M6T31JM#BbF?s`cP z&~!6~${c?#v>#_9BKA!}Ag8k}L{T+Q{2MMb@?U5x-6AV^#l*GfdzqJG|C)0jH{`0| zi4t?ghxO!1ZvfE*M$--UUH~$W*PG5>x>>1W+)ZMy=X8vUhT~L5Nq=n){HJtJC-wBI z4J=4;!VL1uMoMJW!DcYbF(46n>^goSE0EWr+^DgR4SIg|K^#TTCm$l>nqKuNTk>rP zzTt%a@N~a%t!3H(P5$m3F8qrKz=iL1Xm)5CG?=D}OJ4xA@QTS&4Gx}8?6L`|$CIh; zaF~6vay>teFIPvO>y0?DKf39i_sI$}P5d2Mba+hWpAB_CJgT@6K2=r{_;41Y>*7QC z`Y7ZkN-hzv6J>}xq>Ym7Dhaopum_^Fw~c6Mux@s(r)rELHVR<~r!DWt><@et(`hF3#;B*BB4DmQE#WvW zH-9yhzwNt@*ElYmi?%-f-21Aop>2(X^X2dV-jprLyp4B%?l0jQ6#b2ZSyCY zE>{2-t9ISj`ZR-<)!GaN`{j09ACBd!u4+pX982DBj8KQQ5paCF*qOZO+4@6#rV$dl za%j-d)%zaD=N<33#&KNv3NtABx7Uj39#A%E$UJo$cp6}**W#A^y&W5>F98mQyTI=S z9qN0XaN;KshFTWDA7*R{7KT`r24Q}fo-y#Wlx77@2m-`|uUy_GU<-Ux_H4p+uVAkB z)nXDPRdydL0{8;O%UyrA`7!~Nwp9v;59n#5#r1QoujEuz0RsuOKdhEQL21We-k-9$Mcg1)pO1 z9O4qbH|25Tg_Z@O9fxs3qK`ewg3($mOBYUobh*+t0F{^rOD%b@fGF?iPDbqcNo7%F zV|YwRbjKL8I>$uJ#rFg|pm1{|{F7LvxoJPYs4gJOcq%L**rW-VmZF~jFkU|#Y2txe z%IB>-7Zj@^IgATZKQVH$REzsf$7+v@%V=?gEK}Ka>iXvP>XAOGk3-*Jv;HYvvTaxX z(%((@^#<}f&N^q8Kv(04-{k?39_8$z;+{5GH>Xn6SuEEb-JeL<)iZ_P+L>H}9NJ~* zt;VFGF7qi)xY&*N_FIi6(NZATD!9-^Bmf%d%Q#M36fsVdI{=fTq^+Twx=NW@EqP|s zU0hkDd^rScYzvqPTGASp542CEaMf+^*^4jrNu!NAg$^JZ!l4zLN&aQ|acaugDvzx~ zgIc;8f{%Z#J3M~rdrL_60yDSEEK&^A% z?Dg}Be^r2mAzi}M6k4n=wID6N7;OI~9Z~v(#h1omk@2F=$EWP8|8qLpKugIrdP>~J zw+wT!1a~%N85Q3(AZf4cFmOybTxTnc_><2D$x68V_(0<7MRRYJlC5FSkCy=gtYX>C zM83W>|N8*2&qJY@wA)o{y4f;Hpqjs?87$7D`Z;*y6%jk#L}6~jTVM;?_-<09J(~o- zk(9@5+@W))P+&2t5+JSga2N(l31GMz>Y6;sDF)r@orV^4hnLlsr!zBkNklHG*Co5nDQg)(q@xjKcy*X_bKb3cXxm>Ye;45y8 z<-RBldbQ!lB{b_v{HA_Q7v>--QT_FY!#b9#r)>b@nr4}`#A-OBM)1yhYU|kaw7Db| z$%x+ri((Ht?Z3r}Ywa}spmzQ}b}JH+7%`OCsHxnD-%(YJ!-py_z&b4Tbe-yirjD`+ zelopLGrP#Od%n0^z2%E{()h`${6;JJE0O@Quv%NpOz!$RvS@rhJ-_AyLQ!qb6b0=J z`Fz(Dd)9idw+IC*%Z-`|r>@;Pg(9n>KwzEb2w`|Q_Y*sE9rc<>n{moyrM%rtLe8Of zcb>v7V;n;+Nw@Y#rMi#zPZrDLw4FX_fR+B#9K^ZMI=l+yOzEJk=1AE`D0QaCeH9$@+T-52~U0Z z>aZ0O5uDk_)GX<$47yiDBuLAmQuP9Q#DD*wM+vCut&a5{mfC?hiL;kBPbkB=Hs3Uw zTD>d+mue%;S1;NRmC}=9>D1ZU7cto81npXl9H+TzO}UGIC1xqZP{dTSrSv+D?H>^hpysBQwg=m9mqgP)q|)}``QGii)^=dlCkKE5Trg{vLQW92tmP3L3rh0`@$ z6!-kMA*1Cp=S%&$s`XrhQk6c4%hhPT#i3v(PTL1Cm; zZirRv)d!ra^_s1}Ug`OJCz7s|W9wsaZX6h2P7Qh_8`z00Lv`l$FNMpwcB>azh2KeH zhSl4)=THcL&@{EIQv=xn+$)!zoWljTony%30E3`6Ki%;9EYu3XTUD;R{?UoZsq(#o zE2gukghcxsqr}orwyim+LgccYrqJgKf?O#wb%kmlb&9swVL!4E_RzwQbyx5B(x&vM zQul%c5H3}_hDPR!kHuW$OLZ;1LuU(aWe&IZM^-<{8S66A$KkeM<`Q=(afbY@w&v@xRDqvcy`TP%7Qk7l4(PWl#WB{ja%!|J+ z9c>o^PW4v_egHXKAACINvbXyBKIYEHPZBX)AVUgbj?sX7GTOknPBrf<;4`D53aNC{ zEPb1+lwO{@Y&Db;ihD5`dufE?#Lt##$V~mpUVAS@wZag_yHd_5c#&Wxp*vn=k8oVy zon0ukt}>mPG`4ancmN&l3`;6YA4FuFkm)MxIat1!31n99Jy@YfUgpy*e14o=;?5vB zsRr6#WW=T>Fl6QKU|^}f9DGN5#QAPHl z*h@lWvwBMshhrK!bU0cHq!D6f)HO8E`L4ra?Ebf%ltUE}MAsKXW>C zNORefa(6`)YPq)Hu9<+r$cVs7MAri;Ivu5^y7V{t5D*UYG8 zHXA;(c<2{J^QMQS?{F=`jZMPNO|?neUCT#u&1`6DL)UM|I6WAo7?( zFU=v%02Bvz@9CiASicdLk`sPSnGw%f3aO4PoheBwFV1Lo$X@~aB29kPjh6X9qH z0>0NM_JCRYOV|;4+XU~#zMS_MI0Akzq^tm(ARhieZnxQy_uX(_?dl0VDzU9m6t=sT zD1{)EKEIxs`;NyFk}suj1oh7PAgp2jh0&7b_KT@JkKR~OLs@SO{ce01)0@rV57Fw$I;=hAatIy?=80p5sh7OA|GX$E{`wbe}pxfrY93 z8?PI2QWA651Xoz-Gp^&dmutpybnq{A3)D)ANKW;E6eyd=nkE;^BhS|5%}}{fm~KGb zn`f5)CRh1*QQ)tLgza0@TOWE#n=YP(TAdx)U|Y+3KBUE^aXZ6Eo%Pplg#Q^d*Cq|4Q5CNaC|zo5$({IV$0 zivB=D!I1&?Tdx9gSFcOtkJLKU3`|Muwjz2SNAP92hE&TFHD=^@=H^6dp-UXL2V9|| z&Mf*WcQEW$Ih%By61|5<*6|sy;x_hy;mS16gQd5)CHSZ~AAz*Vvm}UnffqmRWyUoY zHTanQGuP8F7}@m&sXYZW1Iz0a-$S6an23$IP~B5t8DYB|@l!+WV%W7)u8gA_rF5kY z22E^vSD$Fi%R)0*J7L#BiM2@ynj$6_{Hapy+Ni%S3r&vYzmFXUOE*&uOoI6gp3^V3 zvW6BRLFfn1n9FQkOn>PHetfhn4-|sc-m&B%pU}ppPxoekQj^!BPQ|tOgQbld(D>G_ zJH?8@Ikp2HOUE2=YN`3sO3$P&e7#0a5;{XYr$>hLkOVUOLJ)Z%Kvn7o_>V;-FhIr zHlM9J-MJB0KHfo=0ws5lCF$Go*JRT4il22Gb0YeW@0_oIn;s4Hnb&rKx=EkdrsRKc zQT$5=gNASQnC#l{88rT6EwAxy3( zU-1G;%C4@2x@ zxWjBqhGUh{_u^Ly#D2+SzJKhdt#0e!2&2MszgheM9IBlWL&z@iC7?X0JT2NSkrHj~ z^Q0T|SMu{U;&wbojGA|2q<148yhfhYYQQZ!e}o|%-AbkC4lt>eQDv2IQ_xRhNt*UW zE!gy)*X7zzB7^eak{Up0*>uzhq>uhZij|B`2FyabgiM0t6=+?gOT@RTevP;{bcuV` z8?;LsN0j@uXOW^`$Y2>mr33pE5z`M}7QY;XmZv}3mbW88dn{EpVYz5G)huVMQn+;H zZ|luLab#!J4V^fCcp6kOJ;t02{`q#{vQq=t6ZGX}ki!CCkIuQ`86r2B{braqvyviL zEZEum<>8+>G8zd9GcgItwYQ0|#dFqfca3X37_Gt_#v6;(mb*86>)cSKC&!q58;Z>N ziSWTHoLZh9Mt{rNXw*UM9U%rV30L(u=QFpfN;ly4^XeOR?Pm4$!Bl#WBb?%Ks-X5p z{P~Q3PLP@5Y#Mq@;9_VNQUWEt0?!f_pY4pHq?KPktNYwEN;$lKxUkTP_J+lVX9@wi`z5{pIAz*99NNLAz<9y=z%XX_C{YiFaAo{Cb zBN^l+L}Wp2ji=k;i*$)A+;5#sswi?VX#Wvrr0 z!jI3u&=wZ|SV(~rR1Lz-;BiIwldaF#_j)3xl*r~XZx{E$YNSn<&7k26+O36Ktp&jf zAvRGM0Sncy+D_()gerAmGwdT8p3A}Y&Dkd`EFFC5*Btt&(1WytPo^S`0wabC%#e7d z6TpqW%XO9-Wiq{Rn?#vxcC9@Yp^T@WG@J1IRNv{No?Po@G~SjzGuNhrtG$n@;j>P^ zdT^idX>%7D7l1fv1M;!hix~Ozep0`yZt9PUCZV-I^tDM<=vfwEdf^54Y45-KF6RZAQJ#oxn(g|SF*p6Y#?v*B89;)B0)}+@A9}m9oTSC|~l{}oOgs}~H{WoQ^ zH!9iDg%x>QHrejhtW?sq3sIg}Pil|S2zW(LCcT>hte{PUlMa&B%o7;QzG?0DnI9AFc%LZwvKb+~zM7iX`;{B6?5X+dr{Q9C1I{T-m)} zMjb5RPKET^@48ZFeE{T251$MKhj@(5kalQ+hyDj+6>m>Eri$mWeB{AYR{T1v05>d7 zy;KGKja9d1*p+WGJ{@-oC=8z>^dT>7)v>9Lr1dyg5YpMn`P(**-Jk54qeL6J%DD5>=E+ zD=X5Hyq!br99QlJCfG>>`*H_luts&%0$6mK21Ayp-foX%B?Ai^(knr`S&b3&G@xrL zj+rtOkCg3!>NyUOD1hlc8RXf%pD+GSw4D0P$`2TK%?z?gTmzZhrYm;gZk#rOXh)t2 z=x2u5OgMkxw8g>?H$GZ0DNgG9s4rpyNcRqcd}==hw{o(EVq*RGBmOg>`MIQ_U)@OW3f?P7@m+mD-pp%+h}Jt zLT23_kjlScRkaspiAG}7{u=G4PJ70RMhYK^u^sch5M8F$t(vt#T&2ps^uk@%Z)*eQ7s)2%mXG%RA3&WF26E<-kb101K?hRqACi zH6vQ>B$ZPxHMhD@eq~3)+b#vy z14fn1I$hrPP?NwxNq49aW6dpo;%%n*1;EebM*3_Az?3zEplIQz5+Y z6FTgQBV=|_Bsctqb&h11y^ih73qO+(#6<-M@do$_J8*0Fy+4ZoLfm1Y5{#XEvD%+V zqp!}e0hA~MV&7?K4a(?`_(ae90`mMH(z(W9n0TB}M*C0OfZ$YJ_S2;!rj|X88sQ%| zBE0v6X9f0M8h!4z^p!a^N*A~Yg52?*1uO^w6AN78broto3!qEYvlwM&WCKw)dMw;0 zw2b3P+ek5?7`1;8rA!` z(UlBR?kD3U8nsM;a7nE}2=*5}phs@-rhKOqbuaXr#?w7MONT-7g9%l$>!uS42Y^Bv zCqc}9O7(%GCw+NZeM9Ti(iFL0z?l<9#A>x3Ba)tCZ863uV1l6d-PQQ6;%a6aHfR7V zeCz8aA!Of-CdgtTDya3$OSN^Fs;zc;sLj8Mb@QR}shqO$YzEdz;Y7e=5iSYo3%UJY z{I)7YT5kB%nmyfUxeWAsKX+ifb*Rhe_Ycl`li<>IWk}^S57KH`-|_kQlwOJbw9NBx z<80+><)ZzV$R}YPu`%m)llJ45rGp4~73(pl4|Ji_06Cx{X^dHJ`_Zl0KHK-zf-LNJXEo~`sdw6FZp?dGjjrf985aWOONlG4FPdT4zv zD+AVy8h%ZRJF05X<>a0h42sTrtKRFY!?5`#xugEwl~&$L-s<@5ci75sQP(APA=;(> z=V>!;j_&5S@9SY#ik#hjBfQPUD$AQtTI)I#zm4)Fp5G=VC~74w<)$xFbf~g)v?w^# zArbz<%&zhp)SOopJ9rb{R5qbLY^`2P^{sF=@#uGSwn*@I_P&?7#zq`MSPf+aK2)E! zi-uRwQ`iHUkI3momXNp1>9T7NR!55h_EcH^mlBsRTtMB850u+7^BqV*a-18?+zi~> z-rIcn2x)^~2zA$`jqCGnz4#yEso92J-EpJu6R5kBk$3udLR16`fnNH9vP#e1V>Q`N z3R_a476;p;NO)*u47f+(O1r9!k#jm1LWWmB7wSChNbSjBQzCb{2ysABZ|Yj%Wv3mx zvy<_1|}L$p19O zNAGH@OSI1@#^OBn6bF3 zZSGidN~)oh9ZROX-NrTYRzO9`tOVzc3nvm$+1?Ljj!V}NobcBB)RHof=iv6K_C*5m z$EhKvq60(y{ehfgNp!OTt#YQDIVP?dsr`3Z)%HcSQI+;%=15x4@ufr%8xH(CuLfRb ztT=wA3?s4n23b#Hln)>sP%Kf!=0z2wgVWsmP)?-47vBHnYbAE?6+{8!VH@*Fg@|xA z(POSwpe@aR{`-2tnf6{b%{+UiWtexop2n#@%(B^Zk{(9v6Y)2Qq)$HIT+(U?#WN{$VhS8gwFE>iiz4Z&q?(nmL zmlZ3@KiGaJYTsl|>6y~aOHZ988nx@0nvohOx?w495}e=u7Ge$^j;xus{C&zlz4YHd zPv{{P)eELuG)X`c+iy?#uNUvPC@4Oj*Xi;2r*kmg0tUogj=X#G?4Oj!f1Bg6-^r5; z5jU-+|IgR|&r@PA0|V5eJKiS!{VD;f>7G=iy_S52eB`McqkeFph+}&RB|%-U3AxR2 z!yp6b_ANra>+Eu+!ozY&5v&dj9LzH~+^B!$k5xMJ3)z}T<_7=q%U>o_YCApShbMV` z@@{ymp5uQVL>@)i_X~I35rqpme-#D$wv;rT8vLdn_J*u8C^9G5rTJin5~(odoKtV? zx^afox|1r4n77LU2Y9h5$_Fhyx33*mb9@){C}@{_6I?i2KO-JD<(#$mv5uh#oggC( z+C}3#rbmqew7@je?rTpfk%{LLq=|WZSSA-O69~*_GH_}@wwkxXA+TE|K~o31r6FSr z$woBu@=uk@INkon)wxXo0W)}Q2rnZ9+`Sh zp;zXz>$TP(&A-|l6w7V*_d)1eBxjv!sOvJ18EkpbL=cpOJ zLJL1qMX%hY4*JHm`EDdSLBWXPlS}n7Plx%$!{6UL^nr$w(locX)CTnr*oU$1v`ga} z)N9X(;fkzu$B1sBx4!8O{+g|m_6TOVz11mfVU1u*A=Q!0=UUI`>$fG%0_z@J`-~JM zzSV(#NotN2AG>d~oda6J?X?$y_4XClgK1B=>%hdMl-xq4ubnyGXu=iR&s z0A_CPDC+nRe}&Rryl_GC*C2@-KN6ZrP4?<67T>{6RnH`?X;Cu|1f6{z>!n8-7C~fx z1jlZFI*r`Yy4NBaUvv)AeBHUWtGCmwG$lo?DoTWDa=NDf5k;pS*8Hkz-FT2^fjSr@ zjNYHi?|heQ<-1|rHpwkX+UpA!{WzeADL=pOynMBg$^O*IeC&4qp9ESc=)?*44$0~> zKcG7M&{+x>_zAOF(w53K$9`et3MCfJ&InX>Gg`$a?oYVvUhd!u9>bJ*VN?=|MpKPi zO|xbKjyv{xMBzo7)#dCOzc}YUk0pNJw+!ZiycN*(izSX}0xK}Q ze6nR@Z^@0!UnnOkk~s)2LxQlkye?3A`MnX(l{G9>$8$fY>Z#+KCJcAk-BDb>9I19C ztjx8iqZyjrwK>Vf-!^n)-=xZL4|z}6sEQottN4-?PRb}i)voA-7}h*gm);(UffTN7 zHcH~whvhfw25dXm3&UV%sF`281kNQ|X3OtvWrCp6ylsGJuWYL4F!S_{tD>e~&jcUm z*ODE0-yYbyO07Hib-pW040Ubbm%O!FHdAB~LKH^_!NXT@zOy>r*c!)8;#_XUm=vm% zH-a{9u4^1GIYVOihNn;4f=djHy;nLBPNIYN5s%Dahx;vi<)$^9x4?wlXK}TMW3as$YkK3d|FkjHT&JDwC z4-@1RHJHQ4Vbxjt@VkiZS1dQ7DoJ;O)!oi6kkg9guIWde?qbddgO7HQ@|R$E)u z!qe-aH^C`tY*u?-)`PVMsmqO>&7;mJ8FeCwpzEH~y4N+e(g9b{Nd$tpZE+}5|6=yh zYG=qd9qr7^&R*#Z8rA-$^!{=&a(Av$J%`&NI=AA5*{) zdlR5=xJVh1g?yS6TUmjfA&7vo${}{c8z+}Je!@;cK`~1C;1JeFPCLCO*tfEt@;5hN zCe6$BEivz#t1GEqMETn>SL@Jyyu8~NpvDHOt;Glzy@is3`3&Hp{(^6HkKK)$_mcBH zUZSW~Uru}b&SW;niTWf?2%Ow5?OT#W>r?2F+?SSkYQX;fJzKe+63nc7o9bY`$qbj$ zTZk-C`0KHL6=yXQ6y}L86K%_Z63yd)h39F=lb!=IkCdkEEP_+=bdVT!un2qQbP<+_ z)5I(6KkD3#TxTf|AFNwFtO_} zcVvUbc^<}{!UFPf>wclvhl4b+;?;I$zJN6nZIRgI)AP&SnN)+*$8SX+QY5D=ElJMa ziim5IwOA`+tM$FsFeTNQx0B^K=)KozFnd|wCYz3t3A6RIiPlER)DxW-U%g?B`JyiU zlMBGZTG$|h`-Eu#uEN*zr;U!4)Ic^3470ydhFjQXip`C0F3+U8l9DM=%JDC@?jJgk zQ8~2d=!#9MIg$a=acCD|U+C~oN+fmzG`*s_HTJXg3x_tnRQT1#E=^iFoRbVTdJR!0 z{n8ncbE(jbT>Bt=gG0!E<@vJalvAV2HF?UBEHb4>;T^Ep&_SLzw8s{l@x zT3uWHgc!dRW__hCi?kM<=^_~4{-g*j`$)-@Ig@)AJ}jj4u7G&;>OSkIP~WNJ*?=bW zM6{E0#Y_Wp7UR|V`dModGqZRw9p4p<3K#;@!k7j-AFk1u6y@WmtEiyUkJCsom1;s$ zd%9Xi*2|8iSi$Ak=fs??221y>OKX+2PQoBG3;v1`ZeMY`U##=(B}ppQiaHCe(boe2V6?#lglUZv|E17=^FryJWLg57m|))A3ej|gyu0_+EaXK?dB9l^^hD;289xkZPxttQ ziVe5y6PQ^{Zo~NFc)3;w>WXIaAdz0BWhOaN6YbGfhj8$JF~%4nUX9eF{3uWO?5P@2 zb<6V^GR*%qiW?5y2^dbGy3G^G_k0uu2UB5r7_LRV5>0>0)O?3&g~Z>dV>^_D<6-~JzN(b81aV{-bxk6 z!Hoddj^jOl1Ww)uo6TF+DLsQN0!RN;+2_*AKhUOw?X71l= zN1-h6_m;Lg+~d22D&4gW(r6V)as#O~gaMRIs@G@MDTBe;o+HAHI=Ike=R#*Bw-_8h6BIcB5TF-lt9Jo?7N!N!!}7iZSWKJA+*eTqh4Li&5M*V;_3xjj~CVhF{pe z*|sWw@Xv+ubq>Y^JoO`Dz$)-l~BF?H&?5#ai3fq9YU6s-M^-Dgy{7rYHjaut{X6dtiD>Z~njh^@m1Rbh^J@jKNto(+# zGa)qr;m(UkhKjT&mjhbo{!^=3dn&F6uw*@YBgTwX_S&?*pgq_TAtnjctMQ11Z ztKB!MmHEvee|q!8)rHBk#-e|b-fyVE`xj^T0DBQMgIU|_YQg@GeLIl?I*6~3!nSv!(cEuifO!a~&xO=2mt47hz9yoxb-0@`%avV3M=!0?Do&47-|nT` z(V99j(EF^>f9Jy6#FS0IHn~eHPck(Qu6iCl{}9V2V!Ar15}_H_3s?(VTe;^xUzacI z!}-oww6ciOiU&-c3O}_{ng+v>)m68&txK2^MJ7I85+4t`oyCOG(`W8JgyCri-_my= z_6I^8w|5tHNHKa5AJ5Pu-H$jJg^zAz~|3fmueS8zc&U2YA!pWlQtWI5K?A}+>U?zqwI z2K)JUu~8zPBk-4#2I}to#TNW_rq}+;9;U^?zFFrx<2XDvi{CIX0@Pbq$vp#|Sd{bD z5jL1G+dSH*?$u26Lp$gT&oqW(LXJBUQkD|AHfux7&8ai5op7g>$C=WNi22f_@`^%L z_Zt~3*s>B!Wtb*;rB#fnIj=1p7|h-Yga&97%&bOHWiSmtYg|3FY@QiJq1|0&)?;@O za79|4jBAP}xGxI960b$tcE;w`pN@k34hz~(gzZZHe1Q*j7FOV?-!hg=H_fC%S)mZl?S$1G(7%4peuk*7lo0^_PoKx=V%u z^9M0MW!PEx%YzO^CGB5bo0!UbZV`OIwc$lLTLMST7FM7vcq>{*EK4*8XC$^TV5Et( z)!4e|fY2j#4oBnU3AJwag?jj61mBb_H*R&Fhe5^{ zVPQ9H3%Xsn*5t~GNbs1V@`|xyFd7?_-htR>+&V+MXd>Wxbm&c^a1WE2n?W2wW$+n1ciR8VIhf@L@FQf7PjgyZ@o`J3W< zol7lDR`uJQb&-in+kl^^Nr`QB{%R~EEAWc11YigImyHeqizwC$cePuxuH@jGrgHw} z{;}d+`~3LQ)Ze%2uhKvOo%<+Ml6ZHOnAPdrkgv@X7U~dX8c3913B8$f*A;rKZ2WXn zI{I<;LNB8wAgo)>0OvtowKp@De$Z7*Sn z%mqP_d43T%bIELiVnK^%h*jeVRj@HAor`A*^)os8eZI*isMrwGBkyyE(g`+tU(wh6 z2+u)vD{O()Z(+g`eK&xHm3}|b&Z2z8LR&5^oHo;hgS*sx&=rb*a#)F_RYek=@I_~o z_1S`UChoVpJvlfkbERK{D|VL;YnGe#zY57&=79gc@=X7gCi`)n+RwmDB>U5 zG;iP5tjzbAa_9?aR{hD|)b)6vy}*5=bEuDwxnYf-si?!3s5uP01k8Ysm$>kUbb!7} zM?#JMUxea!RrOOS-R0LVy|)k&OqIGL7bgn#r8oC3cUY?lJxXR&+gtCeysJ(keOMqF z_wlFnK89S`8OncPd5}#Dbe1D-G%Sz+R42!0pxyhyawaHMY@Pxgvl4K;i>6h4D<7}G zrJDON`NS#8!b^e#1L1Oe3It!esI^`i;26~VwVJ zARxz59lAZntH?aLgAaXL75eG0qnC?*M@Uy%T9>nH=1ea*^hP>D07x2UrzxdGt%G%NSFN;MApFlg*xqb8G^$G`LAXyHQui z%nef+@@lqCclDgejRd;~Ps+|l4mR(tRv#|ZF^~B#GqW?aCqEE?t<(d4vTxt@xR`YE z?}3pEPcNNNDXc$Rrtu?~JGB17xI6MZA`%>&7|9hRh29>r>V#7)#-#<^6AC^g)Clr~ z3JSM6Skv?NNidb`Qrj^a)o`?!!kGyYE)DJ;W?+W0d$OIMS7KH6Zy7*{YhJoqi5x<9 zC0g~GqW9!&4nM~T0#^K~7$2WmkEBN||clzfT!Q{cV1;x%ieIiRvVV2jzNS$WdSD@kT zcC)vm$R&$>hnNPO2dnF}i|WfcQd2^AHW3bh-jYSE=$0bM8IU4noHu{GnK!#0my%oj zgoAgP!0u|DYsYGTR-4^Doh5eoBD_Tk9fS?HFT;&#lnJ(24`^93PM~VkO)00yxMH#G z-{cXWlkO#3GR}a{P;)4U@Kb5^dCPZDI-@;L6h z?Jc1bF~tI8pXlOiAM;>wJFxcd?pURkekIDU1!rJ(ouw5iQ4+{{Z6}*nQ6OyI(ytR;KmN;CaIbfO2ZHWm zm91#}_@R@?itg6YCWgiP@%%+?aL{lORfLI6N$1a);<9PX>Pi=pv2S%HXf-sjP~1bvkOHF$ zHuqo4whVzQF6T0fi9ZlaBZ?Cqppb%X`mGR}3w*YZDshvnCfKQVILVT zI@Q0j&Pj7eclq8kcUA?ksDj$uRKMd;Gq_D*7VB1;dlnNU8l#0;Gm4W*$&xms}`!9HKGbkY}7ibP{6Fq z!BlTM_;zLff0Zpny=roHE-F0>A1V__6Hg|YbfAa4}dv49yR{v4l zN(B%_Z5AipSSv7>7RC3NQm4y^u*rjN{vbvIvkL8zxN^d|;;chVtkyPihD+qOmT0GS zhm+6TdoWVG0c{3=SIZUryYJFRxgyNt5Pq*mSG|p8SyU=$92-Yd$4qE3LN8)Xv{I;` z(Yb|;8J+;nCthca#-OZbGgcpch0C{*uS6aUx-lx^1UhyhqcdK*G=npSjz)|AfLcGQ zeJh5M;aTI|yd-_+UCBeihO=F45M}+|t_@X1iVku8?VSJEUw|$FK%p+Zif_F0*Nag4 zb6M`6Qh?9}L`U&hu6SG`q9e-#5z#KE1KV?`atf8Ub#^D^FPtgpZuMsz6!zH4`UW|D zO)fA2LS$GXVJh%6SBhE8v^$7Rh*Bb78E`2n>hG{4UhnrQI2 zmVD|ANn*#x0{%lyxqsOYgD67=rdgPXNh1#(i)NTAr*Z}yW4^ObSNXP<^-x6(l}%N} z-iKOanr#y3+(G_YSMU4=S5M1-|{E^ zuL1wg@Qv92<>Fr|{TJeV`|DpSeIvzxx%mGBmDKKr3b(}RPC%4Nl#dFvzF}5hFW&du z5-JWk*61#S?dsXaTVDcF3aU>Pw)}u(xtyn)_p;t0j-I(fEAC}}mkJb`sQdW62z7r?&!<29xiDV0qJkRzNYj z?hTFn1abZ0odj@5dhqJ59_8Mz-=_%Orwt`&Gt6$}ee`W33`$lroN(tP(v5`teq#OQ zTm-^3R$eQwZe#)Ya|~GVz{zHk;=5a7O;3)_t}L{e2Vs~dVxBc7lBiY{zq{j)ZF*`K zdY9hh9b$pu*qfa;{y9o6U9P{X;2Zb207j!2(@Nv=A`EeAP&(3YTw=W z$EMEVd4~$RDM~OepXi1Vaj3nnD=2cX@cMUIS!xeM2?7kWD**jk36+vOmruCoe|S(! z`-5lZW}gmlu5vHvgtPjKfbjb*DfsW!t(5C|?xSxbLBJq&73;Uunuyc;KXy4+37;NN za5v4o91(5+M2|@_Pwy|ao&9eAzGMMkapQ+}q;Nr}I(=Io6aXo2dhu^be~nuJ3mfZZFsf86`EuYowL}OJ~cr1=MhSpr_B|PUtOM^2NvH0xTXeTr2pa z#j~950wOG8$gxa4^73VaVIk!|88e}SoEO^NwzDhvw#@{f$T$a^ z|24u&HfmX1?n-s6x&3~Hq}HW= zDV4Idy6fKwPObS|OT(-d#MI0FaDTv;C*`)#^fcvWO4q7Fu+2=d*mZW7M=}}vKZ?$K zs!bA&Y#cr*avR1flmc{1Gnj;;B)hQbDcL*GN^A;FYGH6{>{eY9_cus#O|-!OBV z5d*$$qnDcgXJ!K6JqAJv++Zc9C`S{lxP9;NFa?Elg^`U*ylREJ?}$3L8D-dRjPmTN zjh+SAY&EgY;=4EgLvC|Voen-+-`(5iGI%S<>Q`$k*sLXS_gY|HPRZJD^3h=7?oDG) zdC~8z@7((Lx#Uv_K>PCtABNz(54U#(9V?|)5HST;k89np+3kFC5MUd%{rLscXngSx znI`+r9I;{MF4i2h?9V**o|{i-@@WaC)w96d#3`#8KH_+JX84V- zmeTaljpaX-<9Eb4anhTfk+9)g0$5rSWB6V+@4cS$JqyHeeEr8a#J*#xKc@R46>4#Y=H4mj5zl$TVdjF}oWbl{ zWku46I}1YO&tuen4HfRbdeb}o>4%Xz%u6tE!~iFP$i>aOpcX#%N@$M5KXp7pX)ZFh zg-?$1{rT}fkn#W35XEKBo;5aml*WFiF#gLB86XwXRQ;1<+CLqz$^&>dm03Lhcn$GD zY9i{v&g2iJ;V*9&+Wa%si!$D#-oO0*LmK4f1Gu<%a;wjG{Q4*5_SccQm4NfS+FK&> zXTJDjqyNHJfDC=%1`-!pxFBZ#bilvc@DJGO-);B@?DVfR{1Y|suTuKsaQ~s=`&TLb ztCaqhO+x=YqW|0J{~vqcUrXt4ndf`s>iFyi8(C6o96b?U+;3I?WS2`K) zhL}30^o~iQeS8BjZL|or5JOQdg^6EM4usvY;R%I65j1bxVV8;h+_TV?XKg+jy!uMZ;rdeZVxr&Fef;RhaY=GEUt_Hh4g%j_}4+?r;_!4{40z}ek#)PWJz;{qH zezG944Ok3Gjl2S0+U=J%8NgC+fI^;@w(Ua&eYzHlbnRDAxi3qLtS#r>AX@36$Oj@>EH* zisoLPV>6->RMrR8aMVhgMeyCl_$mH4#hJ!zkU_*0Oma3DGL8ab|JOE~H|jo6vVk6M zV-?-zs3<>rcY(^&mQE$eC4Q~V&Tx7a#j6KBJTzH(X?2G39ccd`ZDm{qU%?lH!z&P8 z?*UCJ^_NM6MV*utsRrK}%*(waO^E(-r}S*PhTLm~&00@Hh)Z+Dg9fMu7JB@oc_}^+ z;eXu9$Kv}X*uLsH#`WFcyUL9-ykqlP(~dxfW$!sbnEug7sZYOf_q|9gEYKLVwB*3g zYQJ3fxtV25S_ZN1#w#OJ4o?_#LCoNX6X)>}`>o*G1uv%M8;UqA7)q>kz2;myjId53 zV|T4yGa22<9XttdBWO%wURpf_L!kEecQ4HbW#;%TA6U+4^zrKjsl|&9j;DA}63Ii4 z0yjVwIshX4U(1K%Tb5_>#E9BoFCmHvnk+_5HK=G^T3BKxRoz*8k{)3l;y8Ia!^w0q~#mL@Yj1weAlphIAzslj?~E%6@@3?0CMl!@a^g=6ImzfEojDJyEBwAu?=Y!ZUNUE%LjM6nK~vV z`>3ebcA=tQYE_SqSdmxb%m0?*Ls!4{N*H=D;T&0k;5c_Acqf0oD;p?0rBU3hT~HpG z1u`g&9Y?Q(7+k$gGj7#gJ9M;rIrP`K$V|RCOM=03CA-Tnu4@a*?Ebd*WU#j3NJLZY z%YvgTHO+_UdvUVPE&ky)+sk!w{dPt^2YspHSlXqXc)z$euQ{fSlbdY8Tr9rh!S=nM zZaNO7IPSQ0-#prw=5WI;^i?_ojF9EnqHNfxNADOQDb0_^nH0Ju(G<~wFyO7 zw^t!&+2002yl#XJ%j(+gaTTPbnu%;QA?vS17v%)L5g`S>W(+ynMzD>Uat+9Lm%}2_ zbqV>o?}I$yiDTxV0x@&e$%f{STcrUT0phFk@2vEFMDM&$1g9(K3}miohTy}j&^iy&4!ZqTdK?Qj~sO| zU$|k59plP3I^M7R79)csy}h*a@N3#1NJ*P`W{+4 zHm+wdMf=lviENDM($taib>xy*K|ASUYJCpnY4ARgv%1MIaR zHY?|OStTics^ZCg9bIo~S8@_u4xAIT|9sDZRe!rkPHw%t&5p17UPbNns}xF?2i=?r zirK7zs}o|&udNErJX6cLG34Fq5y)(U>R5^2@d9vu>5_w$?-lY(qS*8s~PV-^|k8~eN4nJ-dClW!k(3RCS*MSMBxz_Aw_S_OrQeuT$g&rlPi1<@> z*a{zJrotC(kfnGDmnG!fxOr_QUM?ABCY^6dogX+@qHfSkLIY8v4ZPe-^T5T5tclOz zVx2$&*@SKSE&i6zdACHkYv0PHz$bcQ_klCNu+pqcLll>x;7o`V&y>57=)dIZ&)qt^ z^R8P{5b9>^25pL2lb{YcTq(+1X)Ns9l?+qN|0un?Q-ND2AmwPhyKn}@p8s>Z3tsQre6YfWEf4X%`xr^8|6 zm_Sy)U*xyXSZh z6eGQkoQt8XpEoeGl$tTYwhGF>QtbHPpHhS<2GmZu4r0`GZ`ic( z%hQ%Z+V~}m1VaQAGjj&DSHz;+c4N>lYr|XL6a{uc5TL_d4J0Kt4jlTZ6VKxBSrNw}S5vp|#@p>o* zq&pipBuCnjTzS9EeYz$FzA!yY<&!NH;_~r;5kF11_tdmBVd9;F#Whz0sOup1T;dZ^ zg__=bnN=Hr86o%8r0K-oE`zk18kucRGI!`GkmSJUB(JQcfu+y$T-{lQ9UMl(KMs35 zLso{&=61vd^}*vp7^| zbWt>)f3MUv3 zd`PAP-`Wl|^^TeczAv~nY&n*C+z`Af{Ul+vvlIJE;w?diG@o(Xnl}o(nTP%H8X2DF z)8fPxHr*j{Slew7he%W>7P3}Z^^m+dvPBzl4Ga^GB>_ehe<$e>8N{M3;tmgjXXQ8I z#c|n{1>p8k5X%^;S{mQ!aU6-8oF+c_^XN^UkLcf+@qGicsx&Y`Z-y+~#DkyF^!W0--==d&0W^Dg- zIE%@doSVOY)P1yFl%2$3xG+TWWm{IME*2z*llMHy4^{#vx{&ZT!+SGcQ)XZ7OkP&1 z?%1N8qwz>8D&A8Im5uv_3nv~mIm_LN0dsG=l?B~LAwaj*9FHau3Tacb>8EP$0(5@zp zZS&_H$Cw7RXMG3NiVUXFY5`aKRHbVSD?N+Ym`n3x>@;>GXZvq=PSnowuSazf+F`zyq&vMK6=cy ze16>cjx-+`oZ`Udzp&zktne+;gez7UV!>%Sugx6OJ3}#;nNG&$%pJtHH3~$T( zcxtOFw1}?1fy7EFL1iB0?djy&e6SxF{ZoRdj$Bajvs|jYY5dS)^kbwUj8B-^$9ihQ z7X`aKvC?}mdd959N2@9!+~e`xWcUv5T7fvqx#~$=hy$SOjJ*|`my}YEr@aCXtKkMI z*A`@=A2&<^%~rC5r{73F^^XOLdS9%qWyJ_M3t^*Ty+?uC?v5S1&Lz~eA%!U|qtH8L zB~yw|&UL%c6vw>sxozglSMhHNd@=0LSAlYZR%tMsR{HJC3hA#3kE)9Ydv-}dF6$Hw z@+tIjHybp>*kkx~-^4&b96X)S&no2h*oH(k_QKNxd45bQ5L<0#6D&Q92vlz}Ywg0a z%Wi<~&`s+PhA2?(n+0#gsj5wlN3JRrNkP@YLALId$!pz?N5L1lP7)W7qS%MI!9n}} zORN{#D?|r{%!FZwV3S>GgPEJXPnaChI=#*d##4e8;c=1qEyqC997Qt7dpLOU+4EJa zu@Q`>Q3%daGuYyVA{942zkKn~WRv@bfuZg8qcb1tKE4aYZ|eq`e>}KwVs1Mf+4x(B zy`9A)Q+Ul%?nf&9xUY2-?%8p(-QGJGG&y4d-@SSf696>yGASh-ZM-_w*N4b(EIU-t zgTQ0!i#>1eR~?#`<4K%{S3=)xtKZy~_SB)FAR=#s+(UP>!PY&(QC;|%Gv{_QQ)k#L ziF8eD;w~_0Y|E13dK6K68q>|%vUdN3`?mBY*eUg>$4vzD2WA3IK%ojrFie({z49=~ zepR%E3*|PUk8@8@f+r2iLB4o4$w4JM@lkC)GZN1A^T*_^+-AkZ2`ofC%aGdB#DxJu zx8>VeCs`B%_I21MRRkD0DukC2jn{%FUJ)(5EgZBOJ}Zo7!HG}vxnM<|*e6S%z;rH# zt32$&t1*h7xltwFwDI0~VhthTsQ6j;%wzPsl3A7R=4$T^{ixcx4bfD)FIk#SaOjmOJtX9(Yzr-u{0sx8OY9`;{Dni>>h$>! z^(rq=q+7*FJhXF|o^}<$Vm9XDG@>|Ie}`&UeQ&Y2 ze}?8rn#Jwo+0O9h9+|p{h&2GAVamF4Yuy)(eaGSW5a&}dFHSBcG3yR&KH!ulzt5;a0wI1$M*3z8CG$#9%8HEZ#w;%PFxEy^ju#1|xW2gp<#en;IYY;#ZcsDd z=v7M2xhDN6_V?U$wK7=K8kBK?h@i+t7QfF?op$b~;lf7&d$NN|eu~^+&p?(SuYg;W zVJIFg5Ol;?62M#V&wE}m;KNt>61NX7?{Y9X85vtLqCV|t(vqoT`!f>nR=Y?2)FsmB zJ)oB+NZ+t0<6vrsBQD5%I`P6rXqrO$j^IA80=SQ;#@vBE4!CVoL)TWHmsd~dFSg6( zY)-&ILy`&GM00C__=_Q?)dv>)_kfekVAbSGta+tuD+*9SYJ0(At>h77R#eZlCpDS0 znw}+I(frYS%aCSIP?LgWkVZJ-ufccuzU?X)v-2rOzH)4I&vu{Ik+X6WG7Vyjfg=bk z9GeyowB^_G77{L9b7jEl$SeZY^8(ePU04lwmM)M~Z#Ott|7cz-E6v7!z|O77xmCg& z=JW|v)eP-I^0(=TV|Jkhup+$>wXf)AT#I2V;6Aj&@;_pMo;-4U{tsP%E-@)<^~)_! znw%?8_08ZBhd#N#L-VKr$6NS+9Pcabw}4r-pIdg?q!r&odFHvYUK0-s=TNyVR}3Yr zCn5KM!fpG7erCoiv}YDiV2q@7$8uzyP55Fcn-iURd-c9(>WAo6LmewXYj;NPe|A-l1sZkhKE7VoO1}n7NS^1)fk<=eSteH zndAL@rd+x8o_!K-Okm7)gPfBXxf3K#n@-PFJ)GtD(SnzDeBpY4+~qjR8_s6NQ^%{p zofjZ>S#E~m>!x%=_$31ihO&*SMG4idyG>ehzoC6lq?iWbprL(}QPvDW{TEM?Y2^1u zEYVe6*F?>{mZJ`yeD3cg5^jpfJ+jD8IjwciN%)tR(F)%gFq_ozOZu#k%`+HRCwh#h zwNTXi=iGto@4UIjYbsiA^r>)m*Rgf{qTcm-KBXss4&|JFnolI8Q)lE-dyuFgFqINFP>qes!Wee?ofOd+j8TzPlFmPP0?o~r|l4l^I*?dsyjj~!FljpOsH`45t z`b}FF1_hBGH~P8hEa-FZ;($f|)fqzn~RNjt-Br= zF{2Rv(k%|@&qej)=f^px%&hAsxhOMcgEzQJWUP#go>aioJd74msYlQY_#Q&kle|7q z^z~b1k#5d$^TuVBuhCe+FcQ!RwyJi2l~??W?bZ8?_!d0_(|W@(#9FcP^SGHTaQKbB zHK_=M{34-)_v$a47v$sbP9JlOb8n(*2IZ`1YMs#X_022)tGICE-2t6)G| z49X9;11*jQJ-=c~?HP2pn+<7JjjTicdBA~7K6U1qfg!~xQn5Z;gruN?uGP~K26O)k zDue)pNN|dqt?Ijof6=I}{@6E}!91XXV0OK*U<50F z2!O(ZeHGcAYexrD=2;g7iFThID((2$Q>lt<1R*yRf0K?(X5M;ph)6&4NPrn9{r+pigDWp$*E zo{4SWzSK4KsFDe(tF2(<9^ZKi>3!{V!AF(F9va31nR8Ett$Gy8mLp5PZd40r^Gt;sbA>(6zrA0{s8Qei zamaOh;xbodcUq+NUMb4k9Ida5T&i+j@xO0oLCs)trla$Ss`dqZzgq03l}(dNYuC#+ zagoBYe7|n{U*j6wz(i1tjV;d58BOd@frxpVJ76hV%hyZXboWhyZPi{nP)KxP4&5U+ zP0sebz%4XSxS>a_s=1dgly2J&WR-|%m}UwenR}NE(lmDU_UQ>;bCB6@u-H^dmfw9B z_H|{h!>2KtvMx3L_vqV$ATT{*&V#kxg7M-m#U&_e%{Oa|QSCkUmrFRl0E3Myq6=hS z16ChFjU$1FG{P3}HSVw%dG};K-9BiH;6<1!v zN;Je0)kDF@QSj1pa49HZ@x{*g$2QKe9nP}dcxgYt-L3DL=n-IE-K{F;G&k`GDefi} zH*cig6IA%@8$;+wA@uX~ajJ-Xz-@|y=w6bYY2st%rmK@@Lpb`3(d-s8CcoL?_LGBUyl%r)0svs~A_=bB~dS6^TO+s~cW zHJDFA#7>th9yWspG|6F=6aMOJsMq~(UoT2qn;#Fv#mhFWZY@ZljBvMx_@fayCLUTe zYYr}6pMvVnt@2#$*Q>QI!Zd^9dvcO&vrjfI#GN!x6jA^3j>U6;v%wOB#nShzq7k=7 z%soq(2@FD5-c=HJyUDx79SM#tO*PFXgb!|GRVZm}n|7YLA~yiJ3Ug=dN~RV+;>DTd zO*{E{+wd0O(?0PRyj5soWF*6%GB%HOcpg~h6}&%yFVxSC0ueB=qD60W$ynLFvM>3S zWM>iN6|2@Y#i}0(fl<$89RlC7ggp3Z!EqhFzqIhW^F6Q*c*VYc!4%>x^9ObU+He~_h$ z$Gj#K{5rpJmV^Pi3*-C_@)0wygxbxNKI71S`?acln>3&>3A9z|rp$#>Tg4t+(mSmq zFt>B@;)R8$JJrNKJhk+oO0o<3Xs+&gvP=8>chZ7GTE|=OPk{>X+r#*i#;E5Hznen2 zEJixdH625LkWFiK&x{r>q=XaV-o3ROea>~SX|QI)%(R zNm7!K2X;-?7`$bDRR=!qgqTUa)6xc;32HD28u8>JdcdoAs>T2LMB5f!LB=Bn4d3(^ zN;sMRDfqRtP0`9tq=NWHob;*-e=`8~NqBvRb38z2lX|96ai^*xZT(mDH%n$j|B9-h zPi@z1uil$^q$y;cB;_&wV6b!7Ix5`E;L42a={zB#K3;7uJF%@onDRPcEb47!`84`` zuF@+^I0C*`9rsrK!yD($%Z68r*LpACB}L6YY3$1X%9x3HoG@6!2|VbIRAQXsHs1kZ zWLv(;bb~2mDPl!({oR1DjK1bqvzc?j#nFm#GJ)8GdF7VrWv?<}1_bP*utR%Zzy5Bg zM$d#&EsxE5Njnv!T-knH=x*B__3Tb8|Lv=zPCEdYaV2qNDK=2yqOAZ7q0Vnhi~T=l z-v7HX=f7J1-v{ouQU6rTP7^=-*?@!c{JX6(r~Ir*wQap^*N>XC2A)BufZcX;A&aXM zJx5{Er}eb7P8aZ6$UL2#PQAO|e2j3i%G|f(fsslxV9;F==TtO7>to=wM5gH{Ry)TI zmmAtb%PfQ4OLULl(KwN237%HzhkgoHJdz>Kz%>}-c*{=$-zY&kgWYsuZnwe!XDE;i z>R=LFy4#`PT;n+utjcwda#-mHa5pq@0JL!;4Bl>Y^c_Dg_RxTv?Mm9yjgo7LnFd_x zy$S~Q+H$?|@y*%N!@1nGRo~PYFK?Yq*Q_5w|q0C zr$qR6abv1Hv0W?~cEd^o^n6)Uhu@$zXg|S!Y2b(CrF+31tUU(r!9U+MJ);j~8z?=L zt*Vnc$KGQFE=M9-U>>xzafe;(Y)1OIjCj*CkED4d~YR)a<&Mg;SqXxpRz4<$|QS`Sl@K z*KrH(neoYnc%JH%7(r3nTj8yO8#Sm(cY}T^)$A2N{hEvHTMT)2SxK)#0@p=W(Ff>2 zV{4yVDDdQep&UyNO{lm}5vq>@R#NW793xYTp&NoDm8KGjZQ~CPC%z;!Qf}0nzG^oB ziY3TgF0`psODxwRP0QE&kt;I7Odxvbv!7B;bu3=(o1bGwvCv2}1NF-BF;Z3GOq928 zbE{v}Ey*?@q_(=A1z@|kNg+(*Z{dQhKurzhw9H<^b)BEpNdKQ2P5~WL4$cQUsUbqP(xdbOC8w0$pq9 z0~rSKu(NWn=2+u$;Bj*}7QtACI;(lb(~PeDg`y_yiO|qdEpKf107BY~k~5{Y;-85o zct>1>8|(S03pyQ}M(&UR)sis=-yO!ZxbuZ-*StXvdu~m}^!XXm!(5mQ;OOx)caHq` zmz$hSJY7w?fdI-6g&}&sigOna6^$MC1U9e>Z3UEFOh(79wD|<*%f+n4-PuI$19#@a zO9fs!iMH&`-lHV4;f2n#$Lb#mYuGjYsy!)-wEF<=(sDpm3u$H2@;9@ESx-EYKY=ia z%WgsOLFxn)V3Dp@dil&PKUYX3CvNaU4hiEoV)$xEu>xrsTio&T@by5xYkrMUh0;S~ z-nGPrnbGe1n|nKLvI#~J2ucJ>;+ky`QMW70tb#T_WJc}d+PetGw2wJqA2xi|t4IK= zMX5=->2crr($}bVejrZQ$_+cUt#kKUnB~v?;o{4sJ#qr(em`P{5?O?(=&sy!`-RXS z)6Cn#%cFWyc`LvUiH;4+?Ouny$H0bMlf2lQz4*qBT>8l_A#=+XcOGLhn@}}wtx=27lW8$Ny$40if^a0JNu0+IY7`*}iZcRc> zqEg-J)?}pj&SmC=m?6HRN`XBU{5J*y=aZeu`-;6M@LA5Ry81@*-|p+sYzPzB0U$K| z*|*1KP$hyaz3zQ3zW7yV?2?w!-lf}Sk^?8)vPIzbw{GeXJUs+q`=XwOIaqIX_1Wo> zK60m5SIhYs8~c~%F-%00MABTAkQ}R|iP0INE2>et0_+*o-a^0WOG~Iz%hfcitSX&a zQbIY(5=F%_LaKQJ{maN74RI2qo7NB?d4%cYr5FGGB{1%I`x!Ic$k@(_#jf));)bV`z|s%5 z(JP`}TtzUp%xFHTguGX?fIjp{_L0Q5;azJ9T`tqJ1~k3sIs zfd;@l-C*tb&Zn{2BJUzCGamEU@cyBC_)%gY5823i5lgT- z*j6C5j;4?Adn3!;NHAaow1fozqLL}(fFN9*OB4f35^m|lCS8m4B4bTAH z$MScSv30gqPOAYU?>;R^i!K^(_?YAwOK(1orriZX^(T|0r|y%6Kl51wwFD=pHpyKX zH1kE8!76e`Y1&=k(S{LW4f`Olx_?6TYOs4}XXX)qgpfYO1ypF==($;%-b&s8Ie4+> zagHA|E3k06Fj%xu8?Gk0I22d5L!mBe)1F1*hU2rTn~SpVS}*M1%euAE7*;WpwXoF? zzlP}C_$btb)Lj{<&+Agj{i+KNTNx{<$DQZ%k6P~Cd0*8gR%MfN^)HP0UxxiD;t2nA zXRGSEX%UUcnQq~|ez;)-X^V90dUm4gEfNySIbHtjC|5}rU^ulN^+lYw%dGHi@|x|& zST$j>%N|j3AydTeA!ux|jhUAyHEArm^VmvbCnoEV3wJH!PKMqMJvPj#N?pmea}cz$ zpUT&@w)Js%+T8e47E-hXI=fquvQK(qW-H^1yk684ZU&mCY6C#r4!}3#nIYqu_#{E) z>idsIw*uF5_G5bFlQGT_7Y6-;J^UsDLirEAarK^SnYp1WD&IQwXJm_T)+fbhx*nNn zj2r|lqiP5d^9@k5eXTfAJ;4da)ozWTa6Cg}vpqka(Ti-bY8UorWdnt+8uAwkDnKfE zB2yZ|o;!s6NA?O5z2#{MYWE)20%^5dad|`evY5A8@gh|gb7nlVjH&vpuZ)aZ6SOUX zL$K?k9T1|f;FY@%Slbh~{r4%?W1=EpH2@LWs6?sS3$@|4ZWE;gHiU*UtHMIk^HEk^ zHn`AnT6-HwgfNZ1$J)0;+*1EB8k`LqNtp={@s4{z5aCtXNGp=Hm8O1I#Wc5pSC@A22!xDWpFpqn@^9$aFR&)g9n|V7`eu z4k;Y&H-({j<4kp|B?pSQXz@7tRoY{3G$-6Wvox{XnZfIDSC^vNxxo_km%jIx*}mjrJY4KPC{p=F z=0U@?uD2$6HVK;84+n|Z$1$DjbF>+?t&izZnE7rmes;Oby>XX&U#@Y1EVT&SUwDeR z``9Zdz>$h`frO22E$ew%Y(vOsAMusU2|@LrS14W^^uwLJTFn?&#lC~`dN;M}SdB0jw3!)^n?x_@-4-Fi`7-TTl%J8TY6OJDAR-|8}bJD zZzaT~VMfZw)%WUD)OvkxH9|rRR(yvW3oj<5(C+Yq`7XL*d|E5aUe!CPp?OceUG2*W zMG1;89oebs!1bxV-zdlZ0npm#_)3NX2E>5f zX5rBx&K!{GM5fpB1voo$*vl z6>p92Ss)qhJt&mj9H&gpXbe55%M{PHSBsy5h>#pGnGrJ*vE(v_%}=il8?+p*pWoWE zf-G(ENWLg@sC3(q(xfb}n-Uy+&_4#_EF*?MbxuUv3}Edg4I=K2_}PQOB>b46%`ftaC~6r=D!QlOC^%d$M5^HnD-BC;5(a zAjXkPWBxyTv(~W5l&T(LMAp;l2^LD}UqNo!A0t1=b^Z z#dd1Ug*DUXX0%+@HoMt0GA#OyD|%VBv-=k(0nhtm07e$cKise`$b%It0;?g3aTB7h z%DN-PvwQf|eCFukQ?+8yk({zj8Nj$>=#TA}?-L&n>>>YsD3~gE&AgAlf;T_-hwwwMU%A7GBdsd+>WTkNg+vav%cKzL~6o0^7E__0p_9|^#vKe z`_G3ag&vky@tf~I_*^)d=T?W?Uyq_BR%+C{VQ%BRGTwt2wJkUr-izGK&4jlSvv%}| zZVi0r=@YLZ+qB7p@bikT$uzTZ_q^)OirO@kdMdsWC*0oh1 zR0pus!jyu2hgWU#Nrf_o-1&sELHcMPLZS*whPrx^Yo}eOS>bwypI?UP7S&QYNc&w) z;UTv^l^YKwt|u!^8c*xYT^jgiyKpev+z`|}UNRlVIKt29b5AE?3r3UPg~;$c|4ea8 zZd1F1(Hy#md(uMuy5+O+P%iT7+fax+i1JDAx{kB}%(r6`sK4wmbl4N4rB_y%na7=9 zcvYTxA~zX|NioUgKK06v>%+cb!XN<_rYR48L(5Rj;@-}^1OX@4k~7t-4A&BadKHh! ziiT$UJhh6)vn{8m;%t{kzbj0LM#}@O?j36K?B&lN8`CR6|9EOOymGSwP~Wgs%GTY` zVsT_g^Jvt;hQA-yxI&Z}c(Abf@J{~YX|mYCn1xVL!E^gAh-GS9{Q80yn9X?bjy(7e z<&_WU1P9x|ftw#oI-PUTuZ0AjNgixU!CoysY#qnwDvP)(u4)IeBGlhjx@nT%>|c&# zO6;!@9LZ<~fhHKMnJttg9_Eiyh9@!u3=HbV^=?b_9tc~fo`!sZtBZu%*nj++ zD0xSNDf*K=f5EqJRBru*HbzOjSn9O+&J7X0I|>4=0sWh#kWeH!Z!$p;6a-5VQfa0i zr#v`pY;fKgDPt=9l)9#er7`XjTfpG65)6Qj_ti^u8t*ddm$!@0m_?wa!Xi8Ab5gZG zR~PG^>lIcUMPeIvbmQdLq=0Ykt9N?yoqqqFkHEe%^sX`>%t;j%dmbEV@Uz)py>4XH zsJ_OZ+#6IQ^}Q)Pip&bg2>8FxRb^U9a}(8B&0)hv@~ zLR=JSMXq>(_|gGA4{AkxYO<-Mw^~EG!g5ZR$P6#u80Pj)+bZoGj^5z?b?l{>3A-=C zI9k9@KNfhEO7N7oLJn&tA#FyA#2*`VE6C}Bba?N08rB6ffYvH^Hvpmv`F0Spxt9icH@F6D$|=QkZk~%Yt{UXl8^W5IY|CLibIuZKMNpY;Y$N&A&V<+0udyN zg3ZE2C`Nh})+H}yl+;Ph5kx+Ws|uEVQk4GuA?rCRExEGhjuS!+{uQFzr&lcUbyo_D z?TB&i-`?_tF;nEt@NBBB+G=QZ_YD9JN9KIOy0wMbk6 zIZF8{O6JLg^C9kRk%&>k!I7y)G#077Fqq$jXK3%vvQ<3A4(nRlc8k*Toc^+2PZ*BH zlf6dnz>69vlasNtYB*#=N15;_R-4v2w3RTXw^h!${qDcR1OKY5X8-v7R8lE5YWq01 zhjbSM((NU;G z=ZSOT{<;2}mPPBYQ4R+*PQn0EBrl)Mne`RnKn&HDTsh(BT1U?6HKD8RwJn~e%`S^c zNiU4PkO4*N-?iyHlF17ZcWt?il^J*NF{t(wCJiYc;FJ7XMTARr98+Y@S<`2<*7hf3 z+pkQuEdt7+P!efB9S!iUb4UsJK*jl}`+ye%K>^V5+?W1~Zb34tHG&tCt)<-~Un)}i zqbJ=C7nM0Nhdg5U3(@z9A#(HsxT}Jh&E~OmDeeJZ;#PyRyi5PB8zbTzp#bb;wwy<9 zrqsrv4`ofGk-0I`3v@K8h9gE%PvUmP5sR=TOI?e?F?)|C5ar6xt~mX^FLvmFWX>W* z5?`*%P@sm&q0&TpAyEqkiM}DUn@Zl+d)mCY$zKQI=A>Dif;G zwGk)x7tP#3p#*wOz-jpS3EEFQS91E& zs;2v4$cC&Ekh1^da15?NxE?VE|Fg#eY-sQv55rau#?HMveyLfg%|3F~b*Ns^d4^&X z#X9dliw^R&cue0e9`Y}xMBTqW0*NPG8mNCv570Wyb_z>W2VS6|gWN)WV3%q_5TQDt z;z>7rho!vBi5stL{I1c)rj#kPFGB~_6DV}RqAh{Y5Vd=5Be6*4M*yesRF2yLauGyp zvjbwtFtUQ+sv>t06}G2|4G-sjmV;+y{evBdC^XQ}Wd6>ge$OevJJO<9>QIG|i!=Kz z-}Wu1oL_s*6ppxF2xZ@Cn8g%3F%av>p>MXDn|pm_>%cdQ4YjWF$sCSmPtPJu`>Uzj zO%#3$W~*!$v6h9!shuy9`05iK-NkE}?IYPy}!e7g1ZOV!(kX*R8Ij@jNQD z*-%Pimy}W)f|v6`c94y70Gi;RtKQj5AFC{;uoM91G1_TsR0KH+dH6wf857_~V_|P- zLADaMrxsGv1H4JMZl(zzIU>36=>A>fcN&1uQMNrAb7}o6@Rt`Y80f3+RkAAiCW%v^y9ocZF;l%_uL*~h+k6a%>ME9lq%auu8; zMchV|&`#UshNa01*`wGARg%56wt-d$%BZ=6Iy53*eQqXxScq8jxax9eqm!IApb1o95|+@#1> zkWZhR_Ob+IG&&gfI3e~85#taw>HvP=M67daU7@Yz_0L#anYv}+?x($YH^t{;dHrL_ zt{NlZAUc2_TKq!vg$7IgKN=oo4P(G{0r8vbBjuxO=`wVAXZ=aJY>>hlE^e+mj;uSv ztbo{wk&rL{wrZ9aYw%uoI5Xe02Dsgl6e3`cuPmm&vXScEjI5N1xlb#SILtX>#a#T- zDbKXXW60Y?V0EPD#D#SuYoL@iXwE;m94MPox|l6r+9>Wr$xHV1GwBJ~N%R5Qn_i78 z5t(Ck5`T~LL1|D@d5NVyc^1X)VOEtp2NKZYZ8Z&wj{G6GpwmD1Q*NS6fA(p=y6aLg zYlV)XnpQx}##!KdQIoE1CB2=4Xej(&X)Rb*uW{;Kta$ldY;8n{;PMv_-TCE-=pLlY zA+MzEGE=Y>&~08#_6x>VGOib1(z$^IPcAr*sLMExR6S`WrpOS{x6pjv=}aCp3La4&81S%9GMvL=D zNb&1fINyX+n=F}eF_ZL3r;qigIdM@EM0&ADJ;7G(G=oC2A^|B={mQMBpEe;x52jIi z^YCiZz>Jx+)x28YjgpNpoiT*CFMxMgyHymP=Q{*b7?B~g)hz4>^q=qvdh+B(+J&q!CV zJV->joy7EH73A7Lofn7`WDN7)xOp}y*93!nnv9&j3KUW|CzOm^Uw*X}J|lHWGWqCr);C%XHnAPrckT}I9nLCI{56iY z6>%cF`ztL*oc<>LJ;F3+_W2pEV5=6r%Kr<+zr(>i&l{($I^X^Q{KTv3RL!2y$?UPM z9J=1ECXH}8SqNVKSPv~#%qs`_b_EEP0|f0=8<^^s6JSo3;Jnn!FYc@#|Kzm77)qSeD}~3oYJF} z8@EKGbJ2FRO)y`4USZX>+hGeQFTFn&oUH7ZKxsvAuRWUc+NfPI4be-#qH>oZ)i<{8 zl*+Gx`@~OP1woH3k z1tWmcWzA6!&i)lU`0KMyL&gNd(td~0zuo`8`h_A_c049!@#KGJ9RKeBFzCr(8EyvL zczTm4_t#ta*UDs=%gHxg$-=6C=i~oMzLTF)j~w*?zrknz?ZW?xFZH~^n9jH^zI5uJ ztn2e>=96#4?gauP{w9O{%XPh1KFT!h>F`MJFU9}MuP|a9_$EU@{%MTUU(>yRt^DAz zQ)kY^DQo@faQ)S?|MIh&_ZR|poGiI-Lp%?y% z-Y@wv9dDlN`H=FL;{UZO81}Bu5KyMsf$)#?Ud;f?CH-Qz|NJLgtpAE3V9aGT)GrVJ z+d{S{-^s9YtzRRL`Dp4ToXnpr?#;KZZiP;kG#MA!J`**)rY4;*IS3oY4WB~C!^kCf z={2YL#_Qpg2{N!uYT)u|jN_&u0dmNDDo%n^mb^-|A1t(TGtIZO->wTVh|bYZ{UgkV z5P#L4QIXpgHP>zJUhxgWj?}f($p+*T%U#TLDe4m?gC2+8TXKXt3ofIK$8#Y+XI%oB ziPWzeo!=yjsrq^j-H9#?Hv_vMpY0Ik$HPTaGR|VQU8=3ZGhct|^*g%#BB3Ae7+vPK zKr5NrfB6pA?$?&UKrS>{^6jc(aj1ABU8RZsLK|5ndhPE0yN|of@?{xz5_NA*d%T^+H^$;;b} zLHIk@cq@I~R$aeolw&BYfan^8wb;Aaw@s+kK>ZQtYO$=l2Jfe*g}Xd!4mTrrvZVnv zmk1155<`{z+TY$B_fiDSbU814%ujN(t}fFmr6%PnJpw{L8_ zBx-FIj>Zrb1|R&!&QH}|XB_I_sNp`aShvdS+7ot+632=9w|MPE3_UFChq$Mm|m&f*#121|2xJ_ zzQS-Ptj}+mT-kYfxyk01HF{zkXP{d9ptA6Dw%O$Kwm@mGLVo(hbFYq<4jK!a*AT%H zRuvZ51ytq!ETVu`w7lF@)M@dRK`d67u zu|XITP6Tn>UaCr3N2b{$78_aSy_J`|W1}`RFyq!zM!de&LdWR86;8fVtQhWsN$8Lt zI1C%DSgV+IK%HxJA9=~jBN~5jgDediIqj(xE2$u6Rv`V0QiUt{ck)37$Cx2u5(*Ys zk+^Gvxi6Ren^Ox_KJ)4W^PgPRNa(3}HkG0Zx2E1 z(KpZv5f}Ouj_EC}w3fQkHAo#_L?8zt!jP2;n526_S1?OF$J%HW^&l>!Q7u6ZCtf@U z<`K`<4q)+HT6AbbT$G0-CBTyVV@Gz%*XYheG7Bk+Urz_E*eI;++6N?T0`xo^A@y*< zCy}cjRTh=VQ0gou2h#f?12WTEWbNAkEU=1Sx8d|?dqAh|=&3YRQr*8fR21=Kwl>g) zcWP_Secp&dIW`o7?^e1^t}|^$s@7yV_2!3}MvNLiC9NbYuSvUruAJ9p8!7|a(kQB} zD%9?-c_WuI0%s_j4o240-trY-{44h5geK^b;ma&Oo}-%!f2@`$Z|X0;XupTqA^Zj9aXi&aC}YicsAOLhk6K)8=F1l0j(z zn^6X1tKh({(xIKKro2R#s7eE%dV;T@<_w0`G~hi7x0A;qKAX|k|Wfbb(9h%71d6j?$Or;pW{n{u zL4sNlvbG;lBdIJccu3~wgq6a*)RNv8!lq`IesmK_u%G6FMmS3`cYXB>@GK5k`Y*F~ zd8*asyw9i?Zk|0;i97LAhxW8Wpmy(~!Ve?T#BkJ@G}J!y49`P3`#}{_7a_39Hu7c`sO)a^ z==j!7K^D`^$-o6w(oSTN%_RpYpmC@pYDYt1&<6Nj8waQzwnsbXcl69nH7xowjC;kq zu%l9=VI%Tgp@;wSo}tLNGdX^JchAL7$3rv!&6VSf*8_||g zCNqkV7n-JbjhrK(-?h?AJ0K=~QHdd$+^4hd6m&_djWWNu$@P6IZqogz6_B+9KBfR;_G1mI@Yxe7*K&8zaG^hlpk!z0~Xz@K^+Gb0tQ;2=v4nn7!x7xZTe z+38!`$F)uBcjhnD7ixm&1>1}BGM_}W#*en#MfP&MMd#n-c;oVZ)>{9F4%EoB+K2|& zXw89%zz1FfuMUM1swMBY1fmL()Yk-MQ@ z);}Xt#F|C|1ukV@N~wS`o=gGS$1$aR+QBBoqwEvk#vPi8JipOBVaf@ zrBgqf_Nw#+M*uRL-(D6bYR`C3t+hhCu*7)596DL|JE^{%8((%+C1-J6xZY9c&QD+R z^=QYLlDWG-Plo_{On7U!2G4v7R$Yhg4Rf9tuRpopSN&Ps&Lr0uNE<#K zkRZp*L+vXW8N8c(75og$2Q6vSB?T^xC14gF@R=-`Dil=#P#=2gO*L+>WsMvW_>?_U zXm`7u4X=m;zaureC;I9ya0I+TJ?X-|p_?S_>fSY)c+|F=3po60{e0cY)d~F7u(fa) zz%2gCsiaLUx#Sg5*FD*IXtrX6Q zRmWknVL9LtbZ1CwMNHmMyoixQ&AHUh>53+Zx?yaUu};E|3SzjOGh_56G^_=2DOqM% z#3+_2HIexFtlKOfc@9WlxfRtYog8HRG6a!4;yL(%h`A1bv3KCW ze)W>=HEPCGXN`}u@+1p@f0lf=G1`V>)vk`7uSn`HKAWz!lSZd+&hdRpOmY4r|B;ft z&VWNMHK*_qNU72w{S9_QuQ4)WRWUn1+?f%1YBW6M3vUf+u2OU0??c2WtC3@&`@2s8 z_E8a1Qfqi-Y+XpFcj5AgMYVH5z3)edtEXj8U<<5Oolh&JG!9l(dH?J*$xCni(n$TU z-L=E2{2h4vznAki`!t*7Fd|4+j|@@6}A5I@ljny=< zsHqehEbdF4a*5g7mhcs?g$B_Ea_5+u0`1J^rb|nZf~uyXJt{m&u{e@V?bQa4N|QRo znw452=dwjPB-u%jOFs?@=MmG8nP-m6v3sn?)Y#z zs53mvFrJW!2X>lQLR%hVMl7}Wz2A2A40S=K3I2WMw?CQ|*IN1lJbU~2T`EQ&`RL?c zEKOvRwMTJY8rb$O0!X0pJYH6-1@g+Ry>?kjPDCy(&a9Ue;@WovY(#oK-m-tQmU;W& zwy)<%k(h}n|LH6qx~hX&$eqUja=9bQogu%2HmnLWuo#}7cSN}oI+JvFpMOwvu{$)h zGIj4u6OPVz69rTcLM9E1-*<`#dFp2wb~z}emf-R~=>!>N;@lhEMXj=52m|)hE@2;N z#a|4aeX4IO9e0fXh&IH>43J za$5`MK-9u?mGK!}B0{ZrDTGHx5i;p56*~gJLlKyumpSHCxuv%NAhtre3}R<|7VDp7S~VHdivdVP+x z{NTa-n?jaa0GK&RZjMdXx%;-P@3$M7ZD(I!04sMrF#Y;W`2#dxGzztmxhXQ567ra{ zIAJ%?${zm+t;*mF>yi6=)#uF;YyrTVMhT~V0Q!mpb_BU{??Rk*tA5EJ*W7i6QXX^B zD!^U5hjRV)b+lM4R<4vn9j@>l-%GNwFF}xg2gD2B2)(n^FF*O(Ag=d3+(*4TCOL_L zr0}b6V$Q)+^Ih(Ng4zPXU0I^$&e#zKS$Ca%T!zu0{5Do#;Ll&xepU*irA~2+eh%>^ zAQ~3b`8dmT=tL!TN_ws9Lq?YtbR_QF&Rsxa&WB*ucET?A@p;r^sPn}O__r~6jEsv}csB9Txa@0z2 zw9<#VumqwjP{6u8*TiN}$%c~( zT?#iDjq;OR@MK&tUBRfWez72ag54NlLm%jgQSm^}onQ51+>B_~N)yW;NXH`fpq`FD zfTD!FBX@1ob1bjhXIm+pJHCJc-V}jY?+C%qhpOsOF~u1vn?Y+qzxPWDd@nD)KNabl?OTvoF$Nao)81Ib`X&w?|ay`)5!d ztH)5O&;~0=7|yVw6B5|B#lAe`Go!e}rw?9WDC?R53D&OJGFQAxaDxk#W{GozL$B|(=u>yvo299V~ zKGcL?Tp7&|V6`PkGamN5tdRlY8|};6EVZK|XH*AEW&pC}t9)Z3_Q|qdP^ZCP4P=<_ z$I+k$kQ$@ty{9*#-Z~%3ISj< zZJ*NvpqiPjQSt4a5-ct;8~RE~4^U2NFa>HQJ#H7htwU*N;8mOAA^?J5=z3I*R6Y2Z zw*#?lq}-*Z8`1c+S$j1^ITM~)dc+jd7}c4XbFP|!44qdv_7rnH!qYQ?y0&5~Gn@iq zRV#EprpviH+=HJ!`&+5cFM^2)U>c)l@~ZqS@K}7vn~>o91(rZrI!(wP0~qjtXRK!oUdEL-{-O5f(OoM?e(^O#K~BB8tE_|hJ5AS!+)&1Y7;%&SJGu;_lEq4fk<#0 z-(r+{$Mw`Ril{%+@z%vLnezD{eA4s%UP-t`%k-vm0F-os2dYtHNAT@u^yFl{DD+xW zL)<#B$MnZyOpX|`TX7gSiryd|Q3KDj7V=q7dclJx9afc)0jueySf?b`H=|`v7%~1_ zFaz(HWxA|ax)6d7nQOC7t;)AAmV!-gga&PMG|ugNB`YY!m7xVk$~Qlb&oD0}%`*Y{ zB=`EjtAzW^VkzF=q%#dd_goX$@cfRp0tb;@r?XdIuwGOuKir((QP9+^e@amp{K5co zAhqnr5kX_ki~a?x?ym&{KQFo9UwS73>~rjsr{bBTlK1o+@+~DNs`Hl`d6gTQ+frxc zbJV!^ce?VBj=zwMm`5hnx;9)4CUF$@4eju+628kSAP-u|xwc=~c9T3Y`-)f9jqVwp z6FqrsPjH2)iTftCrMr54%y9lTcmz6-X5npsEu35!9$Je0;VxiT=Sn|;dIWo=%scWT zM3(2pLgj`+VvpjFxB*qeh1ZXn#BS<<(|6Q9yL47E9(GiV?~#vPS2ShN!2JanH10?> z5j;p5o&7!Y`u{pSh*m6S6K&;)HjcOlI*n&`Rt9_;0Ucz23~nOha})xWS#4cbOwU=J zn8#V+)M(rp-Ln~B*y%THTdeDtkj09TReM%7Qm}g?^?+KjHfjS@k%-&K4EGy_&R+-p zAvZZnqKh4iVe(*{bBIn}?Pnf<-CSJ9T>9f1x!3YS4!GNSi=5ELNDQO7^c%@AA**bx zfjqp+n6re)NSvqT7+BZH4{TMZpnJ^AarYNIfwc6}Z=%O62`8$_i@p!b#K1QLr?7gp zE;D-|>$A&y9XnN>%X??uuA7MNl8gx$;?sm0N8uOGUI;?_?n7@m9SgZV4ZFAlkN&dzoT4JQwh$^SN(N!VT1r zW;l=moBF9EUn~1LyPaT6Lc{)+1^)7Zm)MU!&ddyMzH)Mvor%$+;{$eH86e_g7RLly z%PPa~&gl%f4L<{pth$>(-&?1j*uhA0)>IA$nzfa<47tXw6$R|1CB;-96j~Nf{!TW_ z{mZBR;f#^^oelnXsS;dw%DCGK?;ZY6ILsG!j{ah|F9A`%Iy3(Lr~a?++8MKfJgArq zhu{ASqd$P@7Y%#|3ViubBz(`f%y)XrK@0yoiu(^`&HSqs;l(hN_5Zq*|BXn##JGgG zc@7_&@;j;0f4;~1i?cskLgfA(Z2jMhxO4EU>j5pH`j6Om?qB3K(^HJdKT`Ytul4|S ztAO9ZuKr^LH$VR(0h%F3|Cac-_Kfbf9Dr<_y(8x+vfL6_glYuIS!yp z{QqQ!Kfm}@CZ0j*{1!X-?pwg5KL_hS-r~&v9IXF1>68C+ qu>ODV`acotKS3?{|7pb94LWYpIlQ!e34Vm}^XP%@{lY)&LjD)!#fVe@ literal 0 HcmV?d00001 From 2baff8e9687b243678f38233be1e5c4e159a8030 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 4 Jun 2026 13:26:14 -0700 Subject: [PATCH 03/21] Update chrysalis.sh and remove old script --- .../app/scripts/ingestion/hpc_archive_ingestor.py | 14 -------------- backend/app/scripts/ingestion/sites/chrysalis.sh | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 backend/app/scripts/ingestion/hpc_archive_ingestor.py diff --git a/backend/app/scripts/ingestion/hpc_archive_ingestor.py b/backend/app/scripts/ingestion/hpc_archive_ingestor.py deleted file mode 100644 index cd47c190..00000000 --- a/backend/app/scripts/ingestion/hpc_archive_ingestor.py +++ /dev/null @@ -1,14 +0,0 @@ -"""Scheduler-agnostic HPC archive ingestion entrypoint. - -This module is the stable entrypoint for site wrappers such as Jenkins or cron -jobs. The current implementation delegates to the existing NERSC archive -ingestor so Perlmutter behavior remains unchanged while non-NERSC wrappers move -to a shared command name. -""" - -from __future__ import annotations - -from app.scripts.ingestion.nersc_archive_ingestor import main - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh index 8e6b991b..03b56af8 100755 --- a/backend/app/scripts/ingestion/sites/chrysalis.sh +++ b/backend/app/scripts/ingestion/sites/chrysalis.sh @@ -17,4 +17,4 @@ backend_root="$(cd "${script_dir}/../../../.." && pwd)" python_bin="${PYTHON_BIN:-python}" cd "${backend_root}" -exec "${python_bin}" -m app.scripts.ingestion.hpc_archive_ingestor +exec "${python_bin}" -m app.scripts.ingestion.hpc_upload_archive_ingestor From 6b62d82618595f53240e8dec8f6c2fb624d1b0b8 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 4 Jun 2026 13:28:09 -0700 Subject: [PATCH 04/21] Update docs --- backend/app/scripts/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index 32e6c94e..ba5178f2 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -124,9 +124,9 @@ If operational complexity increases, these scripts may later be consolidated int --- -## HPC Archive Ingestor +## HPC Upload Archive Ingestor -The scheduler-agnostic HPC archive ingestor is the preferred entrypoint for +The scheduler-agnostic HPC upload archive ingestor is the preferred entrypoint for site wrappers. It currently delegates to the existing NERSC archive ingestor, preserving Perlmutter behavior while giving non-NERSC schedulers a stable shared command. @@ -134,7 +134,7 @@ command. Example: ```bash -uv run python -m app.scripts.ingestion.hpc_archive_ingestor +uv run python -m app.scripts.ingestion.hpc_upload_archive_ingestor ``` Thin site wrappers live under `app/scripts/ingestion/sites/`. They should only From 37d94c9a8d7b09bad0e709101349c28f2fd19ca9 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 4 Jun 2026 13:29:09 -0700 Subject: [PATCH 05/21] Fix docs --- backend/app/scripts/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index ba5178f2..de77f158 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -58,12 +58,20 @@ Example: python -m app.scripts.db.seed python -m app.scripts.db.rollback_seed python -m app.scripts.users.create_admin_account +<<<<<<< HEAD python -m app.scripts.ingestion.nersc_archive_ingestor <<<<<<< HEAD python -m app.scripts.ingestion.v3_data.lcrc_v3_archive_ingestor ======= python -m app.scripts.ingestion.hpc_archive_ingestor +<<<<<<< HEAD >>>>>>> b798238 (Add Chrysalis ingestion wrapper) +======= +======= +python -m app.scripts.ingestion.hpc_upload_archive_ingestor +python -m app.scripts.ingestion.nersc_archive_ingestor --dry-run +>>>>>>> 9b7de39 (Fix docs) +>>>>>>> d1d7783 (Fix docs) ``` Do not execute scripts directly by file path: From 87c84ff3f07c9e4624b435346a38fb22a0b99b9b Mon Sep 17 00:00:00 2001 From: Tom Vo Date: Fri, 5 Jun 2026 10:40:37 -0700 Subject: [PATCH 06/21] Apply suggestion from @tomvothecoder --- backend/app/scripts/ingestion/sites/chrysalis.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh index 03b56af8..c8b54362 100755 --- a/backend/app/scripts/ingestion/sites/chrysalis.sh +++ b/backend/app/scripts/ingestion/sites/chrysalis.sh @@ -2,7 +2,7 @@ set -euo pipefail # Thin SimBoard entrypoint for the existing Chrysalis Jenkins workflow. -# Keep site-specific setup here; keep ingestion logic in hpc_archive_ingestor.py. +# Keep site-specific setup here; keep ingestion logic in hpc_upload_archive_ingestor.py. : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL is required}" : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN is required}" From 0149eb0e9ce078dbfc2ea1b2c97d9fdfb0e03949 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 16 Jul 2026 10:48:51 -0700 Subject: [PATCH 07/21] Harden site ingestion wrappers --- backend/app/scripts/README.md | 29 ++++----- .../app/scripts/ingestion/sites/chrysalis.sh | 34 ++++++---- .../ingestion/sites/nersc.crontab.example | 7 +- backend/app/scripts/ingestion/sites/nersc.sh | 9 ++- .../test_hpc_upload_archive_ingestor.py | 64 +++++++++++++++++++ .../ingestion/test_nersc_archive_ingestor.py | 2 +- docs/architecture/metadata-ingestion.md | 6 +- 7 files changed, 114 insertions(+), 37 deletions(-) diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index de77f158..85faedac 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -23,6 +23,7 @@ scripts/ │ ├── hpc_upload_archive_ingestor.py │ ├── nersc_archive_ingestor.py │ ├── sites/ +│ │ ├── chrysalis.sh │ │ ├── lcrc-diagnostics-scanner.sh │ │ ├── nersc-diagnostics-scanner.sh │ │ └── nersc.sh @@ -58,20 +59,9 @@ Example: python -m app.scripts.db.seed python -m app.scripts.db.rollback_seed python -m app.scripts.users.create_admin_account -<<<<<<< HEAD +python -m app.scripts.ingestion.hpc_upload_archive_ingestor python -m app.scripts.ingestion.nersc_archive_ingestor -<<<<<<< HEAD python -m app.scripts.ingestion.v3_data.lcrc_v3_archive_ingestor -======= -python -m app.scripts.ingestion.hpc_archive_ingestor -<<<<<<< HEAD ->>>>>>> b798238 (Add Chrysalis ingestion wrapper) -======= -======= -python -m app.scripts.ingestion.hpc_upload_archive_ingestor -python -m app.scripts.ingestion.nersc_archive_ingestor --dry-run ->>>>>>> 9b7de39 (Fix docs) ->>>>>>> d1d7783 (Fix docs) ``` Do not execute scripts directly by file path: @@ -155,12 +145,16 @@ belongs in Python, not in shell wrappers. Jenkins workflow. It sets Chrysalis defaults and requires caller-provided `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN`. -Default Chrysalis archive root: +Default Chrysalis staging root: - `/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` -The wrapper defaults to `DRY_RUN=true`; set `DRY_RUN=false` only after validating -archive access, token storage, network egress, and candidate counts. +The wrapper defaults to `SCAN_MODE=staging` and `DRY_RUN=true`. When +`SCAN_MODE=archive`, it uses +`/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF` and defaults +`ARCHIVE_YEAR_START=2025-01`; callers may override that lower bound. Set +`DRY_RUN=false` only after validating archive access, token storage, network +egress, and candidate counts. Compy, Aurora, and Frontier adapters are intentionally deferred until accounts or equivalent native-runner access exists for those sites. @@ -201,7 +195,8 @@ Configuration surface (via env vars): Helper wrapper: -- `backend/app/scripts/ingestion/sites/nersc.sh` activates `backend/.venv`, sets the documented NERSC staging and archive roots, defaults to `SCAN_MODE=archive`, defaults to `DRY_RUN=true`, and then runs `python -m app.scripts.ingestion.nersc_archive_ingestor`. +- `backend/app/scripts/ingestion/sites/nersc.sh` activates `backend/.venv`, sets the documented NERSC staging and archive roots, defaults to `SCAN_MODE=staging` and `DRY_RUN=true`, and then runs `python -m app.scripts.ingestion.nersc_archive_ingestor`. +- When the NERSC wrapper runs with `SCAN_MODE=archive`, it defaults `ARCHIVE_YEAR_START=2025-01`; callers may override that lower bound. `ARCHIVE_YEAR_END` remains unset unless the caller provides it. - Override `SCAN_MODE`, `DRY_RUN`, or any other supported env var in the caller or cron entry when you need a different schedule or behavior. Archive notes: @@ -209,7 +204,7 @@ Archive notes: - Archive mode traverses only top-level `YYYY-MM` directories under `OLD_PERF_ARCHIVE_ROOT`. Other top-level directories are ignored. - Archive scans may include paths without a `COMPLETED/` directory. When snapshot status buckets exist, ingestor scans only `COMPLETED/` and ignores sibling directories in that snapshot bucket. - Archive dedupe is based on logical case identity plus `execution_id`, not the full timestamped snapshot path. -- `ARCHIVE_YEAR_START` / `ARCHIVE_YEAR_END` are intended for scoped backfills so operators can avoid scanning the full historical tree when unnecessary. +- Direct Python entrypoints leave `ARCHIVE_YEAR_START` / `ARCHIVE_YEAR_END` unset. The NERSC and Chrysalis site wrappers default `ARCHIVE_YEAR_START=2025-01` in archive mode and leave `ARCHIVE_YEAR_END` unset. Override either bound for a differently scoped archive scan. - `YYYY` values expand to full-year bounds (`START=2020` means `2020-01`; `END=2020` means `2020-12`), while `YYYY-MM` values target exact archive month buckets. ## One-Time Chrysalis E3SM v3 Archive Backfill diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh index c8b54362..a28a55de 100755 --- a/backend/app/scripts/ingestion/sites/chrysalis.sh +++ b/backend/app/scripts/ingestion/sites/chrysalis.sh @@ -1,20 +1,32 @@ #!/usr/bin/env bash + set -euo pipefail -# Thin SimBoard entrypoint for the existing Chrysalis Jenkins workflow. -# Keep site-specific setup here; keep ingestion logic in hpc_upload_archive_ingestor.py. +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +BACKEND_DIR="$(cd -- "${SCRIPT_DIR}/../../../../" && pwd)" +PYTHON_BIN="${PYTHON_BIN:-${BACKEND_DIR}/.venv/bin/python}" + +if [[ ! -x "${PYTHON_BIN}" ]]; then + echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 + echo "Run 'make install' from the repository root to create it." >&2 + exit 1 +fi -: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL is required}" -: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN is required}" +: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" +: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" -export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" -export STATE_PATH="${STATE_PATH:-${PERF_ARCHIVE_ROOT}/../simboard-ingestion-state.json}" +export SCAN_MODE="${SCAN_MODE:-staging}" export DRY_RUN="${DRY_RUN:-true}" +export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" +export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" -script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -backend_root="$(cd "${script_dir}/../../../.." && pwd)" -python_bin="${PYTHON_BIN:-python}" +if [[ "${SCAN_MODE}" == "archive" ]]; then + export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" +elif [[ "${SCAN_MODE}" != "staging" ]]; then + echo "SCAN_MODE must be either 'staging' or 'archive'." >&2 + exit 1 +fi -cd "${backend_root}" -exec "${python_bin}" -m app.scripts.ingestion.hpc_upload_archive_ingestor +cd "${BACKEND_DIR}" +exec "${PYTHON_BIN}" -m app.scripts.ingestion.hpc_upload_archive_ingestor diff --git a/backend/app/scripts/ingestion/sites/nersc.crontab.example b/backend/app/scripts/ingestion/sites/nersc.crontab.example index 4ec33111..59237663 100644 --- a/backend/app/scripts/ingestion/sites/nersc.crontab.example +++ b/backend/app/scripts/ingestion/sites/nersc.crontab.example @@ -21,9 +21,10 @@ OLD_PERF_ARCHIVE_ROOT=/global/cfs/projectdirs/e3sm/OLD_PERF # Staging scan: run every hour. 0 * * * * cd ${REPO_DIR} && SCAN_MODE=staging ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh.staging.log 2>&1 -# Archive scan: run daily at 03:15 UTC. Add ARCHIVE_YEAR_START / ARCHIVE_YEAR_END -# here only when you want a scoped archive backfill. Values may use YYYY or YYYY-MM. -15 3 * * * cd ${REPO_DIR} && SCAN_MODE=archive ARCHIVE_YEAR_START=2025-01 ARCHIVE_YEAR_END=2025-03 ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh.log 2>&1 +# Archive scan: run daily at 03:15 UTC. The wrapper defaults +# ARCHIVE_YEAR_START=2025-01 and leaves ARCHIVE_YEAR_END unset. Override either +# bound here for a differently scoped scan. Values may use YYYY or YYYY-MM. +15 3 * * * cd ${REPO_DIR} && SCAN_MODE=archive ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh.log 2>&1 # Diagnostics provenance scan: start dry-run, inspect logs, then set DRY_RUN=false. 20 * * * * cd ${REPO_DIR} && ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.log 2>&1 diff --git a/backend/app/scripts/ingestion/sites/nersc.sh b/backend/app/scripts/ingestion/sites/nersc.sh index 9816bb77..459478b6 100755 --- a/backend/app/scripts/ingestion/sites/nersc.sh +++ b/backend/app/scripts/ingestion/sites/nersc.sh @@ -12,19 +12,22 @@ if [[ ! -x "${PYTHON_BIN}" ]]; then exit 1 fi +: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" -export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" export MACHINE_NAME="${MACHINE_NAME:-perlmutter}" -export SCAN_MODE="${SCAN_MODE:-archive}" +export SCAN_MODE="${SCAN_MODE:-staging}" export DRY_RUN="${DRY_RUN:-true}" export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/OLD_PERF}" -if [[ "${SCAN_MODE}" != "staging" && "${SCAN_MODE}" != "archive" ]]; then +if [[ "${SCAN_MODE}" == "archive" ]]; then + export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" +elif [[ "${SCAN_MODE}" != "staging" ]]; then echo "SCAN_MODE must be either 'staging' or 'archive'." >&2 exit 1 fi + cd "${BACKEND_DIR}" exec "${PYTHON_BIN}" -m app.scripts.ingestion.nersc_archive_ingestor "$@" diff --git a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py index f329b3cb..11a9ddca 100644 --- a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py @@ -1,7 +1,9 @@ """Tests for automated HPC upload archive ingestor runner.""" import json +import os import runpy +import subprocess import tarfile import urllib.error import urllib.request @@ -39,6 +41,68 @@ ) +def _chrysalis_wrapper_path() -> Path: + return ( + Path(__file__).resolve().parents[3] / "app/scripts/ingestion/sites/chrysalis.sh" + ) + + +def _fake_python(tmp_path: Path) -> Path: + python_path = tmp_path / "python" + python_path.write_text( + "#!/usr/bin/env bash\n" + 'printf \'%s\\n\' "${SCAN_MODE}" "${PERF_ARCHIVE_ROOT}" ' + '"${ARCHIVE_YEAR_START-unset}" > "${CAPTURE_PATH}"\n', + encoding="utf-8", + ) + python_path.chmod(0o755) + return python_path + + +def test_chrysalis_wrapper_requires_api_base_url(tmp_path: Path) -> None: + env = os.environ.copy() + env.pop("SIMBOARD_API_BASE_URL", None) + env["SIMBOARD_API_TOKEN"] = "token" + env["PYTHON_BIN"] = str(_fake_python(tmp_path)) + + result = subprocess.run( + [_chrysalis_wrapper_path()], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode != 0 + assert "SIMBOARD_API_BASE_URL must be set" in result.stderr + + +def test_chrysalis_wrapper_defaults_to_staging(tmp_path: Path) -> None: + capture_path = tmp_path / "environment.txt" + env = os.environ.copy() + env.pop("ARCHIVE_YEAR_START", None) + env.pop("SCAN_MODE", None) + env["CAPTURE_PATH"] = str(capture_path) + env["PYTHON_BIN"] = str(_fake_python(tmp_path)) + env["SIMBOARD_API_BASE_URL"] = "https://simboard.example" + env["SIMBOARD_API_TOKEN"] = "token" + + result = subprocess.run( + [_chrysalis_wrapper_path()], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode == 0, result.stderr + assert capture_path.read_text(encoding="utf-8").splitlines() == [ + "staging", + "/lcrc/group/e3sm/PERF_Chrysalis/performance_archive", + "unset", + ] + + @pytest.fixture(autouse=True) def _stub_discovery_result_persistence(monkeypatch) -> None: monkeypatch.setattr( diff --git a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py index 8a112e62..d09ff127 100644 --- a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py @@ -1008,7 +1008,7 @@ def test_module_main_guard_exits_via_system_exit_on_configuration_error( def test_generic_hpc_module_main_guard_delegates_to_ingestor(monkeypatch) -> None: script_path = ( Path(__file__).resolve().parents[3] - / "app/scripts/ingestion/hpc_archive_ingestor.py" + / "app/scripts/ingestion/hpc_upload_archive_ingestor.py" ) monkeypatch.setenv("MAX_ATTEMPTS", "0") monkeypatch.setattr(logging.Logger, "info", lambda *args, **kwargs: None) diff --git a/docs/architecture/metadata-ingestion.md b/docs/architecture/metadata-ingestion.md index 19947953..438c181b 100644 --- a/docs/architecture/metadata-ingestion.md +++ b/docs/architecture/metadata-ingestion.md @@ -321,8 +321,10 @@ They also support these tuning options: `SCAN_MODE` selects whether a runner scans staging or archive roots. In archive mode, runners traverse only top-level `YYYY-MM` buckets under the configured -archive root. Year-range filters apply only to archive mode and are intended -for targeted backfills, not for normal staging collection. +archive root. Year-range filters apply only to archive mode. Direct Python +entrypoints leave both bounds unset; the NERSC and Chrysalis site wrappers +default `ARCHIVE_YEAR_START=2025-01` and leave `ARCHIVE_YEAR_END` unset. Callers +may override either bound for a differently scoped archive scan. `MAX_CASES_PER_RUN` is an optional per-run throttle. Leave it unset for normal operation when runners should submit every submission-qualified case they find. From 528c42776971d57d0e329469784b87c7af9f4481 Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Mon, 3 Aug 2026 18:17:28 -0500 Subject: [PATCH 08/21] revised working collection script with site-configs --- .../scripts/ingestion/sites/chrysalis.config | 8 +++ .../app/scripts/ingestion/sites/nersc.config | 14 +++++ .../ingestion/sites/simboard_pa_collection.sh | 53 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 backend/app/scripts/ingestion/sites/chrysalis.config create mode 100644 backend/app/scripts/ingestion/sites/nersc.config create mode 100755 backend/app/scripts/ingestion/sites/simboard_pa_collection.sh diff --git a/backend/app/scripts/ingestion/sites/chrysalis.config b/backend/app/scripts/ingestion/sites/chrysalis.config new file mode 100644 index 00000000..4f76d84a --- /dev/null +++ b/backend/app/scripts/ingestion/sites/chrysalis.config @@ -0,0 +1,8 @@ +export SIMBOARD_WORKDIR="${HOME}/Ops/simboard" +export SIMBOARD_REPODIR="${HOME}/gitrepo/simboard/backend" +export SIMBOARD_ENV_CMD="source $HOME/envs/test_simboard/bin/activate" +export SIMBOARD_API_TOKEN_CMD="$SIMBOARD_WORKDIR/.api_token_export" +export DRY_RUN="${DRY_RUN:-true}" +export PERF_ARCHIVE_ROOT="/lcrc/group/e3sm/PERF_Chrysalis/performance_archive" +export OLD_PERF_ARCHIVE_ROOT="/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF" + diff --git a/backend/app/scripts/ingestion/sites/nersc.config b/backend/app/scripts/ingestion/sites/nersc.config new file mode 100644 index 00000000..d447322f --- /dev/null +++ b/backend/app/scripts/ingestion/sites/nersc.config @@ -0,0 +1,14 @@ +export SIMBOARD_WORKDIR="${HOME}/Ops/simboard" +export SIMBOARD_REPODIR="${HOME}/gitrepo/simboard/backend" +export SIMBOARD_ENV_CMD="source $HOME/envs/test_simboard/bin/activate" +export SIMBOARD_API_TOKEN_CMD="$SIMBOARD_WORKDIR/.api_token_export" + +export DRY_RUN="${DRY_RUN:-true}" +export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/performance_archive}" +export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/OLD_PERF}" + + +========================= + + +export MACHINE_NAME="${MACHINE_NAME:-perlmutter}" diff --git a/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh b/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh new file mode 100755 index 00000000..ee3507f2 --- /dev/null +++ b/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +set -euo pipefail + +if (( $# < 1 )) || [[ $1 != "archive" && $1 != "staging" ]]; then + echo "[$(date -Is)] ERROR: Must indicate \"staging\" or \"archive\" on the command line" + exit 1 +fi + +scan_mode=$1 +export SCAN_MODE="$scan_mode" + +if [[ $scan_mode == "archive" ]]; then + export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" +fi + +export MAX_CASES_PER_RUN=50 + +# Obtain user's gimboard github repository, operations directory, and work environment: +# (SIMBOARD_REPODIR, SIMBOARD_WORKDIR, SIMBOARD_ENV_CMD, SIMBOARD_API_TOKEN_CMD, ) +site_config=$HOME/.simboard.config +source $site_config +echo "Issuing SIMBOARD_ENV_CMD = $SIMBOARD_ENV_CMD" +$SIMBOARD_ENV_CMD +export SIMBOARD_API_BASE_URL="https://simboard-dev-api.e3sm.org" + +source $SIMBOARD_API_TOKEN_CMD +: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN failed to be set.}" + +export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_REPODIR}/.venv/bin/python}" +if [[ ! -x "${PYTHON_BIN}" ]]; then + echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 + echo "Run 'make install' from the repository root to create it." >&2 + exit 1 +fi + +LOCK_FILE="$SIMBOARD_WORKDIR/SBCS.lock" +ts=`date -u +%Y%m%d_%H%M%S` +LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" + +exec 200>"$LOCK_FILE" +if ! flock -n 200; then + echo "[$(date -Is)] SKIP launch simboard collection, lock already held, pid $$" >> "$LOG_FILE" + exit 0 +fi + +cleanup() { + echo "[$(date -Is)] simboard collection launcher exiting, pid $$" >> "$LOG_FILE" +} +trap cleanup EXIT + +# Run the app +cd "${SIMBOARD_REPODIR}" +exec "${PYTHON_BIN}" -m app.scripts.ingestion.hpc_upload_archive_ingestor >> "$LOG_FILE" 2>&1 From bb1a306eaa4841fc8851da3251b9697ac5e260bf Mon Sep 17 00:00:00 2001 From: Vo Date: Tue, 11 Aug 2026 14:15:26 -0700 Subject: [PATCH 09/21] Allow offline ingestion dry runs --- .../app/scripts/ingestion/archive_workflow.py | 2 +- .../ingestion/hpc_upload_archive_ingestor.py | 64 +++++++++----- .../ingestion/nersc_archive_ingestor.py | 83 +++++++++++-------- .../app/scripts/ingestion/sites/chrysalis.sh | 14 +++- backend/app/scripts/ingestion/sites/nersc.sh | 14 +++- .../ingestion/test_archive_workflow.py | 7 +- .../test_hpc_upload_archive_ingestor.py | 50 +++++++++-- .../ingestion/test_nersc_archive_ingestor.py | 55 ++++++++++-- docs/architecture/metadata-ingestion.md | 8 +- 9 files changed, 220 insertions(+), 77 deletions(-) diff --git a/backend/app/scripts/ingestion/archive_workflow.py b/backend/app/scripts/ingestion/archive_workflow.py index cdaf54e5..4d1f340d 100644 --- a/backend/app/scripts/ingestion/archive_workflow.py +++ b/backend/app/scripts/ingestion/archive_workflow.py @@ -48,7 +48,7 @@ def _validate_run_preconditions( ) return False - if not config.api_token: + if not config.dry_run and not config.api_token: log_event_fn( "configuration_error", {"error": "SIMBOARD_API_TOKEN is required"}, diff --git a/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py b/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py index 73c9a475..91638ab7 100644 --- a/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py +++ b/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py @@ -5,7 +5,7 @@ is read from environment variables (for example ``SIMBOARD_API_BASE_URL``, ``SIMBOARD_API_TOKEN``, ``PERF_ARCHIVE_ROOT``, ``OLD_PERF_ARCHIVE_ROOT``, and ``DRY_RUN``). -Each ingest run executes these phases: +Non-dry-run ingestion executes these phases: 1. In archive mode, fetch completed snapshot checkpoints. 2. Fetch persisted per-case state from SimBoard API. @@ -13,8 +13,9 @@ 4. Persist discovery results, then package and submit each changed case. 5. In archive mode, settle and persist completed snapshot checkpoints. -Dry runs stop after discovery and emit a summary. Successful ingestions update -database state used to keep future runs idempotent. +Dry runs use empty local state, stop after discovery, and emit a summary without +API requests. Successful ingestions update database state used to keep future +runs idempotent. Structured log metric definitions for this runner live in ``docs/architecture/metadata-ingestion.md``. This module emits those field names @@ -33,7 +34,7 @@ from collections.abc import Iterator from contextlib import contextmanager from pathlib import Path -from typing import Callable +from typing import Any, Callable from app.features.ingestion.parsers.parser import _locate_metadata_files from app.scripts.ingestion.archive_client import ( @@ -63,6 +64,7 @@ MetadataLocator, SleepCallback, _build_config_from_env, + _fresh_state, _log_event, ) from app.scripts.ingestion.archive_workflow import ( @@ -117,21 +119,13 @@ def _case_submission_callback( ) -def _run_ingestor( +def _prepare_run_state( config: IngestorConfig, - metadata_locator: MetadataLocator = _locate_metadata_files, - sleep_fn: SleepCallback = time.sleep, - post_request_fn: CaseSubmissionCallback | None = None, - discovery_post_request_fn: DiscoveryResultsPersistenceCallback | None = None, - checkpoint_post_request_fn: ArchiveCheckpointPersistenceCallback | None = None, - case_path_filter: Callable[[Path], bool] | None = None, - additional_dir_pruner: Callable[[str, list[str]], None] | None = None, archive_checkpointing: bool = True, - run_report: IngestorRunReport | None = None, -) -> int: - """Execute one complete archive scan-and-upload cycle.""" - use_prepared_archives = post_request_fn is None - post_request_fn = _case_submission_callback(post_request_fn) +) -> tuple[dict[str, Any], set[str], str] | None: + """Build local dry-run state or fetch state needed for ingestion.""" + if config.dry_run: + return _fresh_state(), set(), "" endpoint_url = _build_endpoint_url(config) state_endpoint_url = _build_state_endpoint_url(config) @@ -141,10 +135,6 @@ def _run_ingestor( state_endpoint_url=state_endpoint_url, log_event_fn=_log_event, ) - - if not _validate_run_preconditions(config, log_event_fn=_log_event): - return 1 - completed_snapshot_keys: set[str] = set() if config.scan_mode == "archive" and archive_checkpointing: try: @@ -162,7 +152,7 @@ def _run_ingestor( "archive_checkpoint_fetch_failed", {"status_code": exc.status_code, "error": str(exc)}, ) - return 1 + return None try: state = _fetch_ingestion_state( @@ -180,7 +170,37 @@ def _run_ingestor( "error": str(exc), }, ) + return None + + return state, completed_snapshot_keys, endpoint_url + + +def _run_ingestor( + config: IngestorConfig, + metadata_locator: MetadataLocator = _locate_metadata_files, + sleep_fn: SleepCallback = time.sleep, + post_request_fn: CaseSubmissionCallback | None = None, + discovery_post_request_fn: DiscoveryResultsPersistenceCallback | None = None, + checkpoint_post_request_fn: ArchiveCheckpointPersistenceCallback | None = None, + case_path_filter: Callable[[Path], bool] | None = None, + additional_dir_pruner: Callable[[str, list[str]], None] | None = None, + archive_checkpointing: bool = True, + run_report: IngestorRunReport | None = None, +) -> int: + """Execute one complete archive scan-and-upload cycle.""" + use_prepared_archives = post_request_fn is None + post_request_fn = _case_submission_callback(post_request_fn) + + if not _validate_run_preconditions(config, log_event_fn=_log_event): + return 1 + + run_state = _prepare_run_state( + config, + archive_checkpointing=archive_checkpointing, + ) + if run_state is None: return 1 + state, completed_snapshot_keys, endpoint_url = run_state new_discovery_results: list[ExecutionDiscoveryResult] = [] try: diff --git a/backend/app/scripts/ingestion/nersc_archive_ingestor.py b/backend/app/scripts/ingestion/nersc_archive_ingestor.py index 288655a1..e0048c04 100644 --- a/backend/app/scripts/ingestion/nersc_archive_ingestor.py +++ b/backend/app/scripts/ingestion/nersc_archive_ingestor.py @@ -5,7 +5,7 @@ from environment variables (for example ``SIMBOARD_API_BASE_URL``, ``SIMBOARD_API_TOKEN``, ``PERF_ARCHIVE_ROOT``, ``OLD_PERF_ARCHIVE_ROOT``, and ``DRY_RUN``). -Each ingest run executes these phases: +Non-dry-run ingestion executes these phases: 1. Fetch persisted per-case state from SimBoard API. 2. In archive mode, fetch completed snapshot checkpoints. @@ -13,8 +13,9 @@ 4. Persist discovery results, then submit each changed case with retry/backoff. 5. In archive mode, settle and persist completed snapshot checkpoints. -Dry runs stop after discovery and emit a summary. Successful ingestions update -database state used to keep future runs idempotent. +Dry runs use empty local state, stop after discovery, and emit a summary without +API requests. Successful ingestions update database state used to keep future +runs idempotent. Structured log metric definitions for this runner live in ``docs/architecture/metadata-ingestion.md``. This module emits those field names @@ -24,6 +25,7 @@ from __future__ import annotations import time +from typing import Any from app.features.ingestion.parsers.parser import _locate_metadata_files from app.scripts.ingestion.archive_client import ( @@ -47,6 +49,7 @@ SleepCallback, UnsupportedArchiveLayoutError, _build_config_from_env, + _fresh_state, _log_event, ) from app.scripts.ingestion.archive_workflow import ( @@ -104,31 +107,12 @@ def _case_submission_callback( return _post_ingestion_request if post_request_fn is None else post_request_fn -def _run_ingestor( +def _prepare_run_state( config: IngestorConfig, - metadata_locator: MetadataLocator = _locate_metadata_files, - sleep_fn: SleepCallback = time.sleep, - post_request_fn: CaseSubmissionCallback | None = None, - discovery_post_request_fn: DiscoveryResultsPersistenceCallback | None = None, - checkpoint_post_request_fn: ArchiveCheckpointPersistenceCallback | None = None, -) -> int: - """Execute one complete archive scan-and-ingest cycle. - - Parameters - ---------- - config : IngestorConfig - Runtime configuration values. - metadata_locator : Callable[[str], object], optional - Validation callable used when scanning execution directories. - sleep_fn : Callable[[float], None], optional - Sleep function used for retry backoff. - - Returns - ------- - int - Process exit code (``0`` success, ``1`` failure). - """ - post_request_fn = _case_submission_callback(post_request_fn) +) -> tuple[dict[str, Any], set[str], str] | None: + """Build local dry-run state or fetch state needed for ingestion.""" + if config.dry_run: + return _fresh_state(), set(), "" endpoint_url = _build_endpoint_url(config) state_endpoint_url = _build_state_endpoint_url(config) @@ -138,10 +122,6 @@ def _run_ingestor( state_endpoint_url=state_endpoint_url, log_event_fn=_log_event, ) - - if not _validate_run_preconditions(config, log_event_fn=_log_event): - return 1 - try: state = _fetch_ingestion_state( state_endpoint_url, @@ -158,7 +138,7 @@ def _run_ingestor( "error": str(exc), }, ) - return 1 + return None completed_snapshot_keys: set[str] = set() if config.scan_mode == "archive": @@ -177,7 +157,44 @@ def _run_ingestor( "archive_checkpoint_fetch_failed", {"status_code": exc.status_code, "error": str(exc)}, ) - return 1 + return None + + return state, completed_snapshot_keys, endpoint_url + + +def _run_ingestor( + config: IngestorConfig, + metadata_locator: MetadataLocator = _locate_metadata_files, + sleep_fn: SleepCallback = time.sleep, + post_request_fn: CaseSubmissionCallback | None = None, + discovery_post_request_fn: DiscoveryResultsPersistenceCallback | None = None, + checkpoint_post_request_fn: ArchiveCheckpointPersistenceCallback | None = None, +) -> int: + """Execute one complete archive scan-and-ingest cycle. + + Parameters + ---------- + config : IngestorConfig + Runtime configuration values. + metadata_locator : Callable[[str], object], optional + Validation callable used when scanning execution directories. + sleep_fn : Callable[[float], None], optional + Sleep function used for retry backoff. + + Returns + ------- + int + Process exit code (``0`` success, ``1`` failure). + """ + post_request_fn = _case_submission_callback(post_request_fn) + + if not _validate_run_preconditions(config, log_event_fn=_log_event): + return 1 + + run_state = _prepare_run_state(config) + if run_state is None: + return 1 + state, completed_snapshot_keys, endpoint_url = run_state new_discovery_results: list[ExecutionDiscoveryResult] = [] try: diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh index a28a55de..90cbcb8f 100755 --- a/backend/app/scripts/ingestion/sites/chrysalis.sh +++ b/backend/app/scripts/ingestion/sites/chrysalis.sh @@ -12,15 +12,23 @@ if [[ ! -x "${PYTHON_BIN}" ]]; then exit 1 fi -: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" -: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" - export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" export SCAN_MODE="${SCAN_MODE:-staging}" export DRY_RUN="${DRY_RUN:-true}" export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" +DRY_RUN_NORMALIZED="${DRY_RUN#"${DRY_RUN%%[![:space:]]*}"}" +DRY_RUN_NORMALIZED="${DRY_RUN_NORMALIZED%"${DRY_RUN_NORMALIZED##*[![:space:]]}"}" +shopt -s nocasematch +case "${DRY_RUN_NORMALIZED}" in + 0|false|no|off) + : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" + : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" + ;; +esac +shopt -u nocasematch + if [[ "${SCAN_MODE}" == "archive" ]]; then export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" elif [[ "${SCAN_MODE}" != "staging" ]]; then diff --git a/backend/app/scripts/ingestion/sites/nersc.sh b/backend/app/scripts/ingestion/sites/nersc.sh index 459478b6..3f53c9d4 100755 --- a/backend/app/scripts/ingestion/sites/nersc.sh +++ b/backend/app/scripts/ingestion/sites/nersc.sh @@ -12,15 +12,23 @@ if [[ ! -x "${PYTHON_BIN}" ]]; then exit 1 fi -: "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" -: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" - export MACHINE_NAME="${MACHINE_NAME:-perlmutter}" export SCAN_MODE="${SCAN_MODE:-staging}" export DRY_RUN="${DRY_RUN:-true}" export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/OLD_PERF}" +DRY_RUN_NORMALIZED="${DRY_RUN#"${DRY_RUN%%[![:space:]]*}"}" +DRY_RUN_NORMALIZED="${DRY_RUN_NORMALIZED%"${DRY_RUN_NORMALIZED##*[![:space:]]}"}" +shopt -s nocasematch +case "${DRY_RUN_NORMALIZED}" in + 0|false|no|off) + : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" + : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" + ;; +esac +shopt -u nocasematch + if [[ "${SCAN_MODE}" == "archive" ]]; then export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" elif [[ "${SCAN_MODE}" != "staging" ]]; then diff --git a/backend/tests/features/ingestion/test_archive_workflow.py b/backend/tests/features/ingestion/test_archive_workflow.py index a0ad72d2..4b611573 100644 --- a/backend/tests/features/ingestion/test_archive_workflow.py +++ b/backend/tests/features/ingestion/test_archive_workflow.py @@ -74,8 +74,11 @@ def log_event(event: str, fields: dict[str, Any] | None = None) -> None: archive_root = tmp_path / "archive" archive_root.mkdir() - config = replace(_config(archive_root), api_token="") - assert not _validate_run_preconditions(config, log_event_fn=log_event) + dry_run_config = replace(_config(archive_root, dry_run=True), api_token="") + assert _validate_run_preconditions(dry_run_config, log_event_fn=log_event) + + ingest_config = replace(_config(archive_root), api_token="") + assert not _validate_run_preconditions(ingest_config, log_event_fn=log_event) assert logged_events[-1] == ( "configuration_error", {"error": "SIMBOARD_API_TOKEN is required"}, diff --git a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py index 11a9ddca..efb0bfaf 100644 --- a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py @@ -59,10 +59,11 @@ def _fake_python(tmp_path: Path) -> Path: return python_path -def test_chrysalis_wrapper_requires_api_base_url(tmp_path: Path) -> None: +def test_chrysalis_wrapper_requires_api_base_url_for_ingestion(tmp_path: Path) -> None: env = os.environ.copy() env.pop("SIMBOARD_API_BASE_URL", None) env["SIMBOARD_API_TOKEN"] = "token" + env["DRY_RUN"] = "false" env["PYTHON_BIN"] = str(_fake_python(tmp_path)) result = subprocess.run( @@ -77,6 +78,30 @@ def test_chrysalis_wrapper_requires_api_base_url(tmp_path: Path) -> None: assert "SIMBOARD_API_BASE_URL must be set" in result.stderr +@pytest.mark.parametrize("dry_run", ["true", "True", " true ", "maybe"]) +def test_chrysalis_wrapper_allows_dry_run_without_api_configuration( + tmp_path: Path, + dry_run: str, +) -> None: + capture_path = tmp_path / "environment.txt" + env = os.environ.copy() + env.pop("SIMBOARD_API_BASE_URL", None) + env.pop("SIMBOARD_API_TOKEN", None) + env["CAPTURE_PATH"] = str(capture_path) + env["PYTHON_BIN"] = str(_fake_python(tmp_path)) + env["DRY_RUN"] = dry_run + + result = subprocess.run( + [_chrysalis_wrapper_path()], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode == 0, result.stderr + + def test_chrysalis_wrapper_defaults_to_staging(tmp_path: Path) -> None: capture_path = tmp_path / "environment.txt" env = os.environ.copy() @@ -674,18 +699,31 @@ def fake_discovery_post(*args, **kwargs): monkeypatch.setattr( upload_ingestor_module, "_fetch_ingestion_state", - lambda *args, **kwargs: _fresh_state(), + lambda *_args, **_kwargs: pytest.fail("dry run must not fetch API state"), + ) + monkeypatch.setattr( + upload_ingestor_module, + "_build_endpoint_url", + lambda *_: pytest.fail("dry run must not build upload endpoint"), + ) + monkeypatch.setattr( + upload_ingestor_module, + "_fetch_archive_checkpoints", + lambda *_args, **_kwargs: pytest.fail( + "dry run must not fetch archive checkpoints" + ), ) config = IngestorConfig( - api_base_url="http://backend:8000", - api_token="token", + api_base_url="", + api_token="", archive_root=archive_root, machine_name="perlmutter", dry_run=True, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, + scan_mode="archive", ) exit_code = _run_ingestor( @@ -880,7 +918,7 @@ def fetch_state(*args: Any, **kwargs: Any) -> dict[str, Any]: api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=True, + dry_run=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, @@ -927,7 +965,7 @@ def fetch_state(*args: Any, **kwargs: Any) -> dict[str, Any]: api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=True, + dry_run=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, diff --git a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py index d09ff127..9d702a2d 100644 --- a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py @@ -1,7 +1,9 @@ """Tests for the NERSC archive ingestion runner script.""" import logging +import os import runpy +import subprocess from pathlib import Path from typing import Any @@ -35,6 +37,29 @@ ) +def _nersc_wrapper_path() -> Path: + return Path(__file__).resolve().parents[3] / "app/scripts/ingestion/sites/nersc.sh" + + +@pytest.mark.parametrize("dry_run", ["true", "True", " true ", "maybe"]) +def test_nersc_wrapper_allows_dry_run_without_api_configuration(dry_run: str) -> None: + env = os.environ.copy() + env.pop("SIMBOARD_API_BASE_URL", None) + env.pop("SIMBOARD_API_TOKEN", None) + env["DRY_RUN"] = dry_run + env["PYTHON_BIN"] = "/usr/bin/true" + + result = subprocess.run( + [_nersc_wrapper_path()], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode == 0, result.stderr + + @pytest.fixture(autouse=True) def _stub_remote_state(monkeypatch) -> None: monkeypatch.setattr( @@ -456,7 +481,7 @@ def fake_post_request( assert captured_processed_execution_ids == [["101.1-1"]] -def test_run_ingestor_dry_run_without_token_returns_config_error( +def test_run_ingestor_dry_run_without_api_configuration_scans_offline( tmp_path: Path, monkeypatch, ) -> None: @@ -469,9 +494,26 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: monkeypatch.setattr(ingestor_module, "_log_event", fake_log_event) monkeypatch.setattr(discovery_module, "_log_event", fake_log_event) + monkeypatch.setattr( + ingestor_module, + "_build_endpoint_url", + lambda *_: pytest.fail("dry run must not build ingestion endpoint"), + ) + monkeypatch.setattr( + ingestor_module, + "_fetch_ingestion_state", + lambda *_args, **_kwargs: pytest.fail("dry run must not fetch API state"), + ) + monkeypatch.setattr( + ingestor_module, + "_fetch_archive_checkpoints", + lambda *_args, **_kwargs: pytest.fail( + "dry run must not fetch archive checkpoints" + ), + ) config = IngestorConfig( - api_base_url="http://backend:8000", + api_base_url="", api_token="", archive_root=archive_root, machine_name="perlmutter", @@ -479,6 +521,7 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, + scan_mode="archive", ) exit_code = _run_ingestor( @@ -487,8 +530,8 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: sleep_fn=lambda *_: None, ) - assert exit_code == 1 - assert any(event == "configuration_error" for event, _ in logged_events) + assert exit_code == 0 + assert any(event == "dry_run_completed" for event, _ in logged_events) def test_run_ingestor_without_token_returns_config_error( @@ -589,7 +632,7 @@ def fetch_checkpoints(*args: Any, **kwargs: Any) -> set[str]: api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=True, + dry_run=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, @@ -624,7 +667,7 @@ def test_run_ingestor_returns_failure_when_checkpoint_fetch_fails( api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=True, + dry_run=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, diff --git a/docs/architecture/metadata-ingestion.md b/docs/architecture/metadata-ingestion.md index 438c181b..6e51999b 100644 --- a/docs/architecture/metadata-ingestion.md +++ b/docs/architecture/metadata-ingestion.md @@ -301,7 +301,8 @@ flowchart TD ### Runner Configuration -All automated ingestion requests require a bearer API token. Both site-side runners use: +Non-dry-run automated ingestion requests require a bearer API token. Both site-side +runners use: - `SIMBOARD_API_BASE_URL` - `SIMBOARD_API_TOKEN` @@ -311,6 +312,11 @@ All automated ingestion requests require a bearer API token. Both site-side runn - `MACHINE_NAME` - `DRY_RUN` +With `DRY_RUN=true`, runners scan local archive data using empty ingestion state and +make no API requests. `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN` are not +required, but dry-run output cannot exclude executions already ingested remotely or +archive snapshots already checkpointed. + They also support these tuning options: - `MAX_CASES_PER_RUN` From b521c5ab48234e43c7cc4bf9f9ea20527e3ca8ca Mon Sep 17 00:00:00 2001 From: Vo Date: Tue, 11 Aug 2026 14:21:41 -0700 Subject: [PATCH 10/21] Document ingestion validation modes --- docs/architecture/metadata-ingestion.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/architecture/metadata-ingestion.md b/docs/architecture/metadata-ingestion.md index 6e51999b..542ca7a1 100644 --- a/docs/architecture/metadata-ingestion.md +++ b/docs/architecture/metadata-ingestion.md @@ -347,6 +347,20 @@ production-like archive at the target site. Record the observed archive creation upload, and retry timings from the events above before rollout; this document does not supply synthetic benchmark measurements. +### Operational Validation + +The runners use composable configuration rather than numbered dry-run modes: + +- Set `DRY_RUN=true` to scan and report candidates without API requests or + persisted state changes. +- Set `DRY_RUN=false` and a small `MAX_CASES_PER_RUN` value to validate live + ingestion on a bounded batch. This is real ingestion and persists results. +- Set `DRY_RUN=false` with no per-run cap for normal scheduled ingestion. + +Use one-off diagnostic scripts only for exceptional, data-specific +investigations. Do not add a permanent runner mode unless that workflow becomes +a recurring operational need. + ### Stored Results After ingestion, SimBoard stores normalized cases, executions, machines, artifacts, links, and audit records in PostgreSQL. Execution records preserve parsed `CASE_HASH` values so the frontend can group related executions inside a case without assigning a persistent reference execution. The frontend reads the resulting catalog data through `/api/v1` endpoints. From 2913e348b326fcfecd6d3b90a6b339e0d8b7e4e4 Mon Sep 17 00:00:00 2001 From: Vo Date: Tue, 11 Aug 2026 14:38:56 -0700 Subject: [PATCH 11/21] Unify site ingestion launcher --- backend/app/scripts/README.md | 48 ++++---- .../scripts/ingestion/sites/chrysalis.config | 14 ++- .../app/scripts/ingestion/sites/chrysalis.sh | 40 ------- .../app/scripts/ingestion/sites/nersc.config | 12 +- .../ingestion/sites/nersc.crontab.example | 23 ++-- backend/app/scripts/ingestion/sites/nersc.sh | 41 ------- .../ingestion/sites/simboard_pa_collection.sh | 53 --------- .../sites/site_ingestion_launcher.sh | 78 +++++++++++++ .../ingestion-sites-onboarding.md | 31 +++--- .../test_hpc_upload_archive_ingestor.py | 89 --------------- .../ingestion/test_nersc_archive_ingestor.py | 25 ----- .../test_site_collection_launcher.py | 105 ++++++++++++++++++ docs/deploy/nersc-spin-runbook.md | 4 +- 13 files changed, 243 insertions(+), 320 deletions(-) delete mode 100755 backend/app/scripts/ingestion/sites/chrysalis.sh delete mode 100755 backend/app/scripts/ingestion/sites/nersc.sh delete mode 100755 backend/app/scripts/ingestion/sites/simboard_pa_collection.sh create mode 100755 backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh create mode 100644 backend/tests/features/ingestion/test_site_collection_launcher.py diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index 85faedac..ecf6e539 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -23,10 +23,11 @@ scripts/ │ ├── hpc_upload_archive_ingestor.py │ ├── nersc_archive_ingestor.py │ ├── sites/ -│ │ ├── chrysalis.sh │ │ ├── lcrc-diagnostics-scanner.sh │ │ ├── nersc-diagnostics-scanner.sh -│ │ └── nersc.sh +│ │ ├── site_ingestion_launcher.sh +│ │ ├── chrysalis.config +│ │ └── nersc.config │ └── v3_data/ │ ├── __init__.py │ ├── lcrc-v3.env.example @@ -135,29 +136,26 @@ Example: uv run python -m app.scripts.ingestion.hpc_upload_archive_ingestor ``` -Thin site wrappers live under `app/scripts/ingestion/sites/`. They should only -set site-specific environment and call the shared ingestor. Ingestion logic -belongs in Python, not in shell wrappers. +### Site Collection Launcher -### Chrysalis Wrapper +`app/scripts/ingestion/sites/site_ingestion_launcher.sh` is the host-side +launcher for site collection. It loads `sites/.config`, then selects the +configured Python ingestor. Use it as: -`app/scripts/ingestion/sites/chrysalis.sh` is intended for the existing Sandia -Jenkins workflow. It sets Chrysalis defaults and requires caller-provided -`SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN`. - -Default Chrysalis staging root: - -- `/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` +```bash +app/scripts/ingestion/sites/site_ingestion_launcher.sh nersc staging +app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis archive +``` -The wrapper defaults to `SCAN_MODE=staging` and `DRY_RUN=true`. When -`SCAN_MODE=archive`, it uses -`/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF` and defaults -`ARCHIVE_YEAR_START=2025-01`; callers may override that lower bound. Set -`DRY_RUN=false` only after validating archive access, token storage, network -egress, and candidate counts. +Each site config defines its machine name, archive roots, working and repository +paths, Python environment file, token export file, API base URL, archive lower +bound, and ingestor module. The launcher defaults to `DRY_RUN=true`; in this +mode it does not load API credentials. Set `DRY_RUN=false` only after validating +archive access, token storage, network egress, and candidate counts. A capped +`MAX_CASES_PER_RUN` value limits real ingestion but still persists results. -Compy, Aurora, and Frontier adapters are intentionally deferred until accounts -or equivalent native-runner access exists for those sites. +Site configs are operational inputs. Keep credentials in their referenced, +protected files rather than committing them to a config file. ## NERSC Archive Ingestor @@ -193,18 +191,12 @@ Configuration surface (via env vars): - `ARCHIVE_YEAR_START` (optional, archive mode only; accepts `YYYY` or `YYYY-MM`) - `ARCHIVE_YEAR_END` (optional, archive mode only; accepts `YYYY` or `YYYY-MM`) -Helper wrapper: - -- `backend/app/scripts/ingestion/sites/nersc.sh` activates `backend/.venv`, sets the documented NERSC staging and archive roots, defaults to `SCAN_MODE=staging` and `DRY_RUN=true`, and then runs `python -m app.scripts.ingestion.nersc_archive_ingestor`. -- When the NERSC wrapper runs with `SCAN_MODE=archive`, it defaults `ARCHIVE_YEAR_START=2025-01`; callers may override that lower bound. `ARCHIVE_YEAR_END` remains unset unless the caller provides it. -- Override `SCAN_MODE`, `DRY_RUN`, or any other supported env var in the caller or cron entry when you need a different schedule or behavior. - Archive notes: - Archive mode traverses only top-level `YYYY-MM` directories under `OLD_PERF_ARCHIVE_ROOT`. Other top-level directories are ignored. - Archive scans may include paths without a `COMPLETED/` directory. When snapshot status buckets exist, ingestor scans only `COMPLETED/` and ignores sibling directories in that snapshot bucket. - Archive dedupe is based on logical case identity plus `execution_id`, not the full timestamped snapshot path. -- Direct Python entrypoints leave `ARCHIVE_YEAR_START` / `ARCHIVE_YEAR_END` unset. The NERSC and Chrysalis site wrappers default `ARCHIVE_YEAR_START=2025-01` in archive mode and leave `ARCHIVE_YEAR_END` unset. Override either bound for a differently scoped archive scan. +- Direct Python entrypoints leave `ARCHIVE_YEAR_START` / `ARCHIVE_YEAR_END` unset. The site collection launcher applies each site's configured archive lower bound; callers may override either bound for a differently scoped archive scan. - `YYYY` values expand to full-year bounds (`START=2020` means `2020-01`; `END=2020` means `2020-12`), while `YYYY-MM` values target exact archive month buckets. ## One-Time Chrysalis E3SM v3 Archive Backfill diff --git a/backend/app/scripts/ingestion/sites/chrysalis.config b/backend/app/scripts/ingestion/sites/chrysalis.config index 4f76d84a..0e637414 100644 --- a/backend/app/scripts/ingestion/sites/chrysalis.config +++ b/backend/app/scripts/ingestion/sites/chrysalis.config @@ -1,8 +1,12 @@ export SIMBOARD_WORKDIR="${HOME}/Ops/simboard" export SIMBOARD_REPODIR="${HOME}/gitrepo/simboard/backend" -export SIMBOARD_ENV_CMD="source $HOME/envs/test_simboard/bin/activate" -export SIMBOARD_API_TOKEN_CMD="$SIMBOARD_WORKDIR/.api_token_export" -export DRY_RUN="${DRY_RUN:-true}" -export PERF_ARCHIVE_ROOT="/lcrc/group/e3sm/PERF_Chrysalis/performance_archive" -export OLD_PERF_ARCHIVE_ROOT="/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF" +export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" +export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" +export SIMBOARD_INGESTOR_MODULE="app.scripts.ingestion.hpc_upload_archive_ingestor" +export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" +export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" +export DRY_RUN="${DRY_RUN:-true}" +export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" +export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" +export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" diff --git a/backend/app/scripts/ingestion/sites/chrysalis.sh b/backend/app/scripts/ingestion/sites/chrysalis.sh deleted file mode 100755 index 90cbcb8f..00000000 --- a/backend/app/scripts/ingestion/sites/chrysalis.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" -BACKEND_DIR="$(cd -- "${SCRIPT_DIR}/../../../../" && pwd)" -PYTHON_BIN="${PYTHON_BIN:-${BACKEND_DIR}/.venv/bin/python}" - -if [[ ! -x "${PYTHON_BIN}" ]]; then - echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 - echo "Run 'make install' from the repository root to create it." >&2 - exit 1 -fi - -export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" -export SCAN_MODE="${SCAN_MODE:-staging}" -export DRY_RUN="${DRY_RUN:-true}" -export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" -export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" - -DRY_RUN_NORMALIZED="${DRY_RUN#"${DRY_RUN%%[![:space:]]*}"}" -DRY_RUN_NORMALIZED="${DRY_RUN_NORMALIZED%"${DRY_RUN_NORMALIZED##*[![:space:]]}"}" -shopt -s nocasematch -case "${DRY_RUN_NORMALIZED}" in - 0|false|no|off) - : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" - : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" - ;; -esac -shopt -u nocasematch - -if [[ "${SCAN_MODE}" == "archive" ]]; then - export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" -elif [[ "${SCAN_MODE}" != "staging" ]]; then - echo "SCAN_MODE must be either 'staging' or 'archive'." >&2 - exit 1 -fi - -cd "${BACKEND_DIR}" -exec "${PYTHON_BIN}" -m app.scripts.ingestion.hpc_upload_archive_ingestor diff --git a/backend/app/scripts/ingestion/sites/nersc.config b/backend/app/scripts/ingestion/sites/nersc.config index d447322f..f220a3f0 100644 --- a/backend/app/scripts/ingestion/sites/nersc.config +++ b/backend/app/scripts/ingestion/sites/nersc.config @@ -1,14 +1,12 @@ export SIMBOARD_WORKDIR="${HOME}/Ops/simboard" export SIMBOARD_REPODIR="${HOME}/gitrepo/simboard/backend" -export SIMBOARD_ENV_CMD="source $HOME/envs/test_simboard/bin/activate" -export SIMBOARD_API_TOKEN_CMD="$SIMBOARD_WORKDIR/.api_token_export" +export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" +export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" +export SIMBOARD_INGESTOR_MODULE="app.scripts.ingestion.nersc_archive_ingestor" +export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" +export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" export DRY_RUN="${DRY_RUN:-true}" export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/OLD_PERF}" - - -========================= - - export MACHINE_NAME="${MACHINE_NAME:-perlmutter}" diff --git a/backend/app/scripts/ingestion/sites/nersc.crontab.example b/backend/app/scripts/ingestion/sites/nersc.crontab.example index 59237663..0d943d01 100644 --- a/backend/app/scripts/ingestion/sites/nersc.crontab.example +++ b/backend/app/scripts/ingestion/sites/nersc.crontab.example @@ -1,30 +1,23 @@ -# Example crontab entries for the NERSC ingestion wrapper. +# Example crontab entries for the NERSC site collection launcher. # Install with something like: # crontab backend/app/scripts/ingestion/sites/nersc.crontab.example # -# Update REPO_DIR and SIMBOARD_API_TOKEN before use. For better secret hygiene, -# source the token from a protected env file instead of storing it directly in -# your crontab. +# Update `nersc.config` before use. It references the protected environment and +# token files used for non-dry-run ingestion. SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin CRON_TZ=UTC REPO_DIR=/path/to/simboard -SIMBOARD_API_TOKEN=replace-me -SIMBOARD_API_BASE_URL=https://simboard-dev-api.e3sm.org -MACHINE_NAME=perlmutter -DRY_RUN=true -PERF_ARCHIVE_ROOT=/global/cfs/projectdirs/e3sm/performance_archive -OLD_PERF_ARCHIVE_ROOT=/global/cfs/projectdirs/e3sm/OLD_PERF # Staging scan: run every hour. -0 * * * * cd ${REPO_DIR} && SCAN_MODE=staging ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh.staging.log 2>&1 +0 * * * * ${REPO_DIR}/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh nersc staging -# Archive scan: run daily at 03:15 UTC. The wrapper defaults -# ARCHIVE_YEAR_START=2025-01 and leaves ARCHIVE_YEAR_END unset. Override either -# bound here for a differently scoped scan. Values may use YYYY or YYYY-MM. -15 3 * * * cd ${REPO_DIR} && SCAN_MODE=archive ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc.sh.log 2>&1 +# Archive scan: run daily at 03:15 UTC. The site config supplies the default +# lower bound. Override `ARCHIVE_YEAR_START` or `ARCHIVE_YEAR_END` in the cron +# environment for a differently scoped scan. Values may use YYYY or YYYY-MM. +15 3 * * * ${REPO_DIR}/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh nersc archive # Diagnostics provenance scan: start dry-run, inspect logs, then set DRY_RUN=false. 20 * * * * cd ${REPO_DIR} && ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.log 2>&1 diff --git a/backend/app/scripts/ingestion/sites/nersc.sh b/backend/app/scripts/ingestion/sites/nersc.sh deleted file mode 100755 index 3f53c9d4..00000000 --- a/backend/app/scripts/ingestion/sites/nersc.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" -BACKEND_DIR="$(cd -- "${SCRIPT_DIR}/../../../../" && pwd)" -PYTHON_BIN="${PYTHON_BIN:-${BACKEND_DIR}/.venv/bin/python}" - -if [[ ! -x "${PYTHON_BIN}" ]]; then - echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 - echo "Run 'make install' from the repository root to create it." >&2 - exit 1 -fi - -export MACHINE_NAME="${MACHINE_NAME:-perlmutter}" -export SCAN_MODE="${SCAN_MODE:-staging}" -export DRY_RUN="${DRY_RUN:-true}" -export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/performance_archive}" -export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/global/cfs/projectdirs/e3sm/OLD_PERF}" - -DRY_RUN_NORMALIZED="${DRY_RUN#"${DRY_RUN%%[![:space:]]*}"}" -DRY_RUN_NORMALIZED="${DRY_RUN_NORMALIZED%"${DRY_RUN_NORMALIZED##*[![:space:]]}"}" -shopt -s nocasematch -case "${DRY_RUN_NORMALIZED}" in - 0|false|no|off) - : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set before running this script.}" - : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN must be set before running this script.}" - ;; -esac -shopt -u nocasematch - -if [[ "${SCAN_MODE}" == "archive" ]]; then - export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" -elif [[ "${SCAN_MODE}" != "staging" ]]; then - echo "SCAN_MODE must be either 'staging' or 'archive'." >&2 - exit 1 -fi - - -cd "${BACKEND_DIR}" -exec "${PYTHON_BIN}" -m app.scripts.ingestion.nersc_archive_ingestor "$@" diff --git a/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh b/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh deleted file mode 100755 index ee3507f2..00000000 --- a/backend/app/scripts/ingestion/sites/simboard_pa_collection.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -if (( $# < 1 )) || [[ $1 != "archive" && $1 != "staging" ]]; then - echo "[$(date -Is)] ERROR: Must indicate \"staging\" or \"archive\" on the command line" - exit 1 -fi - -scan_mode=$1 -export SCAN_MODE="$scan_mode" - -if [[ $scan_mode == "archive" ]]; then - export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-2025-01}" -fi - -export MAX_CASES_PER_RUN=50 - -# Obtain user's gimboard github repository, operations directory, and work environment: -# (SIMBOARD_REPODIR, SIMBOARD_WORKDIR, SIMBOARD_ENV_CMD, SIMBOARD_API_TOKEN_CMD, ) -site_config=$HOME/.simboard.config -source $site_config -echo "Issuing SIMBOARD_ENV_CMD = $SIMBOARD_ENV_CMD" -$SIMBOARD_ENV_CMD -export SIMBOARD_API_BASE_URL="https://simboard-dev-api.e3sm.org" - -source $SIMBOARD_API_TOKEN_CMD -: "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN failed to be set.}" - -export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_REPODIR}/.venv/bin/python}" -if [[ ! -x "${PYTHON_BIN}" ]]; then - echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 - echo "Run 'make install' from the repository root to create it." >&2 - exit 1 -fi - -LOCK_FILE="$SIMBOARD_WORKDIR/SBCS.lock" -ts=`date -u +%Y%m%d_%H%M%S` -LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" - -exec 200>"$LOCK_FILE" -if ! flock -n 200; then - echo "[$(date -Is)] SKIP launch simboard collection, lock already held, pid $$" >> "$LOG_FILE" - exit 0 -fi - -cleanup() { - echo "[$(date -Is)] simboard collection launcher exiting, pid $$" >> "$LOG_FILE" -} -trap cleanup EXIT - -# Run the app -cd "${SIMBOARD_REPODIR}" -exec "${PYTHON_BIN}" -m app.scripts.ingestion.hpc_upload_archive_ingestor >> "$LOG_FILE" 2>&1 diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh new file mode 100755 index 00000000..2a462ddc --- /dev/null +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +set -euo pipefail + +if (( $# != 2 )) || [[ ! $1 =~ ^[a-z0-9_-]+$ ]] || [[ $2 != "archive" && $2 != "staging" ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +site=$1 +scan_mode=$2 +script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +site_config="${SIMBOARD_SITE_CONFIG:-${script_dir}/${site}.config}" + +if [[ ! -r "${site_config}" ]]; then + echo "Site configuration not readable: ${site_config}" >&2 + exit 1 +fi + +# Site config provides paths, runner module, and optional authentication helpers. +source "${site_config}" + +: "${SIMBOARD_REPODIR:?SIMBOARD_REPODIR must be set by the site configuration}" +: "${SIMBOARD_WORKDIR:?SIMBOARD_WORKDIR must be set by the site configuration}" +: "${SIMBOARD_INGESTOR_MODULE:?SIMBOARD_INGESTOR_MODULE must be set by the site configuration}" + +export SCAN_MODE="${scan_mode}" + +# Site config supplies archive lower bound; callers may override it. +if [[ $scan_mode == "archive" ]]; then + export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:?SIMBOARD_DEFAULT_ARCHIVE_YEAR_START must be set by the site configuration}}" +fi + +# Optional max cases per run, default is no limit. +export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-}" + +# Optional dry run mode, default is true. If true, no API calls will be made, and no data will be written to the database. +# This also means the SIMBOARD_ENV_FILE and SIMBOARD_API_TOKEN_FILE are not required to be set. +dry_run_normalized="${DRY_RUN:-true}" +dry_run_normalized="${dry_run_normalized#"${dry_run_normalized%%[![:space:]]*}"}" +dry_run_normalized="${dry_run_normalized%"${dry_run_normalized##*[![:space:]]}"}" +shopt -s nocasematch +case "${dry_run_normalized}" in + 0|false|no|off) + : "${SIMBOARD_ENV_FILE:?SIMBOARD_ENV_FILE must be set for non-dry-run ingestion}" + : "${SIMBOARD_API_TOKEN_FILE:?SIMBOARD_API_TOKEN_FILE must be set for non-dry-run ingestion}" + source "${SIMBOARD_ENV_FILE}" + source "${SIMBOARD_API_TOKEN_FILE}" + : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set for non-dry-run ingestion}" + : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN failed to be set}" + ;; +esac +shopt -u nocasematch + +export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_REPODIR}/.venv/bin/python}" +if [[ ! -x "${PYTHON_BIN}" ]]; then + echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 + echo "Run 'make install' from the repository root to create it." >&2 + exit 1 +fi + +LOCK_FILE="$SIMBOARD_WORKDIR/SBCS.lock" +ts=`date -u +%Y%m%d_%H%M%S` +LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" + +exec 200>"$LOCK_FILE" +if ! flock -n 200; then + echo "[$(date -Is)] SKIP launch simboard collection, lock already held, pid $$" >> "$LOG_FILE" + exit 0 +fi + +cleanup() { + echo "[$(date -Is)] simboard collection launcher exiting, pid $$" >> "$LOG_FILE" +} +trap cleanup EXIT + +# Run the app +cd "${SIMBOARD_REPODIR}" +exec "${PYTHON_BIN}" -m "${SIMBOARD_INGESTOR_MODULE}" >> "$LOG_FILE" 2>&1 diff --git a/backend/docs/154-ingestions/ingestion-sites-onboarding.md b/backend/docs/154-ingestions/ingestion-sites-onboarding.md index 2da3aaac..d69a8431 100644 --- a/backend/docs/154-ingestions/ingestion-sites-onboarding.md +++ b/backend/docs/154-ingestions/ingestion-sites-onboarding.md @@ -16,12 +16,13 @@ feature/154-ingestion-sites ## Current State -The branch introduces a shared HPC ingestion entrypoint and a thin Chrysalis wrapper: +The repository uses a config-driven host-side launcher for site collection: -- `backend/app/scripts/ingestion/hpc_archive_ingestor.py` is the scheduler-agnostic entrypoint for HPC site wrappers. It currently delegates to the existing NERSC archive ingestor so Perlmutter behavior stays unchanged. -- `backend/app/scripts/ingestion/sites/chrysalis.sh` is the Chrysalis Jenkins wrapper. It sets Chrysalis defaults, requires SimBoard API configuration from the caller, and runs the shared Python entrypoint. -- `backend/app/scripts/README.md` documents how to run the shared ingestor and how site wrappers should be structured. -- `backend/tests/features/ingestion/test_nersc_archive_ingestor.py` includes coverage for the generic entrypoint. +- `backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh` loads a named site config and selects its ingestion runner. +- `backend/app/scripts/ingestion/sites/chrysalis.config` and `nersc.config` provide site-specific paths, machine names, runner modules, and protected credential-file locations. +- `backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py` is the scheduler-agnostic upload runner for remote HPC sites; `nersc_archive_ingestor.py` handles NERSC path ingestion. +- `backend/app/scripts/README.md` documents launcher use and site-config responsibilities. +- `backend/tests/features/ingestion/test_site_collection_launcher.py` covers config-driven offline launcher behavior. PR 169 is an open draft for this Chrysalis work. Take it over from there rather than starting a new branch. The PR currently notes that local validation was blocked because PostgreSQL was unavailable at `127.0.0.1`, so backend tests still need to be rerun in a working local or CI environment. @@ -34,18 +35,19 @@ The existing ingestor scans a performance archive directory, finds parseable exe The shared entrypoint is intended to be stable across schedulers: ```bash -uv run python -m app.scripts.ingestion.hpc_archive_ingestor +app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis staging ``` -Site wrappers should set only local defaults such as: +Site configs should set only local defaults such as: - `MACHINE_NAME` - `PERF_ARCHIVE_ROOT` -- `STATE_PATH` - `DRY_RUN` -- `PYTHON_BIN`, when the site needs a specific Python executable +- `SIMBOARD_INGESTOR_MODULE` +- protected environment and token file locations -The SimBoard API target and token must be provided by the runner environment: +For non-dry-run execution, the launcher loads the API environment and token from +the protected files referenced by the site config: - `SIMBOARD_API_BASE_URL` - `SIMBOARD_API_TOKEN` @@ -56,17 +58,16 @@ See `docs/hpc_api_token_authentication.md` for service account and API token set Start with Chrysalis. -Current wrapper: +Current launcher invocation: ```bash -backend/app/scripts/ingestion/sites/chrysalis.sh +backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis staging ``` -The wrapper defaults to: +The Chrysalis config defaults to: - `MACHINE_NAME=chrysalis` - `PERF_ARCHIVE_ROOT=/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` -- `STATE_PATH=${PERF_ARCHIVE_ROOT}/../simboard-ingestion-state.json` - `DRY_RUN=true` Before enabling real ingestion, validate: @@ -87,7 +88,7 @@ Do not set `DRY_RUN=false` until the dry-run behavior has been reviewed. 3. Validate the Chrysalis archive path and Jenkins environment. 4. Create or identify the SimBoard service account and API token for HPC ingestion. 5. Configure Jenkins to provide `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN` securely. -6. Run the Chrysalis wrapper with the default dry-run mode. +6. Run the Chrysalis launcher with the default dry-run mode. 7. Review candidate counts, skipped cases, errors, and state-file behavior. 8. Enable non-dry-run ingestion only after validation. 9. Apply the same wrapper pattern to additional sites once access is available. diff --git a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py index efb0bfaf..5bd86a22 100644 --- a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py @@ -1,9 +1,7 @@ """Tests for automated HPC upload archive ingestor runner.""" import json -import os import runpy -import subprocess import tarfile import urllib.error import urllib.request @@ -41,93 +39,6 @@ ) -def _chrysalis_wrapper_path() -> Path: - return ( - Path(__file__).resolve().parents[3] / "app/scripts/ingestion/sites/chrysalis.sh" - ) - - -def _fake_python(tmp_path: Path) -> Path: - python_path = tmp_path / "python" - python_path.write_text( - "#!/usr/bin/env bash\n" - 'printf \'%s\\n\' "${SCAN_MODE}" "${PERF_ARCHIVE_ROOT}" ' - '"${ARCHIVE_YEAR_START-unset}" > "${CAPTURE_PATH}"\n', - encoding="utf-8", - ) - python_path.chmod(0o755) - return python_path - - -def test_chrysalis_wrapper_requires_api_base_url_for_ingestion(tmp_path: Path) -> None: - env = os.environ.copy() - env.pop("SIMBOARD_API_BASE_URL", None) - env["SIMBOARD_API_TOKEN"] = "token" - env["DRY_RUN"] = "false" - env["PYTHON_BIN"] = str(_fake_python(tmp_path)) - - result = subprocess.run( - [_chrysalis_wrapper_path()], - capture_output=True, - check=False, - env=env, - text=True, - ) - - assert result.returncode != 0 - assert "SIMBOARD_API_BASE_URL must be set" in result.stderr - - -@pytest.mark.parametrize("dry_run", ["true", "True", " true ", "maybe"]) -def test_chrysalis_wrapper_allows_dry_run_without_api_configuration( - tmp_path: Path, - dry_run: str, -) -> None: - capture_path = tmp_path / "environment.txt" - env = os.environ.copy() - env.pop("SIMBOARD_API_BASE_URL", None) - env.pop("SIMBOARD_API_TOKEN", None) - env["CAPTURE_PATH"] = str(capture_path) - env["PYTHON_BIN"] = str(_fake_python(tmp_path)) - env["DRY_RUN"] = dry_run - - result = subprocess.run( - [_chrysalis_wrapper_path()], - capture_output=True, - check=False, - env=env, - text=True, - ) - - assert result.returncode == 0, result.stderr - - -def test_chrysalis_wrapper_defaults_to_staging(tmp_path: Path) -> None: - capture_path = tmp_path / "environment.txt" - env = os.environ.copy() - env.pop("ARCHIVE_YEAR_START", None) - env.pop("SCAN_MODE", None) - env["CAPTURE_PATH"] = str(capture_path) - env["PYTHON_BIN"] = str(_fake_python(tmp_path)) - env["SIMBOARD_API_BASE_URL"] = "https://simboard.example" - env["SIMBOARD_API_TOKEN"] = "token" - - result = subprocess.run( - [_chrysalis_wrapper_path()], - capture_output=True, - check=False, - env=env, - text=True, - ) - - assert result.returncode == 0, result.stderr - assert capture_path.read_text(encoding="utf-8").splitlines() == [ - "staging", - "/lcrc/group/e3sm/PERF_Chrysalis/performance_archive", - "unset", - ] - - @pytest.fixture(autouse=True) def _stub_discovery_result_persistence(monkeypatch) -> None: monkeypatch.setattr( diff --git a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py index 9d702a2d..6665d42a 100644 --- a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py @@ -1,9 +1,7 @@ """Tests for the NERSC archive ingestion runner script.""" import logging -import os import runpy -import subprocess from pathlib import Path from typing import Any @@ -37,29 +35,6 @@ ) -def _nersc_wrapper_path() -> Path: - return Path(__file__).resolve().parents[3] / "app/scripts/ingestion/sites/nersc.sh" - - -@pytest.mark.parametrize("dry_run", ["true", "True", " true ", "maybe"]) -def test_nersc_wrapper_allows_dry_run_without_api_configuration(dry_run: str) -> None: - env = os.environ.copy() - env.pop("SIMBOARD_API_BASE_URL", None) - env.pop("SIMBOARD_API_TOKEN", None) - env["DRY_RUN"] = dry_run - env["PYTHON_BIN"] = "/usr/bin/true" - - result = subprocess.run( - [_nersc_wrapper_path()], - capture_output=True, - check=False, - env=env, - text=True, - ) - - assert result.returncode == 0, result.stderr - - @pytest.fixture(autouse=True) def _stub_remote_state(monkeypatch) -> None: monkeypatch.setattr( diff --git a/backend/tests/features/ingestion/test_site_collection_launcher.py b/backend/tests/features/ingestion/test_site_collection_launcher.py new file mode 100644 index 00000000..7f50ef8e --- /dev/null +++ b/backend/tests/features/ingestion/test_site_collection_launcher.py @@ -0,0 +1,105 @@ +"""Tests for the config-driven host-side site collection launcher.""" + +import os +import shlex +import subprocess +from pathlib import Path + + +def _launcher_path() -> Path: + return ( + Path(__file__).resolve().parents[3] + / "app/scripts/ingestion/sites/site_ingestion_launcher.sh" + ) + + +def _write_executable(path: Path, contents: str) -> Path: + path.write_text(contents, encoding="utf-8") + path.chmod(0o755) + return path + + +def test_launcher_runs_configured_ingestor_offline(tmp_path: Path) -> None: + work_dir = tmp_path / "work" + work_dir.mkdir() + capture_path = tmp_path / "environment.txt" + bin_dir = tmp_path / "bin" + bin_dir.mkdir() + fake_python = _write_executable( + bin_dir / "python", + "#!/usr/bin/env bash\n" + 'printf "%s\\n" "${SCAN_MODE}" "${ARCHIVE_YEAR_START-unset}" ' + '"${MACHINE_NAME}" "$*" > "${CAPTURE_PATH}"\n', + ) + _write_executable(bin_dir / "flock", "#!/usr/bin/env bash\nexit 0\n") + backend_dir = Path(__file__).resolve().parents[3] + site_config = tmp_path / "test.config" + site_config.write_text( + "\n".join( + [ + f"export SIMBOARD_REPODIR={shlex.quote(str(backend_dir))}", + f"export SIMBOARD_WORKDIR={shlex.quote(str(work_dir))}", + "export SIMBOARD_INGESTOR_MODULE=app.scripts.ingestion.nersc_archive_ingestor", + "export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=2024-01", + "export MACHINE_NAME=test-machine", + "export DRY_RUN=true", + f"export PYTHON_BIN={shlex.quote(str(fake_python))}", + ] + ) + + "\n", + encoding="utf-8", + ) + env = os.environ.copy() + env.pop("SIMBOARD_API_BASE_URL", None) + env.pop("SIMBOARD_API_TOKEN", None) + env["CAPTURE_PATH"] = str(capture_path) + env["SIMBOARD_SITE_CONFIG"] = str(site_config) + env["PATH"] = f"{bin_dir}:{env['PATH']}" + + result = subprocess.run( + [_launcher_path(), "test", "archive"], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode == 0, result.stderr + assert capture_path.read_text(encoding="utf-8").splitlines() == [ + "archive", + "2024-01", + "test-machine", + "-m app.scripts.ingestion.nersc_archive_ingestor", + ] + + +def test_site_configs_define_their_ingestors() -> None: + sites_dir = _launcher_path().parent + + for config_name, expected_module, expected_machine in ( + ( + "nersc.config", + "app.scripts.ingestion.nersc_archive_ingestor", + "perlmutter", + ), + ( + "chrysalis.config", + "app.scripts.ingestion.hpc_upload_archive_ingestor", + "chrysalis", + ), + ): + result = subprocess.run( + [ + "bash", + "-c", + 'source "$1"; printf "%s\\n%s\\n" "$SIMBOARD_INGESTOR_MODULE" "$MACHINE_NAME"', + "bash", + str(sites_dir / config_name), + ], + capture_output=True, + check=False, + text=True, + ) + + assert result.returncode == 0, result.stderr + assert result.stdout.splitlines() == [expected_module, expected_machine] diff --git a/docs/deploy/nersc-spin-runbook.md b/docs/deploy/nersc-spin-runbook.md index 8bd16da3..197a88e6 100644 --- a/docs/deploy/nersc-spin-runbook.md +++ b/docs/deploy/nersc-spin-runbook.md @@ -351,12 +351,12 @@ snapshots in any eligible month are discovered automatically. 4. **Create/update CronJob `nersc-staging-ingestor`** - Use the **Staging CronJob** section below. - Configure secret-backed environment variables from `nersc-staging-ingestor-env`. - - Keep the CronJob command on `python -m app.scripts.ingestion.nersc_archive_ingestor`. Do not switch this workload to `app/scripts/ingestion/sites/nersc.sh`; that wrapper is for host-side NERSC cron usage and defaults to host filesystem paths and API values that do not match this Spin workload. + - Keep the CronJob command on `python -m app.scripts.ingestion.nersc_archive_ingestor`. Do not switch this workload to `app/scripts/ingestion/sites/site_ingestion_launcher.sh`; that launcher is for host-side NERSC cron usage and loads host filesystem paths and API configuration that do not match this Spin workload. 5. **Create/update CronJob `nersc-archive-ingestor`** - Use the **Archive CronJob** section below. - Configure secret-backed environment variables from `nersc-archive-ingestor-env`. - - Keep the CronJob command on `python -m app.scripts.ingestion.nersc_archive_ingestor`. Do not switch this workload to `app/scripts/ingestion/sites/nersc.sh`; that wrapper is for host-side NERSC cron usage and defaults to host filesystem paths and API values that do not match this Spin workload. + - Keep the CronJob command on `python -m app.scripts.ingestion.nersc_archive_ingestor`. Do not switch this workload to `app/scripts/ingestion/sites/site_ingestion_launcher.sh`; that launcher is for host-side NERSC cron usage and loads host filesystem paths and API configuration that do not match this Spin workload. 6. **Validate both jobs once with dry run** - Set `DRY_RUN=true` in both ingestion secrets. From c64b25e649a2b1ccc017297f2cda5c65f2698535 Mon Sep 17 00:00:00 2001 From: Vo Date: Wed, 12 Aug 2026 10:57:13 -0700 Subject: [PATCH 12/21] Use remote state in dry runs by default --- backend/app/scripts/README.md | 10 ++-- .../ingestion/archive_ingestor_core.py | 7 +++ .../app/scripts/ingestion/archive_workflow.py | 3 +- .../ingestion/hpc_upload_archive_ingestor.py | 11 ++-- .../ingestion/nersc_archive_ingestor.py | 11 ++-- .../sites/site_ingestion_launcher.sh | 30 ++++++++--- .../ingestion-sites-onboarding.md | 8 ++- .../ingestion/test_archive_workflow.py | 8 ++- .../test_hpc_upload_archive_ingestor.py | 5 +- .../ingestion/test_nersc_archive_ingestor.py | 18 ++++++- .../test_site_collection_launcher.py | 51 +++++++++++++++++++ docs/architecture/metadata-ingestion.md | 20 +++++--- 12 files changed, 145 insertions(+), 37 deletions(-) diff --git a/backend/app/scripts/README.md b/backend/app/scripts/README.md index ecf6e539..c9b6e09d 100644 --- a/backend/app/scripts/README.md +++ b/backend/app/scripts/README.md @@ -149,9 +149,11 @@ app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis archive Each site config defines its machine name, archive roots, working and repository paths, Python environment file, token export file, API base URL, archive lower -bound, and ingestor module. The launcher defaults to `DRY_RUN=true`; in this -mode it does not load API credentials. Set `DRY_RUN=false` only after validating -archive access, token storage, network egress, and candidate counts. A capped +bound, and ingestor module. The launcher defaults to `DRY_RUN=true` with +`DRY_RUN_USE_REMOTE_STATE=true`, so it loads API credentials and performs +read-only state validation. Set `DRY_RUN_USE_REMOTE_STATE=false` for a +credential-free offline scan. Set `DRY_RUN=false` only after validating archive +access, token storage, network egress, and candidate counts. A capped `MAX_CASES_PER_RUN` value limits real ingestion but still persists results. Site configs are operational inputs. Keep credentials in their referenced, @@ -185,6 +187,7 @@ Configuration surface (via env vars): - `OLD_PERF_ARCHIVE_ROOT` (default `/OLD_PERF` for `SCAN_MODE=archive`) - `MACHINE_NAME` (default `perlmutter`) - `DRY_RUN` (default `true`) +- `DRY_RUN_USE_REMOTE_STATE` (default `true`; set `false` for offline dry runs) - `MAX_CASES_PER_RUN` (optional, default not set) - `MAX_ATTEMPTS` (optional, default not set) - `REQUEST_TIMEOUT_SECONDS` (optional, default 60) @@ -320,6 +323,7 @@ Configuration surface (via env vars): - `OLD_PERF_ARCHIVE_ROOT` (default `/OLD_PERF` for `SCAN_MODE=archive`) - `MACHINE_NAME` (default `perlmutter`) - `DRY_RUN` (default `true`) +- `DRY_RUN_USE_REMOTE_STATE` (default `true`; set `false` for offline dry runs) - `MAX_CASES_PER_RUN` (optional, default not set) - `MAX_ATTEMPTS` (optional, default not set) - `REQUEST_TIMEOUT_SECONDS` (optional, default 60) diff --git a/backend/app/scripts/ingestion/archive_ingestor_core.py b/backend/app/scripts/ingestion/archive_ingestor_core.py index 7fa53416..64fa2ad8 100644 --- a/backend/app/scripts/ingestion/archive_ingestor_core.py +++ b/backend/app/scripts/ingestion/archive_ingestor_core.py @@ -132,6 +132,7 @@ "startup_configuration_runtime": ( "machine_name", "dry_run", + "dry_run_use_remote_state", "max_cases_per_run", "max_attempts", "request_timeout_seconds", @@ -261,6 +262,8 @@ class IngestorConfig: archive_year_start: str | None = None # Optional archive upper bound normalized to a YYYY-MM archive bucket. archive_year_end: str | None = None + # Whether a dry run reads existing state and archive checkpoints from SimBoard. + dry_run_use_remote_state: bool = True class IngestionRequestError(Exception): @@ -504,6 +507,9 @@ def _build_config_from_env( machine_name = os.getenv("MACHINE_NAME", DEFAULT_MACHINE_NAME) dry_run = _parse_bool(os.getenv("DRY_RUN"), default=True) + dry_run_use_remote_state = _parse_bool( + os.getenv("DRY_RUN_USE_REMOTE_STATE"), default=True + ) max_cases_per_run = _parse_optional_int(os.getenv("MAX_CASES_PER_RUN")) if max_cases_per_run is not None and max_cases_per_run <= 0: @@ -557,6 +563,7 @@ def _build_config_from_env( machine_name=machine_name, scan_mode=cast(Literal["staging", "archive"], scan_mode), dry_run=dry_run, + dry_run_use_remote_state=dry_run_use_remote_state, max_cases_per_run=max_cases_per_run, max_attempts=max_attempts, request_timeout_seconds=timeout_seconds, diff --git a/backend/app/scripts/ingestion/archive_workflow.py b/backend/app/scripts/ingestion/archive_workflow.py index 4d1f340d..985754fc 100644 --- a/backend/app/scripts/ingestion/archive_workflow.py +++ b/backend/app/scripts/ingestion/archive_workflow.py @@ -48,7 +48,7 @@ def _validate_run_preconditions( ) return False - if not config.dry_run and not config.api_token: + if (not config.dry_run or config.dry_run_use_remote_state) and not config.api_token: log_event_fn( "configuration_error", {"error": "SIMBOARD_API_TOKEN is required"}, @@ -90,6 +90,7 @@ def _log_startup_configuration( { "machine_name": config.machine_name, "dry_run": config.dry_run, + "dry_run_use_remote_state": config.dry_run_use_remote_state, "max_cases_per_run": config.max_cases_per_run, "max_attempts": config.max_attempts, "request_timeout_seconds": config.request_timeout_seconds, diff --git a/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py b/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py index 91638ab7..a38bac72 100644 --- a/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py +++ b/backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py @@ -13,9 +13,10 @@ 4. Persist discovery results, then package and submit each changed case. 5. In archive mode, settle and persist completed snapshot checkpoints. -Dry runs use empty local state, stop after discovery, and emit a summary without -API requests. Successful ingestions update database state used to keep future -runs idempotent. +Dry runs read remote state and checkpoints by default, stop after discovery, +and emit a summary without writes. Set ``DRY_RUN_USE_REMOTE_STATE=false`` for +an offline dry run with empty local state. Successful ingestions update database +state used to keep future runs idempotent. Structured log metric definitions for this runner live in ``docs/architecture/metadata-ingestion.md``. This module emits those field names @@ -123,8 +124,8 @@ def _prepare_run_state( config: IngestorConfig, archive_checkpointing: bool = True, ) -> tuple[dict[str, Any], set[str], str] | None: - """Build local dry-run state or fetch state needed for ingestion.""" - if config.dry_run: + """Build offline dry-run state or fetch state needed for this run.""" + if config.dry_run and not config.dry_run_use_remote_state: return _fresh_state(), set(), "" endpoint_url = _build_endpoint_url(config) diff --git a/backend/app/scripts/ingestion/nersc_archive_ingestor.py b/backend/app/scripts/ingestion/nersc_archive_ingestor.py index e0048c04..e3546806 100644 --- a/backend/app/scripts/ingestion/nersc_archive_ingestor.py +++ b/backend/app/scripts/ingestion/nersc_archive_ingestor.py @@ -13,9 +13,10 @@ 4. Persist discovery results, then submit each changed case with retry/backoff. 5. In archive mode, settle and persist completed snapshot checkpoints. -Dry runs use empty local state, stop after discovery, and emit a summary without -API requests. Successful ingestions update database state used to keep future -runs idempotent. +Dry runs read remote state and checkpoints by default, stop after discovery, +and emit a summary without writes. Set ``DRY_RUN_USE_REMOTE_STATE=false`` for +an offline dry run with empty local state. Successful ingestions update database +state used to keep future runs idempotent. Structured log metric definitions for this runner live in ``docs/architecture/metadata-ingestion.md``. This module emits those field names @@ -110,8 +111,8 @@ def _case_submission_callback( def _prepare_run_state( config: IngestorConfig, ) -> tuple[dict[str, Any], set[str], str] | None: - """Build local dry-run state or fetch state needed for ingestion.""" - if config.dry_run: + """Build offline dry-run state or fetch state needed for this run.""" + if config.dry_run and not config.dry_run_use_remote_state: return _fresh_state(), set(), "" endpoint_url = _build_endpoint_url(config) diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh index 2a462ddc..e4da8b9f 100755 --- a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -33,20 +33,34 @@ fi # Optional max cases per run, default is no limit. export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-}" -# Optional dry run mode, default is true. If true, no API calls will be made, and no data will be written to the database. -# This also means the SIMBOARD_ENV_FILE and SIMBOARD_API_TOKEN_FILE are not required to be set. +# Dry runs default to read-only remote-state validation. Set +# DRY_RUN_USE_REMOTE_STATE=false for credential-free offline scanning. dry_run_normalized="${DRY_RUN:-true}" dry_run_normalized="${dry_run_normalized#"${dry_run_normalized%%[![:space:]]*}"}" dry_run_normalized="${dry_run_normalized%"${dry_run_normalized##*[![:space:]]}"}" -shopt -s nocasematch -case "${dry_run_normalized}" in - 0|false|no|off) - : "${SIMBOARD_ENV_FILE:?SIMBOARD_ENV_FILE must be set for non-dry-run ingestion}" - : "${SIMBOARD_API_TOKEN_FILE:?SIMBOARD_API_TOKEN_FILE must be set for non-dry-run ingestion}" +remote_state_normalized="${DRY_RUN_USE_REMOTE_STATE:-true}" +remote_state_normalized="${remote_state_normalized#"${remote_state_normalized%%[![:space:]]*}"}" +remote_state_normalized="${remote_state_normalized%"${remote_state_normalized##*[![:space:]]}"}" + +load_api_configuration() { + : "${SIMBOARD_ENV_FILE:?SIMBOARD_ENV_FILE must be set when remote API access is enabled}" + : "${SIMBOARD_API_TOKEN_FILE:?SIMBOARD_API_TOKEN_FILE must be set when remote API access is enabled}" source "${SIMBOARD_ENV_FILE}" source "${SIMBOARD_API_TOKEN_FILE}" - : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set for non-dry-run ingestion}" + : "${SIMBOARD_API_BASE_URL:?SIMBOARD_API_BASE_URL must be set when remote API access is enabled}" : "${SIMBOARD_API_TOKEN:?SIMBOARD_API_TOKEN failed to be set}" +} + +shopt -s nocasematch +case "${dry_run_normalized}" in + 0|false|no|off) + load_api_configuration + ;; + *) + case "${remote_state_normalized}" in + 0|false|no|off) ;; + *) load_api_configuration ;; + esac ;; esac shopt -u nocasematch diff --git a/backend/docs/154-ingestions/ingestion-sites-onboarding.md b/backend/docs/154-ingestions/ingestion-sites-onboarding.md index d69a8431..d32d28f4 100644 --- a/backend/docs/154-ingestions/ingestion-sites-onboarding.md +++ b/backend/docs/154-ingestions/ingestion-sites-onboarding.md @@ -43,11 +43,12 @@ Site configs should set only local defaults such as: - `MACHINE_NAME` - `PERF_ARCHIVE_ROOT` - `DRY_RUN` +- `DRY_RUN_USE_REMOTE_STATE` - `SIMBOARD_INGESTOR_MODULE` - protected environment and token file locations -For non-dry-run execution, the launcher loads the API environment and token from -the protected files referenced by the site config: +For normal execution and default dry runs, the launcher loads the API environment +and token from the protected files referenced by the site config: - `SIMBOARD_API_BASE_URL` - `SIMBOARD_API_TOKEN` @@ -70,6 +71,9 @@ The Chrysalis config defaults to: - `PERF_ARCHIVE_ROOT=/lcrc/group/e3sm/PERF_Chrysalis/performance_archive` - `DRY_RUN=true` +Set `DRY_RUN_USE_REMOTE_STATE=false` only when a credential-free offline scan is +needed; default dry runs read remote state and checkpoints without writing data. + Before enabling real ingestion, validate: - The archive path exists and is readable from the Jenkins runtime. diff --git a/backend/tests/features/ingestion/test_archive_workflow.py b/backend/tests/features/ingestion/test_archive_workflow.py index 4b611573..1b6a62a6 100644 --- a/backend/tests/features/ingestion/test_archive_workflow.py +++ b/backend/tests/features/ingestion/test_archive_workflow.py @@ -74,7 +74,12 @@ def log_event(event: str, fields: dict[str, Any] | None = None) -> None: archive_root = tmp_path / "archive" archive_root.mkdir() - dry_run_config = replace(_config(archive_root, dry_run=True), api_token="") + default_dry_run_config = replace(_config(archive_root, dry_run=True), api_token="") + assert not _validate_run_preconditions( + default_dry_run_config, log_event_fn=log_event + ) + + dry_run_config = replace(default_dry_run_config, dry_run_use_remote_state=False) assert _validate_run_preconditions(dry_run_config, log_event_fn=log_event) ingest_config = replace(_config(archive_root), api_token="") @@ -132,6 +137,7 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: { "machine_name": "pm", "dry_run": True, + "dry_run_use_remote_state": True, "max_cases_per_run": 5, "max_attempts": 2, "request_timeout_seconds": 60, diff --git a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py index 5bd86a22..f95d1372 100644 --- a/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py @@ -631,6 +631,7 @@ def fake_discovery_post(*args, **kwargs): archive_root=archive_root, machine_name="perlmutter", dry_run=True, + dry_run_use_remote_state=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, @@ -798,7 +799,7 @@ def fake_log_event(event: str, fields: dict[str, object] | None = None) -> None: assert any(event == "state_fetch_failed" for event, _ in logged_events) -def test_run_ingestor_fetches_archive_checkpoints_before_state( +def test_run_ingestor_default_dry_run_fetches_archive_checkpoints_before_state( tmp_path: Path, monkeypatch, ) -> None: @@ -829,7 +830,7 @@ def fetch_state(*args: Any, **kwargs: Any) -> dict[str, Any]: api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=False, + dry_run=True, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, diff --git a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py index 6665d42a..cc1afaf7 100644 --- a/backend/tests/features/ingestion/test_nersc_archive_ingestor.py +++ b/backend/tests/features/ingestion/test_nersc_archive_ingestor.py @@ -493,6 +493,7 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: archive_root=archive_root, machine_name="perlmutter", dry_run=True, + dry_run_use_remote_state=False, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, @@ -580,7 +581,7 @@ def fake_log_event(event: str, fields: dict[str, Any] | None = None) -> None: assert not any(event == "scan_completed" for event, _ in logged_events) -def test_run_ingestor_fetches_state_before_archive_checkpoints( +def test_run_ingestor_default_dry_run_fetches_state_before_archive_checkpoints( tmp_path: Path, monkeypatch, ) -> None: @@ -607,7 +608,7 @@ def fetch_checkpoints(*args: Any, **kwargs: Any) -> set[str]: api_token="token", archive_root=archive_root, machine_name="perlmutter", - dry_run=False, + dry_run=True, max_cases_per_run=None, max_attempts=1, request_timeout_seconds=30, @@ -839,6 +840,7 @@ def test_build_config_from_env_parses_valid_values(monkeypatch, tmp_path: Path) assert config.archive_root == (tmp_path / "archive").resolve() assert config.machine_name == "pm" assert config.dry_run is True + assert config.dry_run_use_remote_state is True assert config.max_cases_per_run == 5 assert config.max_attempts == 4 assert config.request_timeout_seconds == 90 @@ -864,6 +866,18 @@ def test_build_config_from_env_parses_archive_mode_and_year_range( assert config.archive_year_end == "2025-12" +def test_build_config_from_env_allows_offline_dry_runs( + monkeypatch, tmp_path: Path +) -> None: + monkeypatch.setenv("PERF_ARCHIVE_ROOT", str(tmp_path / "archive")) + monkeypatch.setenv("DRY_RUN_USE_REMOTE_STATE", "false") + + config = _build_config_from_env() + + assert config.dry_run is True + assert config.dry_run_use_remote_state is False + + def test_build_config_from_env_parses_archive_mode_and_month_range( monkeypatch, tmp_path: Path ) -> None: diff --git a/backend/tests/features/ingestion/test_site_collection_launcher.py b/backend/tests/features/ingestion/test_site_collection_launcher.py index 7f50ef8e..75dd5a5e 100644 --- a/backend/tests/features/ingestion/test_site_collection_launcher.py +++ b/backend/tests/features/ingestion/test_site_collection_launcher.py @@ -43,6 +43,7 @@ def test_launcher_runs_configured_ingestor_offline(tmp_path: Path) -> None: "export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=2024-01", "export MACHINE_NAME=test-machine", "export DRY_RUN=true", + "export DRY_RUN_USE_REMOTE_STATE=false", f"export PYTHON_BIN={shlex.quote(str(fake_python))}", ] ) @@ -73,6 +74,56 @@ def test_launcher_runs_configured_ingestor_offline(tmp_path: Path) -> None: ] +def test_launcher_loads_credentials_for_default_remote_state_dry_run( + tmp_path: Path, +) -> None: + work_dir = tmp_path / "work" + work_dir.mkdir() + bin_dir = tmp_path / "bin" + bin_dir.mkdir() + fake_python = _write_executable(bin_dir / "python", "#!/usr/bin/env bash\nexit 0\n") + _write_executable(bin_dir / "flock", "#!/usr/bin/env bash\nexit 0\n") + environment_file = tmp_path / "environment.sh" + environment_file.write_text( + "export SIMBOARD_API_BASE_URL=https://example.test\n", encoding="utf-8" + ) + token_file = tmp_path / "token.sh" + token_file.write_text("export SIMBOARD_API_TOKEN=test-token\n", encoding="utf-8") + backend_dir = Path(__file__).resolve().parents[3] + site_config = tmp_path / "test.config" + site_config.write_text( + "\n".join( + [ + f"export SIMBOARD_REPODIR={shlex.quote(str(backend_dir))}", + f"export SIMBOARD_WORKDIR={shlex.quote(str(work_dir))}", + "export SIMBOARD_INGESTOR_MODULE=app.scripts.ingestion.nersc_archive_ingestor", + "export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=2024-01", + f"export SIMBOARD_ENV_FILE={shlex.quote(str(environment_file))}", + f"export SIMBOARD_API_TOKEN_FILE={shlex.quote(str(token_file))}", + "export DRY_RUN=true", + f"export PYTHON_BIN={shlex.quote(str(fake_python))}", + ] + ) + + "\n", + encoding="utf-8", + ) + env = os.environ.copy() + env.pop("SIMBOARD_API_BASE_URL", None) + env.pop("SIMBOARD_API_TOKEN", None) + env["SIMBOARD_SITE_CONFIG"] = str(site_config) + env["PATH"] = f"{bin_dir}:{env['PATH']}" + + result = subprocess.run( + [_launcher_path(), "test", "archive"], + capture_output=True, + check=False, + env=env, + text=True, + ) + + assert result.returncode == 0, result.stderr + + def test_site_configs_define_their_ingestors() -> None: sites_dir = _launcher_path().parent diff --git a/docs/architecture/metadata-ingestion.md b/docs/architecture/metadata-ingestion.md index 542ca7a1..a01e2b8f 100644 --- a/docs/architecture/metadata-ingestion.md +++ b/docs/architecture/metadata-ingestion.md @@ -301,8 +301,8 @@ flowchart TD ### Runner Configuration -Non-dry-run automated ingestion requests require a bearer API token. Both site-side -runners use: +Automated ingestion and remote-state dry runs require a bearer API token. Both +site-side runners use: - `SIMBOARD_API_BASE_URL` - `SIMBOARD_API_TOKEN` @@ -311,11 +311,14 @@ runners use: - `OLD_PERF_ARCHIVE_ROOT` - `MACHINE_NAME` - `DRY_RUN` +- `DRY_RUN_USE_REMOTE_STATE` -With `DRY_RUN=true`, runners scan local archive data using empty ingestion state and -make no API requests. `SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN` are not -required, but dry-run output cannot exclude executions already ingested remotely or -archive snapshots already checkpointed. +With `DRY_RUN=true`, runners read remote ingestion state and archive checkpoints by +default, then scan and report candidates without writes. This requires +`SIMBOARD_API_BASE_URL` and `SIMBOARD_API_TOKEN`; the report excludes executions +already ingested remotely and snapshots already checkpointed. Set +`DRY_RUN_USE_REMOTE_STATE=false` for an offline scan using empty local state and no +API requests. They also support these tuning options: @@ -351,8 +354,9 @@ not supply synthetic benchmark measurements. The runners use composable configuration rather than numbered dry-run modes: -- Set `DRY_RUN=true` to scan and report candidates without API requests or - persisted state changes. +- Set `DRY_RUN=true` to scan and report candidates without persisted state changes; + it reads remote state by default. Set `DRY_RUN_USE_REMOTE_STATE=false` to avoid + API requests for an offline scan. - Set `DRY_RUN=false` and a small `MAX_CASES_PER_RUN` value to validate live ingestion on a bounded batch. This is real ingestion and persists results. - Set `DRY_RUN=false` with no per-run cap for normal scheduled ingestion. From 3bc4d4587e5bec9c300837a3b047246484e8c78a Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Mon, 24 Aug 2026 12:49:16 -0500 Subject: [PATCH 13/21] update site launcher and config as used in testing --- .../scripts/ingestion/sites/chrysalis.config | 5 +- .../sites/site_ingestion_launcher.sh | 56 +++++++++++++++++-- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/backend/app/scripts/ingestion/sites/chrysalis.config b/backend/app/scripts/ingestion/sites/chrysalis.config index 0e637414..5548bf2b 100644 --- a/backend/app/scripts/ingestion/sites/chrysalis.config +++ b/backend/app/scripts/ingestion/sites/chrysalis.config @@ -1,11 +1,10 @@ -export SIMBOARD_WORKDIR="${HOME}/Ops/simboard" -export SIMBOARD_REPODIR="${HOME}/gitrepo/simboard/backend" +export SIMBOARD_WORKDIR="/lcrc/group/e3sm2/simboard/operations" +export SIMBOARD_MODULES="/lcrc/group/e3sm2/simboard/repository/simboard/backend" export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" export SIMBOARD_INGESTOR_MODULE="app.scripts.ingestion.hpc_upload_archive_ingestor" export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" - export DRY_RUN="${DRY_RUN:-true}" export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh index e4da8b9f..3c66a0ce 100755 --- a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -8,6 +8,9 @@ fi site=$1 scan_mode=$2 + +: "${SIMBOARD_ROOT:?SIMBOARD_ROOT must be defined in crontab or prior}" + script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" site_config="${SIMBOARD_SITE_CONFIG:-${script_dir}/${site}.config}" @@ -16,11 +19,20 @@ if [[ ! -r "${site_config}" ]]; then exit 1 fi +# These can be standardized, or overridden by specifiying in the site_config file. +export SIMBOARD_WORKDIR="${SIMBOARD_ROOT}/operations" +export SIMBOARD_MODULES="${SIMBOARD_ROOT}/repository/simboard/backend" + # Site config provides paths, runner module, and optional authentication helpers. +# NOTE: config may override SIMBOARD_WORKDIR and SIMBOARD_MODULES, but need not. source "${site_config}" -: "${SIMBOARD_REPODIR:?SIMBOARD_REPODIR must be set by the site configuration}" -: "${SIMBOARD_WORKDIR:?SIMBOARD_WORKDIR must be set by the site configuration}" +echo "DEBUG: SIMBOARD_WORKDIR = ${SIMBOARD_WORKDIR}" >> TMPLOG 2>&1 +echo "DEBUG: SIMBOARD_MODULES = ${SIMBOARD_MODULES}" >> TMPLOG 2>&1 + +echo "SIMBOARD_ENV_FILE = $SIMBOARD_ENV_FILE" >> TMPLOG 2>&1 +echo "MACHINE_NAME = $MACHINE_NAME" >> TMPLOG 2>&1 + : "${SIMBOARD_INGESTOR_MODULE:?SIMBOARD_INGESTOR_MODULE must be set by the site configuration}" export SCAN_MODE="${scan_mode}" @@ -30,6 +42,11 @@ if [[ $scan_mode == "archive" ]]; then export ARCHIVE_YEAR_START="${ARCHIVE_YEAR_START:-${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:?SIMBOARD_DEFAULT_ARCHIVE_YEAR_START must be set by the site configuration}}" fi +echo "SIMBOARD_API_TOKEN_FILE=${SIMBOARD_API_TOKEN_FILE}" >> TMPLOG 2>&1 +echo "SIMBOARD_INGESTOR_MODULE=${SIMBOARD_INGESTOR_MODULE}" >> TMPLOG 2>&1 +echo "SIMBOARD_API_BASE_URL=${SIMBOARD_API_BASE_URL}" >> TMPLOG 2>&1 +echo "SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START}" >> TMPLOG 2>&1 + # Optional max cases per run, default is no limit. export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-}" @@ -65,17 +82,44 @@ case "${dry_run_normalized}" in esac shopt -u nocasematch -export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_REPODIR}/.venv/bin/python}" +export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_MODULES}/.venv/bin/python}" if [[ ! -x "${PYTHON_BIN}" ]]; then echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 echo "Run 'make install' from the repository root to create it." >&2 exit 1 fi -LOCK_FILE="$SIMBOARD_WORKDIR/SBCS.lock" +tokenproof="${SIMBOARD_API_TOKEN:0:4}-XXXX-REDACTED-XXXX-${SIMBOARD_API_TOKEN: -4}" + +echo "DEBUG_pre-activate: SIMBOARD_INGESTOR_MODULE = ${SIMBOARD_INGESTOR_MODULE}" >> TMPLOG 2>&1 +echo "DEBUG_pre-activate: MAX_CASES_PER_RUN = ${MAX_CASES_PER_RUN}" >> TMPLOG 2>&1 +echo "DEBUG_pre-activate: PYTHON_BIN = ${PYTHON_BIN}" >> TMPLOG 2>&1 +echo "DEBUG_pre-activate: SIMBOARD_ENV_FILE = ${SIMBOARD_ENV_FILE}" >> TMPLOG 2>&1 +echo "DEBUG_pre-activate: SIMBOARD_API_TOKEN_FILE = ${SIMBOARD_API_TOKEN_FILE}" >> TMPLOG 2>&1 +echo "DEBUG_pre-activate: SIMBOARD_API_BASE_URL = ${SIMBOARD_API_BASE_URL}" >> TMPLOG 2>&1 +printf 'DEBUG: SIMBOARD_API_TOKEN=%q\n' "${tokenproof-}" >> TMPLOG 2>&1 +printf 'DEBUG: ARCHIVE_YEAR_START=%q\n' "${ARCHIVE_YEAR_START-}" >> TMPLOG 2>&1 + ts=`date -u +%Y%m%d_%H%M%S` LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" +echo "DEBUG: LOG_FILE = ${LOG_FILE}" >> TMPLOG 2>&1 + +# DO IT ANYWAY +source "${SIMBOARD_ENV_FILE}" +source "${SIMBOARD_API_TOKEN_FILE}" +tokenproof="${SIMBOARD_API_TOKEN:0:4}-XXXX-REDACTED-XXXX-${SIMBOARD_API_TOKEN: -4}" +echo "DEBUG_post-activate: SIMBOARD_INGESTOR_MODULE = ${SIMBOARD_INGESTOR_MODULE}" >> ${LOG_FILE} 2>&1 +echo "DEBUG_post-activate: MAX_CASES_PER_RUN = ${MAX_CASES_PER_RUN}" >> ${LOG_FILE} 2>&1 +echo "DEBUG_post-activate: PYTHON_BIN = ${PYTHON_BIN}" >> ${LOG_FILE} 2>&1 +echo "DEBUG_post-activate: SIMBOARD_ENV_FILE = ${SIMBOARD_ENV_FILE}" >> ${LOG_FILE} 2>&1 +echo "DEBUG_post-activate: SIMBOARD_API_TOKEN_FILE = ${SIMBOARD_API_TOKEN_FILE}" >> ${LOG_FILE} 2>&1 +echo "DEBUG_post-activate: SIMBOARD_API_BASE_URL = ${SIMBOARD_API_BASE_URL}" >> ${LOG_FILE} 2>&1 +printf 'DEBUG: SIMBOARD_API_TOKEN=%q\n' "${tokenproof-}" >> ${LOG_FILE} 2>&1 +printf 'DEBUG: ARCHIVE_YEAR_START=%q\n' "${ARCHIVE_YEAR_START-}" >> ${LOG_FILE} 2>&1 + + +LOCK_FILE="$SIMBOARD_WORKDIR/SBCS.lock" exec 200>"$LOCK_FILE" if ! flock -n 200; then echo "[$(date -Is)] SKIP launch simboard collection, lock already held, pid $$" >> "$LOG_FILE" @@ -88,5 +132,7 @@ cleanup() { trap cleanup EXIT # Run the app -cd "${SIMBOARD_REPODIR}" +cd "${SIMBOARD_MODULES}" +curdir=`pwd` +echo "DEBUG_post-activate: curdir = ${curdir}" >> ${LOG_FILE} 2>&1 exec "${PYTHON_BIN}" -m "${SIMBOARD_INGESTOR_MODULE}" >> "$LOG_FILE" 2>&1 From 9d9940d06c6da72eb87ee89576131a17cb7e8168 Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Tue, 25 Aug 2026 16:15:19 -0500 Subject: [PATCH 14/21] tentative collector setup guidance doc --- ...etup_for_Collection_Scripts_and_Crontab.md | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md diff --git a/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md b/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md new file mode 100644 index 00000000..238fcc0c --- /dev/null +++ b/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md @@ -0,0 +1,84 @@ +# Setup for Collection Scripts and Crontab + +## Enables + +- standardized routine remote site metadata collection for Simboard backend ingestion + +## Important Locations + +```text +[SIMBOARD_ROOT]/ User/Operator-selected read/write/execute directory +[SIMBOARD_ROOT]/repository/simboard Location of git-cloned "simboard" repository +[SIMBOARD_ROOT]/operations Initial work directory for crontab execution, overflow logs, notes +``` + +## Important Files + +```text +[SIMBOARD_ROOT]/repository/simboard/backend/app/scripts/ingestion/sites/.config + + These are the site-specific environment variables the site-launch script will export. + +[SIMBOARD_ROOT]/operations/.api_token_export + + Holds the export command that will set the SIMBOARD_API_TOKEN variable when sourced in + the cron'd site_ingestion_launcher.sh script. This adds a layer of indirection to prevent + accidental storage of the token in the public repository. +``` + +## Procedures + +Assuming the "SIMBOARD_ROOT", repository and operations directories are set, and the +site configuration file is properly defined in + + [SIMBOARD_ROOT]/repository/simboard/backend/app/scripts/ingestion/sites/.config + +the following command line, established in your crontab file, will serve to run the background +collection in "staging" or "archive" modes, respectively: + +```text + export SIMBOARD_ROOT=/lcrc/group/e3sm2/simboard \ + && cd ${SIMBOARD_ROOT}/operations \ + && ${SIMBOARD_ROOT}/repository/simboard/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis staging + + export SIMBOARD_ROOT=/lcrc/group/e3sm2/simboard \ + && cd ${SIMBOARD_ROOT}/operations \ + && ${SIMBOARD_ROOT}/repository/simboard/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis archive +``` + +## About the Site Config + +The following sample (from Chrysalis) demonstrates certain flexibilities involved: + +```text + # export SIMBOARD_WORKDIR="/lcrc/group/e3sm2/simboard/operations" + # export SIMBOARD_MODULES="/lcrc/group/e3sm2/simboard/repository/simboard/backend" + export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" + export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" + export SIMBOARD_INGESTOR_MODULE="app.scripts.ingestion.hpc_upload_archive_ingestor" + export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" + export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" + export DRY_RUN="${DRY_RUN:-true}" + export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" + export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" + export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" +``` + +Note that the first two variables (SIMBOARD_WORKDIR, SIMBOARD_MODULES) can be set automatically in +the launcher script, defined by their relation to SIMBOARD_ROOT. Likewise, we could eliminate +SIMBOARD_INGESTOR_MODULE, as this fixed string is not site-dependent and could be defined in the +laucher script. The same is true for SIMBOARD_API_BASE_URL, and although MACHINE_NAME is site +specific, it is supplied on the crontab command line and could be exported in the launch script. + +Hence, the minimal site configuration script might look like: + +```text + export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" + export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" + export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" + export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" + export DRY_RUN="${DRY_RUN:-true}" + export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" + export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" +``` + From 2532f371310029e4ee10ddd39df2484febc94472 Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Tue, 25 Aug 2026 16:24:16 -0500 Subject: [PATCH 15/21] tentative collector setup guidance doc --- .../sites/Setup_for_Collection_Scripts_and_Crontab.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md b/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md index 238fcc0c..eaa59846 100644 --- a/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md +++ b/backend/app/scripts/ingestion/sites/Setup_for_Collection_Scripts_and_Crontab.md @@ -46,6 +46,14 @@ collection in "staging" or "archive" modes, respectively: && ${SIMBOARD_ROOT}/repository/simboard/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis archive ``` +These command should be preceded by crontab scedule specifications, recommended to be: + +```text + 5 20 35 50 * * * * (for the "staging" operation, every 15 minutes of every hour) + 10 15 * * * (for the "archive" operaiton, 15:10 every day) +``` + + ## About the Site Config The following sample (from Chrysalis) demonstrates certain flexibilities involved: From 384cf554ea906bc5e227b501f9e1741108f8e511 Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Tue, 25 Aug 2026 16:43:49 -0500 Subject: [PATCH 16/21] initial generic crontab example --- .../scripts/ingestion/sites/crontab.example | 27 +++++++++++++++++++ .../ingestion/sites/nersc.crontab.example | 26 ------------------ 2 files changed, 27 insertions(+), 26 deletions(-) create mode 100644 backend/app/scripts/ingestion/sites/crontab.example delete mode 100644 backend/app/scripts/ingestion/sites/nersc.crontab.example diff --git a/backend/app/scripts/ingestion/sites/crontab.example b/backend/app/scripts/ingestion/sites/crontab.example new file mode 100644 index 00000000..037a5e16 --- /dev/null +++ b/backend/app/scripts/ingestion/sites/crontab.example @@ -0,0 +1,27 @@ +# Example crontab entries for a generic site collection launcher. +# Install with something like: +# crontab backend/app/scripts/ingestion/sites/.crontab.example + +SHELL=/bin/bash +PATH=/usr/local/bin:/usr/bin:/bin +CRON_TZ=UTC + +# Assume SIMBOARD_ROOT is a directory containing both +# "repository/simboard/backend/..." and +# "operations" subdirectories. +export SIMBOARD_ROOT= + +# Staging scan: run every 15 minutes, offset 5 minutes into the hour. +5 20 35 50 * * * * cd ${SIMBOARD_ROOT}/operations && ${SIMBOARD_ROOT}/repository/simboard/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh staging + +# Archive scan: run daily at 03:15 UTC. The site config supplies the default +# lower bound. Override `ARCHIVE_YEAR_START` or `ARCHIVE_YEAR_END` in the cron +# environment for a differently scoped scan. Values may use YYYY or YYYY-MM. +10 15 * * * cd ${SIMBOARD_ROOT}/operations && ${SIMBOARD_ROOT}/repository/simboard/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh chrysalis archive + +# I DON'T KNOW ABOUT THESE +# Diagnostics provenance scan: start dry-run, inspect logs, then set DRY_RUN=false. +# 20 * * * * cd ${REPO_DIR} && ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.log 2>&1 + +# Chrysalis diagnostics provenance scan; use its local checkout path for REPO_DIR. +# 25 * * * * cd ${REPO_DIR} && MACHINE_NAME=chrysalis ${REPO_DIR}/backend/app/scripts/ingestion/sites/lcrc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/lcrc-diagnostics-scanner.log 2>&1 diff --git a/backend/app/scripts/ingestion/sites/nersc.crontab.example b/backend/app/scripts/ingestion/sites/nersc.crontab.example deleted file mode 100644 index 0d943d01..00000000 --- a/backend/app/scripts/ingestion/sites/nersc.crontab.example +++ /dev/null @@ -1,26 +0,0 @@ -# Example crontab entries for the NERSC site collection launcher. -# Install with something like: -# crontab backend/app/scripts/ingestion/sites/nersc.crontab.example -# -# Update `nersc.config` before use. It references the protected environment and -# token files used for non-dry-run ingestion. - -SHELL=/bin/bash -PATH=/usr/local/bin:/usr/bin:/bin -CRON_TZ=UTC - -REPO_DIR=/path/to/simboard - -# Staging scan: run every hour. -0 * * * * ${REPO_DIR}/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh nersc staging - -# Archive scan: run daily at 03:15 UTC. The site config supplies the default -# lower bound. Override `ARCHIVE_YEAR_START` or `ARCHIVE_YEAR_END` in the cron -# environment for a differently scoped scan. Values may use YYYY or YYYY-MM. -15 3 * * * ${REPO_DIR}/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh nersc archive - -# Diagnostics provenance scan: start dry-run, inspect logs, then set DRY_RUN=false. -20 * * * * cd ${REPO_DIR} && ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/nersc-diagnostics-scanner.log 2>&1 - -# Chrysalis diagnostics provenance scan; use its local checkout path for REPO_DIR. -25 * * * * cd ${REPO_DIR} && MACHINE_NAME=chrysalis ${REPO_DIR}/backend/app/scripts/ingestion/sites/lcrc-diagnostics-scanner.sh >> ${REPO_DIR}/backend/app/scripts/ingestion/sites/lcrc-diagnostics-scanner.log 2>&1 From 3d703278d6f5107dfec03af5d98e0b88c5af6a5c Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Wed, 26 Aug 2026 11:45:06 -0500 Subject: [PATCH 17/21] modified PYTHON_BIN test to handle non-existence as well as non-execute --- .../ingestion/sites/site_ingestion_launcher.sh | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh index 3c66a0ce..4a2bd733 100755 --- a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -48,7 +48,7 @@ echo "SIMBOARD_API_BASE_URL=${SIMBOARD_API_BASE_URL}" >> TMPLOG 2>&1 echo "SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START}" >> TMPLOG 2>&1 # Optional max cases per run, default is no limit. -export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-}" +export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-1}" # Dry runs default to read-only remote-state validation. Set # DRY_RUN_USE_REMOTE_STATE=false for credential-free offline scanning. @@ -83,39 +83,31 @@ esac shopt -u nocasematch export PYTHON_BIN="${PYTHON_BIN:-${SIMBOARD_MODULES}/.venv/bin/python}" -if [[ ! -x "${PYTHON_BIN}" ]]; then + +if [[ ! -d "${SIMBOARD_MODULES}/.venv" || ! -x "${PYTHON_BIN}" ]]; then echo "Expected Python interpreter at ${PYTHON_BIN}" >&2 echo "Run 'make install' from the repository root to create it." >&2 exit 1 fi -tokenproof="${SIMBOARD_API_TOKEN:0:4}-XXXX-REDACTED-XXXX-${SIMBOARD_API_TOKEN: -4}" - echo "DEBUG_pre-activate: SIMBOARD_INGESTOR_MODULE = ${SIMBOARD_INGESTOR_MODULE}" >> TMPLOG 2>&1 echo "DEBUG_pre-activate: MAX_CASES_PER_RUN = ${MAX_CASES_PER_RUN}" >> TMPLOG 2>&1 echo "DEBUG_pre-activate: PYTHON_BIN = ${PYTHON_BIN}" >> TMPLOG 2>&1 echo "DEBUG_pre-activate: SIMBOARD_ENV_FILE = ${SIMBOARD_ENV_FILE}" >> TMPLOG 2>&1 echo "DEBUG_pre-activate: SIMBOARD_API_TOKEN_FILE = ${SIMBOARD_API_TOKEN_FILE}" >> TMPLOG 2>&1 echo "DEBUG_pre-activate: SIMBOARD_API_BASE_URL = ${SIMBOARD_API_BASE_URL}" >> TMPLOG 2>&1 -printf 'DEBUG: SIMBOARD_API_TOKEN=%q\n' "${tokenproof-}" >> TMPLOG 2>&1 printf 'DEBUG: ARCHIVE_YEAR_START=%q\n' "${ARCHIVE_YEAR_START-}" >> TMPLOG 2>&1 ts=`date -u +%Y%m%d_%H%M%S` LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" echo "DEBUG: LOG_FILE = ${LOG_FILE}" >> TMPLOG 2>&1 -# DO IT ANYWAY -source "${SIMBOARD_ENV_FILE}" -source "${SIMBOARD_API_TOKEN_FILE}" -tokenproof="${SIMBOARD_API_TOKEN:0:4}-XXXX-REDACTED-XXXX-${SIMBOARD_API_TOKEN: -4}" - echo "DEBUG_post-activate: SIMBOARD_INGESTOR_MODULE = ${SIMBOARD_INGESTOR_MODULE}" >> ${LOG_FILE} 2>&1 echo "DEBUG_post-activate: MAX_CASES_PER_RUN = ${MAX_CASES_PER_RUN}" >> ${LOG_FILE} 2>&1 echo "DEBUG_post-activate: PYTHON_BIN = ${PYTHON_BIN}" >> ${LOG_FILE} 2>&1 echo "DEBUG_post-activate: SIMBOARD_ENV_FILE = ${SIMBOARD_ENV_FILE}" >> ${LOG_FILE} 2>&1 echo "DEBUG_post-activate: SIMBOARD_API_TOKEN_FILE = ${SIMBOARD_API_TOKEN_FILE}" >> ${LOG_FILE} 2>&1 echo "DEBUG_post-activate: SIMBOARD_API_BASE_URL = ${SIMBOARD_API_BASE_URL}" >> ${LOG_FILE} 2>&1 -printf 'DEBUG: SIMBOARD_API_TOKEN=%q\n' "${tokenproof-}" >> ${LOG_FILE} 2>&1 printf 'DEBUG: ARCHIVE_YEAR_START=%q\n' "${ARCHIVE_YEAR_START-}" >> ${LOG_FILE} 2>&1 @@ -131,6 +123,10 @@ cleanup() { } trap cleanup EXIT + +exit 0 + + # Run the app cd "${SIMBOARD_MODULES}" curdir=`pwd` From b18548c1d4bb82b4d370ddbb2f2b7f40ad51571b Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Wed, 26 Aug 2026 12:07:30 -0500 Subject: [PATCH 18/21] removed spurious exit --- .../app/scripts/ingestion/sites/site_ingestion_launcher.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh index 4a2bd733..be9fb341 100755 --- a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -123,10 +123,6 @@ cleanup() { } trap cleanup EXIT - -exit 0 - - # Run the app cd "${SIMBOARD_MODULES}" curdir=`pwd` From 1b30f5f8ee878b456043d827845b922129d1bb52 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 27 Aug 2026 13:16:18 -0700 Subject: [PATCH 19/21] docs: add read-only database access guide --- docs/README.md | 1 + docs/deploy/README.md | 2 + docs/deploy/read-only-database-access.md | 105 +++++++++++++++++++++++ mkdocs.yml | 1 + 4 files changed, 109 insertions(+) create mode 100644 docs/deploy/read-only-database-access.md diff --git a/docs/README.md b/docs/README.md index a9abca83..7e1b416e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,3 +27,4 @@ Use this directory as the documentation router by audience. - Deployment reference: [deploy/deployment-and-release.md](deploy/deployment-and-release.md) - NERSC Spin runbook: [deploy/nersc-spin-runbook.md](deploy/nersc-spin-runbook.md) - HPC token and service-account auth: [deploy/hpc-api-token-authentication.md](deploy/hpc-api-token-authentication.md) +- Read-only database access: [deploy/read-only-database-access.md](deploy/read-only-database-access.md) diff --git a/docs/deploy/README.md b/docs/deploy/README.md index 049a953e..7b706154 100644 --- a/docs/deploy/README.md +++ b/docs/deploy/README.md @@ -5,9 +5,11 @@ Recommended reading order: 1. [Deployment and Release Guide](deployment-and-release.md) 2. [NERSC Spin Runbook](nersc-spin-runbook.md) 3. [HPC API Token Authentication](hpc-api-token-authentication.md) +4. [Read-Only Database Access](read-only-database-access.md) | Document | Purpose | | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | [Deployment and Release Guide](deployment-and-release.md) | CI/CD, image tagging, release rollout, migrations, rollback, and deployment troubleshooting. | | [NERSC Spin Runbook](nersc-spin-runbook.md) | NERSC Spin and Rancher operational setup, workload configuration, secrets, ingress, and service management. | | [HPC API Token Authentication](hpc-api-token-authentication.md) | Token-based authentication for automated HPC ingestion jobs. | +| [Read-Only Database Access](read-only-database-access.md) | SSH-tunneled PostgreSQL access for the `simboard_readonly` account. | diff --git a/docs/deploy/read-only-database-access.md b/docs/deploy/read-only-database-access.md new file mode 100644 index 00000000..9b90eb84 --- /dev/null +++ b/docs/deploy/read-only-database-access.md @@ -0,0 +1,105 @@ +# Read-Only Database Access + +Use this guide to connect to the SimBoard development PostgreSQL database with +the `simboard_readonly` account. The account is intended for inspecting data; +it must not be used by the application, migrations, or ingestion jobs. + +## Prerequisites + +- Authorization to use the `simboard_readonly` account and its password. +- SSH access to Perlmutter with your own NERSC account. +- A PostgreSQL client. Any client that can connect to PostgreSQL over a local + TCP port will work. + +The database endpoint is internal to NERSC Spin. Reach it through Perlmutter; +do not attempt to expose the database service publicly. + +## Connection details + +| Setting | Value | +| --- | --- | +| Database | `simboard` | +| Database user | `simboard_readonly` | +| Internal database host | `db-loadbalancer.simboard.development.svc.spin.nersc.org` | +| Internal database port | `5432` | +| SSH host | `perlmutter-p1.nersc.gov` | +| SSH port | `22` | + +Use the password provided through an approved private channel. Do not store it +in this repository, a shared document, or a connection profile that is not +protected by your operating-system account. + +## Option 1: Create an SSH tunnel (works with any client) + +On your workstation, leave this command running while you use your database +client. Replace `YOUR_NERSC_USERNAME` with your NERSC login name. + +```bash +ssh -N -L 15432:db-loadbalancer.simboard.development.svc.spin.nersc.org:5432 \ + YOUR_NERSC_USERNAME@perlmutter-p1.nersc.gov +``` + +Then configure the database client to connect to: + +| Client setting | Value | +| --- | --- | +| Host | `127.0.0.1` | +| Port | `15432` | +| Database | `simboard` | +| Username | `simboard_readonly` | +| Password | Password supplied for this account | + +Keep the SSH session open for the entire database session. To stop access, +close the SSH session. + +For example, after opening the tunnel, `psql` can connect with: + +```bash +psql -h 127.0.0.1 -p 15432 -U simboard_readonly -d simboard +``` + +`psql` will prompt for the database password. + +## Option 2: Use your client’s SSH tunnel feature + +Many database clients can create the same tunnel themselves. Configure the +PostgreSQL connection using the **internal database host** and port from the +table above, then enable the client’s SSH tunnel/proxy option with: + +| SSH setting | Value | +| --- | --- | +| SSH host | `perlmutter-p1.nersc.gov` | +| SSH port | `22` | +| SSH username | Your NERSC username | +| Authentication | Your normal approved NERSC SSH method | + +Set the database username to `simboard_readonly` and enter the separately +provided database password. The screenshots shared with this guide show these +same two groups of settings in DBeaver, but the values apply to any client with +SSH tunneling support. + +## Verify the connection + +Run the following query after connecting: + +```sql +SELECT current_user, current_database(); +``` + +It should return `simboard_readonly` and `simboard`. Reads, such as `SELECT` +queries, should succeed for granted tables. Commands that change data or +schema, such as `INSERT`, `UPDATE`, `DELETE`, `CREATE`, or `ALTER`, should be +denied. + +## Troubleshooting + +- **SSH authentication fails:** confirm that you can SSH to Perlmutter with + the same NERSC account before configuring the database client. +- **Connection refused on `127.0.0.1:15432`:** confirm the SSH tunnel is still + running and that no other local program is using port `15432`. +- **Database authentication fails:** verify that the database username is + exactly `simboard_readonly` and obtain a fresh password from the account + administrator if necessary. +- **Database host cannot be resolved locally:** this is expected. The internal + hostname is resolved from Perlmutter through the SSH tunnel, not from your + workstation. diff --git a/mkdocs.yml b/mkdocs.yml index 336acadb..24ba53a0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -31,3 +31,4 @@ nav: - Deployment and Release: deploy/deployment-and-release.md - NERSC Spin Runbook: deploy/nersc-spin-runbook.md - HPC API Token Authentication: deploy/hpc-api-token-authentication.md + - Read-Only Database Access: deploy/read-only-database-access.md From 67a165fa207a2a760b8540f0bbee07719813ce48 Mon Sep 17 00:00:00 2001 From: Vo Date: Thu, 27 Aug 2026 13:18:52 -0700 Subject: [PATCH 20/21] docs: add database operations query examples --- docs/deploy/read-only-database-access.md | 121 +++++++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/docs/deploy/read-only-database-access.md b/docs/deploy/read-only-database-access.md index 9b90eb84..9d9bf9c2 100644 --- a/docs/deploy/read-only-database-access.md +++ b/docs/deploy/read-only-database-access.md @@ -91,6 +91,127 @@ queries, should succeed for granted tables. Commands that change data or schema, such as `INSERT`, `UPDATE`, `DELETE`, `CREATE`, or `ALTER`, should be denied. +## Getting started: ingestion and operations queries + +The `ingestions` table is the audit record for each upload or HPC-path +ingestion. Join it to `machines` to see where the data came from, and to +`executions` and `cases` to inspect the records it created. The queries below +are read-only and use date filters or `LIMIT` to keep exploratory queries +small. + +### Recent ingestion activity + +Use this first to see the most recent ingestion attempts and their outcomes. + +```sql +SELECT + i.created_at, + m.name AS machine, + i.source_type, + i.status, + i.created_count, + i.duplicate_count, + i.error_count, + i.source_reference +FROM ingestions AS i +JOIN machines AS m ON m.id = i.machine_id +ORDER BY i.created_at DESC +LIMIT 25; +``` + +`success`, `partial`, and `failed` are the ingestion status values. A +non-zero `error_count` or a `partial`/`failed` status is worth investigating. + +### Recent incomplete or failed ingestions + +This narrows the audit trail to outcomes that may need attention. + +```sql +SELECT + i.created_at, + m.name AS machine, + i.status, + i.error_count, + i.created_count, + i.duplicate_count, + i.source_type, + i.source_reference +FROM ingestions AS i +JOIN machines AS m ON m.id = i.machine_id +WHERE i.status IN ('partial', 'failed') + OR i.error_count > 0 +ORDER BY i.created_at DESC +LIMIT 50; +``` + +### Daily ingestion volume by machine + +Use this operational summary to look for gaps, spikes, or a rise in errors. + +```sql +SELECT + date_trunc('day', i.created_at) AS day, + m.name AS machine, + COUNT(*) AS ingestion_count, + SUM(i.created_count) AS executions_created, + SUM(i.duplicate_count) AS duplicates, + SUM(i.error_count) AS errors +FROM ingestions AS i +JOIN machines AS m ON m.id = i.machine_id +WHERE i.created_at >= CURRENT_TIMESTAMP - INTERVAL '14 days' +GROUP BY day, m.name +ORDER BY day DESC, m.name; +``` + +Change the interval to suit the investigation. For example, use `7 days` for +a shorter operational view. + +### Executions created by recent ingestions + +This joins ingestion audit records to their resulting execution and case +records. It is useful when an ingestion count looks unexpected. + +```sql +SELECT + i.created_at AS ingested_at, + m.name AS machine, + i.status AS ingestion_status, + c.name AS case_name, + e.execution_id, + e.status AS execution_status, + e.compset, + e.grid_name +FROM ingestions AS i +JOIN machines AS m ON m.id = i.machine_id +JOIN executions AS e ON e.ingestion_id = i.id +JOIN cases AS c ON c.id = e.case_id +ORDER BY i.created_at DESC, c.name, e.execution_id +LIMIT 100; +``` + +To investigate one ingestion, add `WHERE i.id = 'INGESTION_UUID'` before the +`ORDER BY` clause, replacing `INGESTION_UUID` with the identifier shown by +your client. + +### Current execution status overview + +This gives a compact view of the catalog's execution states by machine. + +```sql +SELECT + m.name AS machine, + e.status AS execution_status, + COUNT(*) AS execution_count +FROM executions AS e +JOIN cases AS c ON c.id = e.case_id +JOIN machines AS m ON m.id = c.machine_id +GROUP BY m.name, e.status +ORDER BY m.name, e.status; +``` + +Execution statuses include `created`, `queued`, `running`, `failed`, and +`completed`; `unknown` is used when no more specific state is available. + ## Troubleshooting - **SSH authentication fails:** confirm that you can SSH to Perlmutter with From 36a61f8467ea62f4104bbc3751aacf46339a2e72 Mon Sep 17 00:00:00 2001 From: Anthony Bartoletti Date: Wed, 2 Sep 2026 13:52:54 -0500 Subject: [PATCH 21/21] improve logfile naming to add run_mode and site --- backend/app/scripts/ingestion/sites/chrysalis.config | 8 +++++--- .../scripts/ingestion/sites/site_ingestion_launcher.sh | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/backend/app/scripts/ingestion/sites/chrysalis.config b/backend/app/scripts/ingestion/sites/chrysalis.config index 5548bf2b..1c5f0b14 100644 --- a/backend/app/scripts/ingestion/sites/chrysalis.config +++ b/backend/app/scripts/ingestion/sites/chrysalis.config @@ -1,11 +1,13 @@ -export SIMBOARD_WORKDIR="/lcrc/group/e3sm2/simboard/operations" -export SIMBOARD_MODULES="/lcrc/group/e3sm2/simboard/repository/simboard/backend" +# export SIMBOARD_WORKDIR="/lcrc/group/e3sm2/simboard/operations" +# export SIMBOARD_MODULES="/lcrc/group/e3sm2/simboard/repository/simboard/backend" export SIMBOARD_ENV_FILE="${HOME}/envs/test_simboard/bin/activate" export SIMBOARD_API_TOKEN_FILE="${SIMBOARD_WORKDIR}/.api_token_export" export SIMBOARD_INGESTOR_MODULE="app.scripts.ingestion.hpc_upload_archive_ingestor" export SIMBOARD_API_BASE_URL="${SIMBOARD_API_BASE_URL:-https://simboard-dev-api.e3sm.org}" export SIMBOARD_DEFAULT_ARCHIVE_YEAR_START="${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START:-2025-01}" -export DRY_RUN="${DRY_RUN:-true}" +# export DRY_RUN="${DRY_RUN:-true}" +export DRY_RUN="false" +# export MAX_CASES_PER_RUN= export PERF_ARCHIVE_ROOT="${PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/performance_archive}" export OLD_PERF_ARCHIVE_ROOT="${OLD_PERF_ARCHIVE_ROOT:-/lcrc/group/e3sm/PERF_Chrysalis/OLD_PERF}" export MACHINE_NAME="${MACHINE_NAME:-chrysalis}" diff --git a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh index be9fb341..2ee9b8bb 100755 --- a/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh +++ b/backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh @@ -19,6 +19,9 @@ if [[ ! -r "${site_config}" ]]; then exit 1 fi +echo "" >> TMPLOG 2>&1 +echo "DEBUG: TOPSIDE: site_config = ${site_config}" >> TMPLOG 2>&1 + # These can be standardized, or overridden by specifiying in the site_config file. export SIMBOARD_WORKDIR="${SIMBOARD_ROOT}/operations" export SIMBOARD_MODULES="${SIMBOARD_ROOT}/repository/simboard/backend" @@ -48,7 +51,7 @@ echo "SIMBOARD_API_BASE_URL=${SIMBOARD_API_BASE_URL}" >> TMPLOG 2>&1 echo "SIMBOARD_DEFAULT_ARCHIVE_YEAR_START=${SIMBOARD_DEFAULT_ARCHIVE_YEAR_START}" >> TMPLOG 2>&1 # Optional max cases per run, default is no limit. -export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-1}" +export MAX_CASES_PER_RUN="${MAX_CASES_PER_RUN:-}" # Dry runs default to read-only remote-state validation. Set # DRY_RUN_USE_REMOTE_STATE=false for credential-free offline scanning. @@ -99,7 +102,7 @@ echo "DEBUG_pre-activate: SIMBOARD_API_BASE_URL = ${SIMBOARD_API_BASE_URL}" >> T printf 'DEBUG: ARCHIVE_YEAR_START=%q\n' "${ARCHIVE_YEAR_START-}" >> TMPLOG 2>&1 ts=`date -u +%Y%m%d_%H%M%S` -LOG_FILE="$SIMBOARD_WORKDIR/SBCS-$ts.log" +LOG_FILE="$SIMBOARD_WORKDIR/SBCS-${scan_mode}-${site}-$ts.log" echo "DEBUG: LOG_FILE = ${LOG_FILE}" >> TMPLOG 2>&1 echo "DEBUG_post-activate: SIMBOARD_INGESTOR_MODULE = ${SIMBOARD_INGESTOR_MODULE}" >> ${LOG_FILE} 2>&1