From de8843471b48509a8adf8256b2567acc3690658f Mon Sep 17 00:00:00 2001 From: Zane Walker Date: Mon, 5 Oct 2026 19:17:27 +0530 Subject: [PATCH] feat: support user preview configuration and document UI --- CHANGELOG.md | 6 ++ Makefile | 14 ++- README.md | 155 +++++++++++++++++++------------ crates/latchd-core/src/config.rs | 15 ++- docs/e2e-testing.md | 2 + docs/images/latchd-help.png | Bin 0 -> 87399 bytes docs/images/latchd-preview.png | Bin 0 -> 42555 bytes docs/ui.md | 39 ++++++++ rust/main.rs | 51 ++++++---- scripts/test-cli.sh | 8 ++ 10 files changed, 210 insertions(+), 80 deletions(-) create mode 100644 docs/images/latchd-help.png create mode 100644 docs/images/latchd-preview.png create mode 100644 docs/ui.md diff --git a/CHANGELOG.md b/CHANGELOG.md index b5e21c0..85ecad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +- Preview mode now loads `$XDG_CONFIG_HOME/latchd/config.toml` or + `~/.config/latchd/config.toml` when no `--config` path is set. +- Added `make install-user` to create a user configuration without replacing + an existing file. +- Added Docker PTY screenshots and a short UI guide. + - Fixed Wayland compositors launched through user services, including Niri, by providing the selected session type, desktop, seat, and VT to PAM before `pam_open_session`. diff --git a/Makefile b/Makefile index d19bc02..9e063e7 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,8 @@ PREFIX ?= /usr DESTDIR ?= BINDIR := $(DESTDIR)$(PREFIX)/bin CONFDIR := $(DESTDIR)/etc/$(PROJECT) +USER_CONFIG_HOME ?= $(if $(XDG_CONFIG_HOME),$(XDG_CONFIG_HOME),$(HOME)/.config) +USER_CONFDIR := $(USER_CONFIG_HOME)/$(PROJECT) SYSTEMD_DIR := $(DESTDIR)/usr/lib/systemd/system BUILD_DIR ?= build DIST_DIR ?= dist @@ -49,7 +51,7 @@ endif .PHONY: all deps build release-build test check fmt lint doc audit docker-test \ integration-test pam-fixture-test system-e2e system-e2e-strict \ - package release release-check version install uninstall clean run-preview \ + package release release-check version install install-user uninstall clean run-preview \ legacy-build legacy-check enable update help all: release-build ## Build the optimized release binary @@ -147,6 +149,16 @@ install: build ## Install the binary, config, PAM policy, and systemd unit @install -Dm644 extra/latchd.service '$(SYSTEMD_DIR)/$(PROJECT).service' @install -d '$(CONFDIR)/wms' '$(CONFDIR)/wayland' +install-user: ## Copy the example config to the current user's config directory + @test -n '$(USER_CONFIG_HOME)' || { echo 'HOME or XDG_CONFIG_HOME is required'; exit 1; } + @install -d -m700 '$(USER_CONFDIR)' + @if [ -e '$(USER_CONFDIR)/config.toml' ]; then \ + printf 'configuration at %s was preserved\n' '$(USER_CONFDIR)/config.toml'; \ + else \ + install -m600 extra/config.toml '$(USER_CONFDIR)/config.toml'; \ + printf 'created %s\n' '$(USER_CONFDIR)/config.toml'; \ + fi + uninstall: ## Remove files installed by make install @rm -f '$(BINDIR)/$(BINARY)' '$(DESTDIR)/etc/pam.d/$(PROJECT)' '$(SYSTEMD_DIR)/$(PROJECT).service' @printf '$(YELLOW)configuration at %s was preserved; remove it manually if no longer needed$(RESET)\n' '$(CONFDIR)' diff --git a/README.md b/README.md index b2fa04d..481a6e6 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,50 @@ # latchd -Want a TUI-based login manager because you are tired of GDM or Plasma Login? Latchd gives you a small, keyboard-first login screen on a Linux virtual terminal. It uses PAM for authentication and can start a TTY shell, an X11 desktop, or a Wayland desktop. +Want a TUI-based login manager because you are tired of GDM or Plasma Login? Latchd puts a small, keyboard-driven login screen on a Linux virtual terminal. It uses PAM for authentication and can start a TTY shell, an X11 desktop, or a Wayland desktop. -Latchd is written in Rust. The old Go prototype is kept in `legacy/go/` for reference and is not built or shipped. +Latchd is written in Rust. The old Go prototype remains in `legacy/go/` for reference. It is not part of the release build. -## What it does +![Latchd login screen](docs/images/latchd-preview.png) -- Finds normal login accounts through NSS. -- Shows password, account-expiry, locked-account, and faillock status without replacing PAM's decision. -- Runs PAM password changes for accounts that require a new password before login. -- Lets you switch users and sessions without leaving the login screen. -- Remembers each account's last successful session choice in a root-owned state file. -- Finds X11 and Wayland desktop entries and can include a TTY shell. -- Starts sessions with a cleared, explicit environment and drops privileges before running the user process. -- Registers the selected desktop, session type, seat, and VT with PAM/logind, - then imports only approved PAM runtime values into the user session. -- Records user sessions with UTMPX when the platform provides it. -- Provides a Ratatui TUI with filtering, keyboard help, refresh, notifications, wallpaper, and reduced-motion support. -- Runs safely in preview mode for UI work and configuration checks. +The image above is the preview screen. It was captured from the Docker test image. See [`docs/ui.md`](docs/ui.md) for the keyboard reference and the second screenshot. -The real login handoff still needs a Linux system with PAM, a virtual terminal, and the display/session services you want to use. The Docker tests cover builds, unit tests, rendering, configuration, and capability probes; they do not pretend to be a real VT or systemd-logind session. +## Features -## Build +- Discovers normal login accounts through NSS. +- Shows account expiry, locked-account, and faillock status before login. +- Lets PAM handle authentication and password changes. +- Switches between users and sessions from the same screen. +- Finds X11 and Wayland desktop entries from configured directories. +- Can offer a TTY shell as a session choice. +- Starts the selected session with a restricted environment and the correct user ID. +- Passes the selected session, seat, and virtual terminal to PAM and logind. +- Imports approved values from PAM into the session environment. +- Writes UTMPX records when the platform supports them. +- Provides filtering, keyboard help, refresh, notifications, wallpaper, and reduced-motion controls. +- Has a preview mode for UI work and configuration checks. -On Debian or Ubuntu, install the build dependencies first: +The service needs Linux PAM and a virtual terminal. X11 and Wayland sessions also need their own display server, compositor, and desktop files. Docker covers the parts that do not require those host services. The remaining checks must run on a prepared machine or VM. + +## Requirements + +Builds use Rust 1.88 and the system PAM development files. On Debian or Ubuntu: ```sh sudo apt-get install build-essential pkg-config libpam0g-dev libpam-modules ``` -Then run: +The repository includes the required `rustfmt` and `clippy` components in `rust-toolchain.toml`. + +## Build and run + +Run the local verification gate and build the release binary: ```sh make check -make docker-test -make integration-test +make build ``` -`make build` writes the optimized binary to `build/latchd`. `make package` creates a deterministic archive and SHA-256 file in `dist/`. - -## Try the UI - -Preview mode does not call PAM, start a session, or run power actions: +The binary is written to `build/latchd`. To open the non-authenticating preview: ```sh make run-preview @@ -49,11 +52,41 @@ make run-preview ./build/latchd --preview --no-log ``` -Use `LATCHD_ASCII=1` for terminals without reliable Unicode support, `NO_COLOR=1` for monochrome output, and `LATCHD_HIGH_CONTRAST=1` for a stronger focus palette. +Preview mode does not contact PAM, start a user session, or run power actions. It is safe to use while changing the layout or configuration. + +For terminals with limited character support, set `LATCHD_ASCII=1`. Set `NO_COLOR=1` for plain output. Set `LATCHD_HIGH_CONTRAST=1` for a stronger focus colour. + +## Configuration + +The example file is [`extra/config.toml`](extra/config.toml). Latchd uses separate paths for a system service and a local preview: + +- A root service reads `/etc/latchd/config.toml`. +- Preview mode first checks `$XDG_CONFIG_HOME/latchd/config.toml`. +- If `XDG_CONFIG_HOME` is not set, preview mode checks `~/.config/latchd/config.toml`. +- `--config PATH` selects a file explicitly and takes precedence over the defaults. + +Create the user file from the example: + +```sh +make install-user +./build/latchd --preview --no-log +``` + +`make install-user` creates `~/.config/latchd/` with mode `700` and creates `config.toml` with mode `600`. It does not replace an existing file. Set `USER_CONFIG_HOME=/path` or `XDG_CONFIG_HOME=/path` when the file must be stored elsewhere. + +The main sections in the example are: + +- `[accounts]` for NSS discovery, faillock, and account-age checks. +- `[x11]` and `[wayland]` for desktop-entry and administrator script directories. +- `[environment_switcher]` for session choices and the last-session preference file. +- `[visual]` for wallpaper, animation, notification, and reduced-motion settings. +- `[power_controls]` for confirmed power commands. Latchd starts these programs directly; it does not use a shell. + +Keep the system file owned by root and unwritable by group or other users. Do not put passwords or other secrets in command-line arguments. ## Install on a test machine -Do this on a disposable machine first. Keep another login path available while changing a display manager. +Use a disposable machine first. Keep another login path available while changing the display manager. ```sh sudo make install @@ -67,83 +100,83 @@ This installs: - `/etc/pam.d/latchd` - `/usr/lib/systemd/system/latchd.service` -The default service owns `/dev/tty2`. Change the `tty` setting and the unit's `TTYPath` together when using another virtual terminal. +The supplied service uses `/dev/tty2`. If you choose another VT, change both the `tty` value in the config and `TTYPath` in the systemd unit. Stop or disable the existing display manager before enabling latchd on the same terminal. -## Configuration - -The complete example is in [`extra/config.toml`](extra/config.toml). Important sections are: - -- `[accounts]` controls NSS discovery, the faillock helper, faillock policy, and `/etc/shadow` account-age checks. -- `[x11]` and `[wayland]` select desktop-entry and administrator script directories. -- `[environment_switcher]` controls session choices, the optional TTY shell, - and the owner-checked last-session preference file. -- `[visual]` controls wallpaper size, animation, notifications, and reduced motion. -- `[power_controls]` contains absolute program paths and argv arrays. Commands are never passed through a shell. - -Configuration files used by a real root service must be root-owned and not writable by group or other users. Use a variables file for deployment-specific values instead of putting secrets in command arguments. - -## Controls +## Keyboard controls | Key | Action | | --- | --- | | Tab / Shift-Tab | Move focus | | Up / Down | Move focus or move in a filtered list | | Left / Right | Change the selected session | -| `/` | Filter sessions or discovered accounts | +| `/` | Filter sessions or accounts | | Ctrl-R | Refresh account and session discovery | | Ctrl-N / Ctrl-P | Select the next or previous account | | Ctrl-B | Toggle wallpaper and ambient effects | | Ctrl-M | Toggle reduced motion | -| Enter | Authenticate, or submit a PAM password change when requested | +| Enter | Authenticate or submit a PAM password change | | Esc | Clear the password or close a popup | | `?` | Show keyboard help | | Ctrl-C | Restore the terminal and quit | | F1–F12 | Confirm a configured power action | -The filter is smart-case: lowercase searches ignore case; a search containing uppercase characters is case-sensitive. The account-age and faillock messages are advisory. PAM remains the only authorization decision. +Lowercase filters ignore case. A filter with an uppercase letter is case-sensitive. The status line can show account and faillock information before login. -## Testing a deployment +## Testing -The ordinary tests do not need a privileged container: +Run the local checks with these commands: ```sh make check -make audit -make docker-test make integration-test -make pam-fixture-test # runs when root is available; otherwise reports SKIP +make docker-test make system-e2e ``` -`make system-e2e` reports real host capabilities as `PASS`, `SKIP`, or `FAIL`. It does not call an account password or claim that a pseudo-terminal is a virtual terminal. `make system-e2e-strict` is for a prepared disposable VM with a test PAM policy, a real VT, systemd-logind, and the X11 or Wayland stack under test. See [`docs/e2e-testing.md`](docs/e2e-testing.md). +Run `make audit` after you install `cargo-audit`. Run `make pam-fixture-test` as root. The PAM fixture command creates temporary policies and removes them when it exits. + +`make system-e2e` checks the PAM library, faillock, virtual terminal, X11, Wayland, and systemd-logind on the current host. It prints `PASS`, `SKIP`, or `FAIL`. A pseudo-terminal does not provide a virtual terminal. The check does not install a PAM policy or start systemd-logind. + +Run the strict check in a disposable VM with a test PAM policy, a real VT, systemd-logind, and the X11 or Wayland stack you want to test: + +```sh +make system-e2e-strict +``` + +See [`docs/e2e-testing.md`](docs/e2e-testing.md) for the test limits and VM setup. ## Security notes - PAM handles stay on one worker thread. -- Password buffers are zeroized and never placed in argv, logs, or the TUI. -- Security audit events contain only the account name and stable outcome/reason - fields; PAM's free-form error text and password material are not logged. +- Password buffers are zeroized. Passwords are not written to argv, logs, or the TUI. +- Audit records contain the account and a stable result code. They do not contain PAM's free-form error text or password data. - Session environments are rebuilt from an allowlist. -- Desktop files, scripts, binaries, homes, logs, and configuration sources are checked before use. +- Latchd checks desktop files, scripts, binaries, home directories, logs, and configuration files before use. - Xauthority files and session logs use private permissions and cleanup guards. -- Power actions require confirmation and are disabled in preview mode. -- Account status and faillock output never bypass PAM or provide an administrator unlock shortcut. +- Power commands need confirmation and are disabled in preview mode. +- Account and faillock checks do not unlock accounts or bypass PAM. ## Project layout ```text -crates/latchd-core/ configuration, account discovery, sessions, UTMPX +crates/latchd-core/ configuration, account discovery, sessions, and UTMPX crates/latchd-auth/ PAM FFI, password changes, and the authentication worker crates/latchd-tui/ Ratatui state, rendering, filtering, and effects rust/main.rs command-line entry point and service orchestration extra/ example configuration, PAM policy, and systemd unit -scripts/ Docker and CLI/system capability tests +scripts/ Docker, CLI, PAM, and system capability tests legacy/go/ non-production Go reference ``` ## Releases -GitLab CI runs formatting, tests, Clippy, rustdoc, RustSec auditing, CLI integration tests, capability probes, and the Docker suite. SemVer tags produce a reproducible Linux archive with checksums. Live VT, PAM-policy, X11, Wayland, and logind validation belongs in the isolated VM gate described above. +GitLab CI runs formatting, tests, Clippy, rustdoc, RustSec checks, CLI tests, capability checks, and the Docker suite. A SemVer tag runs the package job and publishes a Linux archive with its SHA-256 file. The strict VT, PAM, X11, Wayland, and logind checks are separate because CI containers do not provide those host services. + +Create a local package with: + +```sh +make package +``` ## License diff --git a/crates/latchd-core/src/config.rs b/crates/latchd-core/src/config.rs index a59da33..5942e1b 100644 --- a/crates/latchd-core/src/config.rs +++ b/crates/latchd-core/src/config.rs @@ -1,6 +1,6 @@ use std::{ collections::HashMap, - fs, + env, fs, os::unix::fs::MetadataExt, path::{Path, PathBuf}, }; @@ -9,6 +9,19 @@ use serde::Deserialize; use crate::error::{Error, ResultExt}; +pub const SYSTEM_CONFIG_PATH: &str = "/etc/latchd/config.toml"; +const PROJECT_CONFIG_DIR: &str = "latchd"; +const CONFIG_FILE: &str = "config.toml"; + +/// Returns the current user's configuration path. +pub fn user_config_path() -> Option { + let base = env::var_os("XDG_CONFIG_HOME") + .map(PathBuf::from) + .filter(|path| path.is_absolute()) + .or_else(|| env::var_os("HOME").map(|home| PathBuf::from(home).join(".config")))?; + Some(base.join(PROJECT_CONFIG_DIR).join(CONFIG_FILE)) +} + #[derive(Debug, Clone, Deserialize)] #[serde(default, deny_unknown_fields)] pub struct Config { diff --git a/docs/e2e-testing.md b/docs/e2e-testing.md index cf2eb47..d66d8a4 100644 --- a/docs/e2e-testing.md +++ b/docs/e2e-testing.md @@ -31,6 +31,8 @@ make docker-test make system-e2e ``` +The preview interface is documented in [`ui.md`](ui.md). Its screenshots come from a Docker PTY and do not represent a host VT or compositor. + For a VM with a real seat, compositor, and logind: ```sh diff --git a/docs/images/latchd-help.png b/docs/images/latchd-help.png new file mode 100644 index 0000000000000000000000000000000000000000..ad592ce4bafcd10b3254fbda583112198dc9c6cb GIT binary patch literal 87399 zcmeFZcU)83+AhjkE)@$PBA`@3Q2_zzN>!u?Nbg;`bm^VA6hwLl=}PZN4IKpOO==*a z34|7s&=N|3oEdPf?YiII-`?w<^Zm~KlF_SsRoTI>5z%XZBBBG}r`Ib)M6M5rh}K>Z z5ea=DBBFkkQl}yU{Bh1iUPcmsa$L~fodSM2?;@)pb$;#QS(59Q1Fnc-fuC4hq_kbk zj9tuyOr6YuFCv}?JOUit4>%t1t8?=T@$d<8^RPd7AoSpY{B5K7zuaKwU}k0E`LAyf z@?2&EZn*d76I`t9%$;3~?Oy%sd+cmGFhG%rWF?=ddqCHx-Ss1I_`OYt-qS3}^9tn= z9A@U`(mg$)q3@z3u`~X*-{-E=XTBF=p6oHyxp6@@?^>?000^Wn*6gr6vg(uP64ZGV zVGluK{2EIj+g^qcjF^^Z8X{X+3o^{Za}{{IKaWUR^4c?ho&kxyNtKpge){1i@5P5d zof4Tz|8oAP^Vfa%=6*UQio9`_?&ou!%-26>|JdT%tDpbw3jLMz=kvt>`wxE&y3(+1 zJq8PukU-5wypQxNdH8+PYUGWBDEdjRsluBA-FLe$ZS0OYuw3-*{=I6M7GVRWzH;8| z9}efdvBjl^wWCD_dbI;-+faxv8e4YVj&i~jJVhS#>v4EA0{6hZX>j}ONts`BeY)>X zNbNCTHY==6QTZ!|S*}qpaJ;uJOXtR^vUA8q#0hf}o#n{Z3U-s*L+nB9HwDGS@Y;uO zlTR~b)1M8TUEU`Q6(XXRgpVhcjlbD(*K51Cu~mkcX@*mQA&yS3;K^!8Hk|a*5@P+u_>nscO*Lg%ntg3r$+XdRwgKy?H?-byRE>T>cxM9x)vbEo0jxeV^ z?tF7rQ0fD-)8}S`#f`Ax-f>up(`B7x z?N6A0M04F`*C_~rL1}oa8VX%nuzAj%R;INd)WgMwtcZwnqI`giMeMUM-Pq-2=K0n1 z%`oQ}P1)F_M~V)40<(OG$CBtazR9D%nd@nVa@o#!f% z6C+Ku1lfKaO&O3MH_b;+&pBltJ%URL4R6fRQ zTfsEFwS5C|lQ=vM-2XLfM6s{BZ#9_h!ylc;A@J95{F8<99N%sTGE8XIRgA+9RIeh= z=0rT_trNGFRw%XMYr8bYKP*`Ip zf(;2nF)J^}A7!B1f3dNpz{fuoMHu*&LaP~}knfGK&iziyxbmHqSG5{@8QIREx%Jvy zt9tIQD~hq755hq>%cTZ0F|M9i4!x`?dT?2<-S{EH+AA1liM%uOsrva?!$(%#DFN^; zKYb&1peLl=0(!zTpN0l8l+eoh$_J6GZX!w;xUB=Hg%O2QJanx>a9Y+I$GsB{yv_>mw@f^dhW6BWUO!W|)Iwo}7CMF>7va!g^QasJk zL_4+|m>J!gO%M~98CwoXG?6<5U&mxJ2NE?|p53?G&K$sG&Nmy?RK1}%uU1~AxxgeBl)=@0i5%`>yFeb(79Td1l*cy$)f$ptzh)Jux}c`iaJ4L+`)-zK zmTMpD7yN*DPaiO5)k?xf9xT=5Dz z2fE?Mr>iNe;u+h81r>;22RVT9X3|w~{8+y$Azwwywi7)H$eDC+RM(D-52;sWdm_M{ zQXd~4)`FY^S^l(PrpH$giL%OOB@VIsyb=r5xU`y-Ri9Hzq|~r+0!f}cO#Zu0%S5m0=eE-i5l5J+S=xXA zmw2*R7;S^)tJiVOpJtb@CR)y0wZBj0=YoV62-htHbCSkC^~LQIqX#p$w(Qg%EMGcV zRETCt&(h)BGCj#m8T;hI}UOQh`%uW0s9w;G&8Zqmb17alJCgIpq7&TTXT(&y79PEu@ zkBnpMG zH0gD0hIX~-oJnco z6zgdZS(rFKEjRD>O*>L%HOTD2C-$BRoItCa1wfFMCC7+zxf6+dFQF)Lu?-E>;n8%X7rP4V^Gt!7S9Fu8;uC2`*kmkauM7gAq0sC#{0p;4d<70-oSQM#NKmU&TIXSEUJvN6}qg#$oCG;hf zXsHoGnrR%dx_D#kP?4fAGWylxFSu?Y{!ZWQv~$%e6sYdEQ= zaj75Mojo%m%~ARx4hFMLh_K8xC6_tJ0KMaX#Uxpqwd2w!C;2hGs-*W65{r9eWjAbw z?*jMY*nHJ_s3lSkn(JZ#d5R*$Xr%>9 zrYoE59SqJliUod6pMRXjlRov(Q9h$uF&M=&9Rv)m!;0`>oxJ+z?imwz{D}v=1)SXV zJ$I|L9KOix`St{&!?=#ad+NE;<%N3dC@}&E`Ps`L?}T^ul#THR3emCAbXUcRnf%|! zL!0pqw5OfRM_6j{#M+*%f3KlbAm*o8TH{#z&XJ^#R>46;dbik5=M4Q=V!?7qfd%r$ z0!1S{z&-bifrWN;G4=S(Pv7~^2)7~O5jsdj{%rlb?x;I#{Z+@lB{HI|Zy8BZKGUjI zIOj}9$~N|dge5l2#~lGAO2?alSJ=eqr6Sr0Cr+H4 zWD^`gSH|u1O7bA4!gH`iD%Y9&3C`=pCK)^C+RoyHW!HK!AV+eWy^AY_A`o@m-r?(S zrD;MHVdXEEZ=xML)M&kuioTVNyM9BAv`m?KQBY^nQ^v7Xg&NVIsdtwg9=VWQUu^DY zYmm{i*+v<786a>ypP%gKQwj+BLVP?zTra)j$p4&?IHPyOa}MOqE{);=`SnglKhe?+ z6D%C@Qv+KyM&quSIZG!CvAu^q(x`BDbkqD=9BV6AuA|OK)1nQl-)ipYv3zGa zf6pCx4%PIA!MI(Zo$!COlc*`KZykMWnqCKeE#F`*##J5FWOs4v53?KgorD0L_85O% zC#Bg>8sFv@n|@&5-xDSbrs6nO_WgJu6{zyodl&8KdraxLnltKb9+-VZ<(sl^;#bv9 zmE2?3T(K-2tSPsx#Cm+!S8!cRtooqqG2YJ0lEnXeZpxBw6JW!g4WpjcANO?)^rbum z2@6TAeo~DbKIC;!)DUXw)p$thx)bAdAdRM7vCGK+rq1qZ<`b5GzzaF%*-v0Fm+N%( zjUz|Y)J~qmRO$L@o-EV9c=orT)Ri!Hy}i`Muj)+>rWU0bP_)Cb!vneYlg;C}c~q5U zU7CvsLzbSd(Mm5C|J8xd5K(1aZoA=+FU&grS@HJ=Izd zMw`QWG?pR~E{-T|%-=?zWzW)^*gU1b|t!vI&d*1KI^rot|d9-Gl1)C0q z+0acsC4-ieHCejdkCzimGVe?e=Vu~H1i39NcKj211!zk3n#H;-1^JwKZK`X=$gx6U@~zsCbG~cmvH`dS9k8q#S!6^cAIZLQ!H4n4sAG^dyj6 z;_K!~34^PE9h+-OWw9GB!En$> zG(yLsHm_BG%-Qfsx}tE`f63r9KccSCAFuP{{QoXdfTf^(^-_Pll54-NQRQyqKyEhD zLGYrd%+gQXhImAJ-fL6asjrdwV+jn}u1<|nl}AWvCUh5pNBVKhEfYZc+2x^zz%nw6 z><(a=^A~5^et`XQpUMA?O zA%|E^k`xOLp=;t+-hCbyVo*ZTWV2rb4_aG3XC(T-q_AT1A@3=CuRYV>cw)m&Ive8Z z(9>d6nZ>_)ug42B10^74`Wj5ZkS@US;gzTLXwlH5cpNla%t?ko6A+GjMX_+wIeDEV zH={AHxT#`)D!1vtqSL1^d%dZxVgWQno}Xt~Q)j2Q{I#I$ru8P1cLj8uqx^CP>$n{&Sl0B(5sk}$DU?RM5KJ>qQWnMR+*Yw(AY~U*I!M7@MR@35~S^y znEdY@s5V?tS@we*7yAWJn={1nvhC`sQ%O`t3eQY={6EQ#KXL@VA3wRrC!g0a98pX) zQZ-*A7r~a05U&Q9eanbqK|#nyUPI615u==-ZRYwY-I+5vsZOHJw{I`_NlQwuWhE<{(`RRxZ@*Q7T#@93icLJtgxU()d@ zmE9O9)No*oW*$t_0}8RIXqZOUjJ=>)enMG{uF@}iaJY>9g|@h{TMn@!0h(b(( zL(Dnx+V}Qa!DP|Bhh}L_2P@BITNENxz1RPl5YkTR#?6F0j6^#Zxo$*@EH% zGC8#Q?c47pb;s@`qiO=-E(+XEF4Y zv3SkZ{mw=ImVGEn(7vm#hdni+YQ-HhtMMm$7}QK-r#h|cJ%hup2f4tD*_lrw?g%5wC| z25`F8oc@|BuV(-id+ovV!nG_bLy z&sEKFfi`_+>8oWketupuibj|^Tfeeu@1b_|vVzalEs?$Nb48}Yle&GMtr6K3>@J=C zb7i?>N}5y>d=&Em9-JBekOG4QHxYZd@e<7bi(8qL?V*UAO_t`3;xlDb-0|FJN>>ea zJoDv~l-3eQDY(Uk=CePmAga2{6*|84+20t((@*enW!~;C=%$F7xubVG1W>m;~ z&|tEQ{`npx$qetqmY&&f=5#PR7HO^I7flKF!nv_cFpkFSfL&2NDL3%C-iv2#@z zF97-5p#IRN;tR!nph;i1!h1o104FSdCh^k4SYS@k*easZZL|psdMdrkI8=zO4?^?I z9`BmUZGZ#}b-wC$JX9brY1LWb_$FSqGx9kt+(w#oqXAXC2KJkfO{QwpXoXH2xd>{k zl}2ThJ+JTwKn}bkg$6qEeJbw`NZ3OGPSumkAnJXcmWo4@7=f?!7K9<^^UasWW*Qbo zS_X1CIQ|r^!4+P7swz^{ z?NvvQJ@RC01S)irCUWO*D&W`*de1F3x{Y8abB0hgV_ZrjJ zq{D~7MT3D?>%WpCQ!f{}W7&ninYA+r_MVMn?DySU{8AK(x>3ceNA~C?n#U(|=_Utb zapYmoVuIz{yV^kRM6=Becv7G;{M2Vve(7vZ_IBI6zRL=6De*U~V=azJ#f(_qh-y-z z=1ZKq-%?q5MdJP7SvuLUnCjcs3AXtfIitVlogJi-F&q>sFm_phDj*P80s?b>cF0QV zV-K+|z~qefR4!O856AyDE9|?xIQ_yAI+vxaeeYQPx8jvD&X*%E>PgxbQg)W#uZG-( zTdAX-b!O|SI8-$4;BOlCALRcRFpFCUhW0gk2Q-V`o!K$Jt=?E8DA4`92f5VzxD`=x zeB7)eHj|R5G&1Mi-}EA%(^fT@Xxcke7>K2%hD*`i@OYUF6vNIW`#P6@4~K@sm^HH^ zaTM8Ex>=9_p-O<`X7jZu;n!T0AU@PFJIV6Vg0vEJvS+MFv0mYv+dEh~eudI~wZL1ZBSY`}Hz1~vj?CowFuv=l)#gJ3Pi7WEa|L$zbUv9DBR)cMf3NM{ zxx*cPHavDA_Jab%AAalA@@@R@8o z0Ab$R^#q)6d*mre&bFp6qN<&RLLUr%zKk9khw6JBL|306gZ=JR`_4{=upS|{(^1Fq z44BLH3_aXwrp(`&!@P`1uF@FBr1ceJF{5aMw#8=@aZ9@U{E*#rlG7?9>f#DmBB7%V zgLoA~ON5?QHLm3+x-OGw>+2Ni5XyhB|Q1`kIRlZhVd#D+T z0cKJEu<@v4nW2Zl1ViPHY^G0eBtXgmUIQ70x@$iNOGAi=s zE~UIHB4($1)2=u53Xt11v0CqfMV)JejFmU`?103g{j*E~bLW7^+skNeiwzHv7!_QEL#C9#lN zk4EbP{X}DRj}wAbl%ls>M4vR?j~Z)Y445OK%ievdwBKG+?l7h~=60-Yi|%}) z4A^t@{tM;l8Mf($Y&R=C>x6?v-_a6XVH$hP>In_EUBp5>Ts_)^>tP%OKkD^mxG2FW zUMR4XMl}Wn+fVlGW=Dj9yTOE}`{QWY&Af8$Rjewz@24H@(r2?BzW|d$dW~h0?xy+L zMU2Xv^#?+)Sv_G^)({v)Boa zDtEgfU)RBQ)%sBx)VA^!z}q6&JVk3T-(I-PO_;=4W{=!5|9Au7d(ZFMn_o$TPSMl} z9+(pUJpT$#p#-CK9Y*-*qH4C-L?0gQ?j!;Xf2~LS`nF?>3M@L`bOD{~A_PG}8@~k&x3Ub+d{rRNdEY12BhaJR&;8&9lohfqFTsPdlr;OT z{F97b6ZWSKXd zI^(?0_n?x|V|w6VL;0f|fZD>=*v3@*8lh-EfG)k+`CC5DiU>QkI)XD%>AXyq_yvZ~ ztxzbB*S;t?@@(VzDuUnBH?X-crp~q(+8mgMDQVKOgOMQ-8#Bm-!-Wbt9WR%fDK?*> z;YS@K21N-w#lkI<1Q&EC&S{x}=wf(>xdJY_H2YUcD?QZvKa081s2nf+y1{yBNCK>Z z_H86RcH{Fw{N67mczM4O(~;-eVmAAs$h>mO+={ z7^~$kW`$WMLDSndRK-!c=9Q#hb-!wNTyDtmHiu_(T8ZUbsw#cmlMG2{l`e+d=@q!~ zl(*g-aCZ?8@ggS9FQAcRV>n*x=8hRMlc<`zZekQl{LGT2Xal$~!H+sRhooSllIy%Hd&)-we*S^1MSmcVOmwI}3u~t;Q$bMx zQY4d8ddQpZv)Cl0i!g57G5aPtAFgt_>;G8^kw%}m<{}$VCj>^DC0Wvpcw&6)QXCbF zyJT${C>R1Pd)~9_T23z(k5Ps}^~iuL3fm6&zvZODO?+4#qR31LBA;IouR`pMS3nTA zD)FTTx1>xHEiMEy-Rcc{#9x`)R;!{=9rx)4DDYY?QKU9WBWl2pw|?MsJqET3|O z8@9gluW9zW$Ru}+x4XpjwfhhXng@RJPZQuAcP$dpyH|DGww|ez>IS86GuXM?knRNY zjI@E?hN+OO=a53_D7S1Kv!0HZC3Yl^@v@uE=8l%sd;(~yi%h}CM2@hW~+y0edz^LZ`*i9G%Tcy;kR&RxFsUnM1E6oKSsxZwA0M=yM?>=k5lyN^Isbzm$q_eUf|* zW_O)oIZIsTxseE~lJgIb(O>;Hxg?pi5PMxCFu3HcVfxc~CC52NY-E{`scK#EmKuu; zd|yIp{jl8AS?~{jj8MIvlmxpH<0ac*G?i@i^iH3Xm3XV&OMiu}kvMVBFL+}!j^eN;BI&wo*RPt4O_p&$r938gAAl#7GPmW)mYEZQ)=(F-?&@f=N*2FGlTf**`}joy%<53BBg#SvR~ZJhxsTV z_G!}XuY)b%9jSUDRG>UD<)e(Yyf2No-5N1`aE%LZv-D4t>P@bIy1MxIs3`pro2-}j zNA8nf^U6jP3m4l6im8_>mRoOq%>w_hVPyZS4Z{l1fq#wzAaR)YZ=`K%d4)DsH*Rzb z;0cSwXkNafa;D~1qgml%eMVDWn$8ncC6LWWUP&{39;R+r1lI9E}b>$ndf_TRQ@j{Ix_tuH27Tddzfp zoA%-8ayz+wytVu?O(e9!+w*Qq=~=p7jV7h*D-;{v-&Z<}RTOF_u0 zHSix<8Q*pO3mPE$r%l^}|JGgId%3roiD?%tBWZSYBg@J2usG|6`O<*FXkniDP_gxp zlgxp0;;CbRUD3k_TKO1tLNEaDb+hy|+omoA3t`Uc%Y=zoQ+?ZiKly!$wxh~f)%n9v zmhN^O$6=>-D3|!83hMeF13DnCeCi|}@bq9UH0VZksf$URDN2r`j9FUp(x4FtRF^+9 zx9Mix2GYAj6;$i>lRLu4;|#$i6L~j%Dffe)oQhx3L5N&n5z>0Iy^eZ2X~r=eA_0j( z4+=I`Z$ank<0JIWt)=BVmGy2s&z^5B|dFb7itgsXG>VE%hV{>$T>}oA#c#xIb3%g;sJ@85vLteIII((~V2e z3hENdJkdVBXsJ{ySx)dbn;LxI75NA6uU10E7C)mK#|D=?0sEPPK~votx6{6FoK#{eu{5- z!cvMbZ1P^U7*|Twt&LmjjO#7eG{-WvlGRDEzAAk#QNRS2^wEk*iNu^+qhD$9=uHOmg|E zPmNNUsq51YQ<1K5T0&elLr03sP&>P9BsnYvQJ*C1>(rx{SZ*E?TfZRSR@8!{ztXi09Ela5^~clBsN2qx(9b@~w3)V-tKiRhq;TEJyAd75keMbd!|$zG ze5yt4@})ejE1v@gGC9>4R;QN{6YR+@YrNJ_Ag8Ka+el%hW0`>E;3$A4Gctm?m^%R%VLsZZu6 z$sIVTr|(ppSBCmWixxvB$+|01%qHlV3I#Gg#+l(~I(fwK!R4;r!BVpps@hTl?@hF) z`ZG!IRci{2_pQ@4M4Xic5aq^+6b5Lbbxr3ZhmK@+3XbgO>-)g?qq`Mzc-w~66LVV` z^NZIwR)W}oDLUzPm0Uwq4HpyV7p--Qr+BdqSG)(fCi3_Cck9)HWd+|di>qn@jYs)8 zq2cnIa@29i*yZzDj~1NEW3FW6?KMOOyH`wers-N3BKw8KNY;Iz^AaoO?Pnp|GH*0f znw(oV)xi{+GEYa?vO981dW5u4(g9Ypj6P_UeP(IV&>XGJVrYTx(Ji?^)M4VxB-p0V zUihjDerm=iZ&ZAWTO=m#;Ztu54*mG0G{q z$8C+P6Q$h^WOHS8dS+FmOi2L`2TV~PveU^}@@rzJ0V8WP*KMWeG%0H7l^=IzM=YgR zMbyF@aJ8(9vskNyhZ&7Azhegcq|PT5O)OZ{e%#8eB}*6i5H}>6>1KgoI*&AX=P*i_ z1<%BQ8*ke`doRCYwP0e<*;5gqiV*J;OB%Dvo#vjB0=42;!KvqKa}>(y$6D;yKK83H z0i?0eqWNgs@b39pZ!^9U)$N{S_MQCe%KHP4U>~34a)ocWG%Y~a$0{e%%96 zaPm$@I&F>$381=Kp2E^@i!k8x=1+}owMQQhbgOi+D!K|)GqJilhaQ_oV+p^NKJ;DA zTF_6waW2Nj%@@+7FF!3K%5W}#q*|VCWsaq_bRZmj|rHEB> zw*H|Zc-{K`ME*9H{C+cNW~;S+WR8>fK5YDwP2{(Yq~BA&W4Ahser94P|1Os-ddT}6 zaXc=hh@lI!5fkvLeAEy&%GuZ{0lb(Qy=x!;i%5KRTA8l}c6T*phM>XT0*6{_(%l1Q zY(Uhsypb_d`{AQ+BMzfhQD%)#@KjAe4(p3XU{^VKI>&RA3k;-H0<8y2RAK@xV$r)<39fQx?hiwb>^mS zsRqp8=@>4dW?sy>|9~V}E|H4S7<*&ow8e3(fdRBC%n2QH~?r4!3 zk_MBW4A3GC@qHk#9emM5a4E zsmTea*O}vW(INGav{kR+O^-->E8k5e^sgso3&Gx!`eEWhc828~PNNn^>f9EdV%DB< z$;SUn=Jvv0fyloNlKBC9Y`13#Bvx1w&3S%nmRb2~xhD3tkhMh0MMZ+o>tfuLsK(a) z6HI!~<4^!dINki0_T+yBEq8gSU*)}IOD>oIvrc1W&(r>Cd;arlPul;-$Ls%zFdyZv zzbbs}YH$7OM^{_lT*H3S0*_~YC~N}yCTfD1)C##oKd&u%-69ZJuNh@fC@$2gWgY3> z<8(Uw_JksqL_>Wau=8_D39}rkBoahF7nuC7-*VS)iMZ*$OYP2bQlzdQ*x+O2q%%B% z8rHc^4vL-Tl=Pn(A`*|Enl_q>JGt&A`fnn;|2XA1zrc?F z)A3{fKcxKsE~HHS0qD+Jw!-sODx}E>QWqB=Mc=W3;)*G`|@B$Hg1lKY)K~ z#BusN-%;N&vFewhF+V5i) zODgW(UOYZ}PrRCYx->7{;o8!!X0oZTTwdpeN>AoLI(P25Fx<;e_F2bK==;!?4<9S# ztE6pR1sE(fzh-w0Gp9|;aH!vJtYUNZ>U?B)$-s4%5Gj!u)6iu)`R){>I?d34!+UYd zqO>qTS>K39E@uu%1FN-9x1%iV)J-zTx;@+~NYLdu_ZWXMyX8*KR;605mc#{Ld->wq zbT3N@q+Sat>&aTZ$)9t5aH8-~5>6e5buyqe^6r-(oey#4T4L#EM(+PhIGlA{z^gGx ztr3R`aLp8GoI?42p9^E!b-m-0r0cW9!`d3+>>%L1;n*dDGrg6wr1it0{u)i;Fh^*( zrf12j$TXMFi5kW|6Bq2+hvNlwCVC$hd@+xSw|VYITT``i)Qq|lU@y%1Yy0;{WMuEG zME9l-{gP$+XP%jY8)5Xw%*JJcLra+PL{lC8MCZVrOow z*E+f1zOe^9TZ6vvY`>65a|w)#(N1g>|H`#~f?44BX^MGIJclYO95w+Lu<_dkA(rd# zVDWH!oAO#n^6{qgeD4LOa5x9qFWB?!2T4$C7>lsI(XIFp77(to&1k8c3MPsKmDY5t z1G>oKqE7z#j+KRl`_$@ba1mF~N~-YhU|Sob!Ug@(_E5X+nfn6r3{iaCs|6=EN6ev+ z&8!e@?TC%+Y@NWs^ctoC<_+7)k4fnW^U%e}B02|m&X91$&vJu`^*Z54rkv7(!HQEX zZkP8A%=(R=7}6T~^~)dqK=12ACoz3h0D3QNZw&7D;V%ews{*`*eLmbuc8+a=@`ey^ zQQPzlf}0&NZkL=6ELZ=V zz^i2$Y9{t+HE#pddNU43O)R+P;NcElm%vfeE&)zL&Qa{-ET^_q?{8i zg0Aw*(~ah3mm6glS&xkx=0jP(dk+3^jchc2I&sd6rxvDi*CxsG6#6#&~+PD=`uz<5G^~ zX)8e1R?a=i6})Tz?B2odWcEU^-_F*0Nblq>YZa}L!%K%PU1IVNpdmkm?PB=fLgi^~ zZyE%eut}h4@fi+Iv$+zcdZa=T+YS)2U9zj$T=aW*c}{tLdE>B@xiEbHi^jlS%KB{} z7V1rtfCC|d3$Ihjg8oB((Ij{hu0EH$eZo8-(yJr#4m_l*$r6_A(@*1;uVlRRldKu> z#Wir09{%b>;|aqWkb`Q(idJV6P-F&pH;eSQw5%Rm9B`~eaNj>)|}K@&5W+SGOs>>{_xB?1#s!so5>gRWRpsAcvL^! z@)}qAFY!&UZDm}l2NDBv{Zioq_}8%LV}ZAq-&J#b%J^Q&ecR*Ps&B4P(0=Pqdbm6| zW5&XFRpEkGg|#fd-qk8sRhNWS#cLA8-_u=V2PCG= z>nPd=W zV>)i%&8%klhIf;|{|l|y>rxF#6k%z5{U*mEPoQ=}>eQE3j=z5z{j@KjkQAq1P4^%Z7vVl!7x(d6>dyxva%wN;W`z6g^Dk^o%VY1q zY*<+;M->XM7tY~fL*#N~ac^RmEYo{W)GI;KZ~}IxM+k?}R47>fUQ(YtoqVn|umiV0 zi-mz_K{i`C{+N6xOBG_KlSLrSbh>obE;+Kz;FwSR!DHewqr=3;<>dt)&U{UtZ=N}b zJXx^I+DaWlAvE!Z=y!N|SO;Rfv}hSOY*`PM9arg;KWlyNaUdzoiPPhr z&na|m(NYGhfV4B@v){9YYYgr%ihZ7re0z-c5nRWI4gaYDymaa;^9caB!CNwi)up&E zyfSu1tL>U$WgDThUe0PHwF`h3ig3JcRnR#ZIl$X6bQcQO(0Wbja!jRPU|I`4$E=C^ zaC#Zw*7{F5GHY=Vmqx2)w&-n4bi<&GtN2X zA$0+bG6%IfBp{#}uAaK^$G?O(x%U#FK7PE?$=5%jGd@240Us_TM2Y4-XzfdH<2oA{S6+ho1qDd=>X@W!`v`Yp=zrpL{W#_#c-Y6ZTZ`(*{(T z$wsI!&dvF;?GNA+KVc6&`9Cf@B<$33jiy?~%{u(|Uq%#b(~Pc0JBr_8zV+bFJ)~+e zxn62mXCkE|YkB2+%Nfh4c%8&4mv`Ix{j#@mN|V)=*Y|8z-9=8rOu9pPoR>M*vQHG% zT<&5&J>?-lA}bT`e5;rl+byueee$KBsrO9*`Dn7rN027y1#syKb$Zl=0KpBe=O4nX z$qLaP;>{Mer~4c%m!1_A+b*!%wzxo|MItVgweot{ZrSa+ahllUcI@=GO()BLXwq6D zo)UV=A@M)+$s`Oq6t8#>Syb6cL|8Ub@7hFHMXdcYHdb)K(&l`Snvf3c@5MIs1>U;o zSa0ENez@;tNt-@-)9V70$0q7S$OxLyLPMUPSfTh`U*8j!&T5~XG>`Ch3h*c8x z!afkVuUm9weBV(L|5uxn4%;AxY((8@wPn+#9K$m(G+jW670?OOt(6RbTB;5 z=(W-<2OR$3-p>N~ew@lZ`+Kd|qVV7Rww=A{Ki#epL6I{YzS_`II<2vdxGa3T6zU$~ z%!eH?vhMvBO>@^yc9e5cweWfV8I?m0~@phWu384e-=wXEJtkye{9;M>XwX5|@ZF)s|4{T)vDEoJSJqx(Mbz6~< z7pAHE9u^roE;x}a(0mX~n(+ulo%oSXA#wjqb4QDAm9^1l6r?mSOk-aU@Wzp@o52YB zX+wKo1oWYiix4$Mr4p*>wETq6J;#l6q(lL)PpRmz9+ok=b3)_pH2fCH1HT%$3)Tyg z7?OqUZZ{*r4$b)SMTH9pHD~D4*V9jK8I5=~b>z}^6zkMFE{|ulGZv7kH?KUfeuX|3 zEg5WP=A7<>;`@?g;=<9x-h?e|cFD3E;|^2esP7dPPB2=nq|aM^79Lacg*nw${Fsx0 zH=67G^bfW1SjWFm8#fI^xNw!8awQ2ggaA=Thw_P6GeQ9UdQ!S8;uA(M2r09Frvg5q zU1zCJ6|lrim*L^Ro#a6HXc>I^9|$Do*d4h}4GSNe!?Og$v-jzr&;PYw8c)@k8^xQ{ z*MSS?I`26D5*Q4ifneX{VY_sf&r#KIMdH^}bB3qLX>WY*65*B&)0o=7$eW4&$tG53 z3r^kFyGL+wly<-$T7v`UUKJQGGS#xi?L(z<39(kn#$Kh>m(zWt;)V6j$_N>*PHZ=U z-}D)uhW1^&Pzw@gmN-Z>lKICPbnP}UxBF1*69Nq9_r52Pftt`@;|VA&yHYPb`NcpW zmfx;Vl%t@^VY)o=v_t*T8bASvoZbQ^JP)tV)S~0|*R--mOYC-{qiHm>CgF4kmo9qh zi-FhESNgejr4u|h*F5`R-oOBIhySz;b&&wC(3P{t;~H>~_b84!Ro~0Z0Io5B;$Y|p ze9HptxyS$6(ldVigT?w#vOscI*kU$$loQi^oPWA41?IxV#$n8O>h_=n)vOIqX5Un8 zh!^XL<^d$@KU_`Npoes~VmE;*Jn=u&aYPv8X?xjd6!2;OMN)y~bqFIcEEU)Ullb|B za48|q)$7>{{j=Nb$dMDrW$Hjxy&IQHM&(rZGOv@`;Xo zU}XKLg$kL606XQk@UEz^Vc1hA1m!LSvA1EjiX`r~gK#ZERQQdEws)kprrs6GvdabTs zoOa~(ShvEaG_xE5*3%U2b${LbQAED>@VZU1MvwH1^JEc1H)lR9RaH_Q$#5;yDgULIimC|6zP3^EB!Wt)810FLu?gTgTF=0-=g>FkUcenzc5Ck~CVJ>{n^^Yu zR%Nb*qiQlj-olk<{lr>v+j;cwnn6>ep1n$_msyv5#er?-Y%x{YRC zfFfc>XOQQQRwLR#5>`E)d)7KGHbW~K^zj&@oigl_7yFvK{imrlvI??C7|63B?Hrv} zX%)v>BQyf%zu>TU_DL= zX9o>B_3f+#4fQ%%LuypFn#-f=D^jTcw8<*c&HpU^+{rE-#R&~Hyd&C{;{kx9FE z2{d{RE?brQ`Ji+TOLnRfEZTQeaTmE=-LQ3O!)ozp)**=a3Nv9Vz@D1`XD46b=kg!$ zNj(YY|5k)x3O14luLf)(BJrMoi(X2RCyckyQnM@H;6z?_P2$=SF1J>=w{{zEx`)Ol zr^67$EVUJXqLtU_XC3BsqoZxSN1{u?jsihB>x6QnkXTsLmon`6QI$&ZLYiAXX?s=7i}QaYN_>RB)J7*%-0wa$GHa`%Q@0Me63g^o zhc}mWidQlMFS^;~7yswl{2JJZ59rWC@#ALykIzk~oP6tQ# zw}Jy7A@Lt3$zz^Y7@Te=FuyvKAk(LMqGar5Er4nv7)k`omxsiB59$+|&DAUBTd=^| z;5s=|ZzRr7TNt9aZ1M(c9`V`IHa+pkS18vVSPo=qSWe^{MVbE*W#bv%e$hz&bQ))s zSiNqOJ?5zoQJ7(8;;sx3RY^0O&yDc<|%aA*Oy0fAyomrltQ`p6f;eiQytruxCPY1%$k_GO9b z;uzmm(*?T>m0H3+E1d_5nH{zxIv)`zi`|?rh)}His>=%OboIYzd+WF;*RK8BZa_dlKw#6--K9t)Al;18jdX)S zNeW2Eh;(-h!+?l%4Ba8!3|#}vdkyH0XW#d8@B96Ip7}%h;5c!`d9HP=V|~{lcz2=* zbTqs|dG)k%If?7OA9y=?dLlb{Wh^>|MQhrraTfwuJI8s_=zx2DqQpD@pmD+i?jW@6 zA}Cc^R(qJq6YwCo20VWW`d*?oW6vW*fhSnI)NZybUpz=eg)Gaf=T-lY$y0Y7u(!BQ zb=)cAMH4jAzjso`tE=tqrvcTqFwR|tEsl@uG{35Gz=7W^Rs88&=Ym~W(f(pg*=%$B z%zAu=n6F*6k{FpJnz13{(>I6_23CHg5oYIF^a#*|^;_6QTi&M9>=Dq)wIPR3+@($H zEOvfgPi&@87xDkxb->7S_$qrWON6l}T}ceDImhG}i)`4s z)a0e{40BX6^w0`)@ZKbJw6-@WpU7aEux@W5gUGJ=4{hKQ>Rdtkp}i%g2f%B(X9vxv z&z|2>ROh^3Y}f3AcyHkjNQoRi_xTu5D#&8V zF;V*ncyelS4lcHTX{OHe>lq;YVu;sS&I9U{=8n+VNAXEm0x+QN6aM~moxX)g$ z44VLvu3zLMn{4Px(^q3dN1c#ez=w zzew7XHTiXx;E)(-%VI>;8mgoR*}-j63fmQ0^hD*z|HE|h>@QR|^-o5DU!I&EI0gqcNY3R*ue zfvls_x-e|_z3;2YfOlkvmGR0Bo)Z5V23=Co4s{TJRfCC2T6sROBd(f0UO-&FJnw|K zd(-9~q>y8}uYZOkrc+vPuGq5SFT9~rME&18aHW2EUq(vD1*GZhys>Mwz6bt@Ds>oe8OXgb3P}S|33? zNLQ0_lG#aT*!+uaW?6<5WDvL&3~N(R@lrGc*YW)>RDnW)MZx#Yf0ae=7hB0xy7$&E zKnOl)lF)Q07GvdO}OK~c_`37%rFuJE50r6#A63RMf zA_$y=jkNa_>j(>Xw8|$0t2(>Q%@N z>qkx3v*zEdlSRgONrtB^npQX4k6eH@0LSi; z9yV90NC4$*;~#QRxZ>VM`+CKENVm(WfgZz|$SA(t8|$3N99qRzJyk`%N?+)pH~0k! zNG@ZeGGmk#d_&G$k;hV}=mwIuB8(bO7eswCiGp*jIUA4ry(Be%i}z9C@52T&{eDM zZxWg; z#4WE944w?{Q-?7pfb!P$9JY|IxMT;nu)KJAk^j7l8pTbo$puhy#tefD!{?|(zk6bD zA+W0nbWgm_#KJamBgSEFOv@IAvzEODtzV4OGaQ^@!pA%AG{Ps_)2IGkKpCI27u`RR z>_V;2WFRjE&iJ3yXgj@b!{xWCv_r(@q&8}q6B&ue*O)}mhWxZ-gRu~|_?QlYg4In6 zA;7wR^eVw{Agxo{M*NM&Z)!rMczPQtV2Qv5puvLLJeoI4QP!wVMspxX>8TQ}b`YVO z)n6FM+oAuKfn55iLPVnn-fukqQbAyXo!=;`eKG_<49}`2u^YAH)44YfL#K@*wc6E~ zOOh+)g9&(iYB^=%+y5ytI#bYNeISABTVbaJu-OzkC6yvZk~0KsNWc$(^rZ_$=Ex$t zL``&Jbl796Ni9CFNC8JA^$=yNN~}J~6Aw1(_-awDuBNvVu@LD-vnLj;Q078s+3#jm zVj0QCS*q=~n;eyV-F@%ZUUKQ_<(qH5P5=9Tm~Xg$>xUV;g1>bRdFZHxU#KXYGB!1N z*%9|CSW#cr%f9T$x2F_W8XQY_SIuMN5YIgJ$zrCTvyuNV2vuCGS%0*(PaV+w-q^lF zqsQw2E6`Oouzc^u88I&0vr|!NJs&G{RTv2u3P1Cl1 z?CDox3gkdxX|Pg0Asiar!_xDnO`#SW|cS+!`ok9etNx zBp$ih`d*W8g2UXTg4C{i(&$j4^Qo4w7P*}yz0dumLhT$UZ|tHWR3wN*5u^ftel*BY zYkBlVMWyGueno6W-7u&T79>(4`{*o487Zy5_NA`Qo}!Pp)NMiJQ-sv|FSk?HINyn# zCJJ&25?FXvEHzz?S!Z$?<5c8`(BYA_SN`g_(2DnxH310@Kee_cmg$nsjLFBotiSg4 zJ3khaDSWX0=_#-pM7Mc*ObsqV9l;dOx3C&1z=#=o(OXG*>i~WpfPRfuX$%!_Tc-3M zW0i&(JC2$;-*fH(Z+f*^Ej}$Ui?o#FDoWrtwO45=Z4Ac*VWSx_=Z_ZJb6f8j&mYL> zpv=KyTQo9ypK5yRP!bPZ5S(><7}s_gh;j$)h>)_G>;Sme$OeeV^S+FenAv_j2`u#p zzatcE+|OX0*Z14TX0=Es*04vAWrq;d1!%s#;H#E;A2U++9xT5D(Znn(X6#nR!d@EY zNrOLG=ZQOOai>L>u(S#F^L_ICbb+we znV}hv)e^FBx10UW^kJ0$t|Q=)>JX;Sbh;o`GkVn=7Ou#?QwKWPdTk5f_ujX1L2E5Q z1?d~9q*(92-58_Bv{_7JQOEp!(E#%CJ8yxq5EDy{0LBJ;Lx~lv=*De~Lc;T?uEQLp za5~9#{-Kg*MaBnfwGLjx!hbdboiL@w`zISfzBE-w1eJ-I0CG-S(^bn2-I?J7VyM zPNWV|4A;7B?ch1&Qu3It9MxNF8B)@!6x2`a9k!(yw)w;Vy#T0EW&Ld2RHt#XZ9W|$ zBlH+12Srx4ti(KK9C}sHyFkR+;;juI7Un=A9pn)}#1-M710ZvNN|dmgmeQPY`NxPM zqOJ{y*w}lKuJeEzdb$t;vo*HK#P-|^^ zvKSCN94>1xrdDo70mCg*>&Ky^^HA&2t17j_6yIxoox|thKxL(CqA2e5^ zFWYS!qMSLMSy}U5)wMVnCDGHSw;X2%xb4Pz3nf+}WrYpy(9hVjNzBGpAfn=JUr7r< z-X`$2soR41m-uVI8g&IKcTOtj(Gh32OHZfKgu3&vdOfN#mGToQ{dGWX+gVTn%vUK=|m%KZ#rFYSn!ezktB1Dj{@xo$%ZR#M%b0%lA z)3)Fr)#mT2b9zN39{EVshq}Hc*mW{hOwv5R@b%#IF657zCYGt63IO! zau*4BgCcgUL3hh`6VaNx4(ai3HK2uoMk8{c;e)U3rY5-@^9pMGwX$eA5D9&fhQRn| zxQz$~|6l9ilixegE;hkyzIw}UtMaR(Ay@;s$`3)5SZ~}lwQkHD2n)#V?=Srr(2tjH z@R7Zpjv}J{Nx1pZT>n!BBL?KWC&EP!Czy(w3wF+L$8?8_>O1=Vz7FXF;cm;#pqm{` z+@;X_U&6-2e|-+XL=}9|l>h5DZ#w>ei*YtTUT{3-)?A+%e_6@4p?r=v_>Jdp64CI# z^mY9k)$Z5FLjV0Q>|IZ|FYtN~aO_ZCVm?5>lbG+biwtH1+3r1Fd-kZBB7Kt&($4&2xAy=P~4!eoUx zqyC^G-+6~_ra5%w${w^#&qlrFac5W`8OU&e0=NgC`=MXJKT_4Jx2az!#!*UNK+U4YjYquU!<$Pme&VxgxU5NH4&a4~f3NvJ8$D0Bro9G}qbPEC)r9QlJCc~D`z{7Gv3R#< z88^P|?PUd4TQ5h|B_GMF3}&i&dek%8hUIEn>ynNW%w4dNwfbhXa|Yw}S;Xv};M+1# z6^rj`CbPE2znIIY3VWym!doC?)uo{|bOeYU0i$b$Y%_zW+n)iTwMz@wf3Z- zqdlue2L^KYo|k_r5etQEbiGc_uA67 z6WqW8`F*E7bOKCuzrAk?N)R?ncJN-DfI7!F!`z~_azX(EFA6z)o^v=iTdmn8aMk(q zk2}F!zi%zwAGn;ZF0aLI@(NNDwvu83%S8-e^GF;J^8n6_sIGP`hq^w9leV^*`*-fe z;{szPvTX1F63bw6wxCS^Tr+Ze>}$R_iWf5AZohS^Tw}AYmvCBT`H%Qvb*BaX9V#x$O`0wL3%CHM^@aa~o&(@zm;G zvurq7x|}My>r`l+gUA*4i+hQklQBc3ym16y`j(d)?QXkUlizj2GDmMZNVKEEab&*| zQoD^lmE*cFpm)?R^Eb+l2_4s?8;6}PNkcj73q4k(Tz3z@tg@<`9PK!2{Kt7sf1K4p zU>kmOFTR$8WYTV;JeI+P1%zYdQ+%I1sBlEj(W<)J!KM8nXqvLd{*g9X#;taDlhj&Y z<7Mw*m{$Jwbej5I<5O}m`*5sO{&P;V`{(h=A42c1=AB@i3dhj=yWW(b-5=RaCCTmVIsgdwE3GXzDSD>xOsLX6=Ii!L&A@QkF{>CY-sub@?Ae zaVl{}n?-9>n)NlU$8=@f#Nf}bINOTHVxSQ7Bp35tYo7ndxagHw&CjhVBe?hqJK()) z$0A;fxW9VgXewXU#}pJWMoo<>XWV zL~miGzdefO(*tGS`?Ljt=pXNyd*)1UX=Wrd;cD}Axsm*;6aY3fzzA`D70u}9<_B!@ zacWXO%6(&oq&k6b?W0!%1h&YaRhEl^LsjJD%+m~K)2MbyX=?1B@Can45_AC%jpZw? z@c$c$Vl?!EM1dx)D1lF8(%KB7*y-0}hzr)s*m#8=uOF1f-Q6`=Pj=JoCqT2<5G*7y z=v=};UOMQy;VE4?K{;c!Dii*NX&2Ld+G5{U1CQx8%lxw`Ybun%!HO<$OzhJGV zbhUfV-6lWcS>67<8F$Kw>xH`pxs48;XUl^TbxE5p#ZL8sv$B~cD9(!!PkiMTI&?>% z1NDuKw(*d*iGc(tlEL{7`?v8<)sIt`0Ovu(VY)3q60$Rgd;RHH0u`>$PgIjsVLE$| z^nMxL$3jlak*X|%mCvT|*bd-I0O*eJSMRr#L%7w4 z0kE1~uD#jQ_wu>YWAi~OOPaQR{j_z)j2Em%Ejd{j9jwFyJ2hE?1I_ETtT~yITz8lf zwrS7xnt;+eR=|(@s;!3JV183|-&JmYIwDC@Apl57W#|EDObhfCbO83)QHoVzWg9Cf zQ!33nzPz}+z`)Tgxv}FT-4=Sg7x9HIDY%HFM7;lq2O)xMSh$-80cI?5$P4 zyz9RU_dm~Z!Wq8(i(Ir^=sB|fhkKZpkfyyBQ&c|yv<8!Ud7Rm{HXCQ7C%uKLd+QoV zcG3e^Q{YZvm^YVqX&al<>xnZA!3cFn4eP2G#cP8({TIBU;JW0D(Osh% zG}IvGc2$P^KRP^04t^4(0TT!+r&LoOlj0jkAKDS^DMaN@VlrOuJ@vwlACcA!fFNequE6ocfpeu`edBFFC9js z#RYDNAAfvfMXk!bH zvWzNyPFmc>Ae?u>eHT4He*Xy9ToQWRJ$?HAAQGhGZcS`NpvT7uOlx^XM<0Maz4J|< ztRp91+gbfImy8JJz3H{hbGsT%>wC43OsCw07%_3#RQkN$t%aFQnQ4WW@cp=sO#L6V z8u7{5buf0%Z9W2AFVT+&4n|eI)M+UY{0AxjP z9%1mAlJU({dQM;^^O+-MSSrkeeN9dV6B5h;zw+y0Pwv~{`y}38?W(D=5L-3Q()M}7vmR}C8LdydTWF6OsO$D+G|g& zU;j_zdGWvG?){s@^wOI=txBuhQ7T78*hgxB;e0+W?jT!iRXsLutw9| zucT1>l{iN*sAO>slb^%_M`eH=Ju}T766uRtZ!g67(frlLtSrD{w z>hSQyU<=EdZ@n%ItV(RJAbvoRA9QUDO!$hGKmU`KnW9_Xcyox&Jn%_=9Vss=w9z`Q z%`0jsM^zwsW4vE~;}O(sohB}jPZV$_&R*F}2he{}*r+*LTG2TV}4p%FkiS|)k9-b}mC#7i3Wvn9+?`qS|w1~bnn z7_=pI_qE|f-Jh8e)3VX}#UUli_V@0^I<@VcM0^ZJ5@Hj+WqWECV;*vD`pCN|bC-tw zqx2j_=I%_YFtCrp@<oUV(adFZTor8T%)9pasOK!5+FNlQyEPRrK~nQU;dV+_nt9_A&B}zP++L-{ z!g5~YSJ=}Df88*pd0jB^l)EI`cJK-c`FoY%5-{WP>*Y(&xrc^6w>;)zW|o*=300d_ ztH-}-EP3q`%A1r(udTT<7sX*P-LY!vYk76VucYQ>&&z3&!R@q7VtZ~{ z0pX&l5y%EzIxe~7$<-Nnh_H~~vArdtDcYMl3^AgaG)@T5tVxkMnFKw?A^_N7a0YKA zZ|B3PTx%8AAvwL^?*uoPT3P$_2u)P0mEl}o9H_g9ce^K7My^ukNz&NVRahi8|DcHs zn-wuW#0AalL=F1-_}&aKbj=emv|F?6he|ceW}ZPdGToXEJ4=WviLgbb9vQ$mChH6n zKb(3rURNMEvT__Tg-$Na2Z)9cP~#LUnLX=5@NcjoyGsJgwm;18J)JuNn-H!Lcv|(S z2i3a2Uy12_20h$6h8k6lL3P@?+5$Z-X}m%8dbXq7bxAh+X56EkmZmKMkMHu_R$bO{ zzJcoarb#oF&QoZ=ziBS;xw=^++d;HC@R%)1Ib)I6Zc5myWj~0vcrKoJ_VidUcsJL3 zw2Q*?JV*;X3)CG-a;i;{ zQylFFRa6G5A9R=bp(F%4?~<&xuO-JV3dU#)JLQQct{x`UBh9C{2S~Fgh{Y*d)0OWH z==1tdseru=n@YcRq%UHl#*Kokc0h3v|XhzDn#exX=vjM?_Wm}iI6vr0fUYdmR{yM)Ku z)MY4ZNQ%f(nx>Un97e1?Rx}tt=tHlR4GMn}RW??U3vdKL>TuOe9j-5SCcakAj*GF& zRvg`Turb3G$M(*i#i@)MF!EiXjY5(Uu3IdXegBpL`zOu693bbg=0Rh=W44 zzmn6k!1kE^DOY?7_H=Kxq^0rG%N^7AkF%w? za%y~P9%(&z9K#Ia@3O8K(qTA_!j^52ULtTL^LEkLdh)n|T6Z6l#g^QM%J8GZh(Jv% z5l_@?W$yK?A&cjMzzHXMHu4#Z@^l4^+^p#z$>^)DeI-mtJF}`VxHTY0<+F(!%Dx@{ zNvrwjdzMZgcqyfg+n2?13B~jyHYqEC4bGHDSM+?1hOg;l3cKXuOuWQlQD{LiI|u z@KK-H(xb08GLYl4jNlr zqC{Ard;G9f#T=dGw3?_NFCgq-$$y$Z0Zfjc78juVyfEQ92Ca^SO_??MjK4>@FBx zQ?A+;#e}y5RHh9bY8Ut>m2XcL0?0GVbsc#SQ-KZO^K*)9I zxh&jm!s9`b|7hS5-P5K>MQ{;N4)D75Hu+4zGdG%uh5Kdl4&PQH(Ln8X8W)^(r7} zm#_&b4$=-5JDmM2ls4ZJ=soGRx94f9Xp?HiV1`pg(IPtEQ5~t%Y!p+;!kk#={UPPm zsZM)tB_#1s*H`L&bmjuz zN6q(kM0hr;C3)Wg;fCPssC`g0O88c`o_t8N1Dh5RWcB)CT5w9I_d$~Zf;B^>~HIj<;X;1Q1XIPC$zhNv9!}=^=`vFX~Xza;;+izO#&HReZE%=ggw>;F6ci_%iy6(MM4EP>W}SRgQj)d^7MN&c<0u+$ebAkoNj}5KiM; z8H%<6Tn8HKq_XIo#*Mb*w)#ok{6&fDbVm!o3y)xcTJy-XeiQJ?X+%B$s?c2oG$V%g zw5OijyAxc7zw)q)tF|sJ@VIU*a!Ns$YyJC1-M*~59Qs<`1-BrqY1>o!E**;8_QtEb zRQMr^=yQ4;B`$9p&ql94fghr`->YJ)_C?+=S$okdKcIxMVvCNO#hj&P;BNU++p8P| z)8w3cUlJ!?nF4%Df4u4tD+hnib(fsa;Hadw#RLvkJazr!Dtv-6FmeLYlmu6?ZPP}3 z#43W#!?B*?Ab@-Zf`KbA;2eWbkXD-)5P&A>?uw&S`XMg!%%3b7p zXN6JZ(&ybw zS+gl%1@YjTs}G7v2z|H*ec)KIjr~Ssnj)TztL2KVh;uYs> z&&+AmB-QGqUqF)|Ol+*aj#xch?kZne{S|D?+Sh$@;d3=u*CiRU^kB^SZGo;fQ@AaSEDm+7MY%QN0i<%t`G%?)U^O z9!C@y%(kEtsV{^D;_8^QM+UB6)I+5o64Te2G)Ttut~*gB-533q?AvlpUV+HY060Lg zZ>}AUY70H=*)dW1>-uP_qvPSh&fa034E06+2LC*_=DtH}V%DNios-qwGFg=}O;QTb z-KR1a?On(Fw}^17x|lIlAf}uQhNJj+^VLwtD>g$M&dnBB9vTs^6;L~5~ zF5F#PXePRzKB*A*N##TOPgKvZr09WV%9Tr}=2PGe?P)Oh}kfjtZFT353j76}}F$>M-Lp^^ifY?P+lUKjct8_V?}`PmHOr=dW?n z8+&pCQ@&M%+cpD|>5{iM{@l~pN%Ybi(tq{j(b$?d??e1mLptsJ-l$D8;;wL%0(kn} zuR6b^xFw6j8|Od&7;2gW)*~Qy@9yr^ADU!mP^5hZ4;d-`%SS&6EdtuJe;n+iKQ_;y z<%g*hxO<=t5s0SrPriKMzZ{aFgT38CNvbe4OIO1^cPN1^DP0U=VEiJxsGxwXZ)gDb z7qGqn3mWt5Ms9g7S0Asp;e(<{wYONQSq;8N=ElWAAmZZv3We7Y3w==J7p9fA>s` zu)-m;8Dq?6eByw}e#t&@mJty&=q+Toy`6WbKKmUOMKbeXDMtWTb$6ter>CUi0T!1@ zToU=Au&1ZZpAN(BBmCEwp44d>!*tqDKs!ozyHtyjhz;RdSp8Q!r?0`+!WNRY#*R9# zp@?jvET}3Tzm~pHN}=<}jP)7q6PvUOzvE8+o)l8LGLp<4>LC!1w~^B6f5@0W-yi2geC9 zJ?GV6>0WFasQRvTljkGiIP$m1 z5ty6>W_feq-#*fG`!i)MPHB2;d)Gt7zqNn6TGG{u#E;xE1VVt?4Z1Pv3ax$YQd~#c zRR~nmG7h2`QiUz5@vx3v0+PF*NS$&jo>9hLU(Q{VBu&Nj%9P%RX+C;Ve#84IzKDCR@HO_ILWR6+W0>Iw88x8wiWM zAN|15Vtmzeb1nocI}$-Q>DpnipJLR}DZNm8)A-<#rmM!lFr$jTie~2Ko&uCeUh58r zg7YJ*so_^nvgBs)&K{VfQLr7H3t_HkVg1UpUO3hYztrGJn6XcjQNt-eX_2bD_1MjF zyKna?)&qM9e9RQP4Nl|I-in|+U(5F+W!XFaco>zW;SMZx?UgSXRGnK42q7sM{Vhu1 z?CoI6kuJEL|5huIDEC9e&EH3K9W)$v-(JRLaSRDb5m@;nH~)YqOO(tVGkWQ<1dk%3 z%e++SuKeoo2KS{e=OG;lRicPxvc3DlY2q42zp;=?bS=#41>AP<qva%b#UThyRR!n!J6GF3*90GO%f&5wUegT*2WYoHqY4w;= zApOYSwFajc*Cy~!#^L!*ObrvO9YhvPPXCesRcBOkWg}ggI{jUDt%yr&| zER!(RZXkr-rgoHZgi7*O_SvYT&wozAcaB@sTDW6%k#?F@W&v&Acx2%T_u#LkX`LfP z>ilQ%$IZEc*=DrNNTFSmD5NxM@0>5^04TE4xo7>j4@oMpI zD75kxd7w|oi0$5|tuyM`=WB}$%r4a}Ho5H*V|&~zk`K&l9)|}+$q?Il4cUf`_(!Xz zMJX^AVo@xj1Z4v|gGTS#INn0Xv$(|M8`O$|c4t|!J$+hcOz)VkQ;LM-5L@-ImFmJ^ z?6!D*Q8Q^ z^|8wXLQOL1xV@_VVcCi7Ld`vVJFva7KW&#wcQt_BQ>3ioRX$h#ZPhfTI*PaSW|daz zR%D8G17QetS*VSB(o?M<9u(IPOfymTtPIxL0!u=BG4VkkwC$ek{~0 zYb9w{R?+~i9Z_P1lYK4`U_Ta|%9c79g7w_Ik`41B&BG_0&O*?00uD{Y@pAXl!aB;Sx~fF-X?d zklvj8+Pp<hA%vf|HQC0>ZMrKmkKBmqr`iJn2l!yOY9 zg4?)GKal2FDj$CHJDa+Kd3-Dm%I7n78@pG=9HjI7Hg_0zKt!Ml(k4Ge{H@*ccKYm^ zv3qBEFNm<1Gtp^UKMs<8!rjnaVOkBI0gBH36oKZ7-IvF!wsD-^a>(} z>@3j=i^rf7|4?Yt!S+DIw06!_Rx9YGED3p9K_$WKj;&sdevsx-n!fZ=bMs_eRNSD? zM@6w}7WO`{*PNnPY2IM!!n90*NF#w30BX2p_QEPw4^RCmc8v)!n83(#nLubZTPu*e-X7#xqT^r8&ljxM*-2b{cBAEC zt0f63oBnaj78|2_>6z6~NGy-%*%5znrGyRX{OyJK#Y9>kotF}IE*o1K+kJ=&- zltAjzbF}m)#X+l5-{Qz``~7!69h4SiiNaQPt5NJ@&n=6X0T&gM_#63EFSGT3vq~#} zA$gMIQ-@na$&n)+&!Vx+#)zkn~=Qd|r1 zlGAat#^WKUiqY`g5!)#IBt+p_roW;PHcd`0_f*|!ZIYx4>%I$~kqw z^E2G~kpEa;#Xju{p@M{``Eo+uZY7!Pr?H4Jcm*^%FuDj|zW5!#+jk6IUqLcc!!cGR#yyWdVS#vPv@_j0=ANTt~!qFS#FVSv1!7Zzo9BYjG5UDwi%TSzL_;=6apzP2PkNkGNQE(vUwRe_J5g znaUWbel%<+@LeFr$=Ns5V4ZlZQ-ezbh(h)p%Sa>zgex0I7p)Z89s0(4S4M#&R1T4U zt%w;rHvkxe&uKh?Fi`!epGm_2osN3b`$=4noq;d^TskH{w z-zIXLiU$F!2&f*mPd%9vv=2H~<*=gWA8Nz(Fizg_*u{V_8H{L!XkSa%Nzmh3w~6oN z&nwTM_EK4o-LY%Pws+$hO`cN3h$Qk@z3vMNnhVlfck4HATzQU6z#Qnp(v@Ii*fGZ) zK$r#UB;w57|4L9P+_akmdNpx3bMYC7l$mJji_bbcdI6tYA)qY(?iZ9Ro8^=*9;LkK zz-*JKg3xApTrIiwdDyR@yqdv8$6MIyPb)+%1|V2|22BiOBXHYGO#4e>G6F~0?Y}$X zW>a71pWVeLY|$#zh=lALHxAxeEV(+NI}K5MDpL#Dxa#TDpw7PPkKclc?S3x)T}Uj> zsZ9Jzyffk-fFp=KzjB)&w^Ck9w*03$LwlPDxH=%DtXh|Jmec-sI{adkVuuL%hm`ZH{T6Rb( zf0P;{dBl{ZvsTTR$X{yDl#|GxX`in$rCrl{kRf13ZwgMXYpk-}B2!^n*;#sK*R*Zq z84f@5`14xsL0s|T@*6Kaey)~jvf8HxkitzVUYp@|3fu9?pUD(hIPFL0mRNUd$@jlzzx@oOGc z<1gbw;)uGm!t|<^C?g~plHEbxVbi&H@h?Av=hI>xQ#id-Jd-D z7&7n%3wFZkUQ4p38S6V5?j>9+UzP4zuf?Q=gn~D8R%i3D;KG(}o~S6zZ1K02dh@00 zVqhuUgm+1Ws0Aaz9XyHEPrlg{h=D$b{ofHyys!xW05WG2(cW9Jrl5@o8+U@T0CoNJ^4uu zclBm2VzMCm0M|g9tk+D=%mPcP4l{^`Ky0JwvlRLy%HYMY`44)0G_NePPLeUmbY&{X z!W~3!-FC;Pz~vP(YYBO^^;G`~&YXqK-b=Cnanpu0H8wWWQa0o*K(wo{w(rSw)$$;0 zqy0|Oas%&#tc4I0O|k)eiA_(|7;lf+jL@OjuZ~W(pWDP!HOc!bvK|jj ze%InI{319#0X6Wjp1*7zCr#bk_sZL0a*1XebfgwSJj&oWU`qGroB!&`+%zmdUe3N! zH7HFa|E$W}?sMF+=5y(i5bIB{!=+2dM78G-jZ25+Y_5M95_0}_FaQ3l$p0fbCu!`9 z7forpfROd;6Z^iB`~!`QQjMaum7u}PUNT`)r1>uEg0$IkgGnY9Q=NUa&l=YfH=~DdkrI5>X(bC)zPF8@tD)v%$ zs{A3Lr`e47E3))ia{p7aFjLpEnH0x{$<`ZdNeixX!;?fqD}1WRD=mC>P35T4%bTfj z+_uLs!f!N6##m=sRRxo3Ju4kS+wT^SIN}SrWw~3iMRVdvrVDc#tHg`aKUZV`;p3~m z+>EzmLg>24?~kvAH_o>!vwtq$+|Q_S{_^j{8?V^Cvk|16YEG0AUWJM@wfc2B+8AzM z=9(A$Odx~YXxBHx5OI^(aLhMk9YtTT)hHu&?t#q~1QkkQy2&^aw|Zz_b%d@C9gGXr zvD-i|$LVH2#k*(VB=-9UzI3UM=v*QVY&U!%T&dT2w$ie~qZ_7Yit%vHc_|pxdb_zi z3uh($G^vsx{I3FyL&-lBXu8^l0L>+CwEtUE1Aj^ka+I2=k>qq^(Y%M5lYAc)4g}x2~@F`=~DX*j5T|FRk8+Q}9xI6ME<1 z4l8-AH;>B@%_(TbTwbphZ2e_2X`nyAAtt0?_IE$WB1d*{5XjDA3U)K7?@Z8KZD`LN zsH?~i6=xtePA8Gwh<)GhvIya+tGX}d`}u;W{v=m#&VEHRRZ`|bt+Vbsm!+ujB`~8?PKjC&O7Nw|t++{rW^$)fk6mK^$+YC z_uea#FoMxuNsv3{Zh$tImt0W;pC?xX<=uTJ5|#viC)uGwUUK*0vmcxdjJmE&94nPy7Y9(l!kPieSJPY zu=BmoUd}Tk`1+_Nq|S&lkrU52d1E7S?isp@%EPR|W8c}{H80!yJT!iQFp6=sQYC6X zAX<`Pp?|)ARwqe6`k|LWXrUiG0yl4tzEtwcXLlhm$i8E@g3#1A;D!;{`%?*X_^KZx zx#1o1!d3<)8PU*d6GABc>PqA99TR8YV-7tE=39#q4FwpJev(9j&w>wF!r6+|0)#Q=lUr#Dcyj?{K;Z|N5F=XMve!dRRTn-dVL>3r$@+j!IS zX~D6tiNJ&4p5pDk6HEfYE^?Q@^6;Mu8Ql-%%9RSiY;=~!QpztZu6Q#l?23y@36M9Y zE$L6^x5i`^D8;;@w)EL!Kp@QwZN|Gd3ls~(Ifo;jN5}@&PT+fv{LM=-G@iAMv(26v z5HKWL8)Y8B#~Vxo^>c6=!r{`35ogZ0mLN$iCM}+GS~=ML$sMpr16tb7&~E*rVxE4As&0aaBJ)jOi!zFqYx{UjRIr`kj+SmQk1h5P-3 zAQevVIPva;zioUmy}C0mVhpDore+;qlkx3y;@Vn8o>9Mcw%C4vTcA<1Z&QwrDh>SX z06qTs=i?2S;5;oSmt*3hYb^D$*LBndpQNn5fs+bU=FOhy`5~bbem_#-%`IV?J|_sW z*wm<0EedK+3tH4n za8K9jwW*dA4d?94$Kk#DFZ>?5+IhoTwJ9gR6_XFusWDeejVpPuVH-LG-)P0C{w7pW zokO2n0u&ylBoZUghp>vTmwM(2Tzvg;rDpTH&Tt>7+TIU}2FB~VKzMgdA)@|Qhkl6Rbz(B}w z$fgD6%aaN$%sA4Bl1uCwhu9ra9ktGq1x&QpA_GQ_t{z4sl0X-35{lFYTE8;{lJv`M zGd62%OHH8WGxrsaL%z4@^v^XD7W|}-3Nm0I*WDnxsw(d;)t-unE6VG}K;Rh`Zn>Lj zI-j*5)jE>vumQKnS~!;M0C(gh^kprQn=-3`Y;xjI!$2D=JxQ#ZdqUw>#rv+>4_4rDiU>-1KXA$Hks9eG zFNq6b!c`quY(NU@-N3E_4_UJ6yFxF zD>3>s5I7LG&qI=vL{=TVq9totRaNa{KBRTN#i#b*tNTf0g(T#pvAwmpC}n5C0Y~Ew z614$K|5&!Tu=IB8YV+%L5Vsj*u5I@HTvcjSa|WZrJt$vhrPd$&1yGbeuV7XeQ%=%G z8}(!vvB=?-8!ZH^(qIz)W<>=I`AD3kxT?8|XTd%+3EVW(I)m$|8gFZrj}bNn$S2^5 z&8Uv!l=2EYZdK}zf#?mdE`|{}X40ZL34jGTFYa~(m zIhgE={w4R63;A9EHB&#$QyCys4S!T&x~wFRdv*PM_$Fje&8hCPrmNrYuT`XN?Kl zjC(}mDMmMP3pXx^ulrV3hYr1KYbea?-=TVR>Y%TZiR?;=X-g)rLLniK&WtuWu@-W`AD zHLOV?GeqipKS>i`Y03YOySI+2YHh=Qu?ZCcX%K1Y?oyC0=>}=(k}eexk?sx&=|y)c z-Q6YK-TlqAmRoV_`@VahZ=5mCIP(w1!nM|%&z#SF-PiTIW6MqJg1Um*^C^})I)M7x zuRg4fJ-;N;x44u5<_?pUdqA*HOXv?LWwfWk<#-Jk7)M{^R^w!oknH<619Rs$=4+j zsh$nda77eG1W9qv->ZFOAF?ao*c^y z^2>4wPO#x3E1wveCK}rAYhM}i7=)p&;p1aXj=yVSYc{^RZlCX)LRBtC-_FawZ~L3$sMAL2Mi1LtK~j>}Rm}MC)0_T@+^WW|sX!G68|c z&qF*T-)C%f+p*ef$267-l|I6&G{_AMc)DMi;U}`nAR}RkyXehWTJO9~=(RzwE>am& znRfv4Gh*gOlY6lHaO%ah@`kESx8QR9lqV`->(_HWx$?GlrZx&b!v12ovO8=0qg*yk zeg)w|7%h*Hs;tdusU;ZX=cC5HrijKz=%`1Z=5)^Uz~P5C*PJ`t__<1-)+AV1Y;U(T z(`MRlpl!Hux&=YXh!lLD<&4DZ`yb69dI2I>0(h#SxKq-CRnXMWA+$g}m@lt#Vlbb2 z9M2d5jc?H2`BCs|B7mo_0}WW%a5#mFgtEGi?^XPTl#5$mFMOl`-}=?tihI?~aJ7`y;iK?`BC)xeXOF106Nn+z=D2kF@; z!+hh=r2Z>2v&ZCg1M>BjsP+yTc}$S2@r;<2*rHIk15iM)dsMYuSKvx?f+9 z^d`*G+p@n%^4&vQ_aI-_=J>Y!N(_a(-rs*K;x4!rcZD=3+5o5MSk;GJp)#kOh3aFO zbM%!w)D{!lCS{^Aq0u71r(*k-qSzv%g>Vl6?7Z9Ke?#^blQ2%TqrJU@iagQ9f!K~E zesTicL`q>}T)r{TcyaObC)2=rI#968fL=D;R!WNpCE`TZD7N$bCzyUDpm#DprMtjhc$nql4Qw z+D5K1Aah39HkvK6Kr#cMz~RJNV$AlB-{p_0z)`Ff8G_cY;=FPv z+{6ygYE_FPvB*4;3(OSpjP~icn&@=i6b804>*?P3X4`l9eFVw(^9>Jq==4&?VKO)> zE2`&;eVfG&wD8KSgWgt%gr~ZFE1X4^pEo02eu=(~4F^X{@%7`@4udXw+np+qgWNVX z__{FAC^^y`Jk{T1kz1BqQ5X)>3tOWo-ZAB5Z3`TopsG@A3B%tUBUZWpLXglfQ63?ZaD474;MlUJ2y=lrThRLlK|+58 zms71ve;$zQipELiHmZkMi-@c={0uD*s_gv>20N{SMs=#b=!<^6e+~j?1(1Mvhsk|i zt4?);ss$L&Yj=)+^ep65rW-)d(2&JTzmRs`bmG?UzW%mX_M9+(AMdL(t^RbTEW z{G{CjV%Pl0DvjmjF*>vHGhB|+lJ?i?Y5@^VmjL{z>SNxD6VT)GC|0(g!)&piWRo~C z?D1R)k348)&FqbJ0BuJfYuKSDFQPX;!qDWRw?8dXo8`RC66u6`B zVv2Z}8cst;+=#<{27PETtTp!x5B<1U?hAzHq6$7_yA@zH=R;#%on6kC*9Swq>2)o* z632h62~@73CU=}}*kS%9uum|~*10O!Dt;&Wyy#<*t4H7i zs&O)GNsBB6AT&AJRyth7q;7KSysG@~_Km>P0|UNd4NfoOp>bf7^AqO_-Eh_-W}7G) zi5u~vruXLvC5VigjLD4&_UB|SX2^iBq{<4u7LyJI28Zk8qF1I3KQ=#DISD9VD5oHD zPY$4P4@j>8;{5cQb?#eZP+~Y6e|r0)J8v%QnzLfGKbLeo{b%8eMP-@n{#AW3 z_-M@Dhy78tcx@=ofe(5mgy_i1743|6=F>C#brs>Tk9T5G_68CW2XY?tB&_ZFOAiuT zP6QCUi{Z~P+4GACHwPwEENX}y4*EotRg|Ea>tu5FI6Cd@bbAkeiJyv;68mTeZ`RU8 z!RWgfBh4W$OGx^1nay%x_ZZmRF~<(>-`j0rMbdE1_scOQz;}-~4+$Jf?q}~L6_}5@ zc#bGnOy;D?cWHL52~d)J>`gU^zXadFYclhZJMP+f_XqW1_Yn$oXCV>8y*}%DDDSwl z^SrZ01Lt%}?s+2$Z}QJ`Uq6e8Nbv|(w-oHTAf|Q?aK9Tw?dZv(H2c}|%%%ut-@#XS zn9Exh=K7 zyq}?0$Q~2th`Flvn;UJ+VK8icdD^I)F>}lmCJ2ry$AkMFC$NFJYWN6|vHUOsQm&me zuIe_c)(%5SztrG&eyi%0e^m7!>d_UFa?l9R^Of_Ib=EsV5wc8kq}H86LOrdqRy!7n zk3;R}>%I3{#Xx21u__IHMKLQw^#{UtNDE$fYOd#F`LBreC7_~H%H2)&1s>-gYQXNn zl;V|_!rDbICqn5t$<7*acwz4xS3Yt7MLJ;PY;q+3679g!JqQZSt$K-~)yGX_?d0cg z;%FHyGB!P7I#yE7`S@P_LGbILT}-^3IG)Aj3Pen-oEux#sT4SMlVM3@XNLIYCWO`%{(n6)@_LO!-?RPGT4V*dO5&O8) za(KaPiT|PoI3itD1D;+s>HTvnL;IwmMKg>6VWbIFa5P192_oj>f~R`XLEe^)L_J+* zpO$VopT}H6f+GgX7*zfTp}Kg`2O6dXEYkTTg)2xDR&eV1l`@~l`x>;dv*|YJYh1}} z7aZ^@;OS7(f)rXqrjv0Q?o6y`MFnqD-huDBUKSQ58fC=^`zWBc#*b+Mb3V#X3iGvH zJOL2j0bo!)pJIR7weKX)EM~Zsjs6gu8btkRbpHt;v-Xu$23A?{)p6i!YDNjk4=GQC z_9?7-yX+sqJ#A>Oh?4wpX$dxnXl4GY3#?|xAjT0g3Y31TaFKG}R0T0hoyUD{ZXkOG zgp({*wZ(EyPzS5b9k}=ArxTHAM24vghVuQ_KpGGwAjgKwut>}L^SQXE;i4yXQu!n2 zu|1oWXu`qJh1oFiEmKbV)qws-qhFc?m5<}$j^MBk8tnFQVh^X29i|+f^>At3X<&Yx zJ)p+se8TWs2VhBo#istWKA#e+Xe}i@vA7+_V&eIVtHG*IpNh_7qbe=&h0$nK6^fX) z@^ieEE?;=*oepcfr2_2gASIr{r#2skIp8#fdp0hfG=E4W^dM9Zc>?5kq(E^A3>K@& zMY1YuptW?IwW@*E1fDzd_o77AlnlQlz*g~xiJ5T)XB zlxCfYA8<1T%-PmNf8yA|oCT4AKA-UJd#?}q9gdDdgPQw1n83J?o~nye_Gh1WxNDk_W)Bcd`5N?z=k4yLh9M*JbVdA^c)_EL`1 z*&ypFpL8`TY$e+giEryCuAJvKC-UfL(M{owe#(vC9kmnND{Lnlb^p}|QH84Ms`pp* z11xtJ9B}jbL~g17v8U_NZQuFouY}W;nr&^kAKh5)$)h2sd1ZEHU|FlLWc856wh^G) z-flzYT?n34%Q0X2dhu-{_<)=JmECLkh}Zq;tIU+glr5AML6hS+Xn1o%#%x)HjufM> zyea6B3_l`?c(o2R-9Nn@x=kJJ^=r&dTN^m_owRh@95z->#*vOGj!LUI z)8HbCSD14eOx{~P(xJNsw=+NXa4B;@sVg2P{*<__tp(eNYtp7enWtw$EAA1R8A(4V z%ge_B8PkSrMRj($yhg>5Vo})4^sYBz(A@wLY=VVv(^;kVC`N>=V=I9*ID-3i+;v2?C7n&YnOBe+odf~az&{F%Ar`NRiSdoQMqS3U+I@kdm`1Oww` z^3Uxf4AS5ceLaI&8V!8B-B-7vb&PCR=1N*2H^V&9kVUnSo9H+?PtcOtdyY7t6QXsj zO8WvC^N9Y?iab4vCgmc~q@`aBiR(>zF_;RFtsq=oqp^s-SKUV; zKBP(9!VF*!N$j6|6Djvzn(qGpO?;@x&V^{TGD9^Mi}x>Yc!CzeUF7~_=N=81#{K=Q zHOcecn@3EnsTConC8zs4yGB5aS&0k?MrS;TAwPONv#iC%;ii~`(7y50rC7Up3#^l9 zP!*_ybT4x3({C+i44>QD;!RDye96Y~QsAB7Zs*bZnch2B-;!1)NZ{N}35nW|G2#1hkHL2ht|BO}HN9CppykYpD zLqDgn!$9HXtPYqh@Yk{B_yuTyFDXPdFlg&ZBD5id!8th*(o@sfC`O(bT}b;8En}Bk zlt_}r!m`cq0MaTU{xv;*MI?2X&ud!82}8hjI62RV#mK$BiiQB1+veh6X?(q==)ocD z6;sK%TKereB&X8edZTtT{W2c7to;CUXQ=(yy-NL5qlYhQk|M8oIsW=sEF$l=E)Hgn zXy7WHe_riD$iC)wc0YEThi$qPO^&y!vufAob`YBM1>ej#_MrnF=SZ;0{e$lNoZP+T z*2OB#j|B5A2TdCH@e+YGSL9)zc;>{DzITnUM1_oyUnyrHdSsdKD!rXCB z)W!h+FJbwC_b5*5LQGY!L&vrIH}2nsUCJ(Aa?E!&bD!$OU&mk198;50N?|5gb|@UX zC-NweQ#sE*gnyenUJ;^8q~9yndX2Kbk@cBi)6^~dVtMFrrBZItiz&73jBiubzLY?r zzidP|VfC3|W$!qixcy+ER;q4{uc+k7z=W8llf3k7?{PcSQ*mO0S7S>plWq2kHgS=j z?VWb!>WIzs*X02AdQlVrPu8QbGYWgBuFjRYPCM@T-FJvJhv=~3zs;znvmT0*^bs_GG!ug4`5x` z&#UFC*%`6fH}=g__HLPS4Ipcx)|i1@(Q9qPL0x*2V{8tNlL0V6mpB1eJ?qdmhuh&mwMhn-bOp=D=Ru;WE@3WG zU-@{W-hqzPxcls+_wTCIRy-ihMABmk$09Bwy4j$###!vziC@%->~V zkyVnU|0lHWGuK9MP?=cd7ankI#b&u7Lv#YikyGEnUOqEtXAaw{Jh)F*a6v{zi>}ZK= zC=qzkI2*t4$|WnT7&mieGvvb zRCn{Oj(20h>p7cd%+ERi-xY+;duc3>bDz9r;eWzA?Q7 zYo$3YkzD)2XCbo5SaRyT>i4POLqx-AaP?Wnj6k6mtshdRiT13r)8$w88Av=j?i#=w zihl!qk<~)52BgUm57j6unT~h*2N^Z*CfdjBb!R)ok!{T+SA ze3lpkJHf;jQ_H!AsOy1eLK|ptKo^SJ~W|K@~n=61G< z-1*A*fXdxiwQy%YE8=CtWFcQZrUnf*xi&@vcOBZ3%0C1(hSpLa=?dQqvSCKoC<0`$3w zlB}{RmogiKYO>_B(3Bjl=C5at8Od_s>CS7$HahIu3%ls5vuzU~ zIMT#(x#stvYq~B3{8H?j#QyXN#Aj-72?BEPL3}pfQZ(7QS0Jp>eOVx;ji2#+#b{ou zj<}!L(CaaS!%x|)*7*0PgKl8F_)lpwW-}$^EXdCutDZwW&vu8@9D04T@k~71HdKQ7v0t$@!O?6UCO-1nn^ zovLfb;Ja0Cbedh9vCmstF@i&B-^(Z2_S?4vlo71&E@Dk-NE1VNAdxMbsh}tutwW8| zl&a5QohxXq$X3FM=7b=b#xuRT#4dPK+_qP?o14qk+hTTxCr!D3vBz`HXTGf(`O|Nm z^TFduMI>D%<5?MF^?r3bZ>95<%k7iN$X=x`ePU<_-a6#hY{JAZA3wxQO8(j~ppM7M ztB8afwrqnGSYK4EhdG7mgsB0w;C*jIOQK?&!N4k1lfnknNLZ!@*p%nsvD*|`~Sr{HyY;O z)wz*O0(<;I8vg{a@M1{$-^By^Xh?j9Y&%0b9k?kvATH0BfyT2s(SyhEf23uQ4XYsi zY{WfP_)b93W9pjt>Kvf|0^06koFi3}lTA=J>{u%VU@>1*Z@;OoQ-&n+`ab#{<6^Co zt?Q4eao|m?ZkFx7;%x&hq<2u60=z=Am^L9Q$n)b39_HVg-AA9YGi_X!=-HE5wWMF4 zm8Q=!k(diZ!YX|22gIqI_bO=Nt!gSvNBm(G>kn=Mi5sVIv zHk`3C78VW{m9&fWw{%-++fe>|%g{;-`1PBv3NN#*5#$=a_``=&jMZX#cYfAmFg56q zo9R5n(ofC6z*3TyRuQibH`$SDduUprU_2`uEVzUYxQqKWZSDiNU9R}H{$O{91zL`k z$u$N2Ke+$bT=pbtBK`n_prr_kU){L1#I^$3@OEAPaf;8d6eGbAI=_vK6q1RZ*9cSO zWm2Hko`uYgAaP6g07JbdH~@-a1UABvrDdmo=PG;?MAQ@9v+65|#;bU|RLpC+-cffi zWxr%K^lFU`N1P!`by z7Pt(xpXFPbJN2}Ev>W043bVipuA76^=z{i)(7k*to#X7g1wu=>u5ST!qEk_)d8fnw zfQG8fD%;HLZqNR}iBFgA?=Jf839F=nP3P--mkb%JHnOvPq{)(%{p)Wa9t)_2uOCBd z7Bwk4%~qdjUtT@nl7Kpwh^0Mfle%1udPm3-peYwhLfP zgoi(MjZ1Be=BP*5)bvA#+??;VkG?pK= z2`maQp^auHEPDS(XhTdQx6C}IV18_T^!?djz~8Av4Qw?1U! zyNfZdvtx1Abk}u8)TtUdH6V8jCXmwK+EdIg*4F`j*>1U?XXsqE3!_E}*!C0h!g^`j zkX*yi&)j&i#`v_wQLC1SrfK#dFLOgdLCz&ZnL*WjZZB|AO=ELzJoQY^HCt<4LzBq; zX730*p;aV3-%Gt|%HX~Q*AhIHJgWp&L))f~>IxCO-y2%M^#9uMciTYzS5 zZ*OKgkI6bF+n7D{A_|x2VQFo5KA_hEG^Y zX-Y71WoYAcEZnTjX?XtW#3W%7$e)ddR70^fy-EVP*NE&*;wQH+V)$yef@q- z3LG>7)@rPMEMYgQ7NWA`rLn~>iT;j=MKpP2PPQ$Jvqr_x%QMXC-=PYzlM!20N$unM zG|qNlU$I(TBfE3_!VL-ptH>1gIhg6yqPD(B`_{wBDxdb&xT&g;f2I#O9lLm6;LVHq zpXwdPNTZsGi?9p(z~P6E%)!~qnlCr-7bBFU!iu2`C_c>H!(pp?asOXtD1hx}T(3*< zMA0{47bErJJq>!xx*!1z9|sP-Z|fgI=DijLF?=038qa295iRj}9>%ogv`6=FgU*c| zUoEz4pp``+8$U96K#ZDxFm-DFN-9CM+-aG$Vnp34drv`t@*e3YjTW7*OB24SE9sVp zz$O8Pq`6z%Of++hbWwftq+#d~?~W_wac&4;z*j&s@5f04%%XgRr&hHzJfe=x}x;OcAl-C?q?=^ zori&XrVC_Kj)(O0>cEfpgRozFI2v2a$;smxOyK&Fl0~8xAG1%wd@xjFFeJJi+3(qU}ay)G|jhkQw z^7#ASLQ9#Uq!C6yWWN~(lQ1&7j!-}hkB$5Nyy0NYdO6bW=Pn)%(u2XJjwA?+V%I$Y zK|`o z(W^{U<(T6!01T?jxvif1Y#OW@dW*{OA>6(vMB)fZ^F7r& zg7sYmb^t`7uw*7#c@0!qv3Q$M^3BHH21ABxH%qI}l6SjnG$hnN)PtTBMTpvLN53K? z%0qH=IqSGNS&f~8x5z>{5qN2KoYXZB@1A1C=FFDGqXb+vwe^~x-aV^jMDulJj0U1p z@SW7=0p=IE$6n`_O~t-?MkI=*lsqy~O8Gg%9|M(-ua_;bb?FWwMw2@VIBa*n8p#^d zYiUF2Grqo7fRid~lCJuqC733FgT___ra7~dwBEJswJkudxD)G79xfRa)47!i6jlR2kh899P`<0W#D z*UBLyKeYrLJYocj!b5F`0e@h~HXfT;46LSO`=eIwAXyaN>LUjIS*U7)mglC04VZME zTXT~`cnY^?1Yw1jK@)LZx&U?@t{Z>_QzJ!EI)nn>Mrbh!K)33TPT|-Ecr(A+m%^7! zakd8#ZAoGpH77i~e7A+LTa0CJ(umlK=FN}*nVW544Zb7GV#23LtjCvq4%(7=bH<<`DDpC2M z35^?~ZgS^>zzdu|cfCT2(}e-r3vZ^7QXejU=IMoIC2Y=HzGEU(oPN(!lp9fW(mB|N z#6JUr@NnzO8V|!|g~c&u2%PnHPSZ0##}1zlxftY-%>YLbZjXME>ZH-j+v+M5^KAIK7r!>%(n$kXdN_!&?9)|RtF9jY=uq@KV{cIY0qTqJOSYi)Y`09jI zeo6E>zlR|(@N`d31}-Ci=UP-%zIF?2@AKT=UMXW78$)f;^bVt*XQbtsA+kCOF$70rr}7oPCdRIOgm+3jx1FyE^&fRt5tPp_o5CPhU`W z`I?b)-a!6Kl0upDKgvvMV;}zw-m{Ych55f>VhTW!}=Q%jRw9K+DUGM#=Q^wYX*zw)nxex;3V&WL* z8gq{x1AYmDp7qQ24ItftSP%!pwF&mE63gRJ2ARYd_pxhCKkbsqj985{Y(?jHfv4PW=08H;k(vdZz1mO-nm8p&UXH@xwL z8IvH(oM{)5;NNgQ=X#$*t$6b;S4kY_l1HWss&iy2;_U2z6}s|`(zE;brUP8)3nzf$ zv}Cb`Ijp!}eoC~7ua6o>5)fV3xyx2nH!hDu_ZGl!07wCS4br;IRmDLw=qis6_3oe- zV9Owu4qCZ2%eE)Q{>ZX^iZ0q{B*8Hb)O5jZ9~Ce2&F`g9M?E-q4re$NoH*u;3q(42 zI_$Fj3%EH?bC>te74%ZjZsmjN8Ys>L;>Pec3v%3J)HKZ0ubdj2yzt_jhxbC;DYk)3 z%V-5VP;)BEK5Lh8;`1;nvl@AZmxAJoCl8=o4-w@w2d{2i0LUC(ywBZ&s71(D2*%cVrLQ@RYg=Pb4h8{ za7LAd>80RO=(hpcW38nm}jQ^2=#MAy}pMH6a)E z$$Q}B$GyTC^7&EM;U1OgJ%fv}>w51-b@6jD)a7vcrzqAtT{wu!*m^#W1pbr;&&0rz z3HYe4Yf=J#_JzU5gwdtVPc6f|_id)rsC1$e9nGeVHCaDURbMqw71yU324NIDr0ANm)? zMW_D{F)VjGHzQA}^FcRxj4tp0fU!c}*tf&vPbm$cDqRTB7`s6GhZqF|vrq?E6oBK+ z#r}UstU~_ck^+G40hT#EgO!!{$MVx<$jN6ZAiVWvG8{RAZl*=9-S#L@swVa1q*E4N zP9ok;SV+8$HzCxo%{NrP*^>+&$xdv0axdc)+?4^<{*~$*Wo-co7@)w0s z&n5<@y8=xRtGyd80rP%0Mu1kN4xzzNV;9-en}c*5)Nd|6>$C9KJnJ^`m>Z4u#1>gK z8=_#KKyDZL@t;7g;4mnR{7jbvMDi(WEmE3oKt3YjQr0~@o~%OXD;)mZ#M?$D-_SFZ zo4q$9aM7OfXjRn9w{dIPByQ+%*|K<3F|cGHvGBqo6wG|d`l%-#S-b?YO-FFKV)}V6 zM~WaS*y?Iti)7y&t{3f?O008@p8YL{h#bBnS%vEa&^1MqaYb9ogXmS0P(s_vQ)hnSz5j3{pSHz~DQ>bqBrtZy+8`s(6yOef4r}6Mr^ea5pERy3; zW!+^9e<5j(4n7)v3z#?4%dbjm!fN`9bYP4m-6Wx5(ns;&l97sCx-Ptu&kB~GarDfXDJA_*S`nRb8JTWFY8nVkA-=IIPn&sCGZKVxehdMi?xKg;1_m?+s-6N#}`rjOW z#b#@?70_s@dc__hEkzBN`s)kk&Cl6pJlB@^rm~W0umSA%KqB+WvO@yc(T8_*4f1v1vtbCiPpQc_4Z?p zFrm?fmEZ|KYg12ZyPKPFg|$+f9>se-Lvc5_X5@V}P}a;PG&;7L-&M75;MI1e@+^k` z(6<0)+}5j6)S6h0DM$H}y?0f2#zTtPDaUJc#^Vnl9;1sH$>idd`wbE|LYO7*M$FAC z8sb%mOhDMZ?p1B$m&1Cc=HR%fo5yMRlc=n9klO!%VF;P&T0#eMq#w$V5X%{e$4aL< z=?v_n;<&=UD(lMcF}MuwSUVRX1?c)yGJB3jsL|*}=#wj~qu(W+a`zQL(peEuDZ~N; zd|v>-*MqqOD-#f)>uEUUiFFOUx9BLn{xeDTA*!O&Azd6!MQp5w6?5Gf2{wXHn8<)Mq2 z%K6Aor{0n)*mWB5@_iWESQgcCzJKNpGJAMxI-r@emr|Q|Xtf=6&i~697_!+TUgem( z<6lMIk>26S0!KbnM_`$AfP9>cr(yi`QzEShWBhULV?t8muQIN<6#dF3d zr)Nna)?TVCI&kX zC^adt1U~pG$=cd%ByEVhh>~O}?waUHKK8I0i2V?4QLMMNv=#UvsLL8ZV0E;17E-gC zKt<-2Zbs#8?w@Sa`P}4O;3$#)v4n&;mZ;G^pw)QCos+zDZ-!vZV@&4eXD>ractr=l z7|k?|Jud#55_w0F(-E7YccjPJ_9MNnEzS2tu{3E{)+64Q5K4!U#^Gr)uB>D1`rC3h zJD~@>}S44X^@4MRU!SJ)MF}w4|e*o#)uH{PoBlZyXv;NvCk|rQ#i|@mW^00)XU$VP*B9nQj%RB4RaLG_eDLR|0r}gxc_}s+6wj@-h5eq*eL=ABA8_I zoc=V3oFl5F!N8zYPHkQERn$OPh{?NMt=Xu+%!2YbASeU`Zr*y0@ZNH(;MiAXU>O4Q z!I{xng;-sOIZ3tbUyu1dOo!uBP2P?dxaOktU#5vH?ozFo6q*o=Ust%Ploq388?;)w zwsX+nv3p2E$CwpwWWR5dTt^&kRx+HQX%AE=8i(Eo0RSTALgY9pC%kV6{G8ewXoX@l z!PbIy%;jA^C7skMQvjpcEbRP<{;9*4Zj*kts_2#rOd5fuzfU}IFj;QwdKWmgFm(#~ zKw2-1SHCkhv-h`DkPh@~emr~LaDy*do@>=DPG(1lh(36%QAVyG6#z4r(czX!Q1skF z)exE#x}#}Ge2l)SRE^>1b@WTMa!qMBv#Nyeo{$`at09bt37$9ch_kzyv#*-Iqay~@ zxD34i<4lsB2EB*>kz1KQuLYeVLeJst{(u0P3h=6&hXT=Esl>_e{5r^!9r(olAx5*@ zFMrtF!WwP>v@HWhKP|?zW(4HYiW6n7_H49beh=mX6GIYFGIC;%6c+P^H`Qyb?w?wL zZ~k;UV`q->Fg{0xqJ7cVww`uks39EoA=51;5H4CYp5Lx)bG4go!K!50h-^VT zO{SU#+9`c(4BoAf(*eX{$Mvo%9}I1Fo2;`~57BVT2#gnOzi1E!#U&I$br_rI&XQ6m zhVz%;kcY$<`5tBA4UhI+hFc72JLr&+ED(-|l=_RZVQVE;Yjo@Cq%_MFoJK1NUF%!Iq8&6ibyBBGlLLnF~F=0WA`nHKG$MY_>wL>NF9&XXhsyyz> z$xAtzoDr{PnGlwFcDi>))#&SenP4atFNhb!5Jt0_?ee4G_-hghN8-hjB^8h6z|h6V zkiCTkpwJf7YSY9O4*gf`N~hQlJG6Z-P#<9-lA8JSVW7he%>tnmW@O~FIE4Wz182Qf zVbH8o;B5#>x~IJpwzlj2_A#o71wRR|I2|vURN2X}W_+y`&W+tNv9jK*!3Y{Zti+jX2c~ZH*RJ@&1K& z(%zxd8;xBz<5oWf=9!$=Sz0J2bFG@nQ!}?=%%_D3wE(tkRTs~{PO)>${`82ac+O@G zJw?%zfR0S3;@Bk=11*_ch8)22YoBNFY?gsr;tXu|pxJn07!vwV#;wFzk!SuBwuNK# zS6j#5C)Yf~n-FP_2%TaB@6c0M;c7o@#)kTgS51w{|C0>K2EdOi{&D|Ixcm#uFu)0Y z61R*TE^u}B2E@OXle$K;dFu!h3}tYlfzIY=E7g#z%Gi>fAT8RxSwQ%1lErkz&KFKq zAN@{-Dq|EXy@~fn%ZUm0wsDR%nA57agUogQ%p+eKP3we zBF_WnT>Utz?|~n9z_I6bRc-k3=P=)zz*CigL+o3cNtmJ2BjDDUs>6x7FB~;uaP7^e`ycQSG$t@s(TgEx z+9>)_jvt$pyE^_COJdj#JUBuh_7!R;{U>e)4t$uWi0!)HU(1{7_hv64U%QxysRIwK zza8M`*sn*e4*2)ZSHYPTl}AeFlNX0tvxQ76I0gwu1bRWf?5Pz9 zs(HRL;*UOQyaZt0sWjKc;My^^=M44qOiiVb_WLNlR2=VZ-~sue8f-RudwGvl^27m!4{H!g3a0NHSJd~ou$)I;oNIU(q>S;W-!Ys13i7?SLDUR+O6Iqq>$Mt#+ zxXUjjZnp5tNW3<5gx`4*!mRl2l^orrpYwuT-#v}0HH*6U2Cw7qb4Ge{c>eab{lOcq zr!_P5m?2%+3I#O)*<5@m2~aU_ALFvmx>|mBIYBdDC zPwhx4=KI(q-d|BL3UL4x+m`Spf-tM*KWndCwEKl(_IL))WQ2Y;mHeP$N^)L33}GH-jz zJCkA?pEGg`oTgP_`>EEz9QAy=hXb?4*H#nMbhwr!vEj2Q!%btc<>>l}QwsNom2R@2h`Fi$Nck@M59nmB2~^^-xmxhg|7+^cm(bTo@?O5?#ri2b@9~h ztabMp0&@Q&24<}*_Zc1n@bbb_{$KMnB|(J$WiBRR=Z$dx@go(1I$;^jh2@P-VeXI! z>pF+och(F;l{z-+*D#m{M5ZbF4YYhj}kf%Q)gl8Xw>;J>*?E;g_GHQ_yy=X}s= zE*xG}C#njI4~Izv4Cyq>Zxo+DS~tA5vX2!E9g$Hp!>BC>+AyCiAvSc(9%r-{_jtxO zGGe0CmUfu_VGU{jVVfUKoNAs85@3zNm|N3UkAp3HT* z+;KV>F4M(bJft6=T9?26GZWFV<^)4)7%-jyV5WhhGoO46m^G>Mnp;^-Za-c6nUCN* zAzF@ZmoHZSO+h8aB4zn0TIxf_F+U;;@{MCN|HwnZGyfkQ6Ql5+#J&UXtQA_fz{7iC z@p0z7ePs=Q1RvUj(*ByQ8PMZ0@GlsM`m8^%)>?lU2xp=jQhFlb&nZr+*8H3@3WO!X zOl!^7e+dDabzKy3- zn6+y#z<9MC?xl(5Mk6;CI81oB*Ib5=bfqd=o5IHMC(8;eC|=_jO%0niW_;25lAoEA zw9Y!ZT}Cy?ZQ#9a4A_;6K6(8t`>;s|P6rV_ZXj_yDgFeh1BZsXeBTS-tKNV2XVidi zZj&T-2G!(%6Yp8LD1+z$s*3dmnUgrsaaRGS-{CbDmH%T^`^z*2?v^uKZhkW|qV+O1 z2ViCdo$6`0xH5Iw&e3DGjVBv<0M4?`v~$_}ioG8Qw?nozD~*13@rq&mNnrqTuRko3 z5ERV{1xv+RIC$UH$yUf}QFScPGV-t*dAkAH`oD=+Tq5OPtEGgNaA;I&tp-{N=klqV zpiAiN1N2`Q1A`*_RSnTjX63=3-yJL;tN37}Up^a18lS1}b2=8bz^%Z#NmFP2Q2k8E8 zOfs_)X=SB4TGB{Fwkx0DqypyeH%l(SBwxlsr zqMXdht!~|Z`}6`l$z@fvvQh>+P20c17REHgw+p)9gZrhP$OFb5q{|0GFC&tdy3)a~6P8 z@)#Q7Us0xr19VRZfS~8{N&mK~kS*DSsqGg!PEHXqh|thik@~jgDRgmJmVyAp`I;T7w`qj!Kwd%6EuWS&C5XeBz!BYBU zt6a}RaimGBQNLq!E6L2q0<#SZ7-z!RnnSaJ0tjSaTJO;KFm)b411Ytc(THtxJ>b6r z)Pdo_`masp93B0?n#xc0p}oO+Y+?^$e%vAxwyY954uYdd%HuH|-x2MV4q_{GBc)8L z^Fn};EQ!_b2dR$U9RI-J-2>*dfe(^d`sr3YMq6l$sZBnzQ`Lfa#ksykG!;CA_{ZUb z_q|pTE1vnNo7a&}TSp;0)R9q7At<|at3Sr^wZq+l*((pUC7vuW#06klFhM)jkKN5_ zIgpQ(>{uSf&XdibA3fQo#CP{0L=hq`(7yT)HU4h~XjXc_r_SL;v-XY4a1J_{e*Pa7 z*_TFOrn4R!-_uOsla0&ejxDcr!hjf3$Z*I|8>2gj4dr`#mY z;uz|h-xf7puQ;rQj=-4%S9uH^(lATTe*y*q6SX7URw}H@MVD_<|f6w+SXa4MH>o)j3jZ<;nvA-Rg z7;Db65=Z3B$FgAqP1e^R!>xkC)e%dJIaU_tWQ#ESVk2?MVD_qi$NP~L5T2+#-o5gn zeXsPap=3Y=?HeIo9=6n}#qyX1;2<)GuA90-RmMxem9QoLlV~TI1({&jZzDtp_C3l+ zhbo&ZHyv!)2=y~1m5jd@n}{C?9FyvQ=FAM?9-0pADnVvXD06fP8wT(156`78yFGfc z;6sUH2@N~MUh)0gNREDl7TS>1yZDOzfXexw<}2Ee%Fa#9=eiOk7c2cT9?_I-!mMjY zf~sXaJgFR#vZsSg4$w8zz4Fn1vwaT;8nrt8cuKbCMH-_<8Fop)IIdR#Eyp}vllnHQ zFk4gtTHe>gb+S%$O0;9gJ|R5%Qb9^(-tYK{%6YG7@u`2Q-0aXzj+j0L2G0DKW;BJ+ z`ULQWr>rW(1aKL;nNLhm*;I z-cv{jF?6SOym#&^$EtQ?e7Ic*#ZeCNDl@^mPYvbGg*Pq z@Bn}m_q;$ic^{#wI#>j*e_bcL-uIjd?G`1MVCNpM%9S-&!vK_jFrPIc2~-V3lTl5V zhENlkyxG{8eQ>n`4kevkZja9b)1&?i4y-d}#QNv&ZQa~M)T5^*Qc;ctC7E~%qYCD zY_)bVP)qWJ8rwQPFdA0D6X7_H{i9;2yF<(y6hdk zNupTISYe+erv+Z%Qu_CeJTXBqe-1De0cqLk`{1-2h?YIKv$@IV(hF&FR#Dmgz*9)I zom;dz%Dr;~YcDlawD=mjgkG3MAI+HHY1K6h5CfBMu(DQofNw*V+WIejw6o|Y+ZkX$ zI`xEFe$LUe#o~}Q(iX`_G{r(-F1OqcO<8+kI|H(27lR~{7n(2fE{XdC`Z@3K{jS@- z*Y3H};a{0^15*OnN0|!h2Z%7|_z*D1FHThK9Yq1t zv~<%`un$81xf0sg(L<=uVgsIE5MHqIi4>qh{`6I*Z-xIFcFOX@AHTi|s6aY?>`zSZacdgnN z0RJxifg%tO;_f)G;kU#n$iE`}Zc%)}W`%iUFgfW=v1Q|ICA+K9;kc5yYEzkVk!i;Y zY^>f~*8HpXi$)FaKgv4CkC7v=z{yR^&w$6$+ghs@Z0DuDi%30s4?kqNnD53dLVCfS zg&~EuftS&He8Mf##OHU!p=U*f{kp4fe|U;ia@Pue9O-U)q$0q$A$hj$ApN=`rw-@@ zrPeH=4}?+DkeX%f+l?_9ojYt$t?t#Njc0ziSEfiTCkxvuT|h91qMe}c4O7f+kQ~G0!D;63jHfb`=?&U+fnJa z5Ut-0(E7Jlw?(#0xvMICPUQwN;Ux#0r8y+QYYpbeb$!AyMqF-|XNxKFnK%Op!H}53 ze2|EAdPs=u^AM5ky#VTu1fd@jd8L;VWu?6yOn-XNlH#3~JWhk8hT%qAjxl}Mw0wBJ z5?HPGeuTlH<}zZ)WxZf%(kQ2Dkoz=dH?r#5QR*%jL5(xa33zRw$78MQkah<6S4iIe z<-jI*j(>f%kgWgY?E~JjG$ZJ)`0}QOmlqjXdU~LVtArv>34OX&Z$z>PCIUT{PCFv0 zCp<@+-~{DUG|V>eH#&_5cO1UGLE9#jg%9UCiu=k?F0naMd{~vYoQ8d~`Mx$d_xsZI z`>P?iZ%#ziG$i)QTD@nqjm8))+OPcCn>E@n@YQ+10;Yl0zNMOh`GI1&@{&=$0e=T_ zeE2`@y=hoe*|s)HmB+pit0+XJ)1njw0hNN#$AVHy5s0kNE=ABq$x#+ih#6H z5$O{F=}DsWJt|FTLLzO1goF@CAnjd2tM)nj+xxla?o;=C-@VUSKYUydE327v%rV~a zj(5)aRM{Gp6w^i zs=+z3wdar}eiz^*{1}$@Tdi@6@8wu`>_&2f&XrZBo>B;}7IVCIN|bp}gGB2m+}h^U7Wwgn3+p3v&)_FrjL#&I-SM&@ zaQ_j#`=Z+AEq=dfcf#PS$=YuoK9GfIJR6BV@28G?<>;@wwBxI)R)-zHRb!;B<@$Hl z{=V%`Kep??IJEaUT+~Q&mU4tB)dViaSbG3%{|RZ-yG`tYt*H66-+iMU7`(b-T?fV# zbg>pJ@gisX@r~uvsh_*I@9?e}mRpqbi7b70{aRYLnY9UD`}z2*JrYR+)5LH~djD;U ztvh`!`^Io3tP>d-7%k{Y7Y{7eGg#Yw^z}D-#v{dkq8kRETa?_9l;Q4mQ1+#ez##Y5 z>MP{$JIYfK8daB1K6-uLwYJdbK(9+<`G)8OkjcGHiSgMN>m)CBtNfnn<;xc@nx*(M zFJ@gtC@JU$5X*b9+0JFFi*%ccN0z4xW*1Z~L0gOr@T_w*ofAu#mDlohj@6UI<#p|>^wspm(Yule5UhKaT0)oXZWoHpeyEwWf;imYU z?|^`G0eHg7;7qlSn3&@+Af)Vks`o)}fM)Xy-({GFv`8^Caa9B^+3;bE%ZfTc6iVM< z>;73!HM)uJXEFWn?sv4BxG`N*YuqAp%x$mx`QaKM{M~}fBm2J+>rzID775up{+c-V zpK+xC6i`7aZ#}n*`~!BI$#m6Dl6BMt{G!1m3k%Yc3%?^K_CQ!)y2a-n!TsZbDt1H| zV!O3_={cBm$e*EB?9ZP17hXlXZfd zBKI=PP*W=pUz^T06@5<=^Q6olowUEuYbxV~>Qa@eLAAre2e0-_-~`B0o&^xc?TG54 zp-3Gl0yxqtWwkSBjvdp~EbUkFI&P33`{{LbwHntqu%f33XI*pY!rS|)Il#KDr+{`- z`lH?G|63fb*aP$*y@E{M*e9FND<5kyeaN+l?LWyS0D$F9+IQi_05sETov-HB&fPxC)c`3^HG-{G(oryZX3?8}Qi$yg|(rpa8^nDu-s7*x2xBqf5{CDp2)EAqnS{~e;JZpE{_VVF0o0FgY;`H1Vcc0DTob6(_V%z_4 zVJ`nTC<2aA!9IQKz2+jn-KqWEqglV>uXWMam*=ImlFdw}jsR8%{?qCJNWFC}@XwL| z0{%TRc=12_K_VRJE^#L8Byi)d-N@K5bD-~J4+6fnE9~z^8%B6(o_~0OZv|ZXK+{8Q83>p6_J5xbOhSO-o&$DkKLKt;w6DCTDgxJg4Qm_1#RJ$zjKF*M|H5?MrF)VGsc|B|d{-~PXI zm|V0C5$zsG`=YthQF`;$o3Cd64s-tfMbZl4+r_Su97Y2!PCQqe{GgHSrRHiED>^wE zzkh;;u!_bdHZ*)uQO&uycz9g8=p z0EW_xf0%LsZt~y5jMVtKjqKeO11e6?&4hjcq<{bqwTUSEJP~cR=`Vz%R~1bE;~?Au zBXi*Z7X1hp|6ic!E#8ZBO?Mvc{pNn7h`APiNhGfSRMkEAvZMee``+InA<38=Om8fv zY!^F6lnS{uOHKvT39Gzx6&Zp}WXvZ?qw9wv5=$*XKwoTLMxNGw{f$cN$J2b^GDz+G z=E}`oKc6}%CiZ(@RiNpI1L5Nt`HrW;7OQ4NCx8azoz_y!S7Hw$|40g4|5&Qw794fw zIpDxQA8){U|6M7&_M4GX*QTp^T(#U#hEJy9_u;M|&w0jv##C>xKfHN++fT%6RCxj# z3IhjRSMo`pqQ2BdqhPT!*w1f!6?yN-8^+S$9eczHEhwucLB)=`804Ro8${`5a|7cR zA2xYMa8SJg4UK7ArWT-1xkAey9oiWeLBP}7SSof%mx^xi*vZz?e*NX;nPZn^Z?-kx zB_q&+fjiu&ZR5HzP`m zQ*$$f8%%wltyi{1I>WHbId=_;5V($37j0<2S0lt<5@lQR3DzIc02ayN#=AtBI>{p!(AVarp4%R}FJM{M{qx3xD# zEEDUm@Qt?ZK@%0A*?KJ4DY`G5UED=nXXRTqB#&jYf3li@KnFG1gUZ2yw==fO6BV2X zkL`RXWl2nJzehOu3(ezGw!fo}nbm2*Z1+li&?5BOTtDmIMB|BAe!fQ=lmBY8@S}H;2!M zItgtHWO5@JZ|W0wj_6*GDJ$7(-_||S;^*nVH@Y&@{G1?=rgpef?oic=nWQ{t0qdg| z=r-mq=-Tv3CB?K9DY?C?aX?@Z>Vzw?{HNi`CJEE-*V71ScbdZd#$0^0q?4vYO#4wY zqRhb^@tJf$fX4EUt$_PaeOeRm&jytcJ`UCEgaB9~qv5Ilbg0D5{!a`WIxIka`SeWw zC<3u8-xB(*?9W*at+ULV?QlggLPod&gg!G#r|??1Q8^B5O6pLls5R9*hO@wiOhdkZB6*;*!v9R|d`}Li-Ra2a z;aQ4V!&;iNhux%ulI((77~B;kNEWHg(==3!%#P_m4?PP1blpkHe{^& zspoS1m*YkfqZ>3myxAMiH_KU!Zic3$lbr%YQPB6e9CegD>qlwL(ya6DfLpJu#P1Em znm8Jm$YEy2Mmx>&G{Xahh3w8A`Au8j_5xJ0-1yi{e}PZj!c+~lvA{YtdS*tH%G2zZtcKO^gbEIgvc zu<25_o8LA1)Y0Q*^z;Vn)?Am#xp~I=%*jFVW#&Xq`VKpp(;oQE$^+UA&ZYFy*wxu* z;Br2!A3Nc}a#B<>@TIp8>}KaO-YmPO(XpEXvV7^Pd(vRt;BpfVEJ~JvJmi;ui~QJ? zuSI_CJU;!@nv<`!vZgc%hH~R`3@sozwPDK@od@&;gjookXI$4}P#O^BA2+ftl$TFT z{28tcb$h=z12RTUpM>aF)7kyF>zs%JXN2FC>3+$;#m3q9-3Wwp`m504d;7Mv-dYJ2 z<_^E|sZc62n4HfA4fut=h3@W^+;>sC^bKgcuhg%+C@NKcZ)%Dvb9&v{p-ij@=2Wj7cSsIsUo(M2TFf{^+gb=2W z2s}}RBx<8&iONn*KJ}$-U0h^mfCP5@Mwcr{U9GXW{WmWuG}@-5r)@wfQs#pv-vU=b zuf}r6PU|-FJK$g#Gj7^lMvO$nBzNm2BX!|EVnaDQXcsNA6gMGNQ%R{wwLVjtwQrzVA_NS-$@Va`or;bU%*`4Igu_mIaYCcKOCyv(&`0xV8 zuuiniapm{yT)MeDfnl^D7lQKHOD|3zZRWlcEctK;!0t9QR9lnDebw>0xAhkgF3}9G z8A&hBWp>4U*K}cAjQ|srLdEFK&0)?)`aVhX%i(EaJuK4$g)~RO-RetV`(wgbg4Ru|b7g$tUq&Wj145{p`(N?13>m`@{%%f7W- zrc2MU06^<2r7!7R!D80z04HYQ)gd58SzSo!=Yyn@Mcm??>*nz{jF<*{7_`JqIL$YN z27Y)ct@YAhUo~FXuoy$R%kQv<*9mSI`2Cohb(U8w+!x$eCRi_oU{0?V*EvaS&I)8z zTJO!xE7;}R%-5yuMK%bik7^El(;RcIYrMZ3D!s($ZI$C{QL7u+?>Z2gW&sh<^}W6~ z!OT}snOfmYEm%-T$G5`y^Y}934U&34MGLofdq<6lJY#h2sA`AiLFd4m{bM}a>B$1S zZ%VbRS0k0CBHpKE5*&nymi9t=KT18@ieB9-e;DiAb?6Q@`zAYnNhtJV0KeF-Vzg-H z1y^P}FU^{C%7ytw{n)Fw3b6_VgzIO|E`QKm$GfnjOB^lYV!G*ywPsT+LH4(0t%zri z(;ey~;Gj-%J$2Iilfc6MQVnA#1x62@t?m`w*9V-EJQ*J1*?XYG9wHl)aEj!9b+9V( zvF8`EX!gVXR}E&sk|Bvw&B)Pq#@xi0msX_iprGO_n74QA7A-e~QMwfzN>3dll zcWAGbUiRe?I5ZVn{m0Ru$UMl(@^6&A@?dJ;+ahrnF6~jbnPCk2(*qB-JZz!1sWyC^ z1>5!PoVJezrEh6Nnc;c2(4?8kC><}5c98=q1p+0U7TouS1uNE&RQ~f#pJk{zHJZ|D zp9siI3c@}d2EtVU63b6t&dY>hu1(HF&kOUM7@tZyHH%k?A)UG>r z2|;Og@nOArpt=Z3_V&Ss`q7Mw?nY4{C2^#wV0S^);(c!m5NYiCNV)+E#pwLC#D3#L zOWoxlL$9{EM!w&=AIBv&$_G-rM6A2OBFcrXx@GBU_I1~o2@XTHQZwS{=S*R8%Iewt z5FXPM=*FS@;RyDWL0`W)UW_6DczDg5<@*%u`73KB>hT>%<6lQlQ%?IVPLi6_R~Afs z4j43Dt569Oi0ClZ+-LUWpC{VsL0`*K(2jVGI9B)_;ktL(l6VhDl*@f^?s6DI9~kd_j}+m4|*EeAEZ%c#JIdgKRoSnS?C07NC8}MZkM~!fNy=E z2dAax;?eko=?*h>|Ja2hKMm4Y%={=DYw9v`Z9b*x)JBnlGJqXL#Mye40+{E%K%?C6 z2hS(_R+OSiHHqETkAPwquGYzEA-fkSBgNMGm3(#HEfz72F$xmDN)2r;l>kq zzigCXy$oADSW)u?#Q6(83oRMRE}?KC~ushaLT#n z#{kCC%C+mO_I^(+nX@HB(4fXhPfo}0#`@7fCY$2Mm&YtWYZ#PgU2E-RMHL7jT)r*` z-*A){8FX0`YK-#4@#XXe)a;s+HSCE?o%{Ras@ZD2xetM?&U2UhZ2mS`M>&WL%8?W{ zl?nRM&AIVn*?yyv{aX03SlUZj^gjL|E2cnAkG+ZqWpGN~C+Z|8tNK@dT;Jc4!<{`LfP{wTL&AhhsbvZh zpd_}y7uKy}TBjUmyOG4Nvv8A7pDj)4mvya$w@Pb)ohcc$0f<2O@V92BqbEk#sXy1b zjriIe{NCuv_qJQ8jZ9DHHYMsb)OM@SmR%+PrXZ~x6;7c5oo@&ZOY*sgCNiT;1w~f+20hAUsc^Quo}`j zd!Unl-r+~q_sn4bUC-uFOc3VPnYdZ0{t3;J4_7~qZ}-K72!hD=4Nu3;n@*-TP%@!7 zET6-|k*0W~*3J=)f_b_(dWlh_;QhlDdNOCbjNmk_qSD#Kez!<(qES#`Avjyi_M76M zz%ki|89)>>Tmq1!%YHhPTgL?2%=z% zqj`4WgmlaA&y3+R`U`JOCA)SXDIQ6&}ks4B)Cv>cQW5mjv3G z*Y;gbBofm6%iVg#g^s{Pg%MZ)uo;igto@RlGbi_~W&~VQ3tZbrE4;)DZhQ0y9%8-z zh3vVW3BzaRDN}X9vukDmUQyY+UeakAPQVQ3FBIiIteSpRv@h#s*Y3LrGdSQ|x+|Je zqn=U?q|~_$1K*M#JB?oNe%-F>6xg`$gjja;;W}*CLVJ!FI)* z^UlaPzs?~&8j+}vwY#0cknnjntT8D(Vf#^dLW*K}9)Jq4v92+MZIeKi5!hW>$Pp!I z(|vIp+S!B^=10{|pJwQWLA%TW^+s-)YDcY0v^7ra;_~sSb=QH((_{b^gw0gPXuy$` z4EBx5ojl^^u=&W2e8F6PMqlr&3Y1*j-hQA4*pnu{TZ&%x_*F%ScV&esj4PV}jTO23k`ad@}SGNX*xgUnkC z9C1cP(M!uvi*a-IB~pk+)PRL_5O%Ic1&wVCuHGTyYP=^_idlXh+z>n>ZvEctGF^zq zb0VwPys`OQd1B?_7;o$>Tsd5@u|(IuIlmhp3w0gYTjatUFO*nzT7q~wS2Q<}dJd@6 zstbehRtjw4tFG6M&pl>)z%;j3yP?37&`CPKNum)p zmREGMRO=Nd?O4v^#>zF@A~zSl;PA2)1YG*&J-M7x6L^!8SUhq1B~f~PuO<&hOo7xP zHDDvD=>^!hA163ea)`&>`(wEx!nF0CVK1=Kwe5(pxz2MZ zPKh)!Lbw>hAtGF1<)rgux2FM*!DNtZ%x zvKmXnttc5N(6Ix*)Ni~nMf(R|rog9ko0fO_(I8=X1eB*h!UVPE_5w8J!!+ZBym^z+ zI7$VGUK+x4w8%4vu-LmW&qxQN)+6C5b4Tr`mvTxgEJ`-amZ~x{^QCiyW(9>qnXiBE zN2pf&mEsBsee_~jfh^PL|VB%C2}=WhR~lg^Y+AF+&{2~StH6};#kv6uE8JrZ%C zVv_f0=Mp}UP`!AuKM?UZyX;rA$!~mxADMzvc&)9S?E1ArMYkNix!%6VeSqgq&C_2> zsGC(XG!QgaqB8`q{7=+{v#YE@mknb+e5~5m+pk?^)07`+i(%()+~1%`I;DWGQ}G48 z*oN?{Gi4UP)IdI0Jl0=W-}_$e>@;g&IS9iodt`fQU2Q7Fj64#_--yCl=R*Z0rNEVp ziC0T-<(im{@YYhL&STPQXR)n!^LlQ=SS!$dK{n0TIbME|FKS?$ebV0{%??d{Tz*jp z6Q32-4ZmnT{v)Dkx{a+OUdFrL3DJwg&)1&Th~J;6emGnA6VUtSqF1&$-y07m?R`Ny zIk<0`>BNn`i0=Y8kzrM>|Je* zq?^315U|0|QQax8`Eg+7{I&2+(|!u!-C764$-Jq-IOkB)0KI0WM1eE9=V<)t*>qh# zmM%jA=}+MzE2r?MQS(oREj7zhb-gattoh_Gfv%r>W}NY(Tc-AGhqJRwv{`|=e7=-m zX$RM$d2{T6i8E8|JOrJTw zM>^{rXHKiGHm+t)u`q`1-!MJA4l0*1U{T(;lH~P{%oe5$1|>JDR(p>*-kHQa4830X z;!L*}Z7GUWCt+v6%Wo}{Qf~zCETKlqO`UzIKw4csy3KhiQC8BZUSB^aO{=egDmR}i z6GrHgxN!M;+9-|P#7WwJFWwOzqcey=13?*vS;;()BQRUZB#;m_|H1P>5g_JRN?M&> zD4Y`g->PBw;vEYC6+Z-XT@iNn23zg9$PQ_-&G%_^_7vxXBKUY5j>Xl) z_^qA5F9T}bE$PDwycdMHa@(L`t+rR`r^7r3dB_5py-?&eR(Jo)ihEshn+xA6zfv+l zEyo0t6OYE1JxA@9jr!Z4|9$!VuhAYUO8l={0 zc3A2oT$NJ$V}NC5z+zVW*-SMRtmp(lg8^)lled~r(UB5i)rmWofbOPe&H{YpIrEM9 zU1I0#{z0u$?XURoQ@@FsOf6*UU%|1c<9nr14wV$rjoli0u{E2wXIz^if?SGW&%R2q zr{54?uZ2W>nBVSE=rPo!Zv86kEn=_KeN~OkG>d)Q=To%awuR1&yQ)Z0jmC50a`~C% zdXA~gNMI;~q`o=FjjO}1b-8M6`JG}vj5^!T{vVbTi`lctD#$PANnH)pluMd@5Y4`w z3-RqCDwA%b&j5?VuzIY>pVb#A_B_zcn|J9=GJWTH(--k8yPp@ zSmXOenQYA;$ivZ&=La*QReodAQ6}nCLrIMV1)dV51xS!qJNIs^d+= zQ+E+c5f=W3bWKKfP@!2VTfzfeVBBChM8M()CGjQz3^cCJQjY_+hW*dg|45OA^}aXn zFxBJ_;#ZzJ?KBJ0TwkcFwHXv(Yz;bmEj$m)f*I-5uwiv7%HpNfB{ z>w+l?P?f9J_IiIyl510HGoSXFi;o|9<}u&HP!e}^f?u4NNl%BNWzAP@H@@-!60IA_ zO+W3DE*!bnudVyH4>Un*(>i8fss`47;%)Ese!Y2peQo+^JjZ=QaH1WcxgY{Y#c5#E z%G$M_dQHXUSJue`Ck}_#u--(=i@rxxnlmZpVJakiMhV%6gl2DBCDjQ0k+Xvtd6t2U zZ|NDb&ZTreR}N&&h%G8TL^hYh)${LXu(ru!rkOT$bt>Ew+#u(2v zh$7dN!a{-gYLit2KNE9m_InI{R-M}4|7I3@-x;XMyJj`P8tP~!(y`d9Zk=N(ZJwa3 zh^hN=Y^#2ppJV-cdF^Ru?q&{M^gMFI1%IFEoD$|EHSz3_z_L3GBgevwqG_TXgbycyr4 z^F%~*2RR_K&)bt6N&G{Hbw%7WJ z&Vk*POk=9cna{Fd8NZ}dJ`E~-%i%5^J^~sX8<&NQH*)Sp|AfNZ$JMqE$QRZ=K51Dy zXS`K7GxATK%3q9rFNvr2GbVE6Yj9}jmXdHFV;Ln@NEQP@Bn>F-|E(XrTX%_?@bT^kV=vI2AKLlR#G0 z3p4f~_-7T8Mb=^^G^2TVW^;Lv5F9Xc+-yl2?B!51K7x*YYK})u$*A*g2o|Ez=6fVt zn&9PM%1Wcn1LBfFJk(@ip3)R_3>23+;8L~r#I3W&5ayH_sbE+_p2lf%*XJN$sOp*o zU(j69s^$P_z|`jHm|0Z5g@9PrQIKM>NgK`@8H|3(NydwxculDd#X{8cR|)S7(c-y3 zeT>gEzt8`1g{?YXJe+7WtFAs8BllWq# zpolceb|l65ACx1)&Ol9ce&Z`oT?-x>3>2)^UW^=t&plDAi;RI12@R51U$;%Ba-F>a z_qKggz^4#cM}Ll9pum3^p_naRmXDcDPkU(fIZ#nY))wUli;jC8cg=OtiNB(eYb{tW zXnFt4KE;p(hEQ7u$g#1U>8vfMla&^r2`d++0=VWSDJD90U0@zr*T7r|LO8ooa%{bh zKh6o6qey@!na`C_jvAipH_AZb`_K?>4|3vkS)3tsvd66i7$tKr5}`o~x#uOCt^zVF z`OW6ub#_W@sWm!fifa=^7vn&34m4 zjXWv1Fyil4?sb8J&);nk-zl&W?u9pM&wjw~sEwH~&h$;(Z?vHd<)%xHQ!oa829C?) zYUJh+x3s-PQ-EyzwZ(Ef_T-hab2FWuK5U0zfB!5AG*Z_ibP8HjBb;Fc>YPmH@=t@% zpimQ5>T1pIemM4-F-9&k@8;$miQ`j|Z(Zw7~M(+y&vLFGX^_V$_$hvQP409b4v=adEweuso#M!9Aet^6wuiQF>gn{L~fqxw8kFr z`uv!BHhdJzZpp7RjP(MRF*_ZDxANh+Fkgn{b7T9wrXV_jSmL0Ko#4~xsd`+<|1CPd|zFXr4Fe8--}tDG+pON z(Anc*X<7g)=rw!eX#5{4j8RE$3R)1zABq|MRa?Vr!*X0AnD>8MXvx-s;}Xxy9cVT{ zufefUy~PTMG5gh#Z=9sCW=`J@s74YA6BT|3^vN?$&c_pWPfvj}(389mI}Z=bJB6+^ z)j*O6W5y^(0&*c__^eLOfL`3jc7XA1UgnE(cBo4HD}(rS z_jc!Au)gPZG;(nnU-5w4Z>DMuGf@}dG1HMj9-0szRv$}V+f_= zjQjN`@*VN}2RLQ3=_B&#dU#;!6>vbmbG+r*s=1{cOKkHq1>KM`Iw94va5!ghYHj}I zw9F7Fbx&)nxX|{hNWr)I8seK9;@x8`NrS$g)c_iM3FhWI+I%QX{xHd4nh`SnKqNWd zQmex7≪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 M^IuR#SAYAz001tBF#rGn literal 0 HcmV?d00001 diff --git a/docs/images/latchd-preview.png b/docs/images/latchd-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba94dd252bf4471789a422360732f226819921e GIT binary patch literal 42555 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 literal 0 HcmV?d00001 diff --git a/docs/ui.md b/docs/ui.md new file mode 100644 index 0000000..f541286 --- /dev/null +++ b/docs/ui.md @@ -0,0 +1,39 @@ +# Latchd user interface + +Latchd starts on a virtual terminal. The interface keeps the session list and the login fields visible at the same time. + +![Login screen](images/latchd-preview.png) + +The screenshot comes from the Docker test image. It uses preview mode. Preview mode does not contact PAM or start a user session. + +## Help panel + +Press `?` to show the key reference. + +![Keyboard help](images/latchd-help.png) + +Use the following keys: + +- Press `Tab` or `Shift-Tab` to move focus. +- Press the arrow keys to choose a session. +- Press `/` to filter sessions or accounts. +- Press `Ctrl-N` or `Ctrl-P` to change the account. +- Press `Ctrl-R` to refresh account and session discovery. +- Press `Ctrl-B` to toggle the background. +- Press `Ctrl-M` to toggle reduced motion. +- Press `Enter` to authenticate. +- Press `Esc` to clear the password or close the help panel. +- Press `Ctrl-C` to restore the terminal and quit. + +These messages show account state before login. PAM accepts or rejects the login. + +## Capture method + +The capture uses a Docker PTY and the release binary from `latchd-test:local`: + +```sh +tmux new-session -d -x 120 -y 36 \ + 'docker run --rm -it latchd-test:local /workspace/target/release/latchd --preview --no-log' +``` + +The image in this directory contains the plain terminal capture. It does not show a host VT, a host compositor, or a real PAM login. diff --git a/rust/main.rs b/rust/main.rs index f107cbb..dcc1b9e 100644 --- a/rust/main.rs +++ b/rust/main.rs @@ -7,7 +7,7 @@ use std::{ fs::{self, OpenOptions}, io, os::unix::fs::{MetadataExt, OpenOptionsExt}, - path::PathBuf, + path::{Path, PathBuf}, }; use clap::Parser; @@ -34,8 +34,8 @@ const BUILD_TIME: &str = env!("LATCHD_BUILD_TIME"); )] struct Cli { /// Configuration TOML path. - #[arg(short, long, default_value = "/etc/latchd/config.toml")] - config: PathBuf, + #[arg(short, long)] + config: Option, /// Optional variable TOML path. #[arg(short = 'v', long)] variables: Option, @@ -79,17 +79,7 @@ fn run() -> Result<(), Error> { println!("version={BUILD_VERSION}\ncommit={BUILD_COMMIT}\nepoch={BUILD_TIME}"); return Ok(()); } - let config_path = if cli.config.exists() { - Some(cli.config.as_path()) - } else { - if cli.config.as_os_str() != "/etc/latchd/config.toml" { - return Err(Error::Config(format!( - "configuration does not exist: {}", - cli.config.display() - ))); - } - None - }; + let config_path = resolve_config_path(cli.config.as_deref(), cli.preview)?; if let Some(path) = cli.variables.as_deref() { if !path.exists() { return Err(Error::Config(format!( @@ -100,7 +90,7 @@ fn run() -> Result<(), Error> { } let variables_path = cli.variables.as_deref(); if !cli.preview { - if let Some(path) = config_path { + if let Some(path) = config_path.as_deref() { config::validate_source(path, "configuration")?; } if let Some(path) = variables_path { @@ -109,7 +99,7 @@ fn run() -> Result<(), Error> { } let mut config = Config::default(); if config_path.is_some() || variables_path.is_some() { - config = config::load(config_path, variables_path)?; + config = config::load(config_path.as_deref(), variables_path)?; } if let Some(tty) = cli.tty { if tty == 0 { @@ -148,7 +138,7 @@ fn run() -> Result<(), Error> { "already inside a session; use --preview".into(), )); } - if unsafe { libc::geteuid() } != 0 { + if !running_as_root() { return Err(Error::Config("latchd must run as root".into())); } validate_terminal()?; @@ -212,6 +202,33 @@ fn run() -> Result<(), Error> { Ok(()) } +fn resolve_config_path(explicit: Option<&Path>, preview: bool) -> Result, Error> { + if let Some(path) = explicit { + if path.exists() { + return Ok(Some(path.to_owned())); + } + return Err(Error::Config(format!( + "configuration does not exist: {}", + path.display() + ))); + } + + let system_path = Path::new(config::SYSTEM_CONFIG_PATH); + if !preview { + return Ok(system_path.exists().then(|| system_path.to_owned())); + } + + if let Some(path) = config::user_config_path().filter(|path| path.exists()) { + return Ok(Some(path)); + } + Ok(system_path.exists().then(|| system_path.to_owned())) +} + +fn running_as_root() -> bool { + // SAFETY: `geteuid` has no pointer arguments or memory preconditions. + unsafe { libc::geteuid() == 0 } +} + fn setup_logging(path: &std::path::Path) -> Result<(), Error> { const MAX_LOG_BYTES: u64 = 64 * 1024 * 1024; let parent = path diff --git a/scripts/test-cli.sh b/scripts/test-cli.sh index 67fcc60..8dc20fc 100755 --- a/scripts/test-cli.sh +++ b/scripts/test-cli.sh @@ -85,6 +85,14 @@ shown="$workdir/show-config" assert_contains "tty = 2" "$shown" assert_contains "pam_service" "$shown" +user_config_home="$workdir/config-home" +mkdir -p "$user_config_home/latchd" +sed 's/^tty = 2$/tty = 7/' "$config" >"$user_config_home/latchd/config.toml" +user_shown="$workdir/user-show-config" +HOME="$workdir/home" XDG_CONFIG_HOME="$user_config_home" \ + "$binary" --preview --show-config --no-log >"$user_shown" +assert_contains "tty = 7" "$user_shown" + unknown="$workdir/unknown.toml" printf 'unknown = true\n' >"$unknown" if "$binary" --preview --no-tui --no-log --config "$unknown" >"$workdir/unknown.out" 2>&1; then