From 1d89c7fdc74d85a8d1efeda26a3b21ef9cc9d0b4 Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Sat, 21 Mar 2026 15:55:32 +0100 Subject: [PATCH] Initial import --- .github/copilot-instructions.md | 104 ++++ .gitignore | 9 + LICENSE | 21 + README.md | 144 ++++++ docs/development-status.md | 61 +++ environment.yml | 14 + pyproject.toml | 38 ++ requirements.txt | 2 + src/r36s_dlna_browser/__init__.py | 1 + src/r36s_dlna_browser/__main__.py | 22 + src/r36s_dlna_browser/app.py | 173 +++++++ .../assets/NotoSans-Regular.ttf | Bin 0 -> 712460 bytes src/r36s_dlna_browser/assets/icons/audio.png | Bin 0 -> 998 bytes src/r36s_dlna_browser/assets/icons/audio.svg | 8 + src/r36s_dlna_browser/assets/icons/folder.png | Bin 0 -> 532 bytes src/r36s_dlna_browser/assets/icons/folder.svg | 8 + .../assets/icons/hud-display.png | Bin 0 -> 636 bytes .../assets/icons/hud-display.svg | 5 + .../assets/icons/hud-pause.png | Bin 0 -> 322 bytes .../assets/icons/hud-pause.svg | 4 + .../assets/icons/hud-play.png | Bin 0 -> 410 bytes .../assets/icons/hud-play.svg | 3 + .../assets/icons/hud-seek.png | Bin 0 -> 610 bytes .../assets/icons/hud-seek.svg | 5 + .../assets/icons/hud-stop.png | Bin 0 -> 338 bytes .../assets/icons/hud-stop.svg | 3 + .../assets/icons/hud-volume.png | Bin 0 -> 1139 bytes .../assets/icons/hud-volume.svg | 5 + src/r36s_dlna_browser/assets/icons/image.png | Bin 0 -> 1235 bytes src/r36s_dlna_browser/assets/icons/image.svg | 10 + .../assets/icons/playing.png | Bin 0 -> 378 bytes .../assets/icons/playing.svg | 6 + .../assets/icons/review.html | 100 ++++ src/r36s_dlna_browser/assets/icons/server.png | Bin 0 -> 1361 bytes src/r36s_dlna_browser/assets/icons/server.svg | 12 + src/r36s_dlna_browser/assets/icons/video.png | Bin 0 -> 1027 bytes src/r36s_dlna_browser/assets/icons/video.svg | 6 + src/r36s_dlna_browser/dlna/__init__.py | 0 src/r36s_dlna_browser/dlna/browser_state.py | 150 ++++++ src/r36s_dlna_browser/dlna/client.py | 221 +++++++++ src/r36s_dlna_browser/dlna/discovery.py | 105 ++++ src/r36s_dlna_browser/dlna/models.py | 105 ++++ src/r36s_dlna_browser/platform/__init__.py | 0 src/r36s_dlna_browser/platform/controls.py | 62 +++ src/r36s_dlna_browser/platform/runtime.py | 32 ++ src/r36s_dlna_browser/player/__init__.py | 0 src/r36s_dlna_browser/player/backend.py | 46 ++ .../player/gstreamer_backend.py | 440 +++++++++++++++++ src/r36s_dlna_browser/ui/__init__.py | 0 src/r36s_dlna_browser/ui/screens.py | 301 ++++++++++++ src/r36s_dlna_browser/ui/sdl_app.py | 463 ++++++++++++++++++ src/r36s_dlna_browser/ui/theme.py | 80 +++ tests/test_client_parser.py | 131 +++++ tests/test_controls.py | 79 +++ tests/test_didl_mapping.py | 120 +++++ tests/test_navigation_state.py | 134 +++++ tests/test_player.py | 357 ++++++++++++++ tests/test_runtime.py | 40 ++ tests/test_sdl_app.py | 122 +++++ 59 files changed, 3752 insertions(+) create mode 100644 .github/copilot-instructions.md create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/development-status.md create mode 100644 environment.yml create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 src/r36s_dlna_browser/__init__.py create mode 100644 src/r36s_dlna_browser/__main__.py create mode 100644 src/r36s_dlna_browser/app.py create mode 100644 src/r36s_dlna_browser/assets/NotoSans-Regular.ttf create mode 100644 src/r36s_dlna_browser/assets/icons/audio.png create mode 100644 src/r36s_dlna_browser/assets/icons/audio.svg create mode 100644 src/r36s_dlna_browser/assets/icons/folder.png create mode 100644 src/r36s_dlna_browser/assets/icons/folder.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-display.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-display.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-pause.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-pause.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-play.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-play.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-seek.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-seek.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-stop.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-stop.svg create mode 100644 src/r36s_dlna_browser/assets/icons/hud-volume.png create mode 100644 src/r36s_dlna_browser/assets/icons/hud-volume.svg create mode 100644 src/r36s_dlna_browser/assets/icons/image.png create mode 100644 src/r36s_dlna_browser/assets/icons/image.svg create mode 100644 src/r36s_dlna_browser/assets/icons/playing.png create mode 100644 src/r36s_dlna_browser/assets/icons/playing.svg create mode 100644 src/r36s_dlna_browser/assets/icons/review.html create mode 100644 src/r36s_dlna_browser/assets/icons/server.png create mode 100644 src/r36s_dlna_browser/assets/icons/server.svg create mode 100644 src/r36s_dlna_browser/assets/icons/video.png create mode 100644 src/r36s_dlna_browser/assets/icons/video.svg create mode 100644 src/r36s_dlna_browser/dlna/__init__.py create mode 100644 src/r36s_dlna_browser/dlna/browser_state.py create mode 100644 src/r36s_dlna_browser/dlna/client.py create mode 100644 src/r36s_dlna_browser/dlna/discovery.py create mode 100644 src/r36s_dlna_browser/dlna/models.py create mode 100644 src/r36s_dlna_browser/platform/__init__.py create mode 100644 src/r36s_dlna_browser/platform/controls.py create mode 100644 src/r36s_dlna_browser/platform/runtime.py create mode 100644 src/r36s_dlna_browser/player/__init__.py create mode 100644 src/r36s_dlna_browser/player/backend.py create mode 100644 src/r36s_dlna_browser/player/gstreamer_backend.py create mode 100644 src/r36s_dlna_browser/ui/__init__.py create mode 100644 src/r36s_dlna_browser/ui/screens.py create mode 100644 src/r36s_dlna_browser/ui/sdl_app.py create mode 100644 src/r36s_dlna_browser/ui/theme.py create mode 100644 tests/test_client_parser.py create mode 100644 tests/test_controls.py create mode 100644 tests/test_didl_mapping.py create mode 100644 tests/test_navigation_state.py create mode 100644 tests/test_player.py create mode 100644 tests/test_runtime.py create mode 100644 tests/test_sdl_app.py diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..af6618b --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,104 @@ +# Copilot Instructions + +## Product Goal + +Build a balanced, production-oriented first milestone for an R36S DLNA browser with Wi-Fi support. + +The application must: + +- run on R36S-class Linux firmware derived from ArkOS +- use Python for the application logic +- use SDL2 for the user interface and input handling +- discover DLNA/UPnP media servers on the local LAN +- allow hierarchical browsing of remote media content +- support local playback on the device +- stay lightweight enough for RK3326-class hardware + +## Balanced Development Plan + +Copilot should follow this plan unless the user explicitly changes priorities. + +### Phase 1 - Project Bootstrap + +- Create a clean Python project layout with a package entrypoint. +- Keep dependencies minimal and explicit. +- Prefer simple run scripts and documentation that also make sense on-device. + +### Phase 2 - DLNA Discovery And Browsing + +- Implement SSDP discovery for media servers in the LAN. +- Filter and normalize DLNA MediaServer devices. +- Build a ContentDirectory client for browsing containers and media items. +- Support pagination, caching, and safe handling of incomplete metadata. + +### Phase 3 - SDL2 User Interface + +- Design the UI for 640x480 with readable typography and low visual overhead. +- Optimize navigation for D-pad controls with A/B and shoulder buttons. +- Keep the UI responsive while network operations run asynchronously. + +### Phase 4 - Milestone 2: Integrated GStreamer Playback + +- Implement playback through GStreamer inside the application process instead of launching an external player subprocess. +- Prefer the system GStreamer stack via `PyGObject` and `GstPlayBin` rather than custom decode loops. +- Prefer decoding video to `GstAppSink` and rendering frames through SDL2 so playback does not depend on a window manager, native overlay sinks, or X11 embedding. +- Support play, pause/resume, stop, relative seek, automatic return to browser on end-of-stream, and explicit error reporting when decode or frame upload fails. +- Keep the architecture ready for follow-up work on on-screen playback HUD, resume state, and device-specific video backend tuning. + +### Phase 5 - Milestone 3: SDL Video Viewport, HUD, and Wayland Compatibility + +- Reserve an explicit video viewport inside the SDL window and scale decoded video to that viewport instead of using the full window surface. +- Render a full playback HUD in SDL around the video area, including title, state, elapsed/duration, progress, volume, cache/buffer hints, resolution, and visible controls. +- Make the playback HUD controllable with the same device inputs used elsewhere in the app, at minimum covering pause/resume, stop, seek, and volume. +- Prefer SDL backends that work without a window manager on target hardware, especially `kmsdrm` on R36S-class devices. +- If the chosen frame upload path is too slow on target hardware, optimize within the SDL-rendered path rather than falling back to external overlay windows. + +### Phase 6 - Device Integration And Hardening + +- Handle Wi-Fi instability, timeouts, malformed XML, missing thumbnails, and unsupported media. +- Keep memory use and redraw frequency conservative. +- Document firmware assumptions, runtime prerequisites, and launch steps. + +### Phase 7 - Validation + +- Add focused tests for parsing, navigation state, and non-UI logic. +- Verify manually on a real LAN and, when possible, on the target device. +- Prefer incremental, testable milestones over broad unfinished features. + +## State Tracking Requirements + +Copilot must treat development state as a living artifact, not as implicit context. + +- Track the current milestone, completed work, in-progress work, blockers, and next steps. +- Keep a repository status file updated during development at `docs/development-status.md`. +- Update that status file whenever a meaningful implementation step is completed, re-scoped, or blocked. +- Record only verified state, not guesses. +- Keep status entries concise, factual, and ordered by relevance to current work. +- If the plan changes, update both the active implementation and the tracked status. + +The status file should normally include: + +- current milestone +- current architecture decisions +- completed tasks +- tasks in progress +- blockers or open questions +- next recommended actions + +## Implementation Preferences + +- Favor simple, explicit modules over premature abstraction. +- Separate SDL2 UI concerns from networking and playback concerns. +- Keep async/network code isolated behind small adapters. +- Avoid features that increase complexity before the core browsing flow is stable. +- Prefer integrated GStreamer playback over subprocess control for Milestone 2. +- Prefer SDL-rendered playback from decoded frames over platform-specific window embedding on R36S-class targets. +- For Milestone 3, keep video and HUD in the same SDL render pass so the design remains compatible with DRM/KMS-only environments. + +## Quality Bar + +- Fix root causes when practical. +- Avoid unrelated refactors. +- Preserve performance on low-end ARM hardware. +- Make every milestone runnable, not just partially scaffolded. +- Treat documentation and development-state tracking as part of the deliverable. \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..979c448 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +__pycache__/ +*.py[cod] +.pytest_cache/ +.venv/ +.mypy_cache/ +.ruff_cache/ +build/ +dist/ +*.egg-info/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..44a11fe --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Matteo Benedetto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4eb340c --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# R36S DLNA Browser + +A lightweight DLNA media browser for the R36S handheld, built with Python, SDL2, and GStreamer. + +Author: Matteo Benedetto + +## Features + +- Discover DLNA/UPnP media servers on local LAN via SSDP +- Browse media libraries hierarchically with D-pad navigation +- Play audio and video locally via integrated GStreamer playback inside the SDL window +- Optimised for 640×480 screen and low-power RK3326 hardware + +## System Prerequisites + +Install these system packages before running (Ubuntu/Debian-based): + +```bash +sudo apt install libsdl2-2.0-0 libsdl2-ttf-2.0-0 python3 python3-pip python3-gi gir1.2-gstreamer-1.0 gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good +``` + +On Fedora the equivalent runtime packages are: + +```bash +sudo dnf install SDL2_ttf python3-gobject gstreamer1 gstreamer1-plugins-base gstreamer1-plugins-good python3 python3-pip +``` + +The current playback path is SDL-only: GStreamer decodes into frames and the app +renders them inside the SDL renderer. This avoids any dependency on X11, +Wayland embedding, or a window manager and is aligned with DRM/KMS-only targets. + +On ArkOS-derived firmware the SDL2 libraries are typically pre-installed. + +A TrueType font is bundled inside the package at `src/r36s_dlna_browser/assets/` +so packaged builds do not depend on a system font path. System font fallbacks are +still kept for development machines. + +## Quick Start + +```bash +cd /path/to/R36SHack +python3 -m pip install -e ".[dev]" +python3 -m r36s_dlna_browser +``` + +## Miniforge / Conda Deploy + +Use Miniforge or Miniconda when you want a reproducible Linux development or +packaging environment with GStreamer and SDL dependencies managed together. + +```bash +cd /path/to/R36SHack +conda env create -f environment.yml +conda activate r36s-dlna-browser +python -m r36s_dlna_browser +``` + +To update an existing environment after dependency changes: + +```bash +conda env update -f environment.yml --prune +conda activate r36s-dlna-browser +``` + +Or without installing: + +```bash +cd /path/to/R36SHack +pip install -r requirements.txt +PYTHONPATH=src python3 -m r36s_dlna_browser +``` + +## Controls + +| Key / Button | Action | +|-------------|----------------------| +| Up / Down | Navigate items | +| Left / Right | Page up / down | +| A (Return) | Select / Enter | +| B (Escape) | Back | +| Start | Quit | + +During playback, the same controls are remapped to transport actions: + +- `A`: pause / resume +- `B`: stop and return to browser +- `Left / Right`: seek `-10s / +10s` +- `Up / Down`: volume `+5 / -5` +- `H` / `Y`: cycle HUD mode (`auto / fixed / hidden`) + +## On-Device (R36S / ArkOS) + +1. Copy the project to `/roms/ports/` or another writable location. +2. Ensure Wi-Fi is connected. +3. Run via PortMaster or a launch script: + +```bash +cd /roms/ports/R36SHack +PYTHONPATH=src python3 -m r36s_dlna_browser +``` + +## Git / Release Workflow + +For publication on a Gitea instance with `tea`, initialize git locally, create a +remote repository, then push the current branch. + +```bash +git init +git add . +git commit -m "Initial import" +tea repos create --name R36SHack --description "SDL2/GStreamer DLNA browser for R36S" --owner enne2 +git remote add origin git@git.enne2.net:enne2/R36SHack.git +git push -u origin main +``` + +## Project Structure + +``` +src/r36s_dlna_browser/ +├── __main__.py # Entrypoint +├── app.py # Application lifecycle +├── assets/ +│ └── NotoSans-Regular.ttf +├── dlna/ +│ ├── discovery.py # SSDP media-server discovery +│ ├── client.py # ContentDirectory browsing via DmsDevice +│ ├── models.py # Domain models for servers/items +│ └── browser_state.py # Navigation stack and cache +├── ui/ +│ ├── sdl_app.py # SDL2 window, event loop, rendering +│ ├── screens.py # Screen definitions +│ └── theme.py # Layout constants for 640×480 +├── player/ +│ ├── backend.py # Player interface +│ └── gstreamer_backend.py # integrated GStreamer playback backend +└── platform/ + ├── controls.py # Input mapping + └── runtime.py # Runtime detection and logging +``` + +## License + +MIT + diff --git a/docs/development-status.md b/docs/development-status.md new file mode 100644 index 0000000..d0a27bd --- /dev/null +++ b/docs/development-status.md @@ -0,0 +1,61 @@ +# Development Status + +## Current Milestone + +Milestone 3 — SDL Video Viewport, HUD, and Wayland Compatibility + +## Current Architecture Decisions + +- **Language / UI**: Python 3.9+ with PySDL2 (ctypes wrapper around system SDL2) +- **DLNA Discovery**: Custom SSDP M-SEARCH implementation using asyncio datagrams + aiohttp for device description XML +- **Content Browsing**: Direct SOAP/XML ContentDirectory client with DIDL-Lite parser (no dependency on async-upnp-client browsing at runtime — only aiohttp) +- **Playback**: integrated GStreamer backend via `PyGObject` / `GstPlayBin`, decoding video into `GstAppSink` frames that are uploaded to SDL textures and rendered in the main SDL renderer +- **Playback viewport**: SDL scales decoded video into a dedicated playback viewport in the same render pass as the HUD, with full-width video bounds and a black playback backdrop outside the viewport +- **Concurrency**: Dedicated asyncio event loop in a daemon thread; thread-safe queues bridge it to the SDL2 main loop +- **Input**: Keyboard mapping for desktop testing + SDL2 GameController for R36S D-pad/buttons +- **Font**: Bundled package font preferred first; system font fallback kept only for development hosts +- **UI icons**: prefer bundled monochrome glyphs or a bundled icon font subset instead of depending on OS emoji fonts +- **Playback HUD**: SDL-rendered overlay is now simplified and compact, uses bundled playback icons, uses a smaller dedicated playback font with title ellipsis for 640x480 readability, supports auto-hide or fixed visibility, stays visible while playback is paused, and remains in the same SDL render pass as video +- **Wayland / DRM strategy**: playback no longer depends on native overlay sinks or X11 window handles; R36S-class targets continue to prefer `kmsdrm` when no display server is present +- **Deploy packaging**: a `conda-forge`-oriented `environment.yml` now defines a reproducible Miniforge/Miniconda environment for local development and release preparation + +## Completed Tasks + +- Phase 1: Project bootstrap (`pyproject.toml`, `requirements.txt`, `README.md`, package layout under `src/`) +- Phase 2: DLNA discovery (`dlna/discovery.py` — SSDP M-SEARCH, friendly-name fetch) and browsing (`dlna/client.py` — SOAP Browse, DIDL-Lite parser with relative-URL resolution + `dlna/models.py` domain models + `dlna/browser_state.py` navigation stack/cache) +- Phase 3: SDL2 UI (`ui/sdl_app.py` — window, event loop, input dispatch; `ui/screens.py` — server list, browse list, playback, error screens; `ui/theme.py` — 640×480 layout constants) +- Phase 4: Playback (`player/backend.py` abstract interface + `player/gstreamer_backend.py` integrated GStreamer backend) +- Phase 5: Device integration (`platform/controls.py` — keyboard + gamecontroller mapping; `platform/runtime.py` — logging, R36S heuristic, SDL env hints) +- Phase 7: Tests — 75 tests across 7 test files all passing (DIDL mapping, SOAP/XML parser, navigation state, playback backend, SDL redraw policy, input controls, runtime environment setup) +- Desktop runtime verification completed: fixed SSDP discovery socket setup for IPv4 and removed pending-task shutdown noise from the async worker thread +- Packaging hardening: bundled a local UI font asset and configured setuptools to ship it with the package +- Real LAN regression fixed: Browse SOAP parser now handles `Result` elements both with and without a namespace, matching responses from the discovered MiniDLNA/Jellyfin servers +- Playback backend pivoted to GStreamer because libmpv continued to create a separate native window on the desktop host instead of remaining embedded in the SDL UI +- Milestone 2 is now implemented with GStreamer: playback uses `GstPlayBin` plus `GstAppSink` instead of an external player, libmpv, or native overlay sinks +- SDL playback flow updated: decoded GStreamer frames are uploaded into SDL textures, playback end-of-stream returns automatically to the browser, and playback controls support pause/resume, relative seek, and volume +- Milestone 3 implemented in code: SDL scales video into a dedicated viewport inside the SDL window, with reserved HUD margins instead of using the whole window area for video +- Playback HUD expanded: progress bar, elapsed/duration, volume, buffer, resolution, and control legends are rendered around the video area and updated from GStreamer bus/pipeline queries +- Playback-page flashing root cause addressed by removing native overlay composition entirely: video and HUD are now rendered together by SDL in one pass, with redraws driven by decoded frame availability and HUD state changes +- Playback HUD simplified: the border around the video area was removed, playback control/status icons were added as bundled SVG+PNG assets, the title/timer top bar no longer overlaps, and playback now supports `auto / fixed / hidden` HUD modes through a dedicated command while staying visible when paused +- Deployment assets added: `.gitignore`, `environment.yml`, and a real `LICENSE` file so the project can be initialized and published as a clean git repository +- Copilot instructions and this status file + +## Tasks In Progress + +- Verify that the SDL-texture playback path is smooth enough on real host playback and on R36S hardware +- Measure whether BGRA frame upload is acceptable on RK3326 or whether a future YUV texture path is needed + +## Blockers Or Open Questions + +- `SDL2_ttf` system library needed for text rendering (`sudo dnf install SDL2_ttf` on Fedora, `sudo apt install libsdl2-ttf-2.0-0` on Debian/Ubuntu). The app handles its absence gracefully but will show no text. +- Integrated playback requires system GStreamer plus Python GI bindings (for Fedora: `python3-gobject gstreamer1 gstreamer1-plugins-base gstreamer1-plugins-good`; add codec/plugin packages as needed for target media). +- Root browse verified against two real DLNA servers on the LAN. +- On-device testing on R36S hardware is pending. +- The current SDL-texture path avoids window-manager dependencies but may still need optimization on low-end hardware if BGRA upload cost is too high. + +## Next Recommended Actions + +1. Run a visual playback smoke test and confirm SDL-rendered video plus HUD eliminates flashing on host playback. +2. Validate the SDL-texture playback path on the target R36S `kmsdrm` backend. +3. Measure CPU/load on RK3326 hardware during audio and video playback. +4. If RGBA upload cost is too high, add a follow-up YUV texture upload path using `SDL_UpdateYUVTexture`. \ No newline at end of file diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..5f56013 --- /dev/null +++ b/environment.yml @@ -0,0 +1,14 @@ +name: r36s-dlna-browser +channels: + - conda-forge +dependencies: + - python=3.11 + - pip + - pygobject + - gstreamer + - gst-plugins-base + - gst-plugins-good + - sdl2 + - sdl2_ttf + - pip: + - -e .[dev] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..5c074ee --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,38 @@ +[build-system] +requires = ["setuptools>=68.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "r36s-dlna-browser" +version = "0.1.0" +description = "DLNA media browser for R36S handheld (ArkOS-derived Linux)" +readme = "README.md" +requires-python = ">=3.9" +license = "MIT" +authors = [ + {name = "Matteo Benedetto"}, +] +dependencies = [ + "PySDL2>=0.9.16", + "async-upnp-client>=0.38.0", +] + +[project.optional-dependencies] +dev = [ + "pytest>=7.0", + "pytest-asyncio>=0.21", +] + +[project.scripts] +r36s-dlna = "r36s_dlna_browser.__main__:main" + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.package-data] +"r36s_dlna_browser" = ["assets/*.ttf", "assets/icons/*.png"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +asyncio_mode = "auto" + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..31b6eca --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +PySDL2>=0.9.16 +async-upnp-client>=0.38.0 diff --git a/src/r36s_dlna_browser/__init__.py b/src/r36s_dlna_browser/__init__.py new file mode 100644 index 0000000..6f46935 --- /dev/null +++ b/src/r36s_dlna_browser/__init__.py @@ -0,0 +1 @@ +"""R36S DLNA Browser – lightweight DLNA media browser for R36S handhelds.""" diff --git a/src/r36s_dlna_browser/__main__.py b/src/r36s_dlna_browser/__main__.py new file mode 100644 index 0000000..f7c2e73 --- /dev/null +++ b/src/r36s_dlna_browser/__main__.py @@ -0,0 +1,22 @@ +"""Entrypoint for ``python -m r36s_dlna_browser``.""" + +from __future__ import annotations + +import sys + + +def main() -> None: + from r36s_dlna_browser.app import Application + + app = Application() + try: + app.run() + except KeyboardInterrupt: + pass + finally: + app.shutdown() + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/src/r36s_dlna_browser/app.py b/src/r36s_dlna_browser/app.py new file mode 100644 index 0000000..ccc75ba --- /dev/null +++ b/src/r36s_dlna_browser/app.py @@ -0,0 +1,173 @@ +"""Application lifecycle – wires together UI, DLNA networking and playback.""" + +from __future__ import annotations + +import asyncio +import logging +import queue +import threading +from typing import Any + +from r36s_dlna_browser.dlna.browser_state import BrowserState +from r36s_dlna_browser.dlna.discovery import DLNADiscovery +from r36s_dlna_browser.dlna.client import DLNAClient +from r36s_dlna_browser.player.gstreamer_backend import GStreamerBackend +from r36s_dlna_browser.platform.runtime import configure_logging, sdl_env_setup +from r36s_dlna_browser.ui.sdl_app import SDLApp + +log = logging.getLogger(__name__) + + +class Application: + """Top-level application that owns the event loop, UI and networking.""" + + def __init__(self) -> None: + configure_logging() + sdl_env_setup() + self.ui_queue: queue.Queue[Any] = queue.Queue() + self.cmd_queue: queue.Queue[Any] = queue.Queue() + + self.browser_state = BrowserState() + self.discovery = DLNADiscovery() + self.client = DLNAClient() + self.player = GStreamerBackend() + self.player.set_event_callback(self._handle_player_event) + + self._async_loop: asyncio.AbstractEventLoop | None = None + self._net_thread: threading.Thread | None = None + self._shutting_down = False + + # ── public API ─────────────────────────────────────────────── + + def run(self) -> None: + """Start the networking thread and enter the SDL2 main loop.""" + self._start_network_thread() + self.browser_state.loading = True + self._schedule(("discover",)) + + sdl = SDLApp( + ui_queue=self.ui_queue, + cmd_queue=self.cmd_queue, + browser_state=self.browser_state, + player=self.player, + ) + sdl.run() # blocks until quit + + def shutdown(self) -> None: + self._shutting_down = True + self._schedule(("shutdown",)) + if self._net_thread and self._net_thread.is_alive(): + self._net_thread.join(timeout=2) + self.player.shutdown() + log.info("Application shut down.") + + # ── networking thread ──────────────────────────────────────── + + def _start_network_thread(self) -> None: + self._net_thread = threading.Thread( + target=self._run_async_loop, daemon=True, name="dlna-net" + ) + self._net_thread.start() + + def _run_async_loop(self) -> None: + self._async_loop = asyncio.new_event_loop() + asyncio.set_event_loop(self._async_loop) + try: + self._async_loop.run_until_complete(self._command_dispatcher()) + finally: + pending = [ + task + for task in asyncio.all_tasks(self._async_loop) + if not task.done() + ] + for task in pending: + task.cancel() + if pending: + self._async_loop.run_until_complete( + asyncio.gather(*pending, return_exceptions=True) + ) + self._async_loop.close() + + async def _command_dispatcher(self) -> None: + """Poll cmd_queue for commands from the UI thread and dispatch them.""" + loop = asyncio.get_running_loop() + while not self._shutting_down: + try: + cmd = await loop.run_in_executor(None, self.cmd_queue.get, True, 0.1) + except queue.Empty: + continue + try: + await self._handle_command(cmd) + except Exception as exc: + log.exception("Error handling command %s", cmd) + self.browser_state.loading = False + self.ui_queue.put(("error", str(exc))) + + async def _handle_command(self, cmd: tuple) -> None: + action = cmd[0] + if action == "discover": + servers = await self.discovery.find_servers() + self.browser_state.set_servers(servers) + self.browser_state.loading = False + self.ui_queue.put(("servers_updated",)) + + elif action == "browse": + server_location = cmd[1] + object_id = cmd[2] + items = await self.client.browse(server_location, object_id) + self.browser_state.set_items(items, object_id) + self.browser_state.loading = False + self.ui_queue.put(("items_updated",)) + + elif action == "play": + url = cmd[1] + title = cmd[2] if len(cmd) > 2 else "" + self.player.play(url) + self.browser_state.playback_paused = False + self.ui_queue.put(("playback_started", title)) + + elif action == "stop": + self.player.stop() + + elif action == "toggle_pause": + paused = self.player.toggle_pause() + self.browser_state.playback_paused = paused + self.ui_queue.put(("playback_paused" if paused else "playback_resumed",)) + + elif action == "seek": + self.player.seek(cmd[1]) + + elif action == "volume": + volume = self.player.change_volume(cmd[1]) + self.browser_state.playback_volume = volume + + elif action == "shutdown": + self._shutting_down = True + self.player.shutdown() + + # ── helpers ────────────────────────────────────────────────── + + def _schedule(self, cmd: tuple) -> None: + self.cmd_queue.put(cmd) + + def _handle_player_event(self, event: str, *args: Any) -> None: + if event == "stopped": + self.browser_state.playback_paused = False + self.ui_queue.put(("playback_stopped",)) + elif event == "position" and args: + self.browser_state.playback_position = float(args[0]) + elif event == "duration" and args: + self.browser_state.playback_duration = float(args[0]) + elif event == "paused" and args: + self.browser_state.playback_paused = bool(args[0]) + elif event == "volume" and args: + self.browser_state.playback_volume = int(args[0]) + elif event == "buffering" and args: + self.browser_state.playback_buffer_percent = int(args[0]) + elif event == "cache" and args: + self.browser_state.playback_cache_seconds = float(args[0]) + elif event == "resolution" and args: + self.browser_state.playback_resolution = str(args[0]) + elif event == "error" and args: + self.browser_state.playback_paused = False + self.ui_queue.put(("error", str(args[0]))) diff --git a/src/r36s_dlna_browser/assets/NotoSans-Regular.ttf b/src/r36s_dlna_browser/assets/NotoSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..18e7353a93fda415c8690d5d9028189be16cc305 GIT binary patch literal 712460 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

    +2HG0kGfKl>M7-Fb1xLy8%0X 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�*4eAVWDuT+YtP7$Q?9z?0V)v27 zOU`XHh1SdhiQvyp&m8VFx5wk{CbDYIMT^7X#TU&vY44mldr!J*$CXzv+uGi~72`;w zFFIhHTn3VgQ`szekUO5|xJtcpAoyhOZ1PWk)L5yOw=}^P7Fi%?Fj7WsJhSA1@(=ga z43tPzHdXZ_@je(uM~A#2V|u72y(AVKNnAtL_C6XPn_1h`?6fv%tJT3-P4&wb$FC|F zM#1xj(!xjSDA~icz)B)*0>Umlhhy%;6Ws zf~naTTsgXqD(5hg%ppS{4zQp5ZsNesA_HAga9z5mdnX@{E-ASvh zEl%k}F(%2MF|R-$A_9F_L0tSf zQgneXIAT6|5eS0|WP&Ua$O0n~m>$#(uQ=Dw2$@gar3L8~8U}$jWKXbO*ZjDaqa7V+UKnXu)fpL2xjt(dN_W+wqpKUqbTNI$EHyrJxaF?6Rm52!~M`fn-gdq<<@>Xwen*q_4h?(u?7>ksP@& zQBq+R2*!R2u$>Z(@mn_wG-KJh?QK6^#;69Q8AWCb=_6s7l;Voai9a&==4{;1=;I{R zrG=$vGiT%Os0dO{%BIMXtDU8soK2AeW)`X8Bpi%&ST1wsWYR{<;Sh73r6`eWfYpVq zFiSBaSDL{fhCWNt0j86}a0uJSQfOVhBnk}S!^lz;xGT7i91w8kmr$Ic$NGf)T)>&7 zP&1eaxlh2ErO1)1ouvS0mI7xJ;QUJgXO?2ld*1 zxx)g^ECsy^{noQk+hQhU&K5~H6`}d*toaH7-Chy7>8!yUH{QSv91a5~b49GZF1T2H zlb4r5pifbThdja{Xv7x__bN)qtjd@rrzTrlq=2I%o1v)X>+gU--;&GtCBR3{-Gy&lxt7^nFatI&GKlR|fS2GvAK_~t z>$_oPC!YS(HvK2JSowtP!Bb|>nlbm}`(=-*UYq`td;VL$zj`9RpyH;`FMk=jsbWF= z3BGyy@9DolGvgwdg+o@9(xW!)_65QuxO9?|j>Wa%<=sTJXZiB#$i_KykB{)OG}(xJ zv`v&RNb|M9MH?73wW&3UvkO2@4s+U5BFxz z(OqOmR~NXN5(=p^L^GMxOC5XM66GGxPm)_s`-HUfkN@jmD6bMAtDzznQx>S96wvKX zC@P7rh5z$!R#f`W|Aaet;_QFbR`Q2XpawqOePS&nJP|k=mEbkG096{>=<1f%)nit# zZeV_0?fgDHx1eV z;EL~81{B9MyF1aNH}V^2QAG-C33TKXFPane3O zQv755*Ltg!o@kI8vk!bImvUS7K}E&}$S8m30RQvZ7K_bfve9cSg>Q1mY^6_DbM716 zKL9$^%ccR_Q)46?`9Zh~bGU+mbEPeOTeBIrq2c;7wUNxrJyExOau{badY#$)8}^N> zGhu-s3V{YbjCoK+U0o6}mn&ANB6&p$$8+ck6d%J~vu9$>zo1vahF+u68x=|;{l1{- zj)$8*s3tX9lSzxu#Fu*f(;xau>tG0U8XK zaKOrzI@Lu|RT`{hDE0~RTXjI`8*td&QmGxAQ4KlI%%5q9qK`+VQn%eP;8O}fDXtE&s? z7B%l9hH9Sarx=QuwUFm<>j=*=R85zWFzEPu#rR6aP}~DPS>~ zEM}a0Zl@0>vzh;ZrI<{(R1|NfzJY5DxE4>xH6N$^=V>_QwP#xTq8t|d8@VTLPVQ;q zXSpYCN$!cP&!Wq}lYJ1dr1+x|W{Ph18%x5JIm+qDzo{b5zdGXV;wFdUoLKd+)`c)^h@9-}8I=i`;V#($5K;bML+QgTh4ogW``fdoXgMLY1wM zmLvXn;w=6F-Irf4i5>`@A7y4npTno&?~{WGRxm{f#NYEgjV`CN6jz`9K9VEF*JdBM zO=c@4wN~@Qc{zehlDVhcH*op(#KPTpSqAX~r_~ReO8@r+qLW{Aujnb#2r(JFR`euN zJfe??9-?y*)hDBSS7a=rmouMHWvPa7F?wJ^7ygR6WU|iWcGzU~;ktUa!(yeE1t>G0 zlN+&`l+Y9TL87r$6%>_}`r;fJM^u{p?uKfS?OEMFQdFzVwezBjH|S#?wXLep3C_p3 zp9E2+T&3w4cX5HNv_YetKU&kCFjYFjp0d}?7OTl*wV27KQdOxXRHKj8!`(q-0T%nF zut3O-?9mU1KdTT^O=t|mg<>iAD3c^ZV{UBG#$(V>$lTRHqpeUToy0aB4CI%P^GRWqv!fEf1_Qi$?Ab}a!i}oHb&)`QL9fkFt4_5e*d4;`C<%M-5Eql zjt8eMWMYsUi$b2yz0P<`|M?l$PWJJ zE;2eo#+S=MkgQ*PeM@%LI~?Xq3D|&=brY4{-A<179sTQ zf;5UF4=8Bavjp>h@&~L3@_$uu42lI&L(C1p)A!WE-f!EDlRVONO5VA94<=YGTfw$Ag~+`4-v8xUXumovVvl;S{YFw7*#}5D6J|jg{?+ugU*CDY3qnt>aS8k z7%VYVDvBLaX?bZe`lUp#ESH#-Vy%=b(kO_lq@-rL=NH?&U`9XK$DlZ zzly-P1_Vt*h=f2rIw{b9A5YIuKR!sp{PRH)C9xoXh=hau^Ze6VvssI+3^5sXI-^Oi z&wUeH_Dzt)Ni2kzB+(%M9Dfi$WiTc(8ewh5KWjA_tX6~3%5BU&@dtBn>F7<#C&UG* z8@(w$#6K``miXhZzvLf05RKAXuoh*uaswb;&@ySJ_VgeLFr0J97m=#e@&qiW{^2A$KXGdMmp$W30K(Hv{7nYqZQ>XPfCwPs(yW(X$^JFQkH zZsbP&fy_Cg7ZIL~4wDF$8fLKut|fv;m@q&I$)WL4ZN@bYz24>0>m6%L^)2mf zM(4~Casw@_niX~`Cd!$N_fQQ0jSVwx2HqJX1uypJ&A!a08-Jm|QN@JD6TwbA&mRFb>h|bw$)g`pLTCLSmQBs8M zYnesU8pC#07gXwP71B~!xf}tj>1w_QJawzUQwyn43-~JO+qEn4DS5k&ynPhLB%)QK zTge-ohPkUvX|le@S&djCW8v^vBr+Nfk47Bzc6+_U(O|bX+=|2~O^gB{X>V{$zGL$H z^bJndhg8^;=F89D$D?D%GUo5v$K-_OsohJKd4q#9CXOB%61^_Ift*Y&0oZN8%o2q; zd%=Z}a#^#O`v`Ys6-OnBv2bw7vc>bg&fL$?(j~aTSEuplBApI}!2r_?T~v4ygbxtk zN#P^EVc)mkBnxvb%Y9GnD|4+mb`ObB3lj@h!gXTBLN}eS1JX?M*AXU}U<&$Iol2?K zD^)tXGo&`QXthbFsUheLsZ8wI*u<5Y4F$&+T1s?;JjxvfY?yV=RCv5xSPHrTA(+vP4cH>?tYe5% zLk)LPQA*>{dtBjJvB2zVovX{0XvA$%!J%4TUtQ;tx_)zOB;Yl5G+R965@V>kOdYp} znoKy)tdv)~)K<8&dg}dwc89+^YN|DcjCvXG@P$ zM~N+^=F`8)EYNNj$nH1UZ*FDw0ev(8g8l)H6L7Et(UAolaSW6gZI$hiiV7EPan79S zte!K=0Z?!pvL7U(6dk1zN5oK;Y8(lP{|?;>?aeo9SLp5_$_nyNzPw^i#i2vgg`+R? zZ_(emJ**W}#f##_F!#-4OtWZJDG5CO3Kp%)aSL+4V`Ri(Y-?}P^E+G?3&ov^HJN&H zl=}+j7F4L`Fs%5d!VP%hOAzhdB00fHJ{9rt7fQs;=c0XCkz!g8=J#5Rsa|uteSCA* z3cGvr#ILei)nj)H`3v^@C=pqjQv&gab4zw=w-6B2B;TnvVS4S%`)ogH2A!e1T4r}q z?QYZeLmNJCK_lau< zY=1w^$VGcHkJHi1I~+;;BocK-qagUsaAbKj;*3P?c#cHSi|I^Q^tgCUb`DaNcQ-~p zkBf@)p7Xiu4|(27)qVfLhx^cKcfl0iZaq4fdwR^`aGK3dhvlJM%Hz2dyrR$!3!UQp zqeL$rq(P#C!_1=ySk8eh^bMC^fZB6wTUDMorOLO!3 z-jf2+P2s+^iO^`gWnFt>i<6~al>E`Ed8a0&Rpni!6~&rRckOVmT6YC*13Q7QB1ibD z;mY#r@^a#t-I^o&4+s7%RGnX*o@s1O%4v_p(s zTk4oKry9Z|K%uu1KS5qcpxB(hJj5a>t%bHkY^t}D!ydn`LSF&Hv|_!1`|u-oM@>zj z%&09YlS&Kmf`%CMWDc@ZB6iEK0^*?^F>&o16lb$+wnZxScO?v8`mG84H<$hp1E21AL|p!X#0{B~A}P~UVk zaq$lr)nr{{F$$~AFP)5`fLvJ&P1?jgKobY`R6mi2X8u|}2E}0ZUf36Mg`wPKxr<;K z#ePHdEO`qPwL&C?D_0S|$5A1*B3Q@vg>>^t97LRzA}NEVa}y?kU(6=bS#liNnB@vf zRh5NB{C<`{Qeo9=Z50(Zt=>vm3_b393hO~d<+MnG9`~_7>?}`15A-zR7$R(_+>S%q zefw0ZefzX4wRha1Qr&Tf_VazQJMM^GFPl|y=dBg9DsH#|e{Q|AVwUWBGG|r=exL%% ziC-q?g4e)WOfgM0ic=FoCI{M+YEom4{gQJh6{h^#Ifl!k`yzZHRmkCll5QUoI6id9 zZ=@RxG5_0n!bZY5JaGYlI8h6#KSDNx2qRiVzAy!4CaOhe(TEk0QRrfy6aj9ltaEsr z60V*U%G7eJG@h-Wm`whtU#=-EkV$2F4PpyoM69rLC}ULKKr6|o@cGYfw+qhvE={}I z$W90!%zppV2~&FhGy0d@Xx0hmh5U~#!jt9g*h4Y?8vH?H(!@mGWfBB-kHqarxFZP- z_3Mxz^mGCT$~Yy6kgAStot@h{(%ZVawxw&9hr`QjYF329D~RdjQ%^hjNrL4wEX_?9e?c z-O)m;c?Er0MIK~1NtI|K`;zU?9^LyP-ksgZ_W%tKD*Y4Qx-pDzG7$)D9_gqLTefGR zAu9WZYKY22ui`Di-zUXNPPl%W-dAE%!EFN^5!)L2h;X6A+c_R0X8!%?nz2ZD*6J92 z4vlwu$+AF5A+9YlrIN{%si;=02%*5kC{QI7n26cJjJt9Us6oP1at1*^u0O!56fmB_nE|jVXaa+eOh$b%U?Y|@*y%^n7fkO}v`3p7< z^bkZMT9-LJQ%Sos|8V5He@j0h5!k;FNiA~XTfB>QJ4dy6EWc!2c>nEmq6Zapv-(~I zJ4d~^SnW^b8ALz8@Re*7-9pR3H-?F(i=IR}G=d7mv25Ggcr#+`@`MKDag%4nB097j z#odj+`-N}tDzt^GBz&%Hu1F}GbW(_Eb%20o&LP_v@1-m?$9*SNJ4vu%xw3?6bMB&= zopPC^EuSSjCN(=4154&y(Fa_LTDpK#WycLHuDaTiY#eNA&_&!cnws8O`CwPyLrYpt zKQYpAA987s>-X7QbmZvdVI%kZWYd5W(9q@V8UQ-C|o=02O+XL?j_({BkRbZw;EsM!*#lZcB$b(^(DS-Tkip4S?se08~$d&(`(#-M5}AXqjlHQD9=3 zFGV+TNlY4Of8l}ZkmRwchNTs0g-NS1nKW7xm*h8|Wzy+P1}Jo?7skn=pO6PZLTJXk zO&UB~BR{dI)n=Nh5G9Zwo3&aqa!tH};G3MN95#USxDG)piILA9_R-D$w@(H0kvXZ< zVsh9@qF!^0!{QwX4$o5uY)WHAhb)KT6`B?I6#J3vsz-FM-^N@lnBUcYwPZBMX%XoibS7u+n$P z5f3C6kS&&%tW+<>MQG6j2S~Hlr$p46P={lDfi<>!w}-syGoEnJw*?D%ock1Z5cR3icrI5^YZ8oYGn%!?u&_L;#I zGvDQ&ZCIJ+pC{pHmt*1#PRZ9fyCdY!ysmw96Dm+=?&fZX>b^s?7PBME7D1k1y97Fd zmPj1T;|C-J>Za^v3sCN3gUYrF8VMVCrVu7_4Rs+!rtBB%VLC7J9>|~S=Y*ZT>$aiWP~S~-en_~sw4f4p}wd=BCk-V0(yVE!|Rfjs(rHZN=cOsM+PysQs#hd zcXC#ZTGgXa>g$}IT01s^TCv=u(&>$wy5zxMd(0u4Tt15rCv_j2l>DI#yhPoE>o*x z#TkjJ=up7cN99k7lZkjgE3e$%!-TyS-aNL&mERYItojJEu9^_uYHES5I3|J2Aat0UUPfr5cNeK&3w)s z!Sr*ZI+bHe*GpF(?2K$oBgCc>Z9H5axFa`Jch(H-Si5e=K%mQYBPna?vxe6U53jDX z_O{?I1Hze?%kh<;?BT>RxNyzi3H~yG}P);A{(qhHZNH zg5@h~o6gu0Z@qY1%HL~>dRA>}46a-4Nt}6VU2-GUCnI77BR(#;&tc1q<5aeFga(^R z%Gif7yMgRj3mt&?({!Z4Y7}hD0gLrSejXe2jWj>0x0TMVtaI%+WsbFbJkhx_fiS4_ zdc~1)XVlQw(l+0EyDwJlY>L#C;!W$g^I^-(Q2R#j_A#SRTQlAo>1#A-qe)j?my7&J z?Tb1SDW7SA54fGpE_>4J45EwBH4x4_DRqdz(v~g-%uYHZu{*MpxT!0-b?exQz>H?% zZR)l*`&Z57-*2Xq8g@Y&ndX;SzfRjWL)%c8ClGy|)BkSf|2zXud>`k2N3v>Q?g891 z_H6DKu!3S0jtiYsLc>)S^q^OcJ1pKM_srmmo0})T0ta?v{!T)oE3i+z5xc^_A&Ub$ zst~uAEjV`5F*V6_kTU*Xq>S4XiJTCPqUd4-@ayD;sVakB8p!6FJ4O#5C{sZA11j4{ ziW42K@)EUj>>Qh|R9e*3?U5U+F0ZrI`eW`J)J8>-vBN8MH~H5o{mNGlX#9@S`4lI3 zPlQBsfzuv_6AtjX2H><2I0<(z1Cs`zQ9?b@3g5!&D?_+>BP5hKc-F9Jk!T$N1$rRJ zR0ux+yucWNs0;m?bpg#1*=cVlv(ahy!`}Ql-eH|Fqi3*h28O*F|H$q9N&Vzf?weSL zbzla<*!2%&-%OYpY!pfTIpF$ZlDNZ-E7~`nbjrH*C#435hKBLqU_BjN{%?&d+cuum zw5n~x=Jbr=A^LAH{R7k3aNm!veFj~N%^QZB+D1H!u6-K<7rGX67W5RfOLh5%4bcr7 z$g{^skH`OjqYj97fbd|;4{u`_lao96<4FCyVUD_p>0#i$0dKRHk!fOtVAj|a2v|og z3>3I#L67L%FLH7Is&Dw$$ej~^B_Hy${#x@@|0k_v8F@dE;5YI2+!k#ibLt4)BzJ;w z?!>}?SO}XBK?BJIDDc3<6oI3Q9)Z7;Up8*(KmNMGIk%mhTpzSoFOJMUtu21al2FQU zBP_@kDXQk)y6N~^=W7&$mAbC2b7!C1E0r9c-Yi5|!XhDe%;TS78obk~t0NUk(eKPp z4x0-wG+fzWczEfNc}JEZ9?{L@KBD6P!FSWCi9Q&a>H}5GMig|>5rRH&qc0p{awq@V zH~dxTg%?Tl#5?4}27cBPMBV?@C%2J7aydG|%-_^XJApjRpMu5c6`95RxVxc47WfOy zsZd_Nah#tgp6&bT|d7_nC}gjauKHNcv2= zNDb-hoVTz`58q$8UygvDK7B~7sB!WG{h(m4#GBsssSMb1*=w{Mr?%-UO6$ri4{#QP zP80HICf*nwUocWuk|-)|Y)CYgOOw)4?p3;8vduXq+Z;cYoquR^D4h`YmN^zq87h-_ zK-s6-NM+#vqj4KqI~MnJ+3Pii7Gt%m(rLDZbiEDc2BT6PHCjw^1W*bY{?C@~r;VDp zsxDS4tuL$4DJzxo(sEt3DdaCL3rovYas-eomFirWj-Jfd+~?>49cVN?FwUKTO(Bj! zqk}`W+6o$GLfC+U00@*a_S^3o5^@b|%hSy;R|}ik+Iy_lu$yc=b^ypiMzDU&-|N@v z8ryz%*y(79-3b~5Z)x#!pxM>94xFm8stNt(L{|K%2Erz~^#hF&_&(5qY=I4h8$^H} zc)@3xfW;uh8&}Qm=p7pAN?98;a&<_riR&sIj!F{X>jS}H-~ri&`SaG7Z&*XhN+YGE z1g2c2(x^mQNKPRmZ6h+$R6dOPu@o}KGI*I$(xszvt<53EN=KL>Xe0_F8e1VV_n}%& z7q9?Zqe=#aqj1^kv(8!iv+GuzxOwR<6DyA@`49P@&n5kzz3~S50{5v(WJTvLIXwQ- za$*I`J&}y_|0L!7&*sfI#63GBBbxCDZVNZ1HN1vpXr`;P_sh^b7eKk_P9!hB3so&;!?J)Ay9H60X@n3!g;tNO4 zNcXNLu+f8;D#!EUPNUovi*QbNiuwbIFSXNvJ6T zP!ntccUXcsbcX06;ojt&sK_P`B1N&|DmIz(Y^||$sT?5eSXcdy750_Q5~(_j6W&5GjHD{7l|*c5h}M>sdwr+i_MKvBRY|1*=Ax&bB>Z zE;(_@95`?|g9*ptlwj9|^}`Ii1Z}0T{dvD-w$C@awtZ>J&hfXBd4<)j zv!dY9HN^wJg9T!OQ`wBHTeN8D{5AwzSQ%SVfKC3tjWM|*VRCys z9&MeyyU83;RVZq7HmBDUO*q=fIp)5bkd|9AEOjvq9^~s_ivu&avpiKRx8!)hp9K)svB1pjx zPNN=W;5@mlC3VjK?jHq`#4M|AcAWm56OYff+D2kBnI`0`usCF`Ep06oPFsb)PRmm4 zNNH`Ua9DBmxmFYO$t?DAfV9d0;|XbGUzfn###CZ)xvUd2O3X0Qm)cw|3z=7fM^lN_ z>9m%p6bhB_sZvKIWkvS!`R>gdkKa^1ceYDXR!mdoEO2i+9x3zZ*o745_}u)I2$|s+ z8M0W0MjT@!BV*t5j5#kS>%?ZPRcd@qPn89I7uD=wlOTMUo=3H1C6TVW;MJ=yy6Eau z>*W|(Up&sgPL{;y#aF~J%&*5W(?nQ7<7@>fA=b0?Loml!L_bV!1zG%7B`G_aAb-is z%PhLNw6eUguv{+P!yRpm3>+O1&u1b<+!U|VYQu3e&YY;7Zv_bPg|L}f2>cjH2K7zk zC_J+;V8oqHQHih(#Ew;<&JsE&vZ^(vW}u9KVnRi|tS&1Y=e-eid6{RPXJnhZb=2$Z zTGKhQ(C^ZkeR^@5CzA5ugj*eS2iL}G=eg9eT1z^P+ew@Toz2_arYUvCjcRRmT%*x* zo2rMGwi{#m_(FSEGJRYsal*p-(R4U&&{z%Pl2SyS9Ue`U$`Vb!c)+tFUftW%>uwvV z9gBt6*ZLPmlPiZ4vZMd>4$buYM;)OQix_zYj?=y%TdD2=77^9dmmKR6^PFCiiO-Azeo>8L(HBr7G1RHIOi1<9Qd|^Sz)>%3vVH%~U+hScr$9w_90L}cD(;~RQQULnmK1*<=|2Wg zP637T4qQshTSm%KZ@$Uk=v1i#dN`bbB_BoZ$Xl(~r@7r~-b&tOAUMU#wSa<9`XxW| zZu2dBQYr2_jQ~d8MH}d0K5Z&AA{3BL-M=1g{mteSN}Jfh9mh(;R+s^yp{z7|bR|FX zLCd}yQQR&_Y~+sCiD7aV$^&=F2Ss>iERZ9ITkii6KzFMq4xLUOnHb)6EF|=nw9vyX zw_GJa@}w5sOxgfSl}WV06iI3i4$vcq0(;WrsYmLrypo{^F*Vm>ip*^=wtC_;Zs3{WlYob+qUR$5qO!^;-{`Ld1e;O!LKfynO0rIe>{g&S)@7tCl&b^#g%lBSD>KHJNv!@0eumC;sW<3Vn zN!B{}FNl;u<>ne~)Kmxj^pz;>fDr!~SzA2`3#ox2iZx@K?D=aNNnMJ&+&1wRS3Rvn z)_8^_Ydnhl`PG;nd&ycC|L#?nP2xD&^r=3*^SQ>~oR&K8PO{L>-*Fmwfx)`-x=B9O zP5U0N|Hal6=_1_@NNXMjn!mW+Y~7BwzLid^x!qU{?|y5=3ILATt%pBKZDt_caRA9* z{cZ*AJ%_lz`CTmjJsR%1yw#uUL9{o5(^51RH@1(r90uf%P~5IvsPmE2QDPniz$6z7 zg_7;p?{E2FPwGT+4qvI^cJZf>i@)8CD3;ZqEB0~}OXV6AZ2lAl=V&O#5bKMzS3G#$ zuTm*WY60{rPos(FpeUYzVt9%N&wqr06|Vx^CH$6S-~{3$8Qi%)mD-WoPoA0>-T`yk z?V+cGOOhc^xql- z`FzjBFgLn3TT*tZ<~l@-qUeBVIV+Z`2<2S_z`XSYK(rMFItH6wyDgPEMaxxU;gdh* zl_!iF>)@DpxaChfQ>iQUoPvLb64|AMb{%a*cABC@y6!Q=gUR3Bl1gpUa@xJbi8AXh z0AxOubqjqr7&w$p*F8de?#e90WHTtUaLC1jfnWbDl{zl`AbA=EeagQExO`&FxG!7k zd#0G8j?iN}xmj$U5@$P$01GEP;JGNYRwv?yBL)F33-uu6s- zpSv@aI?YZN-gzG2UN|kU#O#8kqZM-tMPBV9YxmMlzU(Rh=1~+nQP{9L7S}(%FO}Nr zAS)>`Azgr@TGE`XK=~pF>Gi>bX>N3TzUxYg1feQ}{vNM_y-;w7P6VAretOjJA^PH(y_Ka8HUncJ1Zi2XU52 zg{OST*i@kpU*HAgiR8IcBMcU|tIrOHUdxd8q%(XoQ*pyXPdWgUlG zcBZ*4YQCHNVG<-aj{(9a@{z;M*J9prCu{jM6`~le%?&U*Cnp_2LOHlGh0-SO&q_x* zAUbBWG&Z^@Za0;VP+Y?gl#Wp3KYo~Wgr?Z0q@x^hq@yF3Kx|~9&so2|ZFh!Xyy}tjQ`eHA6rahG_DvA>GO@xYy^f^nfX(fXC)aJL{H7dDM@C}D-G9S);t9j!)`m+Zrk`IqPdwH zn_|)Xf75vHxvAS>HHD)Mfym@ApnW8tl4Pzw+_)c-On5)}shPj$I$~nQ=GGsbLClpA z3-Dm@`ZVz$th=66Gnm{GWCKVgNK8lwa=#5-`g1DBeEMAN<&-GpEgH5Er$o(zHLt8g z&Ck@ma*(r50~BxsB&9hh^I&K<+WtJgulvdQ(;(^kk4;KO*9J*b>I$;9j{gmLlELK! zXI3H;huMHXv$uA~euyyl*W8>HU~+7vh_)D#0vdcp@=zM%c&j!mTIVP$trMaNg(2Hd z`c>02A92U=4LPV>jjXYgBFAl)BoCnp|Ktw#Ft^Bu79?CbEmQ zq0A8<^g6oe$ZuHX8 zf*w3K^+04_mh9w8LX%lZ0@*oObMC{msME-Mi%{0hd6Om!C~)>82WzgsnF3yZEqQEW zc;~Tjw4KS1!%r@$50HDnsW0RsjUS(p`i?&7Pao~!0p&LSr6V-dwX^tnh!X|ckkQ~1R$}TR`($P2`B8>a*&v?2o>Ol zH4;kXKMIiU6nUTjO)Xh_!nCT{s7%R*H=RZ6zVVuEwGZwj4;%vt2dJFPciHy9p4&li zeo}jPmf%G4)*M6}wB^Y8@ki2J_zx};pX?J#+Zl2>dUNUR@dqH|@E<$B1;wTz$`Ka& zofpJkfs|u>8ercm=48pu)jx?dG3U~M0r-35oNTebIG=)^NbWjB%l$qMjaYLG{aPeQ_)?Yf(6l6-$5y;J#Zzn*qQvf@{sj#A7&x1n` zO$s`%CZ0TlLh%n}DNe31j2(b9SwZL3_>MbRX`hq*C!)B^XmPl`Aj?cOz${C0UQO(~ z8jxhAi~rz8a{I(EHKUzgC~GjN&a3eoK%HpiUn7Wqj_!PWZd1BLrCIX38^Q-qoi^0q zK5QPcY4|9l@f0_g|3~<{hdL|J{`Q3MeOOE{T~hOVegP*C^l6NR%|bS_Z^ZO_1oY;v zn%@Z2CXX6}+R!D%mZu=1UYwIqZ<>aqKx+W2VX#>txq%AF*AgQGt;r5C9hX>^p*&f0 zb$aKM;j8H$4;|>68e$M5fv1q|H#`$O_dtp(;;(!%2>EFmB<-6?PJaU;Wu(Y>kbfPQ zg6EgVuw&)17Vmi~c)?vMav%SvM}u2QY|AmQu_>Y8t^>6{-I2Qeo|+r8l+d5Wk(Egs zED*0fzpmK{LK3?6(eRFIvcgb~&N14`=ph}#O)uVl9Z1t#sqC81hhmyi)`R&y{xmXJ?-;{f;B#<<2@O7Hk*o_Tv63~ zUPfw6mY+ETgz^eF#plCOxQBoub9ZqPDGd%uL*jWzZ8l{FO+ltC3`GwsQ#jv7li3NM z!y{mJc1KTdn%wRS;68L;M|*pk;wO}Ze8BJ6oD$$Sl^bm&qWl7YAFX?;YZ5|*v}Sgo z=!o6c(KFdKx6?|6>S-f{u0gYA!uaY-AVY^@43wHVK)|L-F3wqL;H&}>R$igT{VI!v zy9-J|T6KF9Yr@%yq-d2rHx1wAvEx&ob|Lg%oK zX)~Bi2KxDS$Nca4$X)+sKI{LM4@WSQr%luGyyAb$7Wv+6levVIOQ%aAW-c}6bPSTB zr&8QqsfnDPkG=)*RM4Y2h_hEbMPJ{Z;v0}Ym7kJV98)vLy;SO{rx2U?&D8YwpyxQ? z%ay<cTfC25?h-yX(xhHm{(Dhf6z2q70LpX}r0L9MTCf#!tIp5)|Loz(V zzUAqQi@m0MD03g?x&HD`Ot~v#wRkgMadWsdD)Lji861#L9^O&I4tmf>&j6`mGE7mK z{YyeP&Ql2I{)~=&+%!Ab-V7Is-p-lri7S*w>8xUdO>yGJ*6P`9-n4O#JK7rY)_QSV zZ7X(n*EaRrY%QLqj`rrdF4JZD7PmdspgF$Pj?0zxH>pE`V3au2wRSl6TTQj-PIcxR zge*2u&pBo#fB_M#lo8N$c`Rie_gNLz3RyL0s_qH%XOr{m9EFA5g%Y^gZRSo9UCOfB+#=Ec z&=fL~na5J*BIOR2(wC`YDRYqWGnUey39*!wNVx&yC?PX4%`D|=q?{nGqwz{I8)yoz zVs*WPl$jHMXD}N8a}9SZQU)>|FjOL$TCrI4vX~l9h{Ui3eTm%6FBbQ8EOyH<1COtmQ56F0Z z;mjWDm|hqTx*H0YD=ii!B|je~`+A$bYOQ;X!DPfg&>$id$rb_~_er;T7|nBnZ@bT; z_Ztfm1=StghdnJuT$sfiG<2 z>8~}Q004-v*VnPvq6)5z5{98@p=8Pk1_daKPF7f?#rjH( zZm8i%aY3)RNN3n}Ra++(z6hD_MkXwLMw%!%n^CZ~JlPY~4e8aD`eLc&h^5JY)h>gs zNZeb1F5z#^3};F*Pf#pjaWlzA_}3`6!)KC_1J%u$nTQ>90Q~_9ar7;uT%9qAPRM*B ztkR>8Bju({r3midI5|K43OYM}k#Qmpa|LL~@CEeuo0u>VW6SM3Ly|yJ+qp=Eglj zFC#oNy(7+X4_T3VH&wg;I2^TQ(wQOAW0_ymqW~dj8>lK}=n=tWH2d{fORdpeUhXl} zCF4ee&Qfc_pXSEKD!II>vC(d|+UW-fjAt4|`!l}-%Ke$zqrXSWoJ_swXPGyV(w7Ob zX06C{i>}W+kCYjiNx`uWS zB}Wr*SIt;6t3>Z+Zlgp;11qX``8M*z?lyqdW$dDtGJk?2vN(gyHBtseFNz)|!>qV! zeiKq^35U=My{K{%L^lYn{4UYI$r{o|i$i2B6~Bvn>EGRyxE(KgK(vEgN?$~^Ar@1c}*@MmP)BFcOH=u2X7i~RK<5roQYSld``J+QF0x%H4Y zQfLk)bS!cYe*;G9Ejm&hM#?C96f>TM4WSJ##OG1m{B%117?JW{eE7^&i%@IcfJ&IJ z3HT=EpjijM?AN2;HK2DlHB28+6t|me60H)m82#8Xqxr(!2CIC@CVw*NZ%X=_xVLjp zO}-?uJi)bz+QiG~*&>Zn!H58}YZJoy2D#SGMw3adk#{t)FL9+K6jsZmdW&7@sHKKE zMl+pDwFr&%qWB3mjA1cd5KBPXy_B_q7}m3aeG@4+Bc({RV(o!)wUd&F8Fe~FCESgi5XG`C=xEzCScNuq?2(}fSGPE8&- z6&3Vw4Wb9c1-YOq*b6czIUy<=jQKS%E~Tsnl1iV#DR-aEoOn&4#9eLX*kUU@0wbFw_@HOeS}ORU}4D?WpMnbR&)VPs1G3`^BhD zDigVw;aeg*u^4U1?p)aO14Z>Al?Qg0wCbXUklI`A0AZ7yuP_=Bi9Y)=7{sB*E{uf9 z)YQqowrLRM5MkvtU*#S!^TxS_qJ828z=Yy)EE0&3AoC}*m*|(7KTzE_;;a0B_TB?b(xTcM z?|R=3GdGvYI0*gZ^hgHwty>n;xD;MqFeUZYEe=j)YAl6tFcM&(kgcE|= znZo_yA;oIQ(`|5QJyUTW!g^h$coW`fc(>v<#a-Aq)7d>HCZC)%JrUPFWwi%0X$nwV z_#0c{yGl-H^52~NH-C8Z@WZV5mH!HU8SwMdTMx0XQNnNWi)rxdMf^O0pZDWu2Yx2;lmFB0FJv-@ zZ_OUQ?Y6^NgvqhrcH5aqcQ@0odHQuN{rW!rdWwD_6aoH?(y#Gbvxo9m(kFI^e&?U( zpIhm7sRD0=mwynhhS%J78?ztE-U@o&FU%;`iZ=2E;3^`NkPuXE^2^RlSTY?BM@Pm| zV`}zzk`~dXbvZP{YP+*0RqN2{?Yef%`hOKRDEh>xLajXUkfo?3j!R0S$R%Xqayu6I z;zE6^tRyN^q$D1s%{vrD;fpjz!G3eCY0%^8w|sd?uNB0&7{p);w*ZQ>7QRnzKN`eNDy%VBY(t~E zUfXD@!{_TrjoNynqrpLKYeRp3L#uWWq2L$#QS);PKP|{eNJDwGlde`vsthjuNy?10 zSL44W^=*TvL08-0q2<`!pwl%%z3I8#=X87h4u?NOzevyVTFhokuD!j3Ty#l;J(J=L zmHl7{cVVNmTdbpX$E*qELU4WG9ZZ=n!H@8@i-s;5f`W0yf{R_f@GK1zJSOi+uu`bi z${U|*7!BQe#n_26+@q*NS+0~*3iprgcJO=!;ek#NM3j7|bL{G> zmWkHR!v_v`#?x+9s;XtOwd2r%+0LF$jqrR^huh>Z)w#`0oi2O`c+lqM!cFWdaSaUw z!L#If!Q`Zkc&;>f6H6g$3ca2(L4he^4<^3i7E3fMu4yM|hHLgBAuA6c;c9`2O)zGopre zcYi@vSkA)I#KQUSAOkrtCOoN7NjYZZsH6;-Ew6#);U&rPumhN07=mr$aWMqRMY;xU z^dN_5)Yu>uMPa1u^Kg~1PPIqtkD41+Q-E3guo?>6YVvr5H(63yyVjb{IMk#_kRCBn z_<+tfp|kr+ote47A@r83GW0-tAzDhEs?MZoFh_kg$wFT`^kYJQqSu~HS!x}bv{gG) zP*^4kAAo|L!Y+0P)I+ii*NbFP5U{_2kn9z6?d~;uj&$_&UNWEE^62*NhQqTveL}u2 z9E)4DdT-F=X~ExUB4Jp>m}LEj5mR@mXUtt-%wI^1iE^o%@47yC z$qmA;)qSv3FW46RikGl^qi_q-ZcEnZdNC3CWW+5Kx(gdgX+ke`wT5#|30thm(CNu^ z27N8@gwx^j*{t!_{Pn%N`YvhC+3W4`a6^yJ>an`5Hn%#d?OgXf;2_h@yCgV7L^;!h z7CPC8PWUVoQ$R>a9_){4uq^*>!MV^QYIzq$BbjWbg3E zp-Qb(RoB*NRY=4c0rc-ZiicpaBi_M1I})9Ey_;4NkSk?Td8F`rS@zYu8vq zmGB;~SLcqq>pWhg)z}Mh{4m&WJ=ibCCi8ElZ9AJpgft~iH+M0un3E?QlTYlE>S}NAZo;!x z4vL$vMCkZH072xHg%r$2kFZnm@8T#_;20EO3=~U0Efey*mm)I|UMX4+-{}CsssdEl z>zwau2-N9=aYy?=UpkVr>HP_Jd!M&G{}*T6YKgmj;UE+0arwoTuvr>}otB{06tMPX zT89z=n7sSbzDyt$2nPdkuRAWpvH1yv0tj@za5LEJs5s7#gTR`k7llaQgAmT7oJPD; z)n+sp+JlZ{UAyp54Vc`XcDvJv=jYJgjFBA^E>zqgURo4tWpNkEV=~0b(%;5WX|*`N zPzXZ3x9~x@S3+U|b*@L{@0ix@P(q&OMjq^V@jkbP+yY2SsLDS35CA5f3*_)S!?bCr z>DfRQU$T3Vk>MGcOrY#DrjQ~3NA}9XXRs?#FnSiF9zPX-d9cz@klsS2J7k5wKvmu# z=zZBnKMa#zs{XUY9TFkEQ(vF{88wUG{oseKHhHA|R~QiZHK@(O^@( ztKRMonZT#6p}vH-p}|}J6Y3ld#rk9AN%XmK0MSeqo?37rme-54KO=s{js){Do9-B~ zn17ybJZHDdDF9>hD0MwA1p!2hj8v{v!=LIzjr-EM5p%I#XQ4hj^}z*0elMJAu^dJa zWGvs1yEYfk{{o`zl?8kLE}jGX9>i#@oWA+9au>GNxUCkC$6|HI|59i4xDiLog8*a; zDPh0jYvK^>(6EHjlVm9_O2BdvoIPO2O`;hZz}KCw_Ex98-Q{HO#z%Tq4xfd8^LN== z`|GiOyA>3Z48@fgLr)^tfLG8!OFKSU=Wwfb;ny@YE^Tz#t zzcAa8%XOG^?t5yrf=dwfX1&=Pji}>|P0?s0`u!mKy%Yu&D;aO_44t)jotk%tOV=ri z4kB$0GU;|f(1yLqTrTMiYsD&Wd^iR(jo&Y>*EuwLliV3=JwMjK;th@Qb?D-5VNP*e zNpD$W$r6jPzU2qCsT&FsMnfu|FH?^;+peC*=Ju#7nCwY9>-7V^Xu=r{xV!js=DyED@5=o8btc&ZtcpU_9ia1<}do|U(?^&Gbj4CYTk^;S4R-iH|$v}nu zvTT}Cru(~Fn=>C^@vuE)HiaDw!R-U0INFiP^kkCOa8#qIuTo#@4*JPX|AcT?83un zXE)H_4d`T>nY8alT!5lgi-bGS!7XSK8!Y-3(kiR5OpA8GZBbT>6<^}YYNeKEnN?NF ziZ5~Ddx8@272JZ*RQRxGP84hPPPfRC@(0+t#D&Z7uZ6XG2JT%97a1K29 zVK4|(Ky!geF@7hP_zx@z9@G?gFzRf|=8~R>7H=2D1K{?MErK^>h~32x=W@ADbFIcw zwH4ur!0VAHc)cYYNdnnl0wb;iBZ3vsi`^UkHHX0yyeYKS3G*|hvxv{F0jKRkc$WnLA$gN_8YJ`q;S#Ep27wsCw;=okF9jb ztyHTJQ(LJ~HZ~0=0;+03U~0A4*qBghkzTD1B!*gqpVh$Bs5aSZF8#t<-LtG@VR zy}w2qGM)b&+%dij0^or7b|58+02;j#0ZOBQh+94kO8FX6t~=-(8@&j28mbR8c629P z4l^!b8X7}QL5HP2aZFcTrPEba>o(O&A8N(XVDugJMx!s_N4z4P+p5*LH8sZso7H5j z_nYsjsjjZk;-CB%0KXRip8&wbiV+2lcUNY{a=6MrFUO#oC7>^H49%OyCA}|K{i4Gp)De&2Ggn1)7z87 z7tN>#G;7~+c;7oVslQhru~gN@8#^aL{&7TMT{vUGrg$GBu{uemmm)XPldEVzzD6vq zuq)@(I)ioQgwfdGw8Z?5u-+0k8WS#jULk#5jmB>5GMcM&+A6!D%V?^)kf)eTQc5R2 z0Iu7>KNn#oaVz4$og`CpnBin$!5E9nF)jPjmJwI`Fnf zJ3OIh?N^!%BUjexyXiRc8|YvkIv}eQKa1XXBrXnmAA1%ff4dM=T!TCvZHKup4;{p2 zFyaiZbmP!|Pbm7Kh}q{0i$41~;^3pRlasU2y>0Hq7Vm9ndoSAl80s5Qn;c+J7gk0v z6jsaJy$6mq%|^~_I=a7cUjz`$o^v+-oij`SQ1?Dy{Q%Z8N!cn0|4J34w2_vPg2w># zbq!8;BpC9$d=Zb^?8BS3jkZLa!)o)j3$q%HU!yfx%tmjWsjg0=_Ef38*k-7h%7G_f z(CuRY`BH#Po&y9Wg<6kU$Kr<@56?B9EgXGzcJ}bOXP=Fd*9&Ljh;fjk2I_@0lQTB{ z^j|J@C_bjfK1E%l6xAZms8lx!M;{y75Ebx*XnZ4Cz}|?Su19^`JVj5qI1TJTmWQyM z@OAZ~3?jCLu}sVarw|GcUEhEIvu~<0Ro{PqwW<1zXyGoja6VeVlqOi|XopV9cgL@Z z#jZj5ZQGvRvj=39x=y(ntli8Se8OqGXE(6;<`{<*@Hy^|@ z{(nMU_#}AbFnELlLKOG@l6;U<5mL${t-bwireIBNjkh)&3Wm(S+FGwLo9XP%s8wE3 zlSo7xs#HF;8UyA7UlM`XDWm zlagz2*ktA$HhaVzk6U7%NFpx$-fXPZ?tFGntuEwQi`s`!`vJKZSjFT{G7sb*i_gZ+ z1X0k-qmQEC0f6%i3Sy5bP3BVJ`$F;jXQkqg9VW0)K`b&(4P-juxM15P!2=+{ra5SR z(9}slusrRNqqAteC@&bbnVXb}J`5;%KJP7LHbF5XYz^ zo9^)hydF9ex*JqH2CR@jFyWeyMczdMIq58&xWWXS(zfMd{y@MN&xJqKABzdUOf)pW z3g!0FW(My9w;lnI9|4d@v1{>?{FLSf1)zZ)kb=i>heW=LNNbkll2{Wq}iC5XI zW@jx+FoWL_uqO~s+-7qb9l~tLZHu{Wp{U#DbDQ8w84PBc?C!YD9dVltCZEaS)*I=V z@(PUQO7w0bMP9TLdBHN$qJT;+l|OG;m5q& zzcB(qtw(e77|a8}xCtg`nF(Wj9g?@g<-3~)I@_8%l&j+LURAESrRzRlFy!-vf<9u! zRNJ0sw>7tPX5x*F@pvMErjMcN_lslLT9anTxiKdKT&^-gD1m8-fs8oj}9HiF(}#w-pa zB2ZxsIjVRgpSonO#Y)5H0oF)bUNxy0EQi5E@g_&enT#K@i&aWpw@y_hVovYEzh~`Q zQ;pYKW5v@|*#8|>+=8Z@bWO}m;m_=74;v^j5BL#nLS;c@)R6teMA)tM#Jp7&SJ-2! z_QpIluJHJSm-UH*mJ!kK7#y(F9XL>D85nf1OAl^(WD~UxAaBm0Fh($2<9O zStl-Q6*|G5cPJJ+G4T=J(WvMv>!{kG0%_0}9C7l;7X&!Cd=?fQg$f6|+-tvC$R8i| z?7nnNr5d>K;LKoS)-_;lCO4nc~Pzdjsvxq_|T?JcWZE$HwjL8+LB6`u%MY+Dk#vcZ7*K<{b|j`sUPE_Z#s zr5a%l&DHhIE-(7%bF@XxPQCDOG7@lk>P2OnQgpTX{cY}nzQpQ`wzWEz0jlp<@Ia^k zjzXjTR6hULe}-rFyM&YMVfn53is$9Zw|?((S?Em8;`+QxdQ;IQe98^&3{U7f<-efX zI^i0{qr&fqYSOgjh#{!2v(@VzhVSpwcNG zbDNu668iJ>jm;+Eg1T5^yspZU%MqP%s(XyR53%B?f?lKpILJ=+zUp8iVd|<21#8X{ ztMu{4n7-DW&e<@+JA?~_0PlfhIF+_iydAbnM54#&{d)BG7r@h`RHE|Nw zysrqSNOyn5)ZpsLp?ZI<4u&{E@d05QdkgrD zLL)0!nF_%-FNHOqy=9<1-QS-Mr0a9Uui)UI@YQrrPb$^pZVO582>SuZIl?@94z9hx zFZba?=HjlLk1U%f_nE!pk0x~zdvva23{gA~d9 zI^hJE@^dtoak3M*jl-QX67BBH59Mzn;@E}UeUXNktGeQ?c*i!_UL=2J(#eJwclz)e4 zwL7g=*AGRT-D#_~8HHJ!12f2Kw>w-WEAB1jJB0nPjQogVWQf2V6ekh}kbERTdxd9k zMp)MeZ{N1A(S|B@bf7CI{7C1HxeZ~P(Pr$!mIjS{NZ7gH$7v}xc!ftDrNC#f+~q$M z^w^zniG!EkD&c8Q$YR#%G}T(2qdKDRMCE%+m0{MVtv&@qlSJI}J#ex_U6;)h5T1^A z>Lb+-owiz|)0r)JSQA)$P4SR;tN^{dMv$O{s?;ltdb3>vQFT?rSXZmn>Fzgp8^mKK zo2eHkoE~o-PCIn~;IBeIQwn$U9hjtR1C0SGjv{gR!weoY_{Tn}H&t6KW(yO}0Rj;a zu-0zCU%R5})c5n>5yIkd@l2FneB7Ye4Fd+f%|&}%Y!XyupCe_T*$SV_%aqqGZ}a8) zj!w_$fH$4?30-`{ezWk_H^2FLh4$1<`D=xv;u|qDr6(86uz}EfYuvGvp*sDL(=$bhp&z=|Uzsj# zEXe=y)J?1#Q5Eb&_GZ^t9D3E7CHzkX;ygthZ4CI1a+!(~#2Zq{W?iyXaE*Mr`cwC5tEPkC1 zMxb<8PrAmdQu+MeaIi{Q&-bBsK;4>`c4{;=3bp}K|GNctRa=DNS5)}CCRp`}XD`== zHJ^AETZpfr)+7v_bc>JRLFtw3n)UHG;#6}>Z|%my2bc^N8!$1#cVaVtnfO6|z*uhG zmR14DD4)xn*_hVU2!dFnX=|L-#X~g)wMq{SQ==08$pe-0 z0zmsVjIkCQ9@-?7HVDP-fo-t8wJCGf^dkdU=$!Qq*o`14hke6JvvbL8?_`20~Z9*gKa zRhh6kWEWz}un8wS>VQhk;)2h@oH)`N>OM1NO*{6whi4kPcKfupnr=&jrEO0>e7#M`? zc@R&b!i5m*X&~`37o>aB5A@aPECGXF8*oM9V(c@YiCYn!H>avj;PDesEexyGLy-6m zikfTYyGRYBu5|M)lah8vG-_zBF>`jXzaxrYop_El5=}%B(O6vErRr>J?NXj`hO)D* ztxLIiUc~!44Wg1x`;{2rn=q;F!lWV<6>?bKS4gH{+5B5Rx%Ra5iM`nIse7Bu!CKgP zbit5v9&a3m@UlDEdRo)iU9=@(?oq1wJkzM8d3Fc}`BU;Wfzk?K?NQpSu#|e)F5yY5 z5o)KCG<6Yw~M#)F95XSXHB$6`sy-WcTM^Hu>xI`uc#0VP%CmU>3)hqx>kZbY>|VhcK~= z#s-%&s@LoN`i6KAuJX019kxbSYwxHyiqlYa6&bfgvD_Fg_; ztnKl0z|P#f^;YDaL>^5@m?Y_F8_Ovo$F(J}+iGXVNR|PbeK6}3=TzwJP^5f|C zN>tMEcBF%{ z|AWRLap4S*=@F2r5ifq=j-nZ$mq~q6A_{C(en^*UhexI~QAoaIxD_oO-I7ebhlK+6 zpwSex`&x8{L@3ah?TEYWrVx(kl6GuLqUSdF?PgE(psQY-bCEF#$}Kl0*=-i5bVjFl zNoRCHgQ<8-w+XT@h_kuX0QgB5Je-(ZZ3HqMxm)D}(PfSjCHPi6OrC6Pvg?|C@rI6$ zq|;@~xa8;=Bs~Y< zeg@!b6|Df38(ug>_QDx%CCJ1&;2p9H<)C-Dq6xdzAFZv1S;iBJm%#{Q4P&Yr^+fWx z@GWkQ0R(5lJW~l*b@Ieu-aSvqaT%N;hM3P-F$(5j>}oBv_Ex8&P$F849P z`My}NGuUC-#r&0?WZrCJSTGF`1#7+w^zw{J?aaJM~mZzw<&Z|osn|!gJOlxmvn;mXCRbF$qF{QO? zbKET=Wblc%tM%1xm_S#zb#|tkno>2j%pR?)x4G0>)y3g}HyR5Y-9}hEehvpo+{ML9 z64Rf<4uDPPKZ}!5Lhl?-pg#=tpoLF3$!Uo1qGhKBfSD^!!Xk*=jYw&a=|q)3lXEv3 z@xq)Bhwy?f;%rH$)Aa$r-{GqZiXVng*!P=SaJp4h?e|uxOrpWil}Yt@8{@Htx`4Af ziMWXiAAp=a4^$>q2?AE$Fp`MJ&X1nKGp15#yf$u6HpSfT1e8Q^sLG%=7~uo)CYLJ_ zIhVC!IKM+X0r4iTXYvD}@+(~RaVs5-YxR0Md02;I7yPTOK{Yytx>$T06bEvi;EDsG zfJg+}G&vCCoL5sgLaZFob_WF>XwF0@rvBrxDd0qEu24qb4ZBB_9d1qzEX6<|zhR!_I=n{CgR+a=^L<17(POe-!WD+=_wn=Y@d};V92|5g7+?Bup9@$6QGiWKGt1GOV|e zPmy?))%oI!iJ(e!!{{bCk35Rig2vCqZV~gP58Rmsa*Q;n!-;sz;SANs9I({#i59bZ zBGrN}A&yFJDdEtCl5@(lUZVk8F{us`ndyLHNiV!{XEG^K7c;k3Y6--JgA27G)2ZM| zMCSGakpNV=rTz6E7k)MWl43LNB|_=67j+rpH_|b(*)C0;TBX*j&3b}G%&ol0daJ33lE@$IVk8dPGt20ss=x@55>f$R=0gH z*`023dOfZt@V(z>uh;C{g3AGB6J4f%7~H!TFhl?Ymn@|tX;|4y^p}ja;N-pOq%)$g zOIYjOj!-Dx9=An}y1Jmz>2!nZg?oH{I*hI{>1$23wN9MhXfz&mmA+PQsHt_K!_T9` z_2N9uR&&uj%ROzOmO-h)1Zk}{Lr<#lG?MB!I%*ZJ69jOYJ9e2--`wuL)NDpOlKTrk zXEv8k$Do!;K4F7YrLLs|c zheyGKy36Tu|KE91N-7|EA;19_+g3avh_kNLzK>pY;)7S>B-{Rex9cvL64MJW2%i;R z!h8f$?05(sVvM+xKQc4S-YQ{wRd3HFyRW-``x(0i)ksFV* zujSje>}lDMWzV3&=7sMILqZk}V!uoc;=NV!>EdDuaYZ=R}*tugaM z9f*2O47aUh_QMBma8IyncWvG3{?GY49ycg8Of)pue;loLrMjYtZhhB4Uu=>d1pD!i zS@SK?ogwIpzC=UN=^pG%MplI}h*n6fs5k)$+em(5a7+eclIt}QEeDt59L9!)Jd3j+ zE^+jDa=>O@3dk242O`eqfpyKHOt?nnA38RwQ`$QQsv~1vbycc#(wA%Yo04y=giV`R z-_vvMu929l!MWkoFZO%e>nE~1JH2hzmL7lS)V7vvR;U12SojIHMxTcvvxZLgQZTxc zvZN918nzUs7VV}JQ`$dkH=mf+=AWzVy3Hc=o7>yXr#^3KW6zZ%MWEv_HUXrFw7Wp4 zYjK(JdX8;9)>PS~;5hXQVOK>{3qJvVe+O_~iY6GcD4j4w}^MjSWYMZzA8{0kXBl#(NyP=~$v96naGoP3_wu<4L zw?u1!Ua#V`_L62SQJQyOf~7$4Wybq>d{scB9NjjqR0SfzHN)n%Eyu=dROZyso<;D$ zN6DVBv9bI|Y<`_T(t6g`7eQJ_Dk#iW!lS@*Q2!y0D7xr@S>Ps?;pTW^Gt6e1n%usO z!w~tI4JEN9ZS*96CN&nF!|e`+(N0u5zGI8-(iZpV|B zio%+KYYT;;q@*dv$0EIiBRR|SfxuoNT$bM8so&5R$_2*8{icEGRhjfucPbk^`1G!0 zRVKZtY@S{}JJGedCEMc92AX!}AB%)WBe6_oZDX6(Y*=G(nPS1_#IEmv;H9g2qo>jI(c8oPZw{78-6Bs?8kePn3s)uV>mnL7RU56-Q7!@i8oGF9gQ zM5%=?_9`GUDEej2&Df>Ih#(@X4Dk!Yn;^_jGb3wly3#`gHmL zGxnZ86QAg@hmUk-#>4d!1I;7N_O8Q2-TUI6$d;C-p8ERXuD&fzPkJW?PVNi0wrZ3^ znre1k|F+hux|+=fmnR(xwI=MwSbKj%=enfLG;OfCT72QwsLh_41mscR(u()-t5w_3wC zU8?Tc=LhrW43FC*wuv)#84esdZ}*-DI$XBSOnNe2t+}Tq@)Zzxa6qQ-SG?l`thpg{>=KpAY#h~FLiIMf8y)X# zOb__R_4N*m-*2(RJCY{9KL4#YdJcXQc5M#`4tQn$f}g*A73Xi#_g~U?#MulhK9Bq; z=!-(ihepi-|14mz2HJTCGtMo*r3(Ael9W*f|Pb$+ugU|zj?>+041!B;e@F{QdL z;%BSJzW2Sc{G;vTQ7GYe$&GQJ7g@aHj86)dCN1L71^He!9$yvotZHpUb1c%`V6f?; zj*$74`b;R2_0cjmJ~-hWuM2sN7LS>{*nX(EK`|%n1<~lCo`N1r>W*5iH#n=c7M<1I zX-VFo6dOg+>Sgo!x79b=aWq+h2$(o?@SB)Z`~-}kp!de+Iy?6;3gEU0Q@k6fAaxtT z*(9^2WU>V3hKvs+-OgIKMjJ8*Qr--tS=-5wS1pdH)vlhlK2#KdRUbm6>_yYEmthWJ z%kFybS)J_14Gq^Ib__zjEqoCpp+W{)3%#r^E+qdP%=Z*AUbzzdxON&rF*p2WdtfLcvg1nXmG;I+jO&oF? z{HbO)HqK;H)5(UJEPgK-BOXuKWD0wsGc(=(OFFZc9NK@PBYW|oi5(3MJ0>Q##pByJ zXT2&6pbyZMOTr5AU$$Ve%l6;2cKuCzR?Yg|;jImqoZr50qHlLRyhYn}V)y<_yNtCH zwYozG`?oinbTfJ~o;?hhH$sTR01mS}UdCk`uiScm{z?AU?v<0oy|9lYfhzdbrZ|#9 zKvc-MN%+pz7q|X`W)yoS-%dYZ!GD9EKLo+8=Nq-+>+g6mFqB~hKeuOZp4`)t+%xkZ z_pzIAyt#X9P5vFLFoq4rWZ zHAMm`BHzCE-glmJq-oF0uP(UY=QrHgJv}D;>4k}#r&gm$_Kk@bPW?%0Q&hA;QH%jV zHS}Lt_ZU=Es9=l9hG*r9yvmy2yX)I){&g4or|dZ!H=dJ~e&>%&t=lj;gJ+=GE37L2 zI2$_khl#n~-nog1b9;Nw9h*L|e`f72;t%*vb3s^~x@Pd%YcIcV>sHn`HkSVaPz%w4 z`AtHIY%4(ST&J*Cn$!wEfFv2ftCPYW!`8`v-h;=^8QM8S*l)udFv7yQ3kF`yNQlR6 zOfn#02wVjh$=S^u8nDDIHF~en-K>4%gBNQeeP_VCM0X}+Zgoao6>1T#IQ0$x|A6}s*k8~~mv3S}=-l?f3%~NiqqlF~-FNZk z3-;c4Bby!>@m+K`9>ZSy-V1l1=sxw$8_*8zoJ^PywCRsyC}AKk;J+D*0 zWorfo-v0WPS{J1G(~z_xooaAoNN^SO0uGhzmQ$&`x!A{?(7rm>`TRRthI%9o?A+}o z{cKeV`q>`_2KJ^$!zRO8gS#0;RFu2e3Htx7{Dwo_~h5Z)ekM zSTl;iO296GXh0G2_sF0S3vJz+{|i%*VE7G5?>dYJ${D>i%_NDCq8sK>+&-a+L7yZ^ z0qZ(nqNKoNQ1Mf2Tvem8TGc7B&JnPxYt`dgrLlEYv@WQx(fM@^V~y$>wZ)29U~LU} z-Eu2S38EM8Wd}?m`_(=#o|P5XiOQyRS)AchY%)Q37yyYl2mZaVhkIhzijUWn|YE^Gnq4-y@SYy)&prSJdAg#ql$12%C3Iyg)hpfpOaDtD0Tj`a;kU{Qe%)x zf5s{hrP2zG{-omSh2`^6kLO=g%s(L4|9PoC+n`t}pVzO*zfX9E`e!iFC}R3K#Re$r zYPRktzmcF8@0Z#KKT-a?qGch(^Iw)n^&M$c+h|lLe^MChm!#AYQujCTR8$u(7jMCf zRFJ@Q*rPaskd+JgOzB&S=~D>D#?zsIT`qjRkglIqJk2)~TBMioTfo>XBRd4JkK7WT zql9PRYnH(YLCReQ-!Tc_yxf;pC`av3IpB3sxuy7zN%-aEK2~h6vK()3*>cO#BTDq( z?Y&lPZ#lY9xtDplKS||)+c$9f#TB;z(dFFub~*h{o(^~PtmP2C-1Lu@%Y4$oPH;7 zr!>AFO6e<(uQGq>`2Jb0ztZ?B^OuZIS;yyFBO;A1JKvNBxqXTxv&?)GyEz^j7vo2a z$?4_z*^Ak54Ga!Z3RFORq4;Bwf6DPznnmbUo+st_E6t;K7V|6dL~^Ta9tmq#C`b4x zn@45kD)GkKE6op~r`TR)Io{rK<(9>BaUQ`NULNPN_%6;P;aaI2*2Zsfx+L*vZ^b-f zKbF%U;^}}#ng_x=rF3>S(hK-4lk1D}IiE=KMXrC1T)%7{R?L&id|tmI|0&LANp>gt zUq-GAPs{D!#q*cQb(kD!9wrrELw=cLXFrkC`TUgUA-QagaM=zOm1H|2uaXRhV-!N# zkZhOIrxt$A)3vY|r-g50jch+qhE1gQN~z~is*Fpd{t>A$MLUb3^(DAmlD`O-$p5Ka z9|xj^`XyW~$zOy^jP{C5eRjMk{(saVIY=j{=gail_G|{&i9M z7o>D{J<k#PD;9_3)r%Wt0?a<@9F>p0ZUs%PEN& z$5-hs#Z@}XDJi8-DRxPeME^m;0=t0Itf=k4BEVBGDx)OI{){lmE?_XO7bsDo?NsJ3 zq9p47i(DTeI|}tHa8a4Rh>{4(<&f)x?UtJrN~fHEkmoO%72>dzuXsE1%W>I?bl~99 z5+A%=4os~vD~s4F3H_>h4z-kbV=^6=jG^RN!IlUhqbQ?SIG5W z6@LY;mvn3yhsb@TnER@f3td~rA#y)o$W?xX&zN$ZySR4MzA9e4Lb(bYR+M|M++Ils zFY16OSD@Xi%F1#TIIJl5lVx;r8HXr$e-XZ)O8r*o<}waZ?g3tI@4~A}H)gu50{{;{ zE7t!QuP^CNMJ$S!6!SkV=idqJ7x5@wSIAe*OZjEGR2d$Xy(^SkgvYXSd*t>;cz+eV zSo^B7q1aw!xkY#^D|gQ_x>ga7%JYiteMs&X+D}n}7V)Trc*h)Y0*|6J%TbDW@#}^9 z%JZajNWc;nVcq64=T+q;QZ6K635OV=l&hk3uu>wH;ZV%4P;LCHIC{g`Gso8@!Xt-=lQRcej?T{+;`b=FN`_PpvuijVts20;A_&U~2gRK!7q1BRwo= zIYb0346!UYhbB;TcIHRCcXW(ZX(Rckx>VIJOO>M<{>|pzfhw(sWrvhn`B4gOPp7fn zf5n&Uq9%u3ts1Y=^yZMT=ij9S>8Xl^SAhi`C=~z}c+aw%CwKP5`9s;Ui-w)&_cGzL zvF~fl`d`O??Cg!Cx40TyJ(DeW-BatbPQ7*96f(>WUFq+zT|ay^E)3d6EpGiUo@w5_ z2Vtv0U^32slaxR_kd-pydMBMoOF^nMqVeUI_dWJcb?%VMV5?HsRn^)}_rWOo7#^^7 zx&lU}a#UbufBp$X*WpGL!~*-KB37G})Tc6aWkh_75JfsBCE`n;;%dn%7!SXR#aAsz z%PNQ@G;qedlQS&kgBiexQPkr^6p>FBQ=EsH@gHpL;E-Gh#(%t0V>RwQ@uKoSF5bpq zP*T1;`5#IcncyLD6}#e8mObdsrJ9WSE7;Yx{)tF_JplHhgKp|T+)~kDly|667#U-@ zUtKI0rE(a65#jhK-LvoqHb?-geiu^H>zUrq|+UW}8a{J{{S4|cSiQw#f5QN6d zcN!(z65B1Ozn{h{GXfc@w}~~-wk{()!j2{B0*lk<5$c~LR%JS*Ha4s@`u|)ucOKle za_$_qXoQ)+EMGUfH21?YoU|{aeIw3H5&rY(B3z~Xc|1%Yh$hX>IaIcQ-`Ef113sPP9-h&!*a_=$BstAca-1&hL+Ez z^#|}Q$uCfgumEbECZAJn#e9i+F^PJoDMeKL+ogz_1Tm<2y0$>ol}eSUCs8*hQFlpe zrE(ILsT`=hxLlEbSapZWVQRv1@-XN5t2nH4ig$6^RHm!-^GAr1m8rlPmSo~-9LO${ zJC7~>%DHph$OVoh*|fOjc}UU4xx^_1B{=qsQh$Y1D*b5=$0qEW>iC#op#cPQ@_emK z$C!3fD^nGvF{Y3N^%K0U)r)fHVQi)`Nx79RqAtyG!12s7a6oUvQFAG`m$yvxBPfY~ zPZG4CpN-GbzKVR*J|N}Vd9Ktmjh$)(BQrFX%2ev>ehvxmi}L_4&DPn9rTM&++L)~> zrt(=yshE{B)c$gLF{%AUxillGCXEPka)n%sXJ;vIIU3L`1D1>Rm!rhuGRx6}paeaN z?JO=sR9ReRdD_t20&R*dEk_|L0}2((RAL^p&sKtD5OXif`Sdyt-<*^1-?1ol{#QuF zDS3HWaM~xRos%0W?+1(W=5HwF{cKU*+-H!-HteE$i}U8+UCMg~^;U_*odg^Dvvcml z8(LUl7QTVp-m={J-%GjoaNbn&K8ZJ_ah?1zjca{nD%;RQFz|jjXY#Ua-3KZ4B`V8T z7b$i6iO!-z>qx`IVPu>$-}iIloG&)0<1F#II876koLlI9>}a ztMymiUo6X|u2gp8UrMROtCUKzr3<{OR-E-36``%p z6%%tvgi8l3KBD%?4PQRvgt8hj+u*`+g8L3`)VaNSz1O41YdPGdMd*Y3O$04S7b0*o z6IbI3W)#WQo$ku<*f?3%I(BZqqa}FtuUf}fug{JIgB`wKT^(w1tU6B!u9{oZwr;>R zF=D%5^VwnBgJ_zfrg!W>UiDh67u-Y(CJiZDe%I=;(HKuzhFe?YDRCXn*MA zeS<8O|N21hLzw=Awl9Lc)yl7fj4FAX`XQKWS`__?jf(Bua#V7@f~T77EG&8INWSg- z9<1c-Tp92J5$zD4Pco^=v4Y_&X-9M`#Pu@v@9Q{zINIB0RO&_@#wwFig&^CJwi=D0 zwcnN-svp`sF*f-Vin-i26cp)6U00)5{7T%2$nRRcQe`(LQ;oOpKC4yRd&!PBzTFye zPULs_oJ!U&s+HkpN5neOuyt5{;H)DD4;&IcfM=ouJ&A-3kLX%#H9n(FuM|22O(+p+ z)!(VTy|y^~d;XV)pMkTz=D#}pyDNv^-+I>W*ERh2pKkcIw`=b#4*!3W`e01yg12Oa z1B=@Kd({83w=vylw5ych0GHkP_Wu&~jjbTM2E>xq|xt+r$5FQU9LG;kUhB z>Q^xT;^7nZAqylE)tOk5$fOlzFvyTHKfViM_@v^Oid`$0nMD~a724C3nQxWa`NQeT ztdZKWP??2aab^9Zfaf~EqgL^++nb;LfhjU(yy*EAfK6@bc+qC1*<|-{AC# z_xyL^<$QNqc$X6`i{SnB>EPv3M7i*zzaPIViiy+0yPPao1aAd?7xR4?ezW4=#ShED z`?vAC+~oax;Fad-!nZhn&%_L+d4YNQRX$Je+eMrFDVjNa^D8bX@ia=X4QEpcX$~wd zF^{L7(Z<$78=XtqnEyC$<2as#hP=qKC!ra|pd;`_9v8%x-UEc|JHJMzVZ(Y)T`bbJ zw%gx3Hx-}66G6my!Na*f*TE@M?qtZ&!gp37I&=_j;xt(!U;Ml#V_ zt+S;uGF1-|B<;~iEb!frdhdGD#}}vWUp93gw&_Z_?1ykkuu;*c7$Fr0x*OfEDqfAD z=$X(|UcVq;Z)jAw9)NQTNYp(8kJpv&#ur144^55#5jyRb?(*t?^ z6j@HT{FeqID+AJeA^}0O3_=FZ3s44N3?yaX_k0mwq0ITxB5plRnfY$s4pW@2%yy|A zA1@Pt(7PA*XSEVOb&?{&K1cRw1@`YyK4ujEmY+jd>lurKXMjTyUV`9(FbkE%M#JPR#JNlB@(Lit{w|+7(`pQeyW5?HS zJ~1$GV)NSLW7RLQ=FINC{;e&uyZd%$xKKh6fGkT-VTH~m7=wqIqRc7-T+cjUSQ~5(i#FzBF z;_HlfJ0r|BmBWR;KD!0p0wXGIcXRzj+ovYF@}CMOJO*#QN*qyX;I!~z0Q58f@&F(X zMag3ToAz8iLSm>jEEsK6DPK1KR$Fg+-tts@|HTtEmppm>WJBbYnNJ?@WL+~uYr;eI zlOsc^sdVjn`+4_%_wv1u({+kXc;7$=)cE;$3wL{RF&=V=nx-3f+d>;t zO(V&wM+OlMQ4p%F)t^1<=^y9@4}acWy-IJjWm^86{fywaK0am9xoe*Pb^hD^n;URf zXA|sglNd!1;U88NQOmC|5y9z}i(Zi4!Q?DRSDAR2Cp9jMnM+^5i_<&KZXLU9ZP(gF zc0)3`)?Zz#V#f4HqIb4$^!(wqo7RuS2iuK8bab-4rJ>#3)?l!YYuA79iYq?8+us#y z?(uk?_O1au%4SLJ9^8CxW_-u$={4q{W6zNWfdy@@h$-YU*)T_7ix>6)<{l|Tgk;Z< zH}4V~a8Sw4AWausk&&*I()~7yt4D4$X8yJipGC&(Si+>y7!9?~DzmB06^I!%nwDJm zx&&jF-ZB)K?#XTHja85KGZq*=d_?VS%=#M}ThGzfxAz6znHGcHSf%Q%(m4_?Te_pZ zVQ}EueKlUK(6OtlVJIG-JZo^G#$C7O+I?B}%hcMOCmD@&hq!Ps2zLmt3Ao$}As{Gh zaO)ce&0Tc0tH9+vzAcY%!KqQSWRM-DIKTk+1Y+LaO-Z}?nAm&_4-0JS&5asW+GvL_ z&}i9cZ>SHpxowvGVY8!0JA7ho@4@)QMEqdy+7rX6?pT{`BG?^y=Q|VK^~tUMeFx+5 zgMEAVgAYwW_B$acFz;|Ra4D8GEX5}qfkLwl9K$_$*d9~RnhEL58izjOOix6W8V$2< zH3e<9gsawx`DSS!jZ|s#FGmg@@7p-Sr&ZgbHI}BNmF=Rmt|3n$(KqbN-wgzDdq04Q z(@T=_tb;Bm5tmby7&Zi-C0Ut+yp%wuR|eTtf?%|-InwV%G=~eW4)<@(#HYL}eZz*4 zhE|J8b;tOcb<;zm-qo+vSk!d}CRp3IjC^m$MLjoN)3tjzVz;$)`t_n<4Ebs!RcvVg z=EDc~?|+-qQ6}cqB<7*F(gpX2g%{vQGY!g;4*DwlIslhuGa-nkSRo39267K>R7Q_&o2GzF!4?vOv7Tdq;BKfvm!fQX4{P8aK^8_=)`+8M}M@cE%uT^S@`c zxRktJ@Aucf{A-;*Sa<46kP%8W69DicYbi@&D#c!9NNGCZYNno z$q1gsM929OSA8YdG@`SJHwCax(Y-r81T9A%eTCfRu^?D?_Zj`cmNmOuJGW;{tvhcz zdgQ7BTOj3ew6}z9mUwT&hMDM4^9%xf^vr348{RQ@>1~?>k=5Pa;gMBM)svb;SFb1D zV$($?j&Iv}!GLq`Xxj*)*lOF>b`GE057_w8A6tvvuCy+ z7x>$OOde#gu)x#Rd7934>CH@zRSh0drul{;Vsf*t$qR-(xmb67!qzg=ylJ9$YwPMu z##8HC-EDqz(DKTQ%C3v{WoI|L+N~p-TPC)|RV=+@)rEoBls`hw7d@7p-z(D%!5w?sv5Us#fjlPvW^p=T_Q_-y8fB{PvwuY=Hn`QNm^T@P6;)qUdv9fA-&IUF!+21^iHk6gZCz# zPI~eEOZ+=_h*G{#%fHV98VX1C8hoNg5GSCXZl0SfSudI^$w5LDMQU#CzG(Z73%j~5 z+_C+l?wygDRlU=Zty_C$qPgEP|CVbfC$HPG^}5N)H*6W)pUdtanms?e@2nZT3QpE@ z#RBj8cmWjlXa42gRCia&6$Cw!b#P=h@ih6YPH)CUHQN{{r zb`uAUS`^R%O!88+fdHuX=$8DeLeHru*zfW>2@3WE@AVEoJi`1J>AOzL+mOFgfV@-& zue^Zt!C=geo2uD%c!7HFeiysx)3!dt$=jT*ZSH%!fBoH_arSBJkJtnnhZ4sg;f+7Q z8>be($G<F8SS3=N>lqK%iYUK04&c#SH#xiRTb=qCs2Ul;I zI@s-WbRC-B(m&;2|FIow{FD9TLc`#6q+v~OgynK9+&hzuO%KL}@i(&^iw!l6ZWhHY zBh5om2H2p%vsXAQU*ZGBW*ToP_E5Ms?)1uMuY4>)=Mtp*XsoPd;>?aMk-_Aa0@W)-{+g`d-$O>XJ(bRpnV$MMq!xT7;!tcpm1;j$u*8#}RP`&?jRI59fi-nBiQ z-rm(dHI^90a2B(vh~fE#UkgzU*jAybi7g!ABv>h(a8M)-+LOLheIk{*CiW!F!{t*e z_ztDyfrE!24y0O3WJ~#MCq6CBZl;)A=x3)u3euyocuRpyvpJC~y2g@{tB{o3=Fyhw zPxo)#s;k#OcHleTD`~i?By*-PsQgRDpyA(M%YOz6?lRzDP!-_)KldGrF^TRdiEcW0 zMCclh_J5>vJb=9_7MK4YzL(e={8z#5|2KXI-_Uf7YG|<~e)@!j$A6@AJS-Nq|F3^v zX-W8d)0Zp*l9DE=BjEG@?R=Wo<*Ll$?_lO-mN-&zvBXL1!vBN$uWyN##=f}h;)VME z`tOiH(5QqcDHdEZ{WGT=EP?+>mpE9g!(K$z1T@Emq5}4hbZMo<1@#`_hp%kF&lYKA z!=CaV>0EIaub~}_G{1l!>~TqQ13&*r=bJ1<22aYHDx64f3IjVUt&>$)Zw?kqlWX?* z3M$WKF;Azh6}(U2SXfNwTec-zu3~95+xQHX0B4)=?CO?9x9{@wLG2A6qNr>SvxJoy~dp4wq?@Q`uRC|MCi3pI;x+` zg(0<1D!#i+9XLyyPnSE_k6ggu+!|{ ziZqK79E*2%#oU+#&yxHC?g`>^D0#ZJK+%;- z6)0DrEIHMJvP)Vkl#?h-r9j~&r3$pewUx&4vRr9y5C-|&00yt+yjPj7*3WMt{urZO zCg*i34PLLO(VbL$j@Q8%Kt=BSpUZPATSVO$a)F_*F4G^zqFkCwd`bO+TPFyb)6Z)f zleD*+li@>o%=c3Iyy6{&zRS`9*)|F8KQEg*pE+Ib9Pw{aB31T?QS~j&CHfJZMCZrl z89c@3s8qX@KaUFoRDT^#S7?Sy`Ggf|oF_}PTUM?~<%tuhJg(MG(=47m-Hx{?9f{+? z8Ju&&EHY0<~5u zRicVSHJW#z+LG2vA=>R#Cs>lP*j|<=j@8OLLK+M8B64hSnjPx2!2)45i%p z9a65oESK;^buphtO0X7EL5p(z7Qy%A(rlex)|6m%Ax(+5QPcbtSyMtPajKNs_KjjH z=Tk~0KE0xBgoPdpIGO(vmPrSm z&fyebb<5_?Po6G!?l@s_19L84cjMArP=LcpYsJ4RD1RNosSt%EcuV>7ijT%iu$qRcW=$}d}2%JU0UpwWQ} zOX`>MIW<$a$Ds)h()EIDH|2-4GH6X2eCpqj1GH5D#dpY zi%P``7?ySr#ayflE8CSg<|XY`)*n%C3$4eby^5Pl`Jl{iWPFt86J@0Ovi`WJekotp zA6Ll7tbtZfSm*lVilr*_#}!Le=#MLwB5j{$4c9Ukl_J^{#zk5`VV&!bE0$ZNKQ1aq z)S>od{jrz}Nw>09i?ClQ(@^hPP90valwUTA@_b-lt}n~9MfFShvP@ecf00aEu~daj zTd`DyOk1(ke7Q_pR0`B7j*C_zq7Ij7E0$X%(-xHjb$ENSOp|gYuPAne9YL6hX7W`l zdHBe$dXbA+@e$|Z(^>F~f?HoMKAcGQ`m@ot{w@8Xq;+>wwkwiti8QnX>{qUO1&;%C>0C#8x-l`G?dVBo&X2V_IyzsuUcGs;Z7iX@`f6pvSZmu@ zgYx=^|ETWGb@Zy0zH}tFN)1XiqqltsfM6j9^#Y{|uEOM6TObp?XKJ%GM~0G98{=b5 z?l!Y1uw5;wbgHr0-1Z8~)}<$6dY!h>z3Guv-TkY&d-m4p2_cHRSdXxm5R&^F z2)V0-klwQiA>^88Q2cn|L3&jcSLWm!$C78>J@KX)y`jpauJXN-2yW=to0P0eR1+2z zH?W6<7YkU-{a3MggM`Hfab+w*=8v;G6i*0IfdZQ;*aJxMLA(7TQq<&Mhe5=Ie#IAr zJh|YR`Spqz?obN-wIA0$1n2XgFYHlViIT|G@LbpK?$$fC57mAgRlRUF{UmoWr12L$ zYVgQ`#LZ8Yfce~oE0Yo@#-Zl`x`eD(PQBNuDy^i#E_$V|`p`YD5U zOlRsiabWkQ-GDYO_yH}#uwk|OBDzcm0kE8u};uUDLbDl!bKq4!6D2X_`g1wVM%c1@A7Q&#-I=&|; zm7kxkEPpx5Ba|KBpI!*@@-Jg1{1aZE{;gOA-ZD~9NXBm|#R@N*V5+CeKC{tHXGI@3 zdpu^d+x;v0YjL}UU36v9>2$j6b{GE0e}QwkZBX?pj+5edwsG0-ap5?|da*$3jzS6( zLN{i?f6JtUE8@Z~#TPm33NwfMBraY{;P6^9*Mf$`V{&QE#Zs$fTrK4TL(g%{Ncp=e zz7s|FmncdcBU6Y&QEYedC@Xjw{Ve`2^ER*qj+65LF3wzu16Sg-5{E3}s3NCTa!zqP zD^PJ+>XhRfn3C~H)GFdBE?f<2iyYr!P}9Ef3HFrm8jlOwEJ$~r=t@T{jT<(&2PwIY zLN_P|eqh%p)~^ZMU74Q5P)u~TjwH9H$CH-mz^0bLEy?lT^q~VS(_79?Ic$!&v%k~d z)gG&5NAh2?b@mSUI@V|1k=|HGckhWEco^#Cg*5vOLMj?5QfEn!X6T+0p12d?9ou3J z)YRZoknjJa>^%UYINtx^oo%x_TMjtjI6551arA2(NAE>Z>@^kyL{vZ#TTC&DB{5MG zlbB`_6BA>4?}_Q%^xm84y;t#lc5f(}_qiqKu zE+a2G(l|WsP*Zag`g`0s(5NC<#~#BvAZ0Z|odu1E!(pPqtuPm?4{xi1Rp7gd(U{_g zCoJ{{myS2iSzWujrFrbwF=NJzHNF^ZYdm4{l;i5Nnip1_c)^&iu7#bQ3p*CWy90;6 zM=!8%z&c!;;Rir;Bj8N6O)pY zlOQp8RWih=fdo{H7nQRT+5n(%ib-04l?JoXhQ>zthT#Mh;x@tH3q&-}boprH98tWu zeu6YfaHgd?g-LiKC)8Fr($X9iwa}Oy4@%oWn>tfzm2KVg*||H(IVx1c0Ncx)!M@rbF} z&)x9-Z2+^5UB+x=Km5O8rrPZBu{OK?>{z?qW{b14%aS4Bc2Yt@a#CVqVp2k)5f<@9 zD9(l9;&5i$Trh9(c6P3M4%rD?m;7uy^9)1~4=?n#fJE4U9N3iH-<63Srh)|a3b^J;e$*j*>Eb1=#dR;Kr07d2K%22^t+f< zFoz92DP|QMK7g53gT^6L?BTP4Q~lgt(26vu=m!QE`{ z4rL@H_|gk20|mJ=PMYsbOLu0Zr*nJlbR@&U@rgQ2Q8A6S`f-kmWJ)NzPOwuD$Ax%g(dtSi?9fB_@Eo zi-Hi4KGQuZ(!#PyESH)9g}9Ji#LP0Q!C*fu_@<$|hAB6^{DluT21?3wLMji3!#72TvXeHz-Hs&#E1YH&_G8#W78Xe`Nij;T*WO zuyP%_tTu=c42}=*ANUX)l}5Fm$L0)1XT;l`PJ4XDyrBfDPC~~94xQ~xPIdyfpQl$S z1-u;H3@0GR8J(YCCM>)T_ZA??l~KJ|hj7}Xw6B{)RFvj;Vv=K9ZJEgxUT0yv#JLk3 zjs$x~##64+s)96MZd_VvTBc)iuCuH>E7_Hn5&wE>Mi>#~^4G%)P$Bq`nMRCp2Ftq- zzdZORv=Vl>Kh?Zn6~5188u$N^|Kk71f3cC@@C8s5(!qX9h6F)zjEK-#DK%b*?Tn%( z?b=obftn#(GGyZ+8yuO4T*ek6*iw)9nW+^8lYP}G@MY_TXI7ML+hx2FDASPD$Z9oq zo!A`tY!>9qpX9AEa*jKHYh~%_7edYy$jOIu8iyZY2k;W{Db>D7`4y=sYQlx5msV~) ze;nkDV6H$lXoq1+gD$7dpMms@D*|^1VE=#l;VtY7oX<2Bb|b7Agk5%6F~k>x%@Pjd zECAY1hM& z(tG$9Hi3Nx;!RglwaOd{>m9Z%G|+Dm7#w4xirK{-3I=Qq_d<*Y2&5O~H7~D1I_{7y z(;I4TI1pdc z8Vr*?R7t}TivQo}w#diG7I$-DUR7FBrFUG5JtMgXJ@H9GUVKbVP4T#_P`6Z`of8u` zDKakb{V?I#u zJ$TEEeb9NFzW>HML3QBYX|H6Q|7F)j6TR zJUc%)CKF9Nt|lh7A}MFqm9W*Z*_IhQuDEPUFmiA#I;5rfvXY!xQ)&iZZW8lqT=sOu z8&&SEn->HPg|o%jb?hs~R(aph$dt`Ih~Dr&LAMRXgI%b`vGt~xD#k?4s#-g_d|spN znAoV)!h%%0ZIL}awV*IHDY`;+`%^*_+~}j0r6nnWw1xIWOH@{#uOuy_EH17h$zE9C z@h2tc$JXgl#Mx9dm<%LL1rqYvzYRzDf0AIfIk300sI#$nW_9%3I6XNpH`#9Mu%{b| z#H0#qt-H2~O>1cLyK1tJu_Z@Xa|(l%8Dabczb{anl3b8jp5hue=FmrgUI6ZEJTSo6 zb8EH$MM0aXY}Drb>v<|8X9hTyZSYPn${*7_euA$q{U7nvbIV~FsOP69MfRrp` zhv9%1&4xK_i+~8aBbpj&g9;>in_Lqnq!h*5i!+xj_H{HlY7*jN0_^44RT^U|tcuQdiqIWfmv%P4fy0<~1+s89Zz3_}1p;@qxND^lNKx z%#t<~?5Kh5k!w08&Y3fD;xXCdphdtah3#b*fHN2YeuClt8Ji$o4jlBkpyh;y&UW+- ze7g7a((Du6rE{D-gpTF-Q_e7MtT%2zUxDR~u$Hxh_qVm3F;j|=B#ZpXksqOO1rXzR z4{L-32G`vRL12Tn?vjClk`h*%GPr;8WJ5+-jb<@2z_;)fn2=;-huucR4}XWAzxvt*BUl zoK%mWWusjwI&rBH_5^$4^=x`_f;}%k>BNFuw-<L*H*b)=ty3UTV*zSKAk$_YL#=$?7x!awO7sX8Nev-2pf*@jwfjIQM+{w#xO?jy(z zB$Q;OXU7z{Dn(To{A7fouO~-qmdMnozvU>fAUFfO(6C%U z6Z0=54xKi7lzgJ)X+65(@KwGK;ZlvRxuu>FZ4s@$cSatgMBZVbukpq3FUuvxr# zBrTw+7l5XwnVNc}OdfG~WtfXcD9R`;ab;1hwU`VWQk7A9QsB;^N;|mm2z8+hF^Div zi!l}DUm0>FJ;R!G1Wjm3a{kfG86nORp@0&_J@B7g8b#%-e`8k~uxl)sej7}a7>3R4 z#Ts@jyu%ne4bU(e)(n*T=KOkB&RDO*ZwyrUL+p2ss=OTc&3qx-Ment2^3Mf_R60k~gaB94Xce+nDhs<1*b7Llq@u zW$r?cH_@6GaIjq-S4yhHauKOH2y)F`_%%av;lO$(KmCwMcW9hyZ+ zfJ22h$XsMeT2)na_V%F|^^7Ys-k*6DvJZZS>~T?6w?7W^ZcfZ_#^l=V#TA2t$vHL{ zS{X#~s0A2P2nX~SE$&ccqi_!bm;;0b!Ci1Nvnu%kqI8)fab8MjChNNpAdkmgQ1%+;YBYw zilbwq^JB_Nyq>tUsIePTDl!{p=1*X|pm8Tkd09yX&(FxYTu~=XEgkCsL2*ERg;fT| zIY#&q6CRWuGJ(L9z&{O(zX%TvrJ2nh>QimuCbwlmW~JR;>&)}9Y*f%u*V0m(UTlR{ zFl%dWVL`qlFUB+6_71MEZy>~@YK7SvPKC;w-a2k}oSmd9InWGOm6lc7JTA2+L>X}s z2p2d5qezVj%aC#A*grV}E`klHN3*nOIQ0ywz+g|7KmJJm6h@}#>69W}Zv|E*6lERB zD~=0gW&;f(cr0_k=)zFB6w%bD$k3HM5om> zxe+jAmFX%k-fK8WKnMf7`=0|sj3K#U(-klz5;$%!p3ZnuHi`MV9g9{uI=ZmX=b-5r zkH_ZPF7jEd5S#H}_P$a#O<$G$kSjORWQ-l11q_ECt}$qD475g?J~A+yj#U^~)Q}hh zU#6Y=A+s_u6iTg2EzY+%)6)y%n@UrPNaKo*K2&2SiB2^<(&auAn0r`t$Dnhwr@?zJJp2;2gh# zk@*w41n)xbC}WD!8VD<=DT#)&=!kIvgA8XLBzAs6mLnxojuJz4brWoAgi0b%$}JfQ zaV}BV^Ht6*?_xbl#fl7WC<7Sv>?-rEFop7ezc&an)$VeLTEfBN4Or zzK7aM!T>oda!NWWz)gd%=A!99{9nu+hymi0jdM``1!TCrgko`F{Wpr!lj?T6(^ab! zs;#vpktl*w)IhE?GSU{EXhrtBG7?iDK;E8T((XuvVeV{>_o0SJ%@RQpjKh=+nLZal zp?^3^l#KI*!k!nDCM|}J@_gYkJu4r0R#}MdbzAfFoN-5aP*5MP9eiyycuhtH zG8-uX^v3_yxf>0E4JX??3qIUSMqGN(Y7M2k3JuItpEfWzH%!i`*%`{+%Ycbno8`PF|?!4^9bZ7yrNozKakGBkMK ze-M^|6ts|C0q#zkF-#Pm~+V(+>vQOp`y)U3qv&nrsXt;B}O|)k0<-BpWJxG6*qoj4W#5Z zyInBeS?mb}JYKdd+M1R-BX?nLYE-mqY#=b!l~+{~s;LQ;RE5FN8_;w|8^yMc^7DpU zQ-Gl@*RaGHhV5`en>Q(#m65M-Brl`9s<+4AOD;-FN^@m2vRwt!O0%nA@+u)= zeAV>sTt`j5$D5lzetc$@*OOmkwC%>Kp_u?43#~i@b1@@*15?s`5Qo6%r_+%IFh($d z0=?ltcIEht>TI_^f|K$~76kH8Zm1wHAH~6`fku}Ky79@;xr6z41dEmO%DPaf3WS=# z+T>S3fvu+4xnN!f>aNH*57_KA`ADpcr5HIOKQUAwauG$)rH0esSU4XHc?XM26EcBb z!*?u%cUTO1t)tY>FrY55{YSrbR|qVP6?9JxR=+l6Vd}Meb76 zTN>{Ijs&0)cohI5Mgu@A3<6(tv6iY}$sT2k4aFC*T_T^y;`pSGKhDaD0zMdxO&hoZ z8q}QO420cx7&99^nzF07&X?R?Gi&N3cb+3_4m?uh$@VyvVR=U`-)zf+6tXat@EcjkKRIv=l}(eF#wu4)?}mV=s4?d%d>w&d#K$RBxPw zbH)_Jdo7U>*-?Hk%f=Ns^8@LDgskeA#L73~9kB@sc`>RR+1;i0+GFaP-S;FV*&`#e z;=uJ(aIPqqmua!Y5}TEloEd4eTa$8Qqm<|vJ<4DLffBs{v^$uhBWXXP-!RqH<|ttWK^^Av|1+(qDW@0?6H}ulIp)qVlm9o}``o22 zS7H(mopE9H|BoVsHEk|mXpdR5e;#yg7YKN*$$&ihT`mBqMBFZowAk_eM&((ZM^-Un=o&S;1IBY z%V!HB|M8&{s%On)+wR}E@%|ko zH3I(j2t;`P^@8+L7%KGI+%A}~C@l>&HfH;5DP`=JQ4uaJ!s$pVbSf9AluDk-z1ytE-{Mx!o7 z`Kr=urst$oqF3C>DfQE`;`DmeR$A$(8_Z>Qs5V*5w#AzF%v7ZEcL5d}VZECNU0Yq5 zJFRl?3kYSE=!|kts~?=?Z8AKL@R_vfFuwrqG7Kq%CD~=J6d&yf7?Dj3Pr!86MxE%2 zrYss*xhOa}kwhk&s%@Wjx4vFr^Yl) zjE$Zc8R_q8VbdDjS!1$iHOCY-?*j~(aR4>U0WO|Cz5JfVpTF64tsHL?VbBIPKWsfDJr?*A z`98Uwq$EpLzoDY=^v`gDO*Bvno;0)yBUZvV=G4$Vv(J$k?&%t%8flT2WV?NFFmSIY zkg1zCt#L?Ek=6+N8HWe2>1|6WOpY&1mgS}gn%b^bBI5LDHOhjVgIY7d7?s7aeL!{^ ztX?qZ|HEUYh6)+I#56ENjGsi1>=4Y`?wy&OtBx`v+Bbak&%9il-Ou%^VY0(pBIQ z_yz$}4jh8@yv7m$n3(|wi&{yb0E+K4I$X5y$PAWdbo4lg0zWFGI`sT*^px6xBS{`- z%oT$NDM!%axdS9p=Xo(+@0s_R)z|Eg%g{(_WO9D0l89aj^C~LMlZ>01hIn=8Ao3)5 z3u5gP-GeW%3w&eT0@uLuwwxrR+9$vYiWr!VhT$5ULF({w0kb0jdTY`;GFk9}rz$09 zMzy2TA1UaKGm`4d%1d0JlA4zOy%BNchWcslC}(0b9Lj8~oR(WzJvepbBw?^C=w+y^ z2xAxgNWe4Nmi*J1*V*rfYQPG$ak(X3SF}_uyD?`*6X7EZ%Re7{k#Zhtp_=0+ay*27 zLxYE;1xa4Rdx!wU$zaI<&uA7$jXjMN$rRBc1NXhnt;u<|l%$I;DsV<;Yq~!!yD_(A zTxtz_ND`VkoSr_l?$AL`0p@G5oYYj!CTBZpymc8+^-TcQ3hT0Hivd3Mu$&o28)D-f z(PFHxqtazq$GePXJ7^uG|-$sHrfy$HYVAqCc<=ac+(JA zW|+LhrdI+2aQlq0V^MakyJSq=IB#h}YFS)j0-BMh$rgN{9h=|MwV!m417 z-3=YC3k{*+F992kDSK3zkQ0}lol=n;?f*`KE|3t zr1%J%efM{E|6ot)+|;xMCH`@_hJAZ`@WV!pkI1jg?pU+7BfBC$LPWw0wCU}-Wi{2S z2Q#PE*UW5eYwXMviVApv?i% zjO0ey$2~(u3Czf~`-3Bm#EeCY)=`uAIHk3r=`^7AapWFqFHpqb+NQzR(efcXNL%*9 zAbL@z=#8f6X!g_baab31w8z438KTN$@EiZ_k{rdx|LJ#F4tvmvaQ1za;bD(Rf;o0> z@(TzyTYKm!7%j9R7KjW{V_#(VAEX8{r8w74E##3zJZ756_=4IjlzixO(?-HV9KdZd zxe{&!M(Qcd6~l1Sfpp*oXlKW0%!Sc~QHquc%V?+DvP+MIV}BsxSYF939NdJ~d8(Ze zpafu%*{xu~qF_S3`QOV)6`i)^LtRh9LL0*rpoZp16}9C?-xJ7+j%DM9$TBMC{EV`U zSf?VTXelWckIl5<4*#x(S8i-{Xf$O%>W{YD{Xb_#YaxFIb(>Rb3PV4YgT=sC1MH1rJ9-kX&OY z0?gk+8K|>7WO2-xQN{#rj7js6M5EmQ+LmzgD2e-z{RszQ?abNdC)mS6g_wBQxn;yV zfi()kkb@4uMl&29KRlu@9-dDeUWfDkC_`+}+=Fn8Wil&`R zJl{goup5Y9NYgGRoqva>vmg(}MFk^eM1>>tBM+kraWub|Nfrz@A80^6CPJv8X+M)L zOrq%kBMAdEUBtu-#%^~be-PfYlctLqB3uqOx{q1LtY!L{Zl;S_#0)@>*$XRByzr9> z_InZ23D@zEYXE*znF)}yk68?N+s(Yy%u2W}f_weU3iv+De8&L1a|QG}3*e^<-fZMp z$t(cnYKNRXaJLt(#v2#HZ!e@)z`dn#Lc###?geAg1@G&GpCyoPr}Qm_9NqBAJ&K;m z@Juf}Jqhx50fzC8exN-c%HV+!tx`B~uoZq9AvIKrp=a`rdTQwVRAwkg>QOnS0g6%1 zZj)+*Q$sjI&kjBL-|y~*=Tm{oR48jdTsz>MJtoyl;GV&eRG_vGe!8GE2KQUwrxuXL znWzTe)&hTxZ<@^~4G#B0ZsT(=@aNxh)n-)N3ao_AsOGb^;}-P)BRw?>~_Y zDo36lpwH);m_|+Y!fz^cCk+0#oAR&{=rH8TkcF@$tY(a#e4t^ZbR!bc1#cJ_B^d?( z@pR8oTo`%73V41cl)|VTLvq8MZZPv3ay=PR3n9;HliLQp;T&P9GRm+5XfU|264FMA z`yp+}u90^#aJL1nttRgcE{?pp1>V#Sxx#NSxN@|lc%aZ$T+A!!h=m^VcHKYw0>W9yU&Kt62NUu>ogY&6ywoj@_ zf4ByYe0nHP8@y#H`oUUk3NanNM_sB=r1?-5CAtWXRbAPt}+u?f946N9XwOoI~Fl@GA^*^Zdj(71G8~?AiV{qRrNwo+7Gt1 z2>P$Z;Hi{=Z7l=$uY#$B-c&Vkq82PmJ?KXx1R89Hx*Q9dGY&Y@3hl>4u&I+lBBp|l zOlM}mxc)3=HggO!hndUFW9Bn$h-daN8<>sE{mf1{FJ%+6jX538)Vdn>`w7ezBr>Nk zXCsUxW-F4JQ<+DY_Yh$&VXk3*fv}~&!kH1*!-=p@FgJkgwKHczy*>jq^d$2%oUV8P z&hB~+BAqW}US?ikUW7B?x|r{ov%r^lg?SY;;w$DGIID0m)aDZ4`BLEdZs7iMkO;%- z8!g=`upVDBYnWp}y4NwsGsiJ^F_$qXGAA(WnUk2WnQxhUU_FTnyB&38K@rR$W)MZf z4o54Tw0Ic7rf(FBYzUz^n8}Jq2`CXIp=6jEN=0cX9XXianLkhla-vM+LRrX-vQZAo zMR_P66`(@oL0)L{|3rQiKt&L(sThS2bV5)WDn}Kl5>=sUR0HSXe2i*Q9jZqSs1Y@x zW;6zkMJ;F?8jo7h1UM1mCgx@|2~K31f~KNrXgZpKW};bWHuD$rH*=8r1RaCspt)!s znvdGh0@RK=P$yc5y3iujjTXa@`%=_{dQl%*hL$t;qJFdj4WO0Gr_5()63UFHMkP3C=c5;_^3f;OOyXcO9uPDQ7oE$DP~2HJ|Y zq3!5QbQaoy&PL~;bJ0$89y%XgfG$KAp70&j#9o>QMM0cUPnTyap=w5Umx*zRF51t?gr95$D^g}If@WAnjlz7x*LDPV46ZiiD*PKI++ zHZ#{UkHfka53`?nfb}x>u|DQE*cBasNP$7Nm<_>U0VQlHM6@Y~C`pxU6rR;WIRBDS3EXIHQT>`HbOyP93Yu4Rvf{es7_ z$FnD}C$j4y0^`Z-DeMMzBfE*+%$~}g#%^IxXU~9fn{DiN_DqP0wu3#JJ%>FPcA=aH zTRbjcFJv!bcd-|Sx#k zaPrM_?DOmk?2GJ6?91#c?5pf+?Cb0s?3?Uc?Az=+?7QrHaQ4Xu5XJH%_G9)S`w9Cg z`x*N=`vvqbf z_;Vb`a{?!Fn3Fh}Bb>sioW|*#g^S=KxhT%cMRPG+ENA25I6D{5C2)yc5|_-SaH(7x zm(Dr349>}AaxN~5bHmcc94?p36Z@mE0QGZR56cXL4t8JGisC zbGUQ4o!oic`P>EEh1^BlF79IP67EuNH+LC#Ik$(qg1eI2%U#9o5?pE$L?so1D?oRG5?r!cL?q2Rb?tX4R_W<`G_Yn6m_XzhW_Zas$_XPJO z_Z0Uu_Y8M{dzO2Sd!BoNdy#vIdzpKMdzE{Qd!2iOdy{*Mdz*WQdzX8Ud!PG&`;hyH z`d?Vik2egdg$MP-wIDS0e%1_`Y@{{<<{1kpFKaHQx z&){eBv-sKkG5j2UEMSBOrklIDr=gK@_kc39>*0MNkDz&;^SSAw&vMf>nqXVuV=1 zCd3JLAznxj5``ooSx6C5g)|{ua0nTKQ^*utLYCkbvV|NWSI86cg#w{a@CaVPC-{Yc zP$UF}Vj(1y2&F=qP%cyml|q$JEz}6LLLJ2NZV(!UCZSmvBa9VVgmJ=np;ee5OcW*w zlZ7e5RAHJhU6>)v6lMvtg=2&{!dzjVFkfgB76|P^htMf36uN{(LbtG3SRyPHdW2q~ zPgo`_7y5-2!ho<+SS73$)(C5bV}*6Xal-M!3BrlOdf_DDWZ@KHgRoK9By1K=6;2bj z2&W5Y2wR11!gk?I;VfZ?aJF!caIUaZI8QiVxInm2xJcL~Tr6B7Tq^7qE)y;n_6S!9 zR|?ZO?xox)wh-NHS>y~2IM{lb3X z0pUU6A>m=+5#dqcG2wCH3E@fMDdB118R3BNtni%hyzqkXqVSUNvha%Vs_>fdy6}eZ zrtp^Vw(ySduJE4lzVLzYq41ILv2alMMEF$rO!!>*LikenO88p%M)+3vPWWE+)3Zf`tQ4(d5h>EC+ny8BwF+z+K zqeQD1EyjqkqD_nw?P9!`ASQ}QVzQVbriy7|y66xyM5mZ3y2LEeEoO^3Vy>7c=8FYl zq3994qEGaT0kKF7ip63`ED=k^GO=8&5G%zhv0AJVYsEUTUThE>#U`;?93zeuTf}kV zc(GNSAWjq~iIc@C;#6^(I9;3}&J<^fv&Cb?IpSP#o;Y7@6Bmf>Vu#o%E)=`OMPj$O zSX?456??>9u}@qkE*Ja772<%nQd}jj7T1Vt#bd>F;&I~f;tAr3;(GBU@nrE7af7%~ z+$3%mPZduSw}_{UXNX(HZQ^$EOy)u6A@MA6hj_Mlj(D!PQ#?;RU%WuPP`pUoC0;CE zB3>%)7B3So7x#!)h*yex#jC`9;??3c;;?3eM;;rIs;_c!c;+^7M z;@#ps;=SU1;{D=&@d5Ec@gebH@e%P+@iFmn@d@!s@hS0X@fq=e_^kMx_`LXn_@eld z__Fwl_^SAt_`3Lp_@?-l__p|t_^$Y#_`djo_@Vfb__26U{6zdz{7n2@{6hRv{7U>< z{6_p%{7(E{{6YLt{7L*-{6+j#{7w8_{6qXx{7d{>JR}Z^hhaV0>lk4cbC|~h7BR*W zmNCH!R^g}~9b0e&j>J*eilcE1j>R?{hwV5XC*VY!gp+X!PQ__B9XoIacH&Iz!dcjj zvvCg2#d$a%7vMtd!CvgcejLC>IEagJ2$$eeT!zbW1+K(ZxEj~sT3m@N9exo`dJ&d3Zid@?=-Z@?Sz zCcGJ+iciB^@agyrycKW5+wqzBEW87sjnBd7;+^?AH$F1C-9T_Df~2k1|PuB;^*-5_yznTehI&fU%{{9*YNB34g4m4 z3%`xu!SCYt@cZ}!{2~4be~b^}Pw=PsGyFOJ0)L6W!e8TW@VEFo{5}2w|A>FWKjUBU zulP6oJN^UziT}cX<3o55AC_RXro>8|#7lxCN?4L4St61msS<1rmMpOGKT?X4tWvZT zBgINKDNeFW@lt}6C?!eBQi_x+rAg_ML&}hxQl{jRvLv^ZE#*kLQl6AA6-b4WNAgNO z$u9+@A}J^pOChO5DwWEla;ZY9l&Yj^sYa@m>ZE$9L28tmq-JT1G*)Vn#!2I)R%wDX zQJN%8mZnHkrD@W1X@)dYnkCJaj*;d_bESFGe5p-ZAhk;!Qm3>~>XH^o-O^%diL_Me zk$R;*X_>TK>X%kX1JX)qm9$z~BdwK=mDWkeNykekNGD3`rIVzSrBkF0(ne{Mv{^b; zI!)Rloi3drZI!l3+odz5v!or;+0r@ExzbMQJn4Mt0_j5OB59X&v2=-askB?VOuAg! zBV8d~DeaZ6lJ-egOV>!(O4mu(OE*Y2N;gS2OSee3O1DY3OLs_jN_R2v7|=}YM=>1*j5>09YL>3iu1 z=||}&>1XK|=~wAD>38W5=}+k|>2K+fG$*(aYBBD@-y-Q`C0in`FZ&T`9=99 z`DOVP`BnKf`E~gX`AzvP`EB_f`Ca)v`F;5V`9t|5`D6K@{E7Uj{F(f@{Du6b{FVH* z{Ehsr{GI&0{Db_X{FD5%{EPgn{G0r{{D=If{FnTNo(M!Fm`Fq> zgeXKM8qtY`M36|>&t@gjB!NF!+?&14K2 zOIpY{GM==O31lLfL?)9dWGb0Prjr?DCYeQMlVivnGMCIF^GO?7K-x(M=_CtD7gauL}@E+&_dOUZ6>8M&P7 zAy<$q$zF05*+;G>*N|(;b>w<-1G$mhL~bUxkXy-Z-d6m3IUMFvmH_2P% zZSoFzm%K;bCm)ax$w%a4a*%vNJ|&-#&&e0$OY#-@ntVgPCEthbjxtx7r_5K{lm$w=(xG%J3zaTqk|%awj*g)*S5R8}dgl{Ly*DHki3D3>a`mCKaNl|9N8 z%9YAq_sc}#g+c|v(oc}jU&c}6*)JgYpXJg>Z%Q`1$4nxQ(?Ox2}ksctn}%~5mJJT+e} zPzzO$>Q#NJUk#{5YEUg!Lu!dys+OtcYK2;Gm$ zjp`iOyg>V@h>>Mr$S^%C_` zb+>w%dbzqsy+XZG-K$=u?o+Q;uTig6uT!sAZ%}VkZ&GhoZ&7bmZ&Pnq?@;el?^5qp z?@{kn?^Ewr_p1-652_ET537%;kE)NUkE>6pPpVI;Ppi+U2h?ZP=hWxb7t|Nkm(-Wl zSJYS4*VNb5H`F)Px74@Qchq;)_tf{*57ZCUkJOLVgX$;hr|M_w=js>gm+DvQ*XlRw zx9WH5_v#PokLpkA&+0Gguj+5=@9H1wpXy)g-|8WCP(7?M8q!#e(|AqLL=9__CTm1f zG*#0yU9)HrTBH`GS+!^_MvK*KTAXIr;m)o#;n z*Y42n)b7&m*6z{n)$Y^o*Y;}bgLe%$LO)TO^?&3bbW?CQ=g^J){oKW=yUaX z`h2}jU!b?^9eSs}Q18+g>D~HbeTlwQ@6mhpK7E-CfLll4>d4f;lXlfGF$RXNf<>D%=)^|SOH`q}z9`nmc} z{XG4A{Q~_${UUvrezAUueyP4&zf8Ye-=kllU#aiauhRGFSL@g4*Xq~l*XuXvH|jU( zH|w|Px9Yd)x9fN4cj|ZPckB1)_cGt<_v!cR`}GI(2la>ahxJGFNA<__$Mq-lC-tZF zr}by_1NyW2bNci83;K)tOZv{`oR&2cg!1WZclLFR<0XxkLsULotbPgwRJtdMV)H=v(vD8C+q~drN`E({ zzd1~QcbH+#l+y0-m2Dowb}v@OjJ#J_JdzI6;wz%ppt_{1zq7MU+Dm&fYHEN{iP=i`N=1UY~i*jNCs8IY5gR z2#S-!$o=8V zB|O%=kXgg>M~)p%3QPNXyH*Gb7xncmA=L&&;mmErNnBlT-okC2=2dB3v9xW)qHwxz zBuzO~Os^q1T=bs44q>3Lw{L~k(cRhKxuSc8`H567UACyrOv-J&eFL3KJGg<4-G-qEf0#NdGimMV>GVQrqpl~7IkyA@H=5ecNnHRq#ExVqR2us4t*wV!;DZnN0mqdLc;7Z%44RY zSBAeIdeporn9uVIAiL0I6i(>qTsqK(>AU!2;S0|Aa=v52FF$7eM9tEj-pScFAG-}{nGqE%!kdS ziSIA;&}-Nx`U}I2gul>F?}yEYzc8%K{=y)=9~L)%VTgVXE2_URY^3~!we)^Hy*7le zo^Uhe_fT99#r05J55@IRTo1+dP+Ski^-x@DAp9PR>!G-wI*Lc}Jrv(d@x2tEwgrAK z#rINtFU9v#d@sfKQhYDP_tJ8EDZZEDdnvw`;(IB+kK+3%zK@n4w%8fXxZg+deH5Rz z4}KrT_fdQw#rIKsAI0}kd>_U4QG6f8_fvd7#rIQuKgIV`eA;aI;gmL$Ep=Tjz7PI{ zOI1v%DW=pEQ)-GSN--^EF)d{=EoCt+Wic&fF)d~BkOI>8glMUt@i(~`qFfEpQiUj2 zLliGW@j?_YMDaotFGTS|6fZ>aXg|nbP0LYD@vA9*HN~%{_|+7@n&MYe{A!9{P4TNK zel^9frufwqznbFLP(IdBeA@f+*HHW#ieE$VYbbsV#jm0GH59*w;@438uyz#sYbbsV z#jm0GwG_XW;@8sh*HZjiieF3dYbky$#jmCKwG_XW;@49AT3Y^EieF3dYbkym#jm6I zbripj;@469I*MOM@#`pl9mTJs_;nP&j^fu*{5pzXNAc?@em%vnr}*_0znnT39V*Un--$3yj{y+BKKEA4~x*tC0zUSuV z!Z3&nCnmT z6EN4G<|kmTKg~}qM)MOc*O%raV6HFCN5EWPGuPFO6}ueF8jA`ViwYVuPmP(U#>`X8 zk(CN*IW+0D99b#AH0iV)St-CY={07u8Z%jqnXJZ4R%0fsF_YDp$!aX+YPqseLmD$% zjhU^+%vNJ&t1+|HnAvK~Y&B-K8Z%psnXSgmR%2$XF|*Z}xoXT@HD<0FGgpn7tH#V# zW9F(cbJdu+YRp_UX094DSB;sg#>`Y>W~wnW)tH%T%uF?ArW!L-jhU&&%v57$sxdRw zn3-zKOf_bv8Z%RknW@IiRAXkUF*DVenQF{THD;z7GgFP3sm9DyV`i!`Gu4=xYRpVE zW~Lf5Q;nIa#>`Y>W~wnW)tH%T%uF?ArW!L-jhU&&%v57$sxdRwn3-zKL^Wojkg;i; zGZWRAi9#0Va30UGOiwoRoKW$3KS&{>zEvo1qtU53uO44riuI_olY)@A6d z%g|Yup|dVSXI+NQx(uCl89M7QbkX8br^a^Xmoy8@4!Gq z7gU;kO$}Ijk8Vo}pcZGXhR#|IowXV|Yc+J%YUr%h&{?aYvsOcAt%lB84V|?bI%_p_ z)@taywA5LmILuYLU{*xHhhnK86FIjcw zLpt*zotLb5jeye=pTV;T4D*Q2%1sse!~T|K9jz_R97nTL=VhzT%T_&$M;$L)bzZjW zylmBZ*{buhRp(`^&dXMvm#sQ4TXkNx;;{n4n@!X~&u0ADL>=^Oq7HgC; zuhp5?>db3(=CwNWTAg{V&b(G&)tT4o%xiV#wL0@!oq4U!yjEvkt23|FbD63z z&()dd>dbR>=D9laT%CEY&OBFVo~tv@)tTq&%yV_-xjOS)ofo(|FK~6{!8-F`oq4d% zJXmKQtTPYRnFs64gLUS?I`d$id9cnrSZ5xr^8#1r1+LCKS!bTCGf&o;C+p0Ub>_)B z^JJZQvd%nNXP&GxPu7_i>&%OF=EXYmVx4)h&b(M>UaT`O)|nUU(Hx)D?O`9pCslax z(1>HMt25Wtnd|Dzb#>;tI&)o}xvtJ!S7)xPGuPFb>*~yPb>^Zvb5WhSsLoteXD+Jq zQdH-qsLo4KotL6IFGY3cqdN0ZotL6I^HH6bqB`?YotL7zrBGvjsxv>;nUCtsM|I|- zI`dJT`KWI3QC@=Tyad&G399oFROcnAZklOgH>;r$8_-R?-Ho!fGg(8Q$r}1h=4zS5 z)ga*XR4S}oJp3&zym(AApS+XzP0+b#SYnG-A+gdCx@Tapx1*`0xvOE>%AU5C25w*y67ZcQ!*HYS zaEzx6pqQWgWH^YpKSWV25VI2as5D1h|qTKnUg$M0*;5X-R8jr28AFX@;}P$V{~cSt5+fLP7vO=dxskeJ!H1 zkuYc*Vu|kzKaaLV5SNJL0f^hK9)2Hadp$AlU%lagsA96iy$zVlLb3vu2HYwnD*)yhMX~~5?s($=fF=Kh%dJiPA4>~vZQ}ocIbY)c zfH_~{|A1*hZ4mzlEM*Y5+|1cwxpB<02u)L(DkKRYC6|OG0l-`{k_52G;Z`O|05A_e zk^}(r;3G)@Ft;p80)V+BBnbfKmLN$0Fykjl05IbxNdSv0#!r#}V8&090AR*Xk^o@F zPm%y&#!r#}V8&090AR+S8}kXWhK(970PE5W)}4LCX0VRUU>%#mIyQrKYzFJt4A!w3tYb4Q9UJL9v5F;pF=ieyTIeC1bv(4t z1586QMhiW_tka@}9$=bUFK^K05g6j=`kkhFSDl*m%13LFfI>u6;xr8`@@x_4z8T)aMP*$)KpNF zh0>aOaiXjn2Nwn)X;LgPD8$N%0heiLn6Y z{E2};AxEXwh~Pr;M)_-`$AJQlzSn5t>a4eiORbqnD@Hv^6Av!okJ7{gOy5Uo;sGZ7 zQJQ#w<-~(484X;jXOw#-%DochUWszAL}`NQQJP?I84pb`z>J4`DM}Lz3r>kIoIUJH zynrQMxNCZYl%>Vvxzsu(P{iRZ#)yu@PxGhX7UfO%*U4+YFaiFjr> zn|LK$#!tKvFyqe*`^%PhFY6t^VU`Bbm5AajX!eD(X_mod)HJIAGisVefcZP3UEyqE zFK~I3Q>nJNt6yS7k`ZX5xrX*W7Rc!5NvuFdyTWa7nmg6rZOb zhWXU`FwBRaE!a~yvmX=HTNsyaYN6Dsv0ol9lm391b=bI)!05unVdzAx9?FqGu+UOv z497v1j7eZr;qVD*TVymWfz(2&$g@XKjuJW81jXbDet$R-YMN~a2(x5zQA>&;g)L^R90nnsk0|PV{!HT&EIJ=$)GcWk zYBqT`ylz0`2MWOyftG>DFYN56IQV58TqeXsoiOVqRf5ZmfFygsJOoL60L;UUBzVkv zCh#P=1Ll0FY=9XLN#=lgDv>G%vz@;uNgObLPm(ua{+=Xl!2CT))|l%2Juzg!{5?s| zfcblplmYYiBpGAM^Y_Gn0dxI{;R5FRXBn|92}ej!fh(&9ZX??duE}I1DyMydjARYNd<)1T z3#0ft&M?e(B`i3lqprV6PLW`Tq!=)uP%uPNA&C^(V?hELXOCE^9zlwqtXbTLbYS-65N zBkK*sbiD+r(h}FUww&!zEHnuA-;Io0ho7B|Z~1 z@QNE+aD%q1TOzIlKPfcoq;EKL+gL+HV0f5GK#ttJ~_~{X0bgN7H zMt+)+g+LGPZ^^jfGW80ucX+VSB`$;odq;L)udM@9daa6&9&x`5pW*6=yeuelwTj0Z zAqgZFc6YBBNv=Np_y)w8Yyo{z{D=-qp?hM|H?l67vZ?w-4BZctJ}V6_h$Y6k?XnmW z$yU_0TzJ#kT9$R=8eLa0&uZqh#5Fa9OQ|MgF-g*ygtKY0 z5H536TDJgZj!f$pz@`w+M0&{#BsPmN+EDd zzSz*T@~Nuj{Y_oHI6czUF)+~8B9rzvcD3M!2M~M!(ZjinNJgd1jHQ)h(_%PlpV89a z+luq_zF3##=_U^fj#@M=$CjI@MPtV>FlJtJ?{c8D#Z&IQCduM8Nfxh3vUp9Bm6J23 zyyf|hf%fi>=H{*zvF~a%A1%JaSu9>;@vP_P8<)ZoGB9q2*#Vneo)Hb%yPhPptc>)u<|lMLi85Ik zxoOKsbiKUPV0AruInnh1Y+Vo8XSmZ=23Fd-o_j6(sg;j)J3w zo2_ndvAVs*>h@k+w+4Fc-QN4#x}95xMaC=^8M9bq%wmO07Asn^cxjr&voecC$t)Hn zvq)o!zRpfzl<4c;;l37ag6@>^BwRU_;mRotmxRKMbWO6x1!WQHc3$LBgYqIfi-q1S zTCD&hWs*+%i%>cV*Kp2el;BeWOi(Pb_!Q+#ClUmgR50nR z?b28ms1i0%5?ya>B+?r!a1H)C%Bl! zFkg()Sgos(stM_3d%~5|2Ci%hd?$r&Xdk6KkNlEuS1b*>u7r9O30>gqNQY zR#HWH85&__RfLzL5ms77cv%`@iZG@Fz5nkp-SQ!@KXS_+OPmjBOyc^7JzAF zhj4lR2bn1FS{eGnTyc!8wZ>uv&YGd%wb*tfVe~osD1Cuf!_XBANB;u zGw?ix_~oTW8J5zDfzCc$ZlrYm9V?{AFYh>#SKf4_ggqTrh7t!*cm)dK3Jh>l2!TK@ z^Oqixy+|W+7ilPS;iJ4oBAK;FBy;X+^@xn&h!g$j&MjX;gAU>4&fsr#zTv*MqsOki6>0~z)aj|3IJx}##2C}sfBPRrZly1_M3=& zh^8iBBGMry&LJkAAtEh^=YAnlfivU8EO;*)XZm<*(G)rg z4>2+3y>;ZvQL;)Yyhlx6$DZqC$ZukrY(h;%eGYu#QeaB}X zFomgJp^R7%LmkUeJW0~hfIH8!JNQTdvY}$~5ePI7SD$$dZ~3EHxEYwo@zD#QWM=DSb z;(2`Z0`=m2h_j$M84t?>d~^Z%Go{Vcf|v)%%@*R(7_+u>S+od|z80TzuUNguq5)^(CSMT$aC`5cj zK6x_JmLP?Kk#uw-Daww3QT=$*XDQYLy?EI|+;s2n?doV=-j7&h9vE2G(bt7->ozR4 z)4GKUXb|f#kv6rjVOfJ*ur2Q&)wjH-X<&Ij-WVCgNxc52@hDLbgcw?lbqwNcr5sk_ zEZ*4U6EbKI9u6emf~wJQh_ML8Cs{CBdGuQCNTMFXd3e&U7+@ZrwDp5+ZO)HHG;B7~ zaN}XfCr?lg?tW|5li-2vb*sBMU!MIqi4s8l#gu6kYKJrlEE5;^0RLo`4*m$wPCxPd}UenZ@_A#T_Z?|_GR$2-I_b%=MwL%j1H;+^jh?|g@N z=Nmh@)ZldV3p@5S0YY@73tKtV@FCJ|Bc9nC9RUN(^dW*H6hauC+27Ca6KLGm8uyV# zLKwtc=9tU@G>fv+dKqJa#bAq)(;5rm7OAqvBo~d;{t%~$#A!T6H0Bfw27a9vr}b0@_YNYxgtMXUII>zx92V5?Rg8>p0_=1R#M&q zw&yM2$L^A>P&yghH(F5G4!Zvk8FAYh5l7BABz!S=F=czfCGarXWa z=>%*qo4voR_~h^HdE3h=+S^`l0o(Hyu)W>_w&yKiD{p%_r5|xt-WF`-ZNXOF7Hs8h z!S=lE-`e|2q_y{#1>5ts_m>rK&)c3>w4uG+0=DB8aB_NkxkbFy#sZhH_WUG%9t&2y zJwFj_=BzeHMle_3#HdV9HLe=$!M>Fsg$zLRmH?A&)2Y|mTvXHvY? zeP424}u zNaG}kvDzIc7^P5^9?DLUdwSyPT#DSu8@@!BP6fniM~M)wEGS%w0B$%%?j+j2kVQd^ zYznxtN^oVB;L0k6(y2;tWtHGE2C5QZ&WF!Yrt>++=bX^Z%joH|OHE5zTeAqIb4_l^_h#yL)RS8_#pKxV=!e!*V zVU^B18tJsUK|EKUv;v`YT5iJS%9GXtFjtJ>+biiDBTGj*R z%G2^6hqXi0^|WLF%=wcx1u*ANN+Q6VKP_nhbN-~f0?hf743AYR=TFKnz+6AlegNkB zk+KOe<0qvWU~X4FqLxldD1k z^u{nVpSEd+q$Z%LyK#&yOsESGGzxQ4YL6Hm|2%XzmL{ojSx0kQ3r$&(6exM^idTe}t1%$}50!$GU8xTOt(AmFB^84?B}wt$-y$KEJShDI>uaHTirimy>6dwc*S;jiLhyVxw9j3p94L4FhAX z#P&eZ$R;aCFJf-9#3TsiIFO7a2Mnr3o30Osk#Z$cUTCX^91<dOhJ4C!9D`oLFKnj?Oj(hM89)JY(3a3-l?&r;kKkLF$;4k@f{J zlQPoZhcam21TKYV(7p*^B5@hkjyj#YhXzuT3b@4Dv-mJ*79Rr5;zOWWda%iwpj z41P=?ofL0K$0Uy5?K1e?E`uK>NGAmxNHLRiJ^^a*J6;CA|7GwKLFsgu9_cMo%A}Rw z_cHi>FM}U1Nawp_20wa`&UelXe)1@t@01z*&X>WDAEeV&7vPa&7Ot!>TxJRMC;|?- zO8jtT`Qgg33|F=jTsfBE%JzdR^MNb#31<_DhnpUV+V-u*U_xMKpxPEVu6b3nI9=L@ z-90=TARfFII>vDW{Z9(^i?gX+E&csCUeqaeOvsNbxAOUX4hVMAwm5@0YDx!g1{(0b zJbjbeiR-fL_pj_7VDD2M{mUCkiN_)D>ljh4L^}D#K_ZiJb|i`5F?4QG5^Vl{DI4eKc1u#VE?!t+)%=%O^a023dK(&Pf16U4LQ;^76xlPYcmvwwUCs41SP zwd+K!sLtOS^;BnaYxtiZmKH}pPnY9|14hYK?rRtrzr2h86Si3Cg}!Q>|oO@8vwWU0>NYnUcq!!-FCrpfo|O}y=&m^fF&!F*lB!vU!anEZ5r8J1#(hVePG zp;<@;c*!j%;mu8W!wGLB;kA8cBtl~euQ}|ECer36P~;|1IT_ zyeAF~ib-S#APOd83_C#A!1xboSLAf#Aq*b0tS|QLyTCJJ<{DaBQKbZXdgUQc7 znEd>MNunQ~5u{b6$3!>gYt4cY4aTPk=ub(DS$biHpc<;_q3V@Ox)U} zrGl1z_eO5Necs*L{XEpFn~#mV3J6V@-xh$ugR-_lb1CnFKbK|bxnTK)+8+q z=q}@@r3GNd&(BGiw6p*o5`|3?`9YVt-T28`le8|N$DAK&T>x`_q;&zz^&zbbV5>gN zPx&ID$xq;7eMjS+mjGBZFwFU~_P`|V3+OrHXYGs0O9hiff0IRflSOrtL~zuP={YY& zOnwsAWbJ{;+60re2qr&6WAZaJCO<=C@-s9hKSN{klg=jHj|G3=`V#rUBU3aU4H}QQ zq{d4RmKO|`6AV4~X-Nhnd_`PKhdML#gfJ~BOk597PA9_b=>R{LpB0vzE;&DuPJ~(M za^cT`71!7;y!No8vn&ej+S6KP$|h4rw0C&k9RUmzS|eVOD*(%|?VJr%TQ+sgCknQBKuA`S28zWU@Z_Pm7>V@rwUj1lK43 zb&>GM|6T--pZ|f8NF@G;5nNmtlxgLEG7{lXLCFC5|BMiTYi;7cHNi(p9Y}Jx!`LG( zQ@K}&+jzJR)OyrPh%OO!?d6$)2 zCp?Te+ft50a7?6)B@o9Fh+_%Fu>|5+qJ6UxpJgRJ%SwDUe8CmsV4}QPiSlM8%8-@F zH`~(Hqs_29<2ExBY0X4&%mg+wfg+qJSvXO$a3XCukwe(_S)yd&1h#OZWa1ua6aEVq zmXr~Z0~W;$iL4Wl$Z{Bx#3})a@+6=U-$|;Kh#Q%UC|e><6fXgZVhux*hz&z>+9#k9 z_~hgtj+6600gWi9qymY!5p|ceAQ3mBoRT6W;zpEH(uLtT*{2C;L^);84#&yPO+X{c zDZ4lkH=>-fqZ4r>$|<`$5jUcoveOYKUkbIDtvK?VHG;p3E)anqcoNg6~K6|=Z0V(7VuzFZLy9Q&_@w$tVZ|0NB^EoJ zR39n3*y5!CV~3OQOHsxipM+luHTL+V@gT(;TfCHU>~KRyPqZ)5ep2qS$0wDC zC}1MJ6oYK(i3-}{liG(Up)EeCd_)ax@k#wn6fqGm#U&elDKpvOr1qB5lRZAEeo~II z$0xP7l&Ea+QmnGWN#&ISmMvaNS#~&yUPyV%9-q{HQu4CJOYzGNC*>yvF?)Pceo`c} z$0zlN6wYk%QbM!AQcSbMN#9F>%@!}EHancuKT>|P$0zlVl;rI3N&O>bI$M0U5bW%* zknU`-6!GkE5`C1yo;^OPyi)A5$0zl_6aa1UQVO)gN%={6&>o*ue<>N-@mgH(nWr?r$AeIg7L67Gpm$i`Z?5Q5FWA5X1w1ivxhmY6M5_4^- zELqnc^mw@}sn?du5`FDKkJr%>g6*l~$Q)5eOB}YRdc2O7U~EtIcpWVfS*DVDKf^kL z!~44i>-P=b_ceGQ*sxA-@-xgvRwyw1pW!i^MP^WR^0^$^Bmyjz^PzMz%TEHi_&-dn zZ=_cM%!oPD7HH6(Uc|5kn(`qT>>$T%fqaMM!6Jttt3$j zg98nFV2lyP?1*BVXKX~C8dV~y+478Wo-uo#Cg*9|^Nfc0^N{?U0ZQSsmNlcTmrtw! z(jcHQtz|fx(DI_;EN?UsiWVCVO(a0;42LE%LrYkpsQ<9nmR5{z)|n*IqFz?0c;2T; z{$~Q5JBILzCRVLqM` z=Hn@0K3)>$<0WA}UJ~YU8IH!B{k`2HFP&d}hby-L;mTP7S8ip&m0MhJ<(45_xlI69 zZt=mD+XZmtb^=_vZGZ!5A(1~^x$O|nrtJc_7A&{?084yuB|f+kA6z~yN81v3z(Z~o z!sYMG49{}$k0e6mXyoYRq?5x*G6~8iCx@I|a>C?9$cd6;kP{=vluj-o!hc~GXmbfs zE+NV#M7e}0H;a-GzFfkWOZajLUoPRxC49MrFPHG;6236u3lqLD;R_SKFyRXmzA)hn z6TUFv3lqLD;R_SKFyRXmzA)hn6TS%Hix8p+A&L;92qB6Pq6i_15TXbniiEBC6S6#- z<GBEl+!W)(uS3ZaQcMGDcVaOAyW;R*9eKm~uQqW==Y7${EFh-zl)86^}>@-&$pz@+ZolDxXodE3W`X*jHZv&dGnec=<P-){W-&HuRdpSS<(&d=`t{N8`x|6lL^;=wQ9`_;o=Kl+X8aJt+cuP?=) z8b}L{8vWFmr^mi;-20#T!1xbN_|U`;PkMIpN2Yvq>K{z|*z`Y~@$s2|6v8Fxj7%H_ z&Yks%*?;`poID)x$65URg2H%F@!Zn+Weds|RxGNls;*g5SKrXs)ZEhE(Yds{r|**k zgD<=|^eHNJo{}d@>cP)G*zG9yL)dpXpY|M!aS{|Em+Dp~%2@?TOu;lJ$v7iEtB9sf_2 znE!_V7fQbWm;PTWRsM&mA5^MSr=)&VS(W++shYAnH6t}k`E+VdYKgKrwKTO|`EqJ! z>L-=s!LJ4nDW`&mgNK#Vs70#(W&fZ1clp2Qf5rcA{$Kka`G1qDq-G-{jxy|5N`K|7ZML{eR})=KrjJyZ>|k9sbYzcly8J zf7QR+|0Vw(|6lp{`@iD$Nqsf=*C>@2ExFX+ z)a6 z-&7^R3jsTnxbk7;S)`ky{4stFWeI+}U{qx_jEb50GJbcVWU6vpEmTx>p}G*ii`3sJ zs$-mE9DYCS_%MDy>X?f1&2r3wf3{-|e#4GN{I)nc@hir>)6wG?f`5%`0OS8f7yPc5 zTrc5wy=y&wH@H5H-z~1K_}%9EJbvXIaeduANm1RC-S43_#(JK??*tEK7x&}GJs*cZ zjh?it5vS2NgBtgDD@x@8?r?;&)%l zKK#CxvLC+(QV!tvP|6|vem&&~evhS~1ya6~@*PF>xAO4h7&wdjAWvMISU!D3z{9;@pazi)}@$j%UYHyCZ2=qQB2U@ZRpi~$|0pxsZ{EfcBM~Q zp{!9hqNh(O=akFH*D0+-ISN<7ND3%v7@woy_W^QaRC(b`0rphDqAVxaeFLEa-ZC8S zmhc<+N`$}3?iqH^A)nD0RYAn5!lzWjrXbWIOXrZjcT^W}idaES$#(#yB;P^cBHtmA zD>#rSzlxM%7AW64kNnTVr^_(qduJ)`;~06)F@b9sA6uWrxL4PD(L?H`4D^s{j&8^A z!EphM+B;}!)zhi^5mKw%$M0d`cjYNJF)}vD@Nvpp2wyGyj*}|-+cV37k*dyApTqAO z6+Pz~?d(MQ3io*6zo8(FTCD7a|6R;JF(Yp%cTjRwMZ7u*)-}KoR~fh0D0xC-?v6UHGQi!#IsSOr){@sf8#v#_Lm}6`2yb3o{C573LML zE?lp;rOzx}Q@9cSyh5|ExNv>p7Wjp)tZ-xDHhk|QE{GAXrYu&J?_7u50vBziI8v%p znvuS}a2aykAk%y7{03>o#y|A`Pzix&{i~vZTU}SO!Lc4FIp9%KmE7Q8gFnqu zK2bQjaD3sE!dGBs7UmS@#BUTv&|VdV^@W{<1BF9qx9x?m#QlY@6&@};UifC=`NAuO z?-brHd^dhEuEhQEvGIxV()hHv9-kdIVO9VtjaSE;<2~@NjcS$W z9{&-^<3B2S{2zeFpN708B~3N>^(!0{{Oh6*|BR1Ql|E`up)aO3M3BDNlj& zxg7|1cpM)1QyeMq`yGNJ1|6X9vcFuizg)7v9J0S0%DVh}`48jI6nF|o7mP2MQZTb1 zryx>LTu@O^U(g9NP%u=mv0!__D+R9=94uzLYoVF3Re`a1+=qpPvL>WqlG66&lFxPe5>#V(!UpX#a;PV<3X5b z;*;Yu;#oyTkrA&gs*IP%^I*%1CIF5XRpJ*AU=ceZ-i~m@JYbhkxJf&BSKz@B! z%CC%epNlFmZ*o+Z>Xi}H(@H&i<%IqplP3vAR{r$LgO6 z$ynVcBxCinj$9%UJ5LJ9*!evn8N1SjWb6(I$=Lmr2QsmH3}j->{j?|D zlka|?kc{2ag=Fkb7c#LsQ^>^b9M3AxPu&Hc8@`$DBSI$j{3>N<%1-Z~kcPd_3u)N9 zLP*2j7lbtIT`iKS4Mq!)Fl5`Mok_y+5c4`2V zkHfwRdmfzr0Ng8xGdTVoz_(!`?_jzqg?@~$XW)*7orpA3;ZB3q5k3R%Y}mEzH{maZ zttME;BhHdA1T63fNh3ZP?n#D4nk}5iPWbo0qFjZLu4Nu?!H=|sX9%|HBJz;&7j5b8 zBHayG;l77(7i`ERovr+SAGZKyjAy~-!Ny_BktetD|7$Ml6|aSDhg}A{ z8g>KhHrQQk_rW~`dkppzl{tP6{>!k}U~j?Rhkb-NAMBXlvtFW2g`L3P3BPFX|GRAy z`hW0kGEPyJ64*+%ji8mgB$ZSol^idrWQL@YnUYFoNhuJ5}feS8SISEu}1ZB*M- zkJ_PjssXhNCaCtni~{xhq&iydhZ&sCTZd}NfSRSY2tR!#71?eq=UyK9Xu)Y1nPOA6>xq}Xa$^qC#l{U z*VkQFoj-8BvAs2ktL;Kj!@-_n&(;Z>D>XH{1II_g{Md(RA%R=Mg*(-RAXP@9Pp1%}4#eSyG(z%PAifro)dzENpPn(7;q z=1g<>#-@4FJic*hXg=Tj(^As{zGu>cX+hukw9#oF^nEbxL%{~$9|T*1Z7E&Bj$lVh zFSIycO6dz84IWMTq~K&J%LFG&82~4{lCmOrHFz`SrQoem&XjFJi<5FdXmL`G3htG1 z8uRn+i21oz`LvRuY*Idpwc_WXe~T(#RK5g8wO9Eo=mo!`d`&4=gs!kk`L^<1rB3-< z<)4&h<&yI6%5vov%qHbF%x35j?m(x0SNUJi!~8;d0Nwg~s;cZzUC>Xwf*CzV`3v=Z z>Qv=`I!&FUoKVARSh=JYKuY?dqyj$z62q;3zVCJ z7AXHAXo2#d>Y)0(a$C%N<&OFV^$W_+AX|M|xvTD1_bWe#Jat^T2Px@i%73d5pg+7X z^@k6ow(!@EM$CWJvBmKj)#2FY*rvK1uR2~;-HyGEy{gCYb;sYRUdJ)Vx72{+jN|Xs zpyP**AF87rKXv?6eai8!bD}!NIm!7)>L;ADoPVqqISZU~)p^c&&Qf)uv(8zkE^;O82nI=}8brVcv4?fkAf=9Jcb-?bIxjf?Mg249 z+s>b;Uvyq~URPgr-f;f6y4(3n=daa+E~m?>e%dkGn$ZcU_sTO!a%Ns4J$v=_+u=)$hAX zU8U+-SGlWP{RdaIt6DwhTH;!w{=n7c>H-DqarLSH=;{YGyy)8Q+M!+o1w5+$$aUKF zef3{l|KK{O{@8WVbxHk+>n+z?>N~EtUANSqx^BB}t9M;@T=&(VyME#NrTW12YuB&U zU%7tccBl_g@KlH59_@bG;S)5}5fC)gkp>$25l7HH)jicQ%Kb6-#~q^uC3U>d9dpMV z5s~jJ4*SYH)liW@2X2-Mc4)^CBA8~)d{YytFsO|e5-w@Q+ z@lB8J(H+M;xt?6dw>+Ql{ITP>=S9zpj_-KZc-A;h3YzQquAsS&H$0#9e9m!7&|Jsg z37YFTFKDjg9|g^ITo5$ZaS=54nB$V5xsJ=8H$B%JS3S2p|LORJ=VzX~j$eZEK6L!b z>+rf9zZR6&sR+vJbb#^(oi0InogVK8yc3*WL1&$*g2FljUfruZpY~>WGo52WXS1E- zytBL&&i8w(y!FluZ=<)-IosRp9dQ1!chI}pS>oN|-R5laZujnTwtHXozUus>_einwj z1XXqZlc1;0i=d~2&VNo_k-E}(1yps&c{O!&>SpJUQ(sPf+4*+r7gN9J{E3j{>)LDwhKK9n}(8c5rj z_J-?n+Nt1Fw;Fsd*x+szbk@CD&{_ANg3g|EeUj^8{nXY8DbbEeJF=gc z%sCp*GWQ$r89M4`x3f_@wsTIR6qUu}ESvv&(H+Z5O^?v_utiJ0CT#Sz{7Xd-o@Aqu zXlEhXtZ+}k=xDuV=bVu_bV5sX96F&==zY+0hFLJW@NQ9M;aGFOIVf5&dd2V;?m<6| zE!-noDULQV{KWy0t7S#*k$XsgQMA{bi=w3p_i)X*6-7&l`sAaZtycYA-Q-qIhD8e( z2dvh5l54dKwS#Dj{7ItK=DaoMMl>gHMqXB4-kiI0-ph041@oTCn=DHnuJHore`@=`VC&H)0 z7m7}VuZFLO?}Q&j9Fag|Tx3$wU}SpaEdD3Z+mU;b=cFl!l)+yUX^r$5TOzCS%OdL| zTO%(=_8Lc{;|n6i)6qij8Al@rBdDLVbl{H9UX63QE#c^6najZ zwc6G0MyC`{7ws?SotS%ei!ma`weg;1N6bIWMKOYfwdSGa+WSKIF(-}+JKT#rKdm`w zcdhwpxzU^_%+fcEGx@OAe2NxFD})t2Y|U5Unx`?(JM$-jUJgWuq8p>zjf>G&qOX~! zMUA3|qsM{e&FFc|T^K_b6wq7~y%K#VdRzGO--y0z%#P$Xg16l&~!<~jkiGE zZirsT_yjGFxnjZCGqK6B8AT63lk@OfKElKqs*Tmg+MyMG-0X`jvzgVg)v*oG9VeOC zw%D#=vrlT4eb6qmi5((e>{v|bppV5)4V!bZ%g{(m6T1d&^hh%yb}e=*c3+xDv0(!Z zwlt>C9P@o+b??gYu z`3H*w`LE}{k$+awowxIEioJva5BPO)@@@j}0Ej&RxeFk67ntMH-asOTb{xc>gWPqH zy9KmUAomKyE(Gr(*h6VwLhMXfdlP=iDQRay>`jQ>iO2UQ_6+Y%442^X+~Zl;mB_;& zEsxj6+hLZ$@ScOk>xbP*#gmEy7-9P`dJc&(Li-V74~D2Pj!?0GGQk>Qzts(4f8|ML7Is{oWW-*~lg$5VA8M^9wT%eF z-W8;|M(kUiC>ktUQ?$8g2h8rG{Y6I*a=Pe3(bb~sMRy>HIw1RwE1s0{{g#r2uGZ(8 z4pcv?-@Ncvg|DI{ysLh&x;^X)2ivFBo~ho@SYN%b`tss2;b#_|ZLMhuReCCO76#iq zO-C2*tKVPKS2@1(PTT03RjserOs`qrd13K`8b{|~)0xUCjoWL+g(ok%*-%qCIy@ts z)l!l$#YYzARX-wAQ9>quvU*qhG|RM3Up$6PODG%<=T+t;OzDP&@rC=yG`>qF92eLv z)0)w^olHYb+xUi>mXgXGVZ-G$_gbH8^Vn_EfhMspzqb0(!hMzv*M{4Lf8ni~KFfxe z)$~>PD#wRc8&@hy8sD|-VqbUz+HG6$=J2kz(cyjJLp7_a+go1`9}AxnuCR0WRt{C~ zs#zaC7rrdrYvEg+JKCppUa)NV{`?7z^__#^M-iWJtM@gX5jHX=GC{giBcbZcl~bxO zM`kS^)3`m^MvO?wqO+AVTSBO<=%vw?U3?@`8ELG{DLzuVp>=v|Mx-k;*z{g=R&%_0 zSM#-&sVzq9O)(DUUTVD3f-*Jls~@ZjioQVqUv3GZ*RMA3gZp;t!PeJXZ?@iReLJ$I z_4UZ+&aTc2ZBrsUBD+Os=LN*Pf#-4eFWwP35;+k$9k~#>8o3_16L}DI6da5OT1ukh zqLUWyh)$2`(Tsw=g7pRKtM=5nqR&MOqGi#VXlt~u`Z7|kims1tjlLY+8$B3(z2NQW z8_~1TOVPKZH>3CJL&hu7hq2iOtp%$JwiaxyI#74W@ED_w@dXEsDaK4Ar=iA(7{x|K z!5c=s(P<16+%(Gz_8LRR#@K9QyYY(gTGJWhuyMR?wDG2K-ndeA0AIXg+&117?Ppoh zj-{@at8Js}f;H1)IJ_Af+j${2F*Yrx7pw>VtuZrJ8mn$v8*7gB#8$-C#qE5bYhiTct?*p6RN-R=2?nn$MV%%^7$RFb~H?%FWug@n*ZZ%v^15 zFt?ez%zfq|^O$+6YL9u&ylh@GZ<+VaNBO?|G5Hhnr{;(9XXP9DCHa*tq5MW+^Skl~ z^Vj5W&fk&0JO4=j{`@1A2dpr)WT|9bwN{09Y&fj|qH9IBitZOZD)tqRDZVQDpm;*@)Z)pc+*Nbe&)wQm()!%om*?)SzFhLoylHa}&V7CE8;i%x zJv;Z(+_&f6>@1mkZ{8MxNq+UP{@^toh9?O)by21DVbT4 zQxd6JUsBw8r}gH7SHNWIJ4-sJmUNa3zzo4`EZJW2O37;_hdXz7&MJAc79 zmt3jID0v5Ir75{x@^0hy*0b}JdH#80J45p(&YLz*pEn!EoVN$2w0&CXw)!LUs^>M& z>zTJ=-r9Lv=Ixxfr}3T6HS-QM-tIgy@94af^Uln>IPa}_H|E`id9T#fG_f>T`bVte~u{tfs8BtgmcU+4{1r3*Iby zxoj`YL73Oe-Y8ef&X!#&d%Nsrc~9BBvWI04%asM5@;wViFBo5bX2FyNGs}Ax}}rSTTYZ1s08ycG9Bhg1axu zSoEC5@ueS}eo?`qvPCtES{L;#TD55XqOD?nEqZy;UTdB$I#@Gq(d&!ekR0pMqPGRT z6;{j+!TT58Tl7%M0OKpCRL(?L&f+7Lk;>xAipu)R&YJ111(gGNw<|YR4#94(e5LZW z%EOh%E8naslbbyag!Pt}U5wN+cHc2@1F zI#6}A>SWcKs*6=`Ro$q%TlF3`OoG+VR8Ov+QJqztR~<*k)wUMY4+>M=E~LAvM?P1v&Fj^|9(x)#vJWS6{BaR(-4beoIO9qs6|(W9my5PpB^$ zX%SX{EWa&hD0uEm3k*MKVQXnePA^y1x%_b)!O_(*F;&DN$p zi%%>*z4*f7tBbEMzSH`!W>w9q&aT$i+g_`CB&1iEK+U+e@onR4CN&);xwa;w=DC`J znzEXjn)NlUHGTMIedl1!*18QfFW2m?Iau?0%^NjmYcAEiU30VMUd_WLo+aZ)n9&SP zSu$nG%(kI~S&~EkC6OhOwwX&Rq$w7^khi2+QvaCgTr#j^qclVK-QKnx_7%HX0%*x= zu!ol%Z;LE>bIBEH&g1u;CAVw+!Yp|gR~!7bW1naywjHjWR;$;}t~FswYn!F1#&1vC z_O|-k6|ie-x76-QGCL)Fp!TR`+B(~g51X7eX_|J{o~++od#3hc?OU}sYVX#*S2wxN zRfiQv-7~P0>t@ttwN9_gtBco_*VT$%ZY`@XscUb&S+}fib=`)#ZFRfq_SK!LJ5+ZJ zzvt>M*Ilc-Rd>JcQN6EzO#OuVsr48S^|R^?9wC+WjV&ehT^NIFFxz+3@2=lpf295d z_{W9%tM%9G@6#dZ=BLNvoWV7)EH?jZmj6M(^%iw**MTR)VL9= zkXIUCYdqX|yz$M(^H^)0Y`oI=PUCGcDw~wH(fFMR>u(y{w6keq)3heNX?By@RN7SC z)ZEn5w4!Nk)0WOVO*``*tGTlTjcfjI$ly5&N1UUR%<$77-8==OG)WiYFoH#Bd^P?7D%b1o4SWkptuD9H2dC>Bp)d3S|9oI6e#b~+uSZGOd z4IVGU<6pH-5>j>Rb3)>REo-f5ZEfv?Sp~Dcb!+R(t$VGx^Lw}lvAVIF*Rj_5-OWv` zfc^(#txGMpZA#k|td{;~^G56MW6ri-daSm;twc}8`w;75Sd7W>DBn=q%(jh~uY$5f z+KSsM+Folr+*Xgd+}Sq3w1#H(Yi(~L^+u$$(Y4>vzY*Wr4QSc#VMfqAJN;w-Ybdkb z97YWi)ac2+H&L74-JEZGvboasWb;njlMU76|Fq|mTl4&HY0WFYr8VDayWRF~yVCA& zAKN}r%3pf>>~^!gw7nYSY)g9&%!>B4?I+>i*}kX!K>N}5Gl0&tUu=J?{YLxU_V+qm zI7;+P$7GlpFj*aW9r2Fxj#`-Zj%6LIJ2rG|gW1)wuj5e1v5r$6=Q=KTT}DibR!cwr*?)qcXZC`G~`;Mva=DPgPm(SHzRa+=l;$kohLd^cisV2xY~KW^N#;( z&~eSI%=wg~XV=+9NMsU?YU*shQ?HG>^VnLThFzZl&bdz zJw5w2ts2@fIJ)xi@|R!OzNvM6U*+*l>z9vP{%}*@!2abgZyGnWzw*r?W8iA#`G&xY zGkWd|Iqy@BgsHr}_F8`}nKc7s8jJhOH>|Zx)ybh*WL{E)d^qSym@5CKRfD6+Y+6sI zYOKI+nW~9HP{RoG;*9mHUYzkM$DqfuYp-ouWw%3{hjug;H$3dG9UPr(dyXxCd4xUn z!ge8}t{K?0-ez0Z3<#-p?Xsc47b45|R+YYZYtwqW71C^f`SORB6_V|yj16ly^;uTP zxkF>na+cjaw13EEd(QQ47Pe|WnNT{G}Pq@{7~<^J-j8ynVE-CcXG>b;(G zFDccoo@>>?ntN*oUQ*VbURSxUaovS=*Vmn1ez5wP{%t}MU)PwB#jD$^mu>2+UcG)R z}xcZp*W>X)&8x#_F_2sq8NCNLWTfd|F(We|j3ST^7@l?p#v+BDR8!JPL zOM1?Yl(bpOwn^7m;g!@luzCut!fK^v5_H4~Nm|O$^_wA4ZzU;ueV>q{`!10rE!xep zqWy$qJv6xX^73(F%m@jr=3&Dm@mmqlNTbzeLE$QaWA&NqEWOwWn5I zUveCh@cG^oLJIDWuk2cKdsqgZI4td!)=DY2c17)4AwNRK-Pv~*Qmv3_PmYjTU1Ge} z1?!%9NvWGGtdLtRskN?M$f_@Fx1`lI1CU8){Wghp&44uz#E1~%y?$!{zQ&FH`@~mL zj)e>>C0Nu~jLx;ER;?G7CE6YJJ6@deWVu$zv_m_77pc}N!|&=Q&&y<(=VGfho1WxK zNm@wLHfzlyDPapK+h%DdiP`kxjE09|?jHz`g2b&YFJLF!JD zxv{g+v+*j)-H^y3arfMB-e8xyg_OmRXMHtHotOd%$-DSuKtIwQ`k#HAc%0flYkXvipVeVinPA&>EtDU;jQ! zT3`M$$^9>E7t;Es)^!(HVz;Dqmeg0Rhpc|E_4Q59ZM*#Ywr-r4w|%`;@I+f8!m#uJcBbJ`-CY9Nyyhg4eM*12JA+rSHlSq6PY%BjcO-W;mj zG^y?UP~)aDNDm_RL&kP28P=zOr$u{7}M;L>qRCw=DHw$FWtNJ;L_KZzOnS|(o0LMkJYA!^#&=EWn%R}p z6+sCry6U?+y9U->7}(!6v~G9LzM&nPwl05p`QEOLUE8}}LFj8;hr5nq^%< zFP!hX-Suv_((Uga+dZ*+TDRUkyW8w8?XK=_?(XSc(Y>~N%crk(?|gns_nz(pFh{#j zcAx3K*!@=bjqbbM@AbG)(r0=m_srNB>dETK>xuW2_tc`nm-Vdf+0e7CXIIZY%Zkw_ zIDfLWM!wzcIkai3lmal)#b~!%%n)$@P3y(nvaFr+3%}qb!dl$la;=$Rxogi2{BP>s zJ+8{@O8kEI14XOIP2?sXkei5zh=@dyAR;0XMM8iWMS_5cTn=zVL?noam~o7Cs5Opt z9BUn8t#Pd5&suA#wbl^FTE{w$wU#>8T5GJe#u&%&yx+Z!$vcqc9MFHh*k%9AwSYc{e||mi`QQI}?|;F;j_Ymw`TX2g+h2Q6|IvHu^Q!~> z_nK{7TMVp?W#3+?8(im87hD%r7r)Z4ZfeK9x{SJcbwzchb=7rEb?tR;*Y&K~rpH;g zyY4{U(YjN0=jtxiU9Y=c_n_{n-L$*g{p_Lk7<-~U)t+U~voGRy*=}#KciOkuci8vZ z5802~d+mMpEB2fAyY@%+=k;#&UiCrs5%qEP$@S^=IrRngCG}PHj{3Ix?)q)@yXyDX zAE`fCf42T&{k8gA_4n(aG#DNC)}-sBVaVEh`g(EoV6Ies8*B~H90?66ZNUwh4Y>^q zd6-b!(A?0`u({z_!}f+fYwtB2gibe{Z_MxLZ@9cBy)nPxM%(U&I}HyTo;A8QdTcn- z7|R~!OFe*aJ;># z)6wJD-O}PX;5h0y#lG3$IOn+JxbC>!+0xnKc;I-t(p>4zo|0?tm7yzRRwk}YU75Ag zzA|s+qLmf=-LkTC<@1%Y=eR!Rx_srK)zvGHuk2mfxAMx$n`@1-r)G3M^k!JPUrC^9#wyFlr&ZG0Jf^hv7!6FA5Cpd-CrErns#m2 zwqgH&KAK+qU(=DMBb|3U?>3$M;yBxMvFX|dH+?kS;?MmJNB;BC^kkK>;mE2X8&0nB zU1eJpy(&SDlvV%lk+~sxRqlpleXLrzs_aXS+EvY~I-JLboDF9`KRT~Ck5!vjZC|x# zP28%3tB$QYz3Tj`%d2jzy0hxxs%Oov%^uAG&0)>4%}LE^&DqWQ&Be`?%?-`1&0AN; zcU4?4or|5Jr$3eOi_EWENNc};rZ^}_zb zJ8N>*6s##(Q?y~}x;3FSr6{^6x;3+vx1cz90N7gF+T7aFy18|G>z>ww zt;bqV>wCG@^R1U#Z?xWNec1YJt?OEkwE=6x*2b<)TAS9^zBYSp{@UWTm1`T;wyy13 zyLIi(wfoi{UVCEgnY9+nU{JayRS#mfu^UZ^dvVa-_bM^;X_n zi{7f>uyeFA29*-*L6$9E7wr8QK}s znb?`i$5-+?7j;%_YU#97`#TxKj?TTEhc-Amk9YQV_HF3yys}|i=gkfKshf{FpHnBj zsE9 zT^qjq_%D_JKc59&@PDcAjO8T97d82Rp^J>?e;(I1eED%}!MHB1?P`|m^jzUy6b$`WsVzNce);SJ=^HI(PLx4#;}dC8GZr!+ZOh+!S`Ho^<{T%$uPluOd5wAlWCA^mL z&0MCV!O_ZVyW?%c^gr%6#Oo19H?IdBn++GoLB~nQS^k#mKf|T*5-o4=_jyON<0kTc z$34em{(iF3SjqRY_&Xd`E8Y3K+EKdFgNTNk|GLs^Wi%8Bxv#WAL(HR&Tq1KZzKYCM z+Zo~3l9h(`WbH8fR`PG;p+A|+(fXnNKW2dA?n?a)VTa5n$8E=R$W3{z9OAeSDHY`~ z9M2#_jcR=2xF@nO#}3CSkrg}kIQHPrGJe%~O?x&>E8MY7$i+$|CM|;;Z9=YA$VxBA z9cdTexW93~_F}~}?$TQ8A1oio8OI}JuR{+UcMX?;f3Qt6Y`o^+d)J6Q ztMPiHj?cxaX*}wP7g3v1l%$b%S1V~;~;+{FrRxY@vbLGv4~G+cp9E3Bc< z5hIk?(Cdg5iflOEa9rAXH5_UkOA3eko(ENZNz|Ie)0hCCUYvb-9z8W(Eqz$Xo<4XM&Ds3Ebj zm7IPBE#FfBWn2CYPZ}4A)~CTwYz>R=KWJd3Sq5Y4ZS)mwaQ)Nzr+k}~VcPYp%Px7H zDX*@0`nAjC#)Ud=%QAmif1#0YzZ>|v`B}rM`ZLf&=urI$JSCX}4Kmw?iLADMpZ1O{ zr+z1-%-_~;Z4823T_!dZG*)4I!TeRj`r}470D%wf>q!+ShQa{-Rh6st>3S5Gt+b`!|Go z>s{;5)9xIetL@K_y$luDA8M`n%zno%E7`@>e#3r4EOymjmN_@ewy#> z(@{m$H`nhK^0XhcAB0?72G!>@G;5i;&%WKhUCYe=`s4J@Leq(di#_-2gSBYIX{X4-AF`;oc0B=fAo19EejVjogZb2ZldsP38l z0J4qdU+jG_ z*{o^c56BoB(W9+t7VUpPwL;jkE_6FaS6d;(7;2+LOK&xqLSHck*V<}QBnOjfZq~6U z2Ci7Ys)??p8mL(7-)d~Nw~^^sE^7=qdM&Qg}^%IEL6|2J7X$I7}*PO@h zS7tzMNeye-vQ$+~TWx_JgBgG~y~EE7?a@7%0oBK9wqx;iGoWT4W7I1ppr)s$gLX+! zCu7w6HK3+|F)}JBv8L>WEUSh+LNyHF$!IPzWwutAkv(TSH$6gXU_i~bngk+vuC}h& zTys`y)z;dC8upF#nc7w!qbAi!)#t14zmWA-lc#}S z68+w4R=ghDiu={!a-OLcU$u6)pnlInCU zs_30+;m-c&Y-XX!-sj7URQ?1laU zomjEMIm#7PE4Dxnh`w`0Cv+Qa>xvfWchK7_?2?01)frW28Kvurs1@XexjbYTD~chV z4WAWR5cyjXw1Rol*+83!Epu6wwIW7juNp>`Q=1KG?IkQOuW+XZ2bg`!W#^b@&AzJh zIxprg%)aU%$wU*_OT+h#ci}AGrjTBBeD!+Rnl$?7F$FX z4N=L+P`yi5bzaq0;`=SsT-AjaR!;T7swT9bK}A*7$a3jJcA|P{{JRjQZVysA7ejZw6{(kw?O1&a1^UdWat74&Fns2VSP!)#u5#%AZ zFPm>xW>$HiU2pz=h17603XAUL&uBLnZS?YoM3rbguY92ZKQqA$Se~;?Q@qRI%A92m=Dgi}T6wNQw;P9TX=MSnpP2V5iz?6>oybxu)6p(B z-{iAO$Z1XFrdMW_zp=HmpXfpdM{q%TQ z&rd6pWaR9lipL_OGA!fVi1ugDAx(UTVPEAzktIQwH0fQtytd*vbl417wy@$57VPQe zZWVixMXIi06_BnBm1WC`ln)v8IoF1H z#=Nr3y@FA?#vtQ74Xq?9yTmdFa_;?|Xrr~vB@L35qrL-e7TFB5ubl5%!!z}78RvLt znK`}uQMq32LugkdvM|~?S5CFrSN2q7)VhjmpWBwp+BNrM;h|+NU&r4WO|I*p4o&KU z`E*&YCiAb%zgZSq(LlSg(AA1cM#;AqRg_iiL{?}9@Gs?>ps$$$l|JRwSj;m6D!j@| zp*dzi`Hk`-XdE*BJtCg(lIJJo8CXzNmPIip7vsBT;4;_pc(hy#EbA?ga$1!4l?NlE z?p6#eJBsYz@pry_Ft%a%yH_><&4!}N9;2lqmEA78hrd3ePnB_SPFa>yb`@C zN-76pYE9N6}D?17CeNYvhW&5B9W=i?4vi(>jK&fSVSA54zDcfAu z1@T>)%lyh(o&L(B%Jg2CNjrNP8B))n-ZFhH@UQqwD=UHi2wg5?SC|)|+Ojn04cZNq zB|&A#&XvVtdk-ot)0Ge^4=sy;{*ivSl?Bl*jhGY4Twl=RGS-^W%rRiSF8s;gNoTNbJo-6kW>{HR_BYg@m$3ihUA&^C8K2>d}V^! zxAdYWm#by~pAzZ7OTTfF&y94_$FH!RC+mfCZP@{#A0m_0uFr4IHEH^rPs`peEhCms znadMPQ}EJiepY_2G#3gspO){|wtTN&rRY>U>qOd_W{ zq+KQ2d!@{|$#uz6sTR!do26Gv?-G@!3rh!UGH#WgDZN6wb7tS0$HjImIjs`nil_9B zCdHGqrMu9(m?ij&5^W9?EOeN5IYK9(bWJYxXuE|LLv5nH1RW7N1??B@CP-=+`@C;y zww9?sFpdZzRs^dVnRy7$$Aor3&iectEbfV{ALqD6aLK{krH_WNa?W zpc38AHI#N0LhjHaO)gaBQfGWCAek+bsFw6=t@#++YH9afv{IE_-i0JDF299th*tXx z5DTufNO6yy`_jEyrq3j$a$a!tgE~Y;4oaR16+;g+8K0qb&R`j%yr5-@nJG;c!rz+? zp*4`?&m@*Nv$Twg+4rVYQO+};Yb&7=vG^NE@}kJ;o3dWir)J8V^OkV7=lg?GO5R>V z{Zn_4WiBbfA64(o{3W{nQT0lrm*k*5M7yXZ>@xLhv`?1ks{$%;$-^a_FLkvoNnXNU zFsZC>ZeKzbP@d57C0@v=n8lBm==w*EU2>%OIrLMszQx=NxrAW5xtLwyQUP@r--P}K z>MUkg&@P~4U-4cFqOqusfZWZgD{3rZnYJV=-X26@SqJ5cI zqKmW8e&#Z`u}dl!>-tAMEvZ_}ZI>Er#BlF_hn|(OMqbk_GN*bCqgYFIJow6vHS95Zei~OBBkmB8qn{zJxXw%2>P*8gE4` z&RCoaZL`7`AC-2E^p-E4*V8U-@ouyUR{D~t#fP}Vdu|mhzPXq&t86QL$vLqY3e^h5 zTH(c^V!IB1gGJT~F#;?mLsBsm<1D`MLYvONPvbnVE`8pw%A(yF@zMs}m3BOLUM#b1 zJcQ1R%nxmmw7Y7BFOn*(f0JZMjA*N^h(((h>2)5(D4Q2uB}2{hyHm7j^d_^d6kdG9 z%R|UHj-hD1M8*gg(H1Wu$mEQ`QyOEDb7m@_$D(C7z9GArZ_hN|xGABzi~=rX^?YP{S9N`Es?RZ7v2<# zw;T(vynct?i1`h?LzAH6LSvy;O~yLQ>y75uPoo`$Oh#_t^$lnAcC-!Bj^}l6B#SMc z-{^jQGZsH0&oU16L$rfMn+iE|x)*Y;Azq92h;}mmieG1^7&p+)(=xs_)mTVd9Sd|{ zs2y_Vo<3fGpk?aU$e3+tGBPJkupEoF@JQ5!?^!h#E)v`8WUW%#Weogj;lqWxDg{Ed z3w2Fp#~1mEmT@gSDHMr6i9p3dwIU-!i{gYX&~Bg5UlH>?p*-5joSR>VnzhXQD(x~w z%M8ALNyvuG6zv>r(?!MzU(6tn^%go~NyEY+?TG4)T%i$Yv&ACHih1L}>u1Q&$5!ea zwQuNI-A20((XO?;irfqJ8G+m{3=rE=%WL80Le25eggFra&@HESsAZa6jA-DO|##KDB2FOa*7xgL|%&QLdah45@O`9%bXkk z1|gzdrsekf=E4eSs5P``pl}g%*2-9Tr%2cQE!OOX#YHI)RrK{C%!nRa#OppqO~~fc zuB=FV@wYNxzgqYZqLwUlM(~DV6h4+dl95U7Rg0BTkXoqg-^RNB3a z#d%F;pygJyy+Bv*qeN9&a1LS&h0gUd1B+u~;jkiJdr)`}ZJ-rV)KS1)b1Y;&WCS>PXRUiJ8^z%p||rWE2LAjB^yLfZQu; zaiND0)vVx-5LLb)Oo$v5;gfb$$AU*f)I&z5WnX1}pS;F7+4wg`w5z~G_8$IN(~yq9 z^+mg>1^0^>8||j@0ZA{kDc01&gGIXX54WZk#k{7o_7glG7mG8{A)%id#;ebS*waO^ zLeuFt{WZNNhtY5RYi~mz5#LVH9wq{3e9w_NEk1-~FX*UV%aL}htJj_gk%@vtp)AOm zmoaEBh^&lA7Z!QYMv+jnjU$#mHTS+Yi=*voy^xG@20mh>5VuFofVFDujS_J8j)z_76#?(^-_)J zp2Gc56x#OuUZ{(hw~FloyfAt#BfeI>7t{jU?abG!X(Y1y`CA|=^=rP;&d>77msvHg zLeV0l{;}q?msHw0cR+$+;>a{me*^C@?vO*CSO*z@lSY>Sg1o@dC&6P(Q+<(mGuk7LWhJ#LTy5xMBuvM zHd>ouj`-UA!C-SrqLO7wpFN09whKvZJjPt!Y^c z+VfJ;>R9G!nK{@>e=RAG6>EkOLCJzrA_#zz7Zf3Tj5a=x73<=`C~FsFAZw?OhYP0C z?)!Lg);i+NtCT*vt%%&xykfLmXD@i1mk$wXuJq>eDeahJ{9RxiSA{qQfqUrLwYI_+EH}k?C1jNxLph2D9?&Ws%)M>*XZ+a9g0G547U*;&QVg=54_P zvFL}GCv2}ngT;bMNT#&scw{$)w1tPzcq=~lelF1)o2+!c1x9-&lMBwze<*!?vY<70 z8#IJm^=S*^5m9A*;pMDQ2>v8e&SgG)n~X2*2C$HEaIX=%pe?rpFI>6hw$0y;_J>%= z4mI9~+{Mck>q&0O3-ZdnGQZYou^?-H8I-~}PK%Z*pPL|b1X~%eUd0PSMYe)Ds@7!u zoN>g@=So4yoNt4^O9U6^6Q2sei(T4r7c>9Fd~NYh)`q<5+^5h*+FhD=pLU^!G2c0I zM#PHLncQSqdD-(f(~dfxdsw{u5ibq%PNMa+-pf5P?+9AUt;v_r|-zWF)W>bblt{U*{!^1K3M?BrbL6JmAd%1oQ5 ztoIfq%}Zu4bdt&Zd2vt@IjEY)PEp^c-6io-3!M~O3!>Vf9YX}f2u-Dr2d_NBbDs*C zCwsy80O}QsJQXruycio*;QWeL`e-+R?4oF=8}BSgedRc^cdW$u&K0rAxckc9SN0;? zWc0nVW4;~wwy||V@I3Y^ziSYZPYna^59_O>-;e(=2W&`s;f0#_~LlEIiSSu=hO`H75GGw+7bWaxm< zbZDEpG*NBn<0BQAb3*9P*!Bz6qCGG4y7Aptj=d5+vv9?;I2jS2WG5ZV7B zs+<=Tl#>op|B$gG@pm4JB%u??*w@IuiEOIS-yyp?Hw@WAWB=S|IaD~~Fuet9t%`@7 z79SYz%)OEQ4DBuzIM=y$f2snrW5r7ova>=TsA)Odaya8)8<->O#n?wXSJD2n@lH-| z_A$JC50bnXUDlqtTb#Dm&biG(-?sMT*fpu&GH*kKUN&6jR`C03WYQYYzsCl#N?wr& zxT<=hfA@$z{ddg%15L&rC`RZP{CbcObz|x)hp~1s-m(H-IXG9ZCNh*0D(&>xOrh^8 zzT=Z$qSNycnB$b~L3@496J&OBPcv;xUiiK|=mX>3?2~hKUCU=R-4bm*dDabGj7nq| zh4QgDG)LMQ2j=eO7oS{=EhgLjN3zCs zPVyWXC0F`0=k(9nhwXT4cGiH-I5Mv}7sO(`<&||$Xd7N+&nP?by**ctEy>EATRmqm z#A@YNT6Oe1&(XixDq1i7+f^c)J*Q|cl^=`QbEjtM^TI(ZYfdS@vgUMT?a(s3 zI4!dA?2~mEi=pJ;u?LZrXYbEShqzCfQDw4vd%HrJjq6zoz2*| zI?T=5Kl?l~KPYMTX=GQe+}YLHTSZo%6_zzbWHqykW^<)LyW}hn-5c#D&CbYfK~`ri z$ZD9a<4c4RX2(F)R`Tp*i7LvPoE4GDiq%(wv(Jf)tnm$>xp;XFot>SDwvS)XbFPv; zVhQFK=(zevdv$g+^i{O72h~_BH}k+8#%4T1+cTT^^b?!R9*OD^eY8s-)Z96eA^oH` z(|PveI&8Mob`=PviN*i1_GE4mItz7vPP5B|4k4@hyxnYHA+pV0)H&duX?BAq71;_XOK7>3KC5$91D;!(D)+zrogB=v`ewGD>K7 z4vSEcoq(KGg(o7+koLk1zR1<5mfP&uj5uWPT0>_Y%ZT8t5oWo~x|0!v>^QRh8D7vz zMt(FySE*!c_AGw$1gfzzGB0Q76+6S4Jv&;o?eunD`slUNX5E@qgqG+t_KPgd`fOI$ z%wA-5v?DSoj#&5uwOdcp@6Oyy1U4%$vscSpmeEeufr~5DCGA+dv+P3cj66z{$!lh@ z$han)#rOZ>&kfmikx@%C4hwNPm*JH4L(clFZ4Zf--@MN_H8T|3>DJ0wwwYHTKiVD8 zT2tFHpUAlKo$2(l(ej#gTx3L*u}>4#EFz<4rk=NI!RnW{7@$!&9 z+(pLzNN0{|M-@z$-D6T2X0jv6I9Z%=O|)D$r8{#FZ5V0J)x^IjNk2b>`e$@Q%miLu zhHeV+v^KpfJpmcd3T9kP*VU2ttkx&KXft~ExK-YvGwK>9)_(MRr#dHB1G%o+1+D||+<*v_U8=Nz#nXF4Mt zWR=dWov{atZLGTeGxQm;$ts<3f5v7fr6-r=99kKrk-(?ZjF~pHVTSSY0d1k{LE34tZL%`bZl~#MkWyr) zMAl0?Coy}@Oj0pR)AqegA1+0VW22@o>mE#3-w#SoxX2+yU?epTT=tD{T`kdiUntgH0e$KGZqJ?>uZ$)LrrfJ&&8J4 z^wN|rEc&cH)2l>w*xHlI2$1DNt>PsClDrrn(2g;S)+@C*B^%mh?U~jkvcE!W6FO~d zo$evTeLQoeEj~cTn4wK7Bz1_;8ZzXxfG_wwEJR}OlLmPGJB~}LjR7ftSjRXGKtT?bINJ)Tm!jFyMD+N z8CSH^o@&x(=hQGEU$n%C=MBgtK4XIwky@3)6_imxp3jMPoi%mZajabo596I_N2i|E z7FJej`m|$0xv9z1^i_sG{+wA0x4cr$Ox=a{HZrn_wuK1pioc&A%Mcm+e7fYG&kh?Y zHj$-5i-ck!FR^%yIRbP9%t!oGU8M@}7bNW>XqPTTHJj!fIk`#+78x@?txs&}eVX)U zJXaypN~cxg<(sr~&hIAZyjYwujHxnm{r>M%@4Ett`{Ot=@Hpi zKF_53Gt{ePy8fjk3K7Ay2ST?Xa)UO5KK2T&fpUe&LPUT6{&CBzluOEM09-D_xGyVfvt;oWW0mOF>S+B@Kpo=0qZ5UI8^clygHF)Q2>cXVUjE$%9Q`(dCof7YF zB`-`m4Gkie6tR7X?GEub1Y2jMcE}kiQBL)ccKyf#ggzw}nKv~9+XAs2jLaDe`I~Z5 zWU*Mpi3KzIBG2@hoGUWgC3^|6il;DRM5X;X*8yuU`H+^Ge}KfFiyw4fEbcQ7*U3-F z#*Y}=gUR=y_l$R@^iIA7@kDOQoypgrPw3Z~=TEGfmvWNyIi5AeMXk={BNdV)^JcuK zLK2;x2aNAeSu~mYr+DT&B~Q2G32w*~XRdw#1&Qou5b>b>neoRd?n!>okBxVd&rUAE z^LeyI(#QXy4^|4YpFlUo!cIH4$;rrg)|Y%-v^>3>5;a*@Z{0_*$ar==c|hpr*gkj4 zXy=vqoOa6~x5P*E>w}j}(LSKvc_Ge-NhgGU2}w?Q`teS(EwLBd{dnFjTAp!F-l<8C za*{Jr-X}@Q5m}1y&g2J)Td>%OEL1Eu8t)`+No+yJv)80~B0CP%ip957U{YA(BK$4H zvvcf6JQOHd$Z2vIi5L)ohOCmDDil6cJdgHD_0ymDg4BI$d7VR3+N|Y8jqi7RfArpIh<%nmeyQ zQ0=^ys=>5zHF|jc2GvIK9N{Otek!j6hAaGQ<1f5E-2lbq(T^p%5BoIgcE2hkU7Mn6>_d?Uo5tWtVWegx*`;d z)-H4ja<0PD(mcAeCT=S^x@VorP?vV&&yq%8@@p;J&r0;^B$ zRON{`#C8_FJr$a-Rwo7teOI|BT${wIR}<9giBBf7d!Zqd+$ZYY+du@V(#~78;#aSm zje0~A??5w*r-{K6pFtCqdtwE?c~4N4PrR<%8SAi+NYz^9J?UA3UiGcYEn&~ZgAij& zERNUrKiAdJgnbFDYkrr#Ji%F+exuqFWIw4i^_zs+_ycGMsp|Y~2Q*kt$W3{5(xwaoUnChkel ztNzdAB_n}V&xrgdI%j6AS{*+i?arz}@edO8s%PX0mnIHCeCl*!_XJHvM$g2D6M5>x zZ@#-v%q1?T7w3+dsRm8*n|J|Psv0!0a^e}l2G6?uWLjK?zSMZiQy4l8Mgwh*9P7l`^(M=tg`r+TW-p6LaGkhsg??7$({oWGz9c z1}`__^?J_6LPn(UGSQjw6-1R9?}qj)GC#5Kquo^@*6u`Kp=J1M7OF#gLMTy{#NQNp z_Y2!va+=J;B2`X5k7d>OJR{_Y|(<9(6E8}G+^#c2vs?s0eGbu2%kUB`qc&<~aS zgsutqp;+kggj*2(#^0a7Szo<`?8=0T&|au#!dYk#UOFb6guIpOgwXMjjy~?l1m@g$ zM!UBs>_YoJH8}2GtoHY7WcCT&&;;ZCiGJgS)ZvM4ap_omsuso##3ev|>L+nI6Jlsr zp{nAX^LtLMioYOP`%slm$e-Yjb|d~OCvetRRNc58<28*@>2ZD&^g8$xxsMvJ*UM(* zKK{uBFX%O7w()u#qp-agN8KOK37d5_(m~R_@j87P^YYF=@u0d?qDA&02v3rr_sLHt3*d36&@|bWxuJeVg zay%n9+l)sOY_TmoJIXS8CZxtypw**%Fka_?QH~#o%YzmekK!s~H5tacs#CVOCviG2kwg$B5e!$Yalt}!kOc^(V|yS@TYOcOkMGwq<1&359sdAXnQ?dg z$#I&ZjIWKa9e*AAff^KdIab%dF5~^UJL4`v&1%s29kJV?mykUlcM2LrZw1oFVmxma zO2u>Bc+UFjn^<(l>h)Yr>!DrD_-e8dM+7b7AoU>;l#MTfwy1)b z-QzT6D|5U@tPeCo4T?>OWj*t3`u*_>$4!L>jGnkHGhmy9E&{@a~Ntc?#4yM?1Ls6UyC^y+W?i)n|)jfG=`YlV!E8|##P0% zLaD~rV!L81p>Hv^ym84;wefyTZA>wgug5!1ujldDUXICzo*;WNPOt2}$hu>aAUpBh zl1Rz!_!c2{^7yn^546<8*dbcRr$OAAg=ffuRLQslBKwokGd_OY9b{C@ai_(WnltX? zxXZ|>X5)^;=+*vMxyKww&z%sq5z>x2InLP|^<`YzxIJj&)Sz+4V(eHvB|h6&yF&&JGyBIqMcYzNbaF)jt! z7*#&@naGY2OXAoBWXII1m?2}Mp#x~0=gYT$kMS57^_#dKeN>{mTahAwIsHA z>@jGQ8WeLnMz0b}mBc&|&liyO$LLkkM*a$-HQ{A!Ys^U~MU}*+NV~Djhi}Y&WaAmp z+gfHkVU!Uu+mOAk%yA84&p@LY<&m*^&i|1}ojagd#gBUuQ-zFLH_mzP-h}K%OaZcN zwQ6j#^brhA72?b}?yOKcGUtw8K+NuAw_x!yo}Csg>Ol0(Xg!0RabhB(^?G54M!Sja z8Zva|h3E3llmHg`DnXDJ4#iJ*%5ULnWyn?)EV+2{-P^I8>dRfWDB_%J!2n5zfB(xpq}V<+6Ak& zG1+5cA@<;yFx}4hlNvPkZZtc<_;;0oR#&rR#+DX657`0LI;JfOQtMS~RDM(jWI|J; zrjm^`;07`&Ksji+OK$50&=*Spa-$FS~QV$sG$v9evJAiEXygm&*i_oD98j`P;o z4vCcW;FybJ`jKr=r+k&eyR?OZ-WyGQ7!SX>xG)?D(SMHBIc$D9bW-`R7dH$5u=7hor*dLg(&yP9Z`FrbhSEii;kZAxTjGEBNsx8 zm1|T-#Ac{Kt&Z9rnTcm=#F$%AwaBsx2xm;--*W<*BZH7a{q1CkVEJLT(_rQdfWdm_&wvm@IZc@jz?`jp5c z&_62oh$E5vA+A~?-wwMERWV+<3g;TBC*o;jH(vgX?XJkS7qlqS0sS>H*T@_!rsBmf zvIN;9WFjbB8aiC{f5NABTyk;%xoPmbCf8Ha3>8cLp7CET63 zN1TfcLKb24gx`$RRd1BhAMrr6pD;Gxi08Dsq1qxghiST~Rz(zr?}q-vcsKm2WO6c| zpF~{2HbbqBu!pxpT+>AKM)cAy$9Nji6@D1{ov|z8M)(eGOH?}}bk$p|+`<=zS0KBn z+QJ9Iv{v^P5VnP#7o>6{a>F`lw^wCE2^#&Bm%@5z!H0$iAt55`H%PDr8qb4DSuU z0QIQm@PY6%kfnOVkA|Os_N(Twt1_Z@%x{Dp7=0Vrw`q4ed?%DoyW8Pgp>IOx!@HnE zsyA$3IQ!RlhkmmpszGX4cy{OmqMAcCqQiTjqtLwYw;^&GmLi$-M%EE}4%rlBapBdF z4OwY;DgM|MVMoG?pg)oEE8+8?O~yZjXODgc?N);#Tf(Pe5sgJkxLzgy3T1>xA*;sr zX?QS1Z{acFKG1Y1D10#OK1Ev@ia%`|_Bb>H;+`pN>*!lhoEjSTNY?H(H7u+(jI62Q zYH--GFtR4?E{5r>ac>oNH57mB{lQ`L!VW`Ily}&^(NrJxJLM795poZDNqLMe9$kzD z;|T8yBWtRR5e0?mto;!$@nO1NQTam~!YZMwYIRsssHW${k{^~2eMTR-VcF2n)syhc zp^zG?J|6v8*2Ztu$Dwi+#Jc}D^j>Hz?RwElMdz&Xaj0_--i0oQdZ7I?TBk)VvRmRM zOq~jE9=!br3E4--(Jlxo86AP_7p7s`BNpe8 zWsYVi8{b#Gq0yt=pgmAb=yT|Ap*x|Epx4#<&>J7qWa~ZRn9uT~)qmWQ3-L=0QI*QbQv`v!HJq zGeRmtQ|Y5$xrY{w!VC9Nt88+Oq^rPaIjb3`Ra=uGN09$Kg5zOURupW6zc0pq=pg|-eXT%l|md!J9YzZVj1Bll{a@!gO%TN+fL z+(KGxG0+UW_}a)Hcch0yPuViD_!D&2mV&I7-n?w>$j+)^Hm^~4px+_$uu)66iX3U{ z(*5#ptKSQWuoa2zd!gMn1Ns4T>1xwE`CF>j)?+&X9ahIi?H{FQ|EH$1of@?lVqJ|o zZ`%p2H(f``U6GNhnr-`RUC2H_yW7?Zy`_FQs>-H!awY!u+4TOMsE*n8vwE>rKd@B? z_du_z^R|pp3nATaoQ!uOYjVJrM5J+eHf?(Uew#H}WebD;q}Gg@Y72n=8H)m&2lP`Y z*yalTQTPa> zfR#P!+9>AIco(`q>L7GlH3#n=rKA78`gZWyQQM)vMRsh|X6VPJ8nsi_XITArznVmi=9LQ*%>VC6n4aa1vVP#uGx zjmk&M^J3ejAUzA;G15jA2kEoW_l+6BVWae1{?wQ;$|Lv*bO@Pm@O|hw%>Nx#^P3=3wJa0TT)@_BFq{qA%b7F-mZ106MgFzQOMt{}(E z%Om%Wya#>P+#i%6p`|48`NbM1YHjD6)FijA2dXhIv#X7NavtS z{Y%i{AiZ9?%<(}7N3!ZThYlUt9CQ@o3HZp=k>pQ52N`)Z@FMiDYRSlZK^@RL>Z>EK zk8FW{jCQI-f6{n2Xv@f5$iBzg*eO!1I{A*y>T}W^i!eRPK~YRYhP*Kqo|2nJeAzXX?$M&Hy`fT2+j^8&CoDlGBp` zi?q!6XylbZB2e7<2RP3L+tJFkp2;)Nk&hs09k-?4@wHy2mL*=qX9di^~lNswnBea?ty6mU3lTWB6K=t zt~&#o17hfnXP|+nbAtvKwJR(mw$WK<9|9J09i70Gl2bT+)?g+Cj(reD{7ekPXA~0yF?8Q z@bG^KtwVdv{|**EWRz$9Z$Nq+clA~7a|)#mf>HEtkdWj(dJ(!+8)0& z(LOTX^*iaGOS@kip9Hr1>nae1zX<;ni0dK02>%2qR4od4GC~t~kp4D*8&sjH1E%`v z=!dB)KgS4PXq>7T@pJ_BkE{PqzY?8EJ~h%a;-=qyWGm_ItluqU51}W1*PxHppb=aB zsCveaRm6xczb&-;D!Dq~cM^&)-W{>a?+C>Eoc_&{ml?{j$&u<&VJ&xZN zzi#qugYx~_pqa{jM3$ceE%%Kh3jCOJ;#)l;$5+q(XGV`-tY3lHdi&-1>5&goL;d3Y z(xG6yr1~X8-73&O-)|}wP0BW+$1eiFbm-M}_(gdOUGwvOne9q(88-5SvXO+gl{wd~cOkMQwj96VF7 z`92@9NGQbj(TF@Jji~U|<5-35p%J0bAlf}0k*KxCO}{ff+FuB=C!*EVHNua6e@7oa zBizv@BfB?3?}dKoj_*@sF)C)@O!XAbnPeNSETo#)fToKH~YBjm2_g@vBq zaO3IlI3Kd6$v1mAt4?{Ua$l)U-0_tRm-_&+Rz5sMJa?)R-y)w3{87z(-F)s~5v!_v zZu!JR-=L2MY4<}c4hd1meWQGQu%LF1i18UryIHEj$HRL7;;HU%IZul=%V#^XLKQLm ztk^cGLBlWm>_^7?*uz^y#(SZ zeJ^=$g}fQjPVX*goAIenvCnCdxem|uxeT@AC0_dA9l+t~KEe2lH9qydrK56TMD$7@ ze74u}dFDV*I_&1s`&%X}Fh9EyVMo;Q>C+ z@WQ?vZu&e#_7}Cv`?43rJ5%nywLUjQ>+M@CQT;XT_V_U8>Y$q8o9nH2ZKra_^D*cE z7VbU=Au7Z0HlICE0^048$q$h2_t}ih)94v~&qvq4MB{y*tzMdV57%d~cM8PWz$eqE z44MYH`7CtGynB6eA>I@Aj`f1{^Hc9Ji^t4ho2T~oy0ORmfiF4b6X4$&Ugh1ZWyEKA--mdL=IodJZ<=6a(@o( zL+^`diO;Lc`z*H4j2`a;-Y3cZSCx-vpQoOWXyg6iv7SfJT57QOF%Ru8PObLd?YRp| zF@im=dH10GM3u7&v_%$k={)bRLpIep=f+3gS)RK7@p&1qEG^S#UGF^a94uz5R#!?OmU8#3@M?j$JMr@KvP(O6&tk6%=woE1#KjW~wafF7^fubq z;Z@-v*&vPrX zxysu!*Ygyz-z#^IeV#{=@s60cm*)Xwr_dhv+>MM3d3Jc}IX|UZJhO&DytnP{?e5tQ z{ag+6xZ{2fVy6&QHN@veydHS6LwTaP-Lu;rfBgHl9iA!f+TV0F$m^=R_V**B$Fs_F zD)gB6Zg|G)K8zl(EuK-31s(9zYy1Oa#;^g88_+qU)5Cdoo@iuv278=G)@Ni4>-RVf z{la?gKGowG^i5-i$9)fWveAU?d5=BNkJK8E1`n!_es1O=^^bGe4~Fe?KZ9(O>h(B= zZx>^Y>EabH^YJs)JFLq?@8l4d*kMJ(Si8KJ@Ue$nG4lEPN5h^y$@WI=ea-p)Q$d|BLq+G^jq5$S4Z4P3Xi6w)@b0+)p?33#LC^z!WoP9E?D#`|y z4;G9vfZamfs-tvZm%+-S(1KzL>Y>xz2Q!1oHFuE8Cy+1oPJV|sdL!k5v!dv6Vhn7Q z*dmmLyb8n9RN7lyhHslc740Cl8jQ-v@6twfk?hxC5l{VlusTYm8*xt(!`(xSRBkmK z_qEi=Wq$97 zdTrzwbsdbxH2aEdee`m!WiNr%5F3WpMeH3gD`$9SV!gJO*cezfu`kX(skx`_f%bQ> z|DT<+O(7^vGd|=Bp@PFc~V4F1Xe^}<}n^8@gc*IbH zHEL8~XAw87#^{lEgN4)>J@Vf}Yg1$N$S1)J>QRh%JO`>?ui|!jLAG8!uEaQk=U=bd zt;9HzWyqdVlYhZgx~J5;$&xZ?H!0ykWcOt2G*?MxldV&)B8Iu6x}8`h*bZWEp*P8i zEtWl{@)64gvvP*>-zU{B73#sC{m|?pEsp1!?ZkeGxQ)bq23F4*e@+W_IjpKhbp{M~l2rYwUTE>Gi|VYZ3oKivRd%QjgH=N7QNios`kz)6R&{{k zxUXzdAUzySl`5Z#A2nu#6H1SYdp$f!scKWf>+vgjko~vNrD{}F zL6#-#lkTd5V0xLP3`+0SS8!oPx6=M`+B}NbCLutzW%59L{fozWwqlcgI zNh_2~z-*A&m8+n|bMvY*%4Lw@Y*D&NTAVGaE-1^P{T;%UDFe_tAUmhbgX}kul`HKL zCJo5fgW)_+>XGgu+$v}Vr3Bd&Vyu^@A*+Y>6lu$4Hfe`63|WS7Mw*l(J$~-2s+KN; zWz9aR=uw~r`8ly-moxww&VQvt(gCo=vrkI33bY{ZyI7>H(hmWuY(;x`EWYH!^!?#aY?QPyDiMh&&koM z$R$c~SbiGJDMl-5+&SFA&fWUyMrN@#JPM7~c^2lg(LDFX6pXz_xTQbjRV%6_HTE^dLW z3gvT%8xZanU^Wq+P`J)y@>sc^GudgmM5RB4^a>Sn$j*V8*l9%PEY(VN3 zZ-D)qY(TusC>6vV5K#}|XDES2RDpeuiKs1)@l&MIEAIsxmYo*Qlk924*e4!>>;@Ag z@*s#S%E^Zbp9Z@~;m*n4k)M;zAlwVG3-TVh3GAlq-z5h-3U-XC#5Q?7*jutU#BE{? zN@_%@Zptx|VYLDIZZQOQM)tgXv%C=OvrLdTGT0CI*`F6fatqiOWj~Uy!`qmma30r$ zcgy+sjg@^MuVFmj4`nyxCUy_37iF$xy!D@z9Ta!4QLt{=n~KA-m0+D{kAva`uy!Vw zqwrw3Z?B-EDa!JDv4>=zVZ3+Wgm#*V;t|<3u;Y+jl3haYd_?%FqCz}_5-bqDDh`OS z8qN$YY`gCa z@v^)qld$3px509mBzl+=tXHO$UlZZ~_!CyFOypLBcN8~>L9pM-;>4vQV&I%fF7Jj9 z=l8N&*nKL2AGw*tM95Calx#|b)o>3j4lC!3Ax4r+lJAqD9=M~pPrj8+fW0W&$S%r8 zpvAeaY>@HsfopT@6ysLI6;jzLHVB5d8{|unhah-bdC9*b2)N40YmK9xoaQN9#%PrA z?|jGyxR%S%KRya)BldIIM!6Qx#fq|@qpm8}2$sSg;Cve4*t6^btDtaPmdI+M9bpf| zQO3s*m(d(Yb``Qq6r+lLAYNcT#I>Q$!z4?WZ4<8(yNqzB11a;csz`d!mJ>UK@}I{0o|s9Y{Ctif2<}#n*@VS}xrBLyPC`6Xf6DSiH z@!f=9Cj2VNc^Db1NURZLx^*ejg3NeEsDLP0j8$$GW5s}6FV|~(%MXMqY$I5MDCyu}kVu0O|H;Y!<0?G+drCN))|7XKdL0%TwkiwsB zh<%&KqOcc`S7aNNGoI^58@!A_xz~wx&;TQ8$jcOY*aoRAR;0!E2EHM^GNf=@Qi&U- zC&7KGBiD!lY&F@ea-iUY)!wWUvOzoYknx?Xx`8a2)UZGnn597b58TNP^fuF^Hag6 zc~^5;n4`I(`43^9W=!)7p;B{G^9Oud>yMg03Xf~1qf&(WD0@_<&>WQ&RUouPd82&7 z%Ta--8ewPD(x`R9H=@=@JtOq%zKv_CXLUWg9$aaZ3Aw_PjXwPUwa`{oLB9(d9r!a?K!q0R@J;wazuCWWNy-*PKEsNPW$5<%!v`HOKMGjbEL(vR4SC zG}mGeg)Um;TI5TqF!sNls^)L zHGF=iMkxX$3n14Ca8Zy8h4}WnO{iblgL~6eYwVb7Y)AOmKh^5$nplL(6$%@sAsYim zYRYB7hFd%w5H&>YMWj2~a2X{WYq*RO{lNNhNP84i#U$65?-ijS{{973|b}f53at% zTL3tS7?+SD$8&@~CLH1@L@B>RJ%{S2{4Vhx!tW81O?evVT}T6nG=NA0h%{jFC|Inj zekJT#zq%UsKLc~{bWC*#s8rDV_rXsGU@X@lbp*$8`tL2E&0Q-rf z1mI^mXInXEyNK^2{!PL&g!q;(w4)q_7}?hZVbul9I5{2z_R9K+|2y%s#D7KnHsM{4 z{M#D97YTO(FR+WmFA-kmD8&9cb4-W!tW9OkmP4(Cm?@=aDeblLf8uOK??I0;W@$|6Ap0{5(NM3;FH}# z$?OEMlrT6u2L5%9vJ9@pdI21>2#a|btn$FMC4^HXxlcGvIK$;)HDQ==3E?A@S0W$5 zPnII*31G?WB(Ri_=UhrTmm+6qku%3E!eSnVaxSHuOJ!3exlcGv$a5~GoJ&QXbE(L4 zE)^f4ym-!yD+iGCRUk?aEF}z*n;?h{TE&Tu($<`^bi zLih+rArT&9Y-N=Y#}OWbqlQq&QORReDHjtinVkgx7-0?JBZNx{KTcRn_zA)~!bb_0 z5k59MffSZ=q@4NajN@YzIdjwy>NqNw%uYOU9=UO>A%v~KmlA%Qu$J%>gmr|E5-uY| zZU~Ruo;c5sPEVYNX9WsLsB;hH3`EWxHH12jsB_N~wWu>kv=Z=Rgf)bZ5H2PBIAJZ} zCkX2ZA0=Ey_}J{vkiv3~lz%PqSMVC*OqSP~ID_9r&hT|BE@4#t76@Mlgs%g_*8$;a zfbb>2HwXs^-y}Rs2u}ztJRuOC5C~5QgeP2aN&Os0L67=hT~Q0m15tmD8bTdM-sV8G zIS{P?L@NN%3P7|15Ul`2D*(|7K(qo7tpG$T0MQCSv;q*Vu%eb9l~<4zkh@V?KRfx! z^U6;Wt{{AZa3$fBgr6ncNcarlCcBAwR=_Y;1F@Brag2|EeDMtG3$p9v2U zeuE?LBcD7kSYe%sPkMR3{G^xnOCVYbh<^D=FDx<%#3%q_6aX;_fEWcpi~=A=0T81A zh*1EPw%m$i6-OMa9{1u{#rbLC=tqzsZQxmw{{$-vZIWFf{5jz@!uKi6E#klC$QBYl z&gJ}Q2i(O|U}ytySR4q817UF>EDpp`5Qw@0sXPqz1HVG}{}5g$#L@9_uPU17B4i4m z!LKeB&yn{Qj1cq|AbJZBy#=_E5WNK)y#89XeF^quf?zAe|5ebPf2d!N--!@dLi9)vlJ{|B*S27$Mq zgmn0?bmU}1iTIl?Hq73LU%>CH*vBHjxs2=5;dRnc8~&T;V}o0=bz!f1_?yR1#LmN8 zusgA%T(%%~E^EY&u(qX<-yhY5(%|~~h@8T01#iO6|F>c9z`h?l>hMu`UI(i0!#aPI z-aqm`otF`_8`}`}OW4tu|B?9rzl24-Y&Wsr!G0g*kz?0kH(-a+X?Nql4|@oE82ef5 zb=X&8Ux$4Y_7?2z*mq;^#LmO~y*sxl-!bQ;IGl5P|Gn}5ceuX)i@5(gEnb!@*he4k z<3cHphGUPOz|n9L_+8>Xgx@2?85ZQ2V*)Y91Y(W}#2gcdIVKS2s6fm#ftYCmG1CNM zrU}GM^U)L0QG{AT%!MFHBupaI6MmL(BjGcIn+TsJ+)Vg6!YzcKC)`T-9APuz^Mp9_ zLoP26ZX?8e8Im)EZ*bHl6B-DOgeJliLNj41p@lGw&`Ow2Xd}!Zv=e3$IyeeJoB<`) z)!0b^;h8zKXDoBrg$eC;TE|JK@WOus331_5sAaqpk+`sew3tB7Gb` zIqC?@NIpr389L;cp#w2P2hMQBZ5NJ=P)>;BFeEBM9F4)X9Hsx9?FU}x$meQ6%+-LH zs{t`r17fZQ#9R%Cxf&32H6Z3{K+M&En5zLFo4o*BPIv;h6>9i(0pK9vTZHEb;kzM+ zhXKA#I868sA$oINjY`H#g)0nS73{)XIMxc`3Be?6z~&WNuoVk!!U4f2bP9dAPSP)1 zBy7Mt(~sia$;a@H$OF9F{4}1Z`V@bU2JbCwkm>NwM-!f|-H5j~V)0JWvv_9jb9llb zLG~gxGoIIf2~S6T5l^~WWM9H&mHiX8bUX>L8~3L7;X4EwOpm8zzs%BD8df(iWu>xL zu~zy#*&a5ZHOTg}r`UQ~A8TUUWM^2be6#GQ@)zYVii7g)^6lbV^4;>+#B=iR$w$QV z@@opcIH@oyjPe47Rbj;)%?yP@UZij;^5lL+fuaCcAWIY_@_C91+}#aHiIPG72g!`P zy3@Fiyioo?dO~_qkt8)r&ngU3v(&0^O6^j+B464meF^u7cT0N}h0<%%KP!CFVd=19 zo^(Pwp$JLelTIq;OTE&+DHcfImwuqAluk=;D5|9&NxxMrk?u+N6wgclEzKxelrp7U z(W;b`O2u}iTB%XAE2EV$iXF;0Wt`$m$^>PiqC;s=niad07Nte8SDCI%SM0<6d%NN_ zr9+ve*ssi1<|_^;3zWr*uPgn^pD2zhf2zDB%~8Imd{3IEysEq^g_PHn*QEJ)9^*r) zT=^U2Z=|sDk18fDRw-0!=}}d*N+;E;67cBy3YAG^l2)nAs#IyU%Bo72)~GU74(TbC zQZQ-CK7~8~-3Hb~E_ znp90vi)y3l8R-SpX4Mwy3#zTEW~oiJP4$xWMb$3VF6m3ES5XE2Nr0+y+ih54!j%tbensh4a8&SukD^bUzj!V~~zO8jg|EYCr3zUy*i?lyb zKB+yeJ*~W{eM9>*M-)sk+rFr|v1;)9TOYKBfDV zdZX^^y05FB(fzBgSG`F$pnFrjSvRcviF%9fqVB4?SvR7)rG7~_9wVyv#7HqQ>Ju?> zF*fz77<-IeJtQpUbIM1;d`=0(oDzsRB@lB;Am)@n%qfAGQvxxk1Y%AJ#GDe?Ce#C8 zBE9P>*c=9fUsFM*g}0x`b?Vtxt4{1S-yB@pvVAm*1q%rAkMUjn}~dlmRy!XCo! z5#m?@IgS-T94mkWgl`gJJ`c$tg?x+f9N~`%hd4%S2@?sE2=#=YCEQ5(4B;liX9+hG zevWVp;pYjr5=-(-PN$9}$ zANJtehOY_xafkc>eEHXf!+6H`P2sFCi0kP?cvAPgZ~^NYyo+z-Uly(iSFt+UHC$c4 zgJ=5h3)8|3o-q*cEtF_@_Bi+C;nPz&#h2=oa&EC!|pHias$QmWd&;T&%#or)qJL7#0_c zOT>?fk0_TYKc>XdRk>98aV5_Dm37KTmCKZmE9;e?RIX4ypT=qTGvTs9wXkK-h&ZJAxnRTf; zi!M!P)urofx(uCNm#K58->x`TaHz7Y{JMX8NS-`Z*zDisYVqs+8}*wq&sNv?ZdcdL zzv#F6SNIR;Tf9}qC6#U7u97na#}^07ZizO(p#blV;!%+)xcP| zFWgsjA$%n;sc+Zs4viMK=sWdColE$p@3wB5cTL|{+2!2KH~m@X9=_?%XX^A<@Kqmd z`qA`w{dl&9Z~A-Y+xnSgRhEly$??{fWOK4(aWG>C-;zC9UcM!lCRY@VWtH(QxhCC_ zyxdvNx8w%%RMpM&!TTY~#n6kRYJFdXr(Fq|m5S~O-jWf;h|7={g(4cB3( zME`;C74tdsMe}X*lyQ}JzxS}=mf(Fh6V)}w@_Bd4n*7bY{rxK{+tBKT#%0D;Rqa*oDqq#ns-dcO-nX)crQ%Xxpd&+K~XI^4Tr!|yv)OY-lv)e9D!S(UkF& zdnq$!l{vm-so89Hm_6oFbA`Faygb}zZZL1Cx@O*DZZ+>T?=v4VA2**gpC@4T0#R;Sjcu1H;*x-qpmb$jZr)B~wUQct9w zN*zcYPQ9FZJ@r=V-PCD|R9zF;Y>CCI-FAFIAYdu?uPvLfEWx({R^gign=RWcJ1l!F z2Log2C(}>k3j{rue#@Zcg5|1Z%raq_^f}UmG)-D!nkB6;&51pjR+Y9it-i8ranMnb z)>zq=*2MR;t!Zs(9cla14yScleQCW`pSL&dOxh6N{kzgGrCm$AnRX}bzEy73Sq)a3 z)ou0R8y8_~oqv~grFETkleNX#o@=u1wsu<4zSeGQpY^Quy!DE8)X|zVf-jZav(BWe z(&N(|)isN4>E?7tx+lFfy(0TgdQJNB^oH~e>08oU(|4xtOFxu;oYyA(T>8bzq4beV zTluZ@8|k;xr)NZTlKtCDhBE9Kc^QF>@{A=J%V=Mfu|8vS#x_23GxlU0 z{a%q_Ii6G z?M?Qr_BMNmeZT#1Wm{;}-evE#pRo_wFYyuS>a$Hz9Tkom$8tvlzFD=UxW&=R+aPDevD2|H5O5rt*WozsIEk-VopW4tj5uyMZab#3 zSe7b*@dW7FWA#cPPX? zByR~kNuimhU?EvF`Dc}_!kG`uBeLwFSXcz8T#OG#o$V|ZtHXHF~jojLo$SE@GU z9LhPKb27Xk=XB1woQu3g+-2^voEtf}bEb0bA-9{kwQjxJ>UO!kTvJ{hKI^V7uMOXG z*Sc4@*Sa^lo88;pyWG1LsoV$365V&*M;0Agbkcpoeab!H9(G@LUw7Yvbb8SY{KlBK z%DXgI%8ku6<=S(P;QO3`-16Mo+!eWNb2sKT=Wfs4m3sj46SSSm9SCd=Y_4j_9maM! z_j>NF+`GBcc~V|1zKm+m%gYPomFF$VTZU~_-uk@FdE4@K)aJNfrLa*xhq@Yp==z}2cv1;@*8g={5D1A`u4 z;A$x333JN7QI_c0?dimJ)YI+h^PKgZ_gwLeVjK6|^UM^e3gQdQ z1&#twL1{rnK@GlL+)%KgU`s)3!Ontx1&0cb)6S3Z=L#;CUoXGK_kxjv8}$En!BinD z)bf7FcYd@lbQO9F%L=OtYYSHtHhX&u*A{N1|KQwz6mBov#YYG~uJfHA(F;!$p8Dv> zUN}%VT-H>gDZE^Gogdvl+6!+L-YuLil8R!BOhxvhyrMu+dC`)hWksusdUy{mT3@u8 z{vRvq`REv5w5RA`5q=l-7Y%an@~0g>i68U1Zz`H7n)C`@jW^M2@j3&O-a>DX_Y`lv zx6#|=-Rf=gcJQOVx2w2?_FnH9?~wPB_nP;n_m1~|vAkGUY$(xG_7>aptBNr%!5%6O z7uOZ9EM6Bf`1Saf|EA)W;`ZX*#ht}Ri@S^aiq96GFGkIZM~lac?-kGZRK9qh+2`3t~lo3?%(AH1!4oHfIW~G2n5Qjh5}0#SCy{_EDNj(tjD&w zq%p89up_W1a4>Kz&=csdx`df)ePFPpH*jHIBcHosn+Qx+-K@GnpHI&+d`cikPuQXH|F0CtFS-P%tQ)x?Sd+F}d&eEf$-KBk{XRGd)UMW3aItm;u z9WR~1cCU11P7N-Q#LqEfbIkF~DVeIb+9%#99$7x8{8h;7;Faa z3LXd^37!a^TG$sHfbMeedhk~8?%dem^jv9fEZ-NlFLci}&9%?X!xorZK6lC7^>dfa zT?O1cciY?@bN9?WIQQ7xp1J*V2j^Z`=v#PY?$xo5ZDk#02l4+{Sx;Gi*&tf?OeI>p>_XMiva4ldWfNtS z^Y94RJmAAzR=mw`OuZnXlOii58KRq z)%^JR=J}5Kp82KoE9TeCUp~KK{)YKm=C{t@Ie*{$L-UVUw#`2||MdKGi{s~CoIf)E z#{Ap!r@~jtS-G}cUv4dTm3wiXb+;Txh4Nb7C;5(TE%wXwf9>Kb$TpTYmv1lMReqrS zNcoBKQ{@AY4eQtHHy{-EW_QDV<1*e+nZS~0f3ggJfQfI;xD9o793n~3|kMj{sn^zE-bjZU~Iv} zg2@V@LW3<4n+4|&fr|2qB^ApmR#mLWxx}`L9hJe#s>-F<>ajIeHdXAYI9OTu7t+5d z=UQ+~^@}YcP)jzUrs%rU*y6vvo zUDb*0f0wMgst?=$&i~TlU=`o5!T;S^xT)&?!j^?{jQFGQB8G*wh20DL7P_$>t#4rn zvM{zQ3+u3TFC1OC31QoT|LE3&cz?dNBbC2@JBo7r^^KPV4IRXggkgvie^2>FRUU7pq6A$H8Y7sTRdAGB0v0@+>M{RI#XL(Q<4J*fuQM zvZ!^@&PDsM9a?mJ(aA-p7oEd)anZ=48;fo)nprdxR)yok=CC8|373W|!ZqRL;fC-A z%oetUaVCLnU-)Ra8`sCqhR;JfinEP-;hDv%#qsbC?#02yRd~i&knI-m4j3~8^Z~qG zGxHzJ;6H&Cxy0F7+4_LVe*`SRa4$Wu9N~tD@we672)8~^ff%oWbp=Yn?tpCxco5D9 zHjUM-M1g@F4Vb|Mu)#q5L)p%N3Ng+@7WVVE)nu&2Z}P8y819H4Z>!CWFoV(TA4LhK zWxM^yu#yl`0UPkUAbS9I$ZrK3L@FA8AGCA9g8pvEX2F(XJ*NoU;m2EYB-`LeeP`Z- zw#?rS8S3Uc;%|ZMGS~tCCa`X{%Ae?WLpuZ6c0b;dn;8eY=&u8N7jYf_@I&o{KLpub zX!rT?b``I$Z<5EQ7#)7w!*FAM1GI8z2mCrP8JNp22ZLRFw|w^>GQIB(VyuTOj5Ug| zo+H>s-!-sCW+=YS*BZmM_ua*}an}>+$#(m2Hx=!X#e%+iUoT`|WWnN7zE;T6A?x%V z28#mQ=GzaJ0@mQ`co?J2*9PW*Y^!f8m=Vm4Ri^OeMX)MgBbbE+z2&}olBCdqR7;mH2zDE?LSG@+4KSMz@9E9_7h?4JEM$Yz#dnI)OHf}q=J?H=$x!y< zD`2n&=KhmluwU^Atu+R_Ks$!GXiM)5tu-dFPteLvJQY00;YBZ*y@(k0;(k~qo0-w0 ze}NU^WWukQ5oJHehW&V+1}vWq7u$%vg3__#oscQflJ;U)N;tvZD_%ktJ;UBB!jmD; zmWi(xJBkBfAF^Q|p5_265Ic&6Vmo4Vi5Ip#;7Lk_FiV*qv*Q?0w&MFK-Q_Sm0~+-Uj zPA~eu>@{(J(U2Ey3d`T{`ic*bY;RF-G4EB`$ir5Y$7Qg_VP0QY?bYIwMK`EM?-$MR z57QqYqCw=$TV{XJPS1LBAfpe<()ib{!v#53O3LI-3~2<%}qg~tk2VEJJE z1!yCzi#1%Zg5uiQ@WVBx&=U))3wI-23RqcTJD7qQa3$dwVzk2sHwzC!W&*oc$lH83 zdRU-v2Wj8SuPx*w-^AX-H3^nyx?OM;tQz@7N}mc=&$YrX zSd#j)@MW>R;I!v7!rg^dOL6}I?MY${C_SE#f;NEk))k-xvP#70FOq|Oh7IT82@o(Z z!W|=44z`_G0oVm%o53RKaalFV29eu+V#$z2##TGh+d{Gyu`=XMrVpPC{#BhJqPdYpezAjOP%-{R%PiJo})Xhj32MPB1^af%V`FU@tJ6M?-5f zWh0!+vjMU&Sc9hl%nG)|vmB}10;~4aK(>)h70^h*3x9@!aS!(b9%jfN=Bst_zLr1k zae%$S40&B1GuRIiZnGyItPJd!hxcrh&oh?Kd-l%}<61uNbw{9GpFa-ff~+Th6wJ!5 zb;g$+|i=;~CF80-2m$FR&G8z~E2w@8+)q(}+*xP2|Ie2_vl6Gn&uq_AWfl z#k})iuORMuTAS%zvBPtkR-k%?jd=R<`k_q`dvbg7jw0?Xo5?-K*JeVgW<1ODywILQ zDm8h0tiBJ~p*&tUR;(oRvzn|6`L+{L!D4Yc) zu;jrDutjVbJq>+QHi7h3<<)~>gy!!cS%?{OPv=!3+$P9Ya2ZR2>=IwCOXd(C%{!Tk z(hI+52lAWqERgL%xWg3p1@?#ht-0Ki0myI^2NRJ;Q!ek>Ww2UDF84zWb#qY4@Eeg; zq?jFL4(48f_8swA*MZzxu$S4{-1>ap!{9CQX_N_*D9f(gW01Wlel0(g>jDe2Nw+nZ z+qnofharJQrVUOtuQ?-6okIaogQ%Aw!?UU4|84zhT2UH%a>i$h7Wi$Ogq% z-FtGcfwiz3?)$lXRIGsgBK5$H>s+~;TYMc-?xVO4#O-%$A%pMCJ^ZKK%5$b5gAH;U zNVb?6a<=F2p8W)5t4LM^*)Xj&_72ipN3v$fhG?y^xng^6VonG#tn5av6K%+QQ%6oi z&So$p8_6~0*uZ{(xGa*M*seY8=B2l@8_ux%Di}(Sb;!7_Hi;dsNm_Bs#71&LF7#*A zw^~M%-;VyeG=U4tHHnEG#|_*#*}b$etG;a}DJ5fce?$u2FX{$vRvoT<}+r zjkwO|>;ZcjdE9kfCiVr_Ems>@KD6VmtzbOmZ7$xbS0KCSYJ|*>lzVfQ5$kYuxeh=( z%SN)RTva6NaqV|uY;m81b+33ms*p+W%2Jli{a+TsMat5MQq7Py6WW{E9nhAEuo|rhW)zEEGuhlr zm5J{@w3<9DP7UvF< zz3SXaD^R7f_nqsUd^8q_@1i8UeN#oZGvXNvZ!SW$n<&;SFt}{%zL@MV~yLhOAgh zIYk`FyqAS`6K2KY%<(MVZYkocnWI@wE@SU!UU6_cV;s3ENnaW%xEP^x}M z2wEJYvLaqS2A1s1+<{{cj&zR5u>vE{5vf}hY_-o(0j&wC^iwMT0vVnvKnWg$>&?+nZIN$w#skF(UId zJ=hUS`DL&}#KK^av5?+wRSZ z&BUn1SB<7J57~D?i&<`Fm3=!HV^j8KJC2e9^35R6D&7@)>?8KG_$JL;Y{q`ij&Uj0 zvKhxNdoApOR*jUI{S*5j(`P@1R9-@Qg?2B(;S3`)kLN2s2d&G_?ToX<%%k>g2xmkp z8|=LQVa8~`V(0x2XMy%h8QgC)iIet2_9n1mvBG|gw}Pxmo?+if^(_{kvG1`TAeqs= zCF2~0d)mIuz8|a%ahKY8&5dFOo&-^m>{s@neG|zlGw)?ggZ)5!%zn+zds7d4-EPUe z3wDwX+uO;0FGE{u&x0%<+MpfvklA4kmeGqc|B=mPS~6--x4WUo>PC-!87ZCAn23KzK9{QS+^@w%0whym$%1K*e^1YU62)~pMk7Q+-s}NxB+HlAJ{eN zyTM)-Cv8nOD_Fi*VcVE7`A}A$ar&WbMLPFfFC%VM#&IrVAK0qX>qz!1TcM5n-F&gq z=1o5fmLfi8?X$(Be6#FzYj-+w!zwvb8U5+pR-Z#ZXt42~eU|Ob=uAHk*-bW;-bH1; z$qea-(|NBmLv}S?gK!;e*h=*fMo}X=7suI{0ndN&o{jVF^oSSmKuhCNhU)_9E=n&I zsRXQpNaYn+DB^Q)W|*O|^0Cm$hSSzjI3u&!rqj1T27iU;%XnYYAdf(L1Ieb+sTE}L z%wVylqi4e_8*IzdE5L9i+ru!s3%5G0oshkVlw+-Eb9h#pO|Z6u{WIH}e#gqk5zg|{N3HMz zy!6nngX|TSoIal34cUj#9y@`Poo4Xw8!x@^laH0wBTSG z>OpPUZmI`q)k}%L$(33c1s5st}$307StbeaYI_7Wh$<6VBPGODQ77U4}03eO#2{v8{v+ac7h!QJ78)Bdkbu( zX$#mE)|Gm}3{Qq|Ve>L`B1+(4t5eUJmP2-wJ!STpxb`P(JoN;Xi%*vVUa_ zW+{c&yd5hvC7K*yuM1=5JX(WkjAa{Us4PqILF&mA^b*)_I%R@n=o{wkW-Vl1QI&Gs z%)oxlrp%GibeI`ZZc)l@2se|${m2XKk65XRx6u%6aMH+I5H(6UXzT|24%i{%QLwkz zc*?$%!(fLYJ7U}owvmmaxA3@iY;{VDu?38$vdzf-+%s&oq0YDtY#l6l-nf#&{X9iV zaS{7vO88;iUz+X`+l5r@MjzSgX@kM&Cbk+cKG+Zg7B}5C8o(|fy*#513>G)ajdHLF zv})w&h0+`D816t;$Hwv8`4AY|15c*&k^DAWZ5lUR0(%Q=$iTH{+3Msj1K0kTJ)L~m zGyn#FV>)fXIL8+-SDQKwyyjqr{RWJ4p$8?sXTUfYjzGK8fN_pg#!WsGAIat7UQ>I@ zH8A+Jlx`F3!mpm0Ht|}LtdkgKURXP86f!fL!Ma<`V4p%<6Sp(Y|EEm1Od&2~!$#_{ zTxL8@aSO!V#>>WPXj9pB<4F_jg4tN7alqJ5vRlSOCZ0-xxF0KP@iC2gnQ>=IEtpH( zYt*I$QRZpH*pk9~=WF6)#(L8Vux$3aama|eVJ@`SxQ}Zw7kbm!ox;7!vtoy_)!0h1 zej{RY8OpbTTChuQOz{}_=y_3m+Sp>`{;y8#F~%G2lk9r(G__2J_?SLmTtc!hnvT+% zV&_ovPSY{Oc%OZMHsU44JvGCyX%AR2`@m>2l!3i0&oG*K%V1XYjL~AKAer2#GF&HF ztx;nbl7b1)*HB8I@w<1QiBEBCh=7R zUj6|qX73yH$)~wYo{@YXt7kzbK4W0XA(F|HZzhkBtQPOMTmy59uNqhKwWM$-<9*}K z=is8up}8J#kt4cONkBZFB8iL zJ4OuW(vkJ%aMYO6pGq1-4BWdkSd*@zEVzmqN2TZIzWT^n4UVw-_4<9#V%DpVXmPJS zc~H+Sehu~AMk()s?4}-V&S!ziE&2v%qoAGUT7LfrD^1lv_GxJE>3Pq_*iYV0ao4cn zq%*{R4%uO1uOZxiy&2*5LKZnjeU%yFujyeIet$lxox=4YTm{xZqPrH!Hj?2Qy55@v zyU6~CG9M%v;wI-MoyUw1ZKRL*oKujMCBfo2yBJPdOW|-`J*gwm%mxPurky^mN3+FQgv3t5O*9ve;=Bi70;Cz+Da=2)}q7kct_;%cNqWf5_$ zBx#7k;R+|#nS#}1xIdai-iP7(j{Y#o(5i7)iPa(QePXz7lSt{wet~e2_DBOuB(0vk zqqikYA-%b5u6}J|6Bw@GB=$Yj4(sKdF&ScLIpb$eSdoaA0M~62?Zj|ylvqYuTnCD* zL&dMeC)RKoD+C)M?U%*9N#lGa9pP26CuuYRV-V z!nOon(mGjv;;jT;zKiTZ!p8V+Xua%yY%PVu^@-T(1YXj!EIT0-&piX4^hrFGunO$U z%$9H}VHx6LTqe+5h2O>Aj!yVehlL;nh zT`V1|W8DOMAF{3l?x}Hhme>+M4d!P5kywsa;&~Vo3*&ErU4+&de;o|-;zU>cWlF^m zKO8>{mW|v7;s+?kR9pqs9JA~A+V~UD?gd+myV(3bn<0K#`~kEt&QRmb@w>n(Ak)Tg zht|t%@y+qgV6b0&D31F-+>cAt#IKE{oDlIjMp*J{JU`~8B9*cDYB0>^u$ELA!kvKs z8^Q`_qVODh5a)|S`Gn^n>rU7Lwv~MtcQnC8?00d7gr#61F)8jm#(*gM4;Dai%LA6AdjgdCdS{7 zZ30`zf^lc!mV>QCjrwDJU;!~c#vR|u84JeP;$lf=i!sDmNcOuJT|Cb%L$t-7iqmk$ zg0UxJd8_hz+|k`3rqbPvHxRSwuEnC4;Oyi>-KE&ABva^ycnJ_ANp~i;kF;;=diiQ# z2p80K#hwM5fHhQHi~E4VxS3eqs`Euv+`X7WVz#*P*d3%@5H}i&Rz)+Vzpex z-i{lL^O9DCt@6OOz(V#I9%GAWi!sHZw}ZvU?7>kgqTLa55$qaL*%HHBbtBmRn44g* zb6iLCATe89n{J9TXt%};kxYzh!g^r1E`o5S(HQ4osyL5k1!w4W4qgJtlH$xUTZ!4? z;$s>}`*xfvb~jiVn;Sb5!`m$=CdA&0Xhku0JT4J3ls@)Q3@_;Hr-V)7g8~3PZ3ka>SC^Q#y*Ud>$nYEVp7a~-5z4Lm^;zu zN&9xp%~-St!UbclJ=8uLb1CK$g%e|jVpPa&2HFe$a?YNPify|2io1VP&hCTGLZZ4bTou&$XHW(rtG2P2eC%eG+ss~UvEF*G_N z!!b{Hk-}|(EaIOL13j0IXl6>L3c z>{o191*ZVn6Oi$%E~2af%*z=(ydl~ZjS&GaXog?kf6s-|dIN46cW zZ#%Hoktq8XGez%;js?SULK`0~f#H6*`l5Ck4A0=`>a-Zo{K%(0ffblU_6y`Oq~)!Q zt2){ytaXI7H;}SJ%g62<$ojPdU_3Vu?-%SGVtBON|Cd0!ReJ<7oJ;GfwFe->H5#o= ziNHyJDX?0Awjt^;SWxKKhP3F_vM-^QLsZKzgVDSP$NZP0uVQ^BdNN3Jh57|% zJ6KzY+oeowiki~$x;fZz)F8<)vx({_hO4j95xck`DO$K+124FJ~sZ9 zO-030seXdix`wYji?W|Eqh_gQ9PDw#AT4}>L4795gBXv>)@fTP-#V~O6xT0|Y3{4| zhx}g_^C)hh08aYBQ81-26?8};JHTNFhKr5K3RG0~CO~mH2 zchuW7F2o&0zn`R(y|Q)qnC24nq1%Yj&SkipHLQt@6r6=bU8lG>Gg05C80{=UDMYm) z61`UP#@k)a6ebmqxOP53R|7k$iXVuFrM4x_2`FeTn)R(evkA$HC*Y55|rEvCgZ_`QZ-61%RtILHN1>) z1L?Wc9gyMKGiZ59e}qy^sSZJgaTFz~n;=_)HcwQcmk8fNZVjqdXx(7WDYOj9x`0#f)WGLo;@YFh%~Bmx@YX65A5$Gv4S@X^sYK@SI1AQLyRn^!fmVVw;QQ1oDK0#hx}O;Cr>T2L zn*&C@ge8LoNsAGxK22;T*hvbRWw)fCC^Hmx6b9=+8 zQPO+}wvRJ*3~V>CJz$ZZIfC@pk_^vasv_r4zXjV&adGZ1S>(VsoXZ)!am6OHH2pwvR2n4qFN#jZ7O>qIVWY4) zo&CwXU~{b3gY-g*eUQNyDC|70fG1N}ogBV^SQuX};wc+gNU;Io%wmrsEQc>37NQ>c zSSv532`P9K)d-F2HPQ}685r(jN!#QhXuWJIvIZ1C#!4F%R>&|vmW|6N5bh2O%E#nm zki~(Wlk-^}X1h|o`~nzewqlDMwGrNjY`wf6?2jy{xW(5v;In(I(uVXf%l=SWNjCWq zY=hz=w9)K=6qeV5MX@)ekYWf7=Shk_`DVnx*@Aqfd_82C@yj>KS3&j~Vi@E+y}gK` zQ*i&d2YJZl

    v~xO`TFd9OUg*FHn(A1G$T+hDiZ8;X01Mz9YNZd@LV7$~23ThWS^ zKLXhjaT@GbVAbMX^lClWQSlaHObEB|g`{qo&TKK4LC27s}PG* zm^FQWW<>Rt7P>sIChON`c$V~?W5?N}kv(_)+} zPo|^9BK4JP1z*Kpyzt6+#4}e?i@;wqr0wUgj;YT%?JM;oG#ge2;LkG&R@!mu2SHb1 zgLL&!TM?UrSVx5?8Ai<)u0G8FTf|t`hmTx2yFr}~M0h&_U| zqxf2vCT~-BiBD8KV#C#4%2u(6#X)vIsZ`{ftnSj*E9&_cHBM$gkJEnSIPD^yHR&tq z${OUpAJ?cI`{k#S%FR??$bB*qvF{N3QC3H63t|-|#*^xedp$#bgqpC|BDdiy%5>7O zt>pGf*m*V9DPj-CU6Q;KSGyyP?;$XlA=2gT;P(pBGPsBT#DA0Wa_j=c+;Tjw!V-=< zNBXn}w-ReO^@E%NUa&^1Z#fV4RPd#+p=i=ti;4^}#2r`Ut?HBd%~1ol1b*JR&fzcTwS_G_~r$9_HbquH;^etq^kvp<0Sw(JjL zzXkgZ*>AvpBlg>{-wY0*@uY$e-qeGVqdX;G5aIgpUeJK_7|}~oqdD-zU+@?zdHL_>{n$UrX&0{XMYO& zvFy)d{~Y$OVSfetxoBi(WPh@`}`(xPe$9@j`9oX;B{$%!hvEQEkF6>{x zejoNHv3~`8b?8%(EyOolej5+{GGB!GJO0k0gJCWeNk0BlxP0N#ixmG;ejML-dbZ7x z`SCBxr+vr24$mk2eJlBv6vwxu()52F0{_a=4(3xod>;er2^TL*Ujlgs@^SiD7)I7c z;t|Lvkbha@r;2Y`+Z9+o)L00W7Fgy?{PdJSS?^nUjaP>cg-)BCuq={ubaiQYltyncC8YpWg zUKo~C+JBw(b201H$hiD^hFN51d{Dad%{|=q+_|DMjp?RFT z)KGFizWvW_8_A})Hk|C*<>^yOUUd09?6R*1qeRoJG&wDOc-s4-nu{-Ne;(Q#O` zFU5`DP;H@SX-PVTcowZQ6sHK&%J}S!u$EJrEt2~jYK>Aj{tBBHD$Tjd&yooD6P+@_ zVR8IV$Xm>_#o3byE_3GhsgVHB%b-2KP&Gv|7DJUgljfIzGd~%t*}4AS4#fv$SM*Z!Fhszmt5Pa%W*oj zrM!C?*f%Hcgymh=>B_I9^-ZMhKK|RGEs^H^U(Q!vl;rKZ`!d-XR1fCCb@;afDC(_V)#uP1IK65hC zHk^=;^j-vi&N;M#J;0L6;ra>tYqY)zEEgCru?>;6vqUyQ8H(PEpo`&t4lnxLFOn@M zvUZ*zn<7lk{5X{oIH`MH&>-CV{4=9Y=v;E_8oW;yV&B=h?&J>_2J;Qhcf#5wAVY8+ z#pMks#?j*BQW`!d@Vy^03n7o-d?)j}Kp#a=nB?l0ZDeya982ff5$^h*kxuu{dA@|J zpZi}<=ZVABaV9;q1WGebLvuKjT3QJdr_X|U6_+=X`OdbjfU{)9@pI}f3mc6KXv{_3$&UjOPmi>kb~X)K{h(!_V2k^D4(r;o2v#ooC`@lt6m;`&mZLr(N;j zG3_+4U>=6quQ`6>p@O#wFxT!4H3tiL1?)u!&IjkZ6CPjfm%F1w3es;p^ziXJ5A84b zO>1|DXP}M^x^KtV=kv?g0ZyL^_~iGE^@PLExfl@g9M9KB#kD`6$O%!Wy(A~l!)!~S zew0Gboxn80gp!`ij$9~TY1$JSV}!nkPE*O=;mCs0oVxisz4u<;e}9l2tu%5A>|&rS z0@Iy%N!Oixq0Z|RUMt@i?N>$8uCnfHMN&uk_N;8&B5iL;^D(d$p~h8l^%Qq4kgpRb z{w1!-Xx&o6y3OJDzYvyI#sxA7WpgWTk2qBR0%m6-;Uo}ze?rYSXI?pBI9_4XL*1L= z?q&Y9;I@V3f93*9AXr|`y>vp#4Lbm1G;xpVzC4nHk7KshNfPW9v{>yJSx9?P~$;&b?gUg2MUL<)!l{=GmN+jTnGiMzYT!}M|Y0UYrIbmT=9*>xZ z#OwI$pa}Qfsm_y~UsQXb9x7}N(gSrsemuB;VRb_wqY!cKW4_J_<{2V8>#71729*nJ zgChsZTPW*7j)8R*@C)c?Vb0L86Yhzl=fcz%%!PGvn0NL9c?a+N&^6vOD$Y)FXW^LQ zu~dqF1-J9B{@alykF!#&=bdsz`|p=);Cu+Y9(+&zzw_@!{<9`9f0^T_(V8rrOv>EH za$s=${&HY)hQ;4g0{QFSzh~#p^r|!x2wW4Crd)7dhY#!j{AZ4{E)33l=J($~0)H|F zbH-cok}O;k7N0M&tC7_i886CJ62H=1ck()6&^+LS-5 z-ty>GN%tz!I)e9TA}v?m`NEB@(0du>UHhr!SCU>UuRfkG-*pbxA7@|l)Ji*Y?t#zo zz)~kWw@SLtfpwG=4=2Nt%9ZE!^6C#i56B+y2k+&USNqFTrX}&BHb>I#Nb(d{*U66Y z;&`5_YoymodR9Af3+@+{bJph6zQ8#jnC`SaIL*;nG#`WULqQp;BVfJb@L*d*l0K(uO}Sk6$*(9?exG{`flJ9fCy$sDG@LmMQPs|-EC0yO1@|HI3RPruuTTUi_;5;f#`M-L1MK~av*{4S|oPQFm@Z<3t-I=`IPMQAGO4M33Zaw~2Azk{q# zRUaI^817ycTrb8h`HvYemxKC+QPse+CN;~{FWFAg`m$ZftyiW1r zY-lu2oa-UyQ2ss~W0S8B?GJ7f*-iuPr~Iu$2QL)a!wdaf<+TlcBO>T8u%5tpP_}aY z>AZtLZDP6cd*3Ivtz0WDC9}e{VCaIy&3o?CJN`ZJ;_`*!T-yAhc$`T)ISB;L=ab{` z$CUExlF;*|q;dPlv@o(-c>gi~oM5%W;bWbu8&?+W!pr{to|k zbZUMV{Q4=htn;%Je8b0STS)y*?W6OPVXy+%L+x?o;e;o--hz%T#s=rKy!=AySAp!q z>{SKJ#gSL2Rs>!PF30(udzpU@HDsP3#(_KwE){up7Nq(kxaRaJ=t_w{sV?VUJ8cVD ze~FyRo*~kDPxog}r2QzZ#7-4oYR9SM9jc$sSPON{NeihPor|RikFO|RFP6lrG~>cLah<}%-n5dRyg z%sk7=ApH<_@rwByUc&WIMRN{46Ds*kT2Tp<`y43AzVJ7BN8!(#-{IFcCyNV;j);I? zr`f$KyUfGOE}+*Z9d*`zMHv)guE6vY`%>7p(0s6NXPgdx0pB7HQ&b6M{ zuA()Z>@RA2xPF~1&r?}0a1SQ19!d|^nZf-EydG|S&HFB=7#EbgK7b&oZ!CkLcWnb@ z^k>9R)wumL`toKP5}x%-k$lM*qt>oabk8dV=;4o$LGzD#f$Yv0pec zcKA5IoiOyXI&eMZ&z#NO_0~Q0c%B`Ghy*d zVa@n|t3}R*1kX)JmZj-KS=Yl(oh*w8`cT-L(vc!375t|C z#1MNd;p~*bjdb_~r#rtx@h-R)aF&tMip%Sial*j)>-4GMT8REQ*NO{?Cq1Xjv?il- z)cJeJPUzHGns5J-T*JvWSWX3Ni(+uF(}v>0V7|e5i<67f2B%DMd7V5?7%V3zox;-a z2`tBD$)#x@5|E0c$x;KA?c@TLUL*pl>-;wiiN)*q}$rU;bS2kRFXfA*CROgxO;2(Miq`3WG zr@x`rvGnamD(ig1(aGzCeC>8*e1-1gAC+1TvMkHqP2hKG;t%crqk3Jg^>_<)PPy_u!|c>a zAaL9T*HXfG4!0jmbNqCf-(_w`z6>0_6)d8^%Wr3Wa$?Dl zd`=WnnNz~er7|;)fI<1*qX;TIlchKbq^+c@b=Xg4e**iR*>B5!Ci@xer>_*p@rSq) zw~8n@A-uvTq^KY&2~8xzxkZwwFLaSA(r_(ZG#935B{GpCTXYd;iEg61s3v;C)e!x} z08vv6f~zftz||4M#7L1KM#CkEnQ+PCJh=K|mAFDQ5bNPuh-=05qNT_~3)+g!VvEQU zcZqwz^?vc7=q(-=+rW1_+#vC^*ewQ&J#b^iUbt~$AKZBHs@N|kh&RLsVzT%GZjSgj z++6Vu+&u9!+x9ZHub*xSU#>kRo}=R>U;IQ+^c@n;^fO( zg4Rar)>~E5`fB}D9qkqE6;(GXH!4>px~IFRt9tH*?u9Bz@1+k`$@*}8 zf=bsf(l1x-^lS8+RJOiJ-=zBL_vrVie)@g-6Y6aJDSd|;qwm!Bs)_nH`ZsE({+<4v znx!ArkE+>*WmsyC5o5%txkhE9ikfFsH>#@zMopupT4*#d8mL7^L!+TuY_u?1s3pb? z#tmwzXRc?iTIQMWnXk_EEc7f?%YAEoYt?zaO}8^M)k2$TO|n*Kmsn3)&uF(=JFFer?bh?w2ihIBWhZG* z38lL89IlUf>ct%M!F9(xtsq*9ig0Z(rz;^&v)YUKn1uP64Ch1M`k2+JaNRJ=(=cPx z;e4VQ+yKn@=7_g~YbY|{V!@-0sE66w7Wv!3#fkQC8PE!us4*KZ3c8^Sv`RNPg|zO_ z2BagRFqhAU-yeJxYl?QPDN>;+hNE>O;6}2m#9E^}YmH&7HHJfLT#A;jhBL)waCO8Q z=n<3kh>!J%4|*gIt-V3qjCS4v7YDs^D{9*;{txwTfm5ts6!gmjA|5*CL8OqDQLJSY zw9M0J$un?DJPTJz?11x%=is8mPB^c49xh7kg7b8ae4s_G2 zXwPeKgQ2DNBmM@QDc*!r;w?B+ybY(sJ8-6W7fy-y;7sv8oDv7%Oz5@`5GU;x#o8^N zwOc%Ew{FmGzd~w9;1XEJC5U5i3F0{1U4zgnm@4AKS5hY{&Ys9rR;e(NHGJM3E}%$$E$< z$t1*+WisORWqrgOK!?V%4vl3U8p}E~mUU<>>(E%}&=#VeY$;ocO0tz~CE{d;%s{-g zY>jvuXxI$auoYp~`$3z~PhXeCEL z|5k^1`DbJVZi=lF*Tq!hpfxH0uSIJdkrMysHh*B5Hi^LLn zF`f+)&xT9IJh@t~M%l~cWhk{qt`X6h^W_!t3dFCJSBi!5DtVPyB-hDx zsPSrfHPYA1^JMrAAh3D25kuLus|AFW3UGgq5 zM&2#&M%k@$tEeLHk@tY-z4BhCyjA0z&W{6wV4f60F#FOi~ptKOoi>ZAIIEY(-_73r#<>L(_sv(?#%_gDQ9AD{+^iL_pUkM)Y^i}lKI za2}yXfagdx67f-Ll&GaftI^;;MvXyytQw2>I5l3>Ruj|&5JI$xbHYN(ZJCE^#T3lLwWRv~_& zx)AY;)J3TGVs$a(%v$Z&Vu*zggWZrm9=iEuxFM zRo#mCCbbFi+th7n)$QtbwCexV{~`YtwFUX_R(B)5Rc%H5K6M}B_pAF6e^5P$JN1xy zNc2$;tA`Q)r}`)2kElm51|C(9g6B514e`g+V~B58+adGE)#K>b6Y2@XpHxpG{*-zO z^**hhM!nCdXCTRE)w7T!)|VJRFQ^yb?^e5!|3!rvt@fxrh`*#>LVT~Q#({*VJnm1N+r}#9vphBmRbZ1MxT2n~1-yFuT<|>K#b+UG*-c`o4M} zDF@U6+=UO+2e``z)j`PfL-ir#`H}hv?fh7MjQFSOQ<0-SQ=f_E>T~ru;$NsQ5dTtr z3HcmShajJ?)K^IVxB55IzgAx({*C$uajcBt|EPXM&i|_aBIi%)C(Nv$)z6q&zo=gj z|5g2p_z`sk@!!;Mh#yr)5&vENj`%Tk4DsXYxQNmK-h@|^nnYY_3UT})?$TU{M`^%% znp<-tu4_8thGrn{(L9KIHLM>spXNi{)J()J%|hJPY+-5@vWJ6SY9L-ytBH7=7KeC(mLPmu zU9B$SiCQA!^|X43CuvEDCu_-w*VnMF)f#9G5Kqxk5O1h8M7)vK2=T^RW5iRnRK(M? zG{l=|O+;O-sn%2^Yw21#;?1;Xh&R`oBi=%5fp|-;CE~5LR)}Y48Hl&mS|i>@Ya?O_ zpTN)5GDV`+LF*tIXdShVhLW*jCi(|jd&NW3*tFi4&q(4u84Qjx`{Zg zyVhM)(t2n;5bvq=M7)>Q3-R7sZ^Zj*eMLj9pVm*L68;hKgnvXl;U7_%@Q)Zm_(xO& z{uv{Z^s)K`Q4uKUVlhI$M88z@)K}}PMKAp_{W8SY=$9i7bc8&c^iA-AjzoK)qX*zW zs6Qd96Gjp(fRT2KmimkOUeT41lBhyRNmM4JBq|e95)}w3!3R7ugvVTJu15N0=6a!-*O;4yZr)}-hWIn)v&gx_d`@JVJI&`2 z-(|jl_-^xM^ z9x;!IxrEKc1%%CnO{fe$1R)w*9?L66Sw71r7F(ue3KwviE#_DitO{ZQ&{`FwoMoMb z{FAI1@Ml`HP-?cd0_jg$Ps4x4dPdkN6brwyT}3pu&$5$*3y)mFL{Y#{gxuO=wQmAF z5prw5$gM3fNF~JMfLD4kezO_B=^_PAXSAj>PSY8u)n}YWSg#Gx2qCnZ;MyL)JHmBg zghn-V5miMF5Sqpat*+<+m%=!$s^}y7;wqsv571hFEcB= zjnSGeUV_sYv+3exIE|5;E?$At7`bWUbvTVNo5pBOW1OZjLem(VY2qN9E%_=MT&GiGbVn5{lz zwnmaL8xR{XTO-D7m1K%cK^tiItCDOa8zJ5pdtjAhs!T;ZO{O8=tpS70lWqZVF7p=AIAUhxq zCu~M~CL_J>jPy)Kdb;c?yFwb>Wq0(8_S+oPM|dxT@m>|id)|D!=f`-2?s_n~%gD!d zgy=FD%k^L^H=40r6~=NIa=x4|Mlzxs#fYv7BRUr&y6TMOyo}|1jOAR6t6F_v>Nmh&-|b1{lbW&D=I_-%^ZBsYnvKyjOaT?xgdGJZ>A z{MLlgT1&=hag5Vy%ZKDc$VoeqIgHS97@?&yLQ7+WHjNQloP1h74b(x{EETBic_5Y- ziUze|oHu4RiGK*1JJW!c~$Kn}} zB{Lpt%6KfE@mMX!V;1n(hd`kp0gqXX$C81^K1KX9`I$(PpBLb<8H~r`8IN^jJZ3Q- zi)TDGlkwOr#$&UA#}1=C-vgCdjLJGPDzg}sHDy$0F&>L%JXVMCSS;hQI*i9+8IRRr zJQmA%tR^F|w#ubkqQ8n#cseM;V-0}E45WB~%Gxt3YoKgpBb~5WAI4^V8Jl?+o7s%b zOvYw9V>6AhStZ719!6#HjLIxVWtA17vUZHhIx!N9R)oZwFcPbw2!lnd!D=vkLSMDj zFf~lnQ-r=MGx~~Q^fiFdS35=MYk(s3)eh)u9P*3@28&?~R+%wa3}dj$jKN|UgH>h> z){Ze)Wi?$*M}ER!(Tu@5F$U|X2z^B>LSLQKVzn4?LSJ!=zG^Z0s?F#tiE&pnBd%!1 zS{)f{b!DuT%qT0G@l~|COkD;(Yt$OFldx6{W39@JwPF}+r83q^W~?=kvDP5QS_2tt z4PvYn$5^WtW38@?wUQZY)nlxcuJTkKBzA+k0qE!^brWhN^fj2#*APZugBg7dVe}Qp z=&P2xQ{9Q2gu%Ko2CJd&Qgh>7Q+~6Snna$YDWNcXW-~SeG6OcV8Jqc0nZ|fbVi)>e2JaaGdVYwZyy+*OHj zmxpmzCB|JI#$A;dcX=3hRbt%bVcb=TahHd2S53xUv5dQFGVY3H+*OltS1jYM`i#38 zx!!lZFKW2Yai1eBAg-mNuKNQwaK7F{?~%#HB28Sq8N!)01}&p_-uW? zsGu*<7a_h%zfkl8Hd~MQHTum+zeR_2m62EleY1WC;&FW8ijxQqZB|_2t6xnm-!3F&lf+; zUpQyJ_<8|2h|iZznl~GJ52OzovX9x0xL>koK|4s1hJ^YYgZ2Q3jx|YG6xS`Te$Dh6zf>L{`&CR%Ox5V0 z;NFN{7Ck(=O?352zrcN3=~Xz2O@^ylNmTry;z9Vi6<1g6QL%o-iWT-$SW}^$cUDw$ z*K}8sD_T3O9Z&~hstbbT{S$A7ot$VC{t^2I|tp}_Jt%t0Kt$$jNSdUuUtjF-2>0o!XJK0%wXFJ>O zV&~Xh?QV8=Jb8NBz3kq0AG@#J&pzAkZx65s+Jo%D_7HohJp%L@a^}#haFgDdPTIAf@ft7tGhK&BwK4NSdy&$c^y<@#=y=T2|9k4#I4q6{tA6Xw;pIHC0KD9oxKDWNGzO)WmUs?aQzP7%x zzO}xy4x=4ESpTtpwEk=TWc_UYV*P3zv3|3TTEAPztm8JejR2B0+hs@DZdigqPC+K#bf>B)`fc2&EYUEQu>*Rwd-kn)`kCJMNd=@48=izvMn>v@%*68RpOWaRXao*gR|k~@TcQnZvG?0pTq&*+>%`UKEAh4XRvZ>Ti2sQH%3*S{T!dYzTjZ^B zliI8v(Bie)+BI6Pc7wK8+vobs^?B4aQP;V5>x=az`ci$Fey+Y;KTltwpRcdfFQApQ z{)+E?-vQqTzJtCGeINNg_I={}m+w5gzI zhkc0$eiz=0@gmiD*4SY@XY4edH+C5>7`u%ZjXn14P^qEP?78-Qd!c=Wy~JK-FSl3N zEA3VGMfN53YI}{n7B!_p!=CV5lmpPidyV^y`;7;T2aSh}hmC(4kD$-njK_@a#^c5l z#*@ZV#?!_#_8fbjy}({%FSeK3=i2Al=i3+97upxwm)e)vmlyU#-6{Kd7JDbco-@z0 z6qcMtz(B)*ddBJ#^;tkX3vky~0q0zzuhp*r(zyi)XETt^J-{+g0?9lF9P=XVKnpxe zJj?X0`q_GKy{|r4@23w0jvA$(qfgSO>eFz)m++k*r?1zq*RR!c^_%n!`VIP{`a}9Z z^+)vQ^;`89^!|DueSkhfAFYqkN9yDC3Hl6uvOZm(sZY`8>T~q@`aFG+z7V74e2k=( z7(*B87web8BDR|BVfvN&I{hmBYCTWCPT#2Ctly^Jq2I3mpMIDA4}FXN08rSy`V;zN z`osF;`Zj&L{*1m$-=puSOh_`dMdN{jCAkKx>dS*cxIDwT4;4tr6BpYm_zG8e@&M##!U7 z3D!g)rpeY6YpONPnr@wA%^>Uql*7?>pEE6YTE1UtL^pn zHTJdkb#|`3!M@(!Xy@5C*f-iY**9ZG&cOVoHJ}GhLMxg`OMr9nX~ZblyE*e2AIZ9=`+ zCe)j4LVegK)R%2S{n#dSHrs^yvo&Y{+kpnM1!xf4eg?DcXNWiiH1vK=@C=dRy38Z zMAO(lG@UI&=dev^2HS*YvQ20fpWvI#mZ3Q^UdD^LvbL;^Gi3=f0cXePOy2^w3@v1v z&?2@5EtX^lTEZ5frEL3I##Wzm+1|69Ej{P4jb{bhb1zhvSr*M%s5e7t&7wMUdAVrK7f#fhRyAl&zt&{^cQTsu z1f99ns#z*s>DQFOS~3zH+5H6V7)m#iW(?Mev!D;>K^OWpA?d+T8gNap?lX^}Vac21lPATIp45_3` zy0LxfgGIXntk*HJvOG&xlQm?VtR?HfK3xyC=mxMmH-?S5DeTEDU^{LNYjHbRhO=M= z&XL_nXW)eIV4UwAiZv(RtdJvN;~gW%;vDaIoZp=Y`|f0Vzd}xv)9DQhITI&#XT!QX z7gpW*u;wnrI(0E@b4Or@I|iK+qp&yZUT(C29+~2u>Ye7D?mfpl!#mSE%RAdU$GaAL zrCWXX`0n-H=eytcfbT)yL%xT7|MWcquzJL3^_I=~~7H4P<`@Z-6;QNp7N8f*aKly(4{o?!8cf|Lb@2Ky0-!b2D z943*#aGL2dqfED{n}+Ezy=GdZ>p+a6%AwYl_U2HlOFVrwtWRqKf~Tu=;l&DfPZ6w= zDq=%%3$>;NFNr$#uwHd=HkA*tz7EqC= zVK`4MZqr-FhxkqPV2`?>9{;tEj6)o#k6YY|a#P;InqrOT0)DxTmx;Gu8U^Xp zqY9pho=KkD+?B++ct2{PN>=sV(W-$;amRRWQdN)_?*c%}*dgywZJZBs>Le*t@eKEj z@N72r8ZR6Bj8}|Tjn|C*#_Pr##+#lSjT?=djGK*Hj9ZOO#%AL-l&n%L@1A@LiOwJm zz)7RR{RP}V_XL!dILqzSj(Hzr%HyPtbG?=_?Li; z1JZC(ih5-gNlW82n|<%rONI9TUYtuVc0XbrY z?%t)hbHAXsckgz;h?SGXI(Zk?zwcokdl>q*d0}56Hw`CzZpLUZ@swDB@iHAxkij^U zmW5|aDn?Uv^KIdR&YbC;X1xJ$EM;G zqf^5(`LU@u$LQ3sD?c_BCmfv`cIL;X;$CSuWppv#<51YCm(VCQs;eWMioMB^xHJ85 zqAwfcF9UNE*HwF*->n0?Z(HrTs4Y=LQlDTw#Wk55H>D98J= z-;4cj?Dz9d!`LXO*F731RR_9zxI4NN-O+9%>R8l|QSU_Uay_hVR_o*n=+yB662W-X zw+rQ?cDeMG1+ke0F}xw>zv})%D9_WB&;1$4YD%wESVR1Pb;Tzbsr#|^*a5BlAl~fS zjMd3{tY21%Wq9{mPBr(eojP8$1U&%=3J}VJ_Yc zI!TFmQ%EA-+9V5ab@+K+yxrx>^`?O{B;rlwaHF>|ha0?&ILz}lNb2q6h?Jck>-aU5>&*5okHTZ6+~ zZ#9IFh_@<-8@*?7xWQY6!#r&59qmP8JR8@*jP+~CdTFwfhW!(4ACgd~xU9B%Y>;BbRClfyi3dk%BGZ4r`0 z+Hknh+nU1--V6@&ysbFQ^|nAr5^2uiMsG6?H+a)I%=0$ouq+b6JAvSjXAWk~F_MS} zR(td~2ApY(M02>&TZzLB-ijRNc`I<3>$MQl7{Rj;;YP2I!wp`nrtmw@>)|lht0N@I zxH;VDjp8uR>*6rii=#6v5v(y0ZuCO`A>079M`51lIET5O-x1QRIm+Qi&u<)V@EqYV z&+{vXWsr#HEs}`mRhGye_!~Ss;pchY2WQeF?{T=%^Dc)QJnwLr=XsmMT+f>bNsqk2 z;YJTm7vuK^&wdW`Jg;$>>%j?R)+75k+~~pSWc=RX*~?*`=OqqvJuf08J+hm_jh+`c z+~C>8VV>uC4s$)vAtcG{;BceoSq?XNp5ZVL+TO%Fgw2KWu2tFaS7ObA)9S*|9^o|1 z4ev^Ao6x*#WiQgm*r`HZj^SO^{MZW|^Ydy(an%`qA+LXOS|>`=9u44in9`Zodj+vw z`LW7aUEnk_o?{t!qIH8t?=Oa;FBmU0hTNaJKgUkXMC?gF2oBCuNnz)#vinQ-A>W0* z3w*15SNJaSZSY;}yTrHJcbRXE?{d7GaD(r9-$q}a@6rnNwF9T5#?R8Hz{|g?CQD;Y zHABsW(eZxQ{dj7oxKo7Y9_Aj2=ka9kQek*EdG8c8y?1%HiUjZd-UmfJ@1x#FMSbsf z?{?9^`-JyNk>Y*Y`;2Jh-QnFSQoXypFN&t#m%Oit7T(vqZ-_SDx4iF*Oz$V&e~E1G z=iZ-1j`vsZuXq9<_0{kdE%!dcSkIDa}? z4ORW|_F<0dsM@IJDpl22396>5qAKEatqW&yf5BUp603>gP*5W8xe!+D$#SQ+CkVID zd+vl>oP88$W$oC>zV}>}d=GTA2*IvIvOfYPp_P?xB!#DC8Ro zA$w}f1N!S=cPuQ9pR5MJHQ`lX2Ks~wue95#Ix5LX10Yt z)NBKPh}jzcU^4^$AhQ+Tm#ODVrTJ()1HXpxH2mtuQ}C-9Pr|QiJOTeK<8k;^jP39% z8;`+{HK4g*3w)GDx3LF%0t&V{Xd~F@9)|yd@eur72EGUY+uZ~3cN&=Ku;twce}{3e z&>-1+>`nOf4E7}y>}fB;f6CYm|49RS4|XfkHul5bp#w}_NwnLi7qH^F;I%8EA7Q}?r+E)1+e+&ehEl7YU%4mBG&Gimh<#0Fn> z*Z%>(8+@00lzX&$jD9t8wAI%k$MfW4Py8~(capDPh*OP9U*U!f^yTi?G0!i=`dfn) zcBT7Wq%C!0uRuTF{SN#K+|cTJdmXECU_|(OJADA+yU5qib-xCGnfn#^OWb?mpXYuP zJ-Q8Vn<)dfK=_;VThQ-YRTcdT{JKTQXfkdF>Q%-~I!2KDkd6`L{!)jH)woe#fV;F@ zzXqIExpAgWU+jjI#SFa{*8MknZi21%O?QlO$oP=&p4)gsr5Ilt2l+0#jn`EJ;|t>h zzMF1izdPFa+&I8@)or|{>KmUK@AKVt8?UNl<5S~3zRPao6|vCxm+>y&ZMU&cEHFMX z-r>7W`zGfa9~*D;-Peu1?n=f-##=NBXbgEadu|gNc049|<{=!8y_C7o75=>i<+@gN zB|Cts>{%LQId!b2p>3vQYYnutl3n!#n`*I^f#PhbWw*qVO`#8Lv1E<)+hfVLKsH&j z%934{EVI*LnI+pSS!ezBS+X{ejn=W!`fapirM;BiUxb~OEVX2-y%M%szqOX^wPdj+ zn=M&w$!<%QTe97f_4Y1UZ^?d37F@F7k`~boE?IZUz6%R4Y`j+$SSr{~Va32w5oqBJXWu33Zsj7D;lNVi?7~HD!v6CajcA<$ zTL)Q)$wmw-v12F3j%)tu4c`@o=Qo@c4V~j~RyFPezP0ZC`c|CjSmnE+(6$`@gop2X z{Y_X~Z>5zG#`oJ8|LBxadD>N4!b<-?X-7Bz z%j;VOn@^y^Bt!^grk zWIK8zSdZqy+H?VIMXA_#xgOS~Jgh&nup9F{zR$HA*7KRLoxh7*2Ve(Z0W0_+Seoej zT$i)WdoA0%uV8EUm9TaHf|Eo?VCh~D`%o0Vt7X8FeIqQ{@%V~X9hoj3fCZ?7cusc0 zdw%<1_ZceQhQ(*JI3UN$N%%I_6gf|PK^7hHA6RtG!zrZmu|IYc@560`CHxk=+g6$0 zGlSjx8@Oup{uZp?zrdPYgKWvNF4-+)5>6{^mdWY?^?KsZqD;qndzftIn&p}$o6|`r*#fKPin0|} z;2mTJR^h#6Yplf2mTl+^lx*u>?p`i4u?xFfb|6c(?C3u1J}f(tJzHi0*T7D$zpTG3 z2kNirugF34&b1tD3^#_$A+(a0L-AxfB!_$M@Z2FM0+Gy+lVGiyBWHNe_nt3jlPz4% zf!*poIoJ1@>6M$zBr{3AV5XUAayQw?<%?t^S6Q%;A5xvo!{%Ytr9!O=wNws2(?tAu zJlW_Br~mJ)3iU90;@G8#i5yPE4tEY#!P&?chY?W&JKuQwJ%mfaReyRnjIRDzKPThV zbRCSJYOq%J#hSSXMqejfNyhj}79DUk9ahY~7+Z7ko^c|6cLT-Yyw+UN8QeO7GLe=F z>t+r{?R-!d#G4`|73G_Y$@n!A1e;?7$1zbmsU_9er+2F3(1MHM*WeUNC#&gP zP!(M5j4&D3=V2U=LVfghwBsh?N}YVy7i}e13q7IlZ24Ur!j}1N7`Lf2I6AIBdO=^& zBA1iznsFbRq95d_&Garex#4Iz?QV81pk$N}q*};P3s&Dc;8#c)9Iu9Jfz$#VTjI|3 zMZHC74QxY0Aj=%cbUyA%mjGIY)L!Ue`vO{k*0e_}@XdvMqN^POTrKoFkkWBy9BRp} zpq3P+EHMpteK_Cw=D7QQ8jO3;5B;BrI`Ne$<~oYoI2n0cq0Y|O10Dn&vJiJ}6z<_V z?2TWAx6#L=L?hhE_K-y)?sqcxc_>C#4{%9FN@Jv_bDeXc_qyQvFi5cz`aT{~%EU74sY_y(vRs0)a`9xw!Xi4)aJ z&f)5WG$RXL7qlb`Wog`3Lu@qW;vC4UBU;}d?LQBarEeV!hZM)5z1QN7TeuJHaA!wj zG|Ymm8j9ISAzF#w$rvdkAoVPi?SQge7tSVlG0K`^l%zrOgHgwLu|ev%4;kp?DoA88 z_%B0CCUL*%w8eOEssZja2b-hbVURP?TGTZTPt8?mYZh9Wg<4kPei8MB{4a$Bmf^dS zI_l5CS&Z4p(G9<2aMhXLG{$KTpOa5iirSKhmUYB6BARhY`IG=jwn4xAMAGQZGMI?^ zs6Xc;oQtv89D1MyTs=r^98P%jg3Rbk5nXV{x}mnA=-(PVi=B2v8W!rCK;2UqcXW)S zB|?RCcZ12%40P9n$*&!&q2<`xMMTXyTKR% zJ@9K1W=8^kw}&LphJ;2SZ;q&q{E6T?38Q=x$|qpn55{OpKs*s{E?N_ZH?BtG4q~^H zpCzxZQPDpyxbLy?rlfclCF5T^FsF^f0>0L)UbhrIn>B<_6PSUPU zDM#kPvURktQ_}$OBYjVOT8z;^av>g6-l@q6NtOdJ&PL+tR|TuUM3l=xnKZc0xY7vy z7z#PGhTjibmZa4IQX>sR-;pHQlf2WxI}@^NgIwuodl%+Q&#`Qj7>^nTLsRsF*64yU z*b8#*io4Sk`mh`NPd(_y)CXg>Hd>p8ynZ(sTuBoSL>s4p>lj?igq-H!{*mj9KEw()+`LO?_L3aw`zScONjLNCQ!8TcOp>c_#Ehi5}3${_mrtpua6yN7Tg1 zr77PN+|>VZGl{Ea6Wb@cH5h=CL`U@0#qp-7w-vW09ks{cS~h;w zMH;?+gjfUcBN@_o$mY?~4btz2SPoi|hFO+|zR`C|uS8B-%Z$KvI=9vpBVhsJy}4Wt zQs@apnyMSPr6KnS^nV$yci=pu(Yof4awC+auaHtJTcM9se_P~fi}q*1kvs-NdV|om zOh|x6W)|}0pkxE|b^v%cLJJ%sE$&}I(JCqxQX=h<%Cp3oX-?P{b<>QbSrtsqY@~VY zP|;OX7qr7qfh#GBJG0OU>0}>~Gozg_a6RS3oi&vcI(lsCo3ZEtn2-$v~ni-)2M9^KMpndpZs(2w4pq-%80|b>55v2 zBe~ufA%js{GRnk3W@Nu_j(pwFiuo87T~U@=RS!?_o_Jc0!01mwS}n+>8&dpS;xWGC zIX)k)Y7O%LqN_BcoqTa(3N*+Fl(aBn#$mKwf;Gtq)H4mMgLRnsagfOzXvz&z!`iMl zMhdMShob&Es51%rs5R2M;?B^MGX)_b<)LUl>5LxGE~N3B0ADvp`UJ#lKqeEQ9eN<8 zmBbq=(!^{|0~gXR9Wj;$uuh$haT$-^4MJKS$ZlA^G&_T1I(pt65*mtYJ!Qihj{os+yp7`s!2_j7K`xnhtsQ!67gDabs!a5(~f{m zcN$WgUIm|L_eZ6ba6T8;~2Y&1BI#(e7ngb;&v zwZJNA2F5@ml=0x{nhcIPc&}_Ae81#+BAkxiIBpZQ^jk_L@7_BwBqINnz9fy(G9w|-HvLWc%F#KxI`8y({70L*tXF-lFF{f#L zn1wM>9oJ|DGYs=42V*`Hxq34V2UmJ_($kY{+S!mEJ=fcy9DU`jC1RaIxaN?0ORV8Z z-ic^s9Q>xZk981Bf(C61KI9i7DLuI>e?#-b+DHH0P`K`yjAMfZ6qo)UhSin~?^xwBA)_KM;VlJu(O zyQQq#{e7!}7So&J_*w$?1<%3`VRejTT7}a5qum?2W29Y%U`~v|oucn5gmzQWt~Bgn zCSdNgLyU4&M(fgWzxyJEG!Q)#(;;E-o) zBAy0=F*|8rv>!%LE5urH*cK@{n5lD+pOEHg==1iN_c^#u?eY7BpLOsdOwk-y=}G5b zk~caXoxfc}?;5gG68~ofHLQc>g&lO> zbz&{v{BhBni0tTn#Uap@$tG7{*6s`GarA8;qM`C3* z2J4>jDBl?=9r&r1g_JoMS$&Y^UnBe1r?i3_g|dWIPF$UrloBjiXWbuJ=x;}Ozi?gd zj}fjeTvdmT1(zxQ_w}%jhH^BALb=7jo1t82iIyb26R)3<(T%Z<#Q@Ay-yNNAJ?48rQsTV^l6@4d_-bUSs_fR+CjgLFU-S|fIgE)8a6yD^2 zNxE@`&R~hBpL_kl2Ooa&+2>#W`|EGMJN*5Be*EuGKmYRUk>8H~e(X5jKGj@NZr$*B zeWqnss8}gFCbn{wv#M6BUZZAQe68Ab66z+_OG>WaAf;iW#;Ivdnx;2v-lAozjMi=1 zwrii+p<}14&e>gZx_0Z{qi3()efsu0yZ?ZJg9Z;7I&Aoek)uYB89Q$Lgo%?TPnkCT zoEbA`&7L!N-hxGomn>a&?(*}__jit-I^0h9I9)Gl&R>A9H{ox|)F})23Q53ZIneuK z_{Bv?N{GAZjYj{wV1#_4keVpe;we)XP_bzX#?6qeaNUbLM3^1#7a&>Tq~JOPPxyI& zQB(Zqko;E2W@>0byanf>Hw%@_K&sPHVovd>XT&octvopTUnyIYKjgOgb5%q=5^chN z8{qb!#)4XLLDDy$q=wZkjad$5e__}WfJp$S&@p`c z58tT5n;*iv473%5zWbVhE&=Vv%|;m${V-R6?!-%gE>H?62Q(Fg`mH<=+GM>7`cw$p z0O6Yb6ka4myuxS@cvnEXDvkv~CKZvlQWa1S&`8jB5bBQ32H|=%;xTAP%(b95Fq|Nl zShO=1ZHV0~MCDiz+E#fz=ynkLQl(8kp}r~)3LLlvtpsfYp}wj!KxjubH)tYg9SHoY zJuGls7X%qq9|&3kdP0aAxK}l@Kx;s_&o$7W8b^evnE*nYYpw>pCqx|b#6h0%Xit1M z&~OmyieCXj9r2q%Z-G7s{USsyF9^JA;ojClpK3wAwa}hgi$JKi7I@YA2=s#xwOybp zp!%RbphrNvL8!O(*C6z}PDM~Z&^w?nL8v3a096H{TtWtDKj;$>c-B>*Xix$u9h3#? z4;l{w-@0Fcj$rblor%>!DWEo>IUrn5#Pvj6uZQdPaJ?R`*INs^5p*vIa;o<#2z{t` zSYWb)P+t=2OKJ|v1`P&H1}y=t2IUEnj5a5uugQ>G@;cD1pa(%aKyQFP1^p;Q{aK)u zAmpjP8H7CbcY=_oK4e_~Cm|ZRLF+-cgCMg8XmbkWkkSJ*9EAImvK(|J=w=Ywoq~3! zpxr5GcM96wP=V0yh6$i_&{WVe5c=8>eQmfEbU=tksH+iV-3W4MG!TS5jgY4i@-#x8 zMo)nDfewPc6{2wt2-g~;&c>*-G3soLIvf8WL@Me`?GJhfgf^!h5hBeCst#%dY6t2A z8V#BQf*jJ;fo=so2-*SK5BdZISvBbeng`kr+6y`WLK~VK6QXHFP;F2;C<}zPH=PJV zo0{$ep-oK>3w-n#6b(uQwFII4=|e$~M>_hNz6J#T&A_V}`qexW)DJWkgu0ur0<8ya z2H_sHaDmXD7Ck_7K#)<3Plafi1Onfdvp~0l9tQ0Mp-fA<{-Y4BT%cG`BB(hC?QVs- zTA?kit_R%-dKk1rhzztj18vGk1q}vG1fe|{*MiWNj3+>QK#)ai6NEOkUIkhQg8bW{ zuWh=4hJ&VqmVwaMHmIk~79rYJ1YHE$j^{ud(5(WWKnHaMfk%7Du{~s-iFRhL1>tuG z@aurKbU+(Ad?iH3EYNb$4k0?Bt({hYP$nxA)CV*g1bJj3J?lyk>c~1KL}%39c`OKd zJ0BDxyCx_F1UYBFB}A91ApGvq4m1)p9dtYBs1P}^Ae7Bn33@_^uC+k}L6A>Zw7V<% z-VL(rmJV7D$_4EcqC3iUPXNsUy$V7*dc=d!pB{@qH-b>MC(8Eh0mAQ|UkT9*_qEq0 zpr3^3-3x?zdT#|C#p0?R2>JT#2Yn($UzF_&dH02U`aTRo9sSUkeoH`4fZh_~Y_#F* zHK1)E)Yl(n`lo}2g4Tof3o*a|^#|PrLK_Ag5n|wE5ZXC#hY*9%ra^;2Ye9JeTN0og z(DfkP+risG?}2_2Vn{S75!4)nJVTIq$W+i05ZW;W<%gg@L!JWd0UZDx5n^afP%5Yo zXgTO!5c)9mpb*2Vg4%&_ZP=F}z~#z#Q7zvF^w3(|Ii-T-|9`ca7S zE>J88Z5xmJ$D{5EwLud>+dz=Tgae?jK}Us{i1dlOgqVaflSYD`5Mpw55aN?>1R>v) zOwc+I>X_ONg#J%MXQrbs(_4bFLAXBspb+OIfo6gJpS?E^jH)~r|KD?FpUg}qlbK{P z+4p^42q7#|1jMz7h=>#^rPgw(_3O2kQkn^fij-@ur52G|Yps`BYQ2_POQ}^Z_2R}R zAWPUo_H~lXWF|Ae&&f<8gxlWx`~Cj?j(*6TbKduPp7(i|^KR!1>H8+;`<{wgA`No8YhzjmU1y0esvz8y3L>K%B-6@Ep7X0U_2KAqk3L8r%lU;30TN zhz(jm-Ujk)19~^0X9IR`SOsg~Nq8P!110DfYhw&cM^A^yz{LH3tr*{A?lY7h>BoXcFQD zYn^GdxdzB?=Q9pv128i6yoQ|`8oEyMEqamz(KeK*!D8% zewj4BOj=&9gIiz;kfxW{!4|;2mv_NlA%02NUy{~elGb0o0=r?q5U*!Jq9fK9LBk6%9kuL|*+8s-5yU&H2qUj**~Ht$RUY}<() zznKB}`qe>?;qKv0OcmIAWhLf0SA^#}a%huyGGh}{-g3*iGEg4=lmQhm6XwHmcm%NJPg?;W{poGM zmOqi6KjEWy?tuM5{J9p8y9eLwIVQwk=E6rp?5%-=%t9dhuP+0({}o%`%>v}Ti@bM{ z_b&3@B~9-Jg!r2Y(g0ijHVYQO3c!}XZ2)Zf8*%^ECB%Ev02|(01`k6cJO{79Zoszp zPCyF`3-P`Y@Xh;0K-~B7;rqmW{~;jm`_BS#-^b4PiTgfjd7rrNdxhAy1m1& z%mC81e>ULfzpKFpSx^PDU;!Kz;sfG-fWQCi0ayc@pihVc%i$5&0H=lckZ>RF6XK(V zfPX(ugNFgV9~1u*0hdq66ymT82zU53_(+H=MM z&IxgJF67&VOP@zAb*q^)mQhprg^z?}l>uGW20%{CEO<*uHuTu)0Gn((;i!;enSqWaj2+o_{Ni{9f;Gnc>zLdv=W(3?FEh?j#cIS&BWa;xBZI4z{S`S7lg z@>77g`P+n4K;9J8!$YtG_5*qg@lD|dz{W!SRWuDY0dk6qfcV8PfmcW+kH8)wmD&MY zN|94~kO|y0xCK_j>tb{|w;UVGkyE}M@Cox967w5U`8nWS3KiH>;e-OH2jW+ts{$Dn z4RAq7l`G*<*a!!NR8<4`xatykgv6YNR2>I-fQ;(fU>Q)Zs!3DzbMPv>4fv?~1hhdw zNHr!%f)bbk_^f6Hke*4Lo5Z9kT(f=lePl#ChZ37nbZV5LaHSnnD>xsGoT7) z!2&>D?W2JGwZyF@ZY{Rd61SFoti_heYlT#2hj)cE6q0F;TT_-E=8 zz&}&h!4|;(Q{RMra12^tSV+^1-~!@KBi+-9H$xA|oIyU!AdNHd?+lNSZcqdIZ^(gK zm?byQazesni1bqKxeDLMXur0y?{*w0j^WZr^-<{ZSCpIykBHf7{3ku)?Al?G} zc9#k8@m+*pXb0?ANce?s3+e78sD}sPdDuSz>|T@tMORVBcl@zv6X4fH$XRq+NcRXp z_dN@M^xv~bNQ=?8cq4d)bT4+^`<9TFSb_8|A?|%fSPVynv{Vl>;DC_6G7Vl9(lQyc zU^Z-kgF?C=oA1Y-`?34}TL4-2MtT44ojft`R2k1he^Ke`W&!X@ws z={st$Ll)Eke*VrPAZ_1S3&{8ma=-JYkRCHZ3X}l$KGp!w!YhCckL`nF&?2PoV)u6m z_uXl58>|N8eHZ)IV9S~=2ngwWod4biK>qhW5z<=Hzjg&|7t;6B06(qEf=A$>kba;A z^6Cedgw%lS27KRuzuj@LMo7$)NR9i1#Jq>J{#_w$s0ZY3xFDp*vHkJIumko0wr(VE zHogIbeIf%W4^MLL$qhn!ihOwr9Zzimu5ZFOn+W?fzJ7Wxkmk+Uwiz2Xldd1ypb^lw z1)pwN4i|*i|8^llJEygf*}Uw!uz#2Mz%C z{fs>R*-V%ZE8tPs2wUMb*bN^*6OiU@q<>o#Y=)z72?mAq0%?1}33-66FJRLPyI>ET zh7Je_X*>G1CqWU^!!57`Rsl9{KM5T`+Fry5FQx(Zy@*{eV%LkW!ydpFFP;Nz+JV1z zkQX~L0NZxp%N+{=f9@d7JFtJp2_Wpx@%7IM^YhuT2sXezA-%-;m(ceT`d%snbiK3{ zE5dRm%|HXbl_Agq5^zvLl-pk1Qr4tsw3c&VXBJY>v*)K`gE9iLz zJ+D;2EO;6ALNj=U^ea8M;5Jwat6?2%fgP|52>)sdl)yAt3Cg)opb5GlD5PI!!EC@E z%;!kIehi+3*WhiS9Q^vUkX|!F9V~@4@D?EB-%0boZ-D2ZMMyibcjueH_umu%*Iti< z2VobW^S6uPCBTkd$lOKRcbx#z_B-52c}KnZI1ENhl^mJ zkUm1zKZNvr^ue`!OgcZ_CZtcui%;$Ve8}95^l1saCM4!;q=T=AIb;;lp=W{g9wuE! z@Z*t9K=`8%0Cs$~@G7w9*gQBXq~j05ppZ@w{=@+xeO>|h^7Gw7I++FJ)5#_woth0> zfIK~o?$a9~D5NvUJ+lIk)ifUn--O0BBh`yBDkaqheYRs(6cU;UZUz!x1Kz%jT4*x4xnJ33PUKX%Rp z{M<=icCLjj@DgBS=RP2A*9=$<+X36U&Oty(-A*8W_Z{#Mpt}bfdyv=jijaD*;RSOBDF;4moH2s_C6QIIpZ z1XjTscoGOZNZ7$kLK?!)L-=@Tr;xnJ^v(tRb4 zd>`%-lArJX`G7C{$PM7bz%(FEUv%_=j(EC7u=4){yd6-F&HPpv@0k;_VGZ!t$a@Ek{Ebq>Vt8A~CUlv$0)8?R$D9Ma zh0i=62y1>F-V?F~TP@gcxd6jqqHhy&H1nb6~%!57fk&ta!K-z5h%Z8p< z^u<0HVK;vRLblHZbUE;s<4rgy(M7onm_b9deCGDe-mSo~3uljFT%eg)O4Wu{uYOp;8+f%SP zB@LDX_NDBE{m^t3Jwi^Efv~ALPz4(S`_rsY1he3Ipj}C85pp{Ar4w$H)%?Y-bbOYv z3^oA1&vXK9Rp#5!1wkQak>0GO@D5-Hdlcnt{FwbL5GDuT<{&SpS;)DB%|&kRyWkOW z-aH`f`Eh`reEh>)wVeL}bVNX20cj|B1P%+iFb!(pLD&vlFG>P*7LmrHSKu6Yghwd$RK9o72* z|JIWs#AWhRl>Wv~v2dn@{G4GQ_TI%ouB-G+U)>#w4Q@0;Kp5cUr2y92-7fxJ783i-?PU^g6u z4k6E92K%mpF!L|Lppe-oC*O%r?<|6uun6$)ouundbli#0?!?!3?gixCc>z2^UZ4dh zl)x-l0Hlfib@GBIVH*%{!5;VsPD2M^?_E~NfGWV&yRh%BhoAwTftTSez#n&=fHnvS zd7%yRpcdxB5+L5f4e&hdf_-olE&=JgTMyWIH}USqr+421OM!TIqwj9?-Te~00mQu< zeRq>jcVp)w3#0-0y$IhdBHtFR0MfYVNg$1jh_?tk7afCUK<7Q^ya%7&Qv}oC4p(a&e!K@0B4Ah;uJ` z?j_E>D`5>h3p?R$Auq83zFM*tP73)x?79zo?t2(E0AcUL2lwH>``W-OuVvtSXd0`z}nGi-;~VGn!+#QjQ-ke893 zWp>DcT0rMAbS}frW%zs9HrNU80P&U)ZyE9KC*J)wK%@xEFQcfc|r-dFL@ zSD%5G;0<^eD3f2k1Rf!;(1H^RfVeBrxq@`ASOsfgGi(R+t|0CT>|H_J6<#5K%>+qM z1odzWEP++97SQ`O^nMM!Un8wwL+{s`fw(J)yD|;RUTt1^oC;kTPub9kQ!bV^0%@5+Y5m- zf15n|HetU_*l#17^$Ypo4A=s12>Jh{0CxNzzCTh0=zIiU{_Ao;?xQmSTOK9Mqq|@a zc!d0&`GBnN1cdw;x*sDQkD==^((xGfKXw9|fw1453)u7B74Qt~fY*We-#rb3LSBRI zYivN+HH2M5*fr>1gFW9%g2!MZY=u|hE!YP~;R5tPP{?ad-~!^WB_Gx{0BK#j9q{j3 z{IzyJ5N|E<))H?m@xD*I?-TF)1yBd`U@<%hYhV*>gPrgW9DtM10@%L}``2Orx-=+( zdYA``U?n^P_-7sIUq|}ak^XhaSw|Yzk;ZkGz$4@zAm;~m$bu@E1q)yWJOUfwId}!$ zgm(cy{s2Gzpbfl2ZqR}qGN25m!7Z>D9)vZp37!Xh+3*&;2M3`EI$&7HZau_77E}P` z%6%Iw0pz$JgN=Ya?w8>W*b5&4_PCMb4hXr?2u{d>Dwqj(z*1NR*wgqVkhhK4)3_V< z1Ab|2hCv~(*FqfRKn=`>g|HGHg^jQkUWMJTAC5sY3<`OJ7UCcWYG5`jgq83pY=o`w zD(r^+a15GZP{@yKAr5k&24=%TSP759M%W6k!P{^E@WJEw;PIf4H(G$Qu@OIRB>fxb z19`fUxEnXaORyV0f(zgk@)P*&i6o#rJuwaN{S)}?iH8AwPi%u-un$f`kC30#0&$*1 z&y%xZA*=-Q>d8&89fpi9V439tcq{ZtLi19UyL8rH!U*a776Q}4l1Xa?-u zgq@qvxv2zZ!D1j^HxX~sGw>?xfy2-OK_NeFha9K{bUjU+ryqp1fUc)sfwzFPJ$(#_ z_w=xkH=6)mn~Pu?P>wb)heu!&;K$AQaWj70j2|~+-w(0xhs60I_Wh7JKfDc=0e<`; z%*bk?nPssnKhZLxSd9V~#LnCa3 zov;^Lw!q7<8%WDD7l5?<$O2hV2e$z_endKcv=KiLSffASox4}}tuC3U$l{i~>0lKz&g#1%A*dYgy|5Nht zr-c9MDp&*L$xpY!tMC@=1MK-JI)B;)K_NeHffOhKeD^%QdwwN63dDb&_|LxrZwmQm zPM8n)^Jk=gn+%-WM!ao{fbiR%hhxwo7G$1cuSPZ25g+U>2=lu2!uvf@0 zBIm_CsD-(JycbEwi;aN(7xzPxkau7wYoGGZ^?*NK;_pkVfwJ%mbo~O~zia~ReEA`G zN65beZNdj`A?!$RJ<5xDjn zuKi{id?Mu6(aAn=`Smw}H2sz|{&p82a~JmS!cV`;1H$~SL&$I30oeG)K_UMhn|{9< zUINng<|EJ}>tqehYtXKyJx~~A^-7VAU$u_0D9l% z`k!XNej&e;1YCdTfRO(j2iW{)!u=V!drDwAJS6156alvFB`@|q28V_G*Jp(Mt_;Ze zTNXSgf~qS*SI#-#^eedL~W?e&LMQ2}`mpsa1xYD>+?V zx|Ea=vmrHASY7EZs}zoF7D5<`ivxjq^IR@5$NltZ{8^k$)mt?hqq(&?&NTi0e6NZ z$!&v7+-vkvW_Ps3Y|=JeIDg)i;4rBK%B_isW_hT+`SSU5EdwKlgw)jaqp7$bz11p1 zLPCN`6+me~9qn?tqSd~Rjt<|XNoMn`d5ae>zGc?bl9H188*jh&-g|Gqv97qdxK8my z)R{9KAzONSx-HakW_`T!v-e}4vu8VnJtHH-F1pT!HT?ih)3nBTf~TdoU%qfYGs_ig zKhozJ);SEr{r&x&7fv5PhY5pnFgmxYs;VFm=LP}tnjp^yj#y?y;T z`I#v8oe4VgifoJM&5s*O-oN392kgE^R72pc8^}yDd>K6VcATf3Ui%r^rIe8ja<;xt#=!C?s)Cb zfBE~~_y2nK@lhM65h^*>>+R`jId|^dkj@qx)79G_vN>EyNlA%z(~URAu6J9~oUWLW zo^v06{PBk$boKfg4SwIq@UU;7qO>$(@iOF;*lgw~lgUJ7u;^7{*ykG_>bv;qr=Ond zZXX_Q?`t`6;zYN{8`N3{hlfSbw%(}Is%0Tb8jVKPn4}UV#gybk(@1w)TU%^wtkK)i zbnxK8PY#_>s~bgBL{kNt;#3aD@#BHOWrss`oDYJJpE^-^e7)4y=eG6rSpxy5^NnBs z=B?eo{q5^-{?_S?#J!QY=?O7W%17n%4)*o+d-~fyCtYWHdq+au-6m6BQBlHrt<7eO zj?$|(SV}9(%F1%>y1@$VpSkV{PHmS|>yjzp<&5z|kxk{fF#Q@s=h^q*_Ys z=!uH55*~N*c8rvS7@O4+)!*HE#F(Fz7~~TYhYuY**wkmR*_0+kBZ*LH;ss;EXx_wN zt@g?%-Q8Ae78(y7a`T+R=#}qsrJkQ1j*gDD#mC23_!y+1pY-%~wOncI?(OaM$$5E> zU?-kA)2lVaW#&n-RG}2(Nbh;hb*@)RjXD_Qr5atYesro zE;qOLixVfV463ZoB&S6TUO5p?I}@QP$<&6?(n-lw%4gUK{HUB#O(a#a)zsJ3(b3h` zcJXY}+2)S6w$84u9?2~7^W&P1oM?0fM+(XCH1i-0OJ`^I(C|o5e0tfN6sx{Gno1T9 zSW6tOKPtS8TvNCfjaH>DvngDchO|RnSGpo~E=3578FQ3sgGp*Cjyb;|U*PM0$&_J| z#_Fv$q}6t}w1n%5P4TqO=hNvb_^q$*L1Rpt6c;HoJP|ArQf15x5f95S~nWU z_lXk8w_Y13x5XF-yCZS#Lte2`f4Qd(4i0MKQ=HL0*`An9VXCSwud1r7td!O2*yNn* z>gt^2ST*(EnwOcDlwdQ8!OKVZeC+Wz#s`CnFZH&htkhHzo6ddDfR_#7JlKhr=|-bo ztC9`!uy1f!8Y1I8A%iK#;fQlM9J=6OdvkMhZy+FB;<$C#jcSQoh~1! z*t7tgtWzZhddrnKp*i;J~rFC%tiCWrQ2&VGg6Zh zlbjBFg+^4U=v_rA zS$woUO%4C4-RdKbD<$Dl$^C8op5#+isjE`lsw2+!NJ*cI#>~TmgWiFDuYY7@BrqaI zM5x;nQpcA~nKGq7+w%FoJ$nv|fLrBs(txV{!xWuHTQGR!$RX|$-9d8}Nh-=8_sBK& zT&(fcTugH|h%0Up7rx7l-chD_y?(#fJ7r33E$@7HyHy#J4m7z{O$R1rgj3}b!W2cX zEz%rFswk~mrIv$1j4G>(>S*J}l94YmO`dQn(@BT5xV^Zh#^= z*}He|>)T#fFXiU0*SxUpw}0KcH{6aYrO{D;xk&jaQSUJ5^#-V?IJz|-e)#U6_x^3Y zrndH`n`hkc#r-lPI@)TDQcD59QdB}}vn{&5zBEqVe~KGPyE={+U>MySHS~tKw>@sQ z=1@d)tfH07Kh+y4FUnoa8SkJ}yAo3~Dl0u6S7l|2`pW6kr+vcecI*6u{avkBu3Tv} z96acBI<3;cxv{c#D{*t9qn&wW6#5_BG_62FIjw+B zQfno@-)J)Unz;LaaHK;rX%tsUdW}9_9t>&X3Y2PFm=b3)P(5UwUe)N3wT2mW^b2zx zdNJ75cKK}6rS`r+qct%2F~#-J=PkVf18tB&7tzMkU)*Aqx}$D4mYs)OQSq;4oZ zKSye+%Vt*l{r=k8+Dy|(+xhe7Q$>RNDV-~UI+&H<3g>7lVXYO@`o)yA1ZQGGe1bE^ zOTpftPp>RVNlPiNNDY^jy9ifUQP&z9m*9+#i?i8cy0H!MpiaqG4Hp-_MS{{BeL=pw!02I=fs>>mxEs8~K@)-87~SWu9c z8mnnk(x-GD=zWAj8%M+3O_+jYrJdE0YksBw$cL_JPfsw)YB6|4v@VO*nqCa|Ig#U5 zMMZJ5QYrnY#zd9gWQ(!cRK1rjUAlb9V2T>@>Fg=Fxw-b?p|JOqdZX0EipmOxWK^oe zw5;5U%CdZqr&60xq!h_?ZTHEOCwoMU+oX@O7>!0ciaM=^pT8X$8d`5YefmnsDmy7Y ziMrm?VW~5ani{2|P4os0*7&si_!zq_y?oN7N#&Uidva!Gij5p}yCk(nXF#G({`^c+ zQ&Wpi6P-zSw{o&cw;}A)QTtl^5!Bz=cKO1&vuF4uC-n9si|r4CS6Fe zS09^QQ#&x=*NJpDsWnHbdwR^-+1WXHYPr!I6dJR|c;!kcI$G|z5|%cJ)Vj))wpycM zXc5wzoCU=x$*GBX*i}aHk(!#^+NP!voi#?^XdLk$Idb^$;VUFO9RHidukPr%a^b>7 z8XAX|X0Ef-)7jguq_yd6)5Z2S50(wYBp2hsOq-5zvC@UnkYt4DOeUjIgK?H%2?!=EN$5d99S5}o3 z7Gz}?6tuM^R(jGbvx{w(Xfv5^H0Z>Y)8W|&Mq?tTs%l`so~{%TyPhtco)IdoyvgWv z+O4m4g>)PhjdX{V|6^@-t*jChx5~=Ww81nQ*TKB?(Pd?&W%R+K zgxzWP4frCpwE(S-Nt3E8%d0C&E7I=2|0~ILlP39myg}R@HMt<&;Ydt~OE4PgUR=EV zM7RWThZGu`?Mjgs89&piC%Q)a&|!19ThL;TTBZCeyYh=F7~coeD)~35u+o!Wke{1h zT2xk+pXb8g;_~Iwr!R=hmrkE;6GpRNe$4N$053BmXMtVo( zva$=ym3r>Ut*j`itQ@#_@?=+xnj)o9H`+q}p+WzEFjB@e+VXU>|8zK&+^e1O;qt?< zPLUQF@+oPKr!F_0Z}ECtFH)qbCzMvdb<(7mhB#@2849oQT(aC*xb_6GAJ2r%3Unxs(M~jUOjz!b%xcTjOlbblYRR1sZ*yx~ZvOR;i4}rY3W0X*hm0HYOAnhI}60A2}EZ&=td;Y=>@u$t#hj z)EyNqR;bY|sjwouQ0ap4;kDA)*qO8o!3|EXP`b)Y{ZE;aP?#;={N=ue*%+JY4rMXFRB}C7et`@W1 z1K0So z(MF>xI-{IqIAo*IX;y8}b5AKRuPiUohW&TV-8^;Zh$nege1j(Sl(D@mQupSgDOcOo zMq@NM;OST1)5)i$U8}XY()c7LCMGI>6Qi}l;%=~pd|j31mF^dV)guZxzVfAnuquTRTTl0_#r z(UqWl%gNNEO_!6C9AmZ^WVbFj)YsQ};p9nov@Ryz5)TIx2H(iuz(26J=!ghq;ZeKk_6L!se8pVe$s z1%|piTew@$1q!L8md>7`0FV1yeS^MGMut-t=sm~8*SX$+&Y7WfvMK_e-gb?SaaK^) zYPxzoexbHl9RVLx2(o`D;ILXWA}WbqKvI+#xJVb_;y^?%Jz%93S1b*G_}XCpBq|}0 z7)ZRVx~ys*;K!l3{r1cJ2(8?2G=}?hwB?cUSWI_Jw`!y#HC$GnB^}efUh)@oazc1 zT;j4@7Z~s`m>cjm)&+cL&od_K85qJRYKGwqkTqI8t)M?BB{GpW&|rouKphJ zl~NBHG)#UD2ZGzU6UduvLEius!ZU=!4a)Q88rb}7qq6PraEKQoDxpA z+dSCa(-ZK}JMJAE4oQu6PY1qfX&xRCeSL#Ll}@Kq4UhH7sbwNM7*$(e8x<_8e{l7K z^=0B4ZnH6sH~9`4BYz@k9G}hBU-HSmE?c-|W0i(q;|sdOZSKt+F~)mB_%|rY+w_lJ z(I7J)w2`p?_D@_eTAOKg#1n2QJw0N_Xv-iZWsZ?@8J+=@ql1Co!9Y+KrR(eHH(HGW z)%o*1ez(Ejb6I`m%$Xi_*jmOXdfixo*7<(U z8nKivZG0>@RfE|k)2Xq<#>bnO*B{my%oI1BRiwDx2AMvMV3sQ2Z%mNYnPh5ev}TBW zWb7OqXl49z<#Hep_Oo)=(JZ)aW_4kKTgxrl!Otc!a8f$^N?W-xoLXfTKP5juIOy?8 z=J=G7(LRpS53H=rbZGiW9g3A(uEYd$qk1G540szcGpAtewi}ki3=r#XI2+MANoBB& zn1+Tzv}C>p(G=-pGPglA~B}i!#a7Y_&RIOLirti5$0NE(S^bKK8V&F5{rka>KKl66!_8qYq$w?w z(&qvd{(9)23_|LC7cdAkW~a#IG==F&y!=%7|zmLjpB-ac(5Wr0s%M7D{T z>}>C?x6Y}rW*KefEqC8{->f-bzIVy;<;%bR-~%(nM%A~zCBE)nZ`}X>e;qy+k^YYh zVPxdkh@R<=&iLsRrR3y9XR?_B5}(BMYb*}4#ibPFCo$M{(Z$JeIy3pC$H%9p#?2W0 zRMO({QKhDf8Scju)Y`0c+G>;B$0%E`*ULj~moHy#p-46wq!E>to8(}?@4i0C;WDJ8 zxtI=mUT%Rh2+obO*psUYT`@Xx+2{59yfj}0`S~uZmV&}^SU!Ws!iy~(-Tgk<6qn0= zbn-N(jds*RXU}9%4fnKkbol$YOZWNdsT&Hu;#Hdq3g~Bt~+D7?o9M` zX9&|3mRv}h9CK~9q-j#u+_|^ke$!32-#)j@X0wPnOjLgS@%pGEM;wkTSClD~Pd^Rk zy;4saV-I;;w&KSqfOvSzwWvW`4 zwbu9a4ABCaOG+fEq{PW*jM5fHwaW2Qo3MwjgdCyuQBu2z3$^kavTc$pQZBwisPga( zttsA>VpIibf0?C~0>d7CbWHTeA7801wkwmh_4Va>XD$tmP1qW|J^ge`0`!C$6LnGA z5$-tR_`bA!T2ZENt@-6=j)kXiugTA22@}(K{JJwO*PR);?u=YNCP(R`xVV*M^~5M>qXs;ZcZDo|RL;9Fuxv z$kXp@EL0gRwpeRSjMJyIgDnP}ZgONK7`?-?C4mlgO4RUBOH0UNk$NKSemJE;=KZcs zdHOZS{mi;ueZ70au{_~;ggK|H!}}&24@@{#=BUEqzlEo2qPXp9tQi@pH0}o9s0$7c4GnllM%FtsY$j!TlaEf@ zgV8-It&1i-*M7CdwsDPP?YnXO?ieoH@_4Nr3n5Pk;TsPTj$x#VU7hRF`1LUfr^Z|Q zaEw+lR)5Aq9G?)P`MMA%CWN?hU5Ni##wB^IC016nD(|}e*4u8$&Q>OuGVW^aqaUYC z&!3+#J@38D#NQXw^Qw?vXxxm7q{sgk6ZPRS{bs7tCZbFEG@%CvfMAL*2J>wz9a#S5D1K%cf zlbp^tTa1%w0V_*|toBGzNlA&$$Xdmu$XZ3*7i$&OtW^x_M4~%ubS^l`+{ONq4yK8M zA+}0|r0Z5NLSL+4NWGC2j4@k}Pq6ii)^|KaV5}U3t#79~g-h^Qh_e$y(11(`ab`k@ zj`0v-nI7hD!ZMXUygE0ZdhM>$u-PoPqx;%bl7Y_NHi|%Gl|)%48i+}{ew9RKyw=D( zHG;<%OlZ0O(SnKh+69wqd(th=F%OKTcpz=;481Y4X>5c&I&Wn13197nbXWR?+6%P_ zrjS$cUr02I_)ugt#!6(IgYo6)D2{*V53@$1Rz~-ZngA2TRg-EfONw*zi@Up{S!43$ zHt3={>arR9%Z-N6h-f-;UUaaIc})+jeY{T__Ni|CzBgvIZbAt4bsT6<@ilr0EhOchSmt$oi@0u9aaUJ37g{=I9Z78Cw*q1N- zN=kKkxzAT#UdC9m{-*iG1dxm)tiiRoY2dZiG)8&Flg8E!#w;Do9Md~?#+x^GCag&% zGOw}3#(Gj%bB>~UQh8}v37a}K?6H}o%rYb;5#fs_ZzE%f$jCH}@V2jg<-Vm$s;jFi zD=I3!7FnM9BJ|VO=B6Q2ip)5TS(o=UUb8WpuYM#((qA($|q&# zyES(d7}AO(>*>l^!7W)w+`6e#Q!A%V6{Q6G=s4q6RkHRxui(9=1o_8DFJn1zZI8vy zhLo#w-#mVY98eQqad$+5vY#o_5zVR=z3LcSlxcMDNo4m4dr#PX!oVbz zyJZZGTN~4qd`$9(AHMgO_di~Lqu9WIo5ZtXi(qs%JkZ?{>Gdmf(m6W)P=7!DF=jm5 z+I&W5xL2Q^TUc0JRG5{;@7*gNe)!>4tN3Tx zjZE$GC`LlwlsoR4R-KcY#q2>=+}Lgz>s7mDnwnDCsT|hwFj^+{)3jLZu2e?Y)i+di z=*n&qlR~VGv+|k{?{cs->R?#NZX;G(G@4nnW=*RuDba{Z_5>9tMcb9#ztKsBC2r}= z8Fzx&{PE#)J)W+UpRyz!ZDf(k$Y`GRYPDO-TCmlbm>6lpRtiy3KDsu@06W|uE4{aC zK8(IOr>p?cnIjN;Ys!^vT>zNp3w!DE&43bROhh^DD{2)S+`=(No zlw-+l$;~Y+Dl9Kw$j@9Z;>V_$FlK^L&FkN_QX^l(7L2dCWs1xOiQRIe{S!rs=BAsb z7H228jmgRBIawJwg@rV$a%w!gt71}9Q&Q8@)6>SD7)mC*E~StOvBDHvBa01F-BH(U zP#TrWnuxOE{>3g93{?r8+Z017i81L^DyzfciVkTk4vRq(Vwzhc43@A(rD%vsOG`;i zNaLRBw8u2+{2_BnN*Z^h7?XvXV2>Ldq;c_w0z(0y#;#c`3<_8kJ7Z&pW#}Dh2Z?<)6r^m|4-O39&jaYTXUI)OIxWsiWhTaBOpM$hthc##0)^ zk;qO6r8K#%r@oY)KIdc{n?Tsatk=_SH-ITwl$0Dea;CYf>-2ve2zxv%RUMHUKGI!t zRk(Fwqjr0<g(&KOrJS(=Jfh0_4O?6<#VUWHrE$BSnapv z*Hhtn#Zzc_$j1{eLK0e@KT{s;2@qKf7kzf@0{4;hf}(;nbEv23*k_SeKCE>?MC)kp zh}Ma%FMdB;>N8@rS~i_JSSw(fY1(AgAf~XXKERIx545}0mz1Svw>m#RIe5XX?(_~1 zMb@rIcQokO0W^Yf7PcKFuuNP~nwyrU)%sdk&S(zUi*A@bdv-mO_lz(b=#Z5bCPo?5 zjXISfDzT`%tjuk_p(fX%4P0d9*`M0m-qm(7yoWVe*=UuRhxF&JcyoZnou8G zgLJfY{KT>&o~GHAn4FT!(!NgF;Cq2Rn`xo`bDw?onMW9vQB015hcFx10K^KvT1}>} zSF72KuWC#Tj)=0d6sx+2tp&(4`g@c|Vovp$atg~LIvIfp2hSl+n_5?zlbvm5F|f3> zyt=MV892w-jmCf`xvH+N*u@A@$Htm)*?p8)b?o(L0zKesZ*A-3Ayu914_Q;q2DLFh zlN)zMd3sDNn_AN1^}{VJQnd^-E-PXpAlJcg!EFi#f^ul6uXn&Zq}Dd(=v4hjn;4Q_ z?C5Uq4rroXb`2Y5%F1%=hLQHB&re_I3}|Dr#;jg~{$hg$^#g1JW*#u8v6>RI;w|<> zySJ9+f$s z6`=ge@qO9Ktb5@Z9{)Svbn0ZMvUMkL^tXtjHm6%vsGYJJ1=>}VZl1I*1o-t^! zb9dKk)hrpP4fd2o+wr4^StD~>j|Yt0Ad|9+%1iT-s54FWH;klyZ6#1uRY6VQ+H4TJH}Sl*)J_@Id+-lGj`ig zo;0a;$`tmT-{^KnML8TsV@U}k-jb5YT{hfyER3`rN*yV6X?m_)X0NX~Cf4rE%B&yq z(g0XvSVD_&B&KE+mX_;nsrhA$GLn*_CGU`5GQ}lF zHp1|vP(w^)w@Y67cny49c}8h`KTP<(osZmD&9&8_w75vA1#H^9x)P|Qu=m}>n0`gs zMc91)Qa6QTu&cwveoQ_s7dy@$Id;kG&CYf?Q}Y<*<|oI+$2)U)0W|Jzx3CU6aMVOdi?N84Fm>oH4R- zzMzCAsiMlFkNEdiVrSC^4M|bf_=JRn;YswDm67JIgyPg&bVlu_afUa zn_7E)F@@xGfrDv1cSaPMrp&c8HJ!QG7tls&MQLf4JxXZ_nwr`}#@Ou0ZsRiKN_y4$ z7@e-TnCY{soaD4r7G`afEr%p&&DN$SWqY#DSwJRKO)_f7_FUEzGb!0+Rfh|ET}h&i z{rR5W9tt@gDWUOq(N$(ApV1i9r*JAWS{)*_%+NDQ6=^+{J6&EZJM)x;sbXX2%vpH< z^5x6#UpQw@Y;3l&xw|ZLPHjH9T{=hH<8IKa5ywt)jmGU#_P1+{2DXG1a7P@_#AX&0 z+6vu3d`)0mlg$SwzjE!HF_B<=V7CqYYV2}-o zVnn63OtIl;8Mi+2H!sO;LZfSkI-}{NuSf1+g#m2U_s-l(std&&;O{6Y= z6?x@sYaxfNT7UP64?p~H-={4jdPym*BWg(<8|?E-Hf7FIXxQ0$Cy z!?khtMePGX4#Zw|EvW#>#MO^to^f5bN|*D66kVJ1`Q>gN^yA zad~xh6{T*AGLE!p=(yNZ%(~Fk{p-3&n>KoPNs8AZK%)^O0XB*Alvq(w9PMxVSLY7G-tX+!}hJaTZOZ?a-l%Lv)X+c~tB4 z7{NqEq{b;bLz9&?2CuieI!$?(M{b7K%l48u!JK^1Q7y9EjgsB&)-d2TF^-SAbV(7C z95r9mUyopM)k(M@V7EM5PX-#z%&7P4GT{CNz@-&0;NWbCGp)N+DYPE{Z@^UNP zxkJZ>!oD0U8RjWtC1dQ&#bn7J_D}THBN>mcrn9h&QEC~>Kv(;(CgMM(os9ST5)*4` zlGE78laX4T7-HgkgcN1E8+C^cDZ9b6ympMlxHMf9-iSw(Rf}AYCnkl?MM7$Rej3j` zI%164a!oTPpXt+;m+M+jojTQLE?0`>HBVu?ZFqllTS!|QcQ3W);{U_hn?T2vX6Iq= z)n2dmeP2+80#E>|fIPw=3Isqlo2|zcz^nKE_5OGH z?suVmR-e1WRz(Kz1!k;jS0Tb>vtrd$FX%1sFG*?TT(GEEh^ibQP_1q214GNPSVw=G zwXMY^D>JUvI;us_wOyX7SQ@Lg-0m?_C%L3renC2Bn`sxl!GvISnXFdZxiimyMFHLF z=&|F^>Gda1c68L&Ghf9`l?=~jlsv24!oQVwr873$j5y1$;Ipk>BLtjOr%B^noL-m7 zmY2X5u?d6>ms420q`D*N&WSLN!$Y~fjjXgi(H3tDaQWGpX{h(*^yH;aKl$X-jXX41 z*myG{;%Hu+rQl@6(@0n zsMlZ@GA0b5{NUj5v0SdJ3$St-gf9AqK5Z&?_Gu9J2JATIh|dLpO^68)p0u~Gu2OvcUnF(YzB ziK|6Rws68R|LLdmh6Zte?6mCbXHvdLmVFyW!LhO7utNK>*vY{1s~$oL&sdVsc`lj? z>FN8}>P(gQ{Krvcu#czn~oc+{%} zS{?nv(rUvbwT1P|y!zbPgQ<>=?jtY1&Pxq!v8Jt@$J3%nrB*`fC_(IS;J~31XV0EJ zdF0>$gCWp4I5?Q}9qa-^*bzt`1k$+?r&YO9sz?<$c8SV|4!BaK>DH|W>9Q`+goI{Y zW$nSO+tocC!ShW8jw=jy`;6xfjGWWil7q}?Or2#KdFW-Hy`|#WmDMNA^;|AB8>z47 zWo@*Lg}D~yVQWi{oEXaUz&OTycFs(ane=+4WN8_?_xcvERG3LP`Lbd*v3{3iOs=&p z$AT9m?M!<$gLzM+XniA@NoG=sc3y#dnD*-V(}BKVAUN*D7Y`hU0)718x!w>Au)6MZ z&^QDME{8&6(MkoG88j4eKvc(pq^%44wmTSxUD8;WvR7cKl&vX~>C`Fa2)3?x5(%Fa z&z~yBK8{b?sE759@Dnvhy4+G&hpe-UX+V$5WxUb+q&FVJ=fZj$#3T~Y%M+I_U!Id2 zEDl3nYq4p_ZZsITwm$xtQS*F2qH04XQd_-Av32j#rB5$?vRTB$%Gvc?nVGfQt7sWo zc_FhS;1cN>T;K#UTj9~NJ8XG~`<$)g)TvVmYzSVmGCO-wYPXvdqeh8@DdIe|GY^sY z^pHU+vN)H5q|IbBW+?S0V@Jp4W>b%8bJNmx^ytwTaNrl@h0NkouJ|sUr&cRI{25Z;|;C%{OfF^N)E!44sT^vNek+x+DE-1<7ucBN9G1Ofsk7W2!q)A-TE zrpyo+!pJhO(z#t=e54L(ECSb}ITS&~TygJoSZC&@tzuMsQ+g%lf>bTi(B zmN>WydW-W^U0%nssy_A6d0J@diLl(g>Ul~&y#SiBwYIzj8lL5)P{{8mFn8zFR9#&t z9FDXi^WuW8341xeoHh789M{zJuDYoSyhjtW3uTWuN~D|CnbZ}`0;{$8B3Rfx-7P_v zFBlA1d$ZZH#@5gcpH~3#4ZJa;p8`>IJ#K7?$s}Sf`Rr^>`xWxBnxf&>Z+!E+--C#e z4ISOT-{m@U#_K(KlKBo+LFo$q1D;|sYBkRDr%!!_2q~K3|Al0|fR~|n3ZYl4PG?R3q!Uxi%`UD4@A& zzV$+4qo-BEF%#lDXl|Peh1RZ~?oK2JL&Xo&M_W3&VT$3>mKUI9WwoC6UVPQ=!|N_! zxoKfN;=)_mQF$4exQ{@b_Ll^$ruiKMcolXNL zT`rr=ps5_}YHtc5MaRssgNH_XnwUWh5z9ixx3&UO6>H%ZXX!Lqc zhKXSGT@wY~T$t*TGI*n1orgnsDzCP;R;7n{a!Z)PP>WlBd}#ksxg$En?8j2~qiM9n z7X3WZE}yVQ9&RKTnj0D}NVyiSRU832{}fwW8W5?0O#(s5)__xM7Y=S{-WF2g~mfrkel>qcs|&tTD*s zni0VwNmySh^tqd{om>5VmYk_wImOl0)wv8(Ue?&C+p1a&f>fe?Y9WfG273>TmW>V8 z*wfhf)?3VL*pzBDKIYIu7lPP!YgjBIe6J?e{30%0P)<&BL->6SRl!k)4iD7g>h8aM_DAkpG-tjgen=g4QZe)bvV4|-TBly00Ux-FQv z_wND5gbUS}HcX}saZjDb$TvirBLV-uo*wGQzJR~3u{qX>)!o(BY{46>(UF&4dT9g% zGN6I0C>9raNPMfcjI3FlHA-wBINMzEG!FT++*S3n3F9)if@O%5MoVMk++3j5ioYlY zx)GkI3n~tLmn`jfUX#s2bHW*xsc0S5^(D$hJX?%>YdZ?iZfcv}RtFtq!R9aXDoxV?}7NDTprp?aH0wEm(nOy+$HYTl7TKGPkg@Uck)DOjdWqVbYl*aDR2TL6yU^;qb+C8;hl8 zlI9MPjiFEx*cjBZDUdM;Yz#<4wV4fiMRiXIXGlKZ-R(4>XL@HHWNZki)C*`FT$WpM z3ZI+hTN~A}uC77yabpJnK+8&Wr2*F9@cEog$Rlcxf|dfRt)U1b2Y-ocP_#Rms&)tA zTjEX&JVJEn!Qp~9Vjjd$`T&ldI%sa~Fj^oFLrJcC83~>T3L87qtSYs1V}na zW2|(f|Bad^CgxVx*H#N4>1@R5i!CFrR7rw!jE zbxK?-263$*8CF;;WI;T*F0Q6`1^FSam@v+1akVO{tO)END-%a+myNMi=-EhgwqB5M zja=2n&^|ib63LBH9PSN#RQ&9YpADvR`V+Fd3@5GrtoEimdoWb`$Gntx_uRofc86@w z9j?djP;8^D#2zaj!(o*{J-RB4Nv&nbOs{@Ng4uhwx<;XWGJlBZ#YH#)#96V?PnFH& z4P~+QE=XX3lMN`^XhzD?#_A*)EmbzRG&7J)%~-Oq)1Zjrb{zFyrSPP|R0G@6%IbGg+evr!4e4}1SU{rLlN zo&_Dus?k^->)=7jY|vlp4*CYc0;ItptPxcO!CdD4eRKqF();(t^(W@Ah3=jPmlIbl9%d@e{GZ2+EB`wv~ABY_WKM6vN{Wbs?L=oq4JiNAK=AxWqO zmf<4!A&FqP#xHzgUwi<}!l%J2-1nW|{_b0^o_h8Bzwu0NO=%0|>4*~(mLE?LXf`@VvAMOA9OMP63wgAmN*VWmI4 zy$PdHsZ@a@K@RT){VAx;7co4%<+IO-87uFBli2H3D(jM9(?wXNGYMp>7vVsU$7I*l zPOq=y4ec=?3rB_rdvJ`iYyy#4AL1(Bci#D}-+Bkv*T40>-}sGhedWdD{SeAMJp)IX ze~4grc0Ii)@(7NN5hZB){+O2MZr^qWAwOHqREAfJNPG6oK9XSs@0?lzzt9Tk?Stj6%o$AaRVN$YtSpz z8yoowibrZRo12O{Xi}}MrQ)cm0B@p3BU3OX0L6$duqeLyAK=Y=YJ6O!l2!6Vsa27x zEEY|L%-i*f#`1u8({A6qefz=eo$;Hu7GPg5+`Ri>Vq$8Vnc*+`^6m50<}%DwuVH<%BZQFpO}WTdoibgCq!@B+*lLe`#RnmlN6U0{XVb0xNsX@@7wqA zrd#;WY*Fq3SRv7f!xgD`*CIgqReFlb3*)QxC$9zz>wJueH zm|}fhgHVGCSq^7TpE>t3Fa3A_?*DM`I;qBJxe6w241 zz)88jp4}?x3ff?B{XhyLx%a^FvoC-3t6x2Hpbwo)c63Aa>KQ!n+zT(faPGy^pgcIS zzX!MV9Z;OYT_>5oU91Ney_g+&aeZ}Zb&Hj2EI?nt#y~6>$_B1cGt1C-$_Bl>yau<} zT3J@ji~JjEQ+=`F6sC#@Q?x}G>vy%v2z^n{r8q#Bnupw`&!b)h;K#<*-R90mdEu@_$X`nP`l z*MI%>7mfqObzuJy0CkU^dg0d`Z@&5FTW`Pi_S}%lAtC}ikF2n^vbd6EWSqHFBJ5AOgc+bUhSdlp0lrnz>tv-g z6zp_Ks;jQX-=mgy>w4c@m|tBr7<|Vus6EF|o;~*pCi~p+17ueB^k9Ss_8+G}@Ec!! z9Y1*f*na$A|M9aJ?bA4R-esq!`OaCm>o{3yeRVm##eyje{x}(n=p~43aCoxC3bm>t zVM=OcC6|V6lg=?UPGD%N3>yKzUsq>yQ@z)7<}{efIV@5TSomRy>#N!Y&T2;Euvi^- z`q`Y|Q(E*3erS<0}l660%R9@=vYgd>RC8H=qCN9^c zyx?88*@7Y9Xu-+pv+6)}$3f{WBk+Ng5RYHQL1WiRrl!=CprZu35|g6$67tI^gi(Q0 zl~hL+wke}3Liw+&i{n!lXn2@e@kA#Hmok8PBM_`3;I7vohbJ8xD0wd{61C0c$9J6u zIljr6431zhXw@s}3p@$E8g0X9%B6_76Uh^j++j4psFkdOJ42;|#M8*j8|jA+*Ycnh zQ?vP%hoXcdiEsg&E#gm8jK{GDzk?Pgm6E>8tz(VsW5Rtm)F{(dwAdXg1Xtdy9Zu7z|RJ6^R6Zhfd?b zK)VBc5TL4^2Y2!S6WJ#31&|KV49Tcver9Se%hZ^BAL4x5X7Ux#VW6!thzKljblDsR zh%)T#{ay7zH{wrjEm=Q50JB*}yGTedB0a6Of4HLIfk;6F!hl54FMIWfL zzEU*0E?~Dh94AjccVsAr<6Krmdh+}qC=GT9!m!04 z&c}0jM*X?xPao|iQa&66Kxl81@=;K`r6q)=e-1zoxmsG-SbkXL=d-}p)@THNzNR{I zsp{Zt6xUI0R)LhLGO&<_$GCY!2bqkx;>CH?F*S?7Hm|i@aA>PcteDTDG{nAv&Zr*% zI+p`9_G@d&WYhzZs@RyDZD@+OwLDw~>`u`K`yco$AlNDusX3hN=@~h5s=^dm)}GKS5hho8+hJb#wCd^`1SxXs zRyKRJqqN8>I8x=srODY(e)X$geR$&`;D==xpHovR6%XX~)D*%vaG5GuUX5tG zUa375WHs=2E&xq!GlFw$RLJ($ zW-^c<4s{_T&XEu`X<8AHw`*B~4@vXO z2<6BS$^jA={%54sfq(fSzJa)hGm4;5vR5S&=l2}OHQH3?aactr0-M9-k3>`Z+oSd2 z#G$ii!{O(jKbnd}+Io9CnqXJ*QerIQ{T%0TK+a;_OYcv?VX}$=!^!U?SAASr^LzH- z>F%R#1z$%;rDEx3W}GgoUZr-M5i#)C0m@^fJXn{6KRPKR*;<;MHkoeUUMSTnX$T&x z!^f;Zg~54{C|2N$u(|5P@s8F|9dnQ%-t6S0@JG(Atla(V9xuB)c4MK&2x>7XSQnC zO7c=LzdOua2ps>~4}LH*^5Qo^H&G8FlKTFxue@~Ts& zl(jIzA?)N<7VqAi(d+MCxrrtUlJ+Pb7(R69{7`3a{{f}WXlpriNUaWa^$m=uP2e9> zZ>iNQUu!_7!39}aje0zzvIp13#_yt^<73w!jH+=$OVwrO$`w;}CDRi_DwRiqOwy%a zj^CLnn9UOtIjzOjA}bfl>G7qdU$*9$71(ELX}Kbk^RngXyLayMvIlqX&LHkASFjZ@ z3oR|xYABq=6Pr$+eD!eu$bsV;@KGgCoG_W9g9i^kXR;Y}T5(V_CR6t97~$h&We)l< z8hYi@4NSWoN|2)In(iO%OyvmyK8haZWp8bqsn zp-|7rNPl1dz~I57F^(CI1aXA8umtob7dDQDtm(1O0I#|^w*_`buK)0nfq~&_;Dc z2=23wKK^)ol`%GTR^`C=(1NZ|$cH2ktrq%^fVF4Um_Wd1tiI6X$EzRx(={_ zph^h^&}7U_LKy<22i84t!V=E~ls*-bVZcbFQUS}FoxXGT7TiF$?%Z0DyW=q`M$+CI zuVr7}rkQX$>tZ0q0Pc#=R^dP-7Eh!SPP-k*BNK)9ob_P7>TYz{T{;%8DKjdA(c@NX z^?FxR2iU_>?e$)(qEZ1ax+&z=!)K(iqY_P`8^>T(8{1niI1nh~BPNE)j%xWi$!-fAc6c`#i&G_u^<8g%-I-^r0KRWukKUWt^mxf(Eb zo$bL8=w{?hisv1f)%geaXO|b#tGI7>2BP|4TjoRd`amIjllAxfb6I-PtIKe&5Of^a$qiY*lheu>1ejWPdi^sgU!K8rGO z3izdP+n3UKBYd3|a&`N%{yp^He}p#lK-l>GNI424`=+t+%V@(U9~Q#)<@@{S#vz5$ zmVviwBT80pe-fj8HRYE`d1A8ylWA^qVK?M0e&I+BT8bjC2Z|O6j;agTrP)Z zA|l(mG&BUo&h#5jc5!CL?MA^Or}M;f2jk2zbCCydLVo4?)k|Yz7v=4U@OO0Zl4Nob zRPV6skQ73ftrq_#t=)3^MSRQU^$iQq&#sPy{>2wZm_KAL8ohFqF@kHv=ka>aoIcut z7yL2LZ1S@I`G5V3|M=IGBJ}NVzH;IOfzvm6tr{7}ZZq7>x`pl&Y;Fjzx%ai4hwS9GDnJ z80M_hka{Jh4mN~Lxtu-)Uyl_r%0&y{EX*R8!KqTssiiZ!4vfbU2V*e1;Wp3ZTuyt~ zQdlV(ndO@|Zx*~rH8k+tI--WHF@ z>LBSHdP=Nu`Wpp`N#+pN;jLRVe-cvYrK5&oG2Vt3H(KQP5EH!wTy|9pi(sT3=YMDT zcYk+yIC%7^$<$Z5EA2O#jvnajQ9tgjy`&6S4g>)(9y2-fZ&@o=&Py|fY+>6J*wZ@B6rb7CW}OLi$(t>z}P~6{t30k0uGIMKjcoxXE#6v zK(RGE>q}tJ#FpfCwdBj;(!dbF7*pT$ojq%_WkmC-Kp{?A^^$gVLaUb5~L4QpGdOR=JUnlPr#ikW-OK&=5g#fea70`Yc%%uM!xe~ z-wyZo!p((?c@@A{jb>p%cn{hyMU4@SD9v2>j6U&ZBArMeX%=)?8MqZMFtT^qu`x0B z7o#-wJIt8C$za2jxvMSX#vkLz?CwveB*-N zOIXEyx}@j*ff|-Mva`zT0jAaF*K8x zs*D~u+e|1G1hsgJg-IC0Qj*-f1*GA+T;YMbjx079QG`W86=tcy3iOQ+b&Q1q0;Te( zwNOT!LCIacdT&!^ZH+aWq#O6HR`(B`Xyv5nZyyzp%p9lVsYnRJ{TQcKGn%ARcx>dgF##Jqm=J45r?V z8&&NS5`b~+A3Abm7_TUmq|DLw=1?#ca2N`B2l*3`u1kNQMsy!Jgm)cG)=n~dm#M8y z9~pwPXQqlNaX8Zk3{C?ChyJ7VJl%-*ti^(PJJ6gM5hg}SXn~Yb|b?pKu{D2c--PV2)@^j zj&FUduWxg+Qe;Z->SIgzIB8*X6Y&Ze^wUfROw$|KOetcIuv3cQ&w!lFrMKb8A0h- zkl#Ckou zg&mK-5n0?o_#v6ff>gOR8M%NOGf^2!xxe1Mp|F>GdX~+2OB`?>lnxl-V4BABEQ!mhP{vDnb~&!87NB z_ECQs1P!a31sTrQfXf|%>1tK63>*n7h?|zisw4O|-kER(!9J828A*hEsH5Es&lX}1 zvcfVH^Tkyisewu*!dzy5`|y4sPtC}~5V`L_g$=pe5JghAub5q1UBxi31DaYY%TS4t z%A{ctP;Iy>>-7)tww}E`eEIn!N8k%V$)P=+G+R-QtJ+DspL*GuU%a!UmrgmmxQJ+H z?kPQ0&5Vh=m_|3rDmaxax3sroy9WSi(@AzmUlTCxFqpghrYDkQp&VXy2;j8c+}!T& zPN`F4sj2zZjIY($Dr>Q??^OL*6e)~-^_BDIlJyBh|A&VT9^Vh$Jk{0S;3R~pl+o9< zBafKuy>`D-aRAYEjc`tC9HtTipD0l#D*5rCrX>zgq zAsEP8N(B>F94ueP6#V)N=HSj(zEd3q#DauZi7Ukc-~vb5B8G(i;i$Im`O~BeKCdEm z5gmo9C!A%}Cs#tL{MD~eIBR}wO_X_cHd!9dEhfVA2>G?QFV`fljnK+okJzWG#Fa?K z#-1Q?TS(AZGnsJs^CYg|t41ier3K}1sg$l>hf=!V{hD7Wrz_Ue{ULur@$;Ym^}qeI zKlu|Xs9Wu?;!pnBzxwz8U#+e#A$mucKV$v}$J^hAz=q%QNL@!F2^BP#dnsl8_O~&= zf6hy2dUxfX&>+IiA8(DOO=z#NAZdgAjPcGG5z%kLq}cpHOaN2*l?dsXkBq zs>Yxt-uo-2#!oGNo!*XHpF&$24<;=#EHh_2QUTAProx%yhlbnzkl7Y%AUT}ynN80> zf9f!Eibo>#d;jLoZ%=N#i)d3Bggi!>2K5#S_b%i3%RhLq@a5(1|5tezl zwzRSF|AGeygjI?ewF3> zcn75k>>m4yZ}-^i;8x##hh)zk=Ev^H?YU#^F;up$ZTDNW$om)H0&KYg^dfZ0L#ZF6 zasdg{X%SHk%=-4vT2tR0%*EuSOILkSwLaSSuqlR+^&&o-m|^rs4zxw1@B|_@O4oj% zi||YHn_mmUjn~>rVw6XH4df)t$Hp#?fn-M_HG*X>9+#D-$C#^E9gg{VUOGSTaEQD6 zAf8%xaJUYD^c*K$w`3U;I}fH zCnuv(c73YGm_jE^prsLoPGHd5y>)eU+@s3M@weW3>y`b?8@rpfU29p9MnQQrQe2h8 z^rU24Lm&W_66m&pKn|rJt7RY?5Jf%IhmqOYDpah~LX0&CiusN7_S>V$TorUsD1dh@ZJH6rFrNmHNscz5GTVBqN+1r!?MS zw*&rwR{{l5{Y*RF<1oo_Y~&TnYu79m{ACLR&)yP&PnQ>}L&7OKs%~pTJh^PNpk(Jx zea2MX8-&b>+Z?id24^aOcF%Puw~xz#G(Mp)F5m=yho=w3h}iuaS_LtyDJWCKt9wwK4_N z7+h+#DcHzsZ{1o&a4jD9D3H%2&MP7Dy3=bE%L2Sf@cK#%=_QJzBjB{P^x!i}%O8I* zJ(*6=&fbK_b#iW{sG5KHaFJ2*ycywJxeW0FyvY@%BQE0QSxIr!Dc72eOd67H3C~d% zR*+kLY3vqozT!F;dK+!*K$1PG`SuSE^!IhO)Y;+4MdY-vtv=}0v#4EIEP{PYi&Elx zloprEGX*PlKMKofH9}-v1{ju$7|!rkge`Eu*iq(iB~6ADj-%};I$Ws2*?AtlZC>B3 z0K5pw6(aIGazvv6;B9fQ%LMm%`Ysj02ad|j0JQl&;$yFVB*;n`IW`( zPTfbRt_YnHSI#*+zbV-&q-ErG=687` zbZf1OcxDtTt+u`%YJf!}5D-!0OKFOgA{oO=A~Yo7b9{`#>U1U%q^uiHbGJ$sHRCg%x{f= z>q05YHj2A6A3WIGS`U;rC=rhBL!eKHm_9*CJqXl~qKJAi$p&9_7Mv8QdWybEI;S@n z1XCdLE+LillC1^M2tLwSz4XLKs|g^r;!d4akZY-w@L3z6WlKv4>4ofonrtrMiS!&` z?=*sznx~d+uMar@C1t3vH81`Nv?THnnNdv*K8s!oE2CW4;Erh&3}rNTcOt7~`azM;s``4f{(Du@(6lzZFI&d|YF5Q?}UaJ{n0*JtCYYd_K9xvZ{&QVM=`n6Zi9zPCP5XS5H zalIbSibW39eQpo`i(qRkwnqo3pF2H=L@T!0~TCX@Kx*4EjH ze2C*m+lbSeNUaM6kWLYvd<&k5)$&eqYh~2Wp=u(UyyvAqmJ+=+cxcEP@JLl!Gjj2X z<+?_5t+Z0{EYMtwtr7Z)n@c5tSO)t0v8U)N&&|NMjA52Yp4?Y8B9U-iXp|DkAG2lT z#XYgF?^0hu>Lc_Ki(l-uHFNJSTnZFJ$$hE5?tH1DEMcCxtK#YLkI@CgE-ghnkYT145zp!6ywC zb_5}jkZUNT(uif=h_RMPfQW_yRTgsc;VFkk0(v2+PzvVJxZVD{pJTg-Q@scF0GNvH9WR>+I?6?d$9B^-%^GwhuwLYTL)Yx>~9Y z9b$dG(Li(+cgYxp)(36I>i)U@xQH_D9(+viv4IJE~2oNYo zKWE+jgvPI@FYW^el-ca?1S9nxug8TPXSrJL`J8oD8>@O6D~KAYAZwodV*c4hjyR*W zK1a}JH;M@~#aae>K_JlB)PNl7&+oJLQJ@^Y<|eJ-b^JM1al@@Edq5F_9jx4;9MX!O!o$VY~a-M)(CdKXMDU z(uj7XSCO2wWB=URv48$0&3_yCHdX6uKoXiAUJr7ctW>E1C`0JRCbJbjBcuIk!=h&l z%Gz4kUJ6fdkc@q1@hr%k-$Xn6Uw-A(P}1-3>>S#+|L`GrzK)IT>p>j43%J9^Sogk> z{UZks9NhmogJe{XTEWC*M{g`fs6CH%u?`tKATa|tPNUi}PCMny|3>3<=Io&q21cPf7(}sfNx2BEBM)&0?b>Mf2dnk+ zQq_8Sjz{(KQmB_#P~xfe#nQ&QT%OHrQXb~w!x@2(oQRb)fGq1M%F_f#pRW91Z~rS(}%9V!S&vIERQsJ2PMHlcXil`@*GlOQYqmNI=x#rD*d6d zRy|pi#{Uq{8^l_n3(6GK&USEmQY^i_9U8&mgDua{<=yWn{}=(5r*~GIKk7^KU;Wiz z{)fNJY!d6?bzIl3UH_~9<}PxW0^LV}7#dKpg2MIgp1#n$4Z_c| zv;-;wIAO>n#b<9Gk(^qNyyBHOF>iH-2=QlFk_BuKyPb)sr&FsQ*av85ce?uUzuC_ibS zvacmrd|(<`FQJeKGP{uZxqG=jQ5V^%Epa<^k&BNOfH*Gyg2v^`=tbcd>%Bw++S$omS1l@cP~E@P6w zDrR$sBAuI?oe0I@Sx=H*0@O%sy(p8K_Ec%yhtGot^mTgZJKh56tV&R=j4XD29FgQG_^+C)7{n97)ELg(Dpu^){IIBjlj`FF=Rjl z?vV@nHk&9IkS*Ib0BQ53&W_(lV2jzidup7Je@5*a92`D)_;8{Xbh6<9$7zga^Wfk> zSFD-XE$c#Ii^Ua=!pn!+1#ucalzFe@cgPTZO^D3qxjGUePi)`LgJh?j{e=U$^CW4R zM)&ueB#C*vvU-x#{C&%NI04p?Oeo6e+8x*S+;Q`uiswFR@l$0toY=U@v+K^ z6!&PWtE&$Nr4`co3&=&uW{W0=zmAglH#VT57Ppi5m75SJXqElR#{%kr!@jAE>X5I< zaY8<4>Bgxwwyab;P6blkae2KM~?FrcQp z$M}c)Sf#j=2#=$0ZjOO9m6Xz)Osi7z2Dv-f)GQ!X39^chf6kP5@(lYE;VdBSrXwCt z#9~G*2S1q#`WuQv`RiNbmEmN(A>c#pM-{X0;7E6q$BjS1k!m=&_2$*_97%DsM9mHT3G=jd2ake3#&Dv02uVNBzxLX>!$`>->PsbDqXuob^Yzy| zoQPBVx?g`CV|PIZz4PPCmtdG)y>jF3>P3W+%9S$9gW(mwcyniGP+M8Xpmlne_@D=m0QMWHG=sbO1#p znzzR%NG#hu&oD9<{a`IEBV+gJBO=t{(HW42mh0^`*pPD2`y_r3Tet4lh>i=U;Y%VW9YXW_}X`cefSohl_;|y5kdhn5F#rw zYpWSWkSOWi!inF~_rcV6l84z%r8hHaYoV`4{hFO0OcUsI5on zre~i@hL<3t0>WJ`k>zBD8dKuyc-w_I)g;OkByuJTX9Ht#`=Ba7C#=J$7*rhCOkt9@ z`?N-z+ilTMI$U!F1UVoA0MpC$hXtG&r4l-W>yz@;ak4*hazhwfy=Pb}tKz`qcoUE6 zsbVh=;j74FtGl^1iJ|X|MF%|y<0~5nu$q&Pt>&MqlSx-)SH+{avJGbvn&gwTO5r*5;Mex7~?PxP*3`P_#CIGu#^H{F&HxpUv}UJGx~b$0Txk^znwVTi>1;%ZQQr;Ns8kC; z?(1`8WmcdM_0ULb)mjUQT#Et;`7mZHKz;t%u>8LVP(E zii8^R)|gYx5z`o42rTWdEe>Z4sJx3;K}&b}e!4{QY$zKAtrs5xFK?lIk&_|=9|`p^ zVGE+XB@8Ir9U66MOvxAw(Dv>=DEUJ}-~aybFk;nj9Y^9Ak05i`k>g!$4fP~my=ETK ze23%VLx)KzuBC6{Dam{Z^?spakqBAMFfwNnCTfe~;qAZu+0X9Yg;}0i%NDR{N)>j4 zQq3nbND~U~*fW_=v7SC2UoM-Y2;#N3%+0yoKr*1{7Z~_P<#KgizP)Qm&Y}Jm9KeWx zF@wz!#C^bzAF!MO?*g!H3255bL17_1o;kzwa+wBrc{F|S(68ZUoRd zNIadBS9w8%k?iW(t_~H${kD;jfdLp210y4tKj1+NIMa|Qe?fWYeWUTto!&4H-}#+8 zM&tW;#Caik?Q@5LrSE`wTWAzvEUl`-*!2Y!m`#BEsgytd1X)=hUd!?9^~^i4tMPZc|pGap$t9y}0j1nv#Rw44C4gz96R$Dk!#;4))ZXD6-!3ii=QKhl@7o9R1K zZwzBiQ(eMQt=8?ocJ){P=`a5Ezy81f?rK#ozJRwivq0DiR9#WKYz4q32wrn}aU4QK zr<=Gve&ZgTkt<6JD=_RaN2Tl||Ez)-zt0@s9` zQi(zNLuf!XRA<@eC+JHXwIx}tS&(FVo)+jvUVT+b5);Ar$m1P3O05CQqoNu9v8yoEuvo8 z5Q`^!Az$!K45renL5?E+pFj#a6;0iwW64o2Uq(fj%h&F3YO7vPCp4rBj{Z?aDGOQ- znUuForppX!P-PWL8(B3+(*- z@0*a8oGa$CjK`zenE4D-Qmy?#Cr2C3Drie`iP9XQs&`QX0A6Y}o6W4QW0j|;?v7tZ zx97?%vpKm8W+{|mDdXe?CHlkV&5GJV(kIcSl8)k(#Z#a`Y1zyqKJwA8vITKvzl!(7 zz{ZY=XhMa~+|8^ku0jF4dkef&q9hhqxUzaGK96_W?JWa1ScV3{8x9v}Gs+C%%&}-j z^=gZfAZi>+_OfN@;5xZ{Yv!KLk0sR6rB;9+MXiV9IuD8nF#N&@#w2P~HKfE@JUiM{ z@3y08ju{N~pp3DaF@%8XC^feI`$tf|VgEp)vj@T_iNs{kL9+b@qg+na?D>gx9GBVKGB)(VK{#x7s}yQ*Si@J48o6%Njz|8gN2Fmqk|31hqgH6j}hHK^3c_ zmX#N?Rs32jS_9HuC_EhMPTF2x|dho5u#q}ah%jWXj zz0W@Wm{mx3k8JgG!ucOd9zJ&L@S#H^eeKcHC*q+<035MF@-KRH zsxJm;UpgYh)K46<`iKI^xkN{5YxOFTU`?>3!|X z3xyh5wizw6Y^;8;yll0$8w|=pi)DTN{SAzq)M)(lQ(l2n{N~L>0_it5YqCN3jL(-u z-GhUHKsI|5q0cLz*mv+sZoyzc0Jfc128bl~)~#B0=I;G7jJF2B84Wkp?Cj>+8poYX zBn~u@FW1T`QGi6NfE~jtx7N2-rl;m+c;l5T>mPjZ!PvaSMk;5VsjUaHw}K%vag%12 zGE(WmgD>{>_9uEEgL`9b4X~Ax4Uq8{ykLw+W|z)3O_g1p&{LO6Mt=+w*U?j}-t!Kg z)e#N50ITrU`RsrR!&lLqXlhdW{ijdAeCF7ZW54u?QZRABO8&Ow=MfKd~P5La2B!~!21 z6O?cR_3(Z2-b$qf=6*{{ z$WU1XxPNMj<4`Rc)W%5B+p4bSU&GVDhi+g&qoGhM%WK&C3k9oH1xW-?r3^rSl98C- z`Y={PTNEjIqm3-n(oFG?02l{kTWbh#p*-(8NFrz=0fY*89CnM^pcbW-pd$j<2Fto< z2>hI&+W}u!s?$=}f%B(j>(DUOd`ng!UaFpNm2j7-3}|)rJEEsBiX_;bzN#qmm0e%AF<;yDbrnYd0`#yYE=-*y{nVMNn(cnAwwCwSd!i_cJD4yPuKX z_LYAXJx}=k#iG*aa=B1!4W59K$pwwrWg;qd)#rH3J?iy!Os}j0fd2-#q_K@3{r@q) zIeFLEP>4@xh}y`i5oqCUKCC#Ojeu3!r+Cl3mQo2QEWKI*H>m>bVmtr;R3G{`@zx$z znlGhNZLKZP`i0Jk9Tht#cJy<)h~8fmD$}9nG#;ZscM5t3WuXGn!p4cU@!nOZ6UGqnTxB zys{wbhwCc~ntFzPhJg_F;2%*N3R}cGuSG!2WVM51Bhu3NrN%=hMo(Ha8sLa2dX9?R z_?OVsUv^+bugkY+J$QUJhhuqZadu+jOD=gHFXv%8m3d?wKU(ZN|G#5F2;(5Ehd`a% z<4LE<4EcL3|1e^TSP{Z{*tzm|{{N}#LCDpK$F*7qxp0FH9h{uHAepoH0&1P($q+&R z(>C}HV4w(~6ngvL(5y!yDCy;ZDdW(~uwi9RQaFN610^~=4L4bXO)6?|{lL@q{WAk5 z#hE9L-}+cgqjA%r7j`2JQD=E_zs=C{V7kb`X$U+P7zCf(S0UCFiAW?C4`ijsB1o}k z>0hmT(BzB`6!nl152Zw=1iitR$wsKj{=%NDPz}5bqU@*4sh0UI_==GN#gv%J3Mkp# z31nxqYL;&Nm!JJ?Y>fV7PyjoVS)0X4%ggdWpGiPvQNBWc#qou*(ghhE3P>bgZ@C-_ zd67fIRzxj8u%FY*NCZTVAVBXHCCEBZacXmY=GM*SWvDy1V8>6+FM|yvlQH?oT!@%u zYjfl?Uu0oFL(J(>D}(bPNBLqi72Ls4I*_l7pgvt#oUri>P#LBRTmTJEMQut&Zn~y5 z)W%?}xchWlz+u1p{9BFI?x=lc^L*_);z_@>2Zyw{eTIq}M22GLd+?)$W!$tUc0R4# z{akKOY?0e;oA_SIo+!3yn}5I7(qHW9-SYMmC>9wYY6^jl5H3VGvQw!a{NM-goahNs z+y*hE@1ZKX-Ok$%_r{?)w)UUlxKpiA(kn7gYIatf$s>49$nSOFWJQuVJuVWDHAf>7 zKa8l9ZRr+LQ0{Mn_7AmdmLWLj3wqv)C&)m{co7Sixo^WA+h?YTqw*d2~Nx}N8;QP=Ld!?=CN zD_98*tqGoTP_s9NY!(Q-QE$ zY0;{eWtQh|LUvrbS}cxgK@Ws{UI{DHXr!g8g+lLW1wjykEopd;3hB8A`0w;m205VX z%WD~iG(5y^$VAk@xr%+~ZEEy#%-X`@(&D1kqyp2<1kAtjyBw7@lmpxk3nQOrwh-tL z<$Z0$XPve2tbJ!QSo@9;#cByr85dZB%SvlA7Q3+YTN@iNGw@j&-Mn&h0tVjYt5+KObBo3 zD6UgPeVuSa9hD#BD&?&lN<^)$<|?BGR&bYcYWVo%QjG%{+h$K=YaN_cW{XY@(q2DG z5TJrO1;JKe6Rsl&hN1y-#8HYY2fa(&k)(fj#qA8D2!)N6^zu4{13XPV9c|6<-1}dD z{q=8r_t(Gsjn`g#?Q7@v#~R^&X=+cw4b?#rp@dvxFyQSbyUT%UHfA@)$m`uE{MX^O zo3(Nj1=51VHx;oku*X<)BqhF;eAJzK4FeN(V?Dc?#xZ~)Zgm@EX?SGukk;0QXcO#p zRQxbx5b?_y8(=_2z)`?+aQjG5ZOY*ByLgquPkc&sJ{#|J_&o+>*UGhO8H<9}K0OO- zlht{u6=a2c-21nG`QCf)zyGTbEz zo<0&hwLk(lE=Y#~1dvIvJE4e4QSJ)R17duAmZ7+yCMTy9Py(fdw@?+uN|Ay-2&y<7 z?6ZwUZB>1~1y3IS4hJkynHH-?D9(;*0taTmt(TVsO{Q~TkV1i-k!HBl>qDJw2&h3l=}dL^;S^F- zW4|oiqE%}rx4Js^a>;x*Y0RawzXHfR&%Zs`|s~NZ3tS9e1$_=~4_tT8VK~rl4h)6gjPAqa3OA-*;t;Nd2ss<^zqv`lsq1v+hSA` zwQzBBHJvLL^JO)a6<*RrprnVEKLh^y>WTzLyVR#*a{Q=HA{SCmIgmpbG#sy2E5QU` z1?d3mH0n*?UjtOfpjbyxd`oSEJ6weAOm8VH9aS%%fPY3^+%jH_$f4Qk^P)9AY87A~ zGjl5xSSU(C-dQM>^ISdJQm@WT;>WA2D%_}Dy87OG()T_?i|F7-upIIsain-U2qimH^{p!$n*g#LlYKG~~P zR<#q|4n`pzvyt>hrP}LEyvkhb!n<_C4ppLgVSy?pG~>Yi5qs$pk3ZrXy@)%8R+pBS z<|k(EgGL~)FsawDKqltrQOOKvm0Dx=8`K(I2(jiwB;*IRx+~zeTTE8eACw`Ncry*m z1JC!Pz9!IB3Kjn>K-r85+6hJ(7b1qn^U zSPNE;UWMR;M5)`{{B&*2>Fn=8%ogml;X1@=yn1>Q$|0AFqm~fDA>4FBBos}7-VA}w z_L{vaRO|4B1gw1zlpj>blog<_cS=F)5F4X{S=1{Ly(iz@^#`{d)X zLaA2wv-+GELRZ~=h}coa7CAu+I72x7mdp%sgxNtcXmWu z#8h{KfF*`Q4WBi5(SL`psmV{Q)dsapHjm)a-3>)DX*4F2@&#zSX)TDI4dC~bO6~Sh zZ4PAk1Xoic-Yntmv6x%SZbG9#kt1mgRf)2b*REZ2inB>kKo^nBeU7733eG2#Cv&^7 zHR@gNstzs3r+DyYh_evDS0=YJli8JtCFg(qD7i|Qt&_Mf@;Rww+nHo_=Bxss(Z>=1 z;ee;g-m|k6;;@`u*)VCv9`xa<9;*TPAJh>6^qMf%#p1vKg0v_V=SM3IVDos0@H7w+ zfriD!KmgIPz~W*^yRlFmZ#qvJwH)A3$chrm;y{1MQ6fC#e-d`I&PCd1gG-kK3hrVZ z1|yMZkGE5d4PFR@+*}R~qW~t%X;lzmc}{E_<j(+w@b=uIPAxMG;Uo@+w;d@Q`>6C@8hsarwsNGTK=l zwQprBsCfI)M>o@DE{sC~p_aSjpMF&B6`kA3g@vgJ^1}F#xCGFkO(_G8j-=|HJNM@n zNbk<1bs-Y%h6=ILOl9GHAsY`eoYRvlFp&Ug0YxHpIn)y`UNp;)K?&Kpu5e&4qEd`> zXDP#DdGnmXi5Es%TRIj|etcsC%Tu{Th>sF1V_{=sYafqmL+$R7de0*arljT7r zf#OR$8DPPDb|jm9guNc*WkH!N_y}oz1Pu-n-|QFQs`v92cRr6~|1UsMQ@prYEyI{n z$@P|2$|7xTMZK3)s>x$>`r-}t0F{F)Dm|Dj2$iNvg}|FobIG%>L~%r1N;kw|qygOi z7Mx5=aEWD%*6N(n8{#-8VK%KUPTYSmhk^D{WlN6-L{XB=%JRyFrGknUGcy@$1Kum3 zo=sArdLgp9IWB>06I?$rNEmQ`+0?oWBuGYKt6?xj9fZmYh9c2qS7)4>gbSh_RVXb% za1ezgHmWPv77(g3tYX0+#-o%=02RvT`M?dF2DoT;gi8t1x5*7j*@mTLlWkTxy#xy| zA{2Q@COQdA)3Xzxyp3H3zD66QpErnTZoJJ200H=+aE(u(=2lJH0Dc>gE5dgh=Qbx}x*K??AMdJiT5MCnahZW*NZcO&w=8ATJW`4y+@g8W_+h+Tk9w zx!xdMMSreeMeeZp9Lf{!*81w3+*YSG09t(j=|e7m7>20d`v3Fxp23l2*?s5B%$MFL z(mSL4lB3YD#c5a5w!DEi1t1d%q~G6pFB64AchB@nyPMrr1(SL2eb=0O%>Vq4 zl}I-)Xu;}-fOrp0&=SCUg@TSvprRAQ1*aO{|A;16ngU*sEUI|OXIV%P`>K(K4T-lR zJmX$(AlD~O)_6GL)q9p~>oe^&ai8AgF95Nt+X$^gybBvE6m%24m8FXWe1wZ##=wE> zgu@=$2?NYr(at&EKB$6)Ff4dFh%1QK9F9OFR}2S-dEAK!qY>*lVYQc#LnTYNi`SMI z$@E%@-l$o*bnmX#*{zMb!HaV?D}abpYUj?aI}cWTRjpg!(FRQD2YNF;|t* z_&&+n@4a_}zzKveE)e2o^NwsrbEspnKSPh%9?dbIi&2^g-Oz4tY;54FFt|Li{?XC3 z4Y8tGGLM_WGz%f43jIZ)0LhgKPu0rGj?wFFcXH#k)pR%z z`&(-d@81(}_sz05ArXL_&$zq#@S*wPLy*>?B73B0zkXe?G#}a!F5YHKm`(b79AJ$O zvD+4U%@&^0feQ)}?u`QzxQD7aif|iBxm6>@&$6yw!8Y8ppXr5 z`$AufdR`ajPmkq$({V333K!;2v+^UbTSW!6B=#dl>_DqUne3i;29#WU095f@f0VdV zFzUmB>G5E~yM4F?y`74Hzaz7nDok-@oH;W!n2ue&2v&F^>0qS~D!UT4BUFS-GTJ{q zok|EHN-Bk8F`CxKobDAy6a%W~B|9Y0C?4;>|L$9V$PYiX zNUc<}Z3ymzk&&T6wx+#pba+`8)e{61UZ^Ob}t~A7mIZE z+!hjODU?i!LpXwkb#bJRBuEIEbw8|N_y)^me@-xl(-`aW4|+K$%i+EP`;&REITNG& zv`mY>yZbcOZhs`)l^@+U)S5*ruH7b57L)J8>i{3${@_+eKb5;>c6=6p^jYW&7~I^< z%-r1M7&NGYv+Z;3@7}+86UFG^BVJ8!TCQmBxRf$b#GYDv*AXcex|e{3e?JG(Qx-b*MbFOhHWdHhny;*zRU(~OpOhlM|Ey)Vj8=s35tHm zsjFIo(at>RyYrc%-b$KQ+%Z`EVKx4qEpgQ)~vyq}2$*%8rXHPVjJhz0^?e*8I zZJQIMZ|mH-(^F)d4qUu)erjUo^tp2_&~2Wz6*P$DwY3tA`P9x@AoGa)o}#6)0rmRI zvK~WtiuPD1ze`<+TO1a#=%0J;%9ZDy(`AyB*mgLT)5U8p#2ZB-Es_$WnimnG3q}%| z`0J?RS3hk9T#bDuR7}8po)~w`gYYOCxqXT@N{Yz~<4fNOf*I<&a%nP`o4h!6Zi;g@ zGmm%->%psE{Ka4XyWjZw*T4R=uPVO?ZtCNV#EXoz%UIlLQIOn2E%Aq8i47&}%s7W< zJQsC|HHJ1y{*3`$tB!kKfIY>CY|=u3O*)w4i~bSWt_98~HH9gHvS4aK>7cI=GBOcY zxXOVWkY=R)%LM`;%487H5eMR3tyQ6}s~px1?b?|$!;b3dgtt0ZJ>{sk4heh%e67?L z93}_5(J?SK*6Zk4-+zm7&y7oZ_3UV{SzSjGuCH$*EDuyX=W}yhy)9~|$!$UrS_TQx z3iSo&PfrVjrd%GfOT9x>VWZ$0qi2(f(qs=B~CEpK2TL=3O+-K&9x+l2W#G_cfs2>XlptscAFc2mo6!^ zb|)rA2Zr)oUJ-wNi{`uScbnAurCpm(aGaX8K|u#!w|Oa$_Sl7{w>!i<^_WaodxFAT zGCyA%7!Yz%5?`+2JYel+uL`f+{d@Osc2KnXDeH1a3$kgnT3NbzQ&kfQvpJDa)tfh$ zN|MJVuR}*j>h_RY(^zHR%8IK<9m#ON-G29OAh5kXI9QCM(ei>mi^FpF?nXm(rx98i zlH$6&#+v;V%E3rDGd0$qPsmtx< zyx{Yhpl+)kwA}6&+?feRaVqV8;miPm^zjz}o1q&R$Q^T7KAVHyxDs_o>HNEK-abhX)Baxez{2s#4eL zt<-GU?=8;VKyP7upnrU3nhT2+s~a4`8SQep;X+11{$Qi1?v$GrS7#+;K7;B0 zi8*v8HfxP?u`UNO06t`Pxh&1{4u|u$rdr>ijn1b;w~I9z|L$FJ3ziQ|*KdxDyzw9Y z#lQF$|ME{qMnL|{$ze12V?FMo6SO6jFOBf*Y<0EJS?%*9BR8+J=#u8}?!RliF*5R} z|B@#D1IQAlPWZi>mAyl?y#V(s+Mmm&?CZ}dk)3n6K!Q%cmA6Ympf{rR_pJVW{&mI z-(RcIPv@juW|n$WW_(Yw3mW`Qs#{LWGMgPg#jYF5NQ-e#*e#`!(d4Y;+}n-S%8{q0 z(~_Q*;TF$=+w0Sw?)dO#X3n0T>T_D&4dk2E z8>-E(&%_zV8&5G6j^M!jkQez|@a#`61s>R*ogS%=n#Elb2e`?XN{AVwAg4_Ef^Z~gYqUBG9UxbSm-|C>&y!SL=oH}R7!-+2424-JM7-}-1B?eWH2 z?;0Q|?DV3Yu!~KHH^QJOV{<{NHZ9>?9(!C~gJWYCFn)?QYklpb>(}3}*o(eWQ}dOO zEX(VI4{vsAwnlkA2ab5qzfWh|6zVcKS|HFIj#J$y5@{9(>;Vq6TD4Q1Hwo!1t)pcjD`{eQj>6cI1`UbZoCoaY8HD(F(_2TL;jeJS~~oVJCBr}{&7zC=}S%(0v}B$ zc$K*t|Dlm{a;Pm{ZZ)r^zR5}ZHgpl~A`C#WC+WhBPIivdSc90j)@fgE3?%5?iOFT99;6s*s@Yw5&ynym2ig?RF^K7!5K$#qv2cY8h`4l;?0iw^7d564mR#jJAfU zKr&*ZzL0NIBT;}B3fO7K($eOE$|l8YX$<7Cb5nNpaAQfAIls&^Oh*$izxHy0vn&09 zNMMjTKQo>VnIGYAuH7Y@}l~UbpK0rxR0!p|zDa(Mjle^%<`Um12UTs)I1Bjc^ zA*z=7&7ecu7Kgb?c}a)Uy|mZtu8a40u6%v^eb4*TcGZz^D7$*~B@HiztA_v}DzjFJ zYhre4BFFY%CagfqoX&`gJI)p9!=~y(dPBUSN{TCl=fz~b?smh^XlY0`WR+NpSmr%A zJ9@CvJ2R}=^}W5>Jb{RTzB$z0`DAbJPyS@DsL*fUUEANMlEZG%hWa#6-~qZ4%8o&e z@6Bj5HD?lo2FK8G8}HUF0x);5%J(#H>KZHu*crEOEtOl=NQ`2+p*S1umd_x}Aj^kG zj#NwAD994SLR@#KqICIuVWrXLGBK&|5@x#o(N58gHPLg@mnwH$e@7mWz<&BH6)h;h zP$`$&s&M~fVjhzV&aPZ=I4Bv|v$-k0Fz+YH2d&*B`7m(~`EYt-Mlv%mU1BF9BE(_P zl@mQD<%HHg?h%JWvT@;gtaRj#7Kb?UHs8N{M`kFMI(P18FJAlvFLP=)CCSsSuA`aY zb$n24RmyMa4rcEY4(1`swrFQx%SRZ`L)wwx4oD-c^CKC+%w1ph$A|FMuYUdKf9gwL z`qCG#9{IVUOC{3sW${lKXC?V*DDG~`aSPtQt@XZmY+&B>pri?``F$>T$ZN*ee%$e` zOC*h-a{{=>_U)Uu?=7!Npl+AiDi3s*X)HEB|Km?xy?XVTXHmLf^+lUK?>Tsg=eXj| zBR=!7t=PCj>Zni8UwG*i?%mhGKfJ~$^b40TVq!p?0VnUY*!Vc3+2uOM4L?47^XADr zPRm;eV#Rh5DwH`G9-p~5G1@==6tnW9FFbSgB0A3bGh+iWIoSr)<`SOdpbymGnMwSR z#jNV;>B3dy$XL|}%P1EWgFQeMc4DMKdohS*7l%29+~#V%D*ieb2DZLtzr|jDN?GK; zZw>zD&;HD-FTecikG}i@&7UoF6JkY){bLHKWeVvhqxk=&2~9<_jx&)BRho%j%W%86XRK0mTX7oU6X3^I?B2xJBh z56{2!)xYuUzy9k0hvtPZ74c|rd6TCmGe9TDSgx=C^6lC2* z?j(e8?(E!5l-*$VhC|VUv^zI{@#z_|1iu0*{g=M-$`?dSzA6f$u~n}v;^-eFP!qDW zfiCQpsxAD`Y!uUt+t_`CyMvKPG#Kcyccew2Q{CM_=A6k|p8nF``^vQI3)d_hf2Hq+ zex@cFQ8XQ|xbp30EKu*YDxGiQ@=Xy>>w>bqNO>?Ny{JIsCtv8#5>yo8?5wo*vPG); ze?DW7``Wa5f0IN)gJM&}1C#UhPayy%(q03V3Rk5T>*^}3l8;J{D*NKhs40y_BYg|T zLD_zg6LoJWm*zeSSIPofl+s9TgXxY$2tWGBdQ@5cS84s!$<{@)&JPdg!=dVm^z_MH zA#R@NDk2)t_;|au5OX-2w>HY3*sb z1HrU0azJ-cY!{z!rCGhM&BFtn5esBd^htYhY0sTN=Srozc%>;?jJA@=wfn}}0dbOt z@3ihFlkdI(fxvr|6tY_^B*t0rSsNE^wVL1Wx0#i$E-E_HNWPFuMIzy_&uMpzs7fK7 zO3IW(LOq7D1Q5kQPfx(_bBqs}a4HS`>HqoqeS*xD`>+2W{~k@v(wj>lqC=TJCOHMd zpKp@+UW=vO)!T%Qk_PInKsW7rMg1{NHLJ3zeyqn$bdopl$v5vfsFY-P7?a8Om)Vh>^Tr81cs z89L zqj7nOCbswL9X>wfnPMUKU^2x_i!i^L?fZtVovr<@xgx)8E?S(1eY?4S*cmI5O0gYO z&GvFza>gtT0BDWn#_`|cAvgdKCcou(sv7UsjAy<`s?pH>OedISeoSvY?0>3Of*vnpaA+549rXDcL#GBCzQTb(T1*y8#9}cOm7R_(o#9&v z7b!+~Y^Sjoj!E_q9=v+}_D3J!dVlZsM<2cO&ik8twZ`J7P=0sLg+5Nl6Ql0p1@zw) zp7`D8JKt%Zc*ous&RTMX%l)aj*|EMXrRBZKRd%n_v!)dz+hUw?CVYW40LdRI45=@6YV#xXkmXtwEtlO5@Nb`_pPyI5LeUX;97p>|lzo zm?W}sX!Nt2$EU@s(Pn~G&7p0*bN6;vdN!a_3GH_inUt2UWyKU5Ev7 zUE8gD@GRjB?4V?c%A*58YR7_Ue@yB%6p?nVh4X$Z8hGS3H~_0O{Eo7}5s9e!n)!}< zFZP;)t-)sFn%VInxHZsORnd_rr(;%=&p*sfACD&^@wm$k%?Gdp7mRFXn?Ifzzx+I} zXRlJn_;a7TI4OJ|qh=L|ARqB`FgzaWVJ?Z6_zqwNUXry#HAo541D4juqj`$Kl$T7{$r4qfAO!B zzrZostR=+}G(6*Q%=LEpRPsEHZ)Yc+4!Q!h{-@L1#Kj)ODOaDAf^;Yvb4An|U;`5a zL4eYHR=u$T%%dY4pXD<-oFRxBAc3+(0!EWcUy-nE2X1e(P%~5% zz@$g5ZF78pW+e-q9d}vAkTN!?q*ZT}2|C~06m`1V;#juXQ5KNz!r)?5LCdGpVQAvG z6V}(XoonHC6ryo$*6>AzLn1f$13b!r4B< zMt@%yq59kObs_GP2x7Zs3;NBiR@)ux3C7cL5)j!H{poNznyC_54IS zY->0B2l`Uni08!TX^F*ZxYr)u)e6ui$CAt)2q};(?e_L9fZ5~YQS-qPX4u2B!PhsQ z%{rk^i)A~{ta+$}QHZl!=uZa>a)%#QB}B$m9rionH7NK)5?u@WHEIPeRvUmF{621{ zc_BkCip}W}{Hnw4<@9^`0{RMfKnm~%-PVrIBll*YS|XF>JKuS0`M^KMw2>yUTQo_= z4Og>};#H7d-fpaSj86~*uT}OB+DfgoH#VMgR9D{o&UeIdYO8ChakWDX9A^eyG}E!z z#j2pn7g9c-hpDn!g$=0SJ7m*KHF8d|Qm^ju9m)Ck?{lOA=IX}%&RpoxWdrgCl_rsB zHk~~cd$VZ|vvnfcr%{cxJfR{nu%ayx0Ep8tIlJt)nm)ouc^Mm(ptIRbB;@mAC5FW^ z4`O$k5F&Ea;eO-t!c`OQ^zK5*QbjNu)so9Qn7C%TZNJ@-v6}z3zn|!v8#uiIuX8S- z;&tuE2sKYL16iwm9Y7o?(k{ zOyewEU0FV=>ii3QcG4FI_arIAan6O$w=Y1#?Q+!@a^b6Wg_3=JeaYirGoDivh<At=CH?vK zGGE-g$yYb;V<%YgAORmCwoAH#mC+Auu5*T2<_I}d4<0bbNuQ;&1pu94R1iBPlxts&twAv%Gse6?*2Gt4}}s z%+(8L&tAB6Y4nR%F5|3x=E6A~mGkqz{Ido4LeHJMc!i%m`{GY3mz8V9YbmDN=QOq~ ziqT(~o^m**X8OD>#ne_ke&)XDy!qDm?=0QCwRGqEZ{O1U(jx>cJ^x!;@9t-wNvG8G zZO87IZa)a(8*)`VO3ekeRjstGMUUCI)8u-8c<-Z9>HBv3q78wIAVz>MQr*wxL=c75 z+8(O4va{2PxN3+(GIKfM8c4`U4o^*SMf?uCtD=T7{es<~^5^{gscAH{GegPTK%sYb zC@Mj%uqsTSTCO))LrX%^_?O@PUbV3hZh{m;5vxKhZ4RVHaNN$Fp0b$qXA?_(G!j&; zP6$Apc5|&p;xonOWXqZq)qGHrob4w0cW#^_jYu1Lt=7)YIZGd|w7~%A6gnVRv)1NvFINsJK1Oh0KaF}&w2;6AV$HhXX*C04 z`Qj-ENWwy=4MAfC%l6cSvOSZJXg96T?aG)i0MZ>*&i_WDbw|jRtnQS&6JkUS$JfG=vz^v^Vf)#atvALG}h}GeM+4yS=nT%FjBr#^KdX#bZZv^Tdd@^Nsv=$Z?I^10RX@ zgeiJ-_Y>KH#!@sjy(xS<0JKQNMO?^K+j;|eN1CeVu&-A$x zpG&Niq@plS)MyOb?VDIMn6@C$Qc%fX0|EWv8-M;6i-u@)(fpmicmqJOe%?gN^$cv| zJLIE{#thoC)nXYC$^rH6-S-89wOoq@*6_;V`RTg^X>&TmBYEe zs6M=nKCZVd_Zu!=mtD(H!$_sxfP)Icraj(LGJ4Vjilz9wEXuc>9yW$Y*<**ScbRT~ zo=;Dv?Gi>iELS90$*T5cP}z`G#Mz#E_PM8!I_FPO7y^tzZywVnOXgc~40sT^ks!|C z#d4CUOmxMEjsavIUpm*GS;=I=t~RQa;tXf>nUxze>?K*q7YKsoKRonhv%wm!<%Z%! z8Z>J#y6)~S*d9E&0ouW76Q-3|nj9K7z=*-?MlnBJc6( zYw|hX*`F=!y1YJy=0p`J9VWdVq1eC+-0B6y$^FfNZ?X{xQtDAcJ| zTx()|E+j~>5tYFxs_)Jt@;ty!xdOzOU5&av*V@f(G2)&MqVvg?)g1wcl9Ctj>n)RlRmSx&Nis2?xa5Y ze?aT7di4(ju1SUP8t0PH9yDJF@@>MAWiSAs=iDn+KbfwHRBs;hO+bJaBR8qV9Yr3* zP4)(d_fo6I^j4ibNH8QfT)Vb+$a$c=f#2U?zwK;`&&vW=EyIFHSrTMIwpL5Zdh@(4 zgR|@HWB-bkBo>iD{(#Na3??k5P%fK87xTrlx!y!ol+&AS?{q6xzb5P#h+{7+hTMGmL&u=_()E{Y`>odpMaOyLM;IR9mi#{Gg0WM-P z9>}bj+$nw5t}<&GyGL$P>efO&j}7Lvfo#PbG`phtK4NotBRnjD)kp$?EN+x^c2`?b zZFbADp zkMxK{s0Mo_CNf|$NvuLx5jZEv4Rf=MUAMVO7ue1`5q+9CaUDO0=%16NeXwC$Y;#+q z1_Ma7T-jsc*48)Hw@TC>0Pf)o%Tu_>ndH?*v|;e0s1cViE_m8)EveE&879&ujEg?i zX4%*PQ^O&RxK)+Z;iH@0pH5d`Yhla4)`DCxzz~Eqck$E?Bk9D4b)%#E{Bk1(`}%U( zOg@zjUb=j-hkP!CngD)r=DAz}mzUWt8XoQZj=ukps?mt}o-}ixJ*-*$Y-;%z{?&tn zU>3<^Nam_xtc^q(UqvDwv7ozdY%4pDHa1DyBomw+K&V1*Q`4m&zXrl}P!VCiTetdz ztgc!O$B;rvF!_*3v7}&N6acZSZB^f&rbXOUOZ@=p?ZrL ziO0`2vdGro0q&DWb1?E03tS9mG0wYOtKVan@f=q zR_#`&qfOkDWK-5jF)Rj**8VI*3)zhoR(56CpmrsIrgzj2VL$rt!@D~*Cx`i<(Uw@P z%|_~ixxOcN67hfB^!kiw7ET*fSQojde(b329g`9*9LYfReEE4*gC*$B0Hm zu!wY#mn;Sc4i$hkfjKb{jrAgGn9z7H#p!a!m6fv7h%aZsuT4)?(L}f}{7Tub8~31VSxs zk}Jcg7)^Dpwur$b5H}BWPBt?v7QEPb@bEMidw4{7p%#%%pzUHqC+7Gy_TB^%rcV3` zAiWDO4Oazdju=s5a|KUPxg89)%lN-pzYwcSR#T``GJ&WxBUm7XLS2Yan@EH~3&Dcr z)~<;8v3_8U#5*^D_y?v`1KHBGR()>=Ww@ytYv!Px<$;nlRtP&?XgooWaxJlPk}_%*u)jts)?E^G-+R({6F`{u_Z@Bd}H`?K$< zUt)eR+s6_qym>H^Qi329@f-FlED!+4fuxH)e(BP=nf`vsks|)*jg4Qp#HqCHdQeFF zhgIWZABh-vtP-av5i~0aWCf7$eUJv=Gg5aw2C0u_@N`z>_v!HxC%SK7cy?}jj5M9f zK5_qt_sT87E&?YL{-Ws@UjiUJN$%p@?Cjj^sgeHPwRMa9M8(xv3U24|`DM(O&9agJPlAt2dq9>*~$7Ey-2*IRDCzl33TL*8o3;0aG5&jl4 zb*4(C2qx(M-3OcOeA1dU1QR62(cv*Jyu={WF)<-&o-z#5`Qc!w9jcD3bdhlW*gd|iWV5p&w5C`Zw>ef!3ZqKV1BRaDp3HXrR4!z&N( zfPGx57)XB7Qu>y+cF;Wa`H>jX#M93{e`zuwwN=d~b$exFuWXJD4CDq+jScsK{o=B# zIWtsgrOND&M_0`oP(6p@EQfGfI z5r_y5bh1JII-{EbQNdn0V6SZK*Q)4#LK-qWG&&|!BDvlSE5&ODlKSUAcV>Ko46rg+ z%@gB@%Q!TKSq9?NC`NAV9FpfMgV1-$n!ZbZMrNPWtIfx~rLDteLz3>Aw&OWn^K&!w z_rmArC#KJk;e|`kArIYo>cx;@r)-q#rkn1ChIF(YSC>0cscZCf37xA}vvvrVN~VU% z>x+h>#&&g2L=^|S2kIqaA69%uP)Xu)-5_ z>Cy!pzUR-LJ#+T-kGy<-`t&(G6f>ifRB4&bkrPy$HaWc8qIB=#Sfs*>ydIYnuxp4d zhoiumX4nJGJOwlLFRi&bWcpp_TswpUrHp(<%jqfYo*HFTRRw%)whV8 z2c#Z`N#8kE?P#x!j~6XzvGVG~AVf&U<0N);_O{^bW((QjQxh<(lpCPe(tX6(Gg9wp zW_pUsn*(W)e#-tsw()k`p~3D)GA=0~U^GGgJ!-bdJtx3k&K3h4{`cp)#%eDj;X`J3PT=HLB0-}oE9@{MnN1HpIY<*)zR zH^2GK^XI>*{GH;Wxl>jr$+A9PMi%bbQ7Kr_NuMuTwJ6G+<&BPABR*39sZ*PqC$imb zw(V`u4iY_d z>o8l8KJ}ZrR`Vj`%4gioI=6qN(rnJptLl|2&p&_V%H_-F#`7MIGD97s0#z0eygwR# z@BoMnJ~;XF;6W5F^yc_@I?9)Q4EI97WfvDX^J6&Rz^!3RQj)VO@$-zZkh4>^i{g2c0XudZLp^i^tCEf{;Ftfv4 z(VwhIkd5B$4J@VJ8$fMNPo%)tOqu!Mz*|bmhyivbsZvwO8Y^9R|eyE?-Ik4 zo6&57xu->FnpXrGebBS&VvpJFxOHpgP?hpLBU!)2y8qyoKC&NSWP|BfUU}v7SI*6i z_4f}A2&GVe|LN1Sl=hlBHI@0=*M2%hGDx+0nhXYKp>S+@abq~=hqIwjA{LHm0FDPs zo%1U(oba4f`5tPnSDGx1hp}<(R?V9zo*!>YXa5jB1=z&~g(8GujA}-AXV1}}bycd-355cwnH}8? zu-_By3xDW2{alfXh2u#(R|7c?RQyQ3$P*4sAY+EjAx#e&h7{|*+$e1F<7dleIYdDu z+1apQ5j_a;BivCg3B95CR5Zm$Q-o@r6ZWI@KQJ*in1^p=az=NUecAa!gA> z%hYHgc{u1_9`ibi`x9PAe=u-tzZosW?Yb(8VE=bDMo5SeHM#YRjAA-B#I~5292ZLa zAOGXcHm~b{U7PwUuOT>n^Xp&Ue z&PcRu{9Ig1G!zXGl~q3E+;ZU$7A#JqUO ze(Y*8X?N2TylPY395gvXC&|u^Q>-0N`_e`vp6dyhRU>jXI|Jf~pPI^`zrfk1+UeE#xyrf`Z|0V%*g2i;&5%P z?s5kixy2vc z)oMfg$mV>!61kim09ibzKe>3}bDD@op3a{?KQ}`9A<9X$s%NX}nXBA-e#h~%q;&>j zQ_oV>Ggdq2`X^~|EMAamvg3oPyndmL@y}o?=95ZER=3}<$M&hhYwKuPd;roA^mtKi z=7lWfi;fPg*2%>g8p`|C3g*VG8+cjuasLFpjAjOeM{;Uhd{cAhFU|ALk>L^U&i+Ki zE1~|b_^ms5f?-r{Riy9r8ylWPDrh#I=xSUG_xShss@>Ya^gtIU&jw>CbRREAN%|#@3S#&pK<36420C`2D|Iv-aUt7$3#7>Dz!xM0K&NQcw^~( z{WY1fumtPF(F9J2v!N`$62#a6jp*9T>M4}J)~Aey05QG zlY|}{U%SQO4aL1qHzkeo`Gm&}hCAqz9Hj_!MdI^T zjcXeOgAYwEgl{@e!Fzq2zd{?cww_2F0y=jT2X`hNCUDD13c5hENYt4}Y@mxA5Yuu5 z;!%Mku^OZ)gmBdxR@WG2)dnpEZu}r6delWYXPV?Jb5AG)2k|F6famL+*HF;- z9!TvDM+ga0&dnqydb3I1CqcZrG2kF)%3ui#LeFx5Gkv>3kC0M;39Qs%lQf$adkOy# zM8p{Js->-xLR~V-C^QJDMx$;gPwGOJ>X>@}EEwMjM?8TXb3p*l$b z$8U-gn4GNP;zFMx4&*8BcNh=|Ty1KTYx2>KNsk^#=uyR2rAH^UC{AxaU$2{_j-LBFg-FQOW{+oE}6qm4i!^Ry|#>ERv?>1!w`k+{tYQkdPr$F-LRuK~aqf{0?V zhc!>(`Y4rH3-&^(rPtM~tB+_Muo(k*L%R@8sR*IDL5sF?6;N)3C z#0&KOrDZ;Fb{|I!T-n;On1QQoRZd0?`k0eI%mbBsO9XSifcXMWAx|uX0IS6U&_`~^ zZ|glUE`_K~H0lEjEdqf#S1q-@AScQb+^cmXgqruEx3^S!;=OUgMf>~aPk6s(IoR33 zta_b@S}#zB-Y@|rmI#0iFRzu;Z1oCYH6o}vBSLV2AYKs+o6SZHR&5DsWy4^!pp&X% z{zzV8XIIKo`fY;K=|* zkEAGB8hkHM5Mg56-2RrL>UP&-tW+x(h#D-hPSj2OrPJvQdo!PMw@G8$rfz9TR6&z7 ziWVUc=Z^73qY(wp-J4FOGljmKQV>9a*&K^FV18>0ATXXD-l5Rx#-qKWMgQVhpxBNA z+S%cwg3S>2JWa6kFTqFcWi*kx!=_iD%;RQO8U;(E&)motpxLYwPvcB97A%%%LjKo1 zV=plJd@6<$0Yh1FM435?MpC<$MZz7&;N!wm!44q($*dObrEQFntrEpb3Gf@h*%1E1 zz6YGy8QpWV2*+wFmHCf(7X%^@sSvLXvMkE7GB> zaBB;eHmKJdRBLhdIEc@Ryv{@;J$@gdOM}h)+QjBAi)}O_)VH<{ zH)9f|a;pkCv^B!>+A|q91u{}ISj11`aq9D^p$iDZW-{4KDlf}CkoLO4ix5#4(x!$9 z+2|Ij4-p&F?~{6n3J8Dh3ifltt1h_NGnvdto;6EHfJ~AhQg7^UZCNavn>DLk+%8LN z0}Ra8R)yGFCrU6xYbr%r+|~srLkzp1)T>36LeXzUio0}W#NPUi(3&q<% z)CLGhq%V^nQjGW-#DSvLR+pAm8!F#)q@GW3t>}0%UzT9~el;-Wy=D%qSxQ8Fwb{|~ z0$PXS9;)6wIPiK$fb@7l3Zu0eBp@yl))!n`vsiXgDSMF1J`y=X0%>?aF)6Cmdj|)B zz#uLM?Yi(=t$?mVE^3yzKu%}+z$d=u4WMFKKy=E567v(j6pkm1Z0at6uTJRCcZKKc zotr!J%oQw<>5+6YV7CX7J(4>Ti~*xIKq)f^mT1puYt@i+3s8de#%VEZsg)2XzU}SK zOwG|!0$wyuCuv4h@Ub3ltmkr}{Q73q8p`1?DIzCd^AVW|5hL0$guoIYW4qZvpg7p^ zM#HAJTeqzHlNF3G9BN={4NdXT1B9vcLNir?g?(x((j) zM4jZ;meTjJDu>2y-`$qJdtx+Git&lj%zkV%hsJK--8Sk+qmf+0F|RiY3Jes4)wTy8 z#NI{;Ysl+`-&nO$56R}RfA_l|Ro&Cmfk)qE*ap9Sp~qwfFpHPLZ6;wb5D5oBp?%xQ z-rM63ak>zV0we<)Y;B|Uwy4iBduD&X zW<}8I?S{MU;th4GJ3DTqM*kosLfyJEVnr%-7iV9>h z24%@wHP7*%05%sSdr`6O7S-#amGO=w&_*j^gMDmFipuP?TA9pe7_D@uhXw*N3!iDU z`t09h4v(LjU7lV4zPl@TRm0Ykr^cG?{zN}D@%L!t#HlF@Wqn6q?Y4A3ee%@o44?eT z+KFnP)uY|eZDspoH4Q6AH4XJ=ih&_M{!C}NS)P2R=EvHwooHkJL>u0ZwXq&GEIm0d z)y&DCSf{!()g8TksQVMK%_lrQtK;g`^Ydp;dx8#Zc}Gwy3NFzDPbl4wtG54~Ae#>l z&z(DS<{asS+Dc<+79)gjPt+aPOEDKsxzn%TE}Cw?emd8=gI=MpL5Is^zH|wW$7zQT z8jH5YrOVVglGKgv&yL2M z@3!3iiE*&|6TPnoC;Hku>Z|*SN};=h^-t7~-l2bgUMYOaXuB;Oo~RQ0xHi4s!bN55 zi5AX$Y$vK?-BEYjY-PGX(c37WXk+`Rjo)QwTw*&}9Zo6$Lg+29L6Sp_6q0kfcJ?+m zQE&0fQUu87bE*b_Nf_>J)gADjKYuE$YSkGn8*2E}dG4V6r&cAzn}WL%*h=NoixcYW z{)aLm+zsS6fUqYrgx27O#~D5*=vB%v?m?QB&GeS>USJmjDMxlUREH-N7dC5$RN}=b8Duo6BWw7KG@sS{op`!2dhFQ&$TugScne^g&_c}Z$|BF5@5>4#D z%&L_V0AIc!@z@1?QtH3%94M3m_1hf=EE|JE2v@kTpP06uC+4j?Z4;k5Z5tbV1Zs@N zdPUH@kH7xZVut!0{%6RijWjf8`c-?y^AFU387_!B+8&P{Ti|IjDe!rQ%v zX_JVAx9as2)yRMN6Fu(3Dt&ymC+fE#pexcjkplulG~Ud0o1T&|xv z@%^Qv?=_i@WiPIyu1vSFve!(PD*Wt(*3rs!Wnp*p=8yg4-jP19%ga?9$;ZbMJE5bF zAN^j#3gXGEw`XU^sh(NeSq3(;yi;YXRKXQn@z|nalN49IO%VFK*EbC=l3b~PWHZ|$ z#!A~99-g)niXXv_wbM-;K`Dt>=zx{V=H}6n-?Z9Hl>V{UVOf@%RyL)wy}oqk_QQ?6 z#)7X=`5r~5-~MoQw?Y21%WlR0>Hah?~)i30Y!*=QF%$B#Px$%VdVYec9j zq7Doe=;@m+2}Ye@JoM{h`V$$`*4h?+)Ha(C3Cv*pk)HOxg#6kzL6rQ^iSu=4?%2d- zDxZ4!_v(v6has8j11Db3YUA@;Dt(&{li1`6iG0|F;|QVe3BO3T8@EP3OVk5!EPZ|U^{v7bOF9KfyTva>yc z^zRP9#S^Jx%1=y;4D=W3KY+*mGw3VmS>onuFSv1$QpiQn`lE$xR~wgGCz49BW3}yR zrQ3t1KaPtn4kkQo`;3S@6^skRSs&=z!DAH`U-F8YwXON7{dfkY< z(%+vBxiDi~Ki~q%RU^tzfYgqj=rEMKFooC4@73&_KfX{5yCf3ucx=om z@otLM08lDbh|;STS11KQFxTT07X79}Vtm5{reM>d=~g?z7*k&0v=mot)d^QCOG`U7 z6IV9)k;?j#-j76||Gze?+$EwkAAvCLxYiOgax=AvhGlD}7PntotLr-r5^;rHVi zoy2@U10SI_^8c6em^ECD8cIf}3K)>6U>dRN^%e^HA4zxRRW&RYT}{eb!)o?`^wLnU zXnp6MU~qXE!f?y-%EoS~W$c`j-{Kk0C3^FPp-e*Mu4@GInW2$Es(n%owU3Blx)+EI z=28kCsCcTMeKJ&tgaQGI6O0WPltR%|E^TiXtxFGf+g9$|q6wABR`e2gvfjLT7dJKmRn&k$#mBRVWFX7-lK{G4a^1%Ox_Td9qz{NW zi}J_1xtaCu?}sS=$RB_wcT0F(%1zh7;eipZAqVk!Hy@+OD}R2k^RIlpV6Id^gYfg+ zUHM*bThsEh{Rocn>6yvdL&LQ}$~>Q}z{ z*Lc17?Ah6gi8J#TCvp3YjSLnFW&-V#&>a;m1g8zqE@)MYQ*XV62(j+3e(;un%O2b( z@>p)0HQo#g_rfJqC=fdDu?WPz0d0`6gP%Gt&s%F1(+$I5Z_qO{nu%X|>glJSy5b3p zOhic>N{-Q*EE?w&3hyF?im{Q?iu+bXdD>sZONp;nk0eP{@!N!p8R?H?V|nd zw}Zx-Eoi9P^w0htpS`sHAT>Ug(29(fRY=R6ji$vH=oJccYRL5A9&*RCfUCwQDM2lX zal$S=VHqpL@KE(cdo4pG%#E`*t_AMiY zYJHpAVUa!UG1jz-+6`|YsITca7||I7vfXZ~l(z-ow{h539Hhsr+@O0a7!ZtiHkj+Jet&19Xbp!Ru2Q$8z7XB~@ISw~)*8Gp z2s>%^@Pj+B=3M_^`QA>a`mUV88L}S3stP1ZsPj~nJj)#EjAu<7IaM-eX`;9;Q_y7K#chJQ5S67LeSm0Ty*SJ&{ zBCXc->lnT_9<|(k=)vP7L+k6&sHztEt-iL>vUh%FczAANcz9~0)E+;h92O0={bJx? z&oVULCSy52LI4ZTd-22{?PsP3WD*ut%JHl%>udB6Xjy6m0P2*>*Ld*yA6;($ zcJH^^?Ki&<)csz`WT!mwc7yWQVs?aLp^!It;g_!{Xfgg!=;^1(8Jmh(ObUPlJGxsj zW%YXOv}Cs{d+V!U;uQ+w}*lREw@cZdvp+gz{rHD z%Ydoj<2}~4p}Y?i7KEbFVD@VDOk8`+; z6M#A)Wm;XdmCO6(U65bp-|-pS>zlY@w+?XZ*nl6BHDxpdndYoOKz>---P$TuyDS}U z2(HbF!~spXnU(W1*VI7*F&#Zv&?e_+9CJUz=q(OkD6YoG$IZ_@1;yH#b602ar_4Y7 z+;iur5z%MPUVQqQGv}Xv=Gm8Cdg;erc;QF*=ULS3McW&1y!lt(d*}P_EPpFzRPz~t z6{N1?Z_%RS_6TU0;L$L1w70(f=dWYH9Tz-k-=Vm4;+#8Kf%u>B*l<65cb^7X4vorG-AcJ$9yEHj@p4VBay%B{p#MC%g z<4(VOtE!c7X)3D4+}B63FH0Znr*W5280P>m8V}ZyX{$?(#)92|+GT7vD6-qx5n>+* zVXHn;{ku%(yBJh%63;$*Ija@^n;YQ2%+NKPSApVO@e=RQy&6~wlD&WQa_DcLpPQdM zWvf|<_422t>*12+*2iv`r$+lrUwH1!)C}ntnGBh)WUW^l%MU7KRg$+(5DSWTJpEua zj2h)V;o2h5K%R}va`Az?JsqryASnn36cg2ITlRO6P0Y>td~d3gUEqm>4&c~|0M=fI zk2s482qj0kX|os3o;^zzD1n2FFE&VW1iYLkVkcr1Ec8OY8j{GzE|0acYkhD3+9jMjWJ1@qnbQ)S94$CQc$Nh zHzoG^!TO>p=Gt2-D)r82G&JjT&qbrpd}6NI(?wstLNSg{$uA4&6+PIW{BQke@2y9X z`LOkxC4F7FKenmw;3wa+eQ>>;db&4q&C+{=x*rw&J)&I>-Mjn#8*hH^dp_Ssum7k2 z^v>;v`%*bt*?0BMLYp?5^=xXXLGN!XwxSv9l)Q~alaQ<~gbylQIamp|smzpS8%&=6 z{9Err<*n^IeZGIZbN>D|J)Mqb$EKzxLB>xE6)tV}gkunFgwcT_7q`kIkx&?X5*%zj z%~LU=9=yD+THWYH19!48%G*+T^4-7scSXma{F8t3&;IS7{@Z`{M}PFs7VYD6Bargs zhX#9#uH3{Zz{8Q*v8_k7E_1)+ot?F|&y0=?4-I0G^kq_pXNLN7BJyDMQ*AxNm!Ey< z^Phk5#TPH1pP#v;BGyOyfOp4yF7H+4<>IwLh@8)!LYpg0oINMZo98IUoXZUi=Dzd& zGMbaqjU2pt_k;iVuZqrp_y_;%n{bxwy!p@n;J?@9(9h9-#0ry>KRrG%j`uK^iTC*0 zmo7SRaTLQs{=gw@7~SIROC)`m({{2)0%jshEmHBE8B&a9`=yX%(L_;%O0fqhKZQ0_ zbE(v9VB@=B`|a{J;@2f4BVtRf&h^esT{DDNbSdR}{F`a_blI&&DAd-uQN)rNO^0ml zDwl3e863cFN(&XMH#<1}G%)Z zBjaf6fBRh(i-ia$1x6mNu6E|&@ruF(W=JO0a@4*4_;-qVaD9Ccj}&B%om<7jc+ET* zXrrQXkN-O(!}p}%&1M@enp9srws;LrA%RV!v1}jc`&iy{&E}@gf@5>Lu6`RbZHVTI z<`VDO=vZ$Vd5^PN+J$e2fXcys{aeI|*xryUS%thOMfD&}I%w~7S)AU(-F+vNcn+K4 zHM>?iFAhS}vH)P9^G>_hBDs0Sc?^o|j?>FG{lWfvzH!+|VrJG}&e!MTeU#W`0 zA^{dX>QQh)Fi$}5rajXW{Ya{ZDVZWgkBm+j#*&Kzbi@BApG0px1&SF;dC0y}U4|yD z^#(Rbz3!u!htpZ9#9~j(q1K1~T#Ey#6lJ?mb~4G{l)d-UXRfmgUY4;-=#$(bbEC9Z zqBPyk&Rp8`;`1-I#eU(G|I0u1CEuwZbr>>z`NBYfI=&A8wR6l=_(=>q|*itA!pQBK4t$;(j)l2i=JC|z+5V^n0@y)PCQPu=z?FPg;U)O>w$zjur+sOdd=qyb@?5pr&Zy0 z_-MPEejP@r3X`>1RlE{oglCI}kG2*fa6V|H51-67^Bg_pHie1};0rFA;bHyH=4NVq z-M_i%8hYxfr-qbAMM0El%AoblHzSdyr76@UNNjA01jD{padeQy-=MwIWLTAVG84ON zyERl4b1*SHJlGcrM!Cr+Ceuz23PjAGD3xL(*cPYO)*dx1iBpr*PJo#h4YX)Hz_T<+ zuAak@BV*s;cA0U0qT`N^qhE-7b9uMz3I^02>>nkd&)En)hek^FE5yUiPhY(JLbW)Y+@5hi4;{V zTals?mpHLw$H_XoI78WqQ=YrIDZ889?DHh6P43?H{UguKI?0n8CwVMKwyZ*lqSyft zAkq6^W-$G}zjJ0l5TZ){*r90i0CT?YJKy=f-}kHU3+M+az_F=5%mlEM-{e-xmoO64 zM0l*QP@%AAV}?-2i6@_Q0U-rz)@R0&ZYWUJlV4w3d-BP%qkG#EJz#zaFnfvbwhBz6 zuC6wdWCC#B?_FWNw2tYW38g~=*gG+c6w4fl7(yZFdL$zLgdzOP4nv?lVF5xEVv~S5 zhy^%FZkE*{mKSeNZj?<1!v`PmYW4>o7_j8;kNi6ieQLq%>_t>6G*3XTR!MEr%1~qi zGI+>g05cCAJEm6iZK~DBj*WIFTyA9SdW=ll!=6U4vB9FS$Oepn9go28Q9YlvPYM{& z1h4g#tdE@(E-~-1g0AMt%zcB?&`>V%baZB*)OJ>yXQmiswD}FP4ID7as-T-l^bHIU zMc`2XzyOL?zVQuEGXlp(x_l4z-rai_6{sWx7?ZlUw{@zG;%$H0x`|sKAfj+{ZiW>WBr<*%P?d`LXiTx#dv>M) zkZBY}dHg|9Czy%G1iihlDn|$7Hk~mtI4Y6w66z`3k%)%kJ+RmIw&|;P;Fw(!>yh{l z1}+zoyBG}`vq6geS1xRgKU461T>A0<%A`_F)U*G9k&g`{ zK|xPQRSBPmN>UU?mn*ja5je~M?ZSO};t_`myn_fc6_J%C1Zx~Mb!B?FEP_TTFPCaS z95pdwcKBy+L8g5;n-?2QdNru1;d4RA8O~Rg3Eank-pY}$3JF?}sPt!e2$LMMNJ`5K z3$rtGE5cl{2KBbYzdLTX779OETT`q1hxQL-I^)5B+oV=&jTR-^mC75NFqX!I5yT&? zH`}8Yoy+YD1Oi?s;VZA@Yl2dFhtEg}L{^4l*;y&#Y^8)PN#mj<4;5j(@;%`HLwTaP zE3FWt1&9zD)godjINk-D3;4u<+bOgdRS3u`y?6ONl;B&!i7t=RVmxHCrK54E-YyemtDu6r9TjOPb*_~e z*_}q#QY*a=x5b(fw#fzqIY=LrK5@O!ocr|p>f+to6B9SDUVR@nLOy>@kLSVXt@p1d z-UVTnr{7K!#Xxv=cc;3&-eXWxR_baTX9mcZ_Y^syL(vaG;2$hQcX zyRJ?+p;4IEhneWu-Sp|xUT=R$C8%%A+AUbyy?H~CgZs1@JRsi2P(|6nW;7ausb0%9dv7Y4%+=DUwM zz-AT5kZAL{0{xF1x~SQ1gITg#TPG(;_w-Xwo*8P7yR24wAm}#8ge61d0Mi;{EFNhL zwgzX)NHIKNJg9qBi7if&R9k%K9fH%@9x;1=wET*0<;qMc1?&8pZ%40Yg~I9F?LJJg zq8XEE=3(AL?jFsVH zh!wMfA_gZgHFv_!leik#>~_aR`a3X_`KLUB7T7Qf3LngCe`s2}XvJVy`Pk*SQ&LD6 z(*xSWW#)GCdJz4gv>pK_j+Dja1J3B?rV|RUc=pzSB^gvmetq{{%0h^-Q;Y3yHOJ>qSs~2_WCW2nFXD?5fU=F;EY5IvKM?M`z+sm(2>2$!3d`bzojc5UFc_jv4f$oYrA; z*bQ5tMg1*#pgZmLdsAIL{tO~}cJJq(Jl+dl2`U8+xHLkhjOtnkY*?ZR+B3hN1ZAAb z3`PnRwA8x^r4$wNAUhTeAxtHFV!-^WsU>%EfBb*`$^ZD9zx|uP{Exr;dl!}Mq(y|l z_7*U+ioubgOj|fHbn*-@fkx1?qgd?eK?x(=B;iEN*V7X=0?lV$=<4ZVMJU3zv03Nx z^76v`Qocw9B&e~~HN-i4ECKVvG~@t zxACuu#k^46sFi_-E~pZEsJsDfS0W~CA9th9sRwO#Wfjj#)h&(O6xPw@>%i!Ms@C$q z(2j-4YV11s(m@0oe~11Azja|0@!*h#AT1j3W<%9Has;u2qel+m=Ove`gpvOtD}4Lf zS~jwAS>`(uc-&0Sbw{~+FCurEL z0iXZ^@^ymGZK&<;Xa}_6zD}1&B&-t>VpRz)Ne}4eOB%dVn`s5xXgybeKbN`z#fR3Q zVC6_Hu}dqfH{Wf}HJ#}|Kcl*Et5Ksu0#DXboV!^rt1HvsRV%1HJ$Qs(4;5R3jt}7q zLDr6d>-ycxKYim3rmHKWY0N+wzPaAeguD1r_o7Xw6(BD`zg-{d!Z3?PWEgcM18|gv zIde!Lc>VPs|MfzgFeG% z^T*-Y**~DF+=G*9S)>W|j*N_SIgxrT1${*hmxL7JShmn5Smg*TC=+0yW0t$#lU>Cu_%ZcsD z{=UwLUa)qfHTw#<+=-h~DC%67g~piony<}&)nU=S1QcP z>-oj?jitNeM-b;hRt$WZW}>P~wOzd`19^h16;wYi-3)i_f z1STx4#pCrrnUG22aj_B69i_t_cDp57dobBK06_x?{h^~rj~?8|3;}XP1k`H!xYZTJ zoDgi(RM#i50WW`m1n2L_1OWAd#1!(U?zhp)J|eXs76#?Qv*sQQ8!zLUbbdA|zT3r7#E02`(`u z?0x}gK*XqSWx*;a5_MV#+p8u~L6vH@_W(Y(Vo{+)F|FSCrmgpC|qxA zi@@=Mz-dFMG`S;fK>75UWJTy0QnRn4ABiW@m_XnnI9EHWQ;P&I^+WzrZ!!XoT&wkQ#Q*)Pl<2;)f$TEONiDxV zKQp_8MCW3ap^T)`>QYk*k-ZRecN{wVL|A>QKj?OPeZhD#*`5em>uY%j{B_X)R69A! z^=;4zQ9--*;lHF=L)9Jcg~M=YpO^q1q`>E3m6gAH18U2UepIQ}n{#~@t;c0*zuzCj zib#h70q}IW2L`HDT?LMtnh{M5=(u2V(St0nnerZnt!)njf34qD2`+;>l3&^U?{kd!folcQUUvSzio=q>#<|Bx zNW;TR=XE%~g*5Y2^BXN2xfpHLv9x|t`p8dmpW!Fok9+XfS5#TicABV z*qT^lgBEMEAxa?A+I%nwfTG0>I7oaPe88&laX1RixNmFBo7;Wy&pC+a=4Ybyjmq{n z`Y<;DqKf$a;zkWBTm=PN0CF+fe8J`bEY;d3D#%gm$z{7Q%!qN$DH^-_G;O!o>O;8w z6MhuJ?NRK$Zrvf-zN7UM%vuxCgZvLBof-jCI1nXNwvM%za)I;=rOr$v38?5)rVqBn z-jK2t3vIQs)zNyZe9!S+5rJOjx#s-rlrCeEyUbnKpJHoSpI7qIg`4VZu$F8Zatv>Q*;Pw`6+OLS1ETEs1tnctZAx!XFLEwf@O`L&YG$_}EtWpnP!)yk zfXe}pfplX-i?<&mUXV6yIKK}7^=7klZJL)wFHoO;)W;zc^E2bKk~1pNXdpW?@!9ZL z`F;64^fmmi?d!?MPMtiJiavee!r61@Pd;)%^yD+ZG0*P**K|*LsEyK`(1D0LvML~? zn}}ij{0Exz{|gvjHwVjF7ErVSq6|dN$&UWsUJ#tLM|+Vv*$Eg_0;M&BfUQtKEv4TM zIl=~^-IrIOJhClI=j?n~M6&@?*yRC=M}j=B!OzF91)riQDcc%6XK=!Bv%$rrjepAVg5 z?EL;DpGkX9stqm~Ku1KPX}~>`saui_b{=*gE191D$ZhTRI}{Nn;W`Dr`-y86nZ4L%3VJKWbMi_@l3>CKclih?o~a92eNggUa_h;aeC z0`4e1f(CctP1}&@d^o5*$_Ux?V0VsER!lfT!P`J2j(As`ANyZp48uVel?ON+CX>Me zq$&wc`RR#k*RI_zntZ*-&YnGe`s~@WNA@2)diLy5@XP`(UD_mdK}-{H=?-wYsEpup zQE7t6F3m*4h$i4;V4h*wc=HXcO?~je2UDwSH3TiHz<$DN6zd**4cWFP-HS!a*p_ZBbe_Q${!!9}DIGXa=p^Bw#e+IDtkpfB|VZ5E;) zLn=g*R%dwcul&jZ=C_&ey1)I+Z+_!fUV8l0aDV^alcyd%h(lrY*s&8Q();!?zs5>X ziqj3pkE0>cO-yXUrK3@J(xpb+$#&Hf-|KY;WLRJy#CGh|BxpH#~z8Ikk(4uky ztPk2)Nmi3kC{n57?2UK+@gM*8AKu{GdJ%19Y&K(keg?%fS3kV*A?~NPY{}$yd(_|q zajE^RFd5PBY+TGW&Z^PD;>3q*pcZ?8YHH|z5$-Y=4M@or20xl zuCzi{qC^- zuT*0K^sH(N-A_z`y|}nl*4m&L=*k7c^k)f%_o55YIs?9TAMd|dl9|2u8gknC+4>_I zt1p7FRzX*dcmdc2h{h9afEsnRp_93=UK3s&*lIT*BoSYRyvFbIHK9xkmv7V{+#FXx zzJVOu*$JRWWD$wPxm+>p7f2zPjYe>0OifKrfpDopKRvL--Pp!}DLjpBYRf01}@ zZZqqqfkI?Fe4tI~LmEZTj`s#aW30G3I^Xqfx%ZCg>`F!>&gTy@&$GH6?*{RE7*U?x zZ;#$sut3x~Qs_t?HzI2`B!AtK*5r{8_{r^Sot?8-QwfAm0` z)uL0udqEYoqL63T(_6TwPkrpur}uz~(JiGq?OL@B40!FCJvF*AA z@>n4w1$;OUqsV!J)u|R2KaLfLyEi&;qW|OW%?TH8e@w*#d3ro_?2)p zbbsw@TuK!4GT@{AtU$QhwBGTwlsOM?xi}^2-s})8sG1cX7&jPgh2+eE8bJV!NIT)K z;2{~a9_UQB`&|~j*62^1I+!Lx?%JMH2gIgj>^Bxr+sKqw5;B-y2VAfwbM|jwEc=vT zD1m_jtpn*ECR-5I5nY{8H$prhSOyfYT3MT)n3$NaDqV1-$E{8(mH}ZMd|e*c&OhQ-Ehq=5$3Md%P++sJ3=!!b=OJOI-)i)DqN`ts0@4f#2C11{tCU zA$*}daR}fNPUrEn=N<#$!RUVY{=1_Q8?z3RCDN!XRpr&YnA#gRp@CrXSCnuc1_C7L zA~szPdQ48nB8b5a1Yb~Tq=GC`*!h`j?`oOrH?*1#;{Xl=2Frf*_^DIRJag{&;iHESJyH>#K6&gY z*I^^8f-jIGkV0aLlGT7Og75lvL1Iet&qaIOHaG}El1CnS^iiD+j5uz{`S{>Kl{w5} zqQJ$98ck{5S)YSfw#9WonsM+Hid!mqoIOIl#p5njgnAbaold0SoIZW(Z=U2@_Ho_zbG|lL|M1#yI`zoGbCm9hh zgK1ap_c<)Ef-F`O;CM7hI!m^NBjHHMi%`&Lqqe6VMei_eJRY}8aJ(xWkF`Z{xJQDH z#~(YhH^iJ_ks3{!S-Q=xuKw9;KX`i@`s3=IH~;Ft{ukD(P-Lj2xE<>x(}9b9BYOZY zo!&cy3%yLhkK#Fuf=vg(jOFx(Vrfd#r4MJxW;(kw=|r2)e&fcv#7jR8NVo3YK$VAd zQ|CcALXbtSEXss{r+?8NG!oqq#E()YUBil86G^FDug%=t36u}sX|dF5|H`hM`MmQp zcg1OlWR>fC2q(0srz_Lb)7w)x07nQ@VKKb(=g*&g?A%jNZzF?JRM+;#8<$`{mlww` zQ_y5`ezU&5jP&J7)`H*`xniZF3PFk#^6N|2-araL(5Rteif}mWkkwbPH76I%Bp1~h zg~4PpS|OpKI5+BPdOfKY#_7xG%kufpKXrV6e+ED@>CT8hfKT$o%ilW0{1NjS_vep{ zzxsvGKmWoP@pMJ`DUq?v{af*$|Bv?&&DDM z-diy;)Dww|>J~|pLh;GmfvBru0K|UeNMQe|PFkQ8sN);?9xshv!Z)zuE?mf*es<(D z<77PBY6VyzpA{~H?~fvuKBsed*wueD-Xi#|>>&7!wNXX~KgL$;9Q)?<0_oA{Zkx}S z?0whCuRPg*{=$pj{I}o!)fdk_eri9~@8)JO)zLM091Gw-AwPU>4(GR8jqp9ZbKeUe+G1-3!l-Hv*Ul*t-UuthTVQxeSA3x~7lh7b=vI zqt%+jSmGTH8I@j8<|x=O3OVrOfOt4x5`b4Gi!_0dS6QCBeQg%uez~~1Rc?U7TcGzw z5`L2+KfymU*^f!cLa*0pMyVL;hVWUwJw7!vKkxQBo#5hC*GW+-XuPnTf|U9rM)@R? z0sJ-aClps^=7Fw1yTBkY2lsS5?v_>WzVXHzcZ!;LbH7mTsuP*-vUnm94Td7#L=Pu& z{mC?vmf=0b7AH}qP`*nV)*X7yQ1uC~rP%_Pud%pzsoJ2h)+)-i1c07JA)?VJlO;5o zD%EA*SgEOfkpC9s@Q<~HEtPVy4hcoC95@o>YjZ?Qu^59lXB3i0bVX>4jWm1M_IGY} z$L{+(Ph;d!E`zC^8*wlO=R$iN>|pqW+&KB+Cy|vvK!SOZEloi#-kzRkQBI0QOC2la z5@#DHz~I~y$}Ap!))6UVtRFWUpEwg-?j8Jejs}DLg`z+%8XO*icF}G_ajwUyK`2Nx zu277#rb=#YVfqeA*YD-(dMv`89+iSW134*KEP}MXhOC{^79}iobYSx(9ZvY~^;#K7 zj3ip<5Na{{s4`+!rHAlGnHXtMV3si&D;17iyr+lU^AeRFv>HGU0!2b)xjCalct*D| zedLI-B`S7tfu|8^Xlo-m@d>=&lu5=0G#Zf7V6-Bg#T7}rtqxm+7$*DLoc179?ZB5H zTGQ*-SSKoXIq@wMUcXJk0OXz_oJidRYFX3EMRw>w-D0UPt<7?3T8koeb9sFcxhPGF zRAL0o8$2zF)D}akfz`N}d%y$YIZ**S|8bnCrH62$k_IWTcWx-Qoq|!*NOJ zXxPRjl^bn#o27|MDnVZ?ytVwg<*)jhS37Hc#w4+7v=rr|08Y_JEQRC!El)JIBCt6L#%x5bhS_2Q+vvMeBij$qJ$!gZAjF}KY{DD?}u zhCUd&b7uxv5Nwi8aYVNfUK7bOgw%&`mnnVx>ZLk1*Jl|C=M94AH{rEtQTmqx^y$3=Zj=cAvb?t9nze;PzsK-k$ZPj&VI>0?n zyU*|Up)d*3UPiG!N{GSd0eV%QNtGj2#o5L>kfek#x87-nZ(WaBfn^4qUe4#rI~mF8 z`XI^bPNyrc8S!*I4WpHxWOF{k|w5BD_r$(mb+Cakk*4L@csA zHXLM+b!n+oml~V_iyp;)^rqD)YFScpoH z?7BAYx^C>cCj6S6?;^!K`M|Yy*YBOXuJ5-W!|WK9U<8$beF?cXIp`KqGm3%X&thsQ zm`ww1QmyXsDO&M;{)sgB3O@ph9gUgtkBrKl(ZN_O;`f0h#*s3^_#P9eRIKL44d%wp zWjH^UuHQr{+s?P7gP(_QrIj@x89~3?%(Z^f*!~IMvvd0%{@S*E-MT}+eFsVD>_>iY z-2Oc>hfsSMQR6FPf|(W%U8|k@-*dzK;V?UqVoUx(pf;q382zt*>s!A*G}L+E+st)V zp`3KDC7D~d(C3afznA%T^9ecq%^pNZA|6YkL=7u27IPJg7NRo}I(vF7z(1Q8g7O}g zpcd>-(42veggj>muB=fF1EI12ubw5D^r#5IDalKfVLXFZ?II|&h|z2ZxsP7QrF~Ta zq+#=F)EY=DHMr=Z1Yk3E_ahBb4URJ@rxz-2-n_-P!_Q`68=JW`3$vEi8{xlE{Kz+E zc70=I`y1T6aoKUCtYPNFY7{D(i$;5J%HC)92$YC1k$RfD)!E9}f(OB%=e)4E1-DTc z7G-_K2Hiz>+i|PE&m&uRaEh&fm3HQCIo4bEx5mAQ+-v?#&?;aV56hq2JF`usre1Te zscIH0?>N`mckb8%xFL4#u!UXMw|8CN*mYgobv?K1dVSaR?*8sy@64w)cA2`WQIYbF z2l*`ADm#j23tG)G2KnyQDo$OM$s`cV<>n;TgO|wxM6X`ALgyJn6wcKE`7M?fj`nfV zF7M{WE*J!fHYi;_eigK4Zyn$>5AMUo?Vl)U*Nim2HnyuOC%1jQQy-FMwtB0*Td6V0 z8l!Z!^dWvnaj&-dKkC?gUr}1@n~yo?`}}G#GslSA)%YVeJ+Px@wq=F?8FanYS>l}v3wJXWoy zCiph)ubNgXt*Jh5-7cEY;PmU`VYV?vyH9XoHkPXFYNR zDJB+p^uZhyYlj7&s#XvA{48^jB9oHW{^vhkzIKh3T)TGppZ@1-ECMu%M9YrnJlKys zQbl|M5emBT7_duRgm?lEHtv?*ym|Zf)pvdh(XK?mrf+EUQ0rd)Z5#2uoiZY~>pHl7 zO?p}Qkw*sO0T*x$j8<6d_GY)}_e87TM{t8>9%=?Y3rNjDZE3AF2xuUO4@(MmZ16TN2vTymeMcZ$jzbOzoWi=-MRzWh0Qx! zKT&M|AMP7K4;CA@N|{2WihXP=A)g zYQVoizFe7y{@=>UruFaW>FFQriTC%{>!AGZ=<#WxVyitU765#+37D)f6j-fN89>?+ zoXU0?D)%~?8W`nlM}XIGN=XqG8@*}TfiNizs#@*U2XeN_zXc8? zE@!)m;Ma{d?N&b?GMpKeNP2t0^e%*3P-^JyMY;#DP^3&F207As}YIKDoW}{B$g&fVq zlL^GkZLH8>RAi$9v23Uh+K^Y($gQlc0~!}JO~?b4T)U3&$+AG}bfH#Czf&`+;AVce zw??*NdvIihk9=ck`x{N^_bX%D-{G>zFTjA0#e?P`LM3UJPKaETy2tIVF?tu?YCp~Z znLRPQAB!QXk!lP^B}8t$(w@T5LuP_{w{UoxD_i)n1Zz)FXue%YT}%octzvg3r-+De zF}GTh81Zq1ockU9ULNXnb(S|DZawE_w0e2wQARO zW7oA{*Y*AOX;-%cp3m(9i&W5QH6g|%R#_5$Pw?R*w{r%diVQ$93+r`Q-Hoc?lb=Vv ztN)qpYaja8R+#><7loN_o3MW$$cn}w;KMyQ#8TT?Dv#oO(P+Fa6bk#j{=J*|b|f`} zYt0+*srR)-AvTa2*5N#JR)ynE{#SqT|Ni8sKmF_1zRv=$rY#)@Rlw-ElS<|3#}Bmm zLS3VWmC6TBeFJXVd3qIhUE6nEtGBOl`ZJpLM+BnkXuIaZ*$Y}&pTNbE0`fDVR#%(7 z*zqmp!2<`7M0qgSz|8_Rh@KI`9aKMH0~)v6ZLK%K!3Woyd;1&wN^x#q^SV5iGX9fR zKiKjg_1eXuTk5%HT?+sGDjebu?%Z`iKJYT7)#v@6VBCZVOZ$UUZude6ev?x}KHcCm<c#J(WyOTWyERWtjJrUbuz*J0=+&J#g;j7cUB~U%x1M z@ukN{Mn_-e`XoJDvx{c(foI^p^)kNIvp&Bs-WEX|9RVMw?r;kGJduF3GCq1ij@1fw z>2`wVJXTg}O(u{JTkT0G#96qVxJu^su$h$)j`pLDdGO?!i%P0?{=wh;;4lBf@BSVu zUmCx5^Y-}Vw?E`ZMep`EvE<%%y8+c@+d9E z2QVut06YMR0@U#qoixi~uE=gu*wt&-XDPj}xrQG@n{h(o=WhJ;c6GBLq5X_)|2*2x zfVp#Zh5)?ZyRq7kXobtwMpZ;%qQ;iUo*6zmEk-WL?Qs|8}l*?o&4e#&hMwwfG!evvj zaD51MS8oHZ>?-ssWXvKycoF2(+&d+&wP$e=Dc`UbYuX@eN}Q}!v6>=07^RX)|c1^u5o^?2yer3v{)oW()?pIdUx=~SPH)-U;izb1_1Y*6Rp|GZi?NQT& zhF}n50gJ|GW+stK>JqG8*@UL+Osb{UZks92nUPu&97nIW%K*}>s25JX#{iA3-p>loSgIfnKjlTUIO&}l`9o0+?FEo+2PR3 zRnn}Yv(v4r1Nw8WncKqU!vXk9bNaL;(uo)Ax09VKDhf+1^U5o< z5s7dDRTJQj5B`&% zTv-!ZI-wVLT7|1uenPGXJYyF4wKm&D5xnPH$QpxIoTE7D?Hr?xz_^OE@_UCcRxcq8 z_^n_2#XZLlT=41o`cCb;@Wh#8hmRZ`9Yl53FJhR$CKgOivO0`TuYc>(#A>-zUKxM) z?dEFlK`YKtr*ri2({_7bKU0iGLms>Bh`gse9g8rhDR<~qGy=S9Y2nVLcMcqQ=l#1| zvgY0Nd~I65mn(ZmQFWzK)N@kl$jF%k1A{~R1;MrRfmmn%KCx8gh|;k(HO2j9q#8gvBz- z($9oY5Y-$V^1G=@hWm_38v9lfLt&A!gX!3nAxTFg|DmrUqm2?JZRI4eqXjsVN~NuQ zvLiP%ypl?F4O*B>thpoM5Z4(8fCD?gVAAp4-G-@+KY{5fBH%2lrczcdz!jJVK-9Mi z`8@vX>|9$T+Z=K!M#_5@Ak?5W6OdE7BL&~Q!3=N#08_7(fyp3h?n6#$8IA2LO9|8= z!6#5Ejq0>_5(x|q0p?-~`oI`kVkJNP;Saz6C;#~(LcbR!|M^e;pMU(}5Bam@35+TI zsSq}ci)D!x+fFMfFT!8&U63|4Sa4A}9-tOom+0W1&`CIwsOCIVcE#QuxJ`uJW-@8? zN*p}^`VYWdlNBc*Y*u9U47O6nF05ihSA{aTJ7nZ$!|Z=Ay17}ZQ(2${^-sVc&@l@T zF}HwB63OiR)qN|5xxq5aOyJ4EVHdT=q&5C z!a8A4-I!h8;0p7hESs%nfk>-$LzY6*_Bsq0xPmH7SaV%G*aM5E&D1C?%|p(t6ai?J zHPtKcP$B)Dij>f6C4eMXi23)E#rzFlzkcwbTd$GHL>kpPqJZ~uV)4o{65{h3jZRsT zn%p*=H$XqJW72G{b|@lWe(9B84g{Wk7HMBehWRopnm3#0**1ZwGXw5-pRznVbI)ip z*Vm^nA^qds%`)Cc88RBeO(X&4q2K`sQ2wbozkYwEk|Pimm^ye6yNE2%{%R>Vzlg`7 z(g7yFI)hSKR<=lFtl)}Zr8+B8$lSn|DCF>?eCsEkCKBp@#4`$h`PWXM(B+T0KflL( z7k^q;-|haz=N~(B=FGD%zWnvCfBj1@y!hhtU;O4bzxgX)dim)m&Yb`GAz)qZ-3z1= zq+aBNTNrw|1V?tgsCeH0f89W2v z8~y4kcnJ-q4d&9VvNhS+*}_erb0uiC#s^NHHUe$0zyI{@nPgd^!J9X zR>XnCjTJ;XS=w>{Um~}bqz1A9*r1$#Xi@PilynrU&s4`sS13#-Y;jORVe2O&C^TTj zGH>_0@3M+_-%X^+VUld{I{g`%C!Hi4l8V8bL;>u!@bw#0nD>Po3E5k>9K>kmvdW6s zIF`9N&~G5B0y)4FH=;nRRCyKRmX(1gK_SX7%r|!_<%N0XCg2dbySlNV09|88N1akX zz%dOzosDJ07!}p37!h2n70*V(NvY5h&Wgi4^WN+`72G2pmlf^a$=oO)z8h1Y(e8P@fT?>*|9$vab)$9JwWkf~!rKmX=F1 zlo2Bkd4CB+1^uVFBx{?cy~EgR(iR5^!_yvf#IW~>7oRj ze7>uTAZt=yEy8@CG-davZF7G9zML5o-bd)7RT3+h&4rK3Q*mMX+BL$y7MtVU-B&?9 zpkRNy2|)F#K9%wa78eDc)Q2D5L#1c&!~65;EEIZsdBp=Na>Ah|VhZF06)Aj`6+qF@ zA&Yu>98%%-ZRAyeC8_yNe*vQrMWaCCNK5aZRVdQR<%V!xtfkVSnZ0_xuQh4qk}H-rS&7;i3EPCMD3bvw zy&k_rKGq64nxnXkpR?2h{rL%4f|Lf97oa^PU}R-W>kR*mp;w6N9S_;=BC}w z-TN8Z)~^BJ|FgIM4BAiD;BsAGnL!axUXI{@NuW@hJswXek?!h4c3VUz)q6ZfXock( zRFa4W)vb0L{HFzI?K9J2$`wG;39u}SHHp%WaBnn$929|6!>?a{rdpXp`_ZGvU?h?* z2&|eR07- zG{3O0w6wg8etkxHZGBx*@n%GRvR=FVXuQz5b?fkx*Fg%moo z6(Og-Ow^_lmo_#snMA~ES8m~itLk(%w@{?CIEizwr_&#_7!Bl=+ebc4)M)By=7baD zNTtbP=At-B6H$X98V4IwCvtZ3_{I2y5DrA8P6Ou~M3zt|ZRI5#!wiHd_sOWy)EY*A zv~P5D)R6*K?od}0F*T!ibkw5}0g%H|U4%@(aRa8C5@j_45|na8#pP0}&qc9s6A_$~ z|EM^Soj4(N5L;S0YBv(~q11TdgvayDGt60bOf^2PR6@ZsX_2MPs)9j_bPH!{5NUb* z&f&&I)|b_K{`~Rd=g%uW$YI6#tL)N3MW8k6H;O&Q4TDZ8UAcBm>gw!tb&T00 z3Z+y~H!GQ?B`Ih-I~?mbZ>~E!ni0C^F@v2weZ7$UAq$nN_x0hx={Y=l@K7eR|LFOb zUw#>B(ZGQ_w+}xbKJnGBe)V}&p#fA$w6z2*cW87w%O<((KV2C`c??%O$(QOi*DFOY z#_YP!e+8g&+~;6?&p>}~AL=kNJt(ms!_sE)NURq2ayX3oDZtR<>}+AQ(WxI@a3EzU z&%G#avb+4n71e!U=h6qMPkg+vHa#R5eK^#^UgPl=* z4@E&m@U5)pS{^!*rRqI<_8%fPh$ry*jS=Q|jpv>@eZiMLckayT$3OSz6Hi?@cOJUb z?{OJti;F1U2i_eHFUq-7gTi5DWlO6qqwYJ$?|DvB8esshH9WF+zW}6b5_PNtaMBJ1 z0IWckAgWiS`{9aVC4cpQ|M%BkdyTce_S*Nq|F<%=62Lq%Wp5AONzAFocIVC%&hJTh z4G6wUhnVW%W_NT-URA_mQ&V@QW*6&CeU#QQiptgMblPf=i9{?h1E98c z17$v)o$KpFoe+<=doT@rlNYrDPQ3&F05Vvpl1Mf&F|%3#I3K?=xSYtLp}l)6mGdcI z{`hfhL=?5|HKF1WRswV*diAuImDPXSHNiZ?c9-~3;E3-A_r+*tM~?M8_n zEr0I+NHE|p{zvGpZWUxkl-MzwD=T@E&*#vJfw%(b7rR}f9TTHyPa%PM8q`+iZxyw{ z4j_A4q5WE`Tg_cTnfQC%?r0*7QqgoG>Q<>NP7fXx_{6G{ClB|x2c4=0e5w*8_v|~F zOvWP!EkFl!2ZF&QbBJ{bWR&qKs6a?ocK#c*D)p=bkWPGYpGrl=dpm0R_;)Qs{~#n} zBu%@G)>3GBITZSoH|u2?a*!~e_FlOtn!^DMT^$x15V5zAGje-=V`-&;gQ#4WtIaNr zTB-|BX16~S_Bo(N3yo?qqG+;I0tc5@C(eTsyx0)cDDzSws@#~s>A5a3dl5y`s`=;m z9>$&VdY^g5WJ2knTq?#nwNQoxmQ}DeYnUM=NWsir`1w#B0|#=*apLHa#}6{U51Z$E z%pb`6`o8}47hin&Wo*2Ej}&W*1we~}1RY{-9dWq8h6b}8GFGSWNeEUPd3(re1G&2p z@k<;UJ82lWT|`<+B$>1`6)^6E!?Ux%Dk(y|Crbi|2WTyDj(8~H6uCq4sveq~8HH`E zeGx40#Zq0NSS9Xs`Um$*o2n_>{uu3Aj~+dFvJ;4vqFP~dt3B4sy9m{WrX!9;<)4nUM>fSDkpj9&OD z36VgzjY!a#hr8kS6f4}uOn^^;u~q?bJ3KrvFt8Uy7(gxvyLG_gJiwYY_#PUw`>@D6 zItWX>A#dRpK8`zMCIzIO5{b;=Ftou$Y<`{Nq!iIf#Jvr?kaoN5qc#a%171Y6o`s}| z#b9hfJriw$nUQ^RW;SokqM#EzpA z%P~xM52tJ{ug~|n&mnH(&}krqhr#!uraSMi68R!GCM=HTtaDydfQUGvy(iA@9q36D zvm{U%aNZ`up%~N)*u4#{3*2&jC1^#0+2Tb@r39S0%a=c#a99B+CLo;eTD1fYFX1V4;;|zPn|k(473*+KXY`q zRkuBZIK*iN=`T`Wcg!Nmp)uk88e+U_n-#fz5&_DeIW>elft=VCTA}1A#Ry6pgKK4( zK4cW=CB-$p8RbSYkOnAc?@1&pa}rIs6b?CMrKY5%8Fo5MRG9?^7)Z~V9j9f5zPk{EMXJ${j^i-np%w9TuZn8?|htA;yuR}5WUjm9UR zx~O0gMIzv(`m|G*w7iVp9l#0J(cOhwMv$!m?}sv=E4it~RfM?L%4%mrOGFADIW)wZ zcZf?uf%SHGb+ZJfOC&+p>fdonfY-6Qvc9=hV+73AYq!@GPIxvP5+wXLNB@9TC>X_i z{_}swtq|l%qrRT2vFG(x&ZCS>vj6=*4nVAZN}t2i_ol~h-k6xaw>5tGUoJ0RzC3}{ z+=?iw>biJg;{A!@#Kht-47J6HB0x1(S767h zH)e0lHfCpY*uA+~uou)TW#lQ@>$#bnDwl)8uV~~RXeGck!?p4;U!O}sfSG{*Z!&q> z+dZ`!loAjo0AJwYKfWkv2(n=!vsqXGRg+BEs5Cz5t3wZd6~{a>4)8yj{rfWpLp+^H zgIkd*q969-?btfQ`NW(1(~GnR4NX1XGWQCEB28h_D}mpZ~Jio$dy1m~93| z1rQ;3Wxsg*7oKkHANba<3IS)yivEK6i>5RpZ={VPLmCKF5h_CZ&Hy{J+hhi00U zc61~YAoRW{y?pt~hgaTvkJm`)tnn!&K$)$VLAkL!a}S;^vi>^T+cvtNh^NCwfLLZ# zjYbMZoZV?Vb9Mfr2ziHYa91Jt!ng9kzF~OD`x9n&-sF8>%mYsw>rM-mj!Xj${&6{9pga z5B|Sql;o?prw=7P6kpY7EiRivr8kA}R1u%Wa{94T2cR+brT`F)7eg57@Re3&TBX_i zJ|@t2{rb&`*>x%kDHQQ$jOMfkd@(O zMX5PUbM{)^F>SA4g`ZFU4Gyt8-)Fpe^~)H4f0YpL>ROx=!2tI;cn18NC(eHEbB`S( z?Af9ISZu(H&~bPKcK6Hu9;ije*j~5?^~;OPg&e3SjnJDBE?HS-#aqD20V)QFZNbou z-^ezn5MMSfK&x;nYHKYV5Cez~WSrdyAt>u9iF(8pvzL`zPBF@2^I5)z(G36}851r9 z(n160aG|)hI=8sKmP@D0NP*g{o2;TV!?u5NE-nO*MQq(#G#HSUS3?x)#$-ga&QtV=*eo83ZREXe4BM`2#Yl6 zy(pq*Y|6R=Xx(oPe&M;#J^uLlXP$ZX@nc7h965CG5v7dkzMYw)r%#u?B>jj9C{3~-Z9bqJly_9wR(QO%LOMZ9qj9~QxmWMh*cmsHu3J8Z@&5Nb-wKv zG0Myo>duVi>B*nH{`%WLdlS`&Qz}sf_H13DxBBCNEi(o(+{9Q+02=Wcp_>|%`;6*M z#1(E&2pCMZ&=g0xs|ckkc({j^yK*y5p76BC0WSua+i~V82@tUZ$oE~D?jAr!hN+a9 zjKXa`Gt7`=a&qDh)3|7s0*^zGyF0mqoEg=nGOnh7VrH?K>p)M`tvh-0P`CLenmMsEP;5Q|Zb3Dq9>gQbRCZEsI`Jw6w?K|2xilQhQ1 z@gEC7vl?i(WFhF@QG&Gxd@2gcgmMd1YQ0GqY zy-F~87XD>^Es#g8jZmxMv_~)n2N)FX5crJEY4j8_p|-J{$w1{p5jIGeJOILPklJ4_ zL3`1mZI~|t18V9LM${2fDWtHu7k&vX?-47hu+n1H%N3yD1&E?tE`}mZtu|yxBLUI{ z#l5YHDlG6k@CmH8YNY}1G}3qAoGli~$!c>@>3V)KpY>q1;oLF0j54Hxi*#7S*uiUy z8yf&?uC;u56pb2VXugUFc&$0c-(fpPQz}62)c;X0FN;F(eUz zXR`)mZeu}fAO@8g4v)L@w{${a7`9myngY&{g4EK%&*kr1F;@Pc(o$O zt1u$R%s@ahdZi6cKdSPSi?v8ihwIOy0m5EhYKOc@N-DCI*||=r1Xh-f3gv*^Hvt>~ z?{0FEOF(tDyRd6yQc4w^T9G;&kX~8G*2?@UsGMVNl?Z-`n!z25Mx6+6YNPzfsBSna zHwPmjjtDaCH&`$P?>1_#(j4jRT3#&*K_becWFH0~+$d|n?NfLlcav!ma@~2TT;w)Y zWwOfRv_!JJ%(wpU(E5Jhmuwd6P#9J9Vxg|n>EsQH2y7v+y*RJ6_+gi#w$g4#EZ%QZ zXzEDy$!T*4GKBuP6e<4?rQ8aK0g-4KLu+>zDUn98PW*Vh??E z7baK%zXN5vcA!kgKgXZb`vYAWR1dpM4BXFRP0V1Nxs65c1whup8#=d|!wW9vR@bmv z=6rg08eWc|UX)uz+U4xBwozT3n!J~*z`1DGBB5>AZ^l8&)HjRyVu>6c$kE2>Yy(Y- z$DkuBS_l=OC6Y8$VNWY>-@aE;w_!D8A{MQ>I;Xx(FvbK^rO@gf%~SH*H0N?K4FIke zR0lGoJJ_9;2oi;nZ|3rYG6E6HbgBcI7=ao&tuFHHpeLl!$>hDTt3lV)zcPm*&#YF2 za*B^4@`LjaIG+eBFo4!lL-^?w_0k#+Xk;s(pTZ^(MAvhlc=q{hv4 zoP+tTEhUza(agGxE z+r3FR55NW%3fQe+L+>yw=Y?9-xa;J?Wk#sf8Vu5AZqskm3J8KMT&@KNxk&GBheio0 zDAL*dY4XXGqR9?8rn@uUefx&?^$(4Vj36cL=;-LkNYYHu6E2@mNfs$Yifaw(2GD|M?r~=I0*q~=JyA~dL43(8IQ+Mk;zbu(PBjAG+m1l zYpzzri>N5=JiIE0{Q*BS9hg9a=}INr+nq&vSBvCTt7A_g*r74oogNMdWc=*s(# zD8&OnAi-cLN)aYv!_|pONGXLwg5L?Go$j$&fl?(PJOZ7l%(c6tZ;1G2-|Zor9@M() z@Dw+U;W)arRf+&a!L1quNj)ZUec=v8?a)8UP~etq_75X4s}O5U5Q`R_OvLxhX(RFW zbaH;Jfm9!?d4to8SgOk(fwLm$w7GyWY|&}Nz`!gshxfHPuoh4(>+l5Q>G>%H`>$RR zQ9hL3ZbrE_2odX9V;N`x@WKj(#mTFF%8d0kV<_DEg~B2iV;zV9rB$p-wK9=Zt&y4h zC^Xfo9YJ!E`1M)=LGA*H)Jd}+1Xo|V917a;w3>W=`S#_z5aESV1q!&(7&2zV_3DQ= z@V3`ZZK*o zNW}3DZ4lPTl`^0v9thFvkVA7wZ6b{`WKdK#)*Mb7V09sC1S+?V&TX;Hwgr`CYFsSE zT6QL!_+J^S`p9>NhQ>dp>HgSPq9Hw)OE|l{7m4I=z`}sAIrTOXVjE5oG zqUo-lp+kob9T@DzsvyyanjMW2dDCWpCzRoyh{a@eCPTKakPh2X7wS6lg)e;JJXG=h zEV2dxEkLUe)KN%Q&9;}y5OTOyYbGh;JW~>D2&|wpty41bxK}5sE@HAb3G%urcYlY* z(qSJseSbXN`u%i3p0oTRHj7R*1a|a;##)LX;b;qEf4FJ|~dr&HVQ1`aPngGVs z!4Jx(Z4FB6kMr}xd8Lge;?IC_R5wN;v?zbT*pQeP4KOy_%^MKVtUbYF! zhWO2&UI&3GR)$&)b+VPEa}wVUpFDPWc>f{5%BK^lo15HS##642O5)dgu|vxlidaa&ktZM=-9u7JVCi*1j`p{z7l z%NTm|oQ836;OHRg&p`i`-h-|l=+oQkvv>H&zFy#!3?ALt_aiLuE_XlO{So-?kD&Fi z$e{Y@NTL{tL8!2};t+qxBGo!Aav|0RfCab@E4@Wf%M&dIr_ba2DT{*Ql|r-Mh1t}( zf}J==d!k?{#wU!k#OfhnW7O2yv0pMQ5Iz;2bhDjiyB;$lP!g#OPH{;Us$5m9FhVgh zw%!M4JtdRvZjB13H#``5sQ#;r-s%BUOTdr%CV>43eGU~W0fgLwi#TSB6epwpW?Y+#4uPcs&ZduP zp`8^+qhj$Vwn8Vh5@75^0N_jrl_kz)ytcL3WaYW>@o|r5Z2_`neratP2~cxu-1#ro8Et{K zHlUa*JhbXC-LOdcw_w0qD6U|^-I?MR3gW-KjNt9jmY3|yc)Ffc$RH6rM~V##f|xp$ zSPbg==)loaap9rE@pO0h@MA!{du%_F^-w_B1H?(7tv|~GO{`iMywA4lZja+2zIjbb zL__lG$_dyKkDi8~?La!@Qq&^gwhn^l9%fFYxogR%xu;em8Hk)?S!J!H*CT?Ay--yc z{F!~DPRTHO0W@a}89`AO9AxE+F$(l@4YEPUVpc05pzY~xH&g_dQQ&dqgZBx*Lm^td z)dwwGp(Fojcdta0l>(>#{h~n3dlI;s1DkSddCoDATixt;R1O@px}7#3@s1|~S}m|} zpb6N4h=$V)t4L<`O~D9PDB8e(c5o0rj)dQBku_Xa7#LQEhfIOyGr93hn$29ly*zSo zU&;HlnW}@U{GBXwV@Iu1o4NTlWQSV4?RatRer%(~SZcsOvhm4>f zBXCJ1(Jh)D-k(ac!iS@O zPmHV3hZwP240@(9(w&Z?iqff*s~JSBU3QJ=RWk$=*atFcl<0_b!3<7fi?F%dF&A15 zTviA{;Dgu-q6xtuq?+4hajn~eC5y7%1@#=JnS@#7Ywlv`+Z+xD1OAXFU>+XXZ$b%M z6)}hm$V!|@t23%~QmKFythQ_;1@4dpK^y_12%h_>i?F5noGr3cL=@?wF+dSU<%G*$ zESdvQK?Uw$$qEX47aT}FKtoGGpt88atgS9CF;YbI;pLR6&2;t7~V@GMlip9k(JdsqoxF|Qed8tBvUX|L0oKve> zj=)=ubrRuXwIS1(fpG5hxOA9>GP;Ee#KyYk=l_59-aI<8>%Q-N@71e)MJ=c*?1jRP z2GBdZ+3aqz$tFco5+!Q&B8j3c+sVjI?8vbdCo?EiQ*sh}ay*kc6Q7(+{>Yq}Iho}o zlam~eXXGummPoQlQ6yXJg^fmIUkg>JeVNbiy;ooXP05myoHKt+bpxn->(zbt-Q{-Tq{M}_I`HnN|?HqtQ%%C4G@r;xL!Cx)|ee*N9O1u~EffBWUDDYcQUSSYqNvNaO& zwSpvy4Yoj&_P4C@l1RldO%+vNv55B+UTw@7BQA+XhK9s@$N(Wr2y#!>PmU25cwZi5 z$IYEW)<2p+l#&JN(1U)brDHR+_F!SQ4AgvF+&saMAEOIQSQryYA~877KOoKbBQFHP zWca25knYS?+MhXdKn@QCxrWAh#jX(VToeqPwW`gD1c5L`0%deFWtmotz!FMhX#$?+ zdD2{mBb&E@BPaTkR%?8GB*o2=lT%}vZotpI@W^2QqZ`A~q?YgLIa zGrw)@||pvQUFCA~XtDr6ooKM4y2!T!dJd83&fU-rm$;#+Hs9dZwD^+DOLK zv$7KvlJ8M8?_iXh$I7i^W#6%~=UCZwtbF|Yj$@y9lnwsJ=M+^^6Wv319}yr?e+8{q z#XkhMFvzCJBpWS2|3q5yx`^YNolWQkPF9jMS$N;aaH=7<(OPhzUdc)$CX zU;Fc~{`ptG{#vo^yNEcZ4EERSE6ev`0ai;ehpz42s<*3$8>fZ_KJoE>#yZnG8DhH@ zw(b(l@a9cKbk@9$R5bM#$TsHAewmgy_)p-iEYRUoeW4hrWuAb&#UiWN2sO7GF8(BT zjK#_DJuq`h8O+QiSO|W&n@A?E;&iNn$0mu&~oqQxBv7H{@~yI+y7@~##%$N-_zti zL8sY;lmjQ8HA4+A*=^quu#b7(A0VLgO2=vvGTosoAV*&h8OwezBS>uEuI8G&Xh-V~NB0 z{qK7`YfkG4e~V8qs|v2-@O|+vf{6lde7Yqw5NgJaT_{UM!@u9(%-;uh@j=Diot{u5 z(C-0HBezJ^HvS2%49@=SMBGah^@h>Q>@dnKwFT?NwIqnFZ9Z7xK)ZQ!wP*_^`cSeK zS8tlD;TPz`sc1A3)GH-%(97kvmfyL1=bZ;zyEzdI8a6jdMZE{(Zo*z&MR9RwwakDJ z(qj`%i9I$(^^q^PRVMtdl@EGl;p@6AMHG z`NZ?jdkE)s{mb9~zrOOdKl=B7{EkImALpvU2G0N6=uzsvc%nOBEbH+el5nSnl3mX| z2V#*<_VS@bPZ!zC5rV(@bt8Luts;p?4^Gd`S+vHG?1<;CKRW)t6(o7~A=+n-3PJ-GTj3J+ZIcfAe4cum9Ws{qI0sF!+0Y61x8?Jp(B$l;X~mHN;n(kUXs-k$78Hw&tH|gqFRf+t z?|diP9kyoaG4T*qSn|fp=!s03YGc-*Jox|iHMRc!;n7jz#?bGcIys#l;gqziwdKA` z=Lh=GQejCJ1;gEa+}jzppdAhQTw>L3n==GHR5*538962!M<5@Fy z5dS$L6w2Zm(n!FpbChf`BXKnB3Ofc zU8)j#|D9!5Z$w|V#^M>Cccj<1ltuMuV+gp^Ue7J7vNF>+Cd7(*M8YQvSa*5>DoPUV92x_g9QP?2@vr zM^Zk1$=uau&Gkitfqedwk0v(yD&axNnvvA{IGvxo~CE^(b?Aa zb}KwO8a_ENaPrBIfBeaIc{~;yfAj+%c=Y1fPS_XTDco9W*zJuaGIN-J>-K@Mu>tsg z>#sFpm*`>t`##fEiN#XmCt%!8jHmEtm^pLd$tRz@aAqcj^I0~2fJ?MmKG;W9zwZl* z^y_m|V_Br0qK%hgcs4pBJSWl13F+&#BAMtp}3)z!%`Otb!#eX zfdN25*Q{0Zw`uLFRu&+TT#-Y*RO3B!V7?BjI&KXipHoMwFPFt}to;IWpLEDH+T9(> z&XdhS(QMSXgTf}dwSVAm68D2TS8Tz^U|$O8y0WyiOuqQ7tEIL6%#fv$tm!vcO|K};4BSM^ zSivU686*DATt9Nkl1n8vD5mpqAecJeXVMWWraY(qWMhHIafgv2ftB;S_M>`VV?G+Hj3zne}ciT=#r)_ODSKIOQ! z?{e+$JInV~^?r#^LP}b^tQ0cwg9A@(S=X0q-h%_L_rTs;ulL${XY~|MKyawsj#mB^ zr=wck#_7ny{4x0GL;%4ykVv6ZO?AE>>SmST6^5#L(%C>EfkzXXoe)}>Ife~yD}>>Y zUL&$2D#lYhH<`-!e*fNM#(*(<250i_-vQg;)TJq`>)7P^V^5v9eECGmUWyE0&yAGM z44C88aynZ~*(Mmc-ZC+G?Z4KTnP;XyW6~-IBcR1uRTgg?ru=2S#w=HFe93|AsF2Xa z>f@*QY-YctICl43i4^MMiOH$-2zKy7w-345*FA{-b+Es;%Tq&j?m`sx!;T=k=+Z@KWqIyk5t-2K*_I}n-8 z+bExJqYnGCuf6{EYEf|xoIYheO)pO~uK}C1Alvb`p~6c2x1DVYZT1Cz-0Kn7K9fJx zJoWl|F_;LU9Zb%=9r`%o7E~GR0PGcrfH^q{+4J^KPxJUQpYzVvuX??9jbN zESs@OOXeMAjL-Ze^y){UQL3(+vkpgLA>5Xt?&!Sc&#Q+NC8Lxwh%iQ3r#DJ9YpsnF zhL=glsziLC#P6sxJ$v=)Y}(nmpU*|xE3tDITdPoL*OzVVIcvX38909B(-ti=Y1@;B z+0xBb+hwiVqicAQuWIg6DeH6l{iG0pP!aLt&t}x^?TmkW8|9@P8AtS;P4l@9pI@HU zJ&zO2w(-2|210o>HL}frqvr3?wmN!ZsG*Vgye=iPfbrTWk=^)yPdOG#qgxl4^&TivO)DW0)Qfuj$RUT)qdEt&hr z*rjH+cFsv&1g{X7R<9J`1@>!pyx6Q4yaK*BI4;6Ugn};Cq^^I-FTnN81?+>EYX3nH z5M6LV3|BZC9uTc#tJJnt+H%|SSZs_n2}QB%N*AuKdaL+OYjEB+RJv#FD?`#}7-d%; z{x;@Be#sK)>)fOAoyQ@N>&YNU8{v{RtHG`u}M-o_3nZB=Nu zqM_G!$mU6opT2P6bYDC^z_jcjW1yAbwX(L*m$dlO!Gf6q3-qzPRXiADCkd$q^n@Rx+n+jXK8jI`|SWF0I!6B|N$I8#39zaL3~S`EUH`g&>`LHWaF&0Yo3M%*%A^d|1I7& z+VtaKFzRo1?zD5!NMD}^XIkYw_*f{Q^4o$Rw?IDnMwTE~PBK3v<#)_=;pKDO{eUCO zs5d9f=NXXk8|)qmyXv|6zUql$QuO-u%4Tu>K=mYpZ5=uCRBDI>66BE7@CY^fDU?=r zomoQnWgl{sLKEf>Z+KUdKl0Zog(e2EJU%(OY4_)gj!>KsPfxUev_IHnF2UBx$b^&R}lUi%N zy53pcJuJw3<&QIGL}lM-X?4N^Fy^XtwB%yDCOrtxriilx4GTkom2{X83w)YYSKdj~t1Tp4C>^^29|ZiXf}Y)bPjZ!8mQ& zr5W1w9JWgn+F+b`k*>kP0Yll}&e9>?5Yh)C^g8-5G6W468kvIen3CT2bbOC?6l_~5 z@pvJrt>s-Q`Zbm_S!K~5Sbf3zs*otA(TES9#XauqaNH+{cFjkuNkrII!f3)yVC6W- zYXo2nSl_$G_XhV5YPEyB{MwHJ2^WsauNX!7d!S&YATR6Spt86Kv`d$!EiNj9gQ&7M z7#}YN1*@%?!P(hGUCpA_Gvt<3c3gw5F89E|WFitu;qq$kxj1+Ao*D`COp;U!4@|t; z>dxG<^7`vvGFH^ne4gUyb9LdvL~gAeFP3kp45@W6v=NjM^s>PGnL(4CGg-TdAv6Kw z6SHS=rhM$OxST%rh}E;}w5NKV3w=(nBqa=#3n;=1m$3k*#p}f7mz6Dkx0ekf}mug5YP>W(yjhnqQ zh`lh#v+y!VO{vG%xVlyTC1T={0k(l8q5&~N?L$3CDuuKbau zFP6G_+vJOXhq^zt>O`xo{yJY(9oBthKPB>c$@Sicvj=aUeIKu9K~Nq*fwdqfQHEpb z2203%V?K#cC9EQKW!gv=Pew$vWK;OI3bPW%0R$UkQ*G~B<7#|jrv*J#795n(xY~oU zhzzA<36Dl2ZSBvCv^}n3;pF9rPEMXNP?!iJn8N~k{^Hrm$ruJ`d?=cNqCeV;<4)Y+ z4TeJN>wDFPMn(%ziJbmWk2tNcoD2EAop!EGqwR?)Q0vp_;b^OMAU3bOOtk#X9kg08 z`6vy(hqS%DvzIT30D<#MkDz(#I(tTIR7s1>Vc~J$GuGSoWHb1G#*3^5u2I*4M~~)v z+vpJ;pJ_2|#iQq=6*L{jIvC@5yEbR1a4xd>x;fpueYPB0WH3*LhA^Cuj}Jxw$!$5U zJ!f1$IhpWlNQJsTJ~_L&Hzn6M^XRHsi}k?mMIU!(Ujb0WrN(*CDq%NqBrL* zg~cNkyEezJu9g^)rX--wHQg}&ZO>d|kE4Wt)Y=_}_5X=WPefX+h;l9C;6y9={b}pz zjZYE7Pd@qNN$XR15`-E2 zQ%;>B*+dXfxp!;5{gyAoQ?#36nyR43Kla%BKmO4Ve(;012Mvs$ee5xxuWxz|vuhbX z*q(H>+_7lJ9*y~(-bBWqh^V=h6^CPGC9lWY2%T~kgPdt-1p!Vwe?9~3RmT7LyFvV>U(CyC$bur!y&- zIfwX~x!_@3rtKJEZogLJU}MF#>|W+U!6^Ve)BQ9WL??a)9L79qB(4mPD)q=Bk*RKh7W z)IY{fK4QDtvBziP_TG8>zxdw2P`+dB_21|Dk@Vn)7p^wpJ!>O_Q25}^ZfU15tkQ#n0l$=aGB5WQF=JBv$M9g zB~ht0%^mOW>A7=ft?rIVX3)9*V1K`tp(TvNA;R9k)YSB3sypB|NHRF<^$i4!^`{cPP((AiXUL0f0Cdo1O(+9j`QbR zUsLDp>&kjui7$BYxI)-acpxp~jOnkD(^OqEX5#%k#Xv#zqMLC$W30mfadji(>150y zE3C4*S>%69zjY8W~N8q`raS^;UE6tpTBYM9mBWj84B^Tf6zqKek$zK9AU0=HYNpUn1E8BfZrqm0d0$-ln!%ttS~z z4uHvwER*B}TDyOL-{n=+t&9&TzuY1UW%JBF(0_ zQkGcKO&31wyc92^)Z4qd^Z?z*f_|`izqi*Kk4O0iVU~SHR6t)?IX_nS)$9I5io+$9 z@Yk{Kdc)W|#|FZN9Ve@9RTdnTEs3?eZ_#YHAarspHyhH*AS$_KW%*rBF@p=Mf*Dcl z&hMVk^R^fX@AW{#Rkn8R6ZB-TQ6_kx{le=N#fiM&b0l~T04Q&&KLMPXC=j<-Gc0S6 z8+m1P%r4cc$@9tC)p=KVIYZi?C%1v-ty%Y5=Bfdk9>68tXKQe5)**-h=j#<{cIE6@ zxBEB0_>_`We#iJX@BGc*_?6Fn?sI?BsQX8X{L5bY;;(%6v!DHy$1Xqf!V51v_1L9T z@D*n-KLh^tGndaW+h>0IXFm7Kzx>ND|MVwc0Q=#^pZVOc{_3xO?q@#ydyTi?Gv_R=az;ANE{T(BNiAy40MwbG`m%EM~2sckgvF=j2}BweDqj z8Vo!|BrzDSC4yFzZ)KF$ZyRgrdHOMLEAQ^?%Q9H7GgfGiU-9SOM(6N$P9Zz=$& zNi2yi#`H>&^L+Y8?bQpv@qy9j4M4%)16ojU69qH=%f^DuIDhTee(g8^-rxD+-~AXH zME+&D;&+t)M)~iQ-{sv6uKvf$zcBv&Gv&Wm{)zJY;LiWI^N%aP|M0U!-}70rfI`Tw z9PZ(S6r{}qke~6emMkY|m)6AZp{BFW5MRtO|0SO8EG{>8yF1)Jm`X&tBT4o`UtF}N z$yo1`$=pXia{aMOm(R?dV@gS}^z>6#VW^d{Or~2BZ4=GxG7vKqTELqwp{qBd&}>l~ z2}dpmsSId$TlSH?Ft6Ewg?+_XNd}kM)71qeQ_Bys)#Ti{D`!ugn4CQQ=;g~7&&*Cv zf|f3HG^X@rfK%ViH;C2GM8#zmEf&fPyHn`Vb~IWeT&-HJnNKDwbmDSp=C4h-hkovy z^Vv^KI^)4}xLa1wowM1_(bZ_QJN`lM$}?jtl7mM1S_We@s$jhl3f;Y%^}Y65GP$vF zdud~DV&~8{F~yfAI^y{>8ujH!cxrSY!RxY8NkFy7ZgB z`LjO@nB;H##utC>^Fp&e`{c9F&kbEhr zN+l%6=-_lr!C9LaPFq7ge_k!aZSAOD`0JCIti4{uk0q5+DjDT_8Gm_WL+R;p6<6Mb z!?vt+ScsH9zrVY?+4TEIM+IZ@B=JZ@p!;C2M3fH5~K#ddJ2h75ELO^Zv@dEjc#P7qWNtPo#{Xjgb*$fG|Pb zbrDzIxwL=x_HCdhS8u`xeES&l(Xm$iMh@ujKeF46$117J1XszU)J%W13SP)}it z5tVfXrF64iL4~1PPxMo4=QFqq0nQEQDT;krIz~aj#f_4wjpseeX;cvAPu3%Go5iAC zun{s+Fy6y?XI$kH)!0Gw-&sIUZ3obG5+xfMtffFcFZ2<1ak0Q<2&6^_iq%T7(*7~e zE%3XX4lJ-5>g9QRLD^q=`_4S1*IdCT7_;sGfs@6x(^vA!rJ+NdTK)DLZdi4jUMnHMDY-DFNufQaV*Av$)$TfP!c8Ha!aqk;eKRVwV?Zf4B zD68{YjdNI09nN}1ftxVf=L!O~m;)w;32Ji94VQIATbB})(UQ5sSb!=|x|@)zM`*H8MW6yy5gLIy^&}-QA&-#x{D7waA~v zodvbr*8cuFEnb8jM*=8p)*kSm1R|m(AoNu_1EOe49jA7w@*FT z+-w4%!+s+N0z0!Ip&-SqIv8H?%K~6pz@2bAblU=au%oSa8s)C@K_4{P4H|&ns#I^^ zUaMr0EBqODH*x?N8}2q%g)!2*?PoPgTSrPqKifF+*`FOL9nKIZDob9s&8x+{8U2~0 zPXK>53k89@Tu(iFX`OK-pa`WxSS^}C413ra2_XS8qt!m!mAF|zHEFGsZ+7t4-VwBwsN@Cj@~h9y`CakN-d+beP+>Qx?M&C z%%ti9(al~dW9OQ8)+)uEPOjh|*qgs-_r~by;SPMb-#2h8Gh2Czp3M)5*4Uu-@Uoa_ z#YRg6D;On>TIoQ+dY#RnKoLX6p_A(^BCfdiDQS0q{%WU3|ZEUP8;l97Dwy^*^ zSK&oI>GAkMIn=B9y_^~d_=-5M91vjX50v%_Sq;!q5CG(es}r>93?nY}4j_5ZW;OSUYcCxznyO*8c7GzBnl!Pv+)iVqgrh?edrRs;&EAXKe-6$sbt0vs_Y2VKVdh;Z!5o8xb`D3p#i_=RrUXiZw}PIQNGfGZHMtW{RuSq&yr z$)Ka*n8))JHj#wyG)JS-nzU-RILDL6#wVsH6S{t9lsU>|6k#ymdz4#sf*=&*=M>H^6jUReWw2VV%C&-f1c9(tdUGZ!GPn_S0(=N?&>ZS zYL|dBFa;H{yz4z72qY#-tX{*}IdDvbFD28D4Wt>HFCv;8pRF!g01#}6!}Uix>#cG7 zJa;<-vyOHNHyfk%W{n^`G}ict`#>pcl!z@=@mupdv1MbkXxZF2FlCVkb9=eHeX8gX z*M{+P0-?)8n0FEt&)tJwAu)bbWNjaBrtEKg9+U^%u1v3L>=ld}B+hLeuR#e-L ze3n+@^}R;!!CQZM>pQnr^0TSg;ci#Uulf@s*?3qlZ&fz(nm_69?R;;I7JV8YlRb!1 z5ZOWkKI9;6zmPf*O(b0lH5#A~87jc|=@ma)tS5pjQ6;MumI#c>_$>=8=nWh8?hrs$ z(Wpm9zfwR$QQqC!%eaeM#kzu566n0fh=^aEo8(TLn`qYj(X5R?R&G%{*lKGNj9uW{ zC#pk^Gw+~-$q~^X>|Wzqr(FBcw?yk=d#hA@Giz$(gm()*s2wcbxwDb0uyHE6jXPPu z;P9nkHG6Hi9F{F^4DK<6YM&R>LUd#D{K0BrTOp^`w!yDgD*7WWE6A=f*aSM5|Td z=*z1G)C+k473Q7zo`DS!jl2TXAr6i9dM;OY8#6bC$kjzNkW}M2ja8$oU6HWl=)f7imMTa?Z$8lW07*x#LM)I5EVJbHViBhm|giD#d@k)Fz{2X|u$z7orvBN$pO zIm>%1g%*?Vp|J&3Yb|uybSz-40~SvK2wHnEY@G_1nD1WA@aBOPD1tsw!dlAF-SmT- zP}3H0PLYqz^O%!jB(2DflIJo8NZ!c9@vuCl`B&A_`!%3R3Z;E~VVk(hl=cGw zKk@#44p#nZezf-cX>=nshQU!Q*BcF(FqeXNh|>XYhG&#r=gG?ET9N1OXG>~?^0T7r zijDNM9+B-fi;6c|a@b2*8RLZr{a|vTRYJa9nh`2x?v-b0W7vR*hb1*~6GS4V67Ryn zrd!GgRZw(e%UDf)CmtR+;~T zB7&6ZW1baBc(s$OIecL4tI-Hegn)&ztjN9M+biSAKNKOxkOq7Jix$d-kXG4~M-$&5 z^e8M;^S(lFM_}lL4=)#r{{0=aC~_zG-raz(>o_%5i$QNL>wf*UCHU&f(rd40x^1@Z zxIYjGb|<4YTQn&rV1mk5%rSnN;YlH_Nl&CX8BgmaMfQW>HP}-+2TbkY0D46uwnE(#(o(vyd|Qf`6}XP$z^>ODzL1+7!S=fR7<=uUv4hQfSSmT$EpjjX z#_UOJzHR1A7o&UltTiig2fnia)~aqyay?Izv}rVKJ`4IV!D2leRhFvUfB}wnjO}j2 zc2HLxA&0n#Nk$hT1x5#@wTG#cNWUQzHeMT<;;|^9H-k?>C-9!0kw4zm<~b`}X5gJI z-@t&cg$|aaNfJsGHO9-}V*jAc#R~1mxu#fYX6!Hk)pC7-6l{d@IE(9xXi1iG8MRV1 zwe@&@b;mGmm^+t&d-ttVq!t;ejLQ&UjJJv!D;o@w_z;!1j46V6ZfzO;_!xJdfN5ZA zmF|!aj|s_=z`_DQSP~fmS1eSc>BP7#;T94PYjfa~q2gkN4;Gp$p`D;#DnttZr_;mW%Zr7_hGFIA_{q=JJ# z!FlUYf-r2Zn%kcP>qa+c)!-WGmAS@c%za(qx_xJFePx};YoC{KsL8ZOVU(2a$1_WWhq8!DJOA7&0x?E3lV_ zQ5H{2h;>XL);FTrOqWDJBfTjq9(*KeASS^aFVVI|x3(fG zS;QR?ht+rT)p{M{P@|ULG4Et}OB>^<5em8G-ip|DmVuQ4C3VPo zz;FqnVvX5?$9Ff?3!aWWZO)XZ?L%twY=?{UT0zl`HTa*NnnR701Pn1uatp99w9Sf# zLm2}e0P*%48DeDQWYJVWqWAX!tLDgv#@n*|yZsFA?*YTDf7T+gjI*u-pML5@#!e zbrGVgsstU>N-cGNJrcv99a-NfpxE~_FcAk}z`42|Udo&~Lj$|Ffv3mLekwJHM}EEm zd*3MJ5yZ;*tPCha0SRlh;6v(~Walsj)cpR38M!ezY~-{t&KssiFxff|9RVTW;K^m_ z03;l+uhv2jwpclMNR7}wc{G=gnRK`FU>oOlODGk7h9bg}xVS{ES_YRZd;>-@2bb^&|RWmZr1j3L(kU)BFC1^IECKT(HCSK zgti5|es?Ac6kN;h(CrEmpROG2k=x#F<@PoBSo$RWlCIH3>1020A^w`!HAHWA1Xt*kIxjno9L%7j(6OqJV4% zVz-lQ&G~|{Ms!;yz&WLa;G9_I4Trmpie}34WI*wtJ*nEacA5?HAU17aT4oirAccbQ zgEFA9mCxArw@Pijw|F`BRVs|Z-uCSWD?7j)td$$8yL6B*JlNj8?b*+=vs4feGB!}* z3K<)}DjAoiVGq#D<+f%*xUn=~U)4&v_+Wdt=y2@qH689Qf?>qOzPehiE*Far!c}Pw z@_n>9YEVR?dxVpaR@-tne4(P(l06|kYonc7Hsc|DA%^m;Sgu-}ym1YBQqDSCeQ$X+ zJMU>$#kGX%!tNW!EOts+gS0vCb^3#)TmhA!+v|9RCK+K2c+ICo)Ycy)b zn9+(=BO0}%H7a_zSkbtKnGmg-vDRSVj13_>L&!%rkBK14xRI|0<$?>$Z5&Lr5E=zX zy@J-67;y3)y8Rh)hoJj0S~N!X;Go>pAp%Ho#_3r{lZ-AIlt%V1v7?nn?I4?WDIx^f zQO$KH5-^XfSKV%SJGwmqXKBagi?&yc!9}TUE^0tfIIZm=i~|4s%|L&Dpt)y@5RGd) z@W_l$bjxn0p(f4BnrZ z93L4T&iZg^2Vzp7)xh`cyzYa~UOqLBr!f*+*9Wt}W}?(4@Qy$yI6HGxF3?_5$U}K# zgbv9Zb1VvhBOg4tl7;QtapIzaa)M+f_?t2rrsUPJys{IIcpyZ|%< zK+{EC~8ZcMQNgV`aIpp$SDJb3*Con@0K)zD}$@KWz2 zF-1?$&?vzO>9!Ald!2XJ)G3$Irf^K;I_dKJBC%M6NHIA>>Nx&KvR#IUkJoQFDL`T1 zn$75q&K+i~t)uqWgZ4@@KKtI0Qmb8pKUbo7)7C*5BP%gzjtm$2ai={SE#iJqMDa{n z68}I?8;817bRbH1tEymt=&qMwhTTDgcJXl|ei`J|)NquvHhCIA`&_A@+VAOUKfS@v ziby+*;d*KebzORRxLeD1wZtFZA!lg|OH8Y@gMrQ%9pfA6bWpZ9J66Jq(Q2moMjkg) zxt5nESTXGtfc^;Wwq)=??hI%!`F@nGOo-wOX9LiDh|dsTGQ27mbayWqWK9}mj7Y7T z+g?Enys|^061;Ab;Q-qziY{|+4>UI6N?~jTfD`BjvyXqy9k0U52P>7bU$2EjKgs*S zzv|0bVxTZNgV6wB#ea_X*3*Oxd#=z_UK!iq;^JV&S=0u#=3>*-Hn9STh&C^H=y$y7 zlz+a0{4?LXf~96D7&oglED~D9eD5nL1)mw)F211)SaPltwx}ULh4M)=s6E4`3Vdc8%t6K>Ozm|=4dRGWh?#8(7B^ScBA^DVi?ue9+#3_iZmNG4mDH*~F% zEax$!)QUwr)#KPojk~AX@#B_gmz@ap)r+$vs(mFhXu+tt-y+Mvr zPl(h&nlBEzQam28>DVB!ZDb^)v26 zKxB~0_Ag4rPhQ0IY6eYw2{lWN-BWk5XmJ2S*mR(VZq#oWVjg47U zd;O6bUdVVJR3WeEzHx4V>y5`Ts!0r7Q4JT?*9-7ex>~DehK!gP)}0{;;s4Fi>?9D0 zm4WILcQI2^`*}veUVyp0X=s6h)bd=aMKC?~wx zfGJ2BG8F=6i%fQQ!67~>ctyj2aD)Ott67x&CGIx+1N9{0_2|~wlVp1o>q6xKHK{$D zN&W!siK1%@9?d3E=>!6@RtdsybGrX=8W}WMV0SbAruITOd!xYLSdNTv1|#P#Y;Et^ z_VzS?H0sYlF41-Qh-hwQoDq$X%euSM^70?4GZ2Y*ewwAy)bQ*8@L3VVD>nSS?d_dX z-Kk*?sVN?$H;;0_?CqAbD8yJ>0D+^s&i0FQI&7$0!cV1)WxBO6RL7xQ7}7q zQTK0KHtNq(n#&gi<_0p39|fKZq=F)z$$0JN_lt;ACEd&Mh>l6HbM|Tiej(aolwFb^ z7>a;(gd?JXYB3uE0M^idvGYQ1%~sksPZlVmpp=*!Kv)q}`2g+^s_XMPeLFkNP$A^& zL&T8d&!!Y|giOha6gGJrIsMT^1;_*yKp!*@c7zKz9+NK@NpJ*rS`=|O97%?(A_(+* zdrmVu0tM_qZXUr6kQV}aO8{b<^@9?$zJ$LLz|Ac4CVOi=->|nO!7*A51HBDqi|%M3 z9@KF&+}d(wJ@GF5jC~MoT}6Fx@MV+M8rIhUM6=WSs*y;~52-n*fD4J-lC=RS#J5OO zfOdvqH%G^mjtx4&=9R@rKP{rs?e?J7%a!W}-bA72Y=@Gf#3B5T<_0ahF| zlpgxCVmj1~rBtY62bExKd;7%t$-ZT9{$T-;A?IFG6%`#40xGqGEa7~Lp)T=OtA?|J zXlrfOx_^P$9EENZuY@YV);b`ZS8_i{Sh!|)%dV3}9`xZW-2E%1OiKY5XH= zl+hKkH0&kDf;kQ)OynU0W2`4^b_XQlF4mO-VZm`D?ClYR@Sl+sW_v%L3mq^dH#Gl)42hZDUD7eJrpRf+E9y~RCOh)z#joAY1aE)s;;8b2o=kjT62ES_3N_<_rb>M5*RN1vG?j&3WRS0a<$S{ z#*?r3f)cqp(E}hb?CN`U(_Fj1z@3H>NJNxZ%8W5_QK!ep{ke_x(KP2&xgsH;Zu^4I z6D0T>-EV&~D7h7)?nok%p7MD5hDS!nP((a3BMF1y@zJ>b;3xY%?sxV2G}!E2z2lSP z%wT%%%9WXuY0l2EnMbcbeeLpL@IzQ^avoW z7cZP=sbzX?iug3o%=GzcEM^25e?52awbx$Ti_N67X2eD7!SenqP8CJ8Q0@g^OWbRW zS5pkHvKIe|^z1_~JooIg*PnRokvSZ-FFyUzkACz$V)t8g@|Wo0 znXhwdl<$4xtN;36{>y*!um9D*`;)JKz2+V|$zYs74TZ1`zgsB_n~K4*s(Rq(6nkdq z;auCVzWV0L-rA+PA;+s&&UN%b4tKh+i)xr&m`QGE=HlF|*Wa z9-q5%mq5&~zrLmVP$g7r#N)W)TCrvCo&sL<%=AFFPjh2ojoiDpv3Ym0bY~S}t!a1e z-gCNa3o*^%e*975k$~P;iaQ%5TX?X!Utb8-i{EAfU;F+Vd|VKKV~e7Text8Z*;`*H z)wu|&XwQOr_x}E?ySwrD#conD*sWaO#L~=4s_%?8@cQc+?fzjVjd^*dbbl9P4n;YC z@jN*)PK~ec^Jw|)jb)-qB+jY7|I($OyK-gkojdO=t%l0WP@!_j$n4yo>nD=cdGFqX zygG{?FAkK8@7&Aym^zx|q;>myCNiiKHcy^3=xHW+@??+QzDKr*qCIwU@>bh_{GUrt zYz>{`h*;^_cocHrR-%5f7n9XDcJ12e*u>QA*()bcjLlyA*vCHhp=Yl@d4;Kd?83}= zQm{tw{6pc%CW?lxUAuPSlyWf>BI(A~J6`|YH8@V2?e05^nG{J^fL*wPtmsSuq zimEFdPmn8wuz*Z-YKjOp379FBtChX`w{QChg)w)A@TD209U*9zCNk!kCY;s07T{A; zn;^EsUY`ez1E>U`=814zsgU9LQTlym5RlTWnOf`Q?8&`7$uS-b?(HSxUQ0%~#`lN( zVhtyv169EJ^Qgy9pB%=0h_;*(_vw}J9N-(pO&zOUCR77HjMR3HdY*M!Q4jqPM`$bT zqcQRIlCR^bI1uBw$a;m2krT-QScKEM^U>!zl-Vo8J@bUEnbZ@06a~PCI>{$bD zIgsp*S}jc~nsjQgnZgDG8r{mB5Q=^_{eC;2ibAuLi`>Y_b^FLh3; zmL=Dmor{OFBa-*!%a5gde5iliJwsC`&z?OqGu&&38`EPw6KBXDIh7ugWZR_5bqkS1 z`4jIUI;1zzGkE$W9U1cps<*dUfRJtOS8E~B%=ZTI_9#?Zwluhwi9|%ATae3f&y<&d z$MUCS`HTw})BW*}fAW*#dUDmWk?$!MN*`W0_F9rt&E0G$AkpTwK0c2m;b|Zs}_We6}=Hy8T%Tagc zqOZMb#Jkyf;R!9zd44vtpuY8%xi6?E`c3AWK#al%0#~#%Pv{#Y`2&=ldC?dYT5R-Tf;k2A~7a(sZyIm#t zy0Y13$2vb**`av>25SO)+P1Y#_ASnkyjBg@@pH7hQ)Og2c&qavBHxR0|OIJ z3Ve^vJ$kETQ5)ma#CJCG`Hk-k)cKT<>06_23x6lVcU^D&5gw!mZe^JjbMt0K*)ms_ zNHsl)#C;N9Vwz*$fSACxL&*k%oW+-)k3>HB+1V_>1 zDgKyDfw``Jj=P@B=Rs2L=}!iH#1c8ft~?a@{_^@(0U~O{YheJ;$sou|=TA+JjSTb% z0J1m+02Z_`(r8YPVbM&WVnn%DX*4C?@bHv$b4rpZ(p=x(cj+WVPKxk6C(T)R@J}Bu7a0Dhta=hF= zCAD*^MNiu`p2HgX&b$^n#7HonLvw|BFl&dJHJ*+d5J(g|&-xsXX8J9gHJA3ylBsNBaE&V|%QI@jq76 zd5tlKV5dCZaUa1_=`7pm$Hk7%r629`VLv|eP(O~<(2rv^^y9F`nDH^z!Ig*B!5Hg6 zYLBi1`uNd~K1rWD%kx?hL?CmW7=27}w~I&mmxSqKI=g`=6Eb@)gGVYk90hTjBUHj>8jX1<>^r#SN>7E=Vo27@8LQUj{Oza8Dre* zkqvZwuk|wWQoG*XfyTPHkWv12N8i{ZhvoLpYMeg4*PMqn#u^4$Hr3IFE$%riAFiFB zYCoM>!%Q8kVeK5N>Aa@BhM(`akF1BzvfOu~<8vt=8E4r!k1PMM-4kP+kJXuLl-2ms zL#vUI`9eqQGE(hwd!+Qoj*pc8u%hchXn&_UAI<(6yC>y&KV3P@-)7bYkJK4` zhU)$X7yj>^eP-u9T<3a^x}(<_;|cZsFzx-<9lbW|!-w_lew&(sM=g!VhnS@?f#VV_ zTf+{}-EbPBS|zNVK$>JdgYFe7sd_78Y;j>&y4v{O;P` zt+zn2c>N|%y`TpoLA7E%&kQZbfi-w)pi;3%6TK(So;`o+pI%wDI z9M+iMn6vKPru$c{=P=72c!!RCFI?WyeJ|(Iu^Q<9v6{|n4(a|!jZM+XWeeSx+M{%z z)AO%)^hr+B&hotGI6TFr&%#l+PkA{9=55;zDmrKtSz z4;+@we$>2F9O*~%p_)Md@oPdIHRg)x331J_Rn&K+&g@U+@cw4mf2=HD>FlrXux$3X zA{9sa>wl;w`cTb4M~yk(HLp~4u9D_MH38CfAH62jQDd%$o{(H~e3kSat2O&>R9byE zpMFTWe&lJxhh_5{;PhQT`m|;H@fv6M@fu(9-5PUt{3w>S5XJmnTTYvAOFbd3t9XV~1sP zOl%P+@i3T z*!ugGe$|6%%{U{(8+JZe8XeHP;}N`uy>3r0Myh!+3<6!_>g(%u7AxlN#N$&LPmG=- zA?c~}S5KY7@Ci>&s-9UiGY<~%o+#$YTGC)H*qFf$Wt6=9dxtBPlE zW+vmBno4!!5`2is$kVm$dxd_GDdug3L%W9{Ik_Kw^!)6^gt+Q01hAjs&onVH%Ii@Q zB!)Yz?V8OMN_a?nF`N3|BAN;qpcXex5fZuaCi!R;2zl1fjzYk?@ zZ*Ppq=7SyF>NbPwE>`Q6YAA(SYnUuN>D~x#2$67qPogi?mnyCr5ZsIRmzI{+_lRDp zR-3_E4XeFy4H4kD;M3iBxB*^xY7Rrs+{xd*q^kJTqysJc9#(^#Jw9vNY=APy^&j&! z-mf|iK@#nW3!BIkWOBywRb(IYS^g9CUMuY4A-lUn4CY?3VPqHfAgo-yI`xzF-az89 ztCFC(BCw?Syx5>Y5MK0S_)Jb*e5dzarEjP^zIn*^2bBefx2IbBXn z$WE=-;kb%C^J9#Cqh7^eSH&9`FK$9AKvKm)ktQ8FF3?2Y)>;n3$=hMYi2p>re|Y6o zau|CF)&!AAyd7D~_=)=nlb+S6(*x|>_yiw zuQrL_VT{xvEB};H3$&d7y=o7%_o`KoUTacT|KZ90-euph&)+ToUHWx-EGh_4I5}Lz zhw9R$^JCYpJu)`XO>{taEY;sTI5JY%SZ2>GKM-G%Exa2cG-|ln#3TixamMS#dDt^M zi?Mokc46wr*;Xbc{1JO$FG+Cne$Ig2RRr?ZBk4J=U7Pu#z4)uQ#}DhpxpPy=E;q3F zZdWuE2*=~a9dWz`Z%+t}*Gz>o;C5eo;)(a@#gDVhe^@Ubnh^j{@ZzqkIAR9?*1~fv zh&xK)nP*PFM=ySyxjoi0hsNxq7iass z{f)g`z@LZ_4cNDL|IQn4ym9B2*qtA2g0EL7l%1Y~gIV+_-I=SL6aWf&JWbaCUrz^h z@!dy-24(w^Hig|fY|J_Mv3u9p*}$7&eQljxlEcA<*6dDxUBub*NA2AY*(_~>_M`P~ z=0qywR`!-2sEQZNh+uGM1*f+yU_3a7IZ@d?YTX%=-d+4FdiNu3BJooPe&5pk{Mcjn zUZ)!RL;IC0lYd3;ex%KHbnMLCRoSf3^zq$Qskq*&cCY?kwY8(yqK#9uCOo92HEC<- zA|tAWX=UiBo8J;PQ)&AXJ;%4w>+7WP!=Xs`_+xCo0np(+wH4fsR%;&dEt*Lvk<9!M zjFKIjKikj)!Ys(f%Jg)<2b4W_bYAuJPg~>vGHssN$rlMVY8F=UaoX7AV3a7iW83}w z>=0SoPR#UYl;O+_$ezt9GI&iTgCJO_HgDjeP47sKj}IpzNj8^tFQU>qG{*XQ@A~<{ zdAsM1r+!xsU3A7jPj5~wZZ4v={^nQz0vGI-!C^E3lCp;aJ?V6M_QG7PS=EGb#t{du z1T4i`CUfFozq!A=_{M$rc&xB38uEAEA$UmBDqEGvl()6I(&$PKj?lo!2sq;A-6T#l z{-=NXXMgr*fBqMx++Td{)i)}IZ{FN%fHbbEuPD1@Zm3jpn-7YP;@;9boAsSrqzP5n zs&-RGc^}^&?sXITQV)c}v7Wwjr%qKW@cA(Rk3IY1%*!8t>2ohkDWAxIaocF5$=)_T z64UOkWkO6!Xeb^ZoO#6KX(%o`Ft5h*{}wG?4eAEZ;*7_-;MvGam6)D8b?PM1_0y9R zL(KVLpD%}_=Ygwx;_M?A#=4?*7KGN_KXK*)27wTci%wUwQu`8!=+paan}w#`CPy$l zw%@7D%_aQ%EQ0$h+u@lxLb+`XW<6IWx3I}O8$QZc&rS@dQmKA?$@>SQX8BNliTR#QPu`pm~Ey?8y07k~C6ANt@2-~a6O>(?%FX8qDH{nBSX@rh5o@V@uG@54WJ?O9UbJcWJcpW@q3 zKvQLHY02YRT3Q26Sz8z&PS&BbYsOM(mn%Iwg&KZ>{K;IjUh}5g`{z^K{nX93Z?oQv z{DFjdkVOP{O1Hmj2e<S*;pG9 z`vIh+(6BRiS`h0K9AFO?*Xjo4oJhfoR&m3otSmnto>-V-euiOB7N9@pFY+4#a|S`aCY|E z@M-n|nZ&Sq^AJxUe%ngb8g?8NxUoH}6@zmDy3a52gX#@2xXJ$X*u<%`b0=8>?#cru zA?NMq{Zy3EQI<2lWnyY%SUe;p1~CkyQz2hdrl$J6_A+~=5*(Yh{FMI|y?T`J5CKxj z6EtZDQi7P>hC7+Gt=)R_%{LeKs|`=@B(2X3ciFe8xtD894#knjBVG~;E&#~tc4*n@ zYHn+JX?3Si2m{1f+Fuuj<$G`5D+0MN&7MelTic8GL1rc9sAjGL!;A4D832*tC}VGF zGhU*nvo;$pjD)0W#s1-O$n}5^Kf}I>Gf#cs10Q($F^-GV!*Haj>B*^6k36D0m6@Nm zxrm(ZNhLz{O4Sh=JTZHsP$8NM5D^0PY|4r0sXo`nUHo#FHrm-u&3Sv=nm4nQwn~Oh zMSN6k_3-I2)wB5jR`+E=a$Hw-S(%ktm0A0~?@R9sfCkW5h;D2IH-Qol{_wve{4owkIOK@=@{cBBI2w_XD1c}ZOEOV!_#N4V#1Ouu^?Dd%xy%j!=LVayJteb!F%{P|;P zzf4E?E&k-O^W)=)K^;&PQ3gC6aExg%_)Wa%CbWy3N8G{g<4R*Q9^X8i`%F)Mr}aDL z9ol>1k`>c?8g&Ur&vBRF9kSU}Yqu8c4T@B2?s88$SM|Fd?PyAJDKHL8AoJW(?&{i+ z{ko_>4{0xfpFVh7tsz)%N!jiE!-VY%X{9WL)gT;|N8* z;Ysi-vJBJo!J@B&6E{#;hs#~)Nztf<76XVwrWzy&Foj*ND_5TU{PSPL^@XReTyeQV zMRe!rl~b72M$cVAtP59BeF)qXC4@cW(4CD&9h9n|x+}?z_078IM=ZEctZl3VdjC+3 zUe@z}40T8VD~#g3(WetO0UUifoYk~q)J;!MOmN548xh3$ZrxLqB`%iFgMA<$Z9l;5 zzPaD%usV^a4&m-NMmm?axcvcQR~?BD4B&XnJ{%{zyuUDo0Wz77#keBcW^iz55cUi} z3G7&17KR50Rrgd8eB1mMoLgHaYY@boJu{inU)bs<+Kr*PTXHZ)>|aHC3s=X*oGwJNMkl>G2o>6A7EYnJ+@A zWL?c$8!D=v&K8Px0F{ZnVY9Fj^yc~7f5%!m+!I}R12me4qYZzX?^&z&zT1ELJEQlo z+ih6``Rv@YwlwC7&&pl@9QJAVtX}`SS?izTyIvjGduQk`Rxq zZ~JFYrnUJ_{A?CN%de3XY~YI z3za8q(tR7O7p3~FAy4<7we+?Lf}UOiK<++?6zG@O!UqzT&oTsuYjB_)j2c+7hAuE9 z-bW8zmCPiHJ5mImVC@Et6j(9fdXVTtxobHnvrD}CcWk?S6 zry=oQ?tRBeWN^5J!rgo07r%NW)dQW&>gf+?rR=_AqWvTV3U7!=n<`vkrO^n?Fk=xMAo; z+Rp@1i7sMoz@AGRLQMxVnYTyAG}R9KbyqJk>At8v+9$OHkCNIWM@d0yr8mN1z3A(c z9#wu;?*qG^mAyfNZoQezb%ZQN6!G-0=f)FWUIbcMb4Kv%4_CQHGaI!YSz z>e4=YpjXPu@6m(?a|o+MiBYQny{ zY#u4?IFEYPbfi=<>CXy>`?;e}%HA6*7Oz_Xzk?n(Nn4H_h;-ls24Xh=vfMs@B%RHQ z73}AgJAQwMz*=gY6rhb*Cv7JH#vfQu1h@z`WKlF@Yq!lM5?-YZ|2j7CJCzNDSFTho zp=g5bvpkEOz);4uYHA8hvem7vJuooE)0t#490Fpw-`?00(_y(1!?`y#D=6MF!6Yv) z5s;7EY1(}0bUKv*^-_ml>~!J=?$!{}^#RHV;joc#*i@+`lc{W>fJg?gI0LR#N&pPT ziYOA`@Uqsqj$ahu=ti~cyxk7yv6T zhBY!Q37|+^WPM{#aEBuius7~)7{~!nBHbJ|gX^5e^5_jkV(DxOfNL44LU>75A0_VK zWc7wjOoJ#BlAQAa-KMtR;vx}QXkfp-p@gD{^L>Dxy~3qwlmF>O0t}t<^gcA;-9g3ezELIUq#}5i@nPfak4h zgEvqud(&j|vYUIN$A0;=m{S*bt>^jv`%nHo%@x?u)^xg2q666hhK44?Mmw1UJgPG4vPvfBZJd7Bo!B~46{o>Q_j`oK3zo*`G`peJ0 zJ-XlYe%GHayYGL0pZtCg-rZ5}=|I+B!v6b5+q1WZN8K4MMe#Iat7XCM1651d2~Ojc z_4P`tvAH=qTFBaCw!@fhbo9XPu!-5HUf=84mp)Ob5(?^!fAnkN!WK1O&A& zdGUvxw`6_;Xv&&2jaoQHLOe<|HZnXk z^wJk+fyipIXEG^@Da>T-#_E);O>yhJ_W*=Ce=rWBjEx1@*+?9vHQUN-AFnm7cD~Bn z)1XE`ygsO&=wB^AGoi-8dT8#zNQ2IrLaL#)MFht@SldNacm0F|rud@R&X3NAaN43x zgrn9rv3G!%@EegM7YxWbpx|H&a&fRIsQ=40jJFI6@|3` zj}pA2kLv!{tkk$j4dtTZHX7l!LRrQ$7A`B{AJoJ_qlme!CL}2Nu(K+%EXf*{ejh4&Jnipj3 zppOOcCkO-Pg{|0(^HMAex!peGfE%(NTC7EnB z{3A-k89F5{x}%w>+mt<#_36Fz^C(O4v z$%j~;e17=knW?FfL_l0!7L-^VwB$nrxokFXGFjab*o6_d)#%l1W~_nI`S42rVc-2H ze@`>zJK_LJgPi|@^%kTlnt|hH63qi`&WM~L9!6Umh=&8kY88asc@=@@pwF2z2@)Ig z+7rd%(AZeJ4MY5d2AWE^t2sOTa`}R^p$)1KW^(SC%1^-<^A=Ujh{FMvgT*{^jdHJZy29RKQ$W zhnicLBH*=%DO|fTCx}g6U~>oJvXTiD#<&Dh(}HB&;(s9lv{6@J_|la#-+c2M*RQ*s zp79eWWd#hevC--2C-{4t&AHIV-~E?01PE)_>e~PKpMQ@|`ri9L*JlNqp~j$kl~n%p z^_O0F_3(w}Gp}@Fd2>}1l`T0-~y`JIXl*uR);ZC;l*V+Vm&Y6^gOGp7gBK}?%IH_Ts^kXPpYpj1yF z&J7^L?VaTZAARtvj|gPgXMhYp+}>?l0j3D*YQ437mwJHLf)iSjvoHiWl*xj(i3s1- z&D}~Hc{&2&)L<;+j*Ma9dG5sI_#k>)j*gm*A$E@E_G%`@75h|3L5D-vavDN=OOBx@ zV|-&4;#+N^1x08&0+#U+b+O;Szf$Rd`zVpgArKZvBl# zj71d|UAy|bxrjOe9Wazimz!;qK%~2f#N_SDz<^)aK~(ZC?@SJ0(RTy9qOywQZ{n@I zV{_uIIk_DS_7$QVf`#xDQp!oysiHX;9*X#Kxk$i|j<_?C>3ICbfGd^sd)yLpi;AM^ zTwDZ*`u%0A)4FsYEF-Gzus|<6>`npjGiJVAUY_f*OUld4F8L91or%PAh+%wHiA+oYmUWc{8+jXf_vi z@%Ub&L9_)++Z*@6uXBGR8r@k0F!rw>M5EvtyFq+_I8X~W1PJe2st5g3Ce$4S#WTKB z11I=3)N(Qmmq#v_N#{^_%x=Y8DiOjV%Ro35$4wHyb6I2fDk4{K9Ef)Ef>?oe;Nw|b zT;9NRZzUcaocuJ+^I+9cojWa4sZ_&aJDGHwtA@S&&yd&Xb`{B0%iA!Ki24c3_u}l} zU}d$mx~VkiaBV}0pfC|{#YI&dDj06vciu`W0gky45E zmG2>s^C1sPgGBO$TsEIiMT|Vxktar#*E=vkdD8f@VKuS2*|4!Zt6ofY()xPY6ywY{ z`Hi)86#=DM0q_d-0>tC20P(mBW)&+yoC?77%b!!fN#UTx-b!f&BuJP_5FNg;4!uw+ zx!r}rnUT@qQK%MpjUp6QE7ytly)Fk~mxMrlk_7y*C5d4EW2a$J{4vP3PzJITa5>!} z74LRG7K0Nb9`T4E<7%sb)uf^zeY8a^y0QZAm=CAZUA`D=l|P{}B|~1j-3wknxD-P1 z0BEYf*+uPcG!I#=+ABGCZsyVj=z&u(#|~ZzA3-dw3Xx z_J-9EUKF~T6zLi#C<5Q>D1s=L4gB1&f4`h0)$IAYt|EqGG5S*^6uE7@^^A{YRYE1oh-Hjw3liOd{_ zg#=eBPPH^TE|+A%yts#10zFkGUOA|K(b}Gig2BpSL8^7Lgk)S+K)%*tK3Tbjp2yoL z@44~uLN=Sr;t(^g!tryDKl98pS$JrHt1FE~nTBcOOF(_iUb%Md+T*j2PeTT@`@AejW=e0eug? z#Jd)k+hIXqy5vM29}xzAsRRQ8=WRp`LtK$C`f$f2$wUzYes05>*VceOmp1_NJ2&C% zMniT1=x4xE4tZQ6-eX6E&7DN?Enp$u-Q6=g(IQ?q@SEi}ta=jyxjP0<`#kD3W1$Cv z0e^sO6`Y-I0MfkE21WpeAd0oIO?V8Te&4_>K*E|5K=TG|ogGY08+CGlLDj3)B|1*N zv`j=c?M{ej{OrITucMZ8ah&+2Nebqutn4=U<>jj2!pjIK0Ge24y@+hxNw?P@01W^% zOdw#lyX?_CvI;rOWf0%jVEg(Vq^tIuvOp}S3bF=^3WpboYk9fF&dRpU9!!DJ2-KG68tq8^KLeEfHq50Az0_nF<$)Q`$zh1l3b1;B$a(|pP~~ziNVW|8 z$f~sZ5UQ=T4#4KJMeiLw7a+f#H=QXk&rUy>U4;QHJTjW-vPkJ78t76 z_47a1ksEK51vP`MP*@Z2MB|^1JAgJx#G@%pm+XpiaaGN9Oo;@h$FSUNhC;9}$fLCQ z09UC-_p(dYEyJ%M-HChwC&wC%Vi6p~G|9o|;wHqs6pl`fWz&VBGoVPheD?H-F_@gA zFmO~;t2v(s?sGWoFheg?3FMwOEX;gq72T)W0S6TLWfYsJ=L7GP)k01HS{7Jp+3Dxb zWGxqNkbdWaC8kNwqAZ~Iwn=kg3r3B_G69y9i3z}NSa7Nlsat5nMS&#-YDk=A5`=lM zL(kzn_Z-LTzM111>nY|vj0yOXS%$cwHw_>No1}WJm%X(ZD|Ch`YyT_Tq*Ntn;n}}#XO+5wzj?)9>reA@JOa;q!utz zyKr6G&yvVSN54%%{leR%Aa(x+08bo5G$PhFF;Og=H#W|nS7l_-X>5RGbVIdCmbc!L zyeL6Dj+3&QEqxB9j}L-l8Q!E|GCRmMI!cgw2VIH8AmCY5i@CnKxcIORgMFX6iX_pr zQ(9itkxzafX`I~CsGeFj(qOq9@k8wG(}~#HLE-~i;$dtl9V8xJSy@}#g->YZA!tb9 zHQwBYv5b%F-E5`aY#$<9R(8$n45AQFoj83~Y(HXHnT2+{!r7cII08cJJ8jXIdH8UB zClzyum4}>FHDOz>*s8V7tv08bi;6?2gWpWB$5OkS7`k-M)2 zLr|bkL8fBtERwDsbE4(5S*Q+|0~};FfyfqQha-R)(5rwWw+UCZ4*(7Aw%LX)R8mVo zKbaRSqA1NdK`bIJEv;6~ZWJ0&=(3Hb7B^p6U1BvDg-Y2BTIf=v(W%?_Nhc1Lw$=Mk#~E+&|(t95v9wbmF$c>^d>8>B!&lW13yNgiBK zH5ex3w%(_&;WveS)FI|{*G(-fa!>VF+$=RWG+ZgVKpZ8zm*E8_> z;bn*x=g3GtkMoYjLd2sGr?w}Y92!4X%oTBFetH^5frp32=saXDiX-J-XEu&0A)L;O zqf^HQ$;cl!%PT9Ob-=h>S&?ZO=LKIBTZQl@P5;)c4u6Ru$)0*80=0ub#9Erv-9i-!t%!kT0RAO z6E!8-jB-%*MSfG`Y6bKY=2>6?*;H>Ng3jD-HkzOj1(B)66Vdm=e@rdHH&GrKr%4x( zWi1l-e_9snL1A3$>-%dK>)JN-49|l&_5Z4Le~8kZe&L0eo}Ilgee&e=)X52YUtzRm z_Z32L?BX>X&b|J*r@rvQ3s{{)0zw+@bKvH&%X5mZ)Pn+C#2M4UE7S0=I-F+cuC*z= z0qx>T>hoJ38~$$ES;eIho{}y!yVC_QGKI16qxGNRkqI;Wo;ZgoBVF_aX~m+CRnp3_ zP!Nv~z(5$8NLsid0Im4oq;**pg4-W1HE6B5OT?8R zpo4U0NZ4FnuWBJrtPeEEbDYRZ_wa4307?OTdd|E z@r}9>H}PMQ=L|rYfooOkSnYvAQE^0LgK*_G8mCTW3)yhUfu*b?TAVuf{EJUrojH*` zb9Uez!1J6EiAMwZjW^? zu)7Z5GRX4K8Vd`Y_W8Yktk28UZT9(R^?6fmd)^6XI)bO$Uc?6O!h@0uL@P82`SKKt z6bRVZdh$(_{bV5q)tnqCj-NPw0(%Wp#dJOa6Dt<95n1#2v!`ib7o$pN19$`v z_OP^rHRurMomkh@pr1qV7LAX0+H>TNK)h2DTQLSL9lFP;I%|&dQ z{NmSk``x=NJ!p9@kV<{|%c)fSOm%PXRDK|rDS$5w5jWhKdDG&3RpAvSf=#$UATzAb zG0)>yz)R8F^?$S$0^cxC3)so9Ii&*2wSXMo3ny>{9v`TEzt z`iH;&+H0@<&KG5#>_qgF@mL%_4X>N~y6V4o@BUIyqjKF_yalJebno8lud66bsZ(ED zTw8s3PsN(Rc9HvA?r$wh0!=$HA?P+O;hmk|+#<5|y$dbH z6-uVlx$%>aakZ8d%xY!^Ca}TLvB%KU;var^XW^rVL^1l&uWsGHd-ub;cONVfu+{@W zYpGUCqjc-N_kLNCRrhXF!^lw39{>~b>krL(%RYlr6e9{&?^wS#K{87$Xd@%oao)28 zXjq&&j%|E!bcMmmr8)uf2C5%iWCZ{t!&zDc1p9|e+gcBvoYYrIpF^qxyXez{fuI*C z?26EYR{<-VHXPkzeH$*)@o}L_RIZ#$m9Zw*+h(4ci!3ya9B4S;n-^%yk@bICqYjK6 z$5$Y*o4IreXlwZA?6Ilo+1cs59}tAZI|w!8%5uZ18fdkC_A_+9TR5rz;fIbif#*zv z3Dk-`Tf|AU*Q)xPK%Wc(gG#%Y9>Yh(9>CQUz$!H?Vy~%L--U%-d|2GDq*@+}hZR_u z2Ut)l#kn)?L#M5_*j+8bX173K4ndq^?Co1s)Hd(|NPx4~ds72!IU>yE5jMV;2a zu%LOT=MS-Ex{`w`;7&^(mz_3SxTAQ*XuTYonjFAb&R{^N)5;8iq?}_@T2!CXu3fu$ z@!GY+QyO<#6?HyPPEvh^0x^OTqc1EB3F|7+EY5?*bdDE90snL(7RgRNGjs0v$jJC8 z0hNs8axcI9@)sVrSm6}k+uep=9Col02LIrRayc_FGBP?kk|RTAs1V@3a%5ZlrdsMH zB$Sm=m#Lg;o<+(k(sG>eF`|1^<$4oJv0kwksF0f*yHhg zY3lXt??dyR9`&XQ<4}uJC%|2SnHs)$v|i6kb+eZWj1Bv3g46k6RW)xRUdCAS{5O>R zY3|>1Kj!{|yNN%4%Kb4nuYJOu>HFWm#{G@<=Rb4*337Zh_`R=v^~L9&d-3znJwX!@ zrXWe1f{6MQ*W=HB?Hk|u?svcUoo{{rBK<%DJ}24Xn5sa4 zEh^GnmQ7ZObViT@plAVi)%n>!VAJ}e7ENc`yv8)^zd-3vJa_%-g$oyF&XX~6>eQQW zzWMqq&p-d-@4a^Y`t@fojg2In&ctwXAc^%lg*3Zj&J#MdbBb6%5q zY7D#2BQd$M3Xezh-aQ@F_b144X7Y*Oee=yXE@g%@*z?E@!o4U)A{z@IF5F#O-p2H@ zy}G=F)h%g>NaV#AU-{-6U%++6S*6XsiX$f@CLs62AAB2SeF_}L^ylAk{{esht@in^ zxcM8HBj6o(Sci{azI^%OM2O#F#h^XjcQ6u}W|L)4YCs!_K5Sk&5kfvb4%*sn=sVEX zj;junI|rC#EV==tV=`iUHNOcW-}(qq_l_U0R;Q-+_WT(Pk&GW37!`y=tL{fBQq8ut zHJhT^70_!-HMkmTl0U4^dS9n^0#!Gj!$vRGvKDS1)5vcU{vwZ$D}*0;?3gew0gv%h zgJCpnLu=HLmtVU6#1q$_c={^(+L@eNCNHJMV)xIG%Dno*n{NTU>|g$?@BZM2xIoks z`}UV!g(ds;+i!pSyWjrS+i(BDS4U4wU%E5{*j&tt2($D0$ZVO&V|_8_z;*>_M4=WG zrB<%Z6*{J$L&g5%2Yb$B3M`%iLZA{?S9R6sh>IXYVf6pSqX(D5$8YsHmu@sHpgVB4rkDx7$yu>W9Ey;CEmFI4vTd)@rqn zW@cvo%3DLJ1_VK{4%~Z9(>gE%AR?Q_m?hh`&o&y3i+O1%+W;NnH6tSDEX#U*c6N3x zYYmfNK%aksGpc&Z^Sn-08mz1m6~Jx4N#KVlisrIPI!Ok=)w!X$v$Jy{48zB>$Tx8Y z^w@2T`P%pWr_v^xR09BNBC_QB{sU=}OtJw0yF}#N>gwvAQ4>tM0RZ>dw*B6y!P8&> zz_X(cg=sMW5jiJaE_b&u!bj6WAEG z*w}4{UDq8-)AI6iy=yidY<xalBry->_{RdjoW^1_VLy z4)88;Yrc|-WheuD-+u)-mcN|hi8UY$!-FF7b}@2_C)NOC%=^>!*b~i^?#REjWXV7SJkM(bpJZ5XOGI9DUH6R)bEYD89bnt`(caB$ zDn#UGRejiToW-=cvLwkx + + + + + + + diff --git a/src/r36s_dlna_browser/assets/icons/folder.png b/src/r36s_dlna_browser/assets/icons/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..5f99a0c5bfe9a351df482b60bd391cdba25f7a55 GIT binary patch literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlHoPkOpI zhE&XXduyY&Q=kOvhtGRYE^L|=({v$yhiQmF7YpxJ6E?Sw;O64sdWS8kyPcbzIeITj zY~>K-%~jH1(aj6A+HqIR{XOf~yWbV(-T!rP?{m4@PjYq*9Y7#9c}Lq^zx2Bj#o9{k z4Aau@tmc1U$y{r3XZXFZ>F66(p2N+B z%-8!LY};?M@%BdE7*?I1Cl?+1m2mtw!&`=15e;PwxjGKk4Q65sWF4fD+_r@|Bbo6Q z@#?7I7Iqv12A1Mg)1##=Ca&{GP%{;;#7BV*%V=8Tk3!Q<|ptAWwX;OXk; Jvd$@?2>?1Z=R^Pi literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/folder.svg b/src/r36s_dlna_browser/assets/icons/folder.svg new file mode 100644 index 0000000..fe81cb6 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/folder.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/r36s_dlna_browser/assets/icons/hud-display.png b/src/r36s_dlna_browser/assets/icons/hud-display.png new file mode 100644 index 0000000000000000000000000000000000000000..43105fa4a41c681b6612ee29e8341c79a782cef0 GIT binary patch literal 636 zcmV-?0)zdDP)$ie;vk^` z@&`^&B4N8DpOREsMwZ-EiCY{in=q{ei6pWLXvixZ9b!;n+&k^ntC&*b2(B z+#~wQ$QPdH?FT_{)>dJcWLdVhTrLlZXs43i1Muiiebya7L^rFk@B0UrZSepQ1i{&8 zG>U8KOO0t8vq<`oQE8uvm@9 zpM+s}84;>Z{05<^429N~ktMIS} z#H;OX<78EEzsb!Z%Qw>L+58egVVk#z1$9Z3-s_z*VDc!dOIkJq9}^eDc=Ct W0H;F_5) + + + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/hud-pause.png b/src/r36s_dlna_browser/assets/icons/hud-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..413091093fd741f9013628b3eec057657077b045 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt`NJzX3_ zD(1YsbugF7P^9HyrC`-Jt`-WZe>4z!86@lbh)z`)T1L|6_A|-IV2Z z8G%|E?)iV=ikhanJk!eSmdCGM*88qR`7fPv*XDexi{I+degV%@XPTGHS3mx`-%RcLUwYfL@Pk|l&V5fHDW3K|o*CA&> O{_u45b6Mw<&;$T8C5To4 literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/hud-pause.svg b/src/r36s_dlna_browser/assets/icons/hud-pause.svg new file mode 100644 index 0000000..870be27 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/hud-pause.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/hud-play.png b/src/r36s_dlna_browser/assets/icons/hud-play.png new file mode 100644 index 0000000000000000000000000000000000000000..8589f976b9b4bbf99995e64572ca9bdef920eb47 GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlHo{XJbA zLn`LHy=Cin*g=Hl!J4N`eTgc+O&;nLFb65E6YgW`z24Q&*!%TT&gP5S0(JGP&xG%a zh+aHXV^fU<&_ob;Gp*R}{O3PU{>s!}^^~6xWK|aXeQL4Y+Sk7nYWJCZWav6R<wufLWpMCtq?l?J6JIzDO#I*qtbvxO`= zb4a)0P_0;=@PmpohjufH_D8mGEijntx`MM{OS<4jM$xyCE&K}tX1o62EKo_m=*6rx zX>*2AgHwu_F1x~_?{y8bbsaAjzyJL`QKIgDwZ~*ekAEE7#16D}#2qiR@s_>e#h_IB zyoKN4_xge-3`bs{>y&7Sx@)Pf7F(#V72veBZlw0 zihY + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/hud-seek.png b/src/r36s_dlna_browser/assets/icons/hud-seek.png new file mode 100644 index 0000000000000000000000000000000000000000..e79c7408b7bf67160e63e2dd5dc41498bdc3f97f GIT binary patch literal 610 zcmV-o0-gPdP)3Pcg`IV(Uq7yGv8z8$ErHXzq+mL8&KEvjbky`zS6C18*o1ICq#6suRJqfU9DCR=kxi^q{Uv4T!CC8@0(ZE zQBf2RMC5voN+eA{&m-R@OC_Q=V2F|LlA{vA6&QNtyQEekXaX*IX7gz_n|=4WzSpDh|G;|#j4|(uqPR^&Ut_)~HSa@Je~!oF z55B)Xg-$?KRi~55ywlCl`8H-=JLis# zF&|?NMbXcIf1wgFBj1+v5WM6{M2&n~@>^i&N~Df_TejEW5S7R=@@-kq0XudK9jz>a=N^`$Y6M wG^?s}W6aB@Y3{`20RR91000000092xHxrFwHP_1xApigX07*qoM6N<$f^RYzlK=n! literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/hud-seek.svg b/src/r36s_dlna_browser/assets/icons/hud-seek.svg new file mode 100644 index 0000000..62542b7 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/hud-seek.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/hud-stop.png b/src/r36s_dlna_browser/assets/icons/hud-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ea6a2196e4369460af9c735ebf77b3942d62ba GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlHo**#qx zLn`LHy}8l%aDYhb!{T^;p)V%WV%s$n7MMgbZDjXxm?)bu@s4A+z)6Pb&qPf;XC + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/hud-volume.png b/src/r36s_dlna_browser/assets/icons/hud-volume.png new file mode 100644 index 0000000000000000000000000000000000000000..391b11a684e46d01a6186e3062664dd9906a266b GIT binary patch literal 1139 zcmV-(1dRKMP)_r zrPPX2Y9$QA{b}c?v;t|U)oMdg6deaJDW!Be7NyiOfSqldh)zXO^vvk!=+#b+L3EO| z6)2@-6h%J(m`tO?%u|_6=5!c_H+PcXmjY<5CjtBn;LfDE%=`iX`)cn7aDtf=pHI&V zpp-hm%wGc->LkBhE}sg5;4T0^ntmeMtCV^@sb0?tU^Kg<0J3Sc3WdV?Mx(J8!1tz~ zh~8LOSSTdX>PZ1=wc3!@`ZR!-lH{2kUn#ZE92*-OyC#H~25`}E-;~W}-%2t^*9(xQ z*)j7c0Cu!~pDLveo8!e|@gfnuYUMn=xVX6UUt*ik)dHkxcAM~;QtCz1Q7jg}0x)a1 z0wKh6u7X`FK-y-9e>(m(%l&S(THVz)h$v>}qh^2*;tAI|5^sc*Qk*o$h0QiXTI+FU z{?;nwF)8K2wo$LwhZ~K?B>+Lo6*rsBTPu~y@_e14A^LqtDW_Na^YKoo$8VgM&iA2aW< z>_scB?4mso1!(b$X%Nv4%U-qOhh0PmrT|2A!L*tAcGHgI_^K7Z%|&-$3J}NfhE+lc zu_dd~z!ZRpHe7LL-f%| + + + + \ No newline at end of file diff --git a/src/r36s_dlna_browser/assets/icons/image.png b/src/r36s_dlna_browser/assets/icons/image.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cfdaf473cf96e9c8b639f2f763e6bb7f1b75a1 GIT binary patch literal 1235 zcmV;^1T6cBP)-1h8dfKj7+RY;0_7Y~EH#yM|)1=q7~RC4_tiU_=zf9&MlcwxQvGPg{r&xm9LMDeA@3O;sRy5P0b$d^F`p5s zp^M_=q4g950S_O3i>FU_!Slz4M5h(6_dF&iqsU~wKvx$nHF<7SFB*>?eTS{BAGF43 zC_I0R&CTxt0E>$mRee+o@Z`x3dt@4LI-N));)q6XU|`@X0N~)@5QV}na=AQewVJHY zr^!vFw|$ z2rxf?8-BkJ0CW*ybaVs@3$35>rl%)y?%X??#%-Xh0Div@>GWKSO^XN~PY>4DzlOu% zXtBFoE+i5kX^ORht^%yAEWzb+$?U8mtgbG@=es~{OC}TO?(Sxavl-n4h(yK^iHx;v z?^J|XY~s{wZf|cdrlw*Y$0MdptpWGA+?21iFA4nCnqPkbjja#%Tr=}{5mdQzK9nuWPkrF!n^`HDSS%Yx%0WU zFS{Iv+1XFo`m%IlDSSr5dOT(lfVJ=$3G4B=V*#`lJ|kf{9(N>wUWLynSdPc41@L;$ z>st7XB9)p!UtgbUf7RRI?Cd8A4%QXCc9~KwCRP8T&CRZwzM4Ds0UI)j$8J`eE zQ3N6MH=uz)prwJ9(JNZVHzj%e`_QXh(_c~p?U~%~Mg(OMWVz9v$!(ezj`?g!4YU=o zK?vD1EhLj5gzQzT)eWg#CO|M4tO|k}Cxl*ZIqrDWjv9YnSv9Wo(`3LglL6+b8gyR4J002ovPDHLkV1k{VI*|YX literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/image.svg b/src/r36s_dlna_browser/assets/icons/image.svg new file mode 100644 index 0000000..d2fad55 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/image.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/r36s_dlna_browser/assets/icons/playing.png b/src/r36s_dlna_browser/assets/icons/playing.png new file mode 100644 index 0000000000000000000000000000000000000000..6707792bf2e403d6e8f54936ba7980d06d4d8d87 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlHo^*vo2 zLn`LHy%Fel*g$~gLS#tpI)=SY=R$U{eh6JsG-aNq`-1il{Xe?|gsyaMId|jKp8V5t zy|c2mHgtf&oBrId7fgKZcn+&K2sbRZcF(tbp6&J0rZ0Kb+}8oW8)xp0XV{}>QDw5( zyqvw^`>maFS@s6To1ag89{+0T&yA6ct@HoJ%V|ITk$ReG))J;0j5k6UtQl^<z5~l(rh@eZGrnQS(Q1%w@MYb=yg^s + + + + + diff --git a/src/r36s_dlna_browser/assets/icons/review.html b/src/r36s_dlna_browser/assets/icons/review.html new file mode 100644 index 0000000..9c22afd --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/review.html @@ -0,0 +1,100 @@ + + + + +R36S Icons Review + + + +

    R36S DLNA Browser — Icons Review (64×64)

    +
    +
    +
    + folder + folder + folder +
    +
    folder
    +
    +
    +
    + audio + audio + audio +
    +
    audio
    +
    +
    +
    + video + video + video +
    +
    video
    +
    +
    +
    + image + image + image +
    +
    image
    +
    +
    +
    + playing + playing + playing +
    +
    playing
    +
    +
    +
    + server + server + server +
    +
    server
    +
    +
    + +
    +

    Simulated list rows (20px icon)

    +
    + Music +
    +
    + Videos +
    +
    + Song Title.flac +
    +
    + Movie.mkv +
    +
    + photo.jpg +
    +
    + Now Playing.mkv +
    +
    + MiniDLNA [10.0.0.181] +
    +
    + + diff --git a/src/r36s_dlna_browser/assets/icons/server.png b/src/r36s_dlna_browser/assets/icons/server.png new file mode 100644 index 0000000000000000000000000000000000000000..1c95efd0751d8b6ff08192b19bc450ba56757b23 GIT binary patch literal 1361 zcmV-X1+MyuP)$8qL} z$mIZ1-r+F-zqhosobBl7I2UC;4KturDy2t8Ms5VK48RQlx&U+lX!U7&9>7Teg8;q) za4eNdebL_D{#PUNRBC{2+Y3eHZV_2Q@)iIy6iJVg>~~%F2!QuZ)BI79?(_{Pl}hPy zxx8A_v^64fGXPCZYE^Lo^pku~*YyL_y))`IU}$J)zNTsG0IVfBdpb!>gEIi$tW+wy za=Bco9)ZvXoH%jf8rOB72JpzFNz9KkB)=AsApoaH{^Yvuh^A>}01%N@l4%i{4`88) zTubtL0CNKBkBZ1%k}qbn*w5L|y@~utu0e@*~%E_dAaB zNmo~w6GS^GmSv?#-Yz2dl3WEquMvKdWRGDO2mN$?4LE-M_*(!Tsu6M;z}`e6u{)E= z{Nkslg5lxed6i1#ac>x2T_g1EY&QFFEv=dc6bgmh`1ttuRZgD;u%lcq@9OUEE(gk7 zF#`hwGh16**SW5{soF%GNF0l<}E z+5-4ZL|y~X7xqpIlW#+w1&YPuWn*Jw>j7*EQOm1w7Ql{lI{kXk(iR5g23VGL9mxX# zma5bhk-Ui9)7jbijY?gm23VH$7|EAwJOquCJSrmnB){`YC;-eAktHOTi^xp?5>?ud zipZ0uY3^2)voZrL%X)|81659+2k>e#ncTBz(W0Mg>3B8%Q2m^D?5h`ei>=7TEo zR$@Sn^+JW@POoI1p5lB}EX$g!Xh}`_=cL)Uyr<$|(S=4Z}EEPh-!p9^1AL zipYMSWq92v8v>Kp3nV{CCX;KcZEsnYbqC3fB$r|0mi|&i`b^V2G*!H}jrN9!+~pne zt?xlmy(8pXe=W<}PI7aV)7!Gy?3U^1hb7WYQSX=kuvQGoRfb_4jw+`{Z(scjk{kVE zM5HI0Y$k}*0B?8Lk7W_$@effO5Cn;`v#1R?rYJ@kks2T(eSR?{ePdJ-sR3S{-&P~! zdBZS1jxeR@-wk4-p05P(f`}}|#GUc2rfFNEzIZgt08FeLivSjQUyIpnwjoPhKblzu z7EJow-mE14k7Y1YVgs6;K(mPrXm$e4CN`ki2{fD7fMzGqY?Lj92L}iBR4VlxfHeT- zsnWfOl8Eec9A~SlKVT@^7T0zCS?^t7BWWYKS=V&{cuIw!vLQh7K2=%)`nq40mdZIG z%B`$%RYJ-P5RrYVw4&@w*&N_F&Q@L5L2?a%HdVS8abXgCra}5KF)=YQmlS^kcs$;_ T#ALd900000NkvXXu0mjf8Toy- literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/server.svg b/src/r36s_dlna_browser/assets/icons/server.svg new file mode 100644 index 0000000..65d5be2 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/server.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/r36s_dlna_browser/assets/icons/video.png b/src/r36s_dlna_browser/assets/icons/video.png new file mode 100644 index 0000000000000000000000000000000000000000..a46c0a891cc52d5e703b9c9908a624b871c51e54 GIT binary patch literal 1027 zcmV+e1pNDnP)jWIFAgiQmR2n8=-Caffem>3DI0~!?tH53p6<$ey*1lt2id-v{I?lZo3 z{r!ILbNB9E?;c=cVq#)qVscnv`*kJ~iCO@|jInkAA`u&`iMe^c(nm4-p8A;?t+kTBXSwO{V}6Ar_lLf4>L8 z;24&cerTC4C%D`LQmJi3B2hS z*4CCPaSKL3n&sucYlz-nHzJWJWLeHDUcm`Sv#{_D!QdF&?g7MNQ#r>eSOL2!D=W+S zw^mgv;mFyuXCO%~badQ;#ghAZEI0wx)yLs<_Q2ujLTPDf-th`XKt)A4y1F_cNq2DM zNQG)~4KKiIwW6)3nCpk=C@(M&*7(=`kZdSSCQXq7@0l=cYme>u+)K@k2Kb5Xnx z$Ok0>D>~G{i)3bl(jFl`UnKM)Yivrp#9nhNhciU~o2v-5j5z%W|mdBOOyorg4iHV7c$sb}t4EUXEDQN%z002ovPDHLkV1kK!$kzY> literal 0 HcmV?d00001 diff --git a/src/r36s_dlna_browser/assets/icons/video.svg b/src/r36s_dlna_browser/assets/icons/video.svg new file mode 100644 index 0000000..93d1e82 --- /dev/null +++ b/src/r36s_dlna_browser/assets/icons/video.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/r36s_dlna_browser/dlna/__init__.py b/src/r36s_dlna_browser/dlna/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/r36s_dlna_browser/dlna/browser_state.py b/src/r36s_dlna_browser/dlna/browser_state.py new file mode 100644 index 0000000..0f0660f --- /dev/null +++ b/src/r36s_dlna_browser/dlna/browser_state.py @@ -0,0 +1,150 @@ +"""Navigation stack, pagination and in-memory cache for the browser.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import List, Optional + +from r36s_dlna_browser.dlna.models import MediaServer, MediaItem +from r36s_dlna_browser.ui import theme + + +@dataclass +class _Level: + """One level of the navigation stack.""" + server_location: str + object_id: str + items: List[MediaItem] = field(default_factory=list) + cursor: int = 0 + scroll_offset: int = 0 + + +class BrowserState: + """Tracks the server list, the current navigation stack and cursor position.""" + + def __init__(self) -> None: + self.servers: List[MediaServer] = [] + self.server_cursor: int = 0 + self.server_scroll_offset: int = 0 + + self._stack: List[_Level] = [] + + self.loading: bool = False + self.error: str = "" + self.playback_title: str = "" + self.playback_paused: bool = False + self.playback_position: float = 0.0 + self.playback_duration: float = 0.0 + self.playback_volume: int = 100 + self.playback_cache_seconds: float = 0.0 + self.playback_buffer_percent: int = 0 + self.playback_resolution: str = "" + self.playback_hud_visible: bool = True + self.playback_hud_mode: int = theme.PLAYBACK_HUD_AUTO + self.playback_backend: str = "gstreamer-sdl" + self.playback_video_driver: str = "" + + # ── server list ────────────────────────────────────────────── + + def set_servers(self, servers: List[MediaServer]) -> None: + self.servers = servers + self.server_cursor = 0 + self.server_scroll_offset = 0 + + @property + def selected_server(self) -> Optional[MediaServer]: + if 0 <= self.server_cursor < len(self.servers): + return self.servers[self.server_cursor] + return None + + # ── browse stack ───────────────────────────────────────────── + + @property + def in_browse_mode(self) -> bool: + return len(self._stack) > 0 + + @property + def current_level(self) -> Optional[_Level]: + return self._stack[-1] if self._stack else None + + @property + def current_items(self) -> List[MediaItem]: + lv = self.current_level + return lv.items if lv else [] + + @property + def cursor(self) -> int: + lv = self.current_level + return lv.cursor if lv else 0 + + @cursor.setter + def cursor(self, value: int) -> None: + lv = self.current_level + if lv: + lv.cursor = max(0, min(value, len(lv.items) - 1)) if lv.items else 0 + + @property + def scroll_offset(self) -> int: + lv = self.current_level + return lv.scroll_offset if lv else 0 + + @scroll_offset.setter + def scroll_offset(self, value: int) -> None: + lv = self.current_level + if lv: + lv.scroll_offset = value + + def selected_item(self) -> Optional[MediaItem]: + items = self.current_items + c = self.cursor + if 0 <= c < len(items): + return items[c] + return None + + def set_items(self, items: List[MediaItem], object_id: str) -> None: + """Push or update items for the given object_id.""" + lv = self.current_level + if lv and lv.object_id == object_id: + lv.items = items + lv.cursor = 0 + lv.scroll_offset = 0 + else: + # Find server_location from the stack or current server + loc = "" + if self._stack: + loc = self._stack[-1].server_location + elif self.selected_server: + loc = self.selected_server.location + self._stack.append(_Level( + server_location=loc, + object_id=object_id, + items=items, + )) + + def go_back(self) -> bool: + """Pop one level. Returns True if we went back, False if at root.""" + if self._stack: + self._stack.pop() + return True + return False + + def enter_server(self, server: MediaServer) -> str: + """Start browsing a server. Returns the root object_id.""" + self._stack.clear() + self._stack.append(_Level( + server_location=server.location, object_id="0" + )) + return "0" + + def reset(self) -> None: + self._stack.clear() + self.error = "" + self.playback_title = "" + self.playback_paused = False + self.playback_position = 0.0 + self.playback_duration = 0.0 + self.playback_cache_seconds = 0.0 + self.playback_buffer_percent = 0 + self.playback_resolution = "" + self.playback_hud_visible = True + self.playback_hud_mode = theme.PLAYBACK_HUD_AUTO diff --git a/src/r36s_dlna_browser/dlna/client.py b/src/r36s_dlna_browser/dlna/client.py new file mode 100644 index 0000000..09c5152 --- /dev/null +++ b/src/r36s_dlna_browser/dlna/client.py @@ -0,0 +1,221 @@ +"""ContentDirectory client – browse containers and items via UPnP.""" + +from __future__ import annotations + +import logging +from typing import List +from xml.etree import ElementTree + +import aiohttp + +from r36s_dlna_browser.dlna.models import MediaItem, ItemType, classify_upnp_class + +log = logging.getLogger(__name__) + +_NS = { + "s": "http://schemas.xmlsoap.org/soap/envelope/", + "u": "urn:schemas-upnp-org:service:ContentDirectory:1", + "didl": "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/", + "dc": "http://purl.org/dc/elements/1.1/", + "upnp": "urn:schemas-upnp-org:metadata-1-0/upnp/", +} + +_BROWSE_BODY = """ + + + + {object_id} + BrowseDirectChildren + * + {start} + {count} + + + +""" + + +def _text(el: ElementTree.Element | None) -> str: + if el is not None and el.text: + return el.text.strip() + return "" + + +def _local_name(tag: str) -> str: + return tag.rsplit("}", 1)[-1] + + +def _extract_browse_result(xml_text: str) -> str | None: + """Extract the Browse Result payload from a SOAP response. + + DLNA servers are inconsistent here: some return a namespaced Result element, + some return an unqualified Result element, and some may embed the DIDL as + children instead of escaped text. This helper accepts all three shapes. + """ + try: + soap = ElementTree.fromstring(xml_text) + except ElementTree.ParseError as exc: + log.warning("SOAP parse error: %s", exc) + return None + + for element in soap.iter(): + if _local_name(element.tag) != "Result": + continue + + if element.text and element.text.strip(): + return element.text.strip() + + if len(element): + return "".join( + ElementTree.tostring(child, encoding="unicode") + for child in element + ).strip() + + return None + + +def _parse_didl(didl_xml: str, base_url: str) -> List[MediaItem]: + """Parse a DIDL-Lite XML fragment into MediaItem objects.""" + items: list[MediaItem] = [] + try: + root = ElementTree.fromstring(didl_xml) + except ElementTree.ParseError as exc: + log.warning("DIDL parse error: %s", exc) + return items + + for container in root.findall("didl:container", _NS): + title = _text(container.find("dc:title", _NS)) + obj_id = container.get("id", "") + parent_id = container.get("parentID", "0") + child_count = int(container.get("childCount", "0") or "0") + items.append(MediaItem( + object_id=obj_id, + title=title, + item_type=ItemType.CONTAINER, + parent_id=parent_id, + child_count=child_count, + )) + + for item_el in root.findall("didl:item", _NS): + title = _text(item_el.find("dc:title", _NS)) + obj_id = item_el.get("id", "") + parent_id = item_el.get("parentID", "0") + upnp_class = _text(item_el.find("upnp:class", _NS)) + album_art = _text(item_el.find("upnp:albumArtURI", _NS)) + + resource_url = "" + mime_type = "" + duration = "" + size = 0 + res_el = item_el.find("didl:res", _NS) + if res_el is not None: + resource_url = res_el.text.strip() if res_el.text else "" + protocol_info = res_el.get("protocolInfo", "") + # Extract mime from protocolInfo: "http-get:*:audio/mpeg:*" + parts = protocol_info.split(":") + if len(parts) >= 3: + mime_type = parts[2] + duration = res_el.get("duration", "") + size = int(res_el.get("size", "0") or "0") + + # Resolve relative URLs + if resource_url and not resource_url.startswith(("http://", "https://")): + resource_url = base_url.rstrip("/") + "/" + resource_url.lstrip("/") + if album_art and not album_art.startswith(("http://", "https://")): + album_art = base_url.rstrip("/") + "/" + album_art.lstrip("/") + + items.append(MediaItem( + object_id=obj_id, + title=title, + item_type=classify_upnp_class(upnp_class), + parent_id=parent_id, + resource_url=resource_url, + mime_type=mime_type, + size=size, + duration=duration, + album_art_url=album_art, + )) + + return items + + +async def _get_content_directory_url( + session: aiohttp.ClientSession, location: str +) -> str | None: + """Fetch device XML and find the ContentDirectory control URL.""" + try: + async with session.get(location, timeout=aiohttp.ClientTimeout(total=5)) as resp: + xml_text = await resp.text() + root = ElementTree.fromstring(xml_text) + ns = {"d": "urn:schemas-upnp-org:device-1-0"} + for svc in root.findall(".//d:service", ns): + svc_type = _text(svc.find("d:serviceType", ns)) + if "ContentDirectory" in svc_type: + ctrl = _text(svc.find("d:controlURL", ns)) + if ctrl: + # Make absolute + from urllib.parse import urljoin + return urljoin(location, ctrl) + except Exception as exc: + log.warning("Could not get ContentDirectory URL from %s: %s", location, exc) + return None + + +class DLNAClient: + """Browses a DLNA server's ContentDirectory.""" + + def __init__(self) -> None: + self._control_urls: dict[str, str] = {} # location → controlURL cache + + async def browse( + self, + server_location: str, + object_id: str = "0", + start: int = 0, + count: int = 200, + ) -> List[MediaItem]: + async with aiohttp.ClientSession() as session: + ctrl_url = self._control_urls.get(server_location) + if not ctrl_url: + ctrl_url = await _get_content_directory_url(session, server_location) + if not ctrl_url: + log.error("No ContentDirectory for %s", server_location) + return [] + self._control_urls[server_location] = ctrl_url + + body = _BROWSE_BODY.format( + object_id=object_id, start=start, count=count + ) + headers = { + "Content-Type": 'text/xml; charset="utf-8"', + "SOAPAction": '"urn:schemas-upnp-org:service:ContentDirectory:1#Browse"', + } + try: + async with session.post( + ctrl_url, + data=body, + headers=headers, + timeout=aiohttp.ClientTimeout(total=10), + ) as resp: + xml_text = await resp.text() + except Exception as exc: + log.error("Browse request failed: %s", exc) + return [] + + # Extract the DIDL-Lite Result from the SOAP response + didl_xml = _extract_browse_result(xml_text) + if not didl_xml: + log.warning( + "Empty browse result for object_id=%s via %s", + object_id, + ctrl_url, + ) + return [] + + # Derive base URL from server location for relative URL resolution + from urllib.parse import urlparse + parsed = urlparse(server_location) + base_url = f"{parsed.scheme}://{parsed.netloc}" + + return _parse_didl(didl_xml, base_url) diff --git a/src/r36s_dlna_browser/dlna/discovery.py b/src/r36s_dlna_browser/dlna/discovery.py new file mode 100644 index 0000000..ec732ff --- /dev/null +++ b/src/r36s_dlna_browser/dlna/discovery.py @@ -0,0 +1,105 @@ +"""SSDP-based discovery of DLNA MediaServers on the local network.""" + +from __future__ import annotations + +import asyncio +import logging +import socket +from typing import List +from xml.etree import ElementTree + +import aiohttp + +from r36s_dlna_browser.dlna.models import MediaServer + +log = logging.getLogger(__name__) + +SSDP_ADDR = "239.255.255.250" +SSDP_PORT = 1900 +MEDIA_SERVER_TYPE = "urn:schemas-upnp-org:device:MediaServer:1" +SSDP_MX = 3 +SEARCH_TIMEOUT = 5.0 + +_SSDP_SEARCH = ( + "M-SEARCH * HTTP/1.1\r\n" + f"HOST: {SSDP_ADDR}:{SSDP_PORT}\r\n" + 'MAN: "ssdp:discover"\r\n' + f"MX: {SSDP_MX}\r\n" + f"ST: {MEDIA_SERVER_TYPE}\r\n" + "\r\n" +).encode() + + +class _SSDPProtocol(asyncio.DatagramProtocol): + """Collects M-SEARCH responses.""" + + def __init__(self) -> None: + self.responses: list[tuple[str, str]] = [] # (location, server) + + def datagram_received(self, data: bytes, addr: tuple[str, int]) -> None: + try: + text = data.decode("utf-8", errors="replace") + except Exception: + return + headers: dict[str, str] = {} + for line in text.split("\r\n"): + if ":" in line: + key, _, val = line.partition(":") + headers[key.strip().upper()] = val.strip() + location = headers.get("LOCATION", "") + st = headers.get("ST", "") + if location and MEDIA_SERVER_TYPE in st: + self.responses.append((location, headers.get("SERVER", ""))) + + def error_received(self, exc: Exception) -> None: + log.debug("SSDP error: %s", exc) + + def connection_lost(self, exc: Exception | None) -> None: + pass + + +async def _fetch_friendly_name(session: aiohttp.ClientSession, location: str) -> str: + """Fetch the device description XML and extract friendlyName.""" + try: + async with session.get(location, timeout=aiohttp.ClientTimeout(total=5)) as resp: + xml_text = await resp.text() + root = ElementTree.fromstring(xml_text) + ns = {"d": "urn:schemas-upnp-org:device-1-0"} + el = root.find(".//d:device/d:friendlyName", ns) + if el is not None and el.text: + return el.text.strip() + except Exception as exc: + log.debug("Could not fetch description from %s: %s", location, exc) + return location + + +class DLNADiscovery: + """Find DLNA MediaServers via SSDP M-SEARCH.""" + + async def find_servers(self, timeout: float = SEARCH_TIMEOUT) -> List[MediaServer]: + loop = asyncio.get_running_loop() + transport, protocol = await loop.create_datagram_endpoint( + _SSDPProtocol, + local_addr=("0.0.0.0", 0), + family=socket.AF_INET, + ) + assert isinstance(protocol, _SSDPProtocol) + try: + transport.sendto(_SSDP_SEARCH, (SSDP_ADDR, SSDP_PORT)) + await asyncio.sleep(timeout) + finally: + transport.close() + + seen: dict[str, str] = {} + for loc, srv in protocol.responses: + if loc not in seen: + seen[loc] = srv + + servers: list[MediaServer] = [] + if seen: + async with aiohttp.ClientSession() as session: + for loc in seen: + name = await _fetch_friendly_name(session, loc) + servers.append(MediaServer(friendly_name=name, location=loc)) + log.info("Discovered %d DLNA server(s).", len(servers)) + return servers diff --git a/src/r36s_dlna_browser/dlna/models.py b/src/r36s_dlna_browser/dlna/models.py new file mode 100644 index 0000000..bbd799b --- /dev/null +++ b/src/r36s_dlna_browser/dlna/models.py @@ -0,0 +1,105 @@ +"""Domain models for DLNA servers, containers and media items.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from enum import Enum +from typing import Optional + + +class ItemType(Enum): + CONTAINER = "container" + AUDIO = "audio" + VIDEO = "video" + IMAGE = "image" + UNKNOWN = "unknown" + + +@dataclass +class MediaServer: + """Represents a discovered DLNA MediaServer on the LAN.""" + friendly_name: str + location: str # description URL + udn: str = "" + icon_url: str = "" + + def __str__(self) -> str: + return self.friendly_name or self.location + + +@dataclass +class MediaItem: + """A single content-directory entry (container or leaf item).""" + object_id: str + title: str + item_type: ItemType = ItemType.UNKNOWN + parent_id: str = "0" + resource_url: str = "" + mime_type: str = "" + size: int = 0 + duration: str = "" + album_art_url: str = "" + child_count: int = 0 + + @property + def is_container(self) -> bool: + return self.item_type == ItemType.CONTAINER + + def __str__(self) -> str: + return self.title or self.object_id + + +def classify_upnp_class(upnp_class: str) -> ItemType: + """Map a UPnP class string to our ItemType enum.""" + c = upnp_class.lower() + if "container" in c: + return ItemType.CONTAINER + if "audio" in c: + return ItemType.AUDIO + if "video" in c: + return ItemType.VIDEO + if "image" in c: + return ItemType.IMAGE + return ItemType.UNKNOWN + + +def parse_didl_item(didl_item: dict) -> MediaItem: + """Build a MediaItem from a parsed DIDL-Lite dict (as returned by async-upnp-client).""" + title = didl_item.get("title", "") + object_id = didl_item.get("id", didl_item.get("@id", "")) + parent_id = didl_item.get("parent_id", didl_item.get("@parentID", "0")) + upnp_class = didl_item.get("upnp_class", didl_item.get("class", "")) + item_type = classify_upnp_class(upnp_class) + child_count = int(didl_item.get("child_count", didl_item.get("@childCount", 0)) or 0) + + resource_url = "" + mime_type = "" + size = 0 + duration = "" + resources = didl_item.get("resources", didl_item.get("res", [])) + if isinstance(resources, dict): + resources = [resources] + if resources: + res = resources[0] + if isinstance(res, dict): + resource_url = res.get("url", res.get("uri", res.get("#text", ""))) + mime_type = res.get("protocol_info", res.get("@protocolInfo", "")) + size = int(res.get("size", res.get("@size", 0)) or 0) + duration = res.get("duration", res.get("@duration", "")) + elif isinstance(res, str): + resource_url = res + + album_art = didl_item.get("album_art_uri", didl_item.get("albumArtURI", "")) + + return MediaItem( + object_id=str(object_id), + title=str(title), + item_type=item_type, + parent_id=str(parent_id), + resource_url=str(resource_url), + mime_type=str(mime_type), + size=size, + duration=str(duration), + album_art_url=str(album_art), + child_count=child_count, + ) diff --git a/src/r36s_dlna_browser/platform/__init__.py b/src/r36s_dlna_browser/platform/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/r36s_dlna_browser/platform/controls.py b/src/r36s_dlna_browser/platform/controls.py new file mode 100644 index 0000000..f2e3447 --- /dev/null +++ b/src/r36s_dlna_browser/platform/controls.py @@ -0,0 +1,62 @@ +"""Input mapping – translates SDL2 events to abstract actions.""" + +from __future__ import annotations + +import ctypes +from enum import Enum, auto +from typing import Optional + +import sdl2 + + +class Action(Enum): + UP = auto() + DOWN = auto() + LEFT = auto() + RIGHT = auto() + CONFIRM = auto() # A / Return + BACK = auto() # B / Escape + PAGE_UP = auto() # L shoulder / PageUp + PAGE_DOWN = auto() # R shoulder / PageDown + HUD_MODE = auto() # Y / H + QUIT = auto() # Start / Q + + +# Keyboard mapping (for desktop testing) +_KEY_MAP: dict[int, Action] = { + sdl2.SDLK_UP: Action.UP, + sdl2.SDLK_DOWN: Action.DOWN, + sdl2.SDLK_LEFT: Action.PAGE_UP, + sdl2.SDLK_RIGHT: Action.PAGE_DOWN, + sdl2.SDLK_RETURN: Action.CONFIRM, + sdl2.SDLK_SPACE: Action.CONFIRM, + sdl2.SDLK_ESCAPE: Action.BACK, + sdl2.SDLK_BACKSPACE: Action.BACK, + sdl2.SDLK_q: Action.QUIT, + sdl2.SDLK_h: Action.HUD_MODE, + sdl2.SDLK_PAGEUP: Action.PAGE_UP, + sdl2.SDLK_PAGEDOWN: Action.PAGE_DOWN, +} + +# GameController button mapping (R36S / generic controller) +_BUTTON_MAP: dict[int, Action] = { + sdl2.SDL_CONTROLLER_BUTTON_DPAD_UP: Action.UP, + sdl2.SDL_CONTROLLER_BUTTON_DPAD_DOWN: Action.DOWN, + sdl2.SDL_CONTROLLER_BUTTON_DPAD_LEFT: Action.PAGE_UP, + sdl2.SDL_CONTROLLER_BUTTON_DPAD_RIGHT: Action.PAGE_DOWN, + sdl2.SDL_CONTROLLER_BUTTON_A: Action.CONFIRM, + sdl2.SDL_CONTROLLER_BUTTON_B: Action.BACK, + sdl2.SDL_CONTROLLER_BUTTON_LEFTSHOULDER: Action.PAGE_UP, + sdl2.SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: Action.PAGE_DOWN, + sdl2.SDL_CONTROLLER_BUTTON_Y: Action.HUD_MODE, + sdl2.SDL_CONTROLLER_BUTTON_START: Action.QUIT, +} + + +def map_key(event: sdl2.SDL_Event) -> Optional[Action]: + """Map an SDL2 event to an abstract Action, or None.""" + if event.type == sdl2.SDL_KEYDOWN: + return _KEY_MAP.get(event.key.keysym.sym) + if event.type == sdl2.SDL_CONTROLLERBUTTONDOWN: + return _BUTTON_MAP.get(event.cbutton.button) + return None diff --git a/src/r36s_dlna_browser/platform/runtime.py b/src/r36s_dlna_browser/platform/runtime.py new file mode 100644 index 0000000..12029a3 --- /dev/null +++ b/src/r36s_dlna_browser/platform/runtime.py @@ -0,0 +1,32 @@ +"""Runtime detection, logging setup and platform helpers.""" + +from __future__ import annotations + +import logging +import os +import platform +import sys + + +log = logging.getLogger(__name__) + + +def is_r36s() -> bool: + """Heuristic: running on aarch64/armv7l with a small screen.""" + return platform.machine() in ("aarch64", "armv7l") + + +def configure_logging() -> None: + level_name = os.environ.get("R36S_LOG_LEVEL", "INFO").upper() + level = getattr(logging, level_name, logging.INFO) + fmt = "%(asctime)s %(name)s %(levelname)s %(message)s" + logging.basicConfig(level=level, format=fmt, stream=sys.stderr) + + +def sdl_env_setup() -> None: + """Set SDL environment hints for the R36S if needed.""" + if is_r36s(): + # Force fbdev or kmsdrm if no display server + if not os.environ.get("DISPLAY") and not os.environ.get("WAYLAND_DISPLAY"): + os.environ.setdefault("SDL_VIDEODRIVER", "kmsdrm") + os.environ.setdefault("SDL_AUDIODRIVER", "alsa") diff --git a/src/r36s_dlna_browser/player/__init__.py b/src/r36s_dlna_browser/player/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/r36s_dlna_browser/player/backend.py b/src/r36s_dlna_browser/player/backend.py new file mode 100644 index 0000000..63cd521 --- /dev/null +++ b/src/r36s_dlna_browser/player/backend.py @@ -0,0 +1,46 @@ +"""Abstract player interface.""" + +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import Callable + + +class PlayerBackend(ABC): + """Minimal playback interface used by the application.""" + + @abstractmethod + def attach_window(self, window: object) -> None: ... + + @abstractmethod + def set_event_callback(self, callback: Callable[..., None] | None) -> None: ... + + @abstractmethod + def set_viewport(self, width: int, height: int, top: int, bottom: int, left: int, right: int) -> None: ... + + @abstractmethod + def has_new_frame(self) -> bool: ... + + @abstractmethod + def render(self, renderer: object) -> bool: ... + + @abstractmethod + def play(self, url: str) -> None: ... + + @abstractmethod + def stop(self) -> None: ... + + @abstractmethod + def toggle_pause(self) -> bool: ... + + @abstractmethod + def seek(self, seconds: int) -> None: ... + + @abstractmethod + def change_volume(self, delta: int) -> int: ... + + @abstractmethod + def shutdown(self) -> None: ... + + @abstractmethod + def is_playing(self) -> bool: ... diff --git a/src/r36s_dlna_browser/player/gstreamer_backend.py b/src/r36s_dlna_browser/player/gstreamer_backend.py new file mode 100644 index 0000000..e0f51f1 --- /dev/null +++ b/src/r36s_dlna_browser/player/gstreamer_backend.py @@ -0,0 +1,440 @@ +"""Integrated GStreamer playback backend rendered through SDL textures.""" + +from __future__ import annotations + +import ctypes +import logging +import os +import threading +import time +from dataclasses import dataclass +from typing import Any, Callable + +import gi +import sdl2 +from sdl2 import version as sdl_version + +from r36s_dlna_browser.player.backend import PlayerBackend + +gi.require_version("Gst", "1.0") +gi.require_version("GstApp", "1.0") +gi.require_version("GstVideo", "1.0") +from gi.repository import Gst, GstApp, GstVideo + +log = logging.getLogger(__name__) + +Gst.init(None) + + +def _wm_subsystem_name(subsystem: int) -> str: + mapping = { + sdl2.SDL_SYSWM_UNKNOWN: "unknown", + sdl2.SDL_SYSWM_WINDOWS: "windows", + sdl2.SDL_SYSWM_X11: "x11", + sdl2.SDL_SYSWM_DIRECTFB: "directfb", + sdl2.SDL_SYSWM_COCOA: "cocoa", + sdl2.SDL_SYSWM_UIKIT: "uikit", + sdl2.SDL_SYSWM_WAYLAND: "wayland", + sdl2.SDL_SYSWM_MIR: "mir", + sdl2.SDL_SYSWM_WINRT: "winrt", + sdl2.SDL_SYSWM_ANDROID: "android", + sdl2.SDL_SYSWM_VIVANTE: "vivante", + sdl2.SDL_SYSWM_OS2: "os2", + sdl2.SDL_SYSWM_HAIKU: "haiku", + sdl2.SDL_SYSWM_KMSDRM: "kmsdrm", + sdl2.SDL_SYSWM_RISCOS: "riscos", + } + return mapping.get(subsystem, f"wm-{subsystem}") + + +def _resolve_window_subsystem(window: object) -> str: + if not window: + return "unbound" + + info = sdl2.SDL_SysWMinfo() + sdl_version.SDL_VERSION(info.version) + if not sdl2.SDL_GetWindowWMInfo(window, ctypes.byref(info)): + return "unknown" + return _wm_subsystem_name(info.subsystem) + + +def _as_uri(url: str) -> str: + if "://" in url: + return url + return Gst.filename_to_uri(os.path.abspath(url)) + + +class _NoopCallback: + def __call__(self, *args: Any) -> None: + return None + + +@dataclass +class _Frame: + width: int + height: int + pitch: int + pixels: bytes + + +class GStreamerBackend(PlayerBackend): + """Decode video with GStreamer and render frames through the SDL renderer.""" + + def __init__( + self, + gst_module=Gst, + gst_app_module=GstApp, + gst_video_module=GstVideo, + appsink_factory: Callable[[], Any] | None = None, + playbin_factory: Callable[[], Any] | None = None, + subsystem: str = "test", + ) -> None: + self._gst = gst_module + self._gst_app = gst_app_module + self._gst_video = gst_video_module + self._appsink_factory = appsink_factory or self._default_appsink_factory + self._playbin_factory = playbin_factory or self._default_playbin_factory + self._event_callback: Callable[..., None] = _NoopCallback() + self._window = None + self._wm_subsystem = subsystem + self._viewport = (640, 480, 0, 0, 0, 0) + self._pipeline = None + self._video_sink = None + self._bus = None + self._bus_thread = None + self._bus_running = False + self._lock = threading.RLock() + self._frame_lock = threading.RLock() + self._is_playing = False + self._paused = False + self._volume = 100 + self._buffer_percent = 0 + self._last_query = 0.0 + self._latest_frame: _Frame | None = None + self._frame_dirty = False + self._texture = None + self._texture_renderer = None + self._texture_size = (0, 0) + self._resolution = "" + + def attach_window(self, window: object) -> None: + self._window = window + self._wm_subsystem = _resolve_window_subsystem(window) + log.info("Playback window subsystem: %s", self._wm_subsystem) + + def set_event_callback(self, callback: Callable[..., None] | None) -> None: + self._event_callback = callback or _NoopCallback() + + def set_viewport(self, width: int, height: int, top: int, bottom: int, left: int, right: int) -> None: + self._viewport = (width, height, top, bottom, left, right) + + def has_new_frame(self) -> bool: + with self._frame_lock: + return self._frame_dirty + + def render(self, renderer: object) -> bool: + with self._frame_lock: + frame = self._latest_frame + if frame is None: + return False + + if self._texture is None or self._texture_renderer != renderer or self._texture_size != (frame.width, frame.height): + self._destroy_texture() + self._texture = sdl2.SDL_CreateTexture( + renderer, + sdl2.SDL_PIXELFORMAT_BGRA32, + sdl2.SDL_TEXTUREACCESS_STREAMING, + frame.width, + frame.height, + ) + if not self._texture: + log.error("Could not create SDL texture for video frame.") + return False + self._texture_renderer = renderer + self._texture_size = (frame.width, frame.height) + + if self._frame_dirty: + pixel_buffer = ctypes.create_string_buffer(frame.pixels) + result = sdl2.SDL_UpdateTexture(self._texture, None, pixel_buffer, frame.pitch) + if result != 0: + log.error("Could not upload SDL video texture: %s", sdl2.SDL_GetError()) + return False + self._frame_dirty = False + + dst = self._fit_frame_to_viewport(frame.width, frame.height) + sdl2.SDL_RenderCopy(renderer, self._texture, None, dst) + return True + + def play(self, url: str) -> None: + if not url: + raise ValueError("Playback URL is empty.") + pipeline = self._ensure_pipeline() + uri = _as_uri(url) + + with self._lock: + pipeline.set_state(self._gst.State.NULL) + pipeline.set_property("uri", uri) + self._paused = False + self._buffer_percent = 100 + self._clear_frames() + result = pipeline.set_state(self._gst.State.PLAYING) + + if result == self._gst.StateChangeReturn.FAILURE: + raise RuntimeError(f"Failed to start SDL-rendered GStreamer playback: {uri}") + + self._set_playing(True, notify=False) + self._event_callback("buffering", 100) + log.info("Starting SDL-rendered GStreamer playback: %s", url) + + def stop(self) -> None: + with self._lock: + if self._pipeline is None: + self._set_playing(False, notify=False) + return + self._pipeline.set_state(self._gst.State.NULL) + self._paused = False + self._clear_frames() + self._set_playing(False, notify=True) + + def toggle_pause(self) -> bool: + with self._lock: + if self._pipeline is None: + return False + self._paused = not self._paused + target = self._gst.State.PAUSED if self._paused else self._gst.State.PLAYING + self._pipeline.set_state(target) + self._event_callback("paused", self._paused) + return self._paused + + def seek(self, seconds: int) -> None: + with self._lock: + if self._pipeline is None or seconds == 0: + return + ok_pos, current = self._pipeline.query_position(self._gst.Format.TIME) + current_ns = current if ok_pos else 0 + target_ns = max(0, current_ns + int(seconds * self._gst.SECOND)) + self._pipeline.seek_simple( + self._gst.Format.TIME, + self._gst.SeekFlags.FLUSH | self._gst.SeekFlags.KEY_UNIT, + target_ns, + ) + + def change_volume(self, delta: int) -> int: + with self._lock: + if self._pipeline is None: + return self._volume + self._volume = max(0, min(130, self._volume + delta)) + self._pipeline.set_property("volume", self._volume / 100.0) + self._event_callback("volume", self._volume) + return self._volume + + def shutdown(self) -> None: + self._stop_bus_thread() + with self._lock: + if self._pipeline is not None: + self._pipeline.set_state(self._gst.State.NULL) + self._pipeline = None + self._video_sink = None + self._bus = None + self._clear_frames() + self._set_playing(False, notify=False) + + def is_playing(self) -> bool: + return self._is_playing + + def _default_playbin_factory(self): + pipeline = self._gst.ElementFactory.make("playbin", "player") + if pipeline is None: + raise RuntimeError("GStreamer playbin is not available.") + return pipeline + + def _default_appsink_factory(self): + sink = self._gst.ElementFactory.make("appsink", "video-output") + if sink is None: + raise RuntimeError("GStreamer appsink is not available.") + return sink + + def _ensure_pipeline(self): + with self._lock: + if self._pipeline is not None: + return self._pipeline + + self._pipeline = self._playbin_factory() + self._video_sink = self._create_appsink() + self._pipeline.set_property("video-sink", self._video_sink) + self._pipeline.set_property("volume", self._volume / 100.0) + self._bus = self._pipeline.get_bus() + self._start_bus_thread() + return self._pipeline + + def _create_appsink(self): + sink = self._appsink_factory() + sink.set_property("emit-signals", True) + sink.set_property("sync", True) + sink.set_property("max-buffers", 2) + sink.set_property("drop", True) + sink.set_property("caps", self._gst.Caps.from_string("video/x-raw,format=BGRA")) + sink.connect("new-sample", self._on_new_sample) + return sink + + def _on_new_sample(self, sink) -> Any: + sample = sink.emit("pull-sample") + if sample is None: + return self._flow_ok() + + buffer = sample.get_buffer() + caps = sample.get_caps() + if buffer is None or caps is None: + return self._flow_ok() + + info = self._gst_video.VideoInfo.new_from_caps(caps) + if info is None: + return self._flow_ok() + + width = int(info.width) + height = int(info.height) + pitch = int(info.stride[0]) if info.stride else width * 4 + pixels = buffer.extract_dup(0, buffer.get_size()) + resolution = f"{width}x{height}" + + with self._frame_lock: + self._latest_frame = _Frame(width=width, height=height, pitch=pitch, pixels=pixels) + self._frame_dirty = True + if resolution != self._resolution: + self._resolution = resolution + self._event_callback("resolution", resolution) + + return self._flow_ok() + + def _flow_ok(self) -> Any: + flow_return = getattr(self._gst, "FlowReturn", None) + if flow_return is None: + return 0 + return flow_return.OK + + def _start_bus_thread(self) -> None: + if self._bus_thread is not None and self._bus_thread.is_alive(): + return + self._bus_running = True + self._bus_thread = threading.Thread(target=self._poll_bus, name="gst-bus", daemon=True) + self._bus_thread.start() + + def _stop_bus_thread(self) -> None: + self._bus_running = False + if self._bus_thread and self._bus_thread.is_alive(): + self._bus_thread.join(timeout=1.0) + self._bus_thread = None + + def _poll_bus(self) -> None: + while self._bus_running: + bus = self._bus + if bus is None: + time.sleep(0.05) + continue + + message = bus.timed_pop_filtered( + 100 * self._gst.MSECOND, + self._gst.MessageType.ERROR + | self._gst.MessageType.EOS + | self._gst.MessageType.BUFFERING + | self._gst.MessageType.STATE_CHANGED, + ) + if message is not None: + self._handle_bus_message(message) + + if time.monotonic() - self._last_query >= 0.25: + self._last_query = time.monotonic() + self._emit_playback_metrics() + + def _handle_bus_message(self, message) -> None: + msg_type = message.type + if msg_type == self._gst.MessageType.EOS: + log.info("SDL-rendered GStreamer playback reached end-of-stream") + with self._lock: + if self._pipeline is not None: + self._pipeline.set_state(self._gst.State.NULL) + self._clear_frames() + self._set_playing(False, notify=True) + return + + if msg_type == self._gst.MessageType.ERROR: + err, debug = message.parse_error() + text = err.message if hasattr(err, "message") else str(err) + if debug: + text = f"{text} ({debug})" + log.error("GStreamer playback error: %s", text) + with self._lock: + if self._pipeline is not None: + self._pipeline.set_state(self._gst.State.NULL) + self._clear_frames() + self._set_playing(False, notify=False) + self._event_callback("error", text) + return + + if msg_type == self._gst.MessageType.BUFFERING: + percent = int(message.parse_buffering()) + self._buffer_percent = percent + self._event_callback("buffering", percent) + return + + if msg_type == self._gst.MessageType.STATE_CHANGED and message.src == self._pipeline: + _old, new, _pending = message.parse_state_changed() + paused = new == self._gst.State.PAUSED + if new == self._gst.State.PLAYING: + self._paused = False + self._event_callback("paused", False) + elif paused: + self._paused = True + self._event_callback("paused", True) + + def _emit_playback_metrics(self) -> None: + with self._lock: + pipeline = self._pipeline + if pipeline is None or not self._is_playing: + return + ok_pos, position = pipeline.query_position(self._gst.Format.TIME) + ok_dur, duration = pipeline.query_duration(self._gst.Format.TIME) + volume = int(round(float(pipeline.get_property("volume") or 1.0) * 100)) + + if ok_pos: + self._event_callback("position", position / self._gst.SECOND) + if ok_dur and duration > 0: + self._event_callback("duration", duration / self._gst.SECOND) + self._event_callback("volume", volume) + self._event_callback("buffering", self._buffer_percent) + if self._resolution: + self._event_callback("resolution", self._resolution) + + def _fit_frame_to_viewport(self, frame_width: int, frame_height: int) -> sdl2.SDL_Rect: + width, height, top, bottom, left, right = self._viewport + viewport_w = max(1, width - left - right) + viewport_h = max(1, height - top - bottom) + if frame_width <= 0 or frame_height <= 0: + return sdl2.SDL_Rect(left, top, viewport_w, viewport_h) + + scale = min(viewport_w / frame_width, viewport_h / frame_height) + draw_w = max(1, int(frame_width * scale)) + draw_h = max(1, int(frame_height * scale)) + draw_x = left + (viewport_w - draw_w) // 2 + draw_y = top + (viewport_h - draw_h) // 2 + return sdl2.SDL_Rect(draw_x, draw_y, draw_w, draw_h) + + def _destroy_texture(self) -> None: + if self._texture is not None: + sdl2.SDL_DestroyTexture(self._texture) + self._texture = None + self._texture_renderer = None + self._texture_size = (0, 0) + + def _clear_frames(self) -> None: + with self._frame_lock: + self._latest_frame = None + self._frame_dirty = False + self._resolution = "" + self._destroy_texture() + + def _set_playing(self, value: bool, notify: bool) -> None: + changed = self._is_playing != value + self._is_playing = value + if changed and notify: + self._event_callback("stopped" if not value else "started") \ No newline at end of file diff --git a/src/r36s_dlna_browser/ui/__init__.py b/src/r36s_dlna_browser/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/r36s_dlna_browser/ui/screens.py b/src/r36s_dlna_browser/ui/screens.py new file mode 100644 index 0000000..f791a0a --- /dev/null +++ b/src/r36s_dlna_browser/ui/screens.py @@ -0,0 +1,301 @@ +"""Screen rendering helpers for the SDL2 UI.""" + +from __future__ import annotations + +import ctypes +from typing import TYPE_CHECKING + +import sdl2 + +try: + import sdl2.sdlttf as ttf +except ImportError: + ttf = None # type: ignore[assignment] + +from r36s_dlna_browser.ui import theme + +if TYPE_CHECKING: + from r36s_dlna_browser.dlna.browser_state import BrowserState + + +def _color(rgba: tuple) -> sdl2.SDL_Color: + return sdl2.SDL_Color(rgba[0], rgba[1], rgba[2], rgba[3] if len(rgba) > 3 else 255) + + +def _render_text( + renderer: ctypes.c_void_p, + font: ctypes.c_void_p, + text: str, + x: int, + y: int, + color: tuple, + max_w: int = 0, +) -> None: + if not text or not font or not ttf: + return + encoded = text.encode("utf-8") + surf = ttf.TTF_RenderUTF8_Blended(font, encoded, _color(color)) + if not surf: + return + tex = sdl2.SDL_CreateTextureFromSurface(renderer, surf) + w, h = surf.contents.w, surf.contents.h + sdl2.SDL_FreeSurface(surf) + if not tex: + return + if max_w and w > max_w: + w = max_w + dst = sdl2.SDL_Rect(x, y, w, h) + src = sdl2.SDL_Rect(0, 0, w, h) + sdl2.SDL_RenderCopy(renderer, tex, src, dst) + sdl2.SDL_DestroyTexture(tex) + + +def _fit_text(font: ctypes.c_void_p, text: str, max_w: int) -> str: + if not text or not font or not ttf or max_w <= 0: + return text + + width = ctypes.c_int() + height = ctypes.c_int() + encoded = text.encode("utf-8") + if ttf.TTF_SizeUTF8(font, encoded, ctypes.byref(width), ctypes.byref(height)) == 0 and width.value <= max_w: + return text + + ellipsis = "..." + ellipsis_width = ctypes.c_int() + if ttf.TTF_SizeUTF8(font, ellipsis.encode("utf-8"), ctypes.byref(ellipsis_width), ctypes.byref(height)) != 0: + return text + if ellipsis_width.value >= max_w: + return "" + + trimmed = text + while trimmed: + trimmed = trimmed[:-1] + candidate = (trimmed.rstrip() + ellipsis).encode("utf-8") + if ttf.TTF_SizeUTF8(font, candidate, ctypes.byref(width), ctypes.byref(height)) == 0 and width.value <= max_w: + return trimmed.rstrip() + ellipsis + + return ellipsis if ellipsis_width.value <= max_w else "" + + +def _fill_rect(renderer, x: int, y: int, w: int, h: int, color: tuple) -> None: + sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_BLEND) + sdl2.SDL_SetRenderDrawColor(renderer, color[0], color[1], color[2], + color[3] if len(color) > 3 else 255) + rect = sdl2.SDL_Rect(x, y, w, h) + sdl2.SDL_RenderFillRect(renderer, rect) + + +def _draw_rect(renderer, x: int, y: int, w: int, h: int, color: tuple) -> None: + sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_BLEND) + sdl2.SDL_SetRenderDrawColor(renderer, color[0], color[1], color[2], + color[3] if len(color) > 3 else 255) + rect = sdl2.SDL_Rect(x, y, w, h) + sdl2.SDL_RenderDrawRect(renderer, rect) + + +def _render_icon(renderer, texture, x: int, y: int) -> None: + """Blit a pre-loaded SDL texture as an ICON_SIZE square.""" + if not texture: + return + s = theme.ICON_SIZE + dst = sdl2.SDL_Rect(x, y, s, s) + sdl2.SDL_RenderCopy(renderer, texture, None, dst) + + +def _render_icon_small(renderer, texture, x: int, y: int) -> None: + if not texture: + return + s = theme.PLAYBACK_HUD_ICON_SIZE + dst = sdl2.SDL_Rect(x, y, s, s) + sdl2.SDL_RenderCopy(renderer, texture, None, dst) + + +def _format_time(seconds: float) -> str: + total = max(0, int(seconds)) + mins, secs = divmod(total, 60) + hours, mins = divmod(mins, 60) + if hours: + return f"{hours}:{mins:02d}:{secs:02d}" + return f"{mins:02d}:{secs:02d}" + + +def _draw_progress_bar(renderer, x: int, y: int, w: int, h: int, progress: float) -> None: + _fill_rect(renderer, x, y, w, h, theme.PLAYBACK_OVERLAY_DIM) + fill_w = max(0, min(w, int(w * max(0.0, min(1.0, progress))))) + if fill_w: + _fill_rect(renderer, x, y, fill_w, h, theme.PLAYBACK_OVERLAY_ACCENT) + + +# ── Public drawing functions ───────────────────────────────────── + + +def draw_header(renderer, font, title: str) -> None: + _fill_rect(renderer, 0, 0, theme.SCREEN_W, theme.HEADER_H, theme.HEADER_BG) + _render_text(renderer, font, title, theme.LIST_PAD_LEFT, 8, + theme.TEXT_COLOR, theme.SCREEN_W - theme.LIST_PAD_LEFT * 2) + + +def draw_status_bar(renderer, font, text: str) -> None: + y = theme.SCREEN_H - theme.STATUS_H + _fill_rect(renderer, 0, y, theme.SCREEN_W, theme.STATUS_H, theme.STATUS_BG) + _render_text(renderer, font, text, theme.LIST_PAD_LEFT, y + 6, + theme.DIM_TEXT, theme.SCREEN_W - theme.LIST_PAD_LEFT * 2) + + +def draw_server_list(renderer, font, state: "BrowserState", icons: dict | None = None) -> None: + draw_header(renderer, font, "DLNA Servers") + if not state.servers: + msg = "Searching..." if state.loading else "No servers found. Press A to refresh." + _render_text(renderer, font, msg, theme.LIST_PAD_LEFT, theme.LIST_TOP + 20, theme.DIM_TEXT) + draw_status_bar(renderer, font, "A=Select Start=Quit") + return + + srv_icon = icons.get("server") if icons else None + icon_gap = theme.ICON_SIZE + 4 if srv_icon else 0 + text_x = theme.LIST_PAD_LEFT + icon_gap + + vis = theme.VISIBLE_ITEMS + offset = state.server_scroll_offset + for i in range(vis): + idx = offset + i + if idx >= len(state.servers): + break + srv = state.servers[idx] + y = theme.LIST_TOP + i * theme.LIST_ITEM_H + if idx == state.server_cursor: + _fill_rect(renderer, 0, y, theme.SCREEN_W, theme.LIST_ITEM_H, theme.HIGHLIGHT_BG) + color = theme.HIGHLIGHT_TEXT + else: + color = theme.TEXT_COLOR + icon_y = y + (theme.LIST_ITEM_H - theme.ICON_SIZE) // 2 + _render_icon(renderer, srv_icon, theme.LIST_PAD_LEFT, icon_y) + _render_text(renderer, font, str(srv), text_x, y + 4, + color, theme.SCREEN_W - text_x - theme.LIST_PAD_RIGHT) + + draw_status_bar(renderer, font, f"A=Browse B=Refresh Start=Quit ({len(state.servers)} servers)") + + +def draw_browse_list(renderer, font, state: "BrowserState", icons: dict | None = None) -> None: + lv = state.current_level + title = "Browsing" + if lv: + title = f"/{lv.object_id}" if lv.object_id != "0" else "/" + draw_header(renderer, font, title) + + items = state.current_items + if not items: + msg = "Loading..." if state.loading else "Empty folder." + _render_text(renderer, font, msg, theme.LIST_PAD_LEFT, theme.LIST_TOP + 20, theme.DIM_TEXT) + draw_status_bar(renderer, font, "B=Back") + return + + has_icons = bool(icons) + icon_gap = theme.ICON_SIZE + 4 if has_icons else 0 + text_x = theme.LIST_PAD_LEFT + icon_gap + + vis = theme.VISIBLE_ITEMS + offset = state.scroll_offset + cursor = state.cursor + for i in range(vis): + idx = offset + i + if idx >= len(items): + break + item = items[idx] + y = theme.LIST_TOP + i * theme.LIST_ITEM_H + if idx == cursor: + _fill_rect(renderer, 0, y, theme.SCREEN_W, theme.LIST_ITEM_H, theme.HIGHLIGHT_BG) + color = theme.HIGHLIGHT_TEXT + else: + color = theme.TEXT_COLOR + icon_y = y + (theme.LIST_ITEM_H - theme.ICON_SIZE) // 2 + if has_icons: + ico = icons.get(item.item_type) # type: ignore[call-overload] + _render_icon(renderer, ico, theme.LIST_PAD_LEFT, icon_y) + _render_text(renderer, font, item.title, text_x, y + 4, + color, theme.SCREEN_W - text_x - theme.LIST_PAD_RIGHT) + + draw_status_bar( + renderer, font, + f"A=Open B=Back L/R=Page Start=Quit ({cursor+1}/{len(items)})" + ) + + +def draw_playback(renderer, font, state: "BrowserState", icons: dict | None = None) -> None: + if not state.playback_hud_visible: + return + + top_h = theme.PLAYBACK_HUD_TOP + bottom_h = theme.PLAYBACK_HUD_BOTTOM + width = theme.SCREEN_W + height = theme.SCREEN_H + left = theme.PLAYBACK_HUD_SIDE + right = theme.PLAYBACK_HUD_SIDE + status = "Paused" if state.playback_paused else "Playing" + total = max(0.0, state.playback_duration) + current = max(0.0, min(state.playback_position, total if total else state.playback_position)) + progress = (current / total) if total > 0 else 0.0 + progress_x = left + progress_w = width - left - right + + status_icon = icons.get("hud-pause" if state.playback_paused else "hud-play") if icons else None + volume_icon = icons.get("hud-volume") if icons else None + seek_icon = icons.get("hud-seek") if icons else None + stop_icon = icons.get("hud-stop") if icons else None + hud_icon = icons.get("hud-display") if icons else None + + hud_mode = { + theme.PLAYBACK_HUD_AUTO: "AUTO", + theme.PLAYBACK_HUD_PINNED: "FIXED", + theme.PLAYBACK_HUD_HIDDEN: "HIDDEN", + }.get(state.playback_hud_mode, "AUTO") + time_text = f"{_format_time(current)} / {_format_time(total)}" + time_w = 156 + time_x = width - left - time_w + title_x = left + 98 + title_w = max(0, time_x - title_x - 12) + title_text = _fit_text(font, state.playback_title or "...", title_w) + + _fill_rect(renderer, 0, 0, width, top_h, theme.PLAYBACK_OVERLAY_BG) + _fill_rect(renderer, 0, height - bottom_h, width, bottom_h, theme.PLAYBACK_OVERLAY_BG) + _render_icon_small(renderer, status_icon, left, 7) + _render_text(renderer, font, status, left + 22, 5, theme.TEXT_COLOR, 70) + _render_text(renderer, font, title_text, + title_x, 5, theme.TEXT_COLOR, title_w) + _render_text(renderer, font, time_text, + time_x, 5, theme.DIM_TEXT, time_w) + + progress_y = height - bottom_h + 10 + _draw_progress_bar(renderer, progress_x, progress_y, progress_w, theme.PLAYBACK_PROGRESS_H, progress) + + info_y = height - bottom_h + 23 + _render_icon_small(renderer, volume_icon, left, info_y + 1) + _render_text(renderer, font, f"{state.playback_volume}%", left + 22, info_y - 1, theme.TEXT_COLOR, 64) + + buffer_text = f"Buffer {state.playback_buffer_percent}%" if state.playback_buffer_percent < 100 else state.playback_resolution or "" + _render_text(renderer, font, buffer_text, left + 88, info_y - 1, theme.DIM_TEXT, 180) + _render_text(renderer, font, hud_mode, width - 70, info_y - 1, theme.DIM_TEXT, 60) + + controls_y = height - 20 + cx = left + _render_icon_small(renderer, volume_icon, cx, controls_y - 1) + _render_text(renderer, font, "U/D", cx + 20, controls_y - 2, theme.TEXT_COLOR, 38) + cx += 70 + _render_icon_small(renderer, status_icon, cx, controls_y - 1) + _render_text(renderer, font, "A", cx + 20, controls_y - 2, theme.TEXT_COLOR, 18) + cx += 44 + _render_icon_small(renderer, seek_icon, cx, controls_y - 1) + _render_text(renderer, font, "L/R", cx + 20, controls_y - 2, theme.TEXT_COLOR, 34) + cx += 62 + _render_icon_small(renderer, stop_icon, cx, controls_y - 1) + _render_text(renderer, font, "B", cx + 20, controls_y - 2, theme.TEXT_COLOR, 18) + cx += 42 + _render_icon_small(renderer, hud_icon, cx, controls_y - 1) + _render_text(renderer, font, "Y", cx + 20, controls_y - 2, theme.TEXT_COLOR, 18) + + +def draw_error(renderer, font, state: "BrowserState") -> None: + draw_header(renderer, font, "Error") + _render_text(renderer, font, state.error or "Unknown error", + theme.LIST_PAD_LEFT, theme.SCREEN_H // 2 - 20, theme.ERROR_COLOR, + theme.SCREEN_W - theme.LIST_PAD_LEFT * 2) + draw_status_bar(renderer, font, "A=OK") diff --git a/src/r36s_dlna_browser/ui/sdl_app.py b/src/r36s_dlna_browser/ui/sdl_app.py new file mode 100644 index 0000000..0765d40 --- /dev/null +++ b/src/r36s_dlna_browser/ui/sdl_app.py @@ -0,0 +1,463 @@ +"""SDL2 window, event loop, rendering and input handling.""" + +from __future__ import annotations + +import ctypes +import logging +import os +import queue +import time +from enum import Enum, auto +from typing import Any + +import sdl2 + +try: + import sdl2.sdlttf as ttf +except ImportError: + ttf = None # type: ignore[assignment] + +try: + import sdl2.sdlimage as sdl_img +except ImportError: + sdl_img = None # type: ignore[assignment] + +from r36s_dlna_browser.dlna.browser_state import BrowserState +from r36s_dlna_browser.dlna.models import ItemType, MediaItem +from r36s_dlna_browser.player.backend import PlayerBackend +from r36s_dlna_browser.platform.controls import Action, map_key +from r36s_dlna_browser.ui import theme +from r36s_dlna_browser.ui import screens + +log = logging.getLogger(__name__) + + +class Screen(Enum): + SERVERS = auto() + BROWSE = auto() + PLAYBACK = auto() + ERROR = auto() + + +class SDLApp: + """Owns the SDL2 window and drives the main loop.""" + + def __init__( + self, + ui_queue: queue.Queue[Any], + cmd_queue: queue.Queue[Any], + browser_state: BrowserState, + player: PlayerBackend, + ) -> None: + self._ui_q = ui_queue + self._cmd_q = cmd_queue + self._state = browser_state + self._player = player + self._screen = Screen.SERVERS + self._running = False + self._window = None + self._renderer = None + self._font = None + self._playback_font = None + self._icons: dict = {} + self._playback_clear_once = False + self._needs_redraw = True + self._last_playback_draw_at = 0.0 + self._last_playback_snapshot: tuple[Any, ...] | None = None + self._last_playback_interaction_at = 0.0 + + # ── lifecycle ──────────────────────────────────────────────── + + def run(self) -> None: + self._init_sdl() + self._running = True + try: + while self._running: + self._poll_events() + self._process_ui_queue() + self._refresh_playback_hud_visibility() + if self._should_draw(): + self._draw() + sdl2.SDL_Delay(theme.FRAME_DELAY_MS) + finally: + self._cleanup() + + def _init_sdl(self) -> None: + sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO | sdl2.SDL_INIT_GAMECONTROLLER) + if ttf: + ttf.TTF_Init() + + self._window = sdl2.SDL_CreateWindow( + b"R36S DLNA Browser", + sdl2.SDL_WINDOWPOS_CENTERED, + sdl2.SDL_WINDOWPOS_CENTERED, + theme.SCREEN_W, + theme.SCREEN_H, + sdl2.SDL_WINDOW_SHOWN, + ) + self._renderer = sdl2.SDL_CreateRenderer( + self._window, -1, + sdl2.SDL_RENDERER_ACCELERATED | sdl2.SDL_RENDERER_PRESENTVSYNC, + ) + + # Open first available gamecontroller + for i in range(sdl2.SDL_NumJoysticks()): + if sdl2.SDL_IsGameController(i): + sdl2.SDL_GameControllerOpen(i) + break + + self._font = self._load_font(theme.FONT_SIZE) + self._playback_font = self._load_font(theme.PLAYBACK_FONT_SIZE) + if not self._font: + log.error("Could not load any font – UI text will be missing.") + self._icons = self._load_icons() + self._player.attach_window(self._window) + self._sync_player_viewport() + + def _load_icons(self) -> dict: + icons: dict = {} + if not sdl_img: + return icons + sdl_img.IMG_Init(sdl_img.IMG_INIT_PNG) + mapping = [ + ("folder", ItemType.CONTAINER), + ("audio", ItemType.AUDIO), + ("video", ItemType.VIDEO), + ("image", ItemType.IMAGE), + ("playing", "playing"), + ("server", "server"), + ("hud-play", "hud-play"), + ("hud-pause", "hud-pause"), + ("hud-stop", "hud-stop"), + ("hud-seek", "hud-seek"), + ("hud-volume", "hud-volume"), + ("hud-display", "hud-display"), + ] + for fname, key in mapping: + path = theme.ICONS_DIR / f"{fname}.png" + if path.exists(): + surf = sdl_img.IMG_Load(str(path).encode()) + if surf: + tex = sdl2.SDL_CreateTextureFromSurface(self._renderer, surf) + sdl2.SDL_FreeSurface(surf) + if tex: + icons[key] = tex + log.debug("Loaded icon: %s", fname) + log.info("Loaded %d icon(s).", len(icons)) + return icons + + def _load_font(self, size: int): + if not ttf: + log.warning("SDL2_ttf not available – text rendering disabled.") + return None + for path in theme.FONT_SEARCH_PATHS: + expanded = os.path.expanduser(path) + if os.path.isfile(expanded): + f = ttf.TTF_OpenFont(expanded.encode(), size) + if f: + log.info("Loaded font: %s", expanded) + return f + return None + + def _cleanup(self) -> None: + for tex in self._icons.values(): + sdl2.SDL_DestroyTexture(tex) + self._icons = {} + if sdl_img: + sdl_img.IMG_Quit() + if self._font and ttf: + ttf.TTF_CloseFont(self._font) + if self._playback_font and ttf: + ttf.TTF_CloseFont(self._playback_font) + if self._renderer: + sdl2.SDL_DestroyRenderer(self._renderer) + if self._window: + sdl2.SDL_DestroyWindow(self._window) + if ttf: + ttf.TTF_Quit() + sdl2.SDL_Quit() + + # ── events ─────────────────────────────────────────────────── + + def _poll_events(self) -> None: + event = sdl2.SDL_Event() + while sdl2.SDL_PollEvent(ctypes.byref(event)): + if event.type == sdl2.SDL_QUIT: + self._running = False + return + if event.type == sdl2.SDL_WINDOWEVENT and event.window.event in ( + sdl2.SDL_WINDOWEVENT_MOVED, + sdl2.SDL_WINDOWEVENT_SIZE_CHANGED, + sdl2.SDL_WINDOWEVENT_RESIZED, + ): + if self._window and event.window.windowID == sdl2.SDL_GetWindowID(self._window): + self._sync_player_viewport() + self._mark_dirty() + action = map_key(event) + if action is not None: + self._handle_action(action) + + def _process_ui_queue(self) -> None: + while True: + try: + msg = self._ui_q.get_nowait() + except queue.Empty: + break + self._handle_ui_message(msg) + + def _handle_ui_message(self, msg: tuple) -> None: + kind = msg[0] + if kind == "servers_updated": + self._state.loading = False + self._screen = Screen.SERVERS + elif kind == "items_updated": + self._state.loading = False + self._screen = Screen.BROWSE + elif kind == "playback_started": + self._state.playback_title = msg[1] if len(msg) > 1 else "" + self._state.playback_paused = False + self._show_playback_hud(force=True) + self._playback_clear_once = True + self._screen = Screen.PLAYBACK + elif kind == "playback_paused": + self._state.playback_paused = True + self._show_playback_hud(force=True) + elif kind == "playback_resumed": + self._state.playback_paused = False + self._show_playback_hud(force=True) + elif kind == "playback_stopped": + self._state.playback_paused = False + self._screen = Screen.BROWSE if self._state.in_browse_mode else Screen.SERVERS + elif kind == "error": + self._state.error = msg[1] if len(msg) > 1 else "Unknown error" + self._state.loading = False + self._screen = Screen.ERROR + self._mark_dirty() + + # ── input dispatch ─────────────────────────────────────────── + + def _handle_action(self, action: Action) -> None: + if action == Action.QUIT: + self._running = False + return + + if self._screen == Screen.ERROR: + if action in (Action.CONFIRM, Action.BACK): + self._state.error = "" + self._screen = Screen.BROWSE if self._state.in_browse_mode else Screen.SERVERS + self._mark_dirty() + return + + if self._screen == Screen.PLAYBACK: + if action == Action.BACK: + self._cmd_q.put(("stop",)) + elif action == Action.CONFIRM: + self._cmd_q.put(("toggle_pause",)) + elif action == Action.UP: + self._cmd_q.put(("volume", 5)) + elif action == Action.DOWN: + self._cmd_q.put(("volume", -5)) + elif action == Action.PAGE_UP: + self._cmd_q.put(("seek", -10)) + elif action == Action.PAGE_DOWN: + self._cmd_q.put(("seek", 10)) + elif action == Action.HUD_MODE: + self._cycle_playback_hud_mode() + self._mark_dirty() + self._show_playback_hud(force=action != Action.HUD_MODE) + return + + if self._screen == Screen.SERVERS: + self._handle_server_action(action) + elif self._screen == Screen.BROWSE: + self._handle_browse_action(action) + + def _handle_server_action(self, action: Action) -> None: + n = len(self._state.servers) + if action == Action.UP and n: + self._state.server_cursor = max(0, self._state.server_cursor - 1) + self._adjust_server_scroll() + self._mark_dirty() + elif action == Action.DOWN and n: + self._state.server_cursor = min(n - 1, self._state.server_cursor + 1) + self._adjust_server_scroll() + self._mark_dirty() + elif action == Action.CONFIRM: + srv = self._state.selected_server + if srv: + obj_id = self._state.enter_server(srv) + self._state.loading = True + self._cmd_q.put(("browse", srv.location, obj_id)) + else: + # No server selected – refresh + self._state.loading = True + self._cmd_q.put(("discover",)) + self._mark_dirty() + elif action == Action.BACK: + # Refresh server list + self._state.loading = True + self._cmd_q.put(("discover",)) + self._mark_dirty() + + def _handle_browse_action(self, action: Action) -> None: + items = self._state.current_items + n = len(items) + if action == Action.UP and n: + self._state.cursor -= 1 + self._adjust_browse_scroll() + self._mark_dirty() + elif action == Action.DOWN and n: + self._state.cursor += 1 + self._adjust_browse_scroll() + self._mark_dirty() + elif action == Action.PAGE_UP and n: + self._state.cursor = max(0, self._state.cursor - theme.PAGE_SIZE) + self._adjust_browse_scroll() + self._mark_dirty() + elif action == Action.PAGE_DOWN and n: + self._state.cursor = min(n - 1, self._state.cursor + theme.PAGE_SIZE) + self._adjust_browse_scroll() + self._mark_dirty() + elif action == Action.CONFIRM: + item = self._state.selected_item() + if item: + if item.is_container: + self._state.loading = True + lv = self._state.current_level + loc = lv.server_location if lv else "" + self._cmd_q.put(("browse", loc, item.object_id)) + elif item.resource_url: + self._cmd_q.put(("play", item.resource_url, item.title)) + self._mark_dirty() + elif action == Action.BACK: + if not self._state.go_back(): + self._screen = Screen.SERVERS + else: + self._screen = Screen.BROWSE + self._mark_dirty() + + def _adjust_server_scroll(self) -> None: + vis = theme.VISIBLE_ITEMS + cur = self._state.server_cursor + off = self._state.server_scroll_offset + if cur < off: + self._state.server_scroll_offset = cur + elif cur >= off + vis: + self._state.server_scroll_offset = cur - vis + 1 + + def _adjust_browse_scroll(self) -> None: + vis = theme.VISIBLE_ITEMS + cur = self._state.cursor + off = self._state.scroll_offset + if cur < off: + self._state.scroll_offset = cur + elif cur >= off + vis: + self._state.scroll_offset = cur - vis + 1 + + # ── drawing ────────────────────────────────────────────────── + + def _draw(self) -> None: + r = self._renderer + if self._screen == Screen.PLAYBACK: + sdl2.SDL_SetRenderDrawColor(r, *theme.PLAYBACK_BG_COLOR) + else: + sdl2.SDL_SetRenderDrawColor(r, *theme.BG_COLOR) + sdl2.SDL_RenderClear(r) + self._playback_clear_once = False + + f = self._font + if self._screen == Screen.SERVERS: + screens.draw_server_list(r, f, self._state, self._icons) + elif self._screen == Screen.BROWSE: + screens.draw_browse_list(r, f, self._state, self._icons) + elif self._screen == Screen.PLAYBACK: + self._player.render(r) + screens.draw_playback(r, self._playback_font or f, self._state, self._icons) + elif self._screen == Screen.ERROR: + screens.draw_error(r, f, self._state) + + sdl2.SDL_RenderPresent(r) + self._needs_redraw = False + if self._screen == Screen.PLAYBACK: + self._last_playback_draw_at = time.monotonic() + self._last_playback_snapshot = self._playback_snapshot() + + def _mark_dirty(self) -> None: + self._needs_redraw = True + + def _playback_snapshot(self) -> tuple[Any, ...]: + return ( + self._state.playback_title, + self._state.playback_paused, + round(self._state.playback_position, 1), + round(self._state.playback_duration, 1), + self._state.playback_volume, + self._state.playback_buffer_percent, + self._state.playback_resolution, + self._state.playback_backend, + self._state.playback_hud_visible, + self._state.playback_hud_mode, + ) + + def _refresh_playback_hud_visibility(self) -> None: + if self._screen != Screen.PLAYBACK: + return + if self._state.playback_hud_mode == theme.PLAYBACK_HUD_HIDDEN: + return + if self._state.playback_hud_mode == theme.PLAYBACK_HUD_PINNED or self._state.playback_paused: + if not self._state.playback_hud_visible: + self._state.playback_hud_visible = True + self._mark_dirty() + return + visible = (time.monotonic() - self._last_playback_interaction_at) < (theme.PLAYBACK_HUD_AUTOHIDE_MS / 1000.0) + if visible != self._state.playback_hud_visible: + self._state.playback_hud_visible = visible + self._mark_dirty() + + def _show_playback_hud(self, force: bool = False) -> None: + self._last_playback_interaction_at = time.monotonic() + if force or self._state.playback_hud_mode != theme.PLAYBACK_HUD_HIDDEN: + if not self._state.playback_hud_visible: + self._state.playback_hud_visible = True + self._mark_dirty() + + def _cycle_playback_hud_mode(self) -> None: + next_mode = { + theme.PLAYBACK_HUD_AUTO: theme.PLAYBACK_HUD_PINNED, + theme.PLAYBACK_HUD_PINNED: theme.PLAYBACK_HUD_HIDDEN, + theme.PLAYBACK_HUD_HIDDEN: theme.PLAYBACK_HUD_AUTO, + } + self._state.playback_hud_mode = next_mode[self._state.playback_hud_mode] + self._state.playback_hud_visible = self._state.playback_hud_mode != theme.PLAYBACK_HUD_HIDDEN + self._last_playback_interaction_at = time.monotonic() + + def _should_draw(self) -> bool: + if self._needs_redraw: + return True + if self._screen != Screen.PLAYBACK: + return False + if self._player.has_new_frame(): + return True + + now = time.monotonic() + if now - self._last_playback_draw_at < (theme.PLAYBACK_HUD_REFRESH_MS / 1000.0): + return False + return self._playback_snapshot() != self._last_playback_snapshot + + def _sync_player_viewport(self) -> None: + width = ctypes.c_int() + height = ctypes.c_int() + if self._window: + sdl2.SDL_GetWindowSize(self._window, ctypes.byref(width), ctypes.byref(height)) + if width.value <= 0 or height.value <= 0: + width.value = theme.SCREEN_W + height.value = theme.SCREEN_H + + self._player.set_viewport( + width.value, + height.value, + theme.PLAYBACK_HUD_TOP, + theme.PLAYBACK_HUD_BOTTOM, + theme.PLAYBACK_VIDEO_LEFT, + width.value - theme.PLAYBACK_VIDEO_RIGHT, + ) diff --git a/src/r36s_dlna_browser/ui/theme.py b/src/r36s_dlna_browser/ui/theme.py new file mode 100644 index 0000000..3afd69b --- /dev/null +++ b/src/r36s_dlna_browser/ui/theme.py @@ -0,0 +1,80 @@ +"""UI layout constants for a 640×480 display.""" + +from __future__ import annotations + +from pathlib import Path + +# Screen +SCREEN_W = 640 +SCREEN_H = 480 + +# Colors (R, G, B, A) +BG_COLOR = (24, 24, 32, 255) +PLAYBACK_BG_COLOR = (0, 0, 0, 255) +TEXT_COLOR = (220, 220, 220, 255) +HIGHLIGHT_BG = (50, 80, 160, 255) +HIGHLIGHT_TEXT = (255, 255, 255, 255) +DIM_TEXT = (140, 140, 150, 255) +ERROR_COLOR = (220, 60, 60, 255) +HEADER_BG = (32, 32, 48, 255) +STATUS_BG = (20, 20, 28, 255) + +# Typography +FONT_SIZE = 20 +HEADER_FONT_SIZE = 24 +PLAYBACK_FONT_SIZE = 14 + +# Layout +HEADER_H = 40 +STATUS_H = 32 +LIST_TOP = HEADER_H +LIST_BOTTOM = SCREEN_H - STATUS_H +LIST_ITEM_H = 28 +VISIBLE_ITEMS = (LIST_BOTTOM - LIST_TOP) // LIST_ITEM_H +LIST_PAD_LEFT = 12 +LIST_PAD_RIGHT = 12 + +# Page jump size (L/R shoulder) +PAGE_SIZE = VISIBLE_ITEMS + +# Timing +TARGET_FPS = 30 +FRAME_DELAY_MS = 1000 // TARGET_FPS +PLAYBACK_HUD_REFRESH_MS = 250 +PLAYBACK_HUD_AUTOHIDE_MS = 2500 + +PLAYBACK_HUD_HIDDEN = 0 +PLAYBACK_HUD_AUTO = 1 +PLAYBACK_HUD_PINNED = 2 + +PACKAGE_ROOT = Path(__file__).resolve().parents[1] +ASSETS_DIR = PACKAGE_ROOT / "assets" +ICONS_DIR = ASSETS_DIR / "icons" +ICON_SIZE = 20 + +# Playback HUD / video viewport +PLAYBACK_HUD_TOP = 30 +PLAYBACK_HUD_BOTTOM = 50 +PLAYBACK_HUD_SIDE = 10 +PLAYBACK_PROGRESS_H = 8 +PLAYBACK_OVERLAY_BG = (10, 14, 22, 170) +PLAYBACK_OVERLAY_ACCENT = (84, 124, 224, 255) +PLAYBACK_OVERLAY_DIM = (220, 220, 220, 72) +PLAYBACK_PILL_BG = (8, 12, 18, 210) + +PLAYBACK_HUD_ICON_SIZE = 16 + +PLAYBACK_VIDEO_TOP = PLAYBACK_HUD_TOP +PLAYBACK_VIDEO_BOTTOM = SCREEN_H - PLAYBACK_HUD_BOTTOM +PLAYBACK_VIDEO_LEFT = 0 +PLAYBACK_VIDEO_RIGHT = SCREEN_W + +# Font search paths (in order) +FONT_SEARCH_PATHS = [ + str(ASSETS_DIR / "NotoSans-Regular.ttf"), + "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + "/usr/share/fonts/TTF/DejaVuSans.ttf", + "/usr/share/fonts/dejavu-sans-fonts/DejaVuSans.ttf", + "/usr/share/fonts/google-noto-vf/NotoSans[wght].ttf", + "/usr/share/fonts/liberation-sans-fonts/LiberationSans-Regular.ttf", +] diff --git a/tests/test_client_parser.py b/tests/test_client_parser.py new file mode 100644 index 0000000..62fd508 --- /dev/null +++ b/tests/test_client_parser.py @@ -0,0 +1,131 @@ +"""Tests for the DLNAClient SOAP and DIDL-Lite parsers.""" + +from r36s_dlna_browser.dlna.client import _extract_browse_result, _parse_didl +from r36s_dlna_browser.dlna.models import ItemType + + +_SAMPLE_DIDL = """\ + + + Music + object.container.storageFolder + + + Song.mp3 + object.item.audioItem.musicTrack + http://srv/art.jpg + http://srv/song.mp3 + + + Video.mkv + object.item.videoItem + http://srv/video.mkv + + +""" + + +class TestParseDIDL: + def test_parses_container(self): + items = _parse_didl(_SAMPLE_DIDL, "http://srv") + containers = [i for i in items if i.is_container] + assert len(containers) == 1 + assert containers[0].title == "Music" + assert containers[0].child_count == 3 + + def test_parses_audio_item(self): + items = _parse_didl(_SAMPLE_DIDL, "http://srv") + audio = [i for i in items if i.item_type == ItemType.AUDIO] + assert len(audio) == 1 + assert audio[0].title == "Song.mp3" + assert audio[0].resource_url == "http://srv/song.mp3" + assert audio[0].mime_type == "audio/mpeg" + assert audio[0].size == 4000000 + assert audio[0].duration == "0:03:21" + assert audio[0].album_art_url == "http://srv/art.jpg" + + def test_parses_video_item(self): + items = _parse_didl(_SAMPLE_DIDL, "http://srv") + video = [i for i in items if i.item_type == ItemType.VIDEO] + assert len(video) == 1 + assert video[0].title == "Video.mkv" + assert "video/x-matroska" in video[0].mime_type + + def test_total_count(self): + items = _parse_didl(_SAMPLE_DIDL, "http://srv") + assert len(items) == 3 + + def test_empty_didl(self): + empty = '' + assert _parse_didl(empty, "http://srv") == [] + + def test_malformed_xml(self): + assert _parse_didl("<<>>", "http://srv") == [] + + def test_relative_url_resolution(self): + didl = """\ + + + Relative + object.item.audioItem + media/track.flac + + +""" + items = _parse_didl(didl, "http://myserver:8200") + assert items[0].resource_url == "http://myserver:8200/media/track.flac" + + +class TestExtractBrowseResult: + def test_extracts_unnamespaced_result(self): + soap = """\ + + + + <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><container id="1" parentID="0" /></DIDL-Lite> + + + +""" + result = _extract_browse_result(soap) + assert result is not None + assert "DIDL-Lite" in result + assert 'container id="1"' in result + + def test_extracts_namespaced_result(self): + soap = """\ + + + + <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"></DIDL-Lite> + + + +""" + assert _extract_browse_result(soap) is not None + + def test_extracts_embedded_xml_result(self): + soap = """\ + + + + + + + + + + + +""" + result = _extract_browse_result(soap) + assert result is not None + assert "DIDL-Lite" in result + + def test_returns_none_when_missing(self): + soap = "" + assert _extract_browse_result(soap) is None diff --git a/tests/test_controls.py b/tests/test_controls.py new file mode 100644 index 0000000..9f289db --- /dev/null +++ b/tests/test_controls.py @@ -0,0 +1,79 @@ +"""Tests for platform/controls input mapping.""" + +import ctypes +from unittest.mock import MagicMock + +import sdl2 + +from r36s_dlna_browser.platform.controls import Action, map_key + + +def _make_key_event(sym: int) -> sdl2.SDL_Event: + event = sdl2.SDL_Event() + event.type = sdl2.SDL_KEYDOWN + event.key.keysym.sym = sym + return event + + +def _make_button_event(button: int) -> sdl2.SDL_Event: + event = sdl2.SDL_Event() + event.type = sdl2.SDL_CONTROLLERBUTTONDOWN + event.cbutton.button = button + return event + + +class TestKeyMapping: + def test_up(self): + assert map_key(_make_key_event(sdl2.SDLK_UP)) == Action.UP + + def test_down(self): + assert map_key(_make_key_event(sdl2.SDLK_DOWN)) == Action.DOWN + + def test_confirm_return(self): + assert map_key(_make_key_event(sdl2.SDLK_RETURN)) == Action.CONFIRM + + def test_confirm_space(self): + assert map_key(_make_key_event(sdl2.SDLK_SPACE)) == Action.CONFIRM + + def test_back_escape(self): + assert map_key(_make_key_event(sdl2.SDLK_ESCAPE)) == Action.BACK + + def test_quit(self): + assert map_key(_make_key_event(sdl2.SDLK_q)) == Action.QUIT + + def test_hud_mode(self): + assert map_key(_make_key_event(sdl2.SDLK_h)) == Action.HUD_MODE + + def test_page_up(self): + assert map_key(_make_key_event(sdl2.SDLK_PAGEUP)) == Action.PAGE_UP + + def test_page_down(self): + assert map_key(_make_key_event(sdl2.SDLK_PAGEDOWN)) == Action.PAGE_DOWN + + def test_unmapped_key(self): + assert map_key(_make_key_event(sdl2.SDLK_z)) is None + + def test_wrong_event_type(self): + event = sdl2.SDL_Event() + event.type = sdl2.SDL_MOUSEMOTION + assert map_key(event) is None + + +class TestButtonMapping: + def test_dpad_up(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_DPAD_UP)) == Action.UP + + def test_button_a(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_A)) == Action.CONFIRM + + def test_button_b(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_B)) == Action.BACK + + def test_start(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_START)) == Action.QUIT + + def test_left_shoulder(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_LEFTSHOULDER)) == Action.PAGE_UP + + def test_button_y(self): + assert map_key(_make_button_event(sdl2.SDL_CONTROLLER_BUTTON_Y)) == Action.HUD_MODE diff --git a/tests/test_didl_mapping.py b/tests/test_didl_mapping.py new file mode 100644 index 0000000..e3b2d94 --- /dev/null +++ b/tests/test_didl_mapping.py @@ -0,0 +1,120 @@ +"""Tests for DIDL-Lite parsing and domain model mapping.""" + +from r36s_dlna_browser.dlna.models import ( + ItemType, + MediaItem, + classify_upnp_class, + parse_didl_item, +) + + +class TestClassifyUpnpClass: + def test_container(self): + assert classify_upnp_class("object.container.storageFolder") == ItemType.CONTAINER + + def test_audio(self): + assert classify_upnp_class("object.item.audioItem.musicTrack") == ItemType.AUDIO + + def test_video(self): + assert classify_upnp_class("object.item.videoItem") == ItemType.VIDEO + + def test_image(self): + assert classify_upnp_class("object.item.imageItem.photo") == ItemType.IMAGE + + def test_unknown(self): + assert classify_upnp_class("object.item.something") == ItemType.UNKNOWN + + def test_empty(self): + assert classify_upnp_class("") == ItemType.UNKNOWN + + +class TestParseDIDLItem: + def test_audio_item(self): + didl = { + "id": "42", + "title": "My Song", + "parent_id": "10", + "upnp_class": "object.item.audioItem.musicTrack", + "resources": [ + { + "url": "http://server/song.mp3", + "protocol_info": "http-get:*:audio/mpeg:*", + "size": "5000000", + "duration": "0:03:45", + } + ], + "album_art_uri": "http://server/art.jpg", + } + item = parse_didl_item(didl) + assert item.object_id == "42" + assert item.title == "My Song" + assert item.item_type == ItemType.AUDIO + assert item.resource_url == "http://server/song.mp3" + assert item.mime_type == "http-get:*:audio/mpeg:*" + assert item.size == 5000000 + assert item.duration == "0:03:45" + assert item.album_art_url == "http://server/art.jpg" + assert not item.is_container + + def test_container_item(self): + didl = { + "id": "5", + "title": "Music", + "parent_id": "0", + "upnp_class": "object.container.storageFolder", + "child_count": "12", + } + item = parse_didl_item(didl) + assert item.object_id == "5" + assert item.title == "Music" + assert item.item_type == ItemType.CONTAINER + assert item.child_count == 12 + assert item.is_container + + def test_missing_resources(self): + didl = {"id": "99", "title": "NoRes", "upnp_class": "object.item.audioItem"} + item = parse_didl_item(didl) + assert item.resource_url == "" + assert item.size == 0 + + def test_single_resource_dict(self): + didl = { + "id": "1", + "title": "Track", + "upnp_class": "object.item.audioItem", + "resources": {"url": "http://srv/track.flac", "size": "100"}, + } + item = parse_didl_item(didl) + assert item.resource_url == "http://srv/track.flac" + assert item.size == 100 + + def test_resource_string(self): + didl = { + "id": "2", + "title": "Track2", + "upnp_class": "object.item.videoItem", + "resources": ["http://srv/vid.mp4"], + } + item = parse_didl_item(didl) + assert item.resource_url == "http://srv/vid.mp4" + + def test_alt_key_names(self): + """Handles alternative key formats (@id, @parentID, class, etc.).""" + didl = { + "@id": "7", + "title": "Alt", + "@parentID": "3", + "class": "object.container", + "@childCount": "5", + } + item = parse_didl_item(didl) + assert item.object_id == "7" + assert item.parent_id == "3" + assert item.item_type == ItemType.CONTAINER + assert item.child_count == 5 + + def test_empty_dict(self): + item = parse_didl_item({}) + assert item.object_id == "" + assert item.title == "" + assert item.item_type == ItemType.UNKNOWN diff --git a/tests/test_navigation_state.py b/tests/test_navigation_state.py new file mode 100644 index 0000000..5f764fd --- /dev/null +++ b/tests/test_navigation_state.py @@ -0,0 +1,134 @@ +"""Tests for BrowserState navigation stack and pagination.""" + +from r36s_dlna_browser.dlna.browser_state import BrowserState +from r36s_dlna_browser.dlna.models import MediaServer, MediaItem, ItemType + + +def _server(name: str = "TestServer") -> MediaServer: + return MediaServer(friendly_name=name, location=f"http://{name}:8080/desc.xml") + + +def _items(n: int, container: bool = False) -> list[MediaItem]: + t = ItemType.CONTAINER if container else ItemType.AUDIO + return [ + MediaItem( + object_id=str(i), + title=f"Item {i}", + item_type=t, + resource_url="" if container else f"http://srv/file{i}.mp3", + ) + for i in range(n) + ] + + +class TestServerList: + def test_empty_initial(self): + s = BrowserState() + assert s.servers == [] + assert s.selected_server is None + + def test_set_servers(self): + s = BrowserState() + servers = [_server("A"), _server("B")] + s.set_servers(servers) + assert len(s.servers) == 2 + assert s.server_cursor == 0 + assert s.selected_server.friendly_name == "A" + + def test_cursor_bounds(self): + s = BrowserState() + s.set_servers([_server("A"), _server("B"), _server("C")]) + s.server_cursor = 2 + assert s.selected_server.friendly_name == "C" + s.server_cursor = 5 # out of bounds + assert s.selected_server is None + + +class TestBrowseStack: + def test_not_in_browse_initially(self): + s = BrowserState() + assert not s.in_browse_mode + + def test_enter_server(self): + s = BrowserState() + s.set_servers([_server()]) + obj_id = s.enter_server(s.selected_server) + assert obj_id == "0" + assert s.in_browse_mode + assert s.current_level.object_id == "0" + + def test_set_items_and_cursor(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + items = _items(10) + s.set_items(items, "0") + assert len(s.current_items) == 10 + assert s.cursor == 0 + s.cursor = 3 + assert s.cursor == 3 + assert s.selected_item().title == "Item 3" + + def test_cursor_clamps(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + s.set_items(_items(5), "0") + s.cursor = 100 + assert s.cursor == 4 # clamped to last + s.cursor = -5 + assert s.cursor == 0 + + def test_push_and_pop(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + s.set_items(_items(3, container=True), "0") + + # Drill into child + s.set_items(_items(5), "1") + assert len(s.current_items) == 5 + + # Go back + assert s.go_back() + assert len(s.current_items) == 3 + assert s.current_level.object_id == "0" + + # Go back again exits browse + assert s.go_back() + assert not s.in_browse_mode + + def test_go_back_at_root(self): + s = BrowserState() + assert not s.go_back() + + def test_reset(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + s.set_items(_items(5), "0") + s.error = "fail" + s.playback_title = "song" + s.playback_paused = True + s.reset() + assert not s.in_browse_mode + assert s.error == "" + assert s.playback_title == "" + assert not s.playback_paused + + +class TestScrollOffset: + def test_scroll_offset_default(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + s.set_items(_items(3), "0") + assert s.scroll_offset == 0 + + def test_scroll_offset_set(self): + s = BrowserState() + s.set_servers([_server()]) + s.enter_server(s.selected_server) + s.set_items(_items(30), "0") + s.scroll_offset = 10 + assert s.scroll_offset == 10 diff --git a/tests/test_player.py b/tests/test_player.py new file mode 100644 index 0000000..972b378 --- /dev/null +++ b/tests/test_player.py @@ -0,0 +1,357 @@ +"""Tests for the SDL-rendered GStreamer backend without using a real pipeline.""" + +import ctypes +from types import SimpleNamespace + +import sdl2 + +from r36s_dlna_browser.player.gstreamer_backend import GStreamerBackend + + +class FakeMessageType: + ERROR = 1 + EOS = 2 + BUFFERING = 4 + STATE_CHANGED = 8 + + +class FakeFlowReturn: + OK = 0 + + +class FakeState: + NULL = 0 + READY = 1 + PAUSED = 2 + PLAYING = 3 + + +class FakeStateChangeReturn: + FAILURE = -1 + SUCCESS = 0 + + +class FakeFormat: + TIME = 1 + + +class FakeSeekFlags: + FLUSH = 1 + KEY_UNIT = 2 + + +class FakeCaps: + def __init__(self, width, height): + self._width = width + self._height = height + + def get_size(self): + return 1 + + def get_structure(self, _index): + return FakeStructure(self._width, self._height) + + +class FakeStructure: + def __init__(self, width, height): + self._width = width + self._height = height + + def has_field(self, name): + return name in {"width", "height"} + + def get_value(self, name): + return self._width if name == "width" else self._height + + +class FakeBuffer: + def __init__(self, payload: bytes): + self._payload = payload + + def get_size(self): + return len(self._payload) + + def extract_dup(self, _offset, _size): + return self._payload + + +class FakeSample: + def __init__(self, width=1280, height=720, payload: bytes | None = None): + self._caps = FakeCaps(width, height) + self._buffer = FakeBuffer(payload or (b"\x00" * (width * height * 4))) + + def get_caps(self): + return self._caps + + def get_buffer(self): + return self._buffer + + +class FakeAppSink: + def __init__(self): + self.props = {} + self.connected = [] + self.sample = None + + def set_property(self, name, value): + self.props[name] = value + + def connect(self, signal_name, callback): + self.connected.append((signal_name, callback)) + + def emit(self, signal_name): + assert signal_name == "pull-sample" + return self.sample + + +class FakeBus: + def __init__(self): + self.message = None + + def timed_pop_filtered(self, *_args): + msg, self.message = self.message, None + return msg + + +class FakePipeline: + def __init__(self): + self.props = {} + self.state = FakeState.NULL + self.uri = None + self.position = 12 * 1_000_000_000 + self.duration = 93 * 1_000_000_000 + self.bus = FakeBus() + self.seek_calls = [] + + def set_state(self, state): + self.state = state + return FakeStateChangeReturn.SUCCESS + + def set_property(self, name, value): + self.props[name] = value + if name == "uri": + self.uri = value + + def get_property(self, name): + if name == "volume": + return self.props.get("volume", 1.0) + return self.props.get(name) + + def get_bus(self): + return self.bus + + def query_position(self, _format): + return True, self.position + + def query_duration(self, _format): + return True, self.duration + + def seek_simple(self, _format, flags, target): + self.seek_calls.append((flags, target)) + self.position = target + return True + + +class FakeMessage: + def __init__(self, msg_type, src=None, buffering=0, state=None, error_text="boom", structure_name=None): + self.type = msg_type + self.src = src + self._buffering = buffering + self._state = state or (FakeState.NULL, FakeState.PLAYING, FakeState.NULL) + self._error_text = error_text + self._structure_name = structure_name + + def parse_buffering(self): + return self._buffering + + def parse_state_changed(self): + return self._state + + def parse_error(self): + return SimpleNamespace(message=self._error_text), None + + def get_structure(self): + if not self._structure_name: + return None + return SimpleNamespace(get_name=lambda: self._structure_name) + + +class FakeGst: + State = FakeState + StateChangeReturn = FakeStateChangeReturn + Format = FakeFormat + SeekFlags = FakeSeekFlags + MessageType = FakeMessageType + FlowReturn = FakeFlowReturn + SECOND = 1_000_000_000 + MSECOND = 1_000_000 + Caps = SimpleNamespace(from_string=lambda value: value) + + +class FakeVideoInfoValue: + def __init__(self, width, height, stride): + self.width = width + self.height = height + self.stride = [stride] + + +class FakeVideoInfo: + @staticmethod + def new_from_caps(caps): + structure = caps.get_structure(0) + width = structure.get_value("width") + height = structure.get_value("height") + return FakeVideoInfoValue(width, height, width * 4) + + +class FakeGstVideo: + VideoInfo = FakeVideoInfo + + +class TestGStreamerBackend: + def _make_backend(self): + pipeline = FakePipeline() + sink = FakeAppSink() + backend = GStreamerBackend( + gst_module=FakeGst, + gst_video_module=FakeGstVideo, + appsink_factory=lambda: sink, + playbin_factory=lambda: pipeline, + subsystem="x11", + ) + backend._start_bus_thread = lambda: None + backend._stop_bus_thread = lambda: None + return backend, pipeline, sink + + def test_not_playing_initially(self): + backend, _pipeline, _sink = self._make_backend() + assert not backend.is_playing() + + def test_play_sets_uri_and_configures_appsink(self): + backend, pipeline, sink = self._make_backend() + + backend.play("http://example.com/video.mp4") + + assert backend.is_playing() + assert pipeline.uri == "http://example.com/video.mp4" + assert pipeline.props["video-sink"] is sink + assert sink.props["emit-signals"] is True + assert sink.props["caps"] == "video/x-raw,format=BGRA" + + def test_new_sample_marks_frame_dirty_and_updates_resolution(self): + events = [] + backend, _pipeline, sink = self._make_backend() + backend.set_event_callback(lambda event, *args: events.append((event, *args))) + sink.sample = FakeSample(width=640, height=360) + + assert backend._on_new_sample(sink) == FakeFlowReturn.OK + + assert backend.has_new_frame() is True + assert ("resolution", "640x360") in events + + def test_toggle_pause_switches_pipeline_state(self): + backend, pipeline, _sink = self._make_backend() + backend.play("http://example.com/video.mp4") + + assert backend.toggle_pause() is True + assert pipeline.state == FakeState.PAUSED + assert backend.toggle_pause() is False + assert pipeline.state == FakeState.PLAYING + + def test_seek_uses_relative_position(self): + backend, pipeline, _sink = self._make_backend() + backend.play("http://example.com/video.mp4") + + backend.seek(10) + + assert pipeline.seek_calls == [(FakeSeekFlags.FLUSH | FakeSeekFlags.KEY_UNIT, 22 * 1_000_000_000)] + + def test_change_volume_clamps_to_supported_range(self): + backend, pipeline, _sink = self._make_backend() + backend.play("http://example.com/video.mp4") + + assert backend.change_volume(15) == 115 + assert pipeline.props["volume"] == 1.15 + assert backend.change_volume(50) == 130 + assert pipeline.props["volume"] == 1.3 + + def test_eos_notifies_stopped(self): + events = [] + backend, pipeline, _sink = self._make_backend() + backend.set_event_callback(lambda event, *args: events.append((event, *args))) + backend.play("http://example.com/video.mp4") + + backend._handle_bus_message(FakeMessage(FakeMessageType.EOS, src=pipeline)) + + assert ("stopped",) in events + assert not backend.is_playing() + assert pipeline.state == FakeState.NULL + + def test_buffering_and_metrics_feed_hud(self): + events = [] + backend, pipeline, _sink = self._make_backend() + backend.set_event_callback(lambda event, *args: events.append((event, *args))) + backend.play("http://example.com/video.mp4") + backend._resolution = "1280x720" + + backend._handle_bus_message(FakeMessage(FakeMessageType.BUFFERING, buffering=76)) + backend._emit_playback_metrics() + + assert ("buffering", 76) in events + assert ("position", 12.0) in events + assert ("duration", 93.0) in events + assert ("volume", 100) in events + assert ("resolution", "1280x720") in events + + def test_state_changed_updates_pause_event(self): + events = [] + backend, pipeline, _sink = self._make_backend() + backend.set_event_callback(lambda event, *args: events.append((event, *args))) + backend.play("http://example.com/video.mp4") + + backend._handle_bus_message( + FakeMessage( + FakeMessageType.STATE_CHANGED, + src=pipeline, + state=(FakeState.PLAYING, FakeState.PAUSED, FakeState.NULL), + ) + ) + + assert ("paused", True) in events + + def test_error_message_propagates(self): + events = [] + backend, pipeline, _sink = self._make_backend() + backend.set_event_callback(lambda event, *args: events.append((event, *args))) + backend.play("http://example.com/video.mp4") + + backend._handle_bus_message(FakeMessage(FakeMessageType.ERROR, src=pipeline, error_text="decoder fail")) + + assert ("error", "decoder fail") in events + assert not backend.is_playing() + + def test_stop_sets_pipeline_to_null(self): + backend, pipeline, _sink = self._make_backend() + backend.play("http://example.com/video.mp4") + + backend.stop() + + assert pipeline.state == FakeState.NULL + assert not backend.is_playing() + + def test_render_uploads_latest_frame_and_clears_dirty_flag(self, monkeypatch): + backend, _pipeline, _sink = self._make_backend() + backend._latest_frame = SimpleNamespace(width=320, height=180, pitch=1280, pixels=b"\x00" * (320 * 180 * 4)) + backend._frame_dirty = True + + calls = [] + + monkeypatch.setattr(sdl2, "SDL_CreateTexture", lambda *_args: object()) + monkeypatch.setattr(sdl2, "SDL_UpdateTexture", lambda *_args: 0) + monkeypatch.setattr(sdl2, "SDL_RenderCopy", lambda _renderer, _texture, _src, dst: calls.append((dst.x, dst.y, dst.w, dst.h))) + + backend.set_viewport(640, 480, 48, 80, 12, 12) + + assert backend.render(object()) is True + assert backend.has_new_frame() is False + assert calls == [(12, 51, 616, 346)] diff --git a/tests/test_runtime.py b/tests/test_runtime.py new file mode 100644 index 0000000..b91c7f9 --- /dev/null +++ b/tests/test_runtime.py @@ -0,0 +1,40 @@ +"""Tests for runtime environment setup helpers.""" + +import os + +from r36s_dlna_browser.platform import runtime + + +def test_wayland_does_not_override_video_driver(monkeypatch): + monkeypatch.setenv("WAYLAND_DISPLAY", "wayland-0") + monkeypatch.setenv("DISPLAY", ":0") + monkeypatch.delenv("SDL_VIDEODRIVER", raising=False) + monkeypatch.setattr(runtime, "is_r36s", lambda: False) + + runtime.sdl_env_setup() + + assert "SDL_VIDEODRIVER" not in os.environ + + +def test_respects_existing_sdl_videodriver(monkeypatch): + monkeypatch.setenv("WAYLAND_DISPLAY", "wayland-0") + monkeypatch.setenv("DISPLAY", ":0") + monkeypatch.setenv("SDL_VIDEODRIVER", "wayland") + monkeypatch.setattr(runtime, "is_r36s", lambda: False) + + runtime.sdl_env_setup() + + assert os.environ["SDL_VIDEODRIVER"] == "wayland" + + +def test_r36s_sets_alsa_audio_driver(monkeypatch): + monkeypatch.delenv("SDL_AUDIODRIVER", raising=False) + monkeypatch.delenv("SDL_VIDEODRIVER", raising=False) + monkeypatch.delenv("DISPLAY", raising=False) + monkeypatch.delenv("WAYLAND_DISPLAY", raising=False) + monkeypatch.setattr(runtime, "is_r36s", lambda: True) + + runtime.sdl_env_setup() + + assert os.environ["SDL_AUDIODRIVER"] == "alsa" + assert os.environ["SDL_VIDEODRIVER"] == "kmsdrm" diff --git a/tests/test_sdl_app.py b/tests/test_sdl_app.py new file mode 100644 index 0000000..1974909 --- /dev/null +++ b/tests/test_sdl_app.py @@ -0,0 +1,122 @@ +from __future__ import annotations + +from queue import Queue + +from r36s_dlna_browser.dlna.browser_state import BrowserState +from r36s_dlna_browser.platform.controls import Action +from r36s_dlna_browser.ui import theme +from r36s_dlna_browser.ui import sdl_app as sdl_app_module +from r36s_dlna_browser.ui.sdl_app import SDLApp, Screen + + +class DummyPlayer: + def __init__(self) -> None: + self._new_frame = False + + def attach_window(self, _window) -> None: + pass + + def set_viewport(self, *_args) -> None: + pass + + def has_new_frame(self) -> bool: + return self._new_frame + + def render(self, _renderer) -> bool: + self._new_frame = False + return True + + +def _make_app() -> SDLApp: + return SDLApp(Queue(), Queue(), BrowserState(), DummyPlayer()) + + +def test_non_playback_draws_only_when_dirty() -> None: + app = _make_app() + app._screen = Screen.SERVERS + app._needs_redraw = False + + assert app._should_draw() is False + + app._mark_dirty() + + assert app._should_draw() is True + + +def test_playback_snapshot_change_waits_for_refresh_interval(monkeypatch) -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + app._needs_redraw = False + app._last_playback_snapshot = app._playback_snapshot() + app._last_playback_draw_at = 10.0 + app._state.playback_position = 1.0 + + monkeypatch.setattr(sdl_app_module.time, "monotonic", lambda: 10.1) + + assert app._should_draw() is False + + +def test_playback_snapshot_change_redraws_after_refresh_interval(monkeypatch) -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + app._needs_redraw = False + app._last_playback_snapshot = app._playback_snapshot() + app._last_playback_draw_at = 10.0 + app._state.playback_position = 1.0 + + monkeypatch.setattr(sdl_app_module.time, "monotonic", lambda: 10.3) + + assert app._should_draw() is True + + +def test_playback_snapshot_without_changes_does_not_redraw(monkeypatch) -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + app._needs_redraw = False + app._last_playback_snapshot = app._playback_snapshot() + app._last_playback_draw_at = 10.0 + + monkeypatch.setattr(sdl_app_module.time, "monotonic", lambda: 10.5) + + assert app._should_draw() is False + + +def test_playback_draws_immediately_for_new_video_frame() -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + app._needs_redraw = False + app._player._new_frame = True + + assert app._should_draw() is True + + +def test_hud_mode_cycles_auto_fixed_hidden(monkeypatch) -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + monkeypatch.setattr(sdl_app_module.time, "monotonic", lambda: 12.0) + + app._handle_action(Action.HUD_MODE) + assert app._state.playback_hud_mode == theme.PLAYBACK_HUD_PINNED + assert app._state.playback_hud_visible is True + + app._handle_action(Action.HUD_MODE) + assert app._state.playback_hud_mode == theme.PLAYBACK_HUD_HIDDEN + assert app._state.playback_hud_visible is False + + app._handle_action(Action.HUD_MODE) + assert app._state.playback_hud_mode == theme.PLAYBACK_HUD_AUTO + assert app._state.playback_hud_visible is True + + +def test_paused_playback_keeps_hud_visible_in_auto_mode(monkeypatch) -> None: + app = _make_app() + app._screen = Screen.PLAYBACK + app._state.playback_hud_mode = theme.PLAYBACK_HUD_AUTO + app._state.playback_hud_visible = False + app._state.playback_paused = True + + monkeypatch.setattr(sdl_app_module.time, "monotonic", lambda: 99.0) + + app._refresh_playback_hud_visibility() + + assert app._state.playback_hud_visible is True \ No newline at end of file