Apollo AIR-1 Installer
+ + + + + + \ No newline at end of file From 8e40d04d0ca1bc5d0ff1c66e34d096428191cba8 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Tue, 14 Jul 2026 10:08:12 -0500 Subject: [PATCH 02/13] Auto-assign on fork PRs via pull_request_target --- .github/workflows/autoassign.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/autoassign.yml b/.github/workflows/autoassign.yml index a70c3da..03b36f5 100644 --- a/.github/workflows/autoassign.yml +++ b/.github/workflows/autoassign.yml @@ -1,9 +1,12 @@ name: Auto Assign +# pull_request_target (not pull_request) so auto-assign works on +# fork-submitted PRs; fork pull_request runs only get a read-only token. +# Safe because this workflow never checks out or executes PR code. on: issues: types: [opened] - pull_request: + pull_request_target: types: [opened] permissions: @@ -12,9 +15,7 @@ permissions: jobs: auto-assign: - # Skip auto-assign for pull requests from forks due to GITHUB_TOKEN permission restrictions - if: github.event_name == 'issues' || github.event.pull_request.head.repo.full_name == github.repository uses: ApolloAutomation/Workflows/.github/workflows/autoassign.yml@main with: - assignees: TrevorSchirmer + assignees: bharvey88 num-of-assignees: 1 From 281002e8dc9978723029eccb3ecde8c5ebec2b9e Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sat, 22 Aug 2026 22:21:47 -0500 Subject: [PATCH 03/13] Add the release-drafter config the build workflow needs Every Build and Publish run on main fails at Set Version because release-drafter cannot find .github/release-drafter.yml. Copied from H-1 with the changelog link pointed at this repo. Generated with [Claude Code](https://claude.com/claude-code) --- .github/release-drafter.yml | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/release-drafter.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..7d579fe --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,51 @@ +name-template: 'Release v$NEXT_PATCH_VERSION' +tag-template: "$RESOLVED_VERSION" +change-template: "- #$NUMBER $TITLE @$AUTHOR" +sort-direction: ascending + +categories: + - title: "🚨 Breaking changes" + labels: + - "breaking-change" + - title: "✨ New features" + labels: + - "new-feature" + - title: "🐛 Bug fixes" + labels: + - "bugfix" +# - title: "🚀 Enhancements" +# labels: +# - "enhancement" +# - "refactor" +# - "performance" +# - title: "🧰 Maintenance" +# labels: +# - "maintenance" +# - "ci" +# - title: "📚 Documentation" +# labels: +# - "documentation" + - title: "⬆️ Dependency updates" + collapse-after: 5 + labels: + - "dependency-update" +# - title: "🚨🚨 Security Fixes 🚨🚨" +# labels: +# - "security" + + +include-labels: + - "bugfix" + - "new-feature" + - "breaking-change" + +no-changes-template: '- No changes' + +template: | + ## What's Changed + + $CHANGES + + **Full Changelog**: https://github.com/ApolloAutomation/H-3/compare/$PREVIOUS_TAG...$RESOLVED_VERSION.1 + + Be sure to 🌟 this repository for updates! \ No newline at end of file From 4ed7acaa71f64b0e7ad5e77be47a06a8717254df Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 10:40:38 -0500 Subject: [PATCH 04/13] Add improv_serial so the web installer can set Wi-Fi The smart firmware only offered the hotspot and captive portal for first-time Wi-Fi setup. With improv_serial the browser installer can prompt for Wi-Fi right after flashing, matching the H-1. Generated with [Claude Code](https://claude.com/claude-code) --- Integrations/ESPHome/Core.yaml | 2 +- Integrations/ESPHome/H-3.yaml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 527cfe6..4f6934a 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,5 +1,5 @@ substitutions: - version: "26.8.14.1" + version: "26.8.23.1" run_duration_default: "90s" run_duration_gpio: "90s" timer_wake_enabled: "true" diff --git a/Integrations/ESPHome/H-3.yaml b/Integrations/ESPHome/H-3.yaml index ff8caa8..8f1b3b0 100644 --- a/Integrations/ESPHome/H-3.yaml +++ b/Integrations/ESPHome/H-3.yaml @@ -88,6 +88,8 @@ wifi: logger: +improv_serial: + captive_portal: web_server: From 5c8fa9931005f89349a9fe13b41b21bde14b609c Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 11:40:23 -0500 Subject: [PATCH 05/13] Add the Bluetooth Proxy switch Same runtime switch the rest of the fleet has (AIR-1, MSR-2): default off, esp32_ble_tracker start_scan/stop_scan, re-applied at on_boot -300 so scanning matches the state restored from flash. Smart firmware only; H-3D has no api so bluetooth_proxy cannot load there. Generated with [Claude Code](https://claude.com/claude-code) --- Integrations/ESPHome/Core.yaml | 2 +- Integrations/ESPHome/H-3.yaml | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 527cfe6..2e33d67 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,5 +1,5 @@ substitutions: - version: "26.8.14.1" + version: "26.8.23.2" run_duration_default: "90s" run_duration_gpio: "90s" timer_wake_enabled: "true" diff --git a/Integrations/ESPHome/H-3.yaml b/Integrations/ESPHome/H-3.yaml index ff8caa8..632e6b4 100644 --- a/Integrations/ESPHome/H-3.yaml +++ b/Integrations/ESPHome/H-3.yaml @@ -49,6 +49,18 @@ esphome: - lambda: "return id(runTest);" then: - script.execute: testScript + # Re-apply the Bluetooth Proxy switch after all components set up, so BLE + # scanning matches the switch state restored from flash. + - priority: -300 + then: + - if: + condition: + switch.is_on: bluetooth_proxy_switch + then: + - esp32_ble_tracker.start_scan: + continuous: true + else: + - esp32_ble_tracker.stop_scan: on_shutdown: - light.turn_off: body_light - light.turn_off: mouth_light @@ -69,6 +81,13 @@ ota: - platform: http_request id: ota_managed +esp32_ble_tracker: + id: ble_tracker + scan_parameters: + continuous: true + +bluetooth_proxy: + http_request: verify_ssl: true @@ -131,6 +150,19 @@ api: ESP_LOGW("Apollo", "Preventing Deep Sleep Due To OTA Or Switch"); id(deep_sleep_1).prevent_deep_sleep(); switch: + - platform: template + name: "Bluetooth Proxy" + id: bluetooth_proxy_switch + icon: mdi:bluetooth + entity_category: "config" + restore_mode: RESTORE_DEFAULT_OFF + optimistic: true + on_turn_on: + - esp32_ble_tracker.start_scan: + continuous: true + on_turn_off: + - esp32_ble_tracker.stop_scan: + - platform: template name: "Prevent Sleep" id: prevent_sleep From ed83bb300f77f498c2668781e59c86a2bf69fff0 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 11:46:26 -0500 Subject: [PATCH 06/13] Tidy the substitutions block --- Integrations/ESPHome/Core.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 2f7402f..9353ee3 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,5 +1,4 @@ substitutions: - version: "26.8.23.2" run_duration_default: "90s" From 867f2418f12eac6e12cf7b354ee8a7af3c6242ba Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 11:58:43 -0500 Subject: [PATCH 07/13] Add the Firmware Channel select and beta builds Ports the MSR-2 Stable/Beta channel logic: Firmware Channel select, apply_ota_source script, Firmware Update button, http_request buffers sized for GitHub release-asset redirects, and a beta-channel build that defaults the select to Beta. build-beta.yml publishes beta pushes to the rolling beta-fw pre-release. Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/build-beta.yml | 104 +++++++++++++++++++++ Integrations/ESPHome/Core.yaml | 2 +- Integrations/ESPHome/H-3.yaml | 71 +++++++++++++- Integrations/ESPHome/beta-channel/H-3.yaml | 9 ++ 4 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/build-beta.yml create mode 100644 Integrations/ESPHome/beta-channel/H-3.yaml diff --git a/.github/workflows/build-beta.yml b/.github/workflows/build-beta.yml new file mode 100644 index 0000000..399e62d --- /dev/null +++ b/.github/workflows/build-beta.yml @@ -0,0 +1,104 @@ +name: Build and Publish Beta + +# Builds H-3 firmware from the beta branch and publishes it as assets on a +# rolling "beta-fw" pre-release. The on-device "Firmware Channel" select points +# OTA updates at these assets. Stable firmware is built/published separately +# by build.yml (push to main -> GitHub Pages). + +on: + push: + branches: [beta] + paths: + - 'Integrations/ESPHome/**' + workflow_dispatch: + +# Least privilege: read-only by default; only publish-beta is elevated to write. +permissions: + contents: read + +jobs: + version: + name: Read version + runs-on: ubuntu-latest + outputs: + v: ${{ steps.read.outputs.v }} + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + - id: read + run: | + v=$(awk '/substitutions:/ {f=1} f && /version:/ {print $2; exit}' \ + Integrations/ESPHome/Core.yaml | tr -d '"') + echo "v=$v" >> "$GITHUB_OUTPUT" + echo "Beta version: $v" + + build: + name: Build ${{ matrix.name }} + needs: version + strategy: + matrix: + include: + # Beta serves OTA updates only, so it builds the end-user image + # (H-3.yaml), not the first-flash Factory image. + - { yaml: Integrations/ESPHome/beta-channel/H-3.yaml, name: firmware-standard } + uses: esphome/workflows/.github/workflows/build.yml@025a1e6255610c498ed590403b7e510b69e474df # 2026.4.1 + with: + files: ${{ matrix.yaml }} + esphome-version: stable + combined-name: ${{ matrix.name }} + release-version: ${{ needs.version.outputs.v }} + + publish-beta: + name: Publish beta release assets + needs: [version, build] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Download firmware artifacts + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + path: fw + pattern: firmware* + + - name: Ensure rolling 'beta-fw' pre-release exists + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release view beta-fw -R "${{ github.repository }}" >/dev/null 2>&1 \ + || gh release create beta-fw -R "${{ github.repository }}" \ + --prerelease --title "Beta (rolling)" \ + --notes "Latest H-3 beta firmware. Auto-updated on every push to the beta branch." + + - name: Rewrite manifests to absolute URLs and upload assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BASE="https://github.com/${{ github.repository }}/releases/download/beta-fw" + declare -A DIRS=( [standard]=firmware-standard ) + for v in standard; do + src="fw/${DIRS[$v]}" + man=$(find "$src" -name manifest.json | head -1) + if [ -z "$man" ]; then + echo "::error::manifest.json not found for ${DIRS[$v]}" + exit 1 + fi + # Release assets are a flat namespace: prefix per variant, same + # naming as the rest of the fleet. + find "$src" -name '*.bin' | while read -r bin; do + mv "$bin" "$(dirname "$bin")/$v-$(basename "$bin")" + done + echo "Rewriting $man" + # Make ota.path and parts[].path absolute release-asset URLs so the + # device never has to resolve a relative path against a redirect. + jq --arg base "$BASE" --arg pfx "$v-" ' + .builds[0].ota.path = ($base + "/" + $pfx + (.builds[0].ota.path | sub(".*/"; ""))) + | .builds[0].parts |= map(.path = ($base + "/" + $pfx + (.path | sub(".*/"; "")))) + ' "$man" > "manifest-$v.json" + cat "manifest-$v.json" + gh release upload beta-fw "manifest-$v.json" -R "${{ github.repository }}" --clobber + find "$src" -name '*.bin' -print -exec \ + gh release upload beta-fw {} -R "${{ github.repository }}" --clobber \; + done + echo "Beta assets published." diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index 9353ee3..91d8b5d 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,5 +1,5 @@ substitutions: - version: "26.8.23.2" + version: "26.8.23.3" run_duration_default: "90s" run_duration_gpio: "90s" diff --git a/Integrations/ESPHome/H-3.yaml b/Integrations/ESPHome/H-3.yaml index 68ef79b..6d2af6b 100644 --- a/Integrations/ESPHome/H-3.yaml +++ b/Integrations/ESPHome/H-3.yaml @@ -1,3 +1,16 @@ +substitutions: + # Default update channel on first boot (no stored user choice yet, i.e. a + # fresh flash). The beta-channel build overrides this to "Beta" (see + # Integrations/ESPHome/beta-channel/) so firmware obtained from the beta + # channel keeps tracking it instead of offering a stable "downgrade". + firmware_channel_default: "Stable" + # Manifest URL bases. Stable = GitHub Pages (main branch builds). + # Beta = rolling "beta-fw" pre-release assets (beta branch builds). + stable_manifest_base: "https://apolloautomation.github.io/H-3" + beta_manifest_base: "https://github.com/ApolloAutomation/H-3/releases/download/beta-fw" + ota_stable_manifest: "${stable_manifest_base}/firmware/manifest.json" + ota_beta_manifest: "${beta_manifest_base}/manifest-standard.json" + esphome: name: "apollo-h-3" friendly_name: Apollo H-3 @@ -14,6 +27,10 @@ esphome: # safe_mode:); tracks the rest of the fleet rather than the true minimum. min_version: 2025.11.0 on_boot: + # Point the update entity at the selected channel manifest. + - priority: -100 + then: + - script.execute: apply_ota_source # H-3 is opt-in for deep sleep - priority: 800 then: @@ -90,14 +107,22 @@ bluetooth_proxy: http_request: verify_ssl: true + # GitHub release-asset downloads answer with a redirect carrying a + # ~3.6 KB Content-Security-Policy header; each header line must fit + # this buffer or the request fails with "HTTP_CLIENT: Out of buffer". + buffer_size_rx: 5120 + # The redirect target is a signed URL with a ~850-char query string; the + # follow-up request line must fit the TX buffer or esp_http_client_open + # fails with "Out of buffer" before sending anything. + buffer_size_tx: 2048 safe_mode: update: - platform: http_request - id: firmware_update + id: update_http_request name: Firmware Update - source: https://apolloautomation.github.io/H-3/firmware/manifest.json + source: ${ota_stable_manifest} wifi: power_save_mode: HIGH @@ -151,6 +176,38 @@ api: - lambda: |- ESP_LOGW("Apollo", "Preventing Deep Sleep Due To OTA Or Switch"); id(deep_sleep_1).prevent_deep_sleep(); +select: + - platform: template + name: "Firmware Channel" + id: firmware_channel + icon: mdi:source-branch + entity_category: "config" + optimistic: true + restore_value: true + options: + - "Stable" + - "Beta" + initial_option: "${firmware_channel_default}" + on_value: + then: + - script.execute: apply_ota_source + +button: + - platform: template + name: "Firmware Update" + id: update_firmware + icon: mdi:cloud-download + entity_category: "config" + on_press: + - logger.log: "Applying firmware update for the selected channel" + - delay: 3s + - script.execute: apply_ota_source + - script.wait: apply_ota_source + # The manifest fetch runs in its own task; give it a fixed window to land + # (update.is_available stays false for same-version switches). + - delay: 5s + - lambda: id(update_http_request).perform(true); + switch: - platform: template name: "Bluetooth Proxy" @@ -214,6 +271,16 @@ sensor: entity_category: "diagnostic" script: + - id: apply_ota_source + # Sets the OTA manifest URL from the Firmware Channel select (Stable/Beta). + then: + - lambda: |- + const bool beta = id(firmware_channel).current_option() == "Beta"; + std::string url = beta ? "${ota_beta_manifest}" : "${ota_stable_manifest}"; + ESP_LOGI("firmware", "OTA manifest set to: %s", url.c_str()); + id(update_http_request).set_source_url(url); + - component.update: update_http_request + - id: statusCheck then: - if: diff --git a/Integrations/ESPHome/beta-channel/H-3.yaml b/Integrations/ESPHome/beta-channel/H-3.yaml new file mode 100644 index 0000000..9a4073d --- /dev/null +++ b/Integrations/ESPHome/beta-channel/H-3.yaml @@ -0,0 +1,9 @@ +# Beta-channel build of H-3.yaml: the identical image except the Firmware +# Channel select defaults to "Beta" on first boot, so firmware obtained from +# the beta channel keeps tracking it. Built by build-beta.yml only; the +# stable (GitHub Pages) builds use H-3.yaml directly. +substitutions: + firmware_channel_default: "Beta" + +packages: + base: !include ../H-3.yaml From 39032b7a502ad06514c5751ad47b93f2fea415d5 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 11:59:29 -0500 Subject: [PATCH 08/13] Bring the PR template and label check in line with the fleet Long-form PR template in .github (the Types of changes boxes feed the shared label-check), standalone label-check.yml on pull_request_target so fork PRs get labelled, and ci.yml back to read-only with the inline label job removed, matching MSR-2. Generated with [Claude Code](https://claude.com/claude-code) --- .github/PULL_REQUEST_TEMPLATE.md | 47 +++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 9 ++---- .github/workflows/label-check.yml | 20 +++++++++++++ PULL_REQUEST_TEMPLATE.md | 13 --------- 4 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/label-check.yml delete mode 100644 PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a298f9f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,47 @@ + +Version: + + +## What does this implement/fix? + + + +## Types of changes + + +- [ ] Bugfix (fixed change that fixes an issue) +- [ ] New feature (thanks!) +- [ ] Breaking change (repair/feature that breaks existing functionality) +- [ ] Dependency Update - Does not publish +- [ ] Other - Does not publish +- [ ] Website of github readme file update - Does not publish +- [ ] Github workflows - Does not publish + + +## Checklist / Checklijst: + + + - [ ] The code change has been tested and works locally + - [ ] The code change has not yet been tested + +If user-visible functionality or configuration variables are added/modified: + - [ ] Added/updated documentation for the web page + + \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ac0084..50aafd6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,15 +4,11 @@ on: pull_request: permissions: - pull-requests: write - issues: write contents: read +# Label check lives in label-check.yml on pull_request_target so it can +# label fork-submitted PRs; plain pull_request tokens are read-only there. jobs: - label-check: - name: Label Check - uses: ApolloAutomation/Workflows/.github/workflows/label-check.yml@main - ci: name: CI uses: ApolloAutomation/Workflows/.github/workflows/esphome-ci.yml@main @@ -20,3 +16,4 @@ jobs: yaml-files: | Integrations/ESPHome/H-3.yaml Integrations/ESPHome/H-3D.yaml + diff --git a/.github/workflows/label-check.yml b/.github/workflows/label-check.yml new file mode 100644 index 0000000..96a9751 --- /dev/null +++ b/.github/workflows/label-check.yml @@ -0,0 +1,20 @@ +name: Label Check + +# pull_request_target (not pull_request) so the job gets a write token on +# fork-submitted PRs too; plain pull_request runs from forks are read-only +# and cannot add labels. Safe because the called workflow only reads the PR +# body and never checks out or executes PR code. The "edited" type re-runs +# the check when the template checkboxes are changed. +on: + pull_request_target: + types: [opened, edited, reopened, synchronize] + +permissions: + pull-requests: write + issues: write + contents: read + +jobs: + label-check: + name: Label Check + uses: ApolloAutomation/Workflows/.github/workflows/label-check.yml@main diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 5f6a192..0000000 --- a/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ -Version: - -Adds: - -Fixes: - -Breaks: - - - -Checks: -- [ ] Documentation Updated -- [ ] Build Number Incremented In Core.yaml From 04b6b4bc87d0433747c42abe3f82ea41041d9c86 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 12:10:35 -0500 Subject: [PATCH 09/13] Bring the README in line with the H-2 one Same layout as H-2: charity section, shop link to the H-3 listing, photo placeholder until there is a product image. Generated with [Claude Code](https://claude.com/claude-code) --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 83f39d4..2c38242 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,24 @@ # Apollo H-3 Holiday Ornament + + **Key Features of the H-3:** -- USB-C or battery-powered ornament with 37 controllable RGB LEDs across five zones and a buzzer to play holiday tunes +- USB-C or battery powered ornament with 37 controllable RGB LEDs across five zones and a buzzer to play holiday tunes - Individually controllable body (24 LEDs), hat (5 LEDs), mouth (5 LEDs), eyes (2 LEDs), and nose (1 LED) - Comes preloaded with 5 holiday tunes and RGB LED patterns - Comes flashed with basic firmware but can be flashed with our smart firmware to connect and control from Home Assistant - Could also be used as a bluetooth proxy or bluetooth tracker - Features an ESP32-C6 processor with 8MB flash +**100% of profits donated to:** + +- **[CASA of Lexington](https://casaoflexington.org/)** - Advocates for children in the family court system + +- **[Open Home Foundation](https://www.openhomefoundation.org/)** - Apollo Automation is proud to back the Open Home Foundation. A portion of profits from every H-3 sold helps protect the values of privacy, choice, and sustainability in the smart home by supporting open source projects like Home Assistant and open connectivity standards. + ## Links Discord (Support/feedback/discussion/future products): [http://dsc.gg/ApolloAutomation](http://dsc.gg/ApolloAutomation) -Shop: [https://apolloautomation.com](https://apolloautomation.com) +Shop: [https://apolloautomation.com/products/apollo-h-3-annual-holiday-ornament-for-charity](https://apolloautomation.com/products/apollo-h-3-annual-holiday-ornament-for-charity) Wiki: [https://wiki.apolloautomation.com](https://wiki.apolloautomation.com) From 780d39e7d517d48defc55b12d0cc82d9dbe2be20 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Sun, 23 Aug 2026 12:12:01 -0500 Subject: [PATCH 10/13] Add the H-3 product photo Generated with [Claude Code](https://claude.com/claude-code) --- H-3.jpg | Bin 0 -> 448955 bytes README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 H-3.jpg diff --git a/H-3.jpg b/H-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af88a243cbda3fea02229d9455b85f9573fd68ab GIT binary patch literal 448955 zcmb4q_fu2P_kIEaLsLMAG%+*aB*|}ZxGszr?=650d})^M9W780K*I*4Wdr^< z2;c(%XlQ}|0Qf%uX#lkUCV2_`&&vHj%Rl^|?cW L)h3Q{d#CM6ZFbRnX|-WQ#6X4Tv|&gvUdrLU?*KJ8J8XtLooUzE xP6PMw~$4YcpJ&X-|jl={v@+O! el*B`?VUQoJBK8E+)Q7LAj|G6$<0?{tv*i z-96X;imQ5Tg$CA?PluaoeZ?BT|~UV35VeuD{tR~D1h)#|{eW_w9Ox{{r@uO$)@ zdt*G}Jp^7W&mrsW#{8p&u3hDt5cnthVf>2U?w)A}&zfms6$G~{bO0fH?QoYR>b2rS za?7Goct~}c88XyG=Co7HlwuXKqo)?TI6!p6JEdFB#&NXRb~NCT 7g+(IzFLvZb(*uM*fYZg=wZ*92X~vk{+X-KFXR8kJYU- zH~s_>q^Vl2UUB+3)ns4EYhRo2>ALmX%Eqm?XYVZF3!)VrCUcce&Fnp(iTpZ~=~?@^ zIu40vH3{ PfBh8x#058&uq$^(n8@d>4%pK>6s*_P-gdPCTcr8 znmZR(%@naD=VnBte`V) PAnU5k;V~2th@5A88(S@(K%xT zVU?#zxU$T991U4xUQep~8MjTZHMlo6+edFDO}2uNl@{r#4xG5zQc@QCAm?B_jJ~lF z?flfDHPkM1NW6BNy~_@L7vRK$U`mye0fAzHrnRp>xz`d{FU19dWqF1b*vV+-czQr) zmmMa4To0qErhOUb*b<%~l{|2Bb++{o SRuju(_6uN&F({d9RG_2~ z2yl+<_bvHG`jQK|0j5|)$Q^S2+`#TdKy@lxh8M|WDlicD27+rz!p|3UNsYD#QIMsS z$ s|J3Y8!MwNxdFri |=+|OtEWm0m`kx z3o5!t{v&N&yVZRU+qU=QPW6tGPF1^$`O&KV8`lpJoqsMBeg6|kBG=D-%IcvDutViD z?Q`U@dBu`3%_29s@rvEa^j!j3R3e~cxE|#p=JXhn)mh }mLQpuTC*#{M5XMjyw zn9{A%*PZVyNV%sCW8@}=09uoj8nMP!D`Eiu!y(bTvDUS z?66uqq6IV>#)xLWjVfu=7L~Yd6faRd&bh!E-Pp{U4j2{mKM!@hxbphqTFm$Gg0~Zx zW2r=LVrRP=r>8=@oo^QdYl9eiQ8Y*0LA+VbD!ax$PJ*2UphttHdrFrerm3Zy^i6=I zJG-c)Wx&GRO6OQJ$`#3#T474B5H$!)(jmP$?UD-JExRZZguN<{{>9#tjk~H7j36~j z8q|oL`W>b!2twwAFBdt*QCh_3TDWU8b*`7pl#Q!n;{1}2Ci*g3anq}A(pF=V%l^8x zRLN3*@kB2j_du(smwaT8zfwmBoN}){g1u4MNcwSc^!xeLMIDTKzBsCKf4rVumX%c( zEMUx~2Ii$cxNlz-OOn30ac{Th#+9_0y6)rdjeuL@;=jHQ?D+ngp}+U(_cye#mzFH6 zY^E-&Es#k#Hd9x!y4dU6`{Vwf5m;Ve(TW+HwY iR=Z>G7^$&JXbf^mvB8z7S16heK9Lw;?a?`EH> zqL+>j;{&%U^%-a3w(1;qfVTj8<595>x4ORd4rF{f`?Rr2;QwMBG2na}ZV`Q9 >*&B{tfbm0rL^>`7A*~ ztq16zmkg751(&42eZXA0!t78yN$JhA8o@!?WP%)0hNd5ZO=2HTvNd<(vg{XeVg6 z#9J6~X|O>fqiI2Ck?_HiU^7+XaMzQ4#baDXsAO!FcKrQyVI>Qcd0wt {vnbet zMQ-Jh-;WKo@SK<*OH)V1x2fI#0h)GKnLm$$wTsfG2H9PsK9nTHhYXCe>Q0Ee)_DHt z==$ri8y>paw!2@m?(`V {Xa(eGgy$m{RB^|scY3dawn&4V!E0h z35pfpE%|hE{`>1nw?*^!zmK1De%hoGR1ysoTzT4C6+Bab;8Mi?ay1$$X9;TSvEO+& zRfMJpcDtENB|-b$76>qYwuQ*MVrXL%_vqD<{RSRUKAKA)h)K90&;F1OuMSKXTWaDe zR?h%X-9k)kMVfZbtqSn(kA(||ia#weMq2UbJVEB5h@uGCXqQ+l$vKL@S &I*dY__3`x}kEq9%dtT z^mkx9 w#$&KFQQ)Sw9qz z^FRNDeSJ8i(Nv4%)<|*Fjbvs30xh}0^>4Wa)n50x9rfIh+qn=N=gsLHjg5*< I?VXRN3zO&-HtM G7`f&?gLe7?Z&ve;?j=voTLG`bBBhZr}Z8 z!irQ7&d4LX>`R&eY&N*iLMkxq=v1lmHtk%n4|3^6$`OCxXo#wSAe zds~erAw9BR#$1*cnCa$SlPa5c U<8k0zoAJS^5omZP!hg{7}cz!*BV1k`)bOTM1W`J;FxpDcMq|Bju>y)JU^n zYc^X(9gqg{HL=V9KoNj0#XOqfl<{wsHu4qkaHbkIMdY~0HXiwVMeu8=4$=M6N$ Wtz2e)-N zIEKm_>t{`Qx;z}qugpNLp>CImFa_|uUGl0Q$# fk!#acCw_U&uRnppDKJMxMZ{2NyqVN+g$%avBOrxMucE;`7X6`kOw zrJ0G<(!62YCy!Uzfgd$u*Wl>U;1GEi#+8sVC9?qbPj%rQ*tyd}f0KNbTLmZUcYpfa z+WXx{*p@~0_-Yw9zJot*{Ql%Ce+E)36Br3~1j{5Hn*Yt27!Z?>9Cd0CZ>U?`{sd5F zgEE8ClXQXU?CO@fOjHFI>+;cyI_cdX_;=kZQ45mU?{I-yl3FzL%^dg4t=)Zx+&{Z9 zUp18AoVec94tK IFOZvMlB`p}!+14$InTi_R@lXKTeQ`j^$&+lE z(jwy|B!=Nnn+(Amef#UM82sF3gyePImopL5f-8LdV0J`8+&Q{2iCY5-l>t;QT3jWJ zMMhzb`_1VL{6F~
u5em>y!?R8`tTIKge9;S!$rNl5#|kE$X-W<^(mlxr=@@s`*Jpy&5G)`rIt_I; zL!1LtcEtqyN?U;kj3`adG>=H~e>GNWdgi)Z;Mb-t(dPF9%}`ktUwZ+`Q_kYV-S()z zt!Oe<`#$2*legZx6IFGC8|Z`G4X0 Jj$!mSpeiE!s(!rn9BChj)@hk~4dh zuud%xC4 I}5(BZ*J6&BUD*fntrR1 zjQ5bBiDm!_+iFA8+4V%ZB%C4}R{>(sr*yjDIiSh%FH%wT*r!i!dyCVEj-8H`i{&Lb ze>XYT+Qbl#yclO*Us8Y)?<3xc+lS3#;mQOR6g8`%ep+G@|3aw_vS~GbG3mFa l3$H%uWCoXTCrt=|>gjatV@~e3T^%-5 z^2Xzt4tGCii&2RMf9~O1n)NHl@Yo?m?Jf9h{RhRvz^>CLHzk=GJjrRd$ @F6b^nKDW8l-FD_W?p1x1c9xzT7(d~!v8F8rBIDusx!|C<^#(a=79)4#$2fMQR zl8;3T4CrUeV-0=4oe#~I?JP;h^Q!!nzL|95_jNpsG%+7sQd@4OU`L! Z%oQbI%w@e=)@T@x`Yyhg^l+CgW3%si9y%5q*G3S z1o)`TDl5Id5~yo0(qEduS6*B$u04}hnsf6t#M6&{cy~z$e@zk=s+|{{FR`R;)kL_x z3ctHf2wtN2HhNBGIa7tKK5t>+xk5M>1sKj+w6n<~1LN pP3VeL 6X1LaiF`Yskt3qopSHkOg6qTM>^#ny- z7s}5eT{is+`Op{Wn|EsB=&3lwW18KW#A_fq^LqW2ti-i L|FxXp8Ef)fHoa@x7THjR0InO7L@@(v)?40iFdPgEu~XPNa7SV9}YY1#fR zy=6Rpd-fLL&OBTrItAP3sUFso;4bOGYeqDjyNkm{rVQ4&{P%LJe{H&1#P!czaHuT1SBv5$(Z!`;Z%BF8#JY423Da^ChtTTQXFLNR5# z@c!;YBagzCuT3-5L-XL(o*OC^tz9|%n2yEWk6#SLD7vd+yVrRd{HFi#UBCi^wQUM4 zd^C%_=qwQUZ9l2jT@cmTbE4GGsR?&@|5|%@ugU0%b?C}b9m2ZW5y(3CvLT+6F&(Vt z;TSom-_n_`oL~tVZBV0Mt`$>p$)P^HK41xi^gr^_8KUWAHYt&eRNE&A(H{N>;QZy; zC$qCZFhKF8nO`%ze7d3N GjueEVS?3Y#G)mly7_TSIDx4P+{dq6QunE3VW% zPzmz$`XWsm*!eOrCVj5^7ir#jgg4;aQ{lkxJfg*C^z!TPKa^&bdTzGyWox&Ym>#_4 zn(%nX5GcNJ7-m6Sx{`nXz+*G~ff8lD)vy}E10+|QT8P9!mmW)%U3FHx$A@`+Tp^Jt zY|3qU0L>UJrv!`X&UuI_im-}zkYX@nqI7YWTc9#5H!UoPHynR1&F73iIosT(`k{^P zI(Me|Zfab7-hEFA8bRCXX+(MC9Vi%nn3HR;7t%6NFH+ufyLwYW!7_G8aMa8?Ry;PE z64_WOsZc1`39elMPr6ijq2T 8bs+5N^zP?SygH+rsMjOOxX5VKAbr(6Xo8; zHrtfz @82HV@Ji2=SGrrOVLe|ysNMflo@SHkr@HiFX6d-xb?ETp`UkI(nz^=@ zS3810{B6tBvtH}JyaRu_KIJ~!`{$|h{9==BV%ED(`20YZ*%uZ57X|0NZ9lKQ@6}%W zcc4)8VEJr!Gw)<3WZlz!xYoca)mvHQ$e|~t?qv#f-k7U}MX)JfT!=P pm7EfYCpIg&p7 zx#t6Q7+IY0j=A3>Le^{&d*N$!WVBejIz1Nl_kG#J%YpI}gY&BdtKaxg=BBV)RH_G8 z?ebLKAEueM^0M9RoSuwe9z~Zt?}$!MN=9(&*;P8{i*jmK?d!7K%q6r8q9BOwA?5YG zC-VOY2;5OZA4YXTMe}qu_3!&{4}JUd{+dtj56Pe1L8?7{H`cy~cYGJ@v+|q?56Bdi z_z}Uh#})eCM>=um>-O)Zo^R{t1|HtIYLpb=t6w)jzh+c|b4Lz8{XTLSn+vIfdC>~_ z2PhqQ!B0E3I>TBPKAwhYQNpqdgMYL)GBpVnjZFJhEK&ahT-|E_xkQO@??zth>AwIi zy$H8>@_DKa_Z&H(n)Lf$Dq^oL@2G0E!2bvm^4W6l6Y=CXclWoo5Hst%JQG$iFJsBl zvOQCHb`L^s-i{;vp%X-;K|4r7_iYBZID;cX^0wK18p|>y*F$j&qr?(A_kN-fmw-4e zl8;V<|3*1`{_Slee=qHkK9s|u-N&ZA4$BkihtFT^9;hD7tgm2GnaS8f|Az91{H rQ!6GygBQxl@cq{j=k11TrWc=v0)K53+2^}^O^CH-l(IrO&FF8GM^~Tn8|Rkp zg-y7-jte8 #%r>W}8yfSvYUjagf|l#R7Z3-_%t~PdOIr*%XSMpdunVLdWmh zKWrw9U7f#GfI9n|vsE_J5iDI8{xIjc)ZbTA=MmNA+Cex89+uoP*V<+R8LAJI5Kgfo z7(L0RGU;|^K-fG%2yuDVggNGDFgEv~u?Obtj;O%Wt4V0xwu~xC1zsr6{L^?jEy Z`hguPX;w6L|ew7wf+c(TEHo-b?Xq=NFvY+e*DX+;uGF5~tlC)VK~ zDDP|A7x(eS(ndnqJ8-XdPv3$<{b_@fW2q4ClmPVF63_3Egxz1g&n+&8qo?#Xjyr0N zzv$;R4kq07f%9t{@9~{o=GgPImEpK<&RWg+1_T6Mb4f4=?T`yT=|N$|EU(xYZ{1Mu z&+9DYux!v(dGYdv1KmA%&y8zwSx$Me5@lK}5ich tqhJh#B%j?F-Oo{9s`?)wfLm^Rj~r8 )$6(*Xm>_(@f{oOfWIbZ(lhISy+eNe4ee7pd0gmTXRs+vFsU%& zl8hd+a{YYXx%W1s^@HiE76UYCoE8XCvXlV@T-N_}g_pN6uuVGWAw)LQbBOwTvQx|q zF$XBEmAlja?YxeSHPW3%s8Wo5)6q*BrycVsP{raU^~01TK+RqZ5>F42feHhv?SN2r z@Ppa=*P1ui#9dS$*Et~E$BM3?X|U~_Qh79*jHi~eT(zUPL}-~PT-{^d)x260I$2M% zY%W10F|c{zb7RWLrTPgbAM7=+^zzotyecj>6>Cgp$#NxTd+s?ul{gfL?xDn!*sk7s zZ2lzJdVDWzL+`U8?~xgLM(XXzM0SYsezy+Z;6-^G+f3NkfaEJraYxEsQA*8$zDu`@ zKEK)jsWRPtcZ2^TC-Pu(|L1=I^j3)ecGhV>x;hf4 Rn8mY9t)AqeBS938X9nHn&_;sZC-fb4NWUOAkK=c481t<)KMzb(04Cu}+ zzR6P4gvJOPGpjR;gkM2R$3^bz31dEY- $)3%&UTlcu9Fc@oK^gpNEf zrJg&e? 3fuxv`Lt}^DMsu!XxHZ|BDFe@}=y)d%vE){q^kEU%B_stUI{h`Hz*I zB)xCrZ}zY8RMV)S(||Iw#*32efU!ELkjXO6NGyeYFdZ622ho#{vkkNpH6C-660~YC zd4g|yCEoz%hUlb}_?I$(GcDB;p%$88t!N^LCfkV ?-gR&s!Vyob-xVb* z4Iex6`&3Cjz0rK-!K-=V)5p(W8Tg1S)hbc0`)`5{`|^6 H7KCYqz)I z*!$fxj+3UqU2{~eQ}Z%?Qii^XK{Y5Dq~|Gq1U3?V0&Q$b8cpHI*mqC#l5IwP`Vb3& z+g&R+asZj5K>-0zM^xZW&Z7d5!ie#1Iitpp*2zQ1`XjHK+Pv$EF0Nc{aGA+pL*9xm zR+IgG7A`)19(xg&akT!xY&DFK`$OWq@7nVgj17m6N%YC5qM_GIH%N84g@M#f|Beg1 zn9T$Dj1k2apGCp2_Qo^n+UwDrn!1uKNyz{Xq4C9YKCRxybUT{2LuytD9~z+c^}0aa zSO^kX*}Z4(iufKEGImyAh6q~;fp6xJ>hjD2d%erO3VMP&13=Cr1iiulzaF+V4o2*~tJsB`g z>6;9>zs`T_$~A9QY~RhNDmE6Qe;8e+&L1ogdY``zd0t`jcxviG=SKc6^;?8r+lj`= z?yrc`E3tj=#*S)ly)*w=SnMME+jpamcI)iVqg!JEf0PJ2n|tu38Pbo+`*iQA{NgiC zLZe?!Xu1g(&z{_huwef}R0{kWZ$Nyjny;@aOtwI3Lc}ZTWKmY^5d7Q0u}VJ9O28Y1 zyk~s+Uo3w&jQnaF3=WBTF;h12z4>#y136W>9SJ`XO{%eDmX&ag6M`wdrqcU`WY^Pq zw_e7|mRXj`(hTVcsflUxUt-q*KxG9SW{0YYaLj)0c4nk07fU$ycaYz)PsNJ*fo8?e z=5dKPm3J((GkT6tD#?z?p=f9H`>kxW|1_g=lk$MmkO+@t`_!Z1yq)XO?-p@4I~%Of zUV&2jLG &@3a8XVHJ*LW)Qxt;>dcpjK}>WUnwZk zmTRE3>tXF+9OyDmW1PXhgj{oD_}67nZxAl0c<1xNna$mcOA+Yjl7Fjy&Oevxf~17{ zi%*_}bMyvrf;w4;bOMZ-TT7oNp}v{ZVAWc@o+jlOCNZdgYRG)^tWi1g6ihYX(SVng zE2J{!es~Ei%hK4b fhsa-|ZIW9I?`{Kbx1zIb!Hn>-?)> ES?_~~YGuPae3|7be yR~Z2ra! z2!`5n2?)ogM~*UG8*&fL`+IwK;bL&8O}-|#j8#tn8U 2Q?e%$`^LC{jchaa&K z51ZNsw!gN|VHCw5sPs?Cw?fg;8do`y7%zCT=xm&ynp{%@@|jENa>aqeRX1ae=!LCH zcRJbrR# TKsni__-W_g(5gpY z5Ds0>r49WhcHc#I4$LPR%r(s%HX*+Fj*;QBH5Td)X>Fd5f~3hG^M-7YDGF;|-Ldm9 zF?Y8O7VS>=#`>GTNaHzV@g-5-hV9 5F*^6dT(xfMhowEXM+#Na<&`1eqHGY}Li zs1^-Y7clj^xJ~%<{z~$N&z+AfXR*V*LKhD{Ma+{Y_O$rinR!dbfY)gSpooU&GJlhQ zzwN0DE?$0euywy~F~U8hj}Ug{Yf+KtirdtZ7lH-TqR!6BB^fwtWgmx3`B5G ~B9MPOX+qjS1G+l0}8IX6$$>CA0DCX(;gN;=P6K zc>F8l>21@-d*VDWV;yJIc)x51G^PS*L8mh+Qj(0OxGdq6cd>+GniDE_`6J?L$wc~k zv1H|!oMPhsR;OOMjZ{n(d3TMcrgr|3q-Z2Ir4@Awr$}Ldk=KEFTJ!KYWm$?>Gj3R9 zT^r{+-bSA?5##L!uSC79v@%D|UA!1qo!UFHm+?QoWZ9~fDAGL;2BTNk(xnv;20GPG zc?Gh!Ieg#P^Lg<{takV1Q6YzSPWms!s&-k;ird2UMvXN2A4GU02F|aZJs4={Y6$+! zQ)n`>{V?bx=;i6f1PA-a_v6YccIm7Mx&lI?hQ=`r%yMq7V(eFsf(~q^UbW@ibeVmF ztkhVUQ;L!0CK!21e!rn&7*~SQ=O%E2_`5tnjoJ3Cxl=7*J+8$uq^o2gP4ywPK6|y| z-{uZYq_@<*JoK246&D^jo^p(?x+(f)ZE()&a(n4ee3ExO=Ev(cWwAcVdyc!5wQ29? z4@$nYaoj@ndcI8Da#S%3zFbl0w{s$0QWq1}V>c1M|E5Jk&(Ra<-Dz%HABL_`3Yk}* z8K^{#H VN+SA|8gmsJoHc3QPJ zz^Ljsn!-q70XpII^wAsazk(+G`jVKiA#ZNFDo;||V;Mg>G5(l4Undzgm9x%!GI73$ z)A&%$KQELeJ?5Lt!%b?fuus6CO6=@gp9nvZoDjXFt{b!XmM%MU2t`mUyMf6#exqQP zH=S+SqP^&Jo1mC%@_D4xd+$lm@P!e>!W62+2 wPj)6v=I{V*kb)S3Xk<4(O^~M z(Rd|d-da)l-p4fBwU)pG5pxw?GtDvo0+$e>|G*atO}6DIaIPfi#wB#W&t%jE#@1Rg zZoXksqZd&+wN$VWMht`PfJu5Hx{kDT59 a5d#u+*j@6tLUpl#REC0O5o9oPY z+If*pRAfkM!c0EW;0_(3=%s^EvT;T *q2S%GoDyqlRQ577u zrPL|}XhFiUvg`;-u|2oVeU|OPDyKlpcRzB%b4eL>r0w_%*punWuGtqF?*kf0qGZmm zGbXJ`U$nSeAkYTX`2H&=jYR(sJ+Sz-dUx-kHvjG-mx}4$=Uo9FzH3@$*2Fi}&iHD~ zy_xxz-KMppgY7Q+mp&F-jenYV=DSCojsHoIF~93zu2j6lR24rN_nR~skIcJHpu^Y8 zunuuh8GuiPYD)s^ d&^*R&i1+EL=Om41YBrFC|l^o%%>Q~6$oE7%bm zx8$*qWYz5c6TbE1-!)#4r)QaS`z<$3Y@MTCA|{;#`{(3RP8#s9LRi$ua`nUYZGxFR zwQS5l8Iu21Nfa9m+LHak;Kn^lCUm%3#}rk`84t?N !~$En-z(I=uNf7pX5(!H#3g{l28V<=o0 `F1 z0Du|H17N3Nmbl6Kn#Vg%k*h+NL6FlmxVxz1+F*!x{=DN- FROnTQf1ugkK{>$guID3Krey`L|Z<4zchM+4pK6nltO&lpY1t0l+_un#F>?b zjzR%7-zM6sws>~&xpxu_>@kMRj&7}a^W{OZ)Ro&?*5iI(4E7rbtMaLYN6#PTj@54G zIlhp5 #d*82JFBLx*ma%XMs?=l%#IJwmpp?PsKydPW{-sB3DUsw zEL`U>?@ym3b8ZK&70Q}6c$g%^Z7aYjX=3DE3s2XBSh(Zt2jQKs^Mu65fI#CISmC#? zv(E+dPT%$AeLoJpfjqBz-}NuPRg4cYTACz)g+Z|zdJMEc>(?#=-DbjiG_S$pov|$m zNC91Q;^t}h_jByEk%p4i&zXzEHH|;=tF6!9E6($jCW$(^)kxG=lA_!^JUAEW#j!Yd z6a!3Tu(sZca@#o^DC=gd;Cjg&Rg3!I5%PA72?vx4@wDVtgS}V`aH7n-S_*R|4ew<4 zWaiAy!JVc%PL``wrzE*+-kGUBs`O3v9~e8khcqo gY7kmuuPR9!~FF^!m657By{MsjpWhVG`)Yd3rgAmh|~Ni086bW2PL1ooXi> zDa*>m_*vc2beRYg05YDgU~ }k+S8tT|69jjraXQ z=0t|4xow;vC0yT=G=Pj`)|bL^kWQ1PkRneS+lM+1YvuA&vwEVl9ck{f)(bE*uIN(G zCZ5?R6B`eu+z29>2epzZC+|`NgA9aBcx)70jBV#3p4(nG9$hl3dnKU|_@y;v?e#9T zQ$)r%x<_8DTwT33-;9@Nao2YV;W!W3jR=pS?}RR{a>@l9TYZ9ILVX@?_QoBapVJ-O zHfiLbvd1vcgSiDjv9Ir#{NvzW1`>ESG2|uE+{8gE-pMWx7%3A=6c6MSh)g$^1+ZIi z+Ycf1gj;phnbY+I)ym_NhAi2&=mE-RsB&Rin!4e?6W=CJ&c9dpFk^>PDa0;`H|4yG zeuihu97d=Hb65qzohQ_nYB&)XOwh!sS>Y}9QGj^g%JiDooaG5JCBrW&Yu3dHs9cHY zqO0a3CL)b6h?$}LCCZ6!tHaC9WM}`g?FIR)%481Qk1e(~Atm_Bma5{GSQI|F22C)* zQ{6I8%19xPq ?~E H%dudx;>X( (wVS>J`2 4H`K8`vh =_~f@w z?|JF=X4r!{n}X-M7wx1VW+XiQ%JjR3m2V88xspo!($sfKVLTVO{I3^}d3ji+`iv zg^lD?ew#Z9A=O~irdn5hJkgRPUJwVRy?|?+rHTRt8?ri)iDvtxmb-5}q?wGFES(i) zOkx?VlG&wV? |JVH1ABKCe{Oo1G0FQL%C|U4FU5C+bUth5 zk5W=$FUpa9JGsL5Udn%_={lKQo>LQ|bdI=XcqBhOkm0pw?}AE!H>vDAvJccQczCdA zw;RN@-P VycsI5A!>zKlOd 9z+C$L{v*y10}+g*Tq{sWXWHVT7uKjIP$f$4mI?)0;3@A`jI zG5VCV_1*_JGEzG}VVY>V7xu%ski*U289y1=x-2(4UsmJZ0wG?Ot&tXCzc^J_L%BU= zi6kyFVwXiG^eS;xusMQQ6kXt=*xP=Hefu~_wjapwOw`^*@#@~$(V4@`p l0^ EDNMzE7Omu#Nt>easX=^1gF4bh@w~9RBZ!dFBD~rNx@QRR%NY3I7B05@9I^ z|M~%ubhS}h(5*q$SLgr4X^zU<6-LDN4R0prlY$9_`L>)||5c9T&$6Cw#Kq-if}f6# zKienxi7e5XE^vtn8)@B~xj-r#Vuk?VcIFctabU71r=&)XsLXAMGA9}-p{;Q8OWf+| zHITfb7cN*?jQwKUjU<^U9e?i*$JXJajI=_^pvS{on$k)Mb@s7&(amc@R?W@F0PID2 zjuWMRqFTL%o#<})LdKv;wrt4`X3&UrFl<>kd+-4B{g+?j-ud8=fF+T=pMe1^EW^&O z2ky@f`?|4VlS}w>>HEqvOcC$e>Ep+nzX}vy44$@QZWS0%_qhE-d5a6vx-kRKFOg4+ zvre*Q6oSaAPA3IDaqp%16?T-aPg@^n_oS^T++V6$@GP4bq_<4hV55OD<_){oF0gZJ z3F= EJI)yTCOMZ0lQAb7E>p=Q zJs84KI7 +W$KuCC~EZ`fk4(w|?KrF9HM8z+zUrdxQ$CR=K|vxjT_R$S&(q(^#34$g;otVKx^ z@?XCHSlfI2`egH1nG>rA9Rq?HSjBBU{F?@U&!4~yzRgIU^>O>8_I^Rb>7Er@KSm>e zi5*$H%*^{_9Bv-G6nl81bmYL>Z0e$~?Q!ZKm$`TGRmSv5m4+qh>>6t7&|8Hk)~+Aj zsBNkRGbXz-0V8BP^rhXj%HK@Ia7$_9Z;?%;J97FCLWT$4{ {{{o#&Vh=?N1BSjO0Z0RnGeC0EDQpokJ9D3DGSXAYUR%9xHhF?+(RfiL=kW zli%J1P+;qs@0wRkCrYcco!Yt9p35#%om(qHz1(X_(Btbs|JkJ&_;jw3MnT(k#$$w4 z_qW23+f@G9MJO4CL!Um(@zF|7B@wGP09aF;XmX vz&p5c_Kdz?LluZF aCWK5a2j^2{+dY e0A_^4aV%H) z?H9A1_10Z$__m?VdlcrE{limfX;k&CzlThJCKnAuZfXn-n1NGcUdQZV@!^DYty)b| z#VC?Ryjy9}8_YxpVtpekZU_A*bHTRj09)b6jI0caJipFUKeOq-PpHSY%q7G2FsH=D z8cl-|iY-Z- 8*?Co=ea}FdQ2NwcgZV;C(mV>t1nbCASR8_f{40l_%qD## z2ote1;0!$phkMIq%_du>E&iNykTSNd7v!&<4snVat#Ioa0~*0qz|!sM6~BV1Ybci- zQg-2C!7nM-aTDzR-XwA&Oz~9lNvK$LGP}!$x_0*J)fC>GtIYcit;EY-IIH18W=fW; zCU>v2j29Dj$sA7@(`rmsZKM9>JiB5uePAK7HTo9FDhn6`GDByc&5Gq1-GK*H2_HHv ziqEP+ DXD#kVu)m!LYTTj zxK!gSj?PBN6o+2xouxvHCs)H6G7k?8_OV$Mq^2c;-cODw<^JK3#{``xC7?&$*_6|6 zvC&4(s`0kINH#(L^|Sh$Y);v%j0PSoY%$>47xRAZP4{nGna`bn#UPG}sS4XSv#=!k z1P{s!Jy+A4y+$<)1jy`KQRc;j6n~IUrpeNlm8WOEx3~T>`XG(~*Pg)8k{k4$@p=Yx z9Qbmh*Xo^q2X}bf6wRz)=+^@h)rC@+(3$sl!sI^l7Z*3{?x-6l(gMLwvhL7K4O##f zJW+&8P>*IzKsXVcq!k;P3Dy**VE{o`bv%VZYI*?MsA!h&s}T=L?pboU_*eNJI8sf^ z_O!Pg62HXgrHF4-4f3zKS*$@VgavTV5s(ZL9I+KR3H#RGjBRlh-?ufDan~*xyK5Rw zZVu8U5ycya#TxKv|WjAs{%$!d29Z`>lJf6|e*wv*(jOquP=2D0lNfzO2Tn0~zo@ zxqYoKv3kzW6 8XeLpe^HIdW zLn;i_i2btTX#}yO>(Ho;uy}e^@W=h5d-HZTIOJ7n{QW4}9vi!Edow4G&5m7G{@6TN z#H$Ktf)dz(!m;%1hQqnqr@~oaQQ>5P%__^$#(!%=IEw4tys$7dQwt P~@KGu7suh aq&$hCL}n0uSzj{&j#*{(`3I;NTOK4s1v@accU7PjJ>9&O4grW zGYuR %rL_9wEo@>V4jhRFWE();|~uo z&1=g2i!Qi3>*meT6jTQXZ&Fd4FapU9#+#G`1W1WTi4tGQ%yJqvh&4nf7;B6RC|af* zp~e@i{2D6ThyvFgSUEY0{sVaH6oosen0j)c9o7+h9u0EW`F`$8Q--OMdl>qCH>!?B z2x&3bEjeF_WE vMvL&o*Br{OzA;+JJkFHtnD)~aoa;R4hzoL|b!3Wo zR=)^KXhR@UYOD&c`)!}~Chzy~t6uYdROGKwDih7h_V1_2)S@?zWz{n#a_Q bq4R6&lS^AqFYbL(+S{>Q^RKb>v@y?7ODlxw zDR`}Xov~=T-c&h6^7Be?weYgfq0|15W&j~M*;|&6tL-0&H7_G(={Z{_%}vCxs|nRC zuJ-APA}(6;c >&*o}5nV O+f>9jJCk zrgm~$@RS{zwOh|vp-Wo7=(D+#^J4*i@XZyaVZVWbtf--#v|4HspOuj2qI1T9VI|mc z`*#UUal-9zCL@_n<1tS>^Fqe^OpILScVqOnZ95IEfWW`akr|X}E@%>&fdX1pP5gau zF_5DifwXzL>9=Ctpn#(WSGh~(g&w=ks0%5>L>fCnaOnnoi{ >OCYTr*Kn(q z5iytUB#lEdS{89VNxPax&lFW5qs9IKUW%IbHfGmO)*a55iikaYl|c2Ylh5Oq _>JpZ;w|R_O TPjv$D`a2~c?wh~B6QCaL#PL71Z zuJ9Td4G}|N0|!V{1Js2wQvCK&W40w%P2uZ5#`<6H?c{SyYU~f=gLTTIo)1pV_!V1D zo;6PJQ7TOfwee4_TBdjjibW_mKk=w?VH0`$xMgGc_lkQUT66^{poK(<{t&;it12M< z`EXNJW7@1g{-JgRcy3WTy~lPofBK~tCZk&nI;7pRSat>wI}5w|+dm+OSeHC}ot__@ zp0!SYcv7lI#eor_DgAA6QjK!I<%3Zsyx_;U^k+bcyISvdW6m;D)>?Y)@9W?XJGW@J z+#_q3KMwy4`JwgW%hiBSd6X|h6KLI`9uA0mTe<8|Ki7;$p^{b@rT1H75dhWJZ2 `Jg~0F-vxTdE6 $J zpu8y7n=shQ_eb+>yKFP$Jpv{yg2FQe^>y7{?^EUwlQXgDJ|T4 -o{ zJy>kZS}vALGv*(OFj7#Bk7+IG9cz+&@wG%@+9=Msiq_$rj#_zrd9DPZQYk_I=&}`4 zYWw`tta?H4f^Wk)V&C{kQ^-PP;n4S;TQvuB`}SIm3XBi*U*CI74L2FR_+{~5_B*}E z`MiS2rbsXpizsGd?b%2J0s+Y*q2MrCWffU`AVx0aD86Y`PcQIFbW30`R7lFY0)Z5v z=&D~bM(_~G6iZVAYryS#PlWfS$DFcPle#s pzmG4;`2JchK$fFG%8Z z;oZ`YEbh7nFv1EZIzc6|imGDPvKU8vZY@prp0E+U@L{kKU%9kX9CnuM|E@?!SS48M zQ!I>APcy*hQR<{Gi?rT#y_cpfU5#=o-dop H3Tu$%5uOL{zvN9cF5|<%7@9- z)AKnyLN^*oKeEXn(dA-84I?OONTJpf4hCTnpo1_XGLb`6$9Kj-2xs;_)hAu5n_YXp z?iP^I(O>zxe~gLsN}}SF{1ecmeu2hqP>9gXkoS~Rtf7OqHD4#!RkEP4zTh&@dCYuY zt-Z)rt}00MKSF+(`#uSOS?bq|`=6H1nQ2aac$p}DMtS^|MXTId2h(Oj`b=ih$gxxW z?w1lT;pb&2ItHZ(12fz}#TUsodoA7v_9jDw9o?paeoax$>L}|tzQNwQ0Tq-RVuHf~ zsTE2LOki;+WH^BUMS)Tv1RzXOkd(oNy!$(Q7csMg>WqZOX`ukESs#z^S8fe%-mzn4i@#&Afq?F8^pIig^aOxR%%3clgI=t))#Le@&3luZ@_u# z0PAkwy!kiKAcw*_QV@EvT+(a+0ac>+Qn5CxB?)-C*=mB>i$34Cili~&_JE7KB|$O# zL{BL^ni-vT_Jh{fSByJ$r&lDJ{IgXT{K~gNOf>E^8CxEBP1K7YOj(Yf^-OcLcfAtK zKi+I9yfN$Q8yJ4qcB*7r@A6w{`Gb6RY+7px9TXLDXx` 4-N6IBeL;{VorMej4LiW^4U BHtOpXM5{rRxF!5@N z&i+MLjMYd{skiGN7=DVsOBMV~zf*ljFF`v|V^2h-jd$hgMsv-xi3fKq##$PmH|Z8s zwzb+;cut?$T%O?@rVf9cJ+CD9NGs8{)!$-O(bE3h(j0%)(uDuSYacxZVlZ5NPgFNW zgi6L5tH^PIw*a8(@X^nx|5u?LFTvH(d>%5@<4;6Ma^ki5ahKgSaffSPmi6tOi*d(~ zZ_rLXZF{>Fkic~CoiL?i@lb)wBbyX<+Cx5+O2H*Fqm(&36cttbX#+~Ya!8RdIrhup z=QnOIx|jY3I)3TbxWn|hNr&pFT_EKZ8)l`89IaOLq>9#xost{-wwz~wg$xLTj0KS} zI?m;{!+W(Z#m{VY3c6p_{tj^Ylu%yJ^K*qewTBbC@gI!FFYSl4ho+5JMlP2Oy?H8M z Tzjgnk4 zL8xo^PAW?dL?@XFL2*zdtG@^UsBm;mEDh<4r4p1t=~#BBqjH=brg|eati&vhfaDs+ zkhB8Ll{{x?c0fqsKum#<0_9TRFa#kI7J2c~wH2+U^2KYz^Oc*Y^cL-YetFFJ^INT; zvbB2DNYa)Vt3Y?E+-(M#r2B7_3`r>X+}8%%BuLgf0Rsv%#@^o6GZH*pKt02?QgVt# z2TgZg?`moJAagzSY0!g%zn<5nHR(id7#7F4TycxJnJi20Xu0I r}U1Jl@x!dEJ;a3>hWp`I2!a{;)izeT0=1lI*8_W5sz31W9E846AuF(`P z1ja$RxKtvA1R-FE1TK=CTF#7uL$K0HBFfSVqMbx83TX ^E7$vEz zdk@Rxpim-M4vGRZg~FgvQm2(#o@3UhN$-QXXTl?_CIHo_>*uwaCpSL~FV3zNwBB(i zyG%7}S!*$%+F+$IzDuo={j!~^=e=PE0;o3i#h?L0Ikol^wS>w@b*P7s(29z!xvgK) zf=70FXuS52yE+XXkd}v4ezX|f9gvpnO3QFHP n z46dRE)XV8MGnOM>F8 >E5TrN^v2n$FfC?r#CVgCeu<9R8S4DtfAxKwc% z0gU8QKx9Pp4SllQ8emZ3Uq9JgHe+;tZ{Cet>;Hkebi)6T4u%&ePQ}{1h}L$@>K?Fb z!bZc(rLrk#Nx?ZYfM9}p8iS+7Nu6A_WcmJhkF$2W5q2-8AFC<1r&c-1Pl_*Tm1$?? zPkYCu953-4`zg~<(A;`r i|EfDeKMmG^+OEe&}{swoa8M|1Fi z0S#3Jfva5W4Mikk;5vW%36a2BfO%PxsUifc(HSR{Ojk342Nx;ugsJL`e69e;BBJ1k zEqr1zvYMW0#bAd#Z|@Tj#5%X`y;*Kf3EtzNh7rip08dTKiO_TV^ayZLx6>bM8) z*#kyOlAY3ii($V?zOeH^TH`*24sMNIs)+UVG}_0|@}kAreJ5We6l`Y9RsCeB7DY~y zJC!PQu9!}C+SvA%<}UjuHDr!!)oAAE#EIEY8n#O-G*?Kk5_g_ ZI338?}vttHPvT| znq`TqM&n-$;lcUzi`=w1KRX?#gy_*rHj@2HFa=hy*@5NqB>STe+V+qVql~;9>ZiNU z%RlfoT&~gn^g2&zzxA(@J)LI1?n=FB6cqXclQ)?&+CJ5VTg&K6hvGkc&JO+bYr93F z00~7>2pFs(M`_ncg!d2_XA|EIs5J>(JRl{&0#rMw9|D5`e`yc}Ks4e(m5@jbXp921 z%)l5ug)G9F79@#D@X)}frzk;8MYtmJIFPyvlGFv5yCAX1`Y9JM@uuI7`H!17lSQWw zUO#xs(b$MXcTl63T)}0oQZyd2$>ZEc2Xt0!>j51;q${OIzRqZ`XoAk=qTG9>9oqRJ znYT^kN1ug^*Q76W dSUj?mih~IeQ&+1H1fVBm#Zn1SBolZIiWD$V=uybP61g0zoaJGyCBw(* z=dO=_`0O%QJhR3dUY>J^H^7*E5tP4#eTE6%mM)W4r9tI`T( g`uT-@zLe`PZrzlG?RkOj!kss4;-IJ zGoL Os|VW&NbiI|OwRwG8Az$@-JU2BTM7^`fbxq1)T8V~zzxI{4ikbf z-waYQ$bK77q^1&K42opK;pkL6h{rT`x?&uIN3t+v0$3iXH#zD*_jkcQcOs!w 07Fe#s#QUQt3V1PKiiK1*~E}zC94^$*sWm zgU+H&gngDr{cavOu|9cDkMs5Dso4A@l_lj>l}pt|u5D?FepT6rVh)@M@PC!=2q}G* zeEzI=LgtuxT+aH329vX+5wc}!B@3r&tVUm7xc}xtuGLII0?#!bct#fY|A5W^g9-(= z_hdd9Kz~tC;It7*aq@96rp7XsCvFOm2gmTncyrN7m1uKs94LlDfuUL0$dUXE8e)Id z6QI{W^_7F88-swI4mSGEp->?}^{&+hMk 23p8a#tYdoFgSjereObA?P4KNFy$r>8C_r+;JwMzNtzn4GN z+P7|m{&^g+R`q=$>9w9r$A#aApSc%BxCMiUqv^s-!$=g0q|q;hg>ksTrof(Ln}WP> zNLIHg3|3ACv(%|%PWVrmAbs_Z=Wd;KXN#Tt_Te2hVs`J)m4zKO{pepWhI(XsFL? `~k= z?xvIL`?)Mgd*R)iCK$I-rrfT$(JfOX!A>W0(sj |SWMq|fTVLkBmtGwRCDM7X3*o~zmVy?E%C*7L3Z zK)oFahu)>l`K!v(292#X=~TFA%9}@UtTY@MD-JT07^B9BLaB*3Y$}$?FE0ggJry)9 zL}cDesFrIC9G2a@`dN*&w(&IOML*kFwBxE2gOmg=ikC*J<6|+=0si!08)q{eMxto7 zFyi|q6)O+1S0_KX`e!P&@*Xq|s&z~X`Ih&!AM$s;sUH0B{e E>1U*_|__0(SY>_`r-4r~0sTfu>V zkiIMYRT!3uBxy3a%v2H%1y1F_FtyPK6%iyRlY_Sb2zpIxhE6-IY;FIte&pH5Sus{- z*+)WAW8=7me5i9;A+^Yq-gU1a5eX8|np%*t0~dJ<8e(QXSxTobzv{U8)cD50bWNJd z%Ci8|*H2vv+g{$O(rJu;;j&QUR{TjXYw)a7W}c0rou#{hpqYZmd2_UGX=s_TS~L3- zFg1dZ;TQ-ED4RGmkOqL*;;>+~`*q4J&3Q9>1K@p#PKM!FG1ka<3n2vpQ_@8JXM~la zd&c(Y`njRajqj3kqu+*#Xb0l|buIiW$=S}E+PvT)*g-Ep(DB9EvpR+F$zUwg+^;qa zM-WHg`x}3FQ9w*B97mW^3Q$W_6PLbxEK}37GqzI%$+qI|Tth@~)E6#zcCSdY zC(cm0X?JS%XV26YVWxb4ZLM%v9fL|h3a?;hnFVoQs-9fPYp=?coGg`EnKL_A n%QnypMmi4|A^ zYENTD2$v^s##4yAcU%NSg+o(UK%U%s5{W{H1x|z}OHNLmZc?5E6_rF6>+Co^|G52f zh0#zG@3-am;8WFxaZNg7{n5UKH+d7zK99iME)Y<;#*;Oc @{DfnXhEq>rg8sq5!E= z^c^eg$G0ifQ2nC< b@7p<^=O3K1 z^Pvac->`IQ2{*4-k@OoLPHU<`-(>wc_gUX6LF O#CkySz(WF_bXBpm2iStQDY3~I0QZL>$OIb#j>{Dv ztnG$~<1t16O^v~Na{G-G4X|KTB9})>je-dgU}?LH;$8xYRA}w-{+Z1)H(&G)Y0tiE z_J87%{`d0p=|WApskC~z-he_Q$ai~}%=49f#l!@NVx3dcvZD-t`ep95_WgzT#xh?t z;wR{dcBftU-@UixUsv1MVEjhA@{PUEWNCr@XLH-yv<&NX#h^tg-N#{n^k47XI;p4; z`V)yYWN}d D%s#RFdep;uy{;5`aWCKvHl5NTZld;3Wd!85|D9#bbb{M2bLwkr*(GN20=o zAmR|%|A97=DFKIyWk(66^6Xh%lp>%r#}T;ERNzHGO_Ac(ofIq?3ea6BDh3Wq1?n{e zEPy)fvr4@&yL?#TY2}*5Q%jZ1g~krYXN~cKESLl1EJPB`0OK4o^3z3=lnfC0UG*8I z(GtC9pU*8`*=(1Q;KN@W?8urS#jln$sY!*%-K*(|eUyUcdkzKUKRVKTto@n8MbU&n z$)vCkQxVDU{{x-d*lz1&%nq{$y9J68I99wg3CW|9!3d79Zxk3Xn!?cl%orRAVv9)t zC 1Fo@kA~MiH-t9BV+wAnpY>NlY)>{x+5qm)4wKjQ3j49u(?!2 zn6f-8+7xh _qD+@u4 zK9{>HQP$FX>r4SxnTsi?3G3Fl%<5eguI3BtUSszxADx($2_2Ffc=q+f%$fVAh2*aL zY6KN2Ua3=^%xU!zD=@w{7tWxR+{McviY&tQYi~?0xy`3Jo;-5qeuUfkbHb-n7el}V zcyD85I+U9N^n)j^Vo}c6NThgLciRro2oXiOrZ^E-LvIdG1cu^>85Mis*hs30@iE`R zaaJUYRRQB7N{e}s`|!{r@Uft3ME{dmW +eeog=S&&`{oZ{GgC{{0Te8-;;U zVa22_2%#K?03ZxBOWjz$Ck3$6f>E(vLS(=V3yLC{!kBO*k57W(P>FOYC=j89jDX*z z@_~GFK*{5y6p>3Lu}Fq6Zepzm4hqH#d%@y~P+zQ<1ld|6rOgBwiymM2P?qfK?(nDV zMflqLe_?-TJC6p5vaf`dlq**|k65box>-}xz$D^DjaL ?5b@xdGRzm%5?C$%i| zmAKxXNh+*3BbvM%%cLrm@`Q%12#jCFQUoH^%fb@tze38A=SJLy8?s)5+Ja8vZ6XZi z$*zqb&)j|Ie0(@7Hqj#W3hJ3b&{2J7m}tvt(5W5m>&YeC4a>lWcOuS<_{Ro#W2i7P zSRBSdijXK(hG(BsYq6vh2oK6a0+l!q8D|U^ry|&yUKL ?N8K;E-BOnN z#>(BbZdJT~QP-+RVNUP5QO@10iYvLHB?C7!J}g&WO14rh4R~XOdhvAfj6uU0Y*u~N z`nR3C?;c FeJ8 jjsrKZem&)=?@Eko_8*>XziQ^HoL$wK_SS%$pDthRd_YGnwJtCT z27*^q4&DP_og5+jH1UsG_H1%q zRUz#SE5`SfA7km5BjcWVwO3Q1sEGnzTtbPY+coDQK2= JQ^E&z~5#qtoK7zmKAVBGjl6e$gWJfHxU073BL=%!$7>KKJ& z;x#UZ|J-EGwhtU8niSK(Ufv4Us;oV=(PxpdCbl{>D1aVyK@4FmIVz2Wq#ELocwpHC z0vGU ALv!OQz-MJ=Nv4((_Acy8|luniE<`Kc$?n%`VasMi1Urr?_Rxt-FY6 zzH6w+kh$W!e$%~fHsiH$+Vz_{AQmxpDE0*ogyjN{A~B_52%re4S`i9~M1ZmWUmRi) z>_k)|5UQzE0vwd&u1#F{;@MYsM|U|iBmE3-Z3q8zr;N4aSecf6J4QsofoDg>rGwI< zbWeQDX9CcKECN^{K!_PKMcBe-oC+Y$AqPML7*kYpx1z+KZ JkTV-XLgO{&$Fs*14DM?EZakt|ka4HoWh>LQ z+s>UVm(@TE=*~i%t(04wYg3g07p@si1-S71_`6*mIo8;H{`c}zp2P1OCCHGsUR+rM z299RIc*){lp^p###cCVj`w_raAf>=T2zEa2o-$DE%a6l>Ics40S3m~!QfJ2vZ>SAM z>|0zrU*GXiSlVbWdHmO*b5rNsN$Yy&CKv&-hDbIL(*Otxyi)61OQaiHQ$RxiY3T<7 zwAgHzMlBdhq) >C;7k z#tB3wB!KOsnT9};qDl$Fg*D?T2vZPNvo19eWY2~RN$#1h1q+dPpUAnLd}sSV(7M&L zACn6-;gx5-EcR%4+sK=Sp@qLSrk&qbBs)DxgL3DQWKkZV_a&-SMR{NJ5hO|^NpJ!5 zgaJF_phYQ=r+zkoVyME3+9$91xc)P^(S9a5dgE#Sowy$t_BZI~&6=lFHB3mpvk!2# z_HL$qALjXWzbGwJVuZjwZ8K=bjuM&>b)|F#r_TZbeeW$Jv5y o{<3x@Bhj?T+nX`Hg>70lhU3o%aL$j4Cu; (>I`zwDY^?l7Od!CUN- zz2nvt)9P)mT68 54g+*O*?3I#P%csor18%*g6~<#*|m*$En^Pm(`X=>*KOR^7a1 z^x&P#8@@-W>$^uo^pTBG#n|7a24f3z)!BSnYez_X*Mizf?Muro z>tUO$4%O+c!OdHx*E{t4PM<4yGU{eN6d_w8*igM&gM<=9gCE=vZ4LfSe{V5Ov{SaV zyHrXqh=xPKEMUm0zzznG1i j`Th3FiAIR4{;l)+ zWlCS;qUSzUZ 1)^!V7bZz+?5<#21ckd>yOG9)_8;f5VNosaG*RFKq@VFH;s8 z1%JPF>E$hd-`aY8@{e!@5*Ek+!G#ZJKc?Oc&3gYYfBWUug~$8wYoD3m1jwXRE$&dq z&G%H8LoX2tk~EQjpxtE%W+9@D*-&60F%cq7kryTUlE|W`C0!KSgdG!h#Zm-VWRF*8 z2zrV~QBpxg dk%lMEC?V-4Q<6C9w3${M+t|y{Au$XxAo4=ruyRa75Pxl zq@dCwO<9JD#j|rkM_guIu)TLl{Uu)LKoCM0kAS2@!R+p)tEV-zYxK)RLkON7bE?;s zLJ|d}fTZ0t*&v;-l~wHCR7YpOmb+rJpZIxk71~-_vw>@Sv;>Q-0jH)-^IB3uN57tp zoZmVuNtI#?^PuOi{NWpO9RuxI@vJI}L a3P(u+`yx7)W7Os%h_CsJ~2bETaGsM6}pj}%3f%Fc$f4+HneDZMR(Wu{H z bpy5AMf0lfwExGFeH7>Cs?bbLFznO zd{D=~&^%ai;rX;t AvMz#GUM)*T65ZhEwItR(dg zTxK^Z+@ny?5}K0`(|#sBFr%lbMi5kBA+4KgB(?s|d7o0>@`U-r4^ Q1S+<44k{Xe6xZi*j&ERq$z_Vr)FpZ)V1Y>Np) zDZc0PQlRbVG=&iW5dn(QFRYb&?9=Hzj%tkfNl!^xnv){KA%C}!atyj2GSQSRnJq_5 zT*9POhDy?lX|{6dnRk5^)q^xY3%-5nzOmC<)2FfC@H}%`l5xr531u;WSXx|IbZx=k zT;p@vXh2_y5F=5gMm_X?emh_1xOuxjS7DYio>08!N=5!5{$SFFZ$sT*|8~eDT02oT z5JU`^EqO$RBLZd;i0aHEGMz-sFF $u&W8V1B z2lqfZ_1p_1JB}wE=b_hxK*bOwsgu+%{Kx%uw(j<$>A%&fYq>3xw$vh|CtCB1^BruI z1Sb{_GUIk4UU=>61(5%kb7cymA0~RuGRn>U1^z!6hiD&pO7*93p3vqxX^m8`+g=y@ zOv{T6z`L3=jr^ld8#daW*`l4e8sz8YOfLw@3epYrU<7*Dx~xyq buCZdon3o};y~FHvM?8F zM8M)9MuZd*Z;q`Hgj1nZ$7PcM_P+w1oN+zqZ~nOd)A%3mu8)H@raZPE@LlGkul_4a zxRA1AQWJjT%xGQaP5qS!f&PiD(VBsqCa-?~I=pXoqjzf4WO_IyKFga6cn=T>wgb*0 z%C|xGTo%<>RGmtn2CT0&p`oT?Le^|Uwy>N@@}|j!grTWK$&eJYG~Y^PZ`;qN%1Y^I zNoDqWZ6|i(p^mYw%@avW94HDM;8pEYIQlcE}UR+Bzz6${XxVnD(4>5Tlj{6012xaXL}Fi(V@NE8$>~ zh#@hkuLuid!!0n5d)c7-{oCbMzKy3W!y&r Pl2CzOC-{Au*8u2~p&RI#?@q4@nRP94;s>=6d z3N(x6RMd)ef?n}LHoxQ^IP#$SW|iTfXIb0Ut P#!D#tjKmkSob#g?Bn#Oc@qc@Ce zZAq; FRJXkI1C0U2Cz^0e&C8aC>upWvsl1IUKeYzY!ZNtftuQcL)USic61GXz6@Bh z%iTPmr=1m{V)x9X_z<+_F$=07t$=08F?&d`T?r!IL>L$^qAbIeR3sNia-p$|td~{? z5?
GExn=GphBT~z z1E&!jq*B-=vCZ;{i7@zUNwvJOC|jwRTI=DT&-sQm{1XXEDh%WMGc?zU^nh8(^?JtL zg4F(Wl{@P$4iU`@i)YH+PQS)U%!MU3`sI%pM~@x*JTgMtMkSwp&tDl@zp?pvynSAV zV=O8~LIZaeu<-JRST=}cOef=@)^Un}{9LpLQxPR$2i|i$Ff90J)d`0PtKIyzFn8yV z9SPalL*eeZO X zL2wd*%eFRr(fhp)%lFk@vOhajC0u;MPKw!T>S{Y+i*`J_E99DG8fn@;HCs{23-U&E zl@tHY{;BwdN_2iHlyw3n{gfMb$fUS3ZehbIiyI-;h~^B*crQ3T@^4Vkd@o) ZDA_U%fliGPn}3Mr~aq{daY3y0T9g_fS2S^Xs| zyOgIjIeYu%qR`{jO>5J(ax6-|vmCf22pI2Cgpr{fhI}N9Bt?}FD3e5x;;Dx`PSxbQ zUmJNF{_v+Bzu#v{?`yThwF|}DYd1Q+Exsvo2>i}y7k`6ysTH=M>)3K&`GSL8*5YE> zBup&KzIq%&N$mgb;3;Vn5KH#9V7MMu%laI4%u(NhXGsMRUvD`=b8!mnnn8E9c!>{% zZXHR7RY!7F5))G_>?P#|W+3rEdFojR3ECp;Y4!oSp87lZPkUQwbIyLf{LGp*x!DPy za{H8u?{mftkj;1FbBoIvZTFh0hH?wHYqH*!X#0o!{_#?&)~~u!FlV)UC}r#FqRZ55 zG^FrItG}yp_&|UU|M+CY{*R8o)*`0Eaz@>UNJ9@Lx)p2z6FNyid 7YXrku T-62S@8a%6s5gGQ=e-T|BCaSbBNCHJm*=3t;SOSkclISX*rdfk}_sL8huaA z=w@nEWkFmD57f&WpU TxbY5=L|Ys0ayPISDKgNy!%mcr@!{ zwBDOS^V`pySKozHZLzApN-NVuJqic0$f9!V*v+qZ-<59NJo?!x_?^Dd_Uw|YI!I@n zCEKIe3&%$FrW%$vL#UGGcrC#o6&i)_DosxP5Z*SuFRyUGF2G^{|AgU)GJyHgOC3Sn zlTD1XDxM!X=fE_Z!h3=?r%&vZ0n{mRmNX0_K}0FALYW{D7LM|?vcUhx^{W=M6=Sjf z_f#JQ1asPP(Q8*}nj^c>_>ZIb7pi832@4H5x!)c5>Zp}x{#P1YzRRzwHuPuLyQER* zu|^(@Q0aqRMXpD7uZBk)oRiUu2sJ7cvoc!NyYzfM`^&xsccWi7c0fs (kRiWfu-Nwe{!w#_Au-{`v3v_+WkY&9q1#L4DaoKgTv#HHdAB4};9EtNUJ8v2?@x<=f zysb}7L41$abKl44%U`+^&Q7gnuB}h?v`bfC>?oG6?5)h?A8WB(w5s|cHk bE!M#D@1p@2l4p>$cPyS{tw@{g77FXo@-U$5ysdT>N2 z`#_s}&YIMUSAov2=6o7(IT6RV%1|R+`uUaW0WT } z*;6{{Dhu2=qY{1Gxm5OJeSl@7XVzyMR}-^DhpexowH;@V#9yimC`_<%w3K6Pp(UE$ zyG%M9S2z=|Y$FB^B)<64VmbXfc 4kQl->uUjnwhV$xO!!+GTQ$)eUt2AvvEz2`frXN^0XVKezCTHe(aPWmXn#=&v8` zn_s+tHRRwlWuIjS=M8GBr-VxdKC@|j?B-NIe@^Db(nm{$xWFP??3lDxp=Wz~R_|Dv zV|_e-e6ykYme $9>!&wb@MmO-~S4dQqg>w_3433nyUS5flm55+e_x;Y|Kf~ z`&G`@@*m4Omwy}=$w4aw_$4UWsA|mwN*W4ESFdUZeRRv&YH3iBh+p1XuZwQ{q `cTe#7l8^Y!cqAr?Ku zQY6s`@phk1yK@32gKsPdzCBvjySgqDe9=4Bj1xr?Cz0>M8v9iCYAxM(qtblw`&n0a zs}DOzO=rXBGK{2Adq}aG)|j?y*YD@;{d8<{YBPNQY0<{kYN9WfQfww|=viXc2 zuKQ=baGCh!@ Mm`0V;WyK_Ap9y0N zoi8nuU$5PG`RUi5Z{3ehZ|AwVOD*YcwxXI_*y09+;8PEZemq~Ht&}ec9vc9J^YzPP zq!|WflH>0U(?l5y2eB2cWPs}wPB&ZXZhp&~TidC=w?R?;*(*ln?`ca`Pr6=n`t79; zW#?k!bQO53BxO%QKC0Y|%oTx@@V%H!j75S1LeAot4ZSy+5rsg|je+S-#ZDfDYAT8l zO)Nzaija+lyi@d2 Fqko<--q^IN_Q3 z2aXh8_&BTPy1ns~)`swP$`Y>}E6})maq&%7p94R@oY5ELYMdf_^N#Cy8G5cS{II#= z7-A~Kbl8 ;JS0e{6lY@w=o$@5zxf(S6DhO>P%#ywgeLK)a;bPfIihL++ILt+0uz zo2oKlfC&cq?TKGICMjzcuYP}N`zGbon&$GQP_&sgYo&x!+9f}c35c9Eyz1fwVe%K1 zOwehuKcWFM4skdRU}bucRQY>w92Bd8VT)U&3Pl4TAY}lM k7t-`y;|>karrqty|HCwKDWHg z$IM}0sk^I~%AB|MZoZEZKU}d#LU-9*G3Z>=^bg+J)}i^dxl0>4?nk9ZpC9;8zqp$G z!^EmV?P=0u*Sv#;Rt+{kepGD4>(O{Shx6VcH(cImj*O)m3t}DK4^Sh?8in^@W41lE zV)<#e{bLu(q ;d}&=z$71L6x%+?m~5=4_q~%%ti1^w(v6uTnY15^41-hDDt%Pj2w>= zANLF20N xuz7D8k;vclF7-xi7K?qfIN8xx?B^`$Zu(G#W0 z@ZA8+Y|nN`@uCNWc>w%y5(37=LD)u#@|jo>kP67Y2}-aNCIEJhvB>U|$6wuW` i2y^&Ru*ol3LU+ufkR}U)NNk<=7^vze@=sR0P^U~}vQPBi{mQV7k z?%W)>Zs+ZGId;-oj?#H xHzCVFet@N->PY@}#WQS>0mTB7h7Nk>3p>q?icXcUlj? z31HiCwx}5o3Bk!yg!YoMt!}>_ePHS|xTvLfRO{2TPszE`3blQg3IyGsRL=ufZnut9 zWJ!*D+C+vb>`yfuzh4hccy>id!CBLX>F61$3E^Ajr_D z3>&2{Y*Zgm zGF7OY5yVxtR=tulEzK$kHNPKaZxJ|T8R}?&vli4AyVCD8i;L1}2eRgP`Jj3Q0*?#6 zJZ2W(h0L_oG(r?>pfCzZlp(=LL)-|E-oPV~(3lb96u7Xd2;9J$2<8%yu|*QhdsI3K zS&!uQ=TkUDS*kFR8;w_Np(fhPQU?pVV_}`F*dmgF__OFcx%!vtbAIxjJd1)-Sl m8n4zr+B(uLI)&Hpo5Ate40d` zO9)plbUE9w=_TnrWOPcL6qLx2NPvp~IvX(xE|yS%#ZVMDNckReKF6C&Mq`Ox)NUkE zyOALamJ`m$vG48jzwbw&TB1B~97S&pbEX_rP7*@}b&}IN0k|9paovq#loE8HC<4n9 zp@xdAcIXGz9eZkeEnUs;GUD}Ap+o;vD$YFq8=-ZW_~zc!tdaIazi$HA)lruw=io~- zo1~ym_xc?v9(NVi9_Btim2OY*XZZMND$3XPG1gXg3;1nFVWBQc!l41t=2)q#xN7 zh?MNJR<5h?jVw`M_f=!xACM$MYE8lQ;%LKICLXX;l;(oc2mrrEGBg#IG=^cLEri76 zL&01kIiH|}8#E0}5b=MmjvX#0f(K6w1LAKuRNY*R291{D@-U=M???-5d{4D*vA0hw z)B_8S1QvQ_x$VzR%a_cN dETlV-&n) z(YUmSWEPU!9ilu^^mJ9zotpO2FE6Y%?2zBrUPhT#f{%amsmv=?gUzbJt|4zKlTrLY zs-WJUZqe*A zRPuW+6%pz!C1UAlXtG>sV);@n?@h4IkzMja 7Bq0!x5EB6m zpa_x)DTI+40L3aqAdrRv875LjA%KNQWMz=c1Yra;RA>nD1xysH4g(6{get=nY9N|e z(iAWuA)*u?|HJ?{5C8!L0ssUC0R#d90R#g90RaF40}%ug1rQS<1{5G7F+ngDBQii1 zP$WV#B{oA~CNwn%ME}|V2mt{A0R;lqSk}?&t~=T(eL6nixoqSCC>47f3|m+Zw^HcJ z^kXew^!60yjp){mYxH{@ETGh4wuqk8*;p2_EmpRj7`vj`+tLsNhTwOy3uFnUu0@Ke z59Ia$s9vsWEIYO-F6Cn0&${+*)`jZb3UmgvAr`*-*G-NcHwCpkM-d%8ou}@W7QDYi zC2veP5cuw2F5UWFoWdC9uI)W%qc3*I$2U;smN=$t!*=TI;Hhe~Ug{u#O8d5}3t+bh zy>$Y$^6pj@-zr*!S{9 km(2y(7g zty;3LxaVBTHoeOETEAK4Ux2FQPde{Pxkl-l$8{_*q||L9NQ!?&&nzKYwyS4PR+n^w zr|GPblIsGlCdyqV!4{#|pNGUtKjbutNtCb{^fcgADn{ryuytXe+<6*fiAH?9?w~9p z%Uu-FGe=Ywbz@%S=z&1I8Kik^a<0!#h1-dJ;Kt Qa>H;oP%7nasZ*rzb%!mm8)0Cs^|62)%wD| zR;+XX0IwnGzIE#QrC*c3s`(unn Jv!akU z-_oZd9v;`GNgLU}X&Azt?SE0uZtqTPdgwZy;*Y^>Wd`a)i<6rlQ>Fx-^#1^jBVN{! z@nyn`TegwejfI^q+BhF_wYPokZUQoP5AL6^8$AcSAmWRhw?alOT1JV@a6q{U7jnCy z*;%_++WYO_?$9f;q(Y@jURJhS9$oqBtDP!TsUGd1wNw_rf|ja^qN!4(La#@4X!qsz zyK 3O)r#62&?62{44K#zPVQ-Ia;! nRr{RA(^y*9dyjp#acnG!*)Q`EJFnmN+@Fc; z*HqwIjaYLwcI-DPV UDwe6}5qpxxmmDF%uQAPJ9qiD2UckYXgG44)1!ul(^ z?^J4!FS_*7rCt7(wzV9)awS@|ch9<{0@W7tzIDo#DozTOEo}xATB^BhR?5}$*VEa1 zSG6AMxmv$S`L%1etOeK-Rr; E;YUzf)i9xHdU66OW{kv*|qDP`vTNh#& zR=wM^vEh}E)DQHgShPpK45tz2tjMkAu 30dlFJV>Ok9Bv{*k1q*m3H@sZ%Ufwpxry;v2}N A9%BiRrnljs@l8vkO%x zxa!lZ{K2lQ!OnG|unv*#gH4)Ss1Elzjno$t*;_-~)dQ%@l*80!!9H-JNilRCYnd?MDlbi+qJ*6l3O3*3l) z!cq%mW$hAi1s1gk*-akL`*ynT@VB+p_Zew v!DJq#jJQ|ixvJQ#0ee|&fok;ATRMrEBsNHCxv4OcxN0h@%$iL!MGb6 z`d5a~!0@|Qmhg*LOTo+k0K-~3z6)Mw!HDPhJ)`ws2?hG+h1$Q!yf_c}HvwPeoEQ)C z?i|0&@fZ1=H~w(;pYyzge0Q5)=R8Fp8}UW{YsJy=pBX6l!;F-CUB;LBUm76zqm3`} zUNBR =5i61OX@iZ9egrh{bP>B)A1gpav=b< z2-hnMaYf+*j?21hS50(4C0Sc7inVI_k;~u}*?syCFTQq mTiQ8x?I6HR8%}BENz-eQ3 zVQE9M)GKn>D`Sx4P4et{e1h9Wj|396Ylwud4gur*bBSl;abv}}kw=MVqo0`N=Q5X= zopt7}q=>!cY~)=c?z^t)xnDcxN1~AB_Pcto^KjGu0IK+aICzAWVQjjJ+_iets#>aQ zwuD?3%XMX2xl-4VyT4wcY8JiugU-3yzW3;*UXIGZR*6==dG=kEDqAg)^;|7Lgd9ri z7Pv^;FJp$$y)mJSs2aS(Xvq*elIEKlmm?gB@V|X%(vD|@`QGvv*C%2iXpWBGwBbaf zAHQ02WspAFSpNXytc_@riRm~q+8X;!b4l(T94JcA-~-rUrEg*qy~v+zgSaSmK+yJ} z+9eU&y1u~oZ}Om=Ku)kXD%zX3Pl7O>GvWtd8vd2~@6yPnllqv4T<$-J+>S9WG>}Ld zs8=nDBdB)U8lpT7^UKUn^U7v`V$yp= =|4Rbz@{{V+-TaudK zy0BDliNJ;wz} pVjWH&kk)bE5Q^jNKZgGR09e@kAM}tbkzLBf z@c#f1$&H>G#%o>SoM{=G;jH{d7M7k|CyPaai!_~VpTqU|A~liX4xr1)oXYZ7b=`MB z9$Kmu%(-lfmdmJC*Xk;}c3rR0-_R9yq)#pR{r&zU@y^xyYn3YP%Uf%l8jtcC?r8=( zfpToIf(%a@FWZh;CF;uK6PBzergSVd*;^3oQ)F;Oz@yU+Z*i a-EM9ZO1OEV9AJMgakxYs6&5a%h0~wriCoRV+VwsmTYle7= zMj7}|4e<^xMl`sYKZn2MAJ2>BIt;9W$7FM^RuzR|Yzn_mxoG99kpwN4+`_KZsZ#py z&X%-^TP~{F)pjgeIRWVH_%&7N2h*yrRjAwD+qL#nW_Wp@+Fbz*2$@P`PjjVyJ~)Zp zMwZ-8j8kEZFMgrLYqQG}m|FI}l{BE&wWX$r?BMMT)470&K@>J}X?E_>$g{h `dYy8i&Nj*->L!eG7nhdjGS6x?zbO~~#MqJ51{=@jU!`+(VOYi9%A%MF6yx{hgM ziE|?Ax+Vs3t~`JB(fu%r;mnVQaET^#(#44^jTmhS*n+w*V&J*goODaAxo`%D Jp0$Am9SeY_eL@HXXKtCRh zsTXtZyRPeHXnMZ+6hft6gSsB0&iPWLD4;vIdwNM$?oR$vH?islM(aY#EOxHmgPgvD>|b)^Q5vhad-{9G#|ev>6s&P>Lr)j+ z3&Xhkf2oVxJB~m{i93@-Eq$7r(R@3GKd0f7{E_@IK{WD6$sv??_26*1bHva;8#6B+ zT)q>;219c9D7*!+E5APL>2~M#Q43PEP7VlefpYGL$z4HvEtQmhJFmWdmu1_Pa<1Nh zeO20uqt3fmq(`tKy%ejJrrmC~>|QUZP>?wY+tlgogLE41oFT1XqZ~ndl#h+*YDY~E zpLGCH028g6aW!VO+rM@8Vwug|;D063dXNz&y0!5?ZKakb_fL(xSHI~=-Cl){T}wJY zQeGnx#!o?#7?~h$q>UsC-Uyw|OnGuIZ86QgqP?O7Ig4)2J@qb=1)68^;PK)S>5qbE z&xPv(&Q}8HaKY)lUzPs=sBm$zw^geN&g{#QUlC5u8{u=ygufa*o;yAy*=YK>R}f|y z;<=-U@h+$A`ms2KxME2iJoz)r4~BCj-hRum P0~^!;!?E9525;r%d5 zFKT<(n%B)HCN3|BaJYvMpNVGQFN9au^gb3$t!INX9%odmvf7c5R>+=L=_|6Zw&YMj zKB=IQUG04GBrEJy@})sirLQXX_eYhL-41og((JF6+?bp@uHKvFYh`!Ovr~V8f#Hz9 zDW&o}FKIwFj8@TMS7E7-Ut!PyKt|kqg}SR<_H8+?WT}wkhrN=M(~+v_J >VWRJCW3Gr@faNex#CTAk| zI$~`!b|G0-F2%LTkey*VSvBiO8^iLWhHe)B0R3;ofPTOA%zP8ynfzDJh4H+e9QNgS zbBY1LI9#jro&$=d@fQl=jL*-?;yHey{Q|NHlfhf|+?BU$<)~T<)oQ6y)lg1yK8i#t zE4sAT(%3kjbP)k+wO<^&^S(f>yV|r$u&=$Y%WhV-?RLJ0Af51e8}-rvs^st8k|x8| zEoeHlDL_KC*eiCey6#<|zMEWnJ;W$uw{r%gK(upHi7Dx @+y^bu2!u#_^V!IYi@hGZ$qlo*JKwuYd3D(pyD07m%Z)% z%id5-k6XAGNbOk=EM&7r{{S%JL1c!5Nn^TUjdF1|eUbIyD^8))P*^WOS52*RCX-;! z&S(QrUnET@LWHulo045cp`Zw?BPZ@SVmUeiY;657_ck+iyF<5QoM+ZgFw(k=Bdp5v zYpH3X6dJ-_#)a4j<#BV{9^+NOzy9}$TdyDVeR4dpGtMf=noNw9e!BHqCfC>XoT2^C z{{YUK&us lUl4OrY^QB74`=v|ayqk_65sj=&WI^-^ETr~OV_jbM0VCIH zYnaz=%h&)PvHhU6gr9`x$P`&}Y<=m#w6<)BUfi Lj z8yu&l1DtUMbSZ)W7J{j2#h`12)|8}(Zs-t-MZiPb$NWWSjrz*6hbS<(Yq)6??_byA z`~Hz!G#B^-*wEq?iYASd&vz8*O5JTh8(Meig{^Y6VOk|x70I-o1=6Hi6?5(t_PSfG zmD-}TD@Cf+P*va6^0id8D^*2C-+Aok5> 5fkswhg5Jz-}= zhK`|hWG`*^M4d#A5w+>kJUYvRL$&&`vm=kG(P%d?ePWk%pS`%o_hXdod^y<^E^7Y( znH1+QCFWTltKx{VNZ^q*vc`In$Ss9+15-?LDtKK((sZDhrHV1-p?H2Iv9_gQ>d&D& zo{8!>3jNK0bT8a#{p~77t%yBk)DB^PZGv`zy+#*sC;tHJ{vyBDKD|_(Cl4GG?HM1_ zugDSgAL*6B-+l!yR%mxxchPDVt3+6AG==xGLhCUHgUhn6L@ITAmvwGit-I_Mt(B`+ z%jHtlYO9rY t$;Bv$8)t>y`TL9Jl#){{RtmT!+g;wjw}v?%0Cpv=-yi z>Go_E?t_Bqxuaiq{pdJ7lJC?lMpLtAZp5COyrbRai3H_FADs3e>}jL&&6qb9OO8pS zPkHH%iHt}hPlgrJ1Q<+Z(YdpSYJq4&LgzNaqa->OUrt6jnG-}AH(k5R$JkvHT{BLK zmr6j_vQ@0%JFiaas`n14Teze1ZrBCDnhzcE8?TMuKdyT#DwTdq+{=E?5cQkc%E=`<0EkXm7W zrH$#hKG`l(GfZ2zeS$7wZn3$#B4ld}_{omNksNoqI~C1NGe*tdBtfJ-(ffnujpHru zcI`yt7dxU>xa=Rdvt9y;(KQ)jb6Zli@v_SXqkTHhD9pEw?J(oK^x2aKl#R0KBTkQL zah>k!YS8_IrKcRO?wz}J;0igQ>FpDmLr5&`( fpVxdsZ;gacBEC6B-lVyl78rOy z yE))6baJ+_M=W(te%=tVzHt@$H&{nHN z2WnQfTPn0DA{BR|u(}N@f c5org^;)vkN!f u15RX(dLm2rh=G2M zV_g1?gN cJ$X` z3f0I8N9240tyr&7{PoO_SZ94o4et1*dqguPM=_6cp)OG#py^4!mv2qD@P{0DOoA+6 zysj>eh*iiMT|~(UE)8<>Q18&4iNC0W=H0(m$&lObK>6R&^R3<5WT)dox<^)Gy*@0V z8+`m~M{#gllbh7@uj)4^8)wHHBt6b%^TyKjO9^$AxoA0U4(i0@{{V6 jZKdQ)RWl_jeod7Ic{$Z>Z3^j9oywfprCLC`tnB+IRBx zU#N4hU9E^7k@ q%+|hqfLks>V3RG8d51bj z )jg^lsaxWFt zV%jU|KowMtG6A7;Ol%5)4~kII98r^2iCVgy`iui`h=s|mg>Ytn>s)OA0Qmr2{Xsbu zYwPdSemNe=q@G9feEv@d_sS`*YQ9#jY(U!8_bn^B_*;drzU37`YKPBs>s{5Ae7=xs z*U(QY1!}cb&Wi7Umbra$uFm=AT&tJeAk%spY)7DDA}Ka{kY`Bp+~zT-JE+MVWCVuS zv=*n$9Y*f%c>v@)Uo&We^m>~ze1@>kvn6Z~QAL-JBpDg?D_<*yGr_!=(UPDogvZhi zeNip_u9>jO7q|d%h&chQ8Euj)bdGaNkzmmE0&KHJ=4CrmlGd)SJJA@mtVz+i&i7wl zM!T*YUeM- A~jD+(M}e=qHLIrYXI2U3_DLy@qza7ITI9qnC~ zpe;hxi0fh0yOpV0I)E$O6}YNaSHjtD7R_6=Y!< }u~(%t%D*z6C )MY z3OBjQfV_0^!hBtWA5O{11kVppHHF{x>c*VtTsr~Om!vY}jtOU(d7RA#UQCUUksNv_ zLg2iq0nk0Cr)};JQ&$&b%JCFNH)FR!jQ#w)jcX!&XmyeJEQF^;jEIc1blyR3#yLZO zeS63!A~V);U2f&fD}Z$W09)}u{{Zr@P~`P}g2Tu-lkp7KW_ph%O)DeiX#P6<{nv#5 z0QV&Qvd~toS~k0`>$=p1s?Z`0` o(&|SGV8SYKR1qg8(wBhWCzZ5feIa30fLQ#~GW3$kJyg`n_LkOut zEtI$S^tpq&vNgR%IJa7SQoY7G;5)UY#m_YAZYJfCO2g7+yC2+ftv9o2) %F6dEdbdy|2h!?y-3JThOSeACn!9qY<)Hv8l{;%F6l%GKwGb6^_~%NMcPr|Z za@A7otRnhdMY6Sii&w}2%DMSt8Ztpo%Ejt6_{M&=FHq&<>deNpJ2Xn4G_E37f!35t zACgp3qYb!?N;+W4zUY6_1vFZ5PEo=J0K3D45{nx4ez;p$| z7nEbjT3dQ;vl{~HXd97c-se7Nh}n?WE~IN_k*tWBTJ8ZOzgzJ+{{Zrl&ezu Z{ z?CxJ*Z5)U#_22Y zbi4WuuX3YwRTWOY{QmtGtp!TClgO&>LatZNy*7s^_L6zp_hk8I7rq#Jj%G+>-8pMo z9{!vpG7!h~b}h$^bfgj!kk(#9o2;*088y?qv232%8xtgzk;|7GV)JnA`w}tumVB>H zPL`~0EUs%I&WX1rIySmf3xJX$MA){Q8-uQB3d{Jk0$+GXY&}cQQufv^x$qfrjRj z9#dEDT~X{oXeWJ83@AQA?WD5cQ(W-vrB0cIR4zjvoFE~hDS-Rcg&3MwOoPD3{=ecY z9wz$bT*{40+12Uo=)PmRKP~yibZpM!IaqRV->*!(BRU)(SYdmm@a&Or&q3zK?Iip& zheyG@JazF$7B$B&y_&MDFKX--$Ul_?8q@ DS)>y zM%FmB@WSQO#w*LYIk{kMCcT`xKo_=?!D1d=!Z>lHLKnoG#*?IL+6$i+?(*n#T^VSn zZW?;QZ8GY+QvHtv>3*@|cu4UeZ)&AT_C#!JwRd0&TE9(quSre*B{%uF4ymhmrM-;& zW=G(9+t|y*^5w+!1PvF>BiX?Yo+IOa&k(Pa8jE|5T9v6oo$?`c*G`Wv+{0W^X;e_O zY akmPx7&+D08xwtx^u+8Ob*>XfQ2IA?o<28ld3Ed>& z8M1Azj#s)Kq)x-?lLoQ*W)_TDTO)UB^Fi^qD+{jEIK+Nld~*&UWptVIL=H (2BgYbzbhIZEu=}P}c>* zz5HjyQoH<|cSn=hNM(kB$|iTnVG=4tD)bTPr5FA~* 2UitfGKyDL^H72O}6{H-5X zb@g5AlaDXHXVN(n- w|tO47z++#R?&!=BMThU ztD$K_7CnSTj*vO+t&k-+Jc8R@KYLh5Cj(7w0gOuFZ1Vg|#IFAU@~n4TPst1Zza#HM zv@WM){{TP1NRH!^2ktxM{K@=>^MBy_`uwMs5w0i3a%YFc98)CEI=)uBswGiCAgy;R z>38R3t*v(>y0qo-$U4y~-FA<{rLQYnEtRjnLzmjM-<7SG%F$@G@600JL~^uU*;gwF zkyNCTSAjHvyKIHi{LfL@xsfL3;jW%GPCR&75yl~<=Oc=5Kg0I({57u`xNdgQY9AYs zYg|hrXp$IuO_PX*`K f+hUZPwW$d%tBkK;U)I;>RNLF$Z)@9O$L4pleJRub5(nNN{sHZ^y{#J~^We>yx|a zNg*5CTkVouc0F|55bCEoL^2-G*;rGZ9b0c3B*8W~FY!l-TV5=K(eRvybl;qh<;&~r zk6osJ a`{~jp8R?Ob2PI8(&Ri!; ^78jWBnCGP<7xeib~t ruGgofA{ByFVPF!qo&4 (s zO)c?cKg9DZ>8YPHeDbedDplE^`6R8s= r^S zK0cIr9%f05?2atR9_Nz4*SB|NV>WLy4@t7j^4wUQCB(&Bn4a0r?wB==lVBVOwv{WE zjFpn`s9w*~dTYt?D3fwBV+@iBS{o2e?CoX0e!UW1(9t^)vP~}vWX0G#LL%?g82R!@ zf0=`+{{R|fAY(zrYfqOCUQRIMitz6#GHWGhF~U!gz%G-A!LxAP3UlTyv7ihk_<$jf z7&Vtt*%qI;=#90q7F4YrM^k2M>%b&y;&R7qJzPI29~SY5VDWT69M8fZEmM5@KK*0m z-^t&_%k273&C{>cQ26{`_u|-DIT=#1;(Arel`BA%Wds=7?7qlatu1Lz*O4n_u~t`f z;BL?=`CmF(sz;Y~-14PflHX0M9G&?uz4LbsYo_SQ9!olJa1q?mFf`&|$tmFcJU%`U z-k(E=W53ODU?Iqz?2DvGjt$+8$2-e3J@DigWMbvIOn9?nYa`=jUx*`2&d=QDK;}Mf z7b`?uB38SE;5t*oSmrl|$^pj8hA7Vxxe4n@i#wt?+3gXth&4VU (E*8= Z^y;E^1F<#7!JlR{0-HcAhUTcT7WBF+@V#tn0x$wDx)`65c(!8;gN)A`= zxtOgDI9YC$?BZr1-Y*m4$>KMUk(SUN*&JywXphF&{ZBN&_P-UtMTaPjjcXjti|J%3 z44d`H0sZ QTY@iL)fGspL($)zdZ}u)3Wqb#R8^~2&iw@Tv`4A1#8Y^789qsorn28I z7A{DWf#EgI;T~bm;MN(#dL#EE$8=E41TN}7%rV|$SZ2t6kIs#<{-=vF8JrjldGT^% zb>Eh0CkPO5wvJqEnA2vOBsiuR5uO{C&(iV4pQggq xV9)pZ;iQ0zLVZo<(L-viz7P^a` z6CEpqOw{K)sK?{)!~C=OhmBkR0Od>_saOQKErQ;YWVdV+&6V<;McRBbM$}YNz9};@ z=FEG0ua0)R0b=)GJgdLxSw2te8y6!kT%1|(C4y3lZgSX8!mD4 zF+?4n8qA#bx=fwfBsdq;#BN8Of>sx|r?l@vZ1}`7=fff5Z*XQz!QOd+jn2n>Zpdn5 zwny67$T9SzvC- 0HIhr3*QsZO mMYO5G8eZ0(oNjMMI*tGv-2xhTOpZKn#$WrXs$SsghfRAGwuY+0 zF7NWA{{Y9s_--y*U~V53&&tWm;bVt!2Q|^i(7)=$SK9bQ+o0ewO3~pb(eU1JjN4Cj z`nFib`oPQ>j^a7qetsR6++3b9#2KA02jGw5Fva0)V~;0=p=-G32s|S&p5Ui@Q0|H6 z!?Bx}#Rmt$#mSF{;mMHx3y3fY`1hXTufDDnQciyQYpn_uO9MzC|rc>A8F>3$oZN zUp&pCT)Ut Qd!g1a|aAU~lgCtNFwBt55yu#+Xa`#C;PoUS$ARSiq3~~9e_WA7zpIGMh z42Z92T#Q9MudQC53U19?O16-*f*1a`;~)LbxNih$;qdV6C(L+$3wW0s;ZZ-2XW+@h zvsx2d-y(y84)%%VVDOF{IT=yK7B(K3rYyXi4DSb&fAPeLU-tXOWKQBdL7Y91zP!(x zlN%uBd0sJ@ub*Ihp7^DO$L5#c$^m# P=cRBfTMZiS(72gwqJ2M&0 zd~z?9BvQn tK5is($&rc>@+v6$so1$Le@0dq-z;qw5k2%_Yw%d~+!)vCpr0X=5;)n7 zO*6)uIbiBLCnj?fT r{Qp{lP?a<$;XE; zj?E-l++T?1MVUPFWn{1>ss2LyKgYsnC~*%x6nqLC=pBoiC3g)dpWA0;^qj3RrTICt z4i}Rr66 qSb1vogfkUrAoW=rAME1 zeKw<)Ag?{sjAcb6P43R^bE9?i%c3rj208t2GZ= %36clE1MjGXSvqLJho{jW4hTUN95%rm6lYwLHNUn zwrE|EiyNCBJgjibIbBS~P3Gk?$)5(n`0__KJX^^C4UK{o)9Pi#<|IOC0(L-gd*gF4 zB8jmOEC2?mxCL$M0K(_S1Nv@7vg!NlguU$Jynbg%;*|U;^1L@BIqb@34&qYrPBl5m z&mY04DSNM= sW XfW3clhOyS%{QTjg?U!rk@-UY@={{SB2RNoD8 zry=2vH)F!wZGVYzw;%BiG+q87#u_B>uNh#U6EhWTED(wz5Wf2rt)dXMPG0M>iC4&! z3fL9fkQNJRYkr`<{{R7UE9;+i-=50W-iiogV^iUkt*Gy#6XgE@o+FcrNXBFFENqCn zv6#Bn*=BQ@7wNqx#g6x7!p|#*alFBwj&bs4kvEG%*+0m5Ua|2EOoj6xbL4K40nn7V zVtbj{l@nIc6|4dK`yDHoq0M}$(?z@ZjwDYUQxjj-xN`yG+%9Owe-9a*Y&W#NIh?@+ zOp;7>?C2hgB@ts}W3i@4^>tFQx&B`b>q5cRg51bM%VO2dmN}g1m+ieeI2NAc*J+jH zIk_I*qf2;64&yv+rM@Lt{Bw$7V@<@khE7lF+)SsP+zJReIcWC}v^zRSK111z`gigF z0OM+RFa9Tg J>YR$*QW?20xufsetH;i0zHExX%^(M&1V+_1C@jnZKy+@6~p;Nns#DtA4^O<1D zlf_#Z;yhWbXBlvGd}9}>9!5S)BeQPAU`Do&YmGY{v!5v&Tjeq2j(lh*Xu@kDY M6R~40~h6vNKxNV$X4pXpr z5iN&-wVL>QXMc?+P2p(MxVMIv>i!#Fs(5T6#r! w^RE?K0ceGYN3*oY1f7AZ}g^A1lr~d#8zw!S7+1#7_+K(#aKZ{q`tCJTg zumkDtt;lSwuX4A9T;f_$H~5dFat