From d1bc2a335ff8f5efc433e1da6ffd79d519254bc4 Mon Sep 17 00:00:00 2001 From: astraldev Date: Sun, 20 Jul 2025 05:22:21 +0100 Subject: [PATCH 01/37] chore: update icons, integrate meson build --- .github/copilot-instructions.md | 3 +- .github/workflows/flatpak.yml | 25 + INSTALL.md | 26 +- README.md | 19 - bin/ggate | 33 -- bin/ggate.in | 19 + bin/meson.build | 8 + build-aux/flatpak/org.astralco.GGate.json | 27 + build-aux/snapcraft.yaml | 35 -- build-aux/snapcraft/snapcraft.yaml | 76 +++ data/images/components/README.md | 2 + data/images/components/adder.svg | 21 +- .../images/components/component-blueprint.svg | 115 ++++ data/images/components/resources.xml.in | 6 + data/images/scalable/7seg_component.svg | 4 + data/images/scalable/adder_component.svg | 9 + data/images/scalable/counter_component.svg | 7 + data/images/scalable/dff_component.svg | 7 + data/images/scalable/jkff_component.svg | 12 + data/images/scalable/pipo_component.svg | 4 + data/images/scalable/piso_component.svg | 4 + data/images/scalable/rsff_component.svg | 7 + data/images/scalable/sipo_component.svg | 13 + data/images/scalable/siso_component.svg | 4 + data/images/scalable/timer_component.svg | 5 + examples/RSFF.glc | 64 --- examples/TFF-counter.glc | 129 ----- examples/adder.glc | 506 ------------------ examples/oscillators.glc | 114 ---- ggate/Components/LogicGates/Calculator.py | 2 +- .../LogicGates/Counters/ModNCounter.py | 5 +- .../LogicGates/Miscellaneous/Probe.py | 6 +- .../LogicGates/Miscellaneous/Text.py | 6 +- .../Components/LogicGates/SystemComponents.py | 8 +- ggate/Components/Managers/Alerts.py | 2 +- ggate/Components/Managers/Exporter.py | 2 - ggate/Components/Windows/About.py | 28 + .../Windows/Preferences.py} | 1 - ggate/Components/Windows/Properties.py | 214 ++++++++ .../Components/Windows/TimingGraph/Diagram.py | 328 ++++++++++++ .../Components/Windows/TimingGraph/Display.py | 13 + ggate/Components/__init__.py | 0 ggate/DiagramArea.py | 6 +- ggate/MainFrame.py | 22 +- ggate/PropertyWindow.py | 240 --------- ggate/config.py | 2 +- ggate/const.py | 46 +- gnd.svg | 31 -- meson.build | 50 ++ meson_options.txt | 9 + poetry.lock | 447 ++++++++-------- pyproject.toml | 7 +- run.py | 6 +- screenshots/ggate-pref.png | Bin 46976 -> 0 bytes screenshots/ggate-toolbar.png | Bin 1902 -> 0 bytes screenshots/ggate-window.png | Bin 34631 -> 0 bytes test.py | 84 ++- 57 files changed, 1362 insertions(+), 1507 deletions(-) create mode 100644 .github/workflows/flatpak.yml delete mode 100755 bin/ggate create mode 100755 bin/ggate.in create mode 100644 bin/meson.build create mode 100644 build-aux/flatpak/org.astralco.GGate.json delete mode 100644 build-aux/snapcraft.yaml create mode 100644 build-aux/snapcraft/snapcraft.yaml create mode 100644 data/images/components/README.md create mode 100644 data/images/components/component-blueprint.svg create mode 100644 data/images/components/resources.xml.in create mode 100644 data/images/scalable/7seg_component.svg create mode 100644 data/images/scalable/adder_component.svg create mode 100644 data/images/scalable/counter_component.svg create mode 100644 data/images/scalable/dff_component.svg create mode 100644 data/images/scalable/jkff_component.svg create mode 100644 data/images/scalable/pipo_component.svg create mode 100644 data/images/scalable/piso_component.svg create mode 100644 data/images/scalable/rsff_component.svg create mode 100644 data/images/scalable/sipo_component.svg create mode 100644 data/images/scalable/siso_component.svg create mode 100644 data/images/scalable/timer_component.svg delete mode 100644 examples/RSFF.glc delete mode 100644 examples/TFF-counter.glc delete mode 100644 examples/adder.glc delete mode 100644 examples/oscillators.glc create mode 100644 ggate/Components/Windows/About.py rename ggate/{PreferencesWindow.py => Components/Windows/Preferences.py} (99%) create mode 100644 ggate/Components/Windows/Properties.py create mode 100644 ggate/Components/Windows/TimingGraph/Diagram.py create mode 100644 ggate/Components/Windows/TimingGraph/Display.py delete mode 100644 ggate/Components/__init__.py delete mode 100644 ggate/PropertyWindow.py delete mode 100644 gnd.svg create mode 100644 meson.build create mode 100644 meson_options.txt delete mode 100644 screenshots/ggate-pref.png delete mode 100644 screenshots/ggate-toolbar.png delete mode 100644 screenshots/ggate-window.png diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 4b6fdfa..af7ef40 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -4,4 +4,5 @@ - Do NOT add extra methods or types unless explicitly requested or absolutely necessary - ALWAYS use double quotes for strings - Verify the correctness of all codes and answers strictly and meticulously -- Ensure the logic in the suggested code doesn't conflict with those in the levels above. \ No newline at end of file +- Ensure the logic in the suggested code doesn't conflict with those in the levels above. +- When creating commit messages, ensure they follow conventional commits and one liners \ No newline at end of file diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml new file mode 100644 index 0000000..8a79a78 --- /dev/null +++ b/.github/workflows/flatpak.yml @@ -0,0 +1,25 @@ +name: Flatpak Build + +on: + push: + branches: [ "**" ] + pull_request: + +jobs: + flatpak-builder: + runs-on: ubuntu-latest + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-45 + options: --privileged + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Flatpak environment + run: | + flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak install -y flathub org.gnome.Platform//45 org.gnome.Sdk//45 + + - name: Build Flatpak + run: | + flatpak-builder --repo=repo --force-clean build-dir build-aux/flatpak/org.astralco.GGate.json diff --git a/INSTALL.md b/INSTALL.md index 424b7ef..a1af02f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,27 +1,13 @@ # Installation Instructions -## __Required Packages__ *optional +## Flatpak - On Debian systems, you can install dependencies with the following command: +*Coming soon* - ```bash - sudo apt-get install python3-gi python3-gi-cairo libgtk-4-0 - ``` +## Snap -## __Install__ +*Coming soon* -* Download the `.deb` package from release and install. -* Clone the repo and install from source +## Deb - ```bash - git clone http://github.com/astraldev/GGate - cd GGate - sudo pip install . - ``` - -Or install using __snap__ - -> Coming soon - -Or install using __flatpak__ -> Coming soon +*Coming soon* diff --git a/README.md b/README.md index bf31796..62e4efd 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,6 @@ A logic gate simulator for linux developed with Gtk and python. -## Requirements - -This application requires any linux environment on which **GTK4** is installed. Or **Ubuntu ^22.10** on windows using **WSL** - ## Features * Includes Tri State Buffer @@ -32,16 +28,6 @@ python3 run.py GGate will soon be available on snapcraft, flatpak and normal apt. View [installation](./INSTALL.md) for more details -## Screenshots - -### Main window - -![Main window](./screenshots/ggate-window.png) - -### Tool Bar - -![Tool Bar](./screenshots/ggate-toolbar.png) - ## Contribution GGate is open to any contributions and translation aid. @@ -50,8 +36,3 @@ GGate is open to any contributions and translation aid. Fork this repo, make your edits and submit a pull request -## Donation - -GGate project is open to funding and donation support. - -[![Download GGate](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/ggate/files/latest/download) diff --git a/bin/ggate b/bin/ggate deleted file mode 100755 index ee5ed1f..0000000 --- a/bin/ggate +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- -# -# Copyright (C) Koichi Akabe 2012 -# -# GGate is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# GGate is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# - -import gi, sys - -gi.require_version("Gtk", '4.0') -gi.require_version('PangoCairo', '1.0') - -from ggate.MainFrame import GLogicApplication - -if __name__ == "__main__": - app = GLogicApplication() - if len(sys.argv) > 1 and sys.argv[1] == "--version": - print(f"My GTK Application Version {__VERSION__}") - sys.exit(0) - - app.run() diff --git a/bin/ggate.in b/bin/ggate.in new file mode 100755 index 0000000..cf2c771 --- /dev/null +++ b/bin/ggate.in @@ -0,0 +1,19 @@ +#!@PYTHON@ + +import gi +import sys + +gi.require_version("Gtk", '4.0') +gi.require_version('PangoCairo', '1.0') +gi.require_version("Adw", "1") + +from ggate import __version__ +from ggate.MainFrame import GLogicApplication + +if __name__ == "__main__": + app = GLogicApplication() + if len(sys.argv) > 1 and sys.argv[1] == "--version": + print(f"GGate: v{__version__}") + sys.exit(0) + + app.run() diff --git a/bin/meson.build b/bin/meson.build new file mode 100644 index 0000000..e8731bf --- /dev/null +++ b/bin/meson.build @@ -0,0 +1,8 @@ +configure_file( + input: './ggate.in', + output: 'bin', + configuration: conf, + install: true, + install_dir: get_option('bindir'), + install_mode: 'rwxr-xr-x', +) \ No newline at end of file diff --git a/build-aux/flatpak/org.astralco.GGate.json b/build-aux/flatpak/org.astralco.GGate.json new file mode 100644 index 0000000..f0e868f --- /dev/null +++ b/build-aux/flatpak/org.astralco.GGate.json @@ -0,0 +1,27 @@ +{ + "app-id": "org.astralco.GGate", + "runtime": "org.gnome.Platform", + "runtime-version": "45", + "sdk": "org.gnome.Sdk", + "command": "ggate", + "finish-args": [ + "--share=ipc", + "--socket=fallback-x11", + "--socket=wayland", + "--device=dri", + "--filesystem=home" + ], + "modules": [ + { + "name": "ggate", + "builddir": true, + "buildsystem": "meson", + "sources": [ + { + "type": "dir", + "path": "../../" + } + ] + } + ] +} diff --git a/build-aux/snapcraft.yaml b/build-aux/snapcraft.yaml deleted file mode 100644 index 218a101..0000000 --- a/build-aux/snapcraft.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: ggate # you probably want to 'snapcraft register ' -base: core22 # the base snap is the execution environment for this snap -version: '4.0.0' # just for humans, typically '1.2+git' or '1.3.2' -summary: A logic gate circuit simulator # 79 char long summary -description: | - A logic gate simulator for linux developed with Gtk and python. -grade: stable # must be 'stable' to release into candidate/stable channels -confinement: strict - -architectures: - - build-on: amd64 - -plugs: - gtk-3-themes: - interface: content - target: $SNAP/data-dir/themes - default-provider: gtk-common-themes - icon-themes: - interface: content - target: $SNAP/data-dir/icons - default-provider: gtk-common-themes - -apps: - ggate: - command: ggate - plugs: [home] - -parts: - ggate: - plugin: python - source: https://github.com/astraldev/GGate.git - stage-packages: - - python3-gi - - python3-gi-cairo - diff --git a/build-aux/snapcraft/snapcraft.yaml b/build-aux/snapcraft/snapcraft.yaml new file mode 100644 index 0000000..622851c --- /dev/null +++ b/build-aux/snapcraft/snapcraft.yaml @@ -0,0 +1,76 @@ +name: ggate +base: core22 +version: '5.0.0' +summary: A digital logic circuit simulator and designer +description: | + GGate is a digital logic circuit simulator that allows you to design + and test digital circuits using standard logic gates and components. + Features include: + * Interactive circuit design + * Real-time simulation + * Timing diagram analysis + * Support for basic and complex logic gates + * Save and load circuit designs +grade: stable +confinement: strict + +architectures: + - build-on: amd64 + +plugs: + gtk-4-themes: + interface: content + target: $SNAP/data-dir/themes + default-provider: gtk-common-themes:gtk-4-themes + icon-themes: + interface: content + target: $SNAP/data-dir/icons + default-provider: gtk-common-themes + desktop: + interface: desktop + wayland: + interface: wayland + x11: + interface: x11 + +apps: + ggate: + command: bin/ggate + extensions: [gnome] + plugs: + - home + - desktop + - wayland + - x11 + - gtk-4-themes + - icon-themes + +parts: + poetry-deps: + plugin: nil + source: . + override-build: | + curl -sSL https://install.python-poetry.org | python3 - + export PATH="/root/.local/bin:$PATH" + poetry config virtualenvs.create false + poetry install --no-dev --no-interaction + build-packages: + - python3 + - curl + + ggate: + after: [poetry-deps] + plugin: meson + source: . + meson-parameters: + - --prefix=/snap/ggate/current/usr + build-packages: + - pkg-config + - python3-dev + - python3-gi-dev + - libcairo2-dev + stage-packages: + - libgtk-4-1 + - libadwaita-1-0 + - python3-gi + - python3-gi-cairo diff --git a/data/images/components/README.md b/data/images/components/README.md new file mode 100644 index 0000000..66ccad3 --- /dev/null +++ b/data/images/components/README.md @@ -0,0 +1,2 @@ +# Component Icons + diff --git a/data/images/components/adder.svg b/data/images/components/adder.svg index 0d119fb..ea2e826 100644 --- a/data/images/components/adder.svg +++ b/data/images/components/adder.svg @@ -1,14 +1,19 @@ - - - - - - - + + + + + + + + + + + + + - diff --git a/data/images/components/component-blueprint.svg b/data/images/components/component-blueprint.svg new file mode 100644 index 0000000..6116133 --- /dev/null +++ b/data/images/components/component-blueprint.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/images/components/resources.xml.in b/data/images/components/resources.xml.in new file mode 100644 index 0000000..c2721e8 --- /dev/null +++ b/data/images/components/resources.xml.in @@ -0,0 +1,6 @@ + + + + @ICON_FILES@ + + diff --git a/data/images/scalable/7seg_component.svg b/data/images/scalable/7seg_component.svg new file mode 100644 index 0000000..2ed75c0 --- /dev/null +++ b/data/images/scalable/7seg_component.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/images/scalable/adder_component.svg b/data/images/scalable/adder_component.svg new file mode 100644 index 0000000..a90ed98 --- /dev/null +++ b/data/images/scalable/adder_component.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/images/scalable/counter_component.svg b/data/images/scalable/counter_component.svg new file mode 100644 index 0000000..9f42564 --- /dev/null +++ b/data/images/scalable/counter_component.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/data/images/scalable/dff_component.svg b/data/images/scalable/dff_component.svg new file mode 100644 index 0000000..e89395a --- /dev/null +++ b/data/images/scalable/dff_component.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/data/images/scalable/jkff_component.svg b/data/images/scalable/jkff_component.svg new file mode 100644 index 0000000..aa41973 --- /dev/null +++ b/data/images/scalable/jkff_component.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/data/images/scalable/pipo_component.svg b/data/images/scalable/pipo_component.svg new file mode 100644 index 0000000..d08dac0 --- /dev/null +++ b/data/images/scalable/pipo_component.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/images/scalable/piso_component.svg b/data/images/scalable/piso_component.svg new file mode 100644 index 0000000..cac3eb8 --- /dev/null +++ b/data/images/scalable/piso_component.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/images/scalable/rsff_component.svg b/data/images/scalable/rsff_component.svg new file mode 100644 index 0000000..5aaf10c --- /dev/null +++ b/data/images/scalable/rsff_component.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/data/images/scalable/sipo_component.svg b/data/images/scalable/sipo_component.svg new file mode 100644 index 0000000..66ad5de --- /dev/null +++ b/data/images/scalable/sipo_component.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/data/images/scalable/siso_component.svg b/data/images/scalable/siso_component.svg new file mode 100644 index 0000000..aab38c6 --- /dev/null +++ b/data/images/scalable/siso_component.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/images/scalable/timer_component.svg b/data/images/scalable/timer_component.svg new file mode 100644 index 0000000..d0068eb --- /dev/null +++ b/data/images/scalable/timer_component.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/RSFF.glc b/examples/RSFF.glc deleted file mode 100644 index b12f929..0000000 --- a/examples/RSFF.glc +++ /dev/null @@ -1,64 +0,0 @@ -version - author=3.1.0 - required=3.0 - -nor - position=70,70 - input_level=0,1 - output_level=0 - properties=tphl:0.0,tplh:0.0 - -nor - position=70,160 - input_level=0,0 - output_level=1 - properties=tphl:0.0,tplh:0.0 - -sw - position=10,170 - input_level= - output_level=0 - properties=initstate:0 - -sw - position=10,60 - input_level= - output_level=0 - properties=initstate:0 - -led - position=180,160 - input_level=1 - output_level= - properties= - -led - position=180,70 - input_level=0 - output_level= - properties= - -net - position=80,130,80,100 - -net - position=80,60,80,80 - -net - position=190,80,190,140 - -net - position=180,100,180,50 - -net - position=190,80,80,80 - -net - position=190,140,180,140 - -net - position=190,50,180,50 - -net - position=80,100,180,100 - diff --git a/examples/TFF-counter.glc b/examples/TFF-counter.glc deleted file mode 100644 index 0246fc1..0000000 --- a/examples/TFF-counter.glc +++ /dev/null @@ -1,129 +0,0 @@ -version - author=3.1.0 - required=3.0 - -tff - position=530,280 - input_level=0 - output_level=0,1 - matrix=1,0,0,1 - properties=trig:1,tphl:0.0,tplh:0.0 - -tff - position=430,300 - input_level=1 - output_level=0,1 - matrix=1,0,0,1 - properties=trig:1,tphl:0.0,tplh:0.0 - -tff - position=230,230 - input_level=1 - output_level=0,1 - matrix=1,0,0,1 - properties=trig:0,tphl:0.0,tplh:0.0 - -tff - position=330,210 - input_level=0 - output_level=1,0 - matrix=1,0,0,1 - properties=trig:0,tphl:0.0,tplh:0.0 - -tff - position=430,190 - input_level=1 - output_level=1,0 - matrix=1,0,0,1 - properties=trig:0,tphl:0.0,tplh:0.0 - -tff - position=530,170 - input_level=1 - output_level=0,1 - matrix=1,0,0,1 - properties=trig:0,tphl:0.0,tplh:0.0 - -7seg - position=630,230 - input_level=1,0,0,1 - output_level= - matrix=1,0,0,1 - properties=_red:0 - -tff - position=330,320 - input_level=1 - output_level=1,0 - matrix=1,0,0,1 - properties=trig:1,tphl:0.0,tplh:0.0 - -tff - position=230,340 - input_level=1 - output_level=1,0 - matrix=1,0,0,1 - properties=trig:1,tphl:0.0,tplh:0.0 - -7seg - position=630,340 - input_level=1,1,0,0 - output_level= - matrix=1,0,0,1 - properties=_red:2 - -sw - position=150,285 - input_level= - output_level=1 - matrix=1,0,0,1 - properties=initstate:0 - -net - position=340,200,340,190 - -net - position=440,180,440,170 - -net - position=540,160,540,150 - -net - position=640,220,340,220 - -net - position=440,200,640,200 - -net - position=640,180,540,180 - -net - position=340,330,640,330 - -net - position=640,310,440,310 - -net - position=540,290,640,290 - -net - position=540,270,540,260 - -net - position=440,290,440,280 - -net - position=340,310,340,300 - -net - position=220,320,220,265 - -net - position=240,320,220,320 - -net - position=220,265,220,210 - -net - position=220,210,240,210 - diff --git a/examples/adder.glc b/examples/adder.glc deleted file mode 100644 index a4e2187..0000000 --- a/examples/adder.glc +++ /dev/null @@ -1,506 +0,0 @@ -version - author=3.0.0 - required=2.6 - -sw - position=30,550 - input_level= - output_level=1 - matrix=1,0,0,1 - properties=initstate:0 - -sw - position=30,500 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:1 - -sw - position=30,450 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:1 - -sw - position=30,400 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:0 - -7seg - position=50,100 - input_level=0,0,0,1 - output_level= - matrix=1,0,0,1 - properties=_red:2 - -7seg - position=180,100 - input_level=0,0,0,1 - output_level= - matrix=1,0,0,1 - properties=_red:1 - -7seg - position=610,100 - input_level=0,0,1,0 - output_level= - matrix=1,0,0,1 - properties=_red:0 - -sw - position=160,400 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:0 - -sw - position=160,450 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:1 - -sw - position=160,500 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=initstate:0 - -sw - position=160,550 - input_level= - output_level=1 - matrix=1,0,0,1 - properties=initstate:1 - -and - position=400,220 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -and - position=400,270 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -and - position=400,350 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -and - position=400,400 - input_level=0,1 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=300,260 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=300,390 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=400,170 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=490,180 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=490,310 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=490,440 - input_level=0,1 - output_level=1 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -xor - position=490,550 - input_level=1,1 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -and - position=490,500 - input_level=1,1 - output_level=1 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -or - position=490,390 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -or - position=490,260 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 - -text - position=30,350 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:IN1 - -text - position=160,350 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:IN2 - -text - position=630,120 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:OUT \e IN1 + IN2 - -net - position=500,410,400,410 - -net - position=400,370,410,370 - -net - position=400,410,400,370 - -net - position=500,360,500,330 - -net - position=500,230,500,200 - -net - position=500,280,400,280 - -net - position=400,280,400,240 - -net - position=410,240,400,240 - -net - position=590,480,590,450 - -net - position=410,430,410,390 - -net - position=590,450,500,450 - -net - position=500,430,410,430 - -net - position=500,450,500,430 - -net - position=590,370,590,320 - -net - position=410,300,410,260 - -net - position=590,320,500,320 - -net - position=500,300,410,300 - -net - position=500,320,500,300 - -net - position=590,240,590,190 - -net - position=590,190,500,190 - -net - position=500,190,500,170 - -net - position=60,50,40,50 - -net - position=410,210,310,210 - -net - position=40,180,40,50 - -net - position=310,210,310,230 - -net - position=40,180,110,180 - -net - position=310,230,110,230 - -net - position=110,180,110,230 - -net - position=100,430,110,430 - -net - position=110,230,110,430 - -net - position=190,50,170,50 - -net - position=190,90,190,140 - -net - position=500,520,500,490 - -net - position=190,140,260,140 - -net - position=500,490,260,490 - -net - position=260,140,260,490 - -net - position=230,530,260,530 - -net - position=260,490,260,530 - -net - position=620,30,590,30 - -net - position=590,30,590,160 - -net - position=620,50,600,50 - -net - position=600,50,600,290 - -net - position=600,290,590,290 - -net - position=620,70,610,70 - -net - position=610,70,610,420 - -net - position=610,420,590,420 - -net - position=620,90,620,530 - -net - position=620,530,590,530 - -net - position=50,70,60,70 - -net - position=300,380,310,380 - -net - position=50,70,50,160 - -net - position=410,320,300,320 - -net - position=300,320,300,380 - -net - position=50,160,120,160 - -net - position=300,320,120,320 - -net - position=120,160,120,320 - -net - position=100,480,120,480 - -net - position=120,320,120,480 - -net - position=60,140,60,90 - -net - position=500,540,490,540 - -net - position=60,140,130,140 - -net - position=100,530,130,530 - -net - position=490,540,490,470 - -net - position=500,470,490,470 - -net - position=130,140,130,350 - -net - position=130,350,130,530 - -net - position=490,470,280,470 - -net - position=130,350,280,350 - -net - position=280,470,280,350 - -net - position=180,70,190,70 - -net - position=180,160,180,70 - -net - position=410,340,310,340 - -net - position=310,340,310,360 - -net - position=250,160,180,160 - -net - position=310,340,250,340 - -net - position=250,160,250,340 - -net - position=230,480,250,480 - -net - position=250,340,250,480 - -net - position=170,50,170,180 - -net - position=170,180,240,180 - -net - position=230,430,240,430 - -net - position=240,180,240,250 - -net - position=240,250,240,430 - -net - position=410,190,300,190 - -net - position=300,250,310,250 - -net - position=300,250,240,250 - -net - position=300,190,300,250 - -net - position=190,30,160,30 - -net - position=160,30,160,200 - -net - position=160,200,230,200 - -net - position=230,200,230,380 - -net - position=230,200,280,200 - -net - position=410,140,280,140 - -net - position=280,200,280,140 - -net - position=30,30,60,30 - -net - position=30,30,30,200 - -net - position=100,200,30,200 - -net - position=100,200,100,210 - -net - position=100,210,100,380 - -net - position=410,160,290,160 - -net - position=100,210,290,210 - -net - position=290,160,290,210 - diff --git a/examples/oscillators.glc b/examples/oscillators.glc deleted file mode 100644 index 5589934..0000000 --- a/examples/oscillators.glc +++ /dev/null @@ -1,114 +0,0 @@ -version - author=3.1.0 - required=3.0 - -osc - position=340,260 - input_level= - output_level=0 - matrix=1,0,0,1 - properties=period:2.5,shift:0.0,duration:80.0,initstate:0 - -osc - position=340,310 - input_level= - output_level=1 - matrix=1,0,0,1 - properties=period:2.4,shift:0.0,duration:80.0,initstate:0 - -probe - position=530,250 - input_level=0 - output_level= - matrix=1,0,0,1 - properties=name:Signal1 - -probe - position=530,300 - input_level=1 - output_level= - matrix=1,0,0,1 - properties=name:Signal2 - -probe - position=530,350 - input_level=0 - output_level= - matrix=1,0,0,1 - properties=name:AND - -probe - position=530,400 - input_level=1 - output_level= - matrix=1,0,0,1 - properties=name:XOR - -xor - position=440,410 - input_level=0,0 - output_level=1 - matrix=1,0,0,1 - properties=inputs:2.0,tphl:0.0,tplh:0.0 - -and - position=440,360 - input_level=0,0 - output_level=0 - matrix=1,0,0,1 - properties=inputs:2.0,tphl:0.0,tplh:0.0 - -text - position=330,220 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:T\e0.25µs - -text - position=330,330 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:T\e0.24µs - -text - position=410,220 - input_level= - output_level= - matrix=1,0,0,1 - properties=text:Duration\e80µs - -net - position=540,290,410,290 - -net - position=410,400,450,400 - -net - position=410,290,410,350 - -net - position=410,350,410,400 - -net - position=450,350,410,350 - -net - position=450,380,430,380 - -net - position=450,330,430,330 - -net - position=430,380,430,330 - -net - position=430,240,540,240 - -net - position=430,330,430,240 - -net - position=410,240,430,240 - diff --git a/ggate/Components/LogicGates/Calculator.py b/ggate/Components/LogicGates/Calculator.py index 41bf978..e58605e 100644 --- a/ggate/Components/LogicGates/Calculator.py +++ b/ggate/Components/LogicGates/Calculator.py @@ -1,8 +1,8 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from gettext import gettext as _ -from ggate.const import definitions as const from ggate import Preference +from ggate.const import definitions as const from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from .SystemComponents import BaseComponent diff --git a/ggate/Components/LogicGates/Counters/ModNCounter.py b/ggate/Components/LogicGates/Counters/ModNCounter.py index f345e66..7349a1b 100644 --- a/ggate/Components/LogicGates/Counters/ModNCounter.py +++ b/ggate/Components/LogicGates/Counters/ModNCounter.py @@ -1,5 +1,5 @@ from ggate import Preference -from ggate.Components.LogicGates.SystemComponents import BaseComponent +from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh from ggate.const import definitions as const @@ -38,7 +38,8 @@ def __init__(self, *args, **kwds): def propertyChanged(self, prop): if prop[0] > 2 ** prop[1]: - return True + return PropertyError(f"N must be less than 2^bits ({2 ** prop[1]})", [0]) + self.outpin_t = -40 - (prop[1] - 1) * 10 self.outpin_b = -40 + (prop[1] - 1) * 10 self.comp_rect = [10, min((self.outpin_t - 10, -60)), 120, max((self.outpin_b + 10, -20))] diff --git a/ggate/Components/LogicGates/Miscellaneous/Probe.py b/ggate/Components/LogicGates/Miscellaneous/Probe.py index ee46dc6..6bd5a10 100644 --- a/ggate/Components/LogicGates/Miscellaneous/Probe.py +++ b/ggate/Components/LogicGates/Miscellaneous/Probe.py @@ -1,5 +1,5 @@ from ggate import Preference -from ggate.Components.LogicGates.SystemComponents import BaseComponent +from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError from ggate.Utils import cairo_draw_text, cairo_paths from ggate.const import definitions from gi.repository import Pango @@ -25,9 +25,7 @@ def __init__(self, *args, **kwds): self.width = 12 def propertyChanged(self, prop): - if prop[0] == "": - return True - return False + return PropertyError("Name cannot be empty.", [0]) if prop[0] == "" else False def drawComponent(self, cr, layout): cr.arc(40, -10, 10, 0, 2 * math.pi) diff --git a/ggate/Components/LogicGates/Miscellaneous/Text.py b/ggate/Components/LogicGates/Miscellaneous/Text.py index 2282794..a2628ab 100644 --- a/ggate/Components/LogicGates/Miscellaneous/Text.py +++ b/ggate/Components/LogicGates/Miscellaneous/Text.py @@ -1,4 +1,4 @@ -from ggate.Components.LogicGates.SystemComponents import BaseComponent +from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError from ggate.Utils import Pango, cairo_draw_text from ggate.const import definitions from gi.repository import Pango @@ -19,9 +19,7 @@ def __init__(self, *args, **kwds): self.height = 12 def propertyChanged(self, prop): - if prop[0] == "": - return True - return False + return PropertyError("Name cannot be empty.", [0]) if prop[0] == "" else False def drawComponent(self, cr, layout): cairo_draw_text(cr, layout, self.values[0], 10, -10, 0.0, 0.5) diff --git a/ggate/Components/LogicGates/SystemComponents.py b/ggate/Components/LogicGates/SystemComponents.py index 07c7370..e23443c 100644 --- a/ggate/Components/LogicGates/SystemComponents.py +++ b/ggate/Components/LogicGates/SystemComponents.py @@ -2,9 +2,15 @@ from abc import ABC, abstractmethod from gettext import gettext as _ +from typing import List from gi.repository import Pango import cairo +class PropertyError: + def __init__(self, message: str, positions: List[int] = None): + self.positions = positions if positions is not None else [] + self.message = message + class BaseComponent(ABC): def __init__(self, *args, **kwds): self.description = "" @@ -89,7 +95,7 @@ def set_rot_props(self): def click(self, x, y, time): return False - def propertyChanged(self, prop): + def propertyChanged(self, prop) -> False | PropertyError: return False def initialize(self): diff --git a/ggate/Components/Managers/Alerts.py b/ggate/Components/Managers/Alerts.py index 01fabe3..f589ee2 100644 --- a/ggate/Components/Managers/Alerts.py +++ b/ggate/Components/Managers/Alerts.py @@ -3,7 +3,7 @@ if TYPE_CHECKING: from ggate.MainFrame import MainFrame -from gi.repository import Gtk, Adw +from gi.repository import Adw # TODO: translations diff --git a/ggate/Components/Managers/Exporter.py b/ggate/Components/Managers/Exporter.py index d1d5204..7852559 100644 --- a/ggate/Components/Managers/Exporter.py +++ b/ggate/Components/Managers/Exporter.py @@ -7,5 +7,3 @@ class Exporter: def __init__(self, mainframe: MainFrame): self.mainframe = mainframe - - \ No newline at end of file diff --git a/ggate/Components/Windows/About.py b/ggate/Components/Windows/About.py new file mode 100644 index 0000000..5369600 --- /dev/null +++ b/ggate/Components/Windows/About.py @@ -0,0 +1,28 @@ +from ggate.const import Definitions +from ggate.config import APP_PREFIX, VERSION +from gi.repository import Adw + +class AboutGGate: + @staticmethod + def create() -> Adw.AboutDialog: + about_dialog = Adw.AboutDialog.new() + about_dialog.set_version(VERSION) + about_dialog.set_application_icon(APP_PREFIX) + about_dialog.set_application_name(Definitions.app_name) + about_dialog.set_comments(Definitions.description) + about_dialog.set_copyright(Definitions.copyright) + about_dialog.set_website(Definitions.website) + about_dialog.set_license_type(Definitions.license) + about_dialog.set_developers(Definitions.developer) + about_dialog.set_issue_url(Definitions.devel_bug) + about_dialog.set_comments(Definitions.description) + about_dialog.set_developer_name(Definitions.developer_name) + + # TODO: Add support for release notes and other features + # about_dialog.set_website() + # about_dialog.set_release_notes() + # about_dialog.set_support_url() + # about_dialog.set_debug_info() + # about_dialog.set_debug_info_filename() + + return about_dialog diff --git a/ggate/PreferencesWindow.py b/ggate/Components/Windows/Preferences.py similarity index 99% rename from ggate/PreferencesWindow.py rename to ggate/Components/Windows/Preferences.py index 12ab9b8..61bbba4 100644 --- a/ggate/PreferencesWindow.py +++ b/ggate/Components/Windows/Preferences.py @@ -4,7 +4,6 @@ from gi.repository import Gtk, Gdk from gettext import gettext as _ - class PreferencesWindow(Gtk.Dialog): def __init__(self, parent): Gtk.Dialog.__init__( diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py new file mode 100644 index 0000000..2ab6620 --- /dev/null +++ b/ggate/Components/Windows/Properties.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- + +from typing import Optional +from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError +from ggate.const import Definitions, definitions as const +from gi.repository import Gtk, GObject, Adw +from gettext import gettext as _ + +class PropertyWindow(Adw.Dialog): + __gsignals__ = { + "property-changed": (GObject.SIGNAL_RUN_FIRST, None, ()), + "window-hidden": (GObject.SIGNAL_RUN_LAST, None, ()), + } + + def on_window_delete(self, *args): + self.emit("window-hidden") + + def __init__(self): + self.title = _("Properties") + + Adw.Dialog.__init__(self, title=self.title) + self.set_size_request(310, -1) + + self.prop_controls = [] + self.old_values = [] + self.content_box: Gtk.Box = None + self.banner: Adw.Banner = None + + self.set_content_width(350) + self.connect("close-request", self.on_window_delete) + + def _set_invalid_state(self, positions): + for idx, ctrl in enumerate(self.prop_controls): + if idx in positions: + ctrl.add_css_class("error") + else: + ctrl.remove_css_class("error") + + def on_apply_btn_clicked(self, *widget): + values = [] + property_index = 0 + + if self.component is None: + return + + for property in self.component.properties: + if isinstance(property[1], tuple): + if property[1][0] == const.property_select: + values.append(self.prop_controls[property_index].get_selected()) + + elif property[1][0] == const.property_int: + values.append(int(self.prop_controls[property_index].get_value())) + + elif property[1][0] == const.property_float: + values.append(self.prop_controls[property_index].get_value()) + + else: + values.append(self.prop_controls[property_index].get_text()) + + elif property[1] == const.property_bool: + values.append(self.prop_controls[property_index].get_active()) + + else: + property_index -= 1 + + property_index += 1 + + valid_property_spec = self.component.propertyChanged(values) + + if valid_property_spec is not False and isinstance(valid_property_spec, PropertyError) and self.banner is not None: + message = valid_property_spec.message + property_pos = valid_property_spec.positions + self.banner.set_title(message) + self.banner.set_revealed(True) + self._set_invalid_state(property_pos) + else: + self.component.values = values + self.component.set_rot_props() + self.banner.set_revealed(False) + self._set_invalid_state([]) + + self.emit("property-changed") + + def show_properties(self, component: Optional[BaseComponent]): + if component is None: + return + + self.component = component + if self.vbox is not None: + self.set_child(None) + + self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.header_bar = Adw.HeaderBar() + self.header_bar.set_show_start_title_buttons(False) + self.header_bar.set_decoration_layout("close") + + self.set_title("%s - %s" % (self.title, component.description)) + + if len(component.properties) == 0: + status_page = Adw.StatusPage( + title="No properties", + description="This component has no editable properties.", + ) + + self.set_child(status_page) + return + + property_idx = 0 + group_location = 0 + + # Create property editor + self.prop_controls = [] + + # Property Groups + groups = [] + + for property in component.properties: + has_property = True + + if property[1] == Definitions.property_bool: + ctrl = Adw.SwitchRow(title=property[0]) + ctrl.set_active(component.values[property_idx]) + ctrl.connect("notify::active", self.on_apply_btn_clicked) + + elif isinstance(property[1], tuple): + if property[1][0] == const.property_select: + ctrl = Adw.ComboRow(title=property[0]) + model = Gtk.StringList.new(property[1][1:]) + + ctrl.set_model(model) + ctrl.set_selected(self.component.values[property_idx]) + ctrl.set_enable_search(True) + ctrl.connect("changed", self.on_apply_btn_clicked) + + elif property[1][0] == const.property_int: + ctrl = Adw.SpinRow.new_with_range( + property[1][1], + property[1][2], + 1.0 + ) + + ctrl.set_digits(0) + ctrl.set_numeric(True) + ctrl.set_title(property[0]) + ctrl.set_value(component.values[property_idx]) + ctrl.connect("changed", self.on_apply_btn_clicked) + + elif property[1][0] == const.property_float: + floating_points = property[1][3] if property[1][3] < 3 else 2 + ctrl = Adw.SpinRow.new_with_range( + property[1][1], + property[1][2], + floating_points + ) + + ctrl.set_numeric(True) + ctrl.set_title(property[0]) + ctrl.set_value(component.values[property_idx]) + ctrl.connect("changed", self.on_apply_btn_clicked) + + else: + ctrl = Adw.EntryRow( + title=property[0], + text=component.values[property_idx] + ) + + ctrl.set_width_chars(property[1][1]) + ctrl.connect("changed", self.on_apply_btn_clicked) + + else: + property_idx -= 1 + group_location += 1 + has_property = False + + # Create initial group if it doesn't exist + if group_location >= len(groups) and has_property: + group = Adw.PreferencesGroup.new() + group.set_title(property[2]) + group.set_description(property[0]) + groups.append(group) + + # Set current group to the previous one + elif has_property: + self.prop_controls.append(ctrl) + + group = groups[group_location] + group.add(ctrl) + + # Create a new group + elif not has_property: + group = Adw.PreferencesGroup.new() + group.set_title(property[2]) + group.set_description(property[0]) + groups.append(group) + + # Update the property index + property_idx += 1 + + self.banner = Adw.Banner() + self.banner.set_revealed(False) + + preference_page = Adw.PreferencesPage.new() + + # Add all groups to the preference page + for group in groups: + if group.get_children(): + preference_page.add(group) + + self.vbox.append(self.header_bar) + self.vbox.append(self.banner) + self.vbox.append(preference_page) + self.set_child(self.vbox) + + self.present() \ No newline at end of file diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py new file mode 100644 index 0000000..9f94dd8 --- /dev/null +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -0,0 +1,328 @@ +from decimal import Decimal +import math +from typing import TYPE_CHECKING + +import cairo + +from ggate import Preference +from ggate.Utils import cairo_draw_text, cairo_paths, number_in_range +from ggate.const import Definitions + +if TYPE_CHECKING: + from ggate.MainFrame import MainFrame + +from gi.repository import Gtk, Gdk, PangoCairo, Pango + + +class TimingGraphDiagram(Gtk.ScrolledWindow): + def __get_timing(self): + return self.timing_units[self.timing_unit] + + def __get_probes(self): + return [ + cmp + for cmp in self._circuit.components + if cmp[0] == Definitions.component_probe + ] + + def __queue_draw(self): + self.name_area.queue_draw() + self.chart_area.queue_draw() + + def __init__(self, parent: MainFrame): + Gtk.ScrolledWindow.__init__(self) + + self.layout_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + + self._circuit = parent.circuit + self._parent_drawarea = parent.drawarea + + self.name_area = Gtk.DrawingArea() + self.chart_area = Gtk.DrawingArea() + + self.name_area_surface: cairo.ImageSurface = None + self.chart_area_surface: cairo.ImageSurface = None + + # Seperate scrolling box so the name part is floating + self.timing_scroll_window = Gtk.ScrolledWindow() + self.timing_scroll_window.set_vexpand(True) + self.timing_scroll_window.set_hexpand(True) + self.timing_scroll_window.set_child(self.chart_area) + + self.scroll_hadj = self.timing_scroll_window.get_hadjustment() + self.scroll_vadj = self.timing_scroll_window.get_vadjustment() + + self.layout_box.append(self.name_area) + self.layout_box.append(self.timing_scroll_window) + self.set_child(self.layout_box) + + controller = Gtk.EventControllerMotion() + controller.connect("motion", self.on_timing_diagram_motion) + self.chart_area.add_controller(controller) + + controller = Gtk.GestureClick() + controller.set_button(Gdk.BUTTON_PRIMARY) + controller.connect("pressed", self.on_timing_diagram_click) + self.chart_area.add_controller(controller) + + # Sizings + self._section_height = 45 + self._name_area_width = 100 + + # Timing + self.start_time = 0 + self.end_time = 0.1 + + # x and y padding + self._paddings = { "x": 10, "y": 15 } + + # Timing units + self.timing_unit = 2 + self.timing_units = [ + { "unit": "ms", "scale": 10 ** 3 }, + { "unit": "µs", "scale": 10 ** 6 }, + { "unit": "ns", "scale": 10 ** 9 }, + ] + + # Graduations + self.gra_pix = 150 + self.scale = 5_000_000 # px/sec + + # Cursor + self.visible_cursor = { + "x": 0, + "y": 0, + "oldX": 0, + "oldY": 0, + } + + # Layout sizing + self.diagram_area_size = { "width": 0, "height": 0 } + + def name_area_draw_fn(self, widget, cr: cairo.Context, *args): + if self.name_area_surface is None: return # noqa: E701 + cr.set_source_surface(self.name_area_surface) + cr.paint() + + def chart_area_draw_fn(self, widget, cr: cairo.Context, *args): + if self.chart_area_surface is None: return # noqa: E701 + cr.set_source_surface(self.chart_area_surface) + cr.paint() + self._draw_cursor(cr) + + def on_timing_diagram_click(self, _, event, *args): + if event[0] != Gdk.BUTTON_PRIMARY: return # noqa: E701 + if not number_in_range( + self.visible_cursor["y"], + self._section_height, + self.diagram_area_size["height"] + ): return # noqa: E701 + + current_time = self.visible_cursor["x"] / self.scale + self.start_time + self._circuit.current_time = current_time + self._circuit.revert_state() + self.__queue_draw() + + def on_timing_diagram_motion(self, controller, x_axis, y_axis, *args): + self.visible_cursor["oldX"] = self.visible_cursor["x"] + self.visible_cursor["oldY"] = self.visible_cursor["y"] + + self.visible_cursor["x"] = x_axis + self.visible_cursor["y"] = x_axis + + def _draw_cursor(self, cr: cairo.Context): + start = (self.visible_cursor["x"], self._section_height) + end = (self.visible_cursor["x"], self.diagram_area_size["height"]) + # TODO: set color for stroke path + cairo_paths(cr, start, end) + cr.stroke() + pass + + def _draw_names(self, cr: cairo.Context): + name_layout = PangoCairo.create_layout(cr) + name_layout.set_font_description(Preference.drawing_font) + timing_unit = self.__get_timing()["unit"] + probes = self.__get_probes() + + current_height = 0 + + # TODO: Fill the border at the right side of the name area + # cr.set_source_rgba() + + # Create a 1px border on the right side of the name area + cr.rectangle(self._name_area_width, 0, 1, self.name_area.get_allocated_height()) + cr.fill() + + # Draw heading top + cairo_draw_text( + cr, name_layout, + f"Probes / Time ({timing_unit})", + self._paddings["x"], + self._paddings["y"], + ) + + # Draw the headings bottom border + current_height += self._section_height + cairo_paths( + cr, (0, current_height), + (self._name_area_width, current_height) + ) + + # TODO: Stroke the divisions the border color + # cr.set_source_rgba() + + # Draw divisions + for probe in probes: + current_height += self._section_height + cairo_paths(cr, (0, current_height), (self._name_area_width, current_height)) + cr.stroke() + + # TODO: Set the color for the text + # cr.set_source_rgba() + + # Draw the names of the probes + for probe in probes: + probe_name = probe[1].values[0] + cairo_draw_text( + cr, name_layout, probe_name, + self._paddings["x"], + current_height + self._paddings["y"], + ) + current_height += self._section_height + cr.fill() + + def _draw_graduations(self, cr: cairo.Context, layout: Pango.Layout): + # Graduation interval calculation (same as before) + gra_interval = Decimal(self.gra_pix) / Decimal(self.scale) + order = 10 ** Decimal(int(math.log10(gra_interval))) + normalized = gra_interval / order + unit_scale = self.__get_timing()["scale"] + + if 0.15 <= normalized < 0.35: + gra_interval = order * Decimal("0.2") + elif 0.35 <= normalized <= 0.75: + gra_interval = order * Decimal("0.5") + else: + gra_interval = order * Decimal("0.1") + + u_end_time = self.end_time * unit_scale + u_gra_interval = gra_interval * unit_scale + + # TODO: Set color --- Start drawing ticks + # cr.set_source_rgb(0.0, 0.0, 0.0) + + tick_time = Decimal(0) + u_tick_time = Decimal(0) + + while u_tick_time <= Decimal(u_end_time): + tick_x = float(tick_time) * self.scale + 0.5 + + if tick_x >= 0 and tick_x <= self.diagram_width: + # Draw vertical graduation line + cr.set_source_rgb(0.5, 0.5, 0.5) + cairo_paths(cr, (int(tick_x), 39), (int(tick_x), self.img_height - 1)) + cr.stroke() + + # Draw label + cr.set_source_rgb(0.0, 0.0, 0.0) + label = str(Decimal(u_tick_time).quantize(Decimal(".00"))) + cairo_draw_text(cr, layout, label, tick_x, 35, 0.5, 1.0) + cr.fill() + + # Advance + tick_time += gra_interval + u_tick_time += u_gra_interval + + + def _draw_graph(self, cr: cairo.Context): + diagram_layout = PangoCairo.create_layout(cr) + diagram_layout.set_font_description(Preference.drawing_font) + self._draw_graduations(cr, diagram_layout) + + # vertical space between signals + signal_spacing = self._section_height + + # height between high and low state + signal_height = self._section_height - self._paddings["y"] * 2 + + # subpixel offset for crisp rendering + line_offset = 0.5 + + # to avoid overlapping transition with horizontal lines + transition_padding = 0.5 + + history = self._circuit.probe_levels_history + for i, current_frame in enumerate(history[:-1]): + next_frame = history[i + 1] + t0, t1 = current_frame[0], next_frame[0] + + # Skip if this frame is entirely outside the visible time window + if t1 <= self.start_time or self.end_time < t0: + continue + + signal_start_x = round((t0 - self.start_time) * self.scale) + signal_end_x = round((t1 - self.start_time) * self.scale) + 1 + transition_x = round((t1 - self.start_time) * self.scale) + line_offset + + for j, level in enumerate(current_frame[1:]): + base_y = j * signal_spacing + y_high = base_y + line_offset + y_low = base_y + signal_height + line_offset + + y = y_high if level else y_low + cairo_paths(cr, (signal_start_x, y), (signal_end_x, y)) + + # Draw vertical line at transition point if level changes + if level != next_frame[j + 1]: + cairo_paths( + cr, + (transition_x, y_high + transition_padding), + (transition_x, y_low - transition_padding) + ) + + # removed logic for drawing to end of draw area + cr.stroke() + + def draw(self): + probe_amount = len(self.__get_probes()) + # Calculate the draw height and add a little space + draw_height = (self._section_height * probe_amount) + (self._section_height * 2.5) + draw_width = max(1, (self.end_time - self.start_time) * self.scale) + + # Create the image surface + name_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, self._name_area_width, draw_height) + chart_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, draw_width, draw_height) + + # Create image ctx + name_cr_ctx = cairo.Context(name_surface) + chart_cr_ctx = cairo.Context(chart_surface) + + # Set the line width + name_cr_ctx.set_line_width(1.0) + chart_cr_ctx.set_line_width(1.0) + + # Set the size request of the name & timing diagram area + self.name_area.set_size_request(self._name_area_width, draw_height) + self.chart_area.set_size_request(draw_width, draw_height) + + # Save the context + self.name_area_surface = name_surface + self.chart_area_surface = chart_surface + self.diagram_area_size = { + "width": draw_width, + "height": draw_height + } + + # Start drawings + self._draw_names(name_cr_ctx) + self._draw_graph(chart_cr_ctx) + + self.queue_draw() + + + + + + + + diff --git a/ggate/Components/Windows/TimingGraph/Display.py b/ggate/Components/Windows/TimingGraph/Display.py new file mode 100644 index 0000000..2db67e0 --- /dev/null +++ b/ggate/Components/Windows/TimingGraph/Display.py @@ -0,0 +1,13 @@ +from typing import TYPE_CHECKING +from gi.repository import Gtk, Adw, Gdk + +if TYPE_CHECKING: + from ggate.MainFrame import MainFrame + from ggate.CircuitManager import CircuitManager + +class TimingGraphDisplayWindow (Adw.Dialog): + def __init__(self, parent: MainFrame): + Adw.Dialog.__init__(self, can_close=True) + + self.header_bar = Gtk.HeaderBar() + \ No newline at end of file diff --git a/ggate/Components/__init__.py b/ggate/Components/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ggate/DiagramArea.py b/ggate/DiagramArea.py index ffe4585..6aaddda 100644 --- a/ggate/DiagramArea.py +++ b/ggate/DiagramArea.py @@ -9,14 +9,13 @@ from gi.repository import Gtk, Gdk, PangoCairo from gettext import gettext as _ - -class DiagramArea(Gtk.Box): +class TimingDiagramArea(Gtk.Box): def __init__(self, circuit, drawarea): Gtk.Box.__init__(self) self.circuit = circuit self.drawarea = drawarea - self.scale = 5000000 # pix/sec + self.scale = 5_000_000 # pix/sec self.start_time = 0.0 self.end_time = 0.0002 self.diagram_unit = 1 # 0: ns, 1: µs, 2: ms @@ -150,7 +149,6 @@ def on_diagram_area_button_press_secondary(self, controller, *events): self.move_start_y = y_axis def on_diagram_area_button_release_primary(self, widget, *event): - if event[0] == Gdk.BUTTON_PRIMARY: self.mouse_down = False if 39 <= self.cursor_y < self.img_height: diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 9dc618e..0cc4017 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -16,8 +16,8 @@ from ggate.DrawArea import DrawArea from ggate.ComponentView import ComponentView from ggate.CircuitManager import CircuitManager -from ggate.PropertyWindow import PropertyWindow -from ggate.PreferencesWindow import PreferencesWindow +from ggate.Components.Windows.Properties import PropertyWindow +from ggate.Components.Windows.Preferences import PreferencesWindow from ggate import Preference from ggate.Components.LogicGates import logic_gates @@ -89,24 +89,6 @@ def __init__(self, *args, **kwargs): # Preferences window self.pref_window = PreferencesWindow(self) - # About dialog - self.about_dialog = Gtk.AboutDialog() - picture = Gdk.Texture.new_for_pixbuf( - GdkPixbuf.Pixbuf.new_from_file(config.DATADIR + "/images/ggate.png") - ) - self.about_dialog.set_logo(picture) - self.about_dialog.set_program_name(const.app_name) - self.about_dialog.set_version(config.VERSION) - self.about_dialog.set_comments(const.description) - self.about_dialog.set_copyright(const.copyright) - self.about_dialog.set_website(const.website) - self.about_dialog.set_license(const.license) - self.about_dialog.set_authors(const.developer) - - tr_credits = _("translator-credits") - if tr_credits != "translator-credits": - self.about_dialog.set_translator_credits(tr_credits) - self.clipboard = self.get_clipboard() if len(sys.argv) >= 2: diff --git a/ggate/PropertyWindow.py b/ggate/PropertyWindow.py deleted file mode 100644 index 01ddd4d..0000000 --- a/ggate/PropertyWindow.py +++ /dev/null @@ -1,240 +0,0 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- - -from typing import Optional -from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.const import definitions as const -from gi.repository import Gtk, GObject -from gettext import gettext as _ - - -class PropertyWindow(Gtk.Dialog): - __gsignals__ = { - "property-changed": (GObject.SIGNAL_RUN_FIRST, None, ()), - "window-hidden": (GObject.SIGNAL_RUN_LAST, None, ()), - } - - def __init__(self): - self.title = _("Properties") - - Gtk.Window.__init__(self, title=self.title) - self.set_resizable(True) - self.set_size_request(310, -1) - self.prop_controls = [] - self.old_values = [] - self.vbox: Gtk.Box = None - - self.connect("close-request", self.on_window_delete) - - def on_apply_btn_clicked(self, setter=False, *widget): - values = [] - i = 0 - - if self.component is None: - return - - for p in self.component.properties: - if isinstance(p[1], tuple): - if p[1][0] == const.property_select: - values.append(self.prop_controls[i].get_active()) - - elif p[1][0] == const.property_int: - values.append(int(self.prop_controls[i].get_value())) - self.prop_controls[i].update() - - elif p[1][0] == const.property_float: - values.append(self.prop_controls[i].get_value()) - self.prop_controls[i].update() - - else: - values.append(self.prop_controls[i].get_text()) - elif p[1] == const.property_bool: - values.append(self.prop_controls[i].get_active()) - else: - i -= 1 - i += 1 - - if self.component.propertyChanged(values): - - def _response(widget, *args): - widget.close() - - dialog = Gtk.MessageDialog() - dialog.set_transient_for(self) - dialog.set_modal(True) - dialog.add_button("Ok", Gtk.ButtonsType.OK) - dialog.set_markup(_("Set values are invalid.")) - - dialog.present() - dialog.connect("response", _response) - - else: - self.component.values = values - self.component.set_rot_props() - - self.emit("property-changed") - - def set_component(self, component: Optional[BaseComponent]): - if component is None: - return - - self.component = component - if self.vbox is not None: - self.set_child(None) - - self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - if component is None: - label = Gtk.Label(label=_("Please select a component to edit properties.")) - label.set_vexpand(True) - label.set_hexpand(True) - label.set_margin_bottom(15) - label.set_margin_top(15) - label.set_margin_end(15) - label.set_margin_start(15) - - self.vbox.append(label) - self.set_title(self.title) - - else: - self.set_title("%s - %s" % (self.title, component.description)) - - if len(component.properties) != 0: - layout = Gtk.ListBox() - i = 0 - - # Create property editor - self.prop_controls = [] - for p in component.properties: - has_property = True - - caption = Gtk.Label(label=p[0]) - caption.set_margin_start(2) - caption.set_margin_top(1) - - if isinstance(p[1], tuple): - if p[1][0] == const.property_select: - ctrl = Gtk.ComboBoxText() - choices = p[1][1:] - for choice in choices: - ctrl.append_text(choice) - ctrl.set_active(self.component.values[i]) - ctrl.set_halign(Gtk.Align.START) - ctrl.set_hexpand(True) - ctrl.connect("changed", self.on_apply_btn_clicked) - - elif p[1][0] == const.property_int: - ctrl = Gtk.SpinButton() - ctrl.set_increments(1, 10) - ctrl.set_halign(Gtk.Align.START) - ctrl.set_hexpand(True) - ctrl.set_range(p[1][1], p[1][2]) - ctrl.set_value(component.values[i]) - ctrl.connect("value-changed", self.on_apply_btn_clicked) - # ctrl.set_size_request(p[1][3], -1) - - elif p[1][0] == const.property_float: - ctrl = Gtk.SpinButton() - ctrl.set_increments(1, 10) - ctrl.set_halign(Gtk.Align.START) - ctrl.set_hexpand(True) - ctrl.set_range(p[1][1], p[1][2]) - ctrl.set_digits(p[1][3] if p[1][3] < 3 else 2) - ctrl.set_value(component.values[i]) - ctrl.connect("value-changed", self.on_apply_btn_clicked) - # ctrl.set_size_request(p[1][4], -1) - - else: - ctrl = Gtk.Entry() - ctrl.set_text(component.values[i]) - ctrl.set_halign(Gtk.Align.START) - ctrl.set_hexpand(True) - ctrl.connect("activate", self.on_apply_btn_clicked) - ctrl.set_width_chars(p[1][1]) - - # Setup Boolean properties - elif p[1] == const.property_bool: - ctrl = Gtk.CheckButton("") - ctrl.set_halign(Gtk.Align.START) - ctrl.set_hexpand(True) - ctrl.set_active(component.values[i]) - ctrl.connect("toggled", self.on_apply_btn_clicked) - - else: - i -= 1 - ctrl = Gtk.Label(label="") - has_property = False - i += 1 - - propbox = Gtk.ListBoxRow() - propbox.set_activatable(False) - - ctrl.set_margin_top(3) - ctrl.set_margin_bottom(3) - ctrl.set_margin_end(3) - ctrl.set_halign(Gtk.Align.START) - ctrl.set_size_request(60, -1) - - if has_property: - self.prop_controls.append(ctrl) - - _label = Gtk.Label(label=p[2]) - _label.set_margin_top(3) - _label.set_margin_bottom(3) - _label.set_margin_start(3) - _label.set_margin_end(3) - - if isinstance(ctrl, Gtk.Label): - if ctrl.get_text() == "": - caption = Gtk.Label() - caption.set_markup(f"{p[0]}") - caption.set_margin_top(5) - caption.set_margin_bottom(5) - caption.set_margin_start(2) - caption.set_margin_end(2) - - _list_prop_row = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - _list_prop_row.append(ctrl) - - _list_prop_row.append(_label) - # _list_prop_row.set_halign(Gtk.Align.START) - _list_prop_row.set_hexpand(True) - caption.set_hexpand(True) - - _list_box_row = Gtk.Box() - _list_box_row.append(caption) - _list_box_row.append(_list_prop_row) - - caption.set_size_request(100, -1) - - _list_prop_row.set_size_request(90, -1) - - propbox.set_child(_list_box_row) - layout.append(propbox) - - frame = Gtk.Frame() - frame.set_child(layout) - layout.add_css_class("view") - layout.add_css_class("rich-list") - layout.set_selection_mode(Gtk.SelectionMode.NONE) - self.vbox.append(frame) - - frame.set_margin_top(10) - frame.set_margin_bottom(10) - frame.set_margin_start(10) - frame.set_margin_end(10) - - else: - _label = Gtk.Label(label=_("This component has no property.")) - self.vbox.append(_label) - _label.set_margin_top(15) - _label.set_margin_end(15) - _label.set_margin_start(15) - _label.set_margin_bottom(15) - - # self.on_apply_btn_clicked(True) - - self.set_child(self.vbox) - self.vbox.show() - self.queue_resize() - - def on_window_delete(self, *args): - self.emit("window-hidden") diff --git a/ggate/config.py b/ggate/config.py index 392aa84..33ca4ae 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -3,6 +3,7 @@ DATADIR = '/'.join(__file__.split("/")[:-1]) + '/' VERSION = "4.0.0" +APP_PREFIX = "org.astralco.GGate" compatibility = { "version": VERSION, @@ -10,7 +11,6 @@ } def is_compatible(target: str) -> int: - print(target, compatibility["required"]) if Version(target) < Version(compatibility["required"]): return -1 # Lower version needed elif Version(target) > Version(compatibility["version"]): diff --git a/ggate/const.py b/ggate/const.py index 7c595f0..acab9ef 100644 --- a/ggate/const.py +++ b/ggate/const.py @@ -3,12 +3,27 @@ import os import gettext from gettext import gettext as _ +from gi.repository import Gtk gettext.textdomain("ggate") class DefinitionError(TypeError): pass +_licence_string = """GGate is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +GGate is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see .""" + + class Definitions(object): def __setattr__(self, name, value): if name in self.__dict__: @@ -67,29 +82,24 @@ def __setattr__(self, name, value): psfile_text = _("Post Script (*.ps)") anyfile_text = _("All files") + developer_name = "Ekure Edem" + developer_email = "ekureedem480@gmail.com" + config_path = os.path.join(os.path.expanduser("~"), ".config/ggate") app_name = _("GGate") - description = _( - "GGate is a logic circuit simulator developed with GTK+ and Python.") - copyright = "Copyright © 2012 - 2022 Koichi Akabe" - developer = ["Koichi Akabe ", - 'Ekure Edem '] - website = "https://launchpad.net/ggate" + description = _("GGate is a logic circuit simulator developed with GTK+ and Python.") + copyright = "Copyright © 2022 - 2025 Ekure Edem" + developer = [ + "Koichi Akabe ", + f"{developer_name} <{developer_email}>" + ] + + website = "https://github.com/astraldev/GGate" help = "help:ggate" - license = """GGate is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -GGate is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see .""" + license = Gtk.License.GPL_3_0 devel_bug = "https://github.com/astraldev/GGate/issues/new" + licence_string = _licence_string definitions = Definitions \ No newline at end of file diff --git a/gnd.svg b/gnd.svg deleted file mode 100644 index 7d5a1e5..0000000 --- a/gnd.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..a685dc8 --- /dev/null +++ b/meson.build @@ -0,0 +1,50 @@ +project( + 'ggate', + version: '5.0.0', + meson_version: '>= 0.62.0', + default_options: [ + 'warning_level=2', + 'werror=false', + ], +) + +dependency('gtk4', version: '>= 4.18.0') +dependency('libadwaita-1', version: '>= 1.8.alpha') + +gnome = import('gnome') +python = import('python') + +py_installation = python.find_installation('python3', + required: true, + modules: [ + ['pycairo', '>= 1.27.0, < 2.0.0'], + ['gi', '>= 3.52.3, < 4.0.0'], + ['packaging', '>= 24.2, < 25.0'], + ['igraph', '>= 0.11.9, < 0.12.0'], + ['shapely', '== 2.1.1'], + ] +) + +pkgdatadir = get_option('prefix') / get_option('datadir') / meson.project_name() + +profile = get_option('profile') +if profile == 'development' + app_id = 'org.astralco.GGate.Dev' + prefix = '/org/astralco/GGate/Dev' +elif profile == 'release' + app_id = 'org.astralco.GGate' + prefix = '/org/astralco/GGate' +endif + +conf = configuration_data() +conf.set('PYTHON', python.find_installation('python3').full_path()) +conf.set('VERSION', meson.project_version()) +conf.set('bindir', get_option('bindir')) + +subdir('bin') + +gnome.post_install( + glib_compile_schemas: true, + gtk_update_icon_cache: true, + update_desktop_database: true, +) \ No newline at end of file diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..991df38 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,9 @@ +option( + 'profile', + type: 'combo', + choices: [ + 'release', + 'development', + ], + value: 'development' +) diff --git a/poetry.lock b/poetry.lock index baf0324..ae7efd0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,51 +2,42 @@ [[package]] name = "igraph" -version = "0.11.8" +version = "0.11.9" description = "High performance graph data structures and algorithms" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "igraph-0.11.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a7aa8e65e7b9ddfe66f9473ce93863f40fccac26b24dc3f56e63159641c9946"}, - {file = "igraph-0.11.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9e953e1c5e9c5712a48df5cea93963be84aa26618cdae341b4a6b07761f56a45"}, - {file = "igraph-0.11.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9baf699fdd10491e9a0842e546e630165c49c78d21ac4aaa9fb434ab4a817458"}, - {file = "igraph-0.11.8-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:434e35d935675caddac3221863b43a02085c7f66030eda542f0dd9fc36e1f8ff"}, - {file = "igraph-0.11.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:745e5d7aebca7e9c16f882041718c8ceeb404a5c7201cb8685f57b0e19ebe24d"}, - {file = "igraph-0.11.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24c97ce9f40a358a8d6ff9c27fab0e4617068aaeeb5448247308c67519b91fa2"}, - {file = "igraph-0.11.8-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c89ab68f076528736d4ed56a01983d7fd433f50b08c58bee7ded2326a4eacda1"}, - {file = "igraph-0.11.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d964fc35d65ce67b121e4dcfd7d3479fb3eeb232b6a346a217e397c7d5c5f124"}, - {file = "igraph-0.11.8-cp38-cp38-win32.whl", hash = "sha256:511b036c876fdbfc919a6a4c72b0335fd2a6a3249e5e4312b660390213875afb"}, - {file = "igraph-0.11.8-cp38-cp38-win_amd64.whl", hash = "sha256:417b8375c1c9adbb431f7481a6cae6f9e440db81d8d4ee6fa5d2c2983148930a"}, - {file = "igraph-0.11.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:92c47ceb9f4c95ff7461cd94eaec55e901dbc59f6e51f4244d2dd064f31c5491"}, - {file = "igraph-0.11.8-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:3a2afdb046b602fea71ca18aff6c72165de5002ec38d0dcf1275e34ecd0d9d02"}, - {file = "igraph-0.11.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7870fb72fd9e9218940262671fb79baf281ef066aa1cd35adc092ce9ad39a038"}, - {file = "igraph-0.11.8-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8108138ad605714761bc6d526feab54074904a99c47dcaabc269ed7b45e7650"}, - {file = "igraph-0.11.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2e3abe641622cd9c95eb152c97caa22e68257a524cc1851a099b066f8f5c5f3"}, - {file = "igraph-0.11.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b546eaa9461473a65bb56a51672c6aeb898b737d5e86c3efa1b1bf520ee4b031"}, - {file = "igraph-0.11.8-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:178ef859135ac5075a7159e6826a546b7340cf45a01a928c2a0c24c32e3dfa63"}, - {file = "igraph-0.11.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a68ae7b6324e9c4cb1d04ce75b6e0f67974433fc7667895f1e25bf4f4c6fd530"}, - {file = "igraph-0.11.8-cp39-abi3-win32.whl", hash = "sha256:cc93d2f97f93bf30c2027c31e9e1aa088a3c60cdfeb6b33e0259e4b40b4c5597"}, - {file = "igraph-0.11.8-cp39-abi3-win_amd64.whl", hash = "sha256:248831a6162130f16909c1f776cc246b48f692339ea4baca489cad4ed8dc0e13"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0a8cad10406fba28c4b0199dfb491bcfdf1cdd3a56feeb52bb3b1cd724d04b4"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1c11127a58ac2fc8062dac9f20ef612aff1b09f5f9d3e90800c4817229d0a0bc"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17d79bfb170b8c195fe6bacfa1c906817e8e812417c7e6a8e15f0bcf9b0775a8"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9de09a26d7aae4d83338497cfd2d107d3ee3a2e9335b9db4b6c73a089e8cf47"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6559e2c925ed2ac608103adfd1dec9ccb9a04ddc7ad1d9d2a7db46dda6b1955"}, - {file = "igraph-0.11.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6c17658b367be4f725a253678bfe799d9fe4d4e5c01ad82449cf8f2e9917937c"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d4971b4fcb005ed72f630a5f4c9bb80f10153471fe30846810f63beb3e282a19"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d7b1eaa3563c1e2dda940c1f154fefe9b3b257da8e8251af443cdc69a039480"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35438d6d69a73288949a80f1eb84597e783486cd71a5cdf5862c0db7a7cbd5c5"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c609c5d6a844582a10085c18c1c15d14b2f9fd3be59fed3feaa4be091d671f"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b836baa221027f1781ebcff05f1b23339a51a63eb70948ebaba5641efc060a"}, - {file = "igraph-0.11.8-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:caf4a178f7fb7890195c9fb358dbef0ed4a4f5323f529ea14a0f64da4c05f564"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e702a436935d3e127f6affff397ebbab48b522434bd8d6f15cfb1ab5d940e7d5"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bcad4d052785fe9b076f5aca6e870e2fae35373b09867477adc7307f2692a36"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d420cd48353e7c138bc39a118c3a01dc41aeba38486cca1524a960a755016171"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ae9486a52da72d2ab634b92e17a969dc4e8e83303384329b903830ad67315e5"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4e36a4f8a40bb4ffc8aa08c1cfe6fa3dfa78393cf65165bd9d59e6ac24a2468"}, - {file = "igraph-0.11.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f4048b843be54a77bc7206ce8c58825a9b1b42748c1713699034dc4f7df36f73"}, - {file = "igraph-0.11.8.tar.gz", hash = "sha256:d7dc1404567ba3b0ea1bf8b5fa6e101617915c8ad11ea5a9f925a40bf4adad7d"}, + {file = "igraph-0.11.9-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ef30a8eb6329a71211652223cad900dc42bc7fdb44d9e942e991181232906ac2"}, + {file = "igraph-0.11.9-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:4b3224b2b74e9dfac1271dc6f2e1061d13492f91198d05e1b8b696b994e5e269"}, + {file = "igraph-0.11.9-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adf7d7200c2e11a3b1122786f77cee96072c593fd62794aadb5ce546a24fa791"}, + {file = "igraph-0.11.9-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78a7f3a490f3f6a8aab99948e3e62ae81fc1e8a8aa07e326b09f4e570c042e79"}, + {file = "igraph-0.11.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:773201c9eafef668be11d8966cf2d7114d34757cd9cfdbd8c190fefcd341220b"}, + {file = "igraph-0.11.9-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9bc6fb4316bc79bd0d800dd0186921ef62da971be147861872be90242acbae7d"}, + {file = "igraph-0.11.9-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:e45d03bfb931b73f323b531fc0d87235ac96c41a64363b243677034576cf411b"}, + {file = "igraph-0.11.9-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:157b4a836628ca55c6422098bf34336006c1d517fc86fa0e89af3a233e3baa30"}, + {file = "igraph-0.11.9-cp39-abi3-win32.whl", hash = "sha256:1fd67a0771b8ce70bef361557bdeb6ca7a1012f9fb8368eba86967deeb99a110"}, + {file = "igraph-0.11.9-cp39-abi3-win_amd64.whl", hash = "sha256:09c7d49c7759e058bf2526bbac54dd1f9e0725ff64352f01545db59c09de88cf"}, + {file = "igraph-0.11.9-cp39-abi3-win_arm64.whl", hash = "sha256:8acca4f2463f4de572471cca2d46bb3ef5b3082bc125b9ec30e8032b177951df"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:63f5953619b308b0afbb3ceb5c7b7ab3ee847eca348dfca7d7eb93290568ce02"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a2c4384d1ea1fb071c1b367069783dc195919596d9bb73fef1eddf97cfb5613b"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e2e6747d3c70fcb539bc29b80377d63859f30db8a9b4bc6f440d317c07a47b"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f74dd13b36fd5a831632be0e8f0b3b1519067c479a820f54168e70ac0b71b89d"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb5097c402e82a8bb074ab9df2e45e0c9bcd76bb36a3a839e7cd4d71143bbba"}, + {file = "igraph-0.11.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b0561914fc415dc2fa4194c39585336dde42c3cf5fafd1b404f5e847d055fa17"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a38e20a45499ae258c36ff27a32e9afeac777bac0c94c3511af75503f37523f"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:1bbf2b7a928441184ec9fc1f771ddf61bcd6a3f812a8861cab465c5c985ccc6c"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fb6db6056f90364436f32439b3fc23947d469de0894240ed94dfdecc2eb3c89"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4c6ff8fea88f4b7f6202f6ff939853e09c383b2a35c58aa05f374b66fe46c7c"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9911a7c5b256c0e7d50f958bbabba47a5eeddde67b47271a05e0850de129e2fc"}, + {file = "igraph-0.11.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f35694100691bf8ef0c370615d87bcf1d6c0f15e356269c6357f8f78a9f1acea"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:03114d751b2bc6171259e52d773682b1d771a4b31acc345574f187c6c12ea943"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3dc836e4fddb040eae297bdf56cf0158279f534519a27b35a3c4112bfd2b5244"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fe5f5a55ea211219278da3b74ecbd86c57fedadead51481141853b7594b33f0"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:06434f9d31300a7b7174c922e6940ffa4ca5db46288ca654a3c923729f5c4ab0"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:461bcc31f1ffec4f60881c4cc79ed3f732c7c98b405f97ff3f84d748452a279d"}, + {file = "igraph-0.11.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b948b2e302585c5ed23ef4a7e8caa8ca4cc946106ff8d9b197d16c49d929b777"}, + {file = "igraph-0.11.9.tar.gz", hash = "sha256:c57ce44873abcfcfd1d61d7d261e416d352186958e7b5d299cf244efa6757816"}, ] [package.dependencies] @@ -60,51 +51,53 @@ plotly = ["plotly (>=5.3.0)"] plotting = ["cairocffi (>=1.2.0)"] test = ["Pillow (>=9) ; platform_python_implementation != \"PyPy\"", "cairocffi (>=1.2.0)", "matplotlib (>=3.6.0) ; platform_python_implementation != \"PyPy\"", "networkx (>=2.5)", "numpy (>=1.19.0) ; platform_python_implementation != \"PyPy\"", "pandas (>=1.1.0) ; platform_python_implementation != \"PyPy\"", "plotly (>=5.3.0)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)", "scipy (>=1.5.0) ; platform_python_implementation != \"PyPy\""] test-musl = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] +test-win-arm64 = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] [[package]] name = "mypy" -version = "1.15.0" +version = "1.16.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, - {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, - {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, - {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, - {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, - {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, - {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, - {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, - {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, - {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, - {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, - {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, - {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, - {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, + {file = "mypy-1.16.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4f0fed1022a63c6fec38f28b7fc77fca47fd490445c69d0a66266c59dd0b88a"}, + {file = "mypy-1.16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86042bbf9f5a05ea000d3203cf87aa9d0ccf9a01f73f71c58979eb9249f46d72"}, + {file = "mypy-1.16.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea7469ee5902c95542bea7ee545f7006508c65c8c54b06dc2c92676ce526f3ea"}, + {file = "mypy-1.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:352025753ef6a83cb9e7f2427319bb7875d1fdda8439d1e23de12ab164179574"}, + {file = "mypy-1.16.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ff9fa5b16e4c1364eb89a4d16bcda9987f05d39604e1e6c35378a2987c1aac2d"}, + {file = "mypy-1.16.1-cp310-cp310-win_amd64.whl", hash = "sha256:1256688e284632382f8f3b9e2123df7d279f603c561f099758e66dd6ed4e8bd6"}, + {file = "mypy-1.16.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:472e4e4c100062488ec643f6162dd0d5208e33e2f34544e1fc931372e806c0cc"}, + {file = "mypy-1.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea16e2a7d2714277e349e24d19a782a663a34ed60864006e8585db08f8ad1782"}, + {file = "mypy-1.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08e850ea22adc4d8a4014651575567b0318ede51e8e9fe7a68f25391af699507"}, + {file = "mypy-1.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22d76a63a42619bfb90122889b903519149879ddbf2ba4251834727944c8baca"}, + {file = "mypy-1.16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2c7ce0662b6b9dc8f4ed86eb7a5d505ee3298c04b40ec13b30e572c0e5ae17c4"}, + {file = "mypy-1.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:211287e98e05352a2e1d4e8759c5490925a7c784ddc84207f4714822f8cf99b6"}, + {file = "mypy-1.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d"}, + {file = "mypy-1.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9"}, + {file = "mypy-1.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79"}, + {file = "mypy-1.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15"}, + {file = "mypy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd"}, + {file = "mypy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b"}, + {file = "mypy-1.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438"}, + {file = "mypy-1.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536"}, + {file = "mypy-1.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f"}, + {file = "mypy-1.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359"}, + {file = "mypy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be"}, + {file = "mypy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee"}, + {file = "mypy-1.16.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7fc688329af6a287567f45cc1cefb9db662defeb14625213a5b7da6e692e2069"}, + {file = "mypy-1.16.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e198ab3f55924c03ead626ff424cad1732d0d391478dfbf7bb97b34602395da"}, + {file = "mypy-1.16.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09aa4f91ada245f0a45dbc47e548fd94e0dd5a8433e0114917dc3b526912a30c"}, + {file = "mypy-1.16.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13c7cd5b1cb2909aa318a90fd1b7e31f17c50b242953e7dd58345b2a814f6383"}, + {file = "mypy-1.16.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:58e07fb958bc5d752a280da0e890c538f1515b79a65757bbdc54252ba82e0b40"}, + {file = "mypy-1.16.1-cp39-cp39-win_amd64.whl", hash = "sha256:f895078594d918f93337a505f8add9bd654d1a24962b4c6ed9390e12531eb31b"}, + {file = "mypy-1.16.1-py3-none-any.whl", hash = "sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37"}, + {file = "mypy-1.16.1.tar.gz", hash = "sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab"}, ] [package.dependencies] mypy_extensions = ">=1.0.0" +pathspec = ">=0.9.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing_extensions = ">=4.6.0" @@ -117,69 +110,79 @@ reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "1.0.0" +version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, ] [[package]] name = "numpy" -version = "2.0.2" +version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, + {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, + {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, + {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, + {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, + {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, + {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, + {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, + {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, + {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, + {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, + {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, ] [[package]] @@ -194,25 +197,42 @@ files = [ {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + [[package]] name = "pycairo" -version = "1.27.0" +version = "1.28.0" description = "Python interface for cairo" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pycairo-1.27.0-cp310-cp310-win32.whl", hash = "sha256:e20f431244634cf244ab6b4c3a2e540e65746eed1324573cf291981c3e65fc05"}, - {file = "pycairo-1.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:03bf570e3919901572987bc69237b648fe0de242439980be3e606b396e3318c9"}, - {file = "pycairo-1.27.0-cp311-cp311-win32.whl", hash = "sha256:9a9b79f92a434dae65c34c830bb9abdbd92654195e73d52663cbe45af1ad14b2"}, - {file = "pycairo-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:d40a6d80b15dacb3672dc454df4bc4ab3988c6b3f36353b24a255dc59a1c8aea"}, - {file = "pycairo-1.27.0-cp312-cp312-win32.whl", hash = "sha256:e2239b9bb6c05edae5f3be97128e85147a155465e644f4d98ea0ceac7afc04ee"}, - {file = "pycairo-1.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:27cb4d3a80e3b9990af552818515a8e466e0317063a6e61585533f1a86f1b7d5"}, - {file = "pycairo-1.27.0-cp313-cp313-win32.whl", hash = "sha256:01505c138a313df2469f812405963532fc2511fb9bca9bdc8e0ab94c55d1ced8"}, - {file = "pycairo-1.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:b0349d744c068b6644ae23da6ada111c8a8a7e323b56cbce3707cba5bdb474cc"}, - {file = "pycairo-1.27.0-cp39-cp39-win32.whl", hash = "sha256:f9ca8430751f1fdcd3f072377560c9e15608b9a42d61375469db853566993c9b"}, - {file = "pycairo-1.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b1321652a6e27c4de3069709b1cae22aed2707fd8c5e889c04a95669228af2a"}, - {file = "pycairo-1.27.0.tar.gz", hash = "sha256:5cb21e7a00a2afcafea7f14390235be33497a2cce53a98a19389492a60628430"}, + {file = "pycairo-1.28.0-cp310-cp310-win32.whl", hash = "sha256:53e6dbc98456f789965dad49ef89ce2c62f9a10fc96c8d084e14da0ffb73d8a6"}, + {file = "pycairo-1.28.0-cp310-cp310-win_amd64.whl", hash = "sha256:c8ab91a75025f984bc327ada335c787efb61c929ea0512063793cb36cee503d4"}, + {file = "pycairo-1.28.0-cp310-cp310-win_arm64.whl", hash = "sha256:e955328c1a5147bf71ee94e206413ce15e12630296a79788fcd246c80e5337b8"}, + {file = "pycairo-1.28.0-cp311-cp311-win32.whl", hash = "sha256:0fee15f5d72b13ba5fd065860312493dc1bca6ff2dce200ee9d704e11c94e60a"}, + {file = "pycairo-1.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:6339979bfec8b58a06476094a9a5c104bd5a99932ddaff16ca0d9203d2f4482c"}, + {file = "pycairo-1.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6ae15392e28ebfc0b35d8dc05d395d3b6be4bad9ad4caecf0fa12c8e7150225"}, + {file = "pycairo-1.28.0-cp312-cp312-win32.whl", hash = "sha256:c00cfbb7f30eb7ca1d48886712932e2d91e8835a8496f4e423878296ceba573e"}, + {file = "pycairo-1.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:d50d190f5033992b55050b9f337ee42a45c3568445d5e5d7987bab96c278d8a6"}, + {file = "pycairo-1.28.0-cp312-cp312-win_arm64.whl", hash = "sha256:957e0340ee1c279d197d4f7cfa96f6d8b48e453eec711fca999748d752468ff4"}, + {file = "pycairo-1.28.0-cp313-cp313-win32.whl", hash = "sha256:d13352429d8a08a1cb3607767d23d2fb32e4c4f9faa642155383980ec1478c24"}, + {file = "pycairo-1.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:082aef6b3a9dcc328fa648d38ed6b0a31c863e903ead57dd184b2e5f86790140"}, + {file = "pycairo-1.28.0-cp313-cp313-win_arm64.whl", hash = "sha256:026afd53b75291917a7412d9fe46dcfbaa0c028febd46ff1132d44a53ac2c8b6"}, + {file = "pycairo-1.28.0-cp39-cp39-win32.whl", hash = "sha256:3ed16d48b8a79cc584cb1cb0ad62dfb265f2dda6d6a19ef5aab181693e19c83c"}, + {file = "pycairo-1.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:da0d1e6d4842eed4d52779222c6e43d254244a486ca9fdab14e30042fd5bdf28"}, + {file = "pycairo-1.28.0-cp39-cp39-win_arm64.whl", hash = "sha256:458877513eb2125513122e8aa9c938630e94bb0574f94f4fb5ab55eb23d6e9ac"}, + {file = "pycairo-1.28.0.tar.gz", hash = "sha256:26ec5c6126781eb167089a123919f87baa2740da2cca9098be8b3a6b91cc5fbc"}, ] [[package]] @@ -245,18 +265,18 @@ dev = ["PyGObject", "black (>=25.1.0)", "codespell (>=2.4.1)", "isort (>=6.0.1)" [[package]] name = "python-igraph" -version = "0.11.8" +version = "0.11.9" description = "High performance graph data structures and algorithms (legacy package)" optional = false python-versions = ">=3.6" groups = ["main"] files = [ - {file = "python_igraph-0.11.8-py3-none-any.whl", hash = "sha256:f917c7ed8fbaa08d31bd47e9ca8f68305fc53b294c304190f285392eb3f2dc13"}, - {file = "python_igraph-0.11.8.tar.gz", hash = "sha256:235550fedd3f649e8350bc97cd9220c9751a9fe4b912360d234fe0ef84e82d0b"}, + {file = "python_igraph-0.11.9-py3-none-any.whl", hash = "sha256:9154606132dac48071edf5bc27f5b54cb316db09686ad8cffce078943733de29"}, + {file = "python_igraph-0.11.9.tar.gz", hash = "sha256:51ad8bfba7777ff110cd4f47eb9efeaf092e4edf3167153b05156dbe55dbf90c"}, ] [package.dependencies] -igraph = "0.11.8" +igraph = "0.11.9" [package.extras] cairo = ["cairocffi (>=1.2.0)"] @@ -266,90 +286,89 @@ plotting = ["cairocffi (>=1.2.0)"] [[package]] name = "ruff" -version = "0.11.2" +version = "0.11.13" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ruff-0.11.2-py3-none-linux_armv6l.whl", hash = "sha256:c69e20ea49e973f3afec2c06376eb56045709f0212615c1adb0eda35e8a4e477"}, - {file = "ruff-0.11.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2c5424cc1c4eb1d8ecabe6d4f1b70470b4f24a0c0171356290b1953ad8f0e272"}, - {file = "ruff-0.11.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ecf20854cc73f42171eedb66f006a43d0a21bfb98a2523a809931cda569552d9"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c543bf65d5d27240321604cee0633a70c6c25c9a2f2492efa9f6d4b8e4199bb"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20967168cc21195db5830b9224be0e964cc9c8ecf3b5a9e3ce19876e8d3a96e3"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:955a9ce63483999d9f0b8f0b4a3ad669e53484232853054cc8b9d51ab4c5de74"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:86b3a27c38b8fce73bcd262b0de32e9a6801b76d52cdb3ae4c914515f0cef608"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3b66a03b248c9fcd9d64d445bafdf1589326bee6fc5c8e92d7562e58883e30f"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0397c2672db015be5aa3d4dac54c69aa012429097ff219392c018e21f5085147"}, - {file = "ruff-0.11.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:869bcf3f9abf6457fbe39b5a37333aa4eecc52a3b99c98827ccc371a8e5b6f1b"}, - {file = "ruff-0.11.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2a2b50ca35457ba785cd8c93ebbe529467594087b527a08d487cf0ee7b3087e9"}, - {file = "ruff-0.11.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7c69c74bf53ddcfbc22e6eb2f31211df7f65054bfc1f72288fc71e5f82db3eab"}, - {file = "ruff-0.11.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6e8fb75e14560f7cf53b15bbc55baf5ecbe373dd5f3aab96ff7aa7777edd7630"}, - {file = "ruff-0.11.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842a472d7b4d6f5924e9297aa38149e5dcb1e628773b70e6387ae2c97a63c58f"}, - {file = "ruff-0.11.2-py3-none-win32.whl", hash = "sha256:aca01ccd0eb5eb7156b324cfaa088586f06a86d9e5314b0eb330cb48415097cc"}, - {file = "ruff-0.11.2-py3-none-win_amd64.whl", hash = "sha256:3170150172a8f994136c0c66f494edf199a0bbea7a409f649e4bc8f4d7084080"}, - {file = "ruff-0.11.2-py3-none-win_arm64.whl", hash = "sha256:52933095158ff328f4c77af3d74f0379e34fd52f175144cefc1b192e7ccd32b4"}, - {file = "ruff-0.11.2.tar.gz", hash = "sha256:ec47591497d5a1050175bdf4e1a4e6272cddff7da88a2ad595e1e326041d8d94"}, + {file = "ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46"}, + {file = "ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48"}, + {file = "ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71"}, + {file = "ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432"}, + {file = "ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492"}, + {file = "ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250"}, + {file = "ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3"}, + {file = "ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b"}, + {file = "ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514"}, ] [[package]] name = "shapely" -version = "2.0.7" +version = "2.1.1" description = "Manipulation and analysis of geometric objects" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "shapely-2.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:33fb10e50b16113714ae40adccf7670379e9ccf5b7a41d0002046ba2b8f0f691"}, - {file = "shapely-2.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f44eda8bd7a4bccb0f281264b34bf3518d8c4c9a8ffe69a1a05dabf6e8461147"}, - {file = "shapely-2.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf6c50cd879831955ac47af9c907ce0310245f9d162e298703f82e1785e38c98"}, - {file = "shapely-2.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04a65d882456e13c8b417562c36324c0cd1e5915f3c18ad516bb32ee3f5fc895"}, - {file = "shapely-2.0.7-cp310-cp310-win32.whl", hash = "sha256:7e97104d28e60b69f9b6a957c4d3a2a893b27525bc1fc96b47b3ccef46726bf2"}, - {file = "shapely-2.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:35524cc8d40ee4752520819f9894b9f28ba339a42d4922e92c99b148bed3be39"}, - {file = "shapely-2.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5cf23400cb25deccf48c56a7cdda8197ae66c0e9097fcdd122ac2007e320bc34"}, - {file = "shapely-2.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f1da01c04527f7da59ee3755d8ee112cd8967c15fab9e43bba936b81e2a013"}, - {file = "shapely-2.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f623b64bb219d62014781120f47499a7adc30cf7787e24b659e56651ceebcb0"}, - {file = "shapely-2.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6d95703efaa64aaabf278ced641b888fc23d9c6dd71f8215091afd8a26a66e3"}, - {file = "shapely-2.0.7-cp311-cp311-win32.whl", hash = "sha256:2f6e4759cf680a0f00a54234902415f2fa5fe02f6b05546c662654001f0793a2"}, - {file = "shapely-2.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:b52f3ab845d32dfd20afba86675c91919a622f4627182daec64974db9b0b4608"}, - {file = "shapely-2.0.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4c2b9859424facbafa54f4a19b625a752ff958ab49e01bc695f254f7db1835fa"}, - {file = "shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51"}, - {file = "shapely-2.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73c9ae8cf443187d784d57202199bf9fd2d4bb7d5521fe8926ba40db1bc33e8e"}, - {file = "shapely-2.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9469f49ff873ef566864cb3516091881f217b5d231c8164f7883990eec88b73"}, - {file = "shapely-2.0.7-cp312-cp312-win32.whl", hash = "sha256:6bca5095e86be9d4ef3cb52d56bdd66df63ff111d580855cb8546f06c3c907cd"}, - {file = "shapely-2.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:f86e2c0259fe598c4532acfcf638c1f520fa77c1275912bbc958faecbf00b108"}, - {file = "shapely-2.0.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a0c09e3e02f948631c7763b4fd3dd175bc45303a0ae04b000856dedebefe13cb"}, - {file = "shapely-2.0.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06ff6020949b44baa8fc2e5e57e0f3d09486cd5c33b47d669f847c54136e7027"}, - {file = "shapely-2.0.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6dbf096f961ca6bec5640e22e65ccdec11e676344e8157fe7d636e7904fd36"}, - {file = "shapely-2.0.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adeddfb1e22c20548e840403e5e0b3d9dc3daf66f05fa59f1fcf5b5f664f0e98"}, - {file = "shapely-2.0.7-cp313-cp313-win32.whl", hash = "sha256:a7f04691ce1c7ed974c2f8b34a1fe4c3c5dfe33128eae886aa32d730f1ec1913"}, - {file = "shapely-2.0.7-cp313-cp313-win_amd64.whl", hash = "sha256:aaaf5f7e6cc234c1793f2a2760da464b604584fb58c6b6d7d94144fd2692d67e"}, - {file = "shapely-2.0.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19cbc8808efe87a71150e785b71d8a0e614751464e21fb679d97e274eca7bd43"}, - {file = "shapely-2.0.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc19b78cc966db195024d8011649b4e22812f805dd49264323980715ab80accc"}, - {file = "shapely-2.0.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd37d65519b3f8ed8976fa4302a2827cbb96e0a461a2e504db583b08a22f0b98"}, - {file = "shapely-2.0.7-cp37-cp37m-win32.whl", hash = "sha256:25085a30a2462cee4e850a6e3fb37431cbbe4ad51cbcc163af0cea1eaa9eb96d"}, - {file = "shapely-2.0.7-cp37-cp37m-win_amd64.whl", hash = "sha256:1a2e03277128e62f9a49a58eb7eb813fa9b343925fca5e7d631d50f4c0e8e0b8"}, - {file = "shapely-2.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e1c4f1071fe9c09af077a69b6c75f17feb473caeea0c3579b3e94834efcbdc36"}, - {file = "shapely-2.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3697bd078b4459f5a1781015854ef5ea5d824dbf95282d0b60bfad6ff83ec8dc"}, - {file = "shapely-2.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e9fed9a7d6451979d914cb6ebbb218b4b4e77c0d50da23e23d8327948662611"}, - {file = "shapely-2.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2934834c7f417aeb7cba3b0d9b4441a76ebcecf9ea6e80b455c33c7c62d96a24"}, - {file = "shapely-2.0.7-cp38-cp38-win32.whl", hash = "sha256:2e4a1749ad64bc6e7668c8f2f9479029f079991f4ae3cb9e6b25440e35a4b532"}, - {file = "shapely-2.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8ae5cb6b645ac3fba34ad84b32fbdccb2ab321facb461954925bde807a0d3b74"}, - {file = "shapely-2.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4abeb44b3b946236e4e1a1b3d2a0987fb4d8a63bfb3fdefb8a19d142b72001e5"}, - {file = "shapely-2.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd0e75d9124b73e06a42bf1615ad3d7d805f66871aa94538c3a9b7871d620013"}, - {file = "shapely-2.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7977d8a39c4cf0e06247cd2dca695ad4e020b81981d4c82152c996346cf1094b"}, - {file = "shapely-2.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0145387565fcf8f7c028b073c802956431308da933ef41d08b1693de49990d27"}, - {file = "shapely-2.0.7-cp39-cp39-win32.whl", hash = "sha256:98697c842d5c221408ba8aa573d4f49caef4831e9bc6b6e785ce38aca42d1999"}, - {file = "shapely-2.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:a3fb7fbae257e1b042f440289ee7235d03f433ea880e73e687f108d044b24db5"}, - {file = "shapely-2.0.7.tar.gz", hash = "sha256:28fe2997aab9a9dc026dc6a355d04e85841546b2a5d232ed953e3321ab958ee5"}, + {file = "shapely-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8ccc872a632acb7bdcb69e5e78df27213f7efd195882668ffba5405497337c6"}, + {file = "shapely-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f24f2ecda1e6c091da64bcbef8dd121380948074875bd1b247b3d17e99407099"}, + {file = "shapely-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45112a5be0b745b49e50f8829ce490eb67fefb0cea8d4f8ac5764bfedaa83d2d"}, + {file = "shapely-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c10ce6f11904d65e9bbb3e41e774903c944e20b3f0b282559885302f52f224a"}, + {file = "shapely-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:61168010dfe4e45f956ffbbaf080c88afce199ea81eb1f0ac43230065df320bd"}, + {file = "shapely-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cacf067cdff741cd5c56a21c52f54ece4e4dad9d311130493a791997da4a886b"}, + {file = "shapely-2.1.1-cp310-cp310-win32.whl", hash = "sha256:23b8772c3b815e7790fb2eab75a0b3951f435bc0fce7bb146cb064f17d35ab4f"}, + {file = "shapely-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:2c7b2b6143abf4fa77851cef8ef690e03feade9a0d48acd6dc41d9e0e78d7ca6"}, + {file = "shapely-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587a1aa72bc858fab9b8c20427b5f6027b7cbc92743b8e2c73b9de55aa71c7a7"}, + {file = "shapely-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fa5c53b0791a4b998f9ad84aad456c988600757a96b0a05e14bba10cebaaaea"}, + {file = "shapely-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aabecd038841ab5310d23495253f01c2a82a3aedae5ab9ca489be214aa458aa7"}, + {file = "shapely-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586f6aee1edec04e16227517a866df3e9a2e43c1f635efc32978bb3dc9c63753"}, + {file = "shapely-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b9878b9e37ad26c72aada8de0c9cfe418d9e2ff36992a1693b7f65a075b28647"}, + {file = "shapely-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9a531c48f289ba355e37b134e98e28c557ff13965d4653a5228d0f42a09aed0"}, + {file = "shapely-2.1.1-cp311-cp311-win32.whl", hash = "sha256:4866de2673a971820c75c0167b1f1cd8fb76f2d641101c23d3ca021ad0449bab"}, + {file = "shapely-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:20a9d79958b3d6c70d8a886b250047ea32ff40489d7abb47d01498c704557a93"}, + {file = "shapely-2.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2827365b58bf98efb60affc94a8e01c56dd1995a80aabe4b701465d86dcbba43"}, + {file = "shapely-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9c551f7fa7f1e917af2347fe983f21f212863f1d04f08eece01e9c275903fad"}, + {file = "shapely-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78dec4d4fbe7b1db8dc36de3031767e7ece5911fb7782bc9e95c5cdec58fb1e9"}, + {file = "shapely-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:872d3c0a7b8b37da0e23d80496ec5973c4692920b90de9f502b5beb994bbaaef"}, + {file = "shapely-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2e2b9125ebfbc28ecf5353511de62f75a8515ae9470521c9a693e4bb9fbe0cf1"}, + {file = "shapely-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4b96cea171b3d7f6786976a0520f178c42792897653ecca0c5422fb1e6946e6d"}, + {file = "shapely-2.1.1-cp312-cp312-win32.whl", hash = "sha256:39dca52201e02996df02e447f729da97cfb6ff41a03cb50f5547f19d02905af8"}, + {file = "shapely-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:13d643256f81d55a50013eff6321142781cf777eb6a9e207c2c9e6315ba6044a"}, + {file = "shapely-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3004a644d9e89e26c20286d5fdc10f41b1744c48ce910bd1867fdff963fe6c48"}, + {file = "shapely-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1415146fa12d80a47d13cfad5310b3c8b9c2aa8c14a0c845c9d3d75e77cb54f6"}, + {file = "shapely-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21fcab88b7520820ec16d09d6bea68652ca13993c84dffc6129dc3607c95594c"}, + {file = "shapely-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5ce6a5cc52c974b291237a96c08c5592e50f066871704fb5b12be2639d9026a"}, + {file = "shapely-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:04e4c12a45a1d70aeb266618d8cf81a2de9c4df511b63e105b90bfdfb52146de"}, + {file = "shapely-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ca74d851ca5264aae16c2b47e96735579686cb69fa93c4078070a0ec845b8d8"}, + {file = "shapely-2.1.1-cp313-cp313-win32.whl", hash = "sha256:fd9130501bf42ffb7e0695b9ea17a27ae8ce68d50b56b6941c7f9b3d3453bc52"}, + {file = "shapely-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:ab8d878687b438a2f4c138ed1a80941c6ab0029e0f4c785ecfe114413b498a97"}, + {file = "shapely-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c062384316a47f776305ed2fa22182717508ffdeb4a56d0ff4087a77b2a0f6d"}, + {file = "shapely-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4ecf6c196b896e8f1360cc219ed4eee1c1e5f5883e505d449f263bd053fb8c05"}, + {file = "shapely-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb00070b4c4860f6743c600285109c273cca5241e970ad56bb87bef0be1ea3a0"}, + {file = "shapely-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d14a9afa5fa980fbe7bf63706fdfb8ff588f638f145a1d9dbc18374b5b7de913"}, + {file = "shapely-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b640e390dabde790e3fb947198b466e63223e0a9ccd787da5f07bcb14756c28d"}, + {file = "shapely-2.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:69e08bf9697c1b73ec6aa70437db922bafcea7baca131c90c26d59491a9760f9"}, + {file = "shapely-2.1.1-cp313-cp313t-win32.whl", hash = "sha256:ef2d09d5a964cc90c2c18b03566cf918a61c248596998a0301d5b632beadb9db"}, + {file = "shapely-2.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8cb8f17c377260452e9d7720eeaf59082c5f8ea48cf104524d953e5d36d4bdb7"}, + {file = "shapely-2.1.1.tar.gz", hash = "sha256:500621967f2ffe9642454808009044c21e5b35db89ce69f8a2042c2ffd0e2772"}, ] [package.dependencies] -numpy = ">=1.14,<3" +numpy = ">=1.21" [package.extras] docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] -test = ["pytest", "pytest-cov"] +test = ["pytest", "pytest-cov", "scipy-doctest"] [[package]] name = "texttable" @@ -370,7 +389,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -408,17 +427,17 @@ files = [ [[package]] name = "typing-extensions" -version = "4.13.0" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.14.1" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5"}, - {file = "typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b"}, + {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, + {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, ] [metadata] lock-version = "2.1" -python-versions = ">= 3.9,<4.0" -content-hash = "b5069de5668b64e7aca3900bb5500076cac669898f5867f96e8c763abe7073a7" +python-versions = ">= 3.10,<4.0" +content-hash = "6dfd71abf70936b1ceb3ffb321186be94fe0cf4ed3f946f6d246d57974831c54" diff --git a/pyproject.toml b/pyproject.toml index e560133..9c3279e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,17 +7,18 @@ authors = [ ] license = {text = "GPL v3"} readme = "README.md" -requires-python = ">= 3.9,<4.0" +requires-python = ">= 3.10,<4.0" dependencies = [ "pycairo (>=1.27.0,<2.0.0)", "pygobject (>=3.52.3,<4.0.0)", "packaging (>=24.2,<25.0)", - "python-igraph (>=0.11.8,<0.12.0)", - "shapely (==2.0.7)", + "python-igraph (>=0.11.9,<0.12.0)", + "shapely (==2.1.1)", ] [tool.ruff.lint] extend-select = ["W291"] +ignore = ["E402"] [tool.poetry] diff --git a/run.py b/run.py index 9b1077c..b823c84 100755 --- a/run.py +++ b/run.py @@ -2,17 +2,17 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- # # Copyright (C) Koichi Akabe 2012 -# +# # GGate is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # GGate is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License along # with this program. If not, see . # diff --git a/screenshots/ggate-pref.png b/screenshots/ggate-pref.png deleted file mode 100644 index 43904f5bbb5fa13c9cd59c9c653ac48250e697e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46976 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 diff --git a/screenshots/ggate-window.png b/screenshots/ggate-window.png deleted file mode 100644 index 2bd2f3041d9e23b5d6a9f8d8dd9b8cc315e92c8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34631 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 z 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 z={ Date: Sun, 20 Jul 2025 05:59:31 +0100 Subject: [PATCH 02/37] feat: update Flatpak configuration and add context menu actions --- .github/workflows/flatpak.yml | 4 +- .gitignore | 3 +- build-aux/flatpak/org.astralco.GGate.json | 2 +- data/examples/RSFF.glc | 64 +++ data/examples/TFF-counter.glc | 129 ++++++ data/examples/adder.glc | 506 ++++++++++++++++++++++ data/examples/oscillators.glc | 114 +++++ data/ui/context-menu.ui | 57 +++ data/ui/running-context-menu.ui | 10 + ggate/CircuitManager.py | 10 +- ggate/MainFrame.py | 5 - 11 files changed, 889 insertions(+), 15 deletions(-) create mode 100644 data/examples/RSFF.glc create mode 100644 data/examples/TFF-counter.glc create mode 100644 data/examples/adder.glc create mode 100644 data/examples/oscillators.glc create mode 100644 data/ui/context-menu.ui create mode 100644 data/ui/running-context-menu.ui diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 8a79a78..12be8a3 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -9,7 +9,7 @@ jobs: flatpak-builder: runs-on: ubuntu-latest container: - image: bilelmoussaoui/flatpak-github-actions:gnome-45 + image: bilelmoussaoui/flatpak-github-actions:gnome-47 options: --privileged steps: - name: Checkout @@ -18,7 +18,7 @@ jobs: - name: Set up Flatpak environment run: | flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak install -y flathub org.gnome.Platform//45 org.gnome.Sdk//45 + flatpak install -y flathub org.gnome.Platform//47 org.gnome.Sdk//47 - name: Build Flatpak run: | diff --git a/.gitignore b/.gitignore index e2f5ec3..895dda2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ ./*.py -**.glc +*.glc +!data/examples/*.glc ./*.png **/__pycache__/ m4/ diff --git a/build-aux/flatpak/org.astralco.GGate.json b/build-aux/flatpak/org.astralco.GGate.json index f0e868f..4bd408c 100644 --- a/build-aux/flatpak/org.astralco.GGate.json +++ b/build-aux/flatpak/org.astralco.GGate.json @@ -1,7 +1,7 @@ { "app-id": "org.astralco.GGate", "runtime": "org.gnome.Platform", - "runtime-version": "45", + "runtime-version": "47", "sdk": "org.gnome.Sdk", "command": "ggate", "finish-args": [ diff --git a/data/examples/RSFF.glc b/data/examples/RSFF.glc new file mode 100644 index 0000000..b12f929 --- /dev/null +++ b/data/examples/RSFF.glc @@ -0,0 +1,64 @@ +version + author=3.1.0 + required=3.0 + +nor + position=70,70 + input_level=0,1 + output_level=0 + properties=tphl:0.0,tplh:0.0 + +nor + position=70,160 + input_level=0,0 + output_level=1 + properties=tphl:0.0,tplh:0.0 + +sw + position=10,170 + input_level= + output_level=0 + properties=initstate:0 + +sw + position=10,60 + input_level= + output_level=0 + properties=initstate:0 + +led + position=180,160 + input_level=1 + output_level= + properties= + +led + position=180,70 + input_level=0 + output_level= + properties= + +net + position=80,130,80,100 + +net + position=80,60,80,80 + +net + position=190,80,190,140 + +net + position=180,100,180,50 + +net + position=190,80,80,80 + +net + position=190,140,180,140 + +net + position=190,50,180,50 + +net + position=80,100,180,100 + diff --git a/data/examples/TFF-counter.glc b/data/examples/TFF-counter.glc new file mode 100644 index 0000000..0246fc1 --- /dev/null +++ b/data/examples/TFF-counter.glc @@ -0,0 +1,129 @@ +version + author=3.1.0 + required=3.0 + +tff + position=530,280 + input_level=0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:1,tphl:0.0,tplh:0.0 + +tff + position=430,300 + input_level=1 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:1,tphl:0.0,tplh:0.0 + +tff + position=230,230 + input_level=1 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=330,210 + input_level=0 + output_level=1,0 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=430,190 + input_level=1 + output_level=1,0 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=530,170 + input_level=1 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +7seg + position=630,230 + input_level=1,0,0,1 + output_level= + matrix=1,0,0,1 + properties=_red:0 + +tff + position=330,320 + input_level=1 + output_level=1,0 + matrix=1,0,0,1 + properties=trig:1,tphl:0.0,tplh:0.0 + +tff + position=230,340 + input_level=1 + output_level=1,0 + matrix=1,0,0,1 + properties=trig:1,tphl:0.0,tplh:0.0 + +7seg + position=630,340 + input_level=1,1,0,0 + output_level= + matrix=1,0,0,1 + properties=_red:2 + +sw + position=150,285 + input_level= + output_level=1 + matrix=1,0,0,1 + properties=initstate:0 + +net + position=340,200,340,190 + +net + position=440,180,440,170 + +net + position=540,160,540,150 + +net + position=640,220,340,220 + +net + position=440,200,640,200 + +net + position=640,180,540,180 + +net + position=340,330,640,330 + +net + position=640,310,440,310 + +net + position=540,290,640,290 + +net + position=540,270,540,260 + +net + position=440,290,440,280 + +net + position=340,310,340,300 + +net + position=220,320,220,265 + +net + position=240,320,220,320 + +net + position=220,265,220,210 + +net + position=220,210,240,210 + diff --git a/data/examples/adder.glc b/data/examples/adder.glc new file mode 100644 index 0000000..a4e2187 --- /dev/null +++ b/data/examples/adder.glc @@ -0,0 +1,506 @@ +version + author=3.0.0 + required=2.6 + +sw + position=30,550 + input_level= + output_level=1 + matrix=1,0,0,1 + properties=initstate:0 + +sw + position=30,500 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:1 + +sw + position=30,450 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:1 + +sw + position=30,400 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:0 + +7seg + position=50,100 + input_level=0,0,0,1 + output_level= + matrix=1,0,0,1 + properties=_red:2 + +7seg + position=180,100 + input_level=0,0,0,1 + output_level= + matrix=1,0,0,1 + properties=_red:1 + +7seg + position=610,100 + input_level=0,0,1,0 + output_level= + matrix=1,0,0,1 + properties=_red:0 + +sw + position=160,400 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:0 + +sw + position=160,450 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:1 + +sw + position=160,500 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:0 + +sw + position=160,550 + input_level= + output_level=1 + matrix=1,0,0,1 + properties=initstate:1 + +and + position=400,220 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +and + position=400,270 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +and + position=400,350 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +and + position=400,400 + input_level=0,1 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=300,260 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=300,390 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=400,170 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=490,180 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=490,310 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=490,440 + input_level=0,1 + output_level=1 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=490,550 + input_level=1,1 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +and + position=490,500 + input_level=1,1 + output_level=1 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +or + position=490,390 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +or + position=490,260 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +text + position=30,350 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:IN1 + +text + position=160,350 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:IN2 + +text + position=630,120 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:OUT \e IN1 + IN2 + +net + position=500,410,400,410 + +net + position=400,370,410,370 + +net + position=400,410,400,370 + +net + position=500,360,500,330 + +net + position=500,230,500,200 + +net + position=500,280,400,280 + +net + position=400,280,400,240 + +net + position=410,240,400,240 + +net + position=590,480,590,450 + +net + position=410,430,410,390 + +net + position=590,450,500,450 + +net + position=500,430,410,430 + +net + position=500,450,500,430 + +net + position=590,370,590,320 + +net + position=410,300,410,260 + +net + position=590,320,500,320 + +net + position=500,300,410,300 + +net + position=500,320,500,300 + +net + position=590,240,590,190 + +net + position=590,190,500,190 + +net + position=500,190,500,170 + +net + position=60,50,40,50 + +net + position=410,210,310,210 + +net + position=40,180,40,50 + +net + position=310,210,310,230 + +net + position=40,180,110,180 + +net + position=310,230,110,230 + +net + position=110,180,110,230 + +net + position=100,430,110,430 + +net + position=110,230,110,430 + +net + position=190,50,170,50 + +net + position=190,90,190,140 + +net + position=500,520,500,490 + +net + position=190,140,260,140 + +net + position=500,490,260,490 + +net + position=260,140,260,490 + +net + position=230,530,260,530 + +net + position=260,490,260,530 + +net + position=620,30,590,30 + +net + position=590,30,590,160 + +net + position=620,50,600,50 + +net + position=600,50,600,290 + +net + position=600,290,590,290 + +net + position=620,70,610,70 + +net + position=610,70,610,420 + +net + position=610,420,590,420 + +net + position=620,90,620,530 + +net + position=620,530,590,530 + +net + position=50,70,60,70 + +net + position=300,380,310,380 + +net + position=50,70,50,160 + +net + position=410,320,300,320 + +net + position=300,320,300,380 + +net + position=50,160,120,160 + +net + position=300,320,120,320 + +net + position=120,160,120,320 + +net + position=100,480,120,480 + +net + position=120,320,120,480 + +net + position=60,140,60,90 + +net + position=500,540,490,540 + +net + position=60,140,130,140 + +net + position=100,530,130,530 + +net + position=490,540,490,470 + +net + position=500,470,490,470 + +net + position=130,140,130,350 + +net + position=130,350,130,530 + +net + position=490,470,280,470 + +net + position=130,350,280,350 + +net + position=280,470,280,350 + +net + position=180,70,190,70 + +net + position=180,160,180,70 + +net + position=410,340,310,340 + +net + position=310,340,310,360 + +net + position=250,160,180,160 + +net + position=310,340,250,340 + +net + position=250,160,250,340 + +net + position=230,480,250,480 + +net + position=250,340,250,480 + +net + position=170,50,170,180 + +net + position=170,180,240,180 + +net + position=230,430,240,430 + +net + position=240,180,240,250 + +net + position=240,250,240,430 + +net + position=410,190,300,190 + +net + position=300,250,310,250 + +net + position=300,250,240,250 + +net + position=300,190,300,250 + +net + position=190,30,160,30 + +net + position=160,30,160,200 + +net + position=160,200,230,200 + +net + position=230,200,230,380 + +net + position=230,200,280,200 + +net + position=410,140,280,140 + +net + position=280,200,280,140 + +net + position=30,30,60,30 + +net + position=30,30,30,200 + +net + position=100,200,30,200 + +net + position=100,200,100,210 + +net + position=100,210,100,380 + +net + position=410,160,290,160 + +net + position=100,210,290,210 + +net + position=290,160,290,210 + diff --git a/data/examples/oscillators.glc b/data/examples/oscillators.glc new file mode 100644 index 0000000..5589934 --- /dev/null +++ b/data/examples/oscillators.glc @@ -0,0 +1,114 @@ +version + author=3.1.0 + required=3.0 + +osc + position=340,260 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=period:2.5,shift:0.0,duration:80.0,initstate:0 + +osc + position=340,310 + input_level= + output_level=1 + matrix=1,0,0,1 + properties=period:2.4,shift:0.0,duration:80.0,initstate:0 + +probe + position=530,250 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:Signal1 + +probe + position=530,300 + input_level=1 + output_level= + matrix=1,0,0,1 + properties=name:Signal2 + +probe + position=530,350 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:AND + +probe + position=530,400 + input_level=1 + output_level= + matrix=1,0,0,1 + properties=name:XOR + +xor + position=440,410 + input_level=0,0 + output_level=1 + matrix=1,0,0,1 + properties=inputs:2.0,tphl:0.0,tplh:0.0 + +and + position=440,360 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2.0,tphl:0.0,tplh:0.0 + +text + position=330,220 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:T\e0.25µs + +text + position=330,330 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:T\e0.24µs + +text + position=410,220 + input_level= + output_level= + matrix=1,0,0,1 + properties=text:Duration\e80µs + +net + position=540,290,410,290 + +net + position=410,400,450,400 + +net + position=410,290,410,350 + +net + position=410,350,410,400 + +net + position=450,350,410,350 + +net + position=450,380,430,380 + +net + position=450,330,430,330 + +net + position=430,380,430,330 + +net + position=430,240,540,240 + +net + position=430,330,430,240 + +net + position=410,240,430,240 + diff --git a/data/ui/context-menu.ui b/data/ui/context-menu.ui new file mode 100644 index 0000000..82c0553 --- /dev/null +++ b/data/ui/context-menu.ui @@ -0,0 +1,57 @@ + + +
+ horizontal-buttons + + Flip Horizontally + menu.flip_hori + + + Flip Vertically + menu.flip_verti + + + Rotate Left + menu.rot_left + + + Rotate right + menu.rot_right + +
+
+ + Properties + menu.properties + <Ctrl>P + + + Add net + app.toggle_net + <Ctrl>E + +
+
+ + Copy + app.on_action_copy_pressed + <Ctrl>C + + + Cut + app.on_action_cut_pressed + <Ctrl>X + + + Paste + app.on_action_paste_pressed + <Ctrl>V + + + Delete + app.on_action_delete_pressed + BackSpace + +
+
+
diff --git a/data/ui/running-context-menu.ui b/data/ui/running-context-menu.ui new file mode 100644 index 0000000..b8bb472 --- /dev/null +++ b/data/ui/running-context-menu.ui @@ -0,0 +1,10 @@ + + +
+ + Timing Diagram + app.on_action_diagram_pressed + +
+
+
\ No newline at end of file diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index d821f2f..65374d8 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from __future__ import annotations from collections import Counter from typing import TYPE_CHECKING, Tuple @@ -6,19 +5,18 @@ if TYPE_CHECKING: from ggate.MainFrame import MainFrame -import igraph -import copy import os +import copy +import igraph from gi.repository import GObject from shapely.geometry import LineString, Point -from shapely.ops import split from ggate.Components.LogicGates.SystemComponents import BaseComponent from ggate.Components.LogicGates import logic_gates from ggate.const import definitions +from ggate import config from ggate import Preference -from ggate.Utils import encode_text, decode_text, fit_components, get_components_rect, get_duplicate_points, multiply_matrix, rotate_left_90, rotate_right_90 +from ggate.Utils import encode_text, decode_text, fit_components, get_components_rect, multiply_matrix, rotate_left_90, rotate_right_90 from gettext import gettext as _ -from ggate import config CircuitComponent = Tuple[definitions, BaseComponent] diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 0cc4017..e0dbded 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -21,7 +21,6 @@ from ggate import Preference from ggate.Components.LogicGates import logic_gates - from ggate.Components.Managers.FileManager import FileIOManager from ggate.Components.Managers.FileManager import FileManager from ggate.Components.Managers.Alerts import AlertDialogs @@ -76,10 +75,6 @@ def __init__(self, *args, **kwargs): # Property window self.prop_window = PropertyWindow() - self.prop_window.set_transient_for(self) - self.prop_window.set_hide_on_close(True) - self.prop_window.set_modal(True) - self.prop_window.connect("window-hidden", self.on_propwindow_hidden) self.prop_window.connect("property-changed", self.on_property_changed) From 5b9e48c24c724120f3a210ab4bee065e5dba5460 Mon Sep 17 00:00:00 2001 From: astraldev Date: Sun, 20 Jul 2025 12:42:51 +0100 Subject: [PATCH 03/37] chore: update meson files and assets --- .gitignore | 1 - {.github => .vscode}/copilot-instructions.md | 0 .vscode/extensions.json | 9 ++ .vscode/settings.json | 5 + data/images/actions/flip-horizontal.svg | 8 +- data/images/actions/flip-vertical.svg | 8 +- data/images/actions/rotate-left.svg | 5 +- data/images/actions/rotate-right.svg | 6 +- data/images/add-component.png | Bin 317 -> 0 bytes data/images/add-net.png | Bin 363 -> 0 bytes data/images/components/7seg.svg | 17 +-- data/images/components/README.md | 2 - data/images/components/adder.svg | 20 +-- .../images/components/component-blueprint.svg | 115 ------------------ data/images/components/counter.svg | 20 +-- data/images/components/dff.svg | 19 +-- data/images/components/jkff.svg | 28 +---- data/images/components/pipo.svg | 24 +--- data/images/components/piso.svg | 20 +-- data/images/components/rsff.svg | 15 +-- data/images/components/sipo.svg | 25 +--- data/images/components/siso.svg | 17 +-- data/images/components/tff.svg | 15 +-- data/images/ggate.png | Bin 3911 -> 0 bytes data/images/meson.build | 43 +++++++ data/images/{components => }/resources.xml.in | 2 +- data/images/scalable/7seg_component.svg | 4 - data/images/scalable/adder_component.svg | 9 -- data/images/scalable/counter_component.svg | 7 -- data/images/scalable/dff_component.svg | 7 -- data/images/scalable/jkff_component.svg | 12 -- data/images/scalable/pipo_component.svg | 4 - data/images/scalable/piso_component.svg | 4 - data/images/scalable/rsff_component.svg | 7 -- data/images/scalable/sipo_component.svg | 13 -- data/images/scalable/siso_component.svg | 4 - data/images/scalable/timer_component.svg | 5 - data/ui/context-menu.ui | 57 --------- data/ui/running-context-menu.ui | 10 -- meson.build | 7 ++ 40 files changed, 111 insertions(+), 463 deletions(-) rename {.github => .vscode}/copilot-instructions.md (100%) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json delete mode 100644 data/images/add-component.png delete mode 100644 data/images/add-net.png delete mode 100644 data/images/components/README.md delete mode 100644 data/images/components/component-blueprint.svg delete mode 100644 data/images/ggate.png create mode 100644 data/images/meson.build rename data/images/{components => }/resources.xml.in (61%) delete mode 100644 data/images/scalable/7seg_component.svg delete mode 100644 data/images/scalable/adder_component.svg delete mode 100644 data/images/scalable/counter_component.svg delete mode 100644 data/images/scalable/dff_component.svg delete mode 100644 data/images/scalable/jkff_component.svg delete mode 100644 data/images/scalable/pipo_component.svg delete mode 100644 data/images/scalable/piso_component.svg delete mode 100644 data/images/scalable/rsff_component.svg delete mode 100644 data/images/scalable/sipo_component.svg delete mode 100644 data/images/scalable/siso_component.svg delete mode 100644 data/images/scalable/timer_component.svg delete mode 100644 data/ui/context-menu.ui delete mode 100644 data/ui/running-context-menu.ui diff --git a/.gitignore b/.gitignore index 895dda2..4371488 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ **/__pycache__/ m4/ *.cache/ -.vscode/ debian/ *.egg-info/ dist/ diff --git a/.github/copilot-instructions.md b/.vscode/copilot-instructions.md similarity index 100% rename from .github/copilot-instructions.md rename to .vscode/copilot-instructions.md diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..657bbdb --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "jock.svg", + "mesonbuild.mesonbuild", + "mrmomo.meson-build", + "charliermarsh.ruff", + "github.vscode-github-actions" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6e281a5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.analysis.autoImportCompletions": true, + "svg.preview.backgroundCustom": "#eee", + "svg.preview.background": "custom" +} \ No newline at end of file diff --git a/data/images/actions/flip-horizontal.svg b/data/images/actions/flip-horizontal.svg index 63e98ff..63e1570 100644 --- a/data/images/actions/flip-horizontal.svg +++ b/data/images/actions/flip-horizontal.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/data/images/actions/flip-vertical.svg b/data/images/actions/flip-vertical.svg index 3d6c75d..8da1d53 100644 --- a/data/images/actions/flip-vertical.svg +++ b/data/images/actions/flip-vertical.svg @@ -1,2 +1,6 @@ - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/data/images/actions/rotate-left.svg b/data/images/actions/rotate-left.svg index 2dbeb2c..23b9ab1 100644 --- a/data/images/actions/rotate-left.svg +++ b/data/images/actions/rotate-left.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + \ No newline at end of file diff --git a/data/images/actions/rotate-right.svg b/data/images/actions/rotate-right.svg index 8c93d43..b94b045 100644 --- a/data/images/actions/rotate-right.svg +++ b/data/images/actions/rotate-right.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/data/images/add-component.png b/data/images/add-component.png deleted file mode 100644 index 21a6e88290b214715690e5c1d4d5334c5292c000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;>1s;*b zK=s!_n9)gNb_Gz7y~NYkmHiH*D37qY^6{qvK%q09E{-7{$KOsdsxJQj%96)*edY8Ah9y9MF?hQA KxvXzK)1KH$VxIE0C*;hueFk_7gzxV6pvhrgN4+VZ@yG>@W ztZvjgyWo_kQQH~Y5C1;g6ia9LmB4esg)8>Dqb6(e35m-(Y+Lwle-)~|pDfY#M(s4y z#h5_mpyl!xw&m{BycH`qWrLFw`<&~E0=^4v(*k=OZ^)l{r09LJ*YkA3tUGtieQVyo zuP!*%ZBibWlBZ`L^6qJz%E?!3i|$NoG>iQ#%Y1WHw&joB?X^bhB5fJw&gz~iyHjg& z$%bo5GRLRitUda`gT4O$#ZUiJ=AKNNmMtmLuU>n&HAjBJfk!}ZGkCiCxvX - - - - - - - - - - - - - - + + diff --git a/data/images/components/README.md b/data/images/components/README.md deleted file mode 100644 index 66ccad3..0000000 --- a/data/images/components/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Component Icons - diff --git a/data/images/components/adder.svg b/data/images/components/adder.svg index ea2e826..3546429 100644 --- a/data/images/components/adder.svg +++ b/data/images/components/adder.svg @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/component-blueprint.svg b/data/images/components/component-blueprint.svg deleted file mode 100644 index 6116133..0000000 --- a/data/images/components/component-blueprint.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/images/components/counter.svg b/data/images/components/counter.svg index 09a6c46..2b417f1 100644 --- a/data/images/components/counter.svg +++ b/data/images/components/counter.svg @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/dff.svg b/data/images/components/dff.svg index 23aca1c..17dc71f 100644 --- a/data/images/components/dff.svg +++ b/data/images/components/dff.svg @@ -1,17 +1,4 @@ - - - - - - - - - - - - - - - - + + + diff --git a/data/images/components/jkff.svg b/data/images/components/jkff.svg index be9fec2..d8a8409 100644 --- a/data/images/components/jkff.svg +++ b/data/images/components/jkff.svg @@ -1,27 +1,3 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/pipo.svg b/data/images/components/pipo.svg index fcc7e46..c42a309 100644 --- a/data/images/components/pipo.svg +++ b/data/images/components/pipo.svg @@ -1,23 +1,3 @@ - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/piso.svg b/data/images/components/piso.svg index 966ca49..74a0e2e 100644 --- a/data/images/components/piso.svg +++ b/data/images/components/piso.svg @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/rsff.svg b/data/images/components/rsff.svg index f3a0ec7..d5315d7 100644 --- a/data/images/components/rsff.svg +++ b/data/images/components/rsff.svg @@ -1,14 +1,3 @@ - - - - - - - - - - - RS - - + + diff --git a/data/images/components/sipo.svg b/data/images/components/sipo.svg index 718216c..ab19515 100644 --- a/data/images/components/sipo.svg +++ b/data/images/components/sipo.svg @@ -1,24 +1,3 @@ - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/data/images/components/siso.svg b/data/images/components/siso.svg index cb97f04..d4e3403 100644 --- a/data/images/components/siso.svg +++ b/data/images/components/siso.svg @@ -1,15 +1,4 @@ - - - - - - - - - - - - - - + + + diff --git a/data/images/components/tff.svg b/data/images/components/tff.svg index 4a03980..a280198 100644 --- a/data/images/components/tff.svg +++ b/data/images/components/tff.svg @@ -1,14 +1,3 @@ - - - - - - - - - - - - - + + diff --git a/data/images/ggate.png b/data/images/ggate.png deleted file mode 100644 index df7a0d32ed7f32e89389b3de292408d805d91813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3911 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 V@|xx;5xD>W002ovPDHLkV1nQXPOJa` diff --git a/data/images/meson.build b/data/images/meson.build new file mode 100644 index 0000000..2d6153d --- /dev/null +++ b/data/images/meson.build @@ -0,0 +1,43 @@ +icon_files = [ + # Components + '7seg.svg', + 'adder.svg', + 'counter.svg', + 'dff.svg', + 'jkff.svg', + 'pipo.svg', + 'piso.svg', + 'rsff.svg', + 'sipo.svg', + 'siso.svg', + 'timer.svg', + + # Actions + 'flip-horizontal.svg', + 'flip-vertical.svg', + 'rotate-left.svg', + 'rotate-right.svg', +] + +icon_files_xml = [] +foreach file: icon_files + icon_files_xml += '' + file + '' +endforeach + +resources_xml = configure_file( + input: 'resources.xml.in', + output: 'resources.xml', + configuration: { + 'ICON_FILES': '\n '.join(icon_files_xml), + 'PREFIX': prefix, + } +) + +ggate_resources = gnome.compile_resources( + 'ggate-resources', + resources_xml, + source_dir: meson.current_source_dir(), + gresource_bundle: true, + install: true, + install_dir: pkgdatadir, +) diff --git a/data/images/components/resources.xml.in b/data/images/resources.xml.in similarity index 61% rename from data/images/components/resources.xml.in rename to data/images/resources.xml.in index c2721e8..41a1d09 100644 --- a/data/images/components/resources.xml.in +++ b/data/images/resources.xml.in @@ -1,6 +1,6 @@ - + @ICON_FILES@ diff --git a/data/images/scalable/7seg_component.svg b/data/images/scalable/7seg_component.svg deleted file mode 100644 index 2ed75c0..0000000 --- a/data/images/scalable/7seg_component.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/images/scalable/adder_component.svg b/data/images/scalable/adder_component.svg deleted file mode 100644 index a90ed98..0000000 --- a/data/images/scalable/adder_component.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/images/scalable/counter_component.svg b/data/images/scalable/counter_component.svg deleted file mode 100644 index 9f42564..0000000 --- a/data/images/scalable/counter_component.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/images/scalable/dff_component.svg b/data/images/scalable/dff_component.svg deleted file mode 100644 index e89395a..0000000 --- a/data/images/scalable/dff_component.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/images/scalable/jkff_component.svg b/data/images/scalable/jkff_component.svg deleted file mode 100644 index aa41973..0000000 --- a/data/images/scalable/jkff_component.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/images/scalable/pipo_component.svg b/data/images/scalable/pipo_component.svg deleted file mode 100644 index d08dac0..0000000 --- a/data/images/scalable/pipo_component.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/images/scalable/piso_component.svg b/data/images/scalable/piso_component.svg deleted file mode 100644 index cac3eb8..0000000 --- a/data/images/scalable/piso_component.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/images/scalable/rsff_component.svg b/data/images/scalable/rsff_component.svg deleted file mode 100644 index 5aaf10c..0000000 --- a/data/images/scalable/rsff_component.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/images/scalable/sipo_component.svg b/data/images/scalable/sipo_component.svg deleted file mode 100644 index 66ad5de..0000000 --- a/data/images/scalable/sipo_component.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/data/images/scalable/siso_component.svg b/data/images/scalable/siso_component.svg deleted file mode 100644 index aab38c6..0000000 --- a/data/images/scalable/siso_component.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/images/scalable/timer_component.svg b/data/images/scalable/timer_component.svg deleted file mode 100644 index d0068eb..0000000 --- a/data/images/scalable/timer_component.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/ui/context-menu.ui b/data/ui/context-menu.ui deleted file mode 100644 index 82c0553..0000000 --- a/data/ui/context-menu.ui +++ /dev/null @@ -1,57 +0,0 @@ - - -
- horizontal-buttons - - Flip Horizontally - menu.flip_hori - - - Flip Vertically - menu.flip_verti - - - Rotate Left - menu.rot_left - - - Rotate right - menu.rot_right - -
-
- - Properties - menu.properties - <Ctrl>P - - - Add net - app.toggle_net - <Ctrl>E - -
-
- - Copy - app.on_action_copy_pressed - <Ctrl>C - - - Cut - app.on_action_cut_pressed - <Ctrl>X - - - Paste - app.on_action_paste_pressed - <Ctrl>V - - - Delete - app.on_action_delete_pressed - BackSpace - -
-
- diff --git a/data/ui/running-context-menu.ui b/data/ui/running-context-menu.ui deleted file mode 100644 index b8bb472..0000000 --- a/data/ui/running-context-menu.ui +++ /dev/null @@ -1,10 +0,0 @@ - - -
- - Timing Diagram - app.on_action_diagram_pressed - -
-
-
\ No newline at end of file diff --git a/meson.build b/meson.build index a685dc8..a3e6bca 100644 --- a/meson.build +++ b/meson.build @@ -42,6 +42,13 @@ conf.set('VERSION', meson.project_version()) conf.set('bindir', get_option('bindir')) subdir('bin') +subdir('data/images') + +# Install the entire ggate package recursively, excluding .pyc files +install_subdir('ggate', + install_dir: py_installation.get_install_dir(), + exclude_files: ['**/*.pyc', '**/__pycache__'] +) gnome.post_install( glib_compile_schemas: true, From 984cb3c693947149a803144bc36c53487d8695cb Mon Sep 17 00:00:00 2001 From: astraldev Date: Sun, 20 Jul 2025 17:26:51 +0100 Subject: [PATCH 04/37] chore: update meson.build file --- build-aux/flatpak/org.astralco.GGate.json | 47 ++++++++++----- meson.build | 16 ++--- poetry.lock | 73 +++++++++++++++++++++-- pyproject.toml | 7 ++- 4 files changed, 110 insertions(+), 33 deletions(-) diff --git a/build-aux/flatpak/org.astralco.GGate.json b/build-aux/flatpak/org.astralco.GGate.json index 4bd408c..456f144 100644 --- a/build-aux/flatpak/org.astralco.GGate.json +++ b/build-aux/flatpak/org.astralco.GGate.json @@ -1,27 +1,46 @@ { - "app-id": "org.astralco.GGate", - "runtime": "org.gnome.Platform", - "runtime-version": "47", - "sdk": "org.gnome.Sdk", - "command": "ggate", - "finish-args": [ + "app-id" : "org.astralco.GGate", + "runtime" : "org.gnome.Platform", + "runtime-version" : "47", + "sdk" : "org.gnome.Sdk", + "command" : "ggate", + "finish-args" : [ "--share=ipc", "--socket=fallback-x11", "--socket=wayland", "--device=dri", "--filesystem=home" ], - "modules": [ + "modules" : [ { - "name": "ggate", - "builddir": true, - "buildsystem": "meson", - "sources": [ + "name": "python-modules", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --prefix=${FLATPAK_DEST} pycairo pygobject igraph shapely packaging" + ], + "build-options": { + "build-args": [ + "--share=network" + ] + }, + "sources": [] + }, + { + "name" : "ggate", + "builddir" : true, + "buildsystem" : "meson", + "sources" : [ { - "type": "dir", - "path": "../../" + "type" : "dir", + "path" : "../../" } + ], + "config-opts" : [ + "--libdir=lib" ] } - ] + ], + "build-options" : { + "env" : { } + } } diff --git a/meson.build b/meson.build index a3e6bca..8b1bacf 100644 --- a/meson.build +++ b/meson.build @@ -8,23 +8,19 @@ project( ], ) -dependency('gtk4', version: '>= 4.18.0') -dependency('libadwaita-1', version: '>= 1.8.alpha') +dependency('pygobject-3.0') +dependency('gtk4', version: '>= 4.16.0') +dependency('libadwaita-1', version: '>= 1.6.8') gnome = import('gnome') python = import('python') py_installation = python.find_installation('python3', - required: true, - modules: [ - ['pycairo', '>= 1.27.0, < 2.0.0'], - ['gi', '>= 3.52.3, < 4.0.0'], - ['packaging', '>= 24.2, < 25.0'], - ['igraph', '>= 0.11.9, < 0.12.0'], - ['shapely', '== 2.1.1'], - ] + modules: ['pycairo', 'pygobject', 'packaging', 'igraph', 'shapely'] ) +py_installation.dependency() + pkgdatadir = get_option('prefix') / get_option('datadir') / meson.project_name() profile = get_option('profile') diff --git a/poetry.lock b/poetry.lock index ae7efd0..df53963 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "igraph" @@ -53,6 +53,48 @@ test = ["Pillow (>=9) ; platform_python_implementation != \"PyPy\"", "cairocffi test-musl = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] test-win-arm64 = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] +[[package]] +name = "meson" +version = "1.8.2" +description = "A high performance build system" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "meson-1.8.2-py3-none-any.whl", hash = "sha256:274b49dbe26e00c9a591442dd30f4ae9da8ce11ce53d0f4682cd10a45d50f6fd"}, + {file = "meson-1.8.2.tar.gz", hash = "sha256:c105816d8158c76b72adcb9ff60297719096da7d07f6b1f000fd8c013cd387af"}, +] + +[package.extras] +ninja = ["ninja (>=1.8.2)"] +progress = ["tqdm"] +typing = ["mypy", "typing_extensions ; python_version < \"3.8\""] + +[[package]] +name = "meson-python" +version = "0.18.0" +description = "Meson Python build backend (PEP 517)" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "meson_python-0.18.0-py3-none-any.whl", hash = "sha256:3b0fe051551cc238f5febb873247c0949cd60ded556efa130aa57021804868e2"}, + {file = "meson_python-0.18.0.tar.gz", hash = "sha256:c56a99ec9df669a40662fe46960321af6e4b14106c14db228709c1628e23848d"}, +] + +[package.dependencies] +meson = [ + {version = ">=0.64.0", markers = "python_version < \"3.12\""}, + {version = ">=1.2.3", markers = "python_version >= \"3.12\""}, +] +packaging = ">=23.2" +pyproject-metadata = ">=0.9.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2024.08.06)", "sphinx (>=8.1.0,<8.2.0)", "sphinx-copybutton (>=0.5.0)", "sphinx-design (>=0.1.0)", "sphinxext-opengraph (>=0.7.0)"] +test = ["build", "cython (>=3.0.3)", "pytest (>=6.0)", "pytest-cov[toml]", "pytest-mock", "typing-extensions (>=3.7.4) ; python_version < \"3.11\"", "wheel"] + [[package]] name = "mypy" version = "1.16.1" @@ -187,14 +229,14 @@ files = [ [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] @@ -263,6 +305,25 @@ files = [ [package.extras] dev = ["PyGObject", "black (>=25.1.0)", "codespell (>=2.4.1)", "isort (>=6.0.1)", "pre-commit", "ruff (>=0.9.10)"] +[[package]] +name = "pyproject-metadata" +version = "0.9.1" +description = "PEP 621 metadata parsing" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pyproject_metadata-0.9.1-py3-none-any.whl", hash = "sha256:ee5efde548c3ed9b75a354fc319d5afd25e9585fa918a34f62f904cc731973ad"}, + {file = "pyproject_metadata-0.9.1.tar.gz", hash = "sha256:b8b2253dd1b7062b78cf949a115f02ba7fa4114aabe63fa10528e9e1a954a816"}, +] + +[package.dependencies] +packaging = ">=19.0" + +[package.extras] +docs = ["furo (>=2023.9.10)", "myst-parser", "sphinx (>=7.0)", "sphinx-autodoc-typehints", "sphinx-autodoc-typehints (>=1.10.0)"] +test = ["exceptiongroup ; python_version < \"3.11\"", "pytest (>=6.2.4)", "pytest-cov[toml] (>=2)", "tomli (>=1.0.0) ; python_version < \"3.11\""] + [[package]] name = "python-igraph" version = "0.11.9" @@ -388,7 +449,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -440,4 +501,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">= 3.10,<4.0" -content-hash = "6dfd71abf70936b1ceb3ffb321186be94fe0cf4ed3f946f6d246d57974831c54" +content-hash = "9756805751f43763c8446b3e4bc6b3cf67fea601d8a77dc69e1ba385f9f82537" diff --git a/pyproject.toml b/pyproject.toml index 9c3279e..ffaab30 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,9 +11,10 @@ requires-python = ">= 3.10,<4.0" dependencies = [ "pycairo (>=1.27.0,<2.0.0)", "pygobject (>=3.52.3,<4.0.0)", - "packaging (>=24.2,<25.0)", + "packaging (>=25.0)", "python-igraph (>=0.11.9,<0.12.0)", "shapely (==2.1.1)", + "meson-python (>=0.18.0,<0.19.0)", ] [tool.ruff.lint] @@ -28,5 +29,5 @@ mypy = "^1.15.0" ruff = "^0.11.2" [build-system] -requires = ["poetry-core>=2.0.0,<3.0.0"] -build-backend = "poetry.core.masonry.api" \ No newline at end of file +requires = ["meson-python>=0.11.0"] +build-backend = "mesonpy" From 60557f0b594948b5b0f16de8a071ad9a7eee2ad2 Mon Sep 17 00:00:00 2001 From: astraldev Date: Sun, 20 Jul 2025 19:03:05 +0100 Subject: [PATCH 05/37] chore: improve meson build --- bin/meson.build | 2 +- data/images/meson.build | 39 +++++++++++++++++++++------------------ meson.build | 25 +++++++++++++++++-------- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/bin/meson.build b/bin/meson.build index e8731bf..689b90b 100644 --- a/bin/meson.build +++ b/bin/meson.build @@ -1,6 +1,6 @@ configure_file( input: './ggate.in', - output: 'bin', + output: 'ggate', configuration: conf, install: true, install_dir: get_option('bindir'), diff --git a/data/images/meson.build b/data/images/meson.build index 2d6153d..82f47f4 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -1,27 +1,27 @@ -icon_files = [ +icon_files = files( # Components - '7seg.svg', - 'adder.svg', - 'counter.svg', - 'dff.svg', - 'jkff.svg', - 'pipo.svg', - 'piso.svg', - 'rsff.svg', - 'sipo.svg', - 'siso.svg', - 'timer.svg', + 'components/7seg.svg', + 'components/adder.svg', + 'components/counter.svg', + 'components/dff.svg', + 'components/jkff.svg', + 'components/pipo.svg', + 'components/piso.svg', + 'components/rsff.svg', + 'components/sipo.svg', + 'components/siso.svg', + 'components/tff.svg', # Actions - 'flip-horizontal.svg', - 'flip-vertical.svg', - 'rotate-left.svg', - 'rotate-right.svg', -] + 'actions/flip-horizontal.svg', + 'actions/flip-vertical.svg', + 'actions/rotate-left.svg', + 'actions/rotate-right.svg', +) icon_files_xml = [] foreach file: icon_files - icon_files_xml += '' + file + '' + icon_files_xml += '' + file.full_path() + '' endforeach resources_xml = configure_file( @@ -41,3 +41,6 @@ ggate_resources = gnome.compile_resources( install: true, install_dir: pkgdatadir, ) + +install_subdir('icons/components', install_dir: pkgdatadir) +install_subdir('icons/actions', install_dir: pkgdatadir) \ No newline at end of file diff --git a/meson.build b/meson.build index 8b1bacf..1b5fe13 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project( 'ggate', version: '5.0.0', - meson_version: '>= 0.62.0', + meson_version: '>= 1.4.0', default_options: [ 'warning_level=2', 'werror=false', @@ -16,7 +16,7 @@ gnome = import('gnome') python = import('python') py_installation = python.find_installation('python3', - modules: ['pycairo', 'pygobject', 'packaging', 'igraph', 'shapely'] + modules: ['gi', 'cairo', 'packaging', 'igraph', 'shapely'] ) py_installation.dependency() @@ -40,14 +40,23 @@ conf.set('bindir', get_option('bindir')) subdir('bin') subdir('data/images') +exclude_pycache_dirs = run_command( + 'sh', '-c', + ''' + find ggate -type d -name __pycache__ | sed "s|^ggate/||" + ''', + check: true +).stdout().strip().split('\n') + # Install the entire ggate package recursively, excluding .pyc files install_subdir('ggate', install_dir: py_installation.get_install_dir(), - exclude_files: ['**/*.pyc', '**/__pycache__'] + exclude_directories: exclude_pycache_dirs, + exclude_files: ['*.pyc'] ) -gnome.post_install( - glib_compile_schemas: true, - gtk_update_icon_cache: true, - update_desktop_database: true, -) \ No newline at end of file +# gnome.post_install( +# glib_compile_schemas: true, +# gtk_update_icon_cache: true, +# update_desktop_database: true, +# ) \ No newline at end of file From dd88f5b29df0e4f4ff2953565d4f5cca35e88e12 Mon Sep 17 00:00:00 2001 From: astraldev Date: Sun, 20 Jul 2025 20:12:58 +0100 Subject: [PATCH 06/37] chore: test meson build --- bin/ggate.in | 5 +++++ ggate/Components/LogicGates/SystemComponents.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/ggate.in b/bin/ggate.in index cf2c771..d46a7b5 100755 --- a/bin/ggate.in +++ b/bin/ggate.in @@ -10,7 +10,12 @@ gi.require_version("Adw", "1") from ggate import __version__ from ggate.MainFrame import GLogicApplication +pkgdatadir = "@pkgdatadir@" + if __name__ == "__main__": + resource = Gio.Resource.load(os.path.join(pkgdatadir, "ggate-resources.gresource")) + resource._register() + app = GLogicApplication() if len(sys.argv) > 1 and sys.argv[1] == "--version": print(f"GGate: v{__version__}") diff --git a/ggate/Components/LogicGates/SystemComponents.py b/ggate/Components/LogicGates/SystemComponents.py index e23443c..217c058 100644 --- a/ggate/Components/LogicGates/SystemComponents.py +++ b/ggate/Components/LogicGates/SystemComponents.py @@ -95,7 +95,7 @@ def set_rot_props(self): def click(self, x, y, time): return False - def propertyChanged(self, prop) -> False | PropertyError: + def propertyChanged(self, prop) -> bool | PropertyError: return False def initialize(self): From b87a01a57d18abea40c0b57d6c465903b71226e9 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:54:53 +0100 Subject: [PATCH 07/37] fix: launch on GTK4/libadwaita and prune logic-gate dead code Co-Authored-By: Claude Opus 4.8 --- .agents/README.md | 69 ++++ .agents/TODO.md | 93 +++++ .agents/skills/designing-gnome-ui.md | 368 ++++++++++++++++++ .agents/skills/developing-gtk-apps.md | 198 ++++++++++ .claude/skills/developing-gtk-apps/SKILL.md | 198 ++++++++++ .gitignore | 5 +- CLAUDE.md | 125 ++++++ data/images/meson.build | 10 +- .../LogicGates/Counters/ModNCounter.py | 10 +- .../LogicGates/Counters/PIPOShiftRegister.py | 14 +- .../LogicGates/Counters/PISOShiftRegister.py | 8 +- .../LogicGates/Counters/SIPOShiftRegister.py | 14 +- .../LogicGates/Counters/SISOShiftRegister.py | 4 +- .../LogicGates/Miscellaneous/Probe.py | 2 +- .../LogicGates/Miscellaneous/Text.py | 2 +- ggate/Components/LogicGates/Standard/GND.py | 2 +- ggate/Components/LogicGates/Standard/NAND.py | 2 +- ggate/Components/LogicGates/Standard/NOR.py | 2 +- ggate/Components/LogicGates/Standard/OSC.py | 2 +- ggate/Components/LogicGates/Standard/SW.py | 2 +- ggate/Components/LogicGates/Standard/XOR.py | 3 +- .../Components/LogicGates/SystemComponents.py | 5 +- ggate/Components/LogicGates/__init__.py | 1 - ggate/Components/Windows/Properties.py | 2 +- .../Components/Windows/TimingGraph/Diagram.py | 13 +- .../Components/Windows/TimingGraph/Display.py | 12 +- ggate/MainFrame.py | 78 ++-- ggate/MenuPopover.py | 4 +- ggate/Utils.py | 4 - meson.build | 1 + run.py | 4 + 31 files changed, 1148 insertions(+), 109 deletions(-) create mode 100644 .agents/README.md create mode 100644 .agents/TODO.md create mode 100644 .agents/skills/designing-gnome-ui.md create mode 100644 .agents/skills/developing-gtk-apps.md create mode 100644 .claude/skills/developing-gtk-apps/SKILL.md create mode 100644 CLAUDE.md diff --git a/.agents/README.md b/.agents/README.md new file mode 100644 index 0000000..50ab28b --- /dev/null +++ b/.agents/README.md @@ -0,0 +1,69 @@ +# `.agents/` — GGate GTK4 documentation database + +Curated reference for building GGate (logic-circuit simulator, **GTK 4 + libadwaita**, +heavy **Cairo** canvas rendering). Scoped to the widgets/APIs this project actually uses, +not the whole toolkit. Built so an agent (agy / Gemini) can continue UI work without +re-deriving the toolkit from scratch. + +## How to use this database + +1. **Architecture / plumbing question** (lifecycle, threading, GSettings, actions, + packaging, "app crashes/freezes") → `skills/developing-gtk-apps.md`. +2. **UI / widget choice / HIG / "which widget, how to lay it out"** → + `skills/designing-gnome-ui.md`. +3. **Exact API of a widget already chosen** (constructor, methods, signals, gotchas) + → the relevant file in `gtk4/`. Start at `gtk4/README.md` for the index. + +Always prefer these over guessing. For anything version-sensitive or not covered, +confirm against the canonical docs: + +- Libadwaita 1.x: https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/ +- GTK 4: https://docs.gtk.org/gtk4/ +- PyGObject: https://api.pygobject.gnome.org/ • PyCairo: https://pycairo.readthedocs.io/ + +## Project context (why these widgets) + +- **The canvas is the app.** `Gtk.DrawingArea` + Cairo draw every gate, wire, and the + new timing-waveform graph. `gtk4/drawing-cairo.md` is the most load-bearing file here. +- **Input = event controllers**, not legacy signals: `GestureClick`, + `EventControllerMotion/Key/Focus` drive placing/dragging/selecting components. +- **Dialogs are migrating to libadwaita**: the rewritten `PropertyWindow` + (`ggate/Components/Windows/Properties.py`) uses `Adw.Dialog` + boxed-list rows + + `Adw.Banner` for inline validation. See `gtk4/adwaita/`. +- **Text on canvas = Pango**, measured/rendered through Cairo. See `gtk4/pango/`. + +## Layout + +`gtk4/` holds the **raw canonical HTML reference pages** (one per class), fetched from +the official docs — read them directly. They are grouped by namespace: + +| Path | Source | Pages | +|------|--------|-------| +| `gtk4/README.md` | (navigation index) widget → where used in GGate → which file | — | +| `gtk4/adwaita/` | libadwaita 1.x — gnome.pages.gitlab.gnome.org/libadwaita | 17: Dialog, Application(Window), Preferences{Page,Group}, EntryRow, SpinRow, ComboRow, SwitchRow, Banner, StatusPage, HeaderBar, AboutDialog, AlertDialog, ResponseAppearance, Toast, ToastOverlay | +| `gtk4/gtk/` | GTK 4 — docs.gtk.org/gtk4 | 35: DrawingArea, Box, Label, Image, ScrolledWindow, ListBox(Row), Frame, Paned, Button, MenuButton, ToggleButton, SpinButton, CheckButton, ComboBox(Text), Color/FontDialog(Button), PopoverMenu, Gesture/EventController*, FileDialog, FileFilter, StringList, ListStore, CellRendererText, Builder, Window, HeaderBar, ActionBar | +| `gtk4/pango/` | Pango — docs.gtk.org/Pango | 2: Layout, FontDescription | +| `gtk4/gio/` | GIO — docs.gtk.org/gio | 2: SimpleAction, ListStore | +| `gtk4/cairo/` | PyCairo — pycairo.readthedocs.io | 4: context, surfaces, patterns, matrix | + +`skills/` holds two installable skills as authored guidance (not raw docs): + +| File | Covers | +|------|--------| +| `skills/developing-gtk-apps.md` | App architecture, lifecycle, threading, GSettings, packaging | +| `skills/designing-gnome-ui.md` | GNOME HIG, widget selection, UI polish | + +> Pages are full HTML (nav chrome included) — read the class's *Constructors / Methods / +> Properties / Signals* sections. To refresh or add a class, curl the canonical URL, e.g. +> `curl -sL https://docs.gtk.org/gtk4/class..html -o gtk4/gtk/.html` +> (libadwaita: `.../libadwaita/doc/1-latest/class..html`). + +## Cross-cutting rules (do not violate) + +- **GTK is single-threaded.** Touch widgets only on the main thread; marshal with + `GLib.idle_add(...)`. (Cairo draw funcs already run on the main thread.) +- **GTK 4 has no `show_all()`** — widgets are visible by default; use `set_visible()`. +- **No `container.add()`** — use `box.append()`, `set_child()`, `Adw.PreferencesGroup.add()`. +- **Dialogs**: prefer `Adw.Dialog`/`Adw.AlertDialog` (adaptive, `.present(parent)`) over + `Gtk.Dialog`/`Gtk.MessageDialog` (deprecated in GTK 4.10). +- **File chooser**: prefer async `Gtk.FileDialog` (4.10+) over `Gtk.FileChooserDialog`. diff --git a/.agents/TODO.md b/.agents/TODO.md new file mode 100644 index 0000000..7c69aee --- /dev/null +++ b/.agents/TODO.md @@ -0,0 +1,93 @@ +# GGate — working backlog + +Consolidated from the root `TODO` file, inline `# TODO` markers, and agy's project scan +(session d60b8a4c). Status legend: `[ ]` open · `[~]` in progress · `[x]` done. +Items marked **(verify)** are from the scan and should be confirmed against current code +before agy acts. Owner model: Claude specs → agy implements → Claude reviews. + +## P0 — broken integration (app likely won't run clean) + +- [ ] **`bin/ggate.in` missing imports** — uses `Gio.Resource.load()` and `os.path.join()` + without importing `gi`/`Gio`/`os`. `bin/ggate.in:16`. **(verify)** +- [ ] **Version mismatch** — `pyproject.toml` + `meson.build` say `5.0.0`; `ggate/config.py` + + `ggate/__init__.py` hardcode `4.0.0`. Pick one source of truth (ideally meson + `configure_file` → `config.py`). **(verify)** +- [ ] **`MainFrame` → `PropertyWindow` API drift** — MainFrame calls window-only methods + (`set_transient_for`/`set_hide_on_close`/`set_modal`/`destroy`) and `set_component()` on + an `Adw.Dialog` subclass that no longer has them (now `show_properties`). `Adw.Dialog` + uses `.present(parent)`. `MainFrame.py:~564`. **(verify — branch diff already removed + some of these; confirm what remains)** +- [ ] **`MainFrame.about_dialog` never created** — `self.about_dialog.present()` called but + the object is never instantiated; `AboutGGate` (`Windows/About.py`) is not imported. + `MainFrame.py:~335`. Wire `AboutGGate.create()` + an `app.about` action. +- [ ] **`MainFrame.statusbar` never created** — appended at `MainFrame.py:~295` but never + instantiated; `StatusDisplay` not imported. **(verify)** + +## P1 — micro-windows cleanup (current focus) + +### `Windows/Properties.py` (PropertyWindow) — grounded against `.agents/gtk4/adwaita/` +- [ ] `close-request` signal doesn't exist on `Adw.Dialog` → use `closed`. (`:30`) +- [ ] `self.vbox` / `self.component` read before being set in `__init__` → init to `None`. +- [ ] `Adw.ComboRow` has no `changed` signal → `notify::selected`. (`:133`) +- [ ] `Adw.SpinRow` has no `changed` signal → `notify::value`. (`:146`, `:159`) +- [ ] `Adw.EntryRow` has no `set_width_chars` → remove (it's a `Gtk.Entry` method). (`:167`) +- [ ] Float `SpinRow.new_with_range(min,max,step)` passes digit-count as *step* and never + calls `set_digits`. Separate step from digits. (`:149-154`) +- [ ] Group-assignment logic drops the first control of each group (creates the group but + neither adds the widget nor appends to `prop_controls`), desyncing `prop_controls` from + value indices. (`:176-194`) +- [ ] `Adw.PreferencesGroup` has no `get_children()` → `AttributeError`. (`:206`) +- [ ] Rebuilds all widgets + `present()` on every `show_properties`; old children leak. + Consider `Adw.ToolbarView` (top bar + content) over manual `HeaderBar`-in-`Box`. + +### `MainFrame` window chrome +- [ ] App now launches (header moved into a content `Gtk.Box` + `set_content`, since + `Adw.ApplicationWindow` has no `set_titlebar`/`set_child`). Refinement: use the idiomatic + `Adw.ToolbarView` (`add_top_bar(header)` + `set_content(body)`) instead of the plain box. + +### `Windows/About.py` +- [ ] Not wired into MainFrame (see P0). Duplicate `set_comments` call. `:21` TODO: + release notes / support url / debug info. + +### `Windows/Preferences.py` +- [ ] Still subclasses deprecated `Gtk.Dialog`. Candidate migration to + `Adw.PreferencesDialog`. **Confirm scope with PM first.** +- [ ] `:24` `# todo: fix font picker`. + +### `Windows/TimingGraph/Display.py` + `Diagram.py` +- [ ] `Display` never adds the diagram canvas as a child → blank dialog; `.present()` + called without a parent. **(verify)** +- [ ] `Diagram` never registers `name_area_draw_fn` / `chart_area_draw_fn` via + `set_draw_func()` → draw fns never run. **(verify)** +- [ ] Diagram TODOs (`:135,:148,:170,:179,:210`): stroke/fill colors, name-area border, + division strokes, text color, tick colors. + +## P2 — dead code / hygiene + +- [ ] Remove GTK3 leftovers: `ggate/TimingDiagramWindow.py`, `ggate/DiagramArea.py` + (confirm no imports first). `DiagramArea.py:205` TODO. +- [ ] `ggate/Components/Managers/Exporter.py` is a dead stub; real exporter is + `ggate/Exporter.py`. Remove stub or consolidate. +- [ ] Commented-out translator-credits block `MainFrame.py:~569-570`; commented gnome + post-install in `meson.build:59-63`. +- [ ] Style inconsistency: 2-space vs 4-space indent across files; mixed single/double + quotes; stale `indent-tabs-mode: t` magic header comments while code uses spaces. + (Convention per `.vscode/copilot-instructions.md`: double quotes, no comments.) + +## P3 — feature backlog (from root `TODO`) + +- [ ] Animate logic circuit. +- [ ] **Native SVG icon set (gemini to build later).** First check for a usable + open/licensed icon pack; if none fits (logic-gate symbols are domain-specific), have + gemini author SVGs matching the existing `data/images/**.svg` style. Scope: PNG-only + component icons (`led, not, osc, probe, sw, tribuff, vdd, xor`) + the deleted toolbar + icons (`add-net`, `add-component`, currently a `list-add-symbolic` placeholder in + `set_up_action_bar`). Consider rendering component icons from each component's Cairo + `drawComponent` via `cairo.SVGSurface` (self-maintaining, matches the canvas). + +## Other inline TODOs + +- [ ] `Managers/Alerts.py:8`, `MainFrame.py:374` — i18n/translations. +- [ ] `Managers/FileManager.py:104` — implement schematics export. +- [ ] `MainFrame.py:491` — toast on clipboard parse failure. +- [ ] `DrawArea.py:516` — optimize redraw. diff --git a/.agents/skills/designing-gnome-ui.md b/.agents/skills/designing-gnome-ui.md new file mode 100644 index 0000000..1e1b631 --- /dev/null +++ b/.agents/skills/designing-gnome-ui.md @@ -0,0 +1,368 @@ +--- +name: designing-gnome-ui +description: Use when designing, implementing, or modifying UI for GNOME apps; before writing UI code; when reviewing existing UI for HIG compliance; when working with GTK 4/libadwaita or styling Qt/PySide6 for GNOME +--- + +# Designing GNOME UI + +Design GNOME UIs that are HIG-compliant, polished, and user-centered. + +**Core principle:** No UI code without design decisions. Pattern selection and quality verification happen before implementation. + +**Quality layers:** Compliance (follows HIG) → Polish (feels premium) → Rigor (handles edge cases) + +**Companion skill:** For app architecture (lifecycle, threading, GSettings, actions, packaging), use `developing-gtk-apps`. + +## What's New (libadwaita 1.6-1.8) + +| Need | Widget/API | Notes | +|------|------------|-------| +| Exclusive toggles (view mode) | `AdwToggleGroup` | Replaces multiple `GtkToggleButton` | +| Loading indicator | `AdwSpinner` | Works with animations disabled | +| Persistent bottom controls | `AdwBottomSheet` | Music player, persistent actions | +| Wrapping content (tags) | `AdwWrapBox` | Auto-wraps like text | +| Inline view switching | `AdwInlineViewSwitcher` | For cards, sidebars | +| Keyboard shortcuts | `AdwShortcutsDialog` | Replaces deprecated `GtkShortcutsWindow` | +| System accent color | Automatic | Apps follow desktop preference via portal | +| System fonts | `AdwStyleManager` | Access monospace/document fonts | + +**Deprecations:** `.dim-label` → use `.dimmed` class + +```python +# AdwToggleGroup - view mode switching +toggle_group = Adw.ToggleGroup() +toggle_group.add(Adw.Toggle(icon_name="view-grid-symbolic", name="grid")) +toggle_group.add(Adw.Toggle(icon_name="view-list-symbolic", name="list")) +toggle_group.connect("notify::active-name", lambda g, p: set_view(g.get_active_name())) +header.pack_start(toggle_group) + +# AdwBottomSheet - music player controls +bottom_sheet = Adw.BottomSheet() +bottom_sheet.set_content(main_content) +bottom_sheet.set_sheet(player_controls) +bottom_sheet.set_open(True) # Show sheet +window.set_content(bottom_sheet) + +# AdwWrapBox - tag display +wrap_box = Adw.WrapBox(spacing=6) +for tag in ["Python", "GTK", "GNOME", "libadwaita"]: + chip = Gtk.Label(label=tag) + chip.add_css_class("chip") # Custom styling + wrap_box.append(chip) + +# System fonts (1.7+) - for code editors, document views +style_manager = Adw.StyleManager.get_default() +mono_font = style_manager.get_monospace_font_name() # User's preferred mono font +doc_font = style_manager.get_document_font_name() # User's preferred document font +# Also available as CSS: --monospace-font-family, --document-font-family +``` + +## The Process + +```dot +digraph gnome_ui_process { + rankdir=LR; + node [shape=box]; + + "UI Task" -> "1. Context" -> "2. Patterns" -> "3. Details" -> "4. Checklist" -> "Implement"; + "4. Checklist" -> "2. Patterns" [label="issues" style=dashed]; +} +``` + +1. **Context:** User goal, app type, constraints (screen size, input) +2. **Patterns:** Select containers, navigation, controls, feedback +3. **Details:** Typography, spacing, icons, writing style +4. **Checklist:** Verify compliance, polish, rigor before code + +## Container Selection + +```dot +digraph containers { + rankdir=TB; + node [shape=box]; + + "Building what?" [shape=diamond]; + "AdwApplicationWindow + HeaderBar" [style=filled fillcolor=lightgreen]; + "AdwPreferencesWindow" [style=filled fillcolor=lightgreen]; + "AdwDialog" [style=filled fillcolor=lightgreen]; + + "Building what?" -> "AdwApplicationWindow + HeaderBar" [label="main window"]; + "Building what?" -> "AdwPreferencesWindow" [label="settings"]; + "Building what?" -> "AdwDialog" [label="modal action"]; +} +``` + +| Scenario | Default | Notes | +|----------|---------|-------| +| App window | `AdwApplicationWindow` + `AdwHeaderBar` | Remember user size, start ~800x600 | +| Settings | `AdwPreferencesWindow` | Handles groups, search, subpages | +| List of items | `AdwPreferencesGroup` with rows | Boxed list style | +| Primary action | Single button, header bar end | `suggested-action` class if emphasized | +| Destructive action | `destructive-action` class | Requires undo or confirmation | + +## Navigation Selection + +| Structure | Default Pattern | +|-----------|-----------------| +| Single view | None needed | +| 2-4 views | `AdwViewSwitcher` in header bar | +| Many/dynamic views | `AdwNavigationSplitView` (sidebar) | +| Hierarchical | `AdwNavigationView` (drill-down) | + +## Control Defaults + +| Need | Default | Avoid | +|------|---------|-------| +| On/Off | `AdwSwitchRow` | Checkbox for settings | +| Choose one (few) | `AdwComboRow` | Radio buttons outside dialogs | +| Choose one (many) | `AdwComboRow` + search | Long unsearchable dropdowns | +| Text input | `AdwEntryRow` | Bare `GtkEntry` | +| Multiline text | `GtkTextView` + `card` class | Bare unstyled text view | +| Number | `AdwSpinRow` | Text entry for numbers | +| Date | `GtkCalendar` in popover | Text entry for dates | +| Action in list | `AdwActionRow` + suffix button | Multiple buttons per row | +| Search | `GtkSearchBar` + toggle button | Always-visible search box | + +### Search Bar Pattern + +```python +# Search bar slides down from header, toggle with button or Ctrl+F +search_bar = Gtk.SearchBar() +search_entry = Gtk.SearchEntry() +search_bar.set_child(search_entry) +search_bar.connect_entry(search_entry) +search_bar.set_key_capture_widget(window) # Type-to-search + +# Toggle button in header bar +search_btn = Gtk.ToggleButton(icon_name="system-search-symbolic") +search_btn.set_tooltip_text("Search") +search_bar.bind_property("search-mode-enabled", search_btn, "active", + GObject.BindingFlags.BIDIRECTIONAL | GObject.BindingFlags.SYNC_CREATE) +header.pack_end(search_btn) +toolbar_view.add_top_bar(search_bar) +``` + +### Form Validation Pattern + +```python +# Use error CSS class on invalid fields +def validate_entry(row): + text = row.get_text() + if not text or len(text) < 3: + row.add_css_class("error") + row.set_tooltip_text("Name must be at least 3 characters") + return False + row.remove_css_class("error") + row.set_tooltip_text("") + return True + +name_row.connect("changed", lambda r: validate_entry(r)) +``` + +**Validation timing:** On change for format checks, on focus-out for expensive checks, on submit for final validation. + +## List Widget Selection + +| Content | Widget | Why | +|---------|--------|-----| +| Settings/preferences | `AdwPreferencesGroup` | Boxed list style, handles rows | +| Navigation list (sidebar) | `GtkListBox` | Selection support, activatable rows | +| Large/dynamic data | `GtkListView` | Virtual scrolling, performance | +| Grid of items | `GtkGridView` | Thumbnail grids, icon views | + +**Selection modes:** Use `Gtk.SingleSelection` for navigation, `Gtk.MultiSelection` for bulk actions. Toggle selection mode with header bar button + action bar for bulk operations. See reference for code patterns. + +## Iconography + +**Rules:** +- Symbolic icons only (outline, monochrome) - never full-color in UI +- Source from GNOME Icon Library (`icon-library` app) +- Header bar: icon-only buttons, always add tooltips +- Naming: `action-object-symbolic` (e.g., `list-add-symbolic`) +- **Dynamic icons:** Update icon name based on state (e.g., `user-trash-symbolic` → `user-trash-full-symbolic`) + +| Action | Icon | +|--------|------| +| Add/New | `list-add-symbolic` | +| Delete | `user-trash-symbolic` | +| Settings | `emblem-system-symbolic` | +| Menu | `open-menu-symbolic` | +| Search | `system-search-symbolic` | +| Edit | `document-edit-symbolic` | +| Back | `go-previous-symbolic` | +| Drill-down | `go-next-symbolic` | +| Sync | `emblem-synchronizing-symbolic` | +| Offline | `network-offline-symbolic` | +| Warning | `dialog-warning-symbolic` | +| Error | `dialog-error-symbolic` | +| Select mode | `selection-mode-symbolic` | +| Check/Done | `emblem-ok-symbolic` | +| Close | `window-close-symbolic` | +| Refresh | `view-refresh-symbolic` | + +## Feedback Selection + +```dot +digraph feedback { + rankdir=TB; + node [shape=box]; + + "What happened?" [shape=diamond]; + "Transient or persistent?" [shape=diamond]; + "AdwToast" [style=filled fillcolor=lightgreen label="AdwToast (default)"]; + "AdwBanner" [style=filled fillcolor=lightyellow]; + "AdwDialog" [style=filled fillcolor=lightpink]; + "Progress/Spinner" [style=filled fillcolor=lightblue]; + + "What happened?" -> "Transient or persistent?" [label="state/error"]; + "What happened?" -> "AdwDialog" [label="needs decision"]; + "What happened?" -> "Progress/Spinner" [label="ongoing operation"]; + "Transient or persistent?" -> "AdwToast" [label="transient event"]; + "Transient or persistent?" -> "AdwBanner" [label="persistent state"]; +} +``` + +| Scenario | Default | Details | +|----------|---------|---------| +| Action done | `AdwToast` | Short message, optional undo | +| Destructive action | `AdwToast` + undo | Prefer over confirmation dialog | +| Error (recoverable) | `AdwToast` | Brief, auto-retry silently | +| Error (blocking) | `AdwDialog` | Explain problem and required fix | +| Persistent state | `AdwBanner` | Offline, degraded mode, auth required | +| Needs decision | `AdwDialog` | Conflicts, irreversible actions | +| Short wait (<5s) | `AdwSpinner` | No progress bar | +| Long operation (>30s) | Progress bar + text | "13 of 42 processed" | + +**Error escalation:** Toast (transient) → Banner (persists) → Dialog (requires action) +- Network blip: Toast, auto-retry +- Prolonged offline: Banner with "Retry" button +- Auth expired: Dialog + Banner until resolved + +**Dialog rules:** +- Cancel button first (left), action button last (right) +- Specific verbs ("Delete", "Save"), never "OK" or "Yes" +- Destructive actions use `destructive-action` style + +**Context menus:** Use `GtkPopoverMenu` for right-click actions (remove, rename, properties). Keep menus short; move complex actions to dialogs. + +### Empty State Pattern + +```python +# Show placeholder when list is empty +empty_state = Adw.StatusPage( + icon_name="folder-symbolic", + title="No Projects", + description="Create a project to get started" +) +create_btn = Gtk.Button(label="Create Project") +create_btn.add_css_class("pill") +create_btn.add_css_class("suggested-action") +empty_state.set_child(create_btn) + +# Use stack to switch between list and empty state +stack.add_named(list_view, "content") +stack.add_named(empty_state, "empty") +stack.set_visible_child_name("empty" if model.get_n_items() == 0 else "content") +``` + +## Quality Checklist + +**Create TodoWrite items for each applicable check before implementing.** + +### Layer 1: Compliance + +- [ ] Correct container type and header bar structure +- [ ] Navigation pattern matches content structure +- [ ] Standard widgets used (not custom where native exists) +- [ ] Symbolic icons from GNOME Icon Library +- [ ] Typography uses style classes (`title-1`, `heading`, `body`, `caption`) +- [ ] Libadwaita spacing defaults (no custom margins) +- [ ] Header capitalization for labels, sentence for descriptions + +### Layer 2: Polish + +- [ ] Clear visual hierarchy - important elements prominent +- [ ] Controls and text properly aligned +- [ ] Consistent patterns throughout +- [ ] Empty states have placeholder page (icon + message + action) +- [ ] Loading states show spinner/skeleton, never frozen UI +- [ ] Smooth resize and view transitions +- [ ] Comfortable density - not cramped, not sparse + +### Layer 3: Rigor + +- [ ] All controls keyboard-accessible (Tab, Enter, Space) +- [ ] All elements have accessible names for screen readers +- [ ] Works with high contrast (`GTK_THEME=Adwaita:hc`) +- [ ] Works with 200% text scaling +- [ ] Error handling for every input/action +- [ ] Edge cases handled (empty lists, long text, missing data) +- [ ] Destructive actions have undo where possible +- [ ] Responsive: works at 800x600, adapts to larger + +## Accessibility Quick Check + +```bash +# Test high contrast +GTK_THEME=Adwaita:hc ./myapp + +# Test large text (set in GNOME Settings > Accessibility first) + +# Test with screen reader +orca & +./myapp + +# Keyboard-only: unplug mouse, navigate entire app with Tab/Enter/Space +``` + +**Code:** Set accessible labels for icon-only buttons and images: +```python +button.update_property([Gtk.AccessibleProperty.LABEL], ["Add new item"]) +image.update_property([Gtk.AccessibleProperty.LABEL], ["Project thumbnail"]) +``` + +## Red Flags - STOP + +- Custom styling where libadwaita has a pattern +- Multiple "suggested" or "destructive" buttons per view +- Confirmation dialogs for reversible actions (use undo) +- Text over images or textured backgrounds +- Non-GNOME icons without strong justification +- Missing tooltips on icon-only header bar buttons +- Generic labels ("OK", "Yes", "No", "Submit") +- Frozen UI during operations (missing loading states) + +## Non-GTK Apps (Qt/PySide6) + +When styling Qt apps for GNOME: +- Use Adwaita-qt or manual QSS matching Adwaita colors +- Follow same patterns conceptually (header bar → toolbar, etc.) +- Match spacing, typography scale, and icon style +- Test alongside native GNOME apps for consistency + +## Reference Files + +| Need | File | +|------|------| +| Basic UI patterns | `gnome-hig-reference.md` | +| Advanced patterns | `gnome-advanced-patterns.md` | + +**gnome-hig-reference.md** - Read for most apps: +- Container, navigation, control, feedback patterns with code +- Search bar, form validation, **filter models**, grid views, selection modes +- File chooser dialogs, dark/light mode, responsive breakpoints +- Primary menu structure, About dialog, Shortcuts window +- Typography, writing style, **CSS color variables**, common mistakes +- **Accessibility testing** commands (high contrast, screen reader) +- **Phone/tablet breakpoints**, adaptive layouts + +**gnome-advanced-patterns.md** - Read when building: +- Drag & drop (reordering, file drops, cross-widget DnD) +- Undo/Redo (command pattern, history management) +- Tabs (AdwTabView, multi-document apps) +- System notifications (GNotification vs Toast) +- Media display (image viewers, video controls, **pinch-to-zoom gestures**) +- Split/Paned views (resizable panels) +- Welcome/Onboarding (first-run, feature callouts) +- Popovers (tool palettes, color pickers) +- **Keyboard shortcuts** (mnemonics, shortcut controllers) diff --git a/.agents/skills/developing-gtk-apps.md b/.agents/skills/developing-gtk-apps.md new file mode 100644 index 0000000..e72531e --- /dev/null +++ b/.agents/skills/developing-gtk-apps.md @@ -0,0 +1,198 @@ +--- +name: developing-gtk-apps +description: Use when building GTK 4/libadwaita applications; before writing app boilerplate; when debugging threading, signals, or lifecycle issues; when setting up GSettings, resources, or packaging; delegates UI/widget decisions to designing-gnome-ui skill +--- + +# Developing GTK Apps + +Build robust GTK 4/libadwaita applications with correct architecture, lifecycle, and patterns. + +**Core principle:** Get the foundation right before the UI. Application lifecycle, threading model, and resource management are where most GTK apps break. + +**Relationship to UI skill:** This skill handles architecture and plumbing. For widget selection, layout, and HIG compliance, use `designing-gnome-ui`. + +## Decision Flow + +| Task | Use | +|------|-----| +| Which widget for settings? | designing-gnome-ui | +| How to structure preferences window? | designing-gnome-ui | +| App crashes on startup | THIS SKILL | +| UI freezes during operation | THIS SKILL | +| How to save user preferences | THIS SKILL (GSettings) | +| Signal not firing/memory leak | THIS SKILL | +| Setting up new app boilerplate | THIS SKILL | +| Packaging for Flatpak | THIS SKILL | + +## What's Current (libadwaita 1.7+, GTK 4.18+) + +**API deprecations to avoid:** +- `GtkShortcutsWindow` → Use `AdwShortcutsDialog` (libadwaita 1.8+) +- `.dim-label` CSS class → Use `.dimmed` class +- X11/Broadway backends are deprecated in GTK 4 (removal planned for GTK 5) + +**New patterns (libadwaita 1.6-1.8):** +- `AdwSpinner` - Preferred over `GtkSpinner` +- `AdwToggleGroup` - Replaces multiple exclusive `GtkToggleButton` instances +- `AdwBottomSheet` - Persistent bottom sheets +- `AdwWrapBox` - Box that wraps children to new lines +- `AdwInlineViewSwitcher` - For cards, sidebars, boxed lists + +## Application Boilerplate + +```python +import gi +gi.require_version('Gtk', '4.0') +gi.require_version('Adw', '1') +from gi.repository import Gtk, Adw, Gio + +class MyApp(Adw.Application): + def __init__(self): + super().__init__( + application_id="com.example.MyApp", + flags=Gio.ApplicationFlags.DEFAULT_FLAGS + ) + + def do_activate(self): + win = self.props.active_window + if not win: + win = MyWindow(application=self) + win.present() + +class MyWindow(Adw.ApplicationWindow): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.set_default_size(800, 600) + +def main(): + app = MyApp() + return app.run(None) +``` + +### Application ID Rules + +| Rule | Example | +|------|---------| +| Reverse domain notation | `com.example.AppName` | +| Only alphanumeric + dots | `org.gnome.TextEditor` | +| Min 2 segments | `com.myapp` (not `myapp`) | +| Match desktop file | `com.example.MyApp.desktop` | + +### Lifecycle Signals + +| Signal | When | Use For | +|--------|------|---------| +| `startup` | Once, app launches | Actions, CSS, GSettings | +| `activate` | Each launch/raise | Create/present window | +| `shutdown` | App exits | Save state, cleanup | +| `open` | Files passed to app | Handle file arguments | + +```python +def do_startup(self): + Adw.Application.do_startup(self) # Chain up FIRST + self.setup_actions() +``` + +## Threading - The Critical Rule + +**GTK is single-threaded. All UI calls MUST happen on the main thread.** + +```python +# WRONG - will crash +def background_task(): + result = slow_computation() + self.label.set_text(result) # CRASH + +# RIGHT - use GLib.idle_add +def background_task(): + result = slow_computation() + GLib.idle_add(self.label.set_text, result) # Safe + +threading.Thread(target=background_task).start() +``` + +For async patterns with `Gio.Task` and cancellation, see `gtk-patterns-reference.md`. + +## Actions (Quick Reference) + +Actions connect UI to behavior. Define at app level (`app.action`) or window level (`win.action`). + +```python +# In do_startup - app-level action +quit_action = Gio.SimpleAction.new("quit", None) +quit_action.connect("activate", lambda a, p: self.quit()) +self.add_action(quit_action) +self.set_accels_for_action("app.quit", ["q"]) + +# In window __init__ - window-level action +save_action = Gio.SimpleAction.new("save", None) +save_action.connect("activate", self.on_save) +self.add_action(save_action) +self.get_application().set_accels_for_action("win.save", ["s"]) +``` + +For stateful actions (toggles), parameterized actions, and menu integration, see `gtk-patterns-reference.md`. + +## GSettings (Quick Reference) + +Persist user preferences with GSettings. Requires a schema file. + +```python +# In app __init__ +self.settings = Gio.Settings.new("com.example.MyApp") + +# Read/write values +dark = self.settings.get_boolean("dark-mode") +self.settings.set_boolean("dark-mode", True) + +# Bind to widget property (auto-syncs) +self.settings.bind("window-width", window, "default-width", + Gio.SettingsBindFlags.DEFAULT) + +# React to changes +self.settings.connect("changed::dark-mode", self.on_dark_changed) +``` + +For schema XML format and installation, see `gtk-patterns-reference.md`. + +## Debugging (Quick Reference) + +```bash +GTK_DEBUG=interactive myapp # Open GTK Inspector (Ctrl+Shift+D) +G_MESSAGES_DEBUG=all myapp # Show all debug messages +G_DEBUG=fatal-criticals myapp # Abort on critical warnings +GSETTINGS_BACKEND=memory myapp # Test without persisting settings +``` + +For full debugging patterns, profiling, and GDB integration, see `gtk-debugging-reference.md`. + +## Red Flags - STOP + +- Calling UI methods from threads (use `GLib.idle_add`) +- Missing `do_startup` chain-up +- Signal handlers without disconnect on destroy +- Blocking operations in signal handlers +- Hardcoded paths instead of XDG directories +- Missing application ID or wrong format +- Using `time.sleep()` in main thread +- Using `GtkShortcutsWindow` (deprecated - use `AdwShortcutsDialog`) +- Using `GtkSpinner` for libadwaita apps (use `AdwSpinner`) + +## Reference Files + +| Need | File | +|------|------| +| GObject classes, properties, **signals**, list models, **property bindings**, **factories** | `gtk-gobject-reference.md` | +| Actions, GSettings, Resources, Blueprint, async file ops | `gtk-patterns-reference.md` | +| Desktop file, **AppStream metadata**, Meson, Flatpak, **icons**, **Python deps** | `gtk-packaging-reference.md` | +| Testing with pytest, **async testing**, **headless/CI testing** | `gtk-testing-reference.md` | +| Internationalization, gettext, **ngettext plurals**, .po files, **Blueprint i18n**, **RTL testing** | `gtk-i18n-reference.md` | +| DBus activation, **interface export**, background services, **Flatpak portals** | `gtk-dbus-reference.md` | +| GTK Inspector, env vars, **profiling**, **memory debugging** | `gtk-debugging-reference.md` | +| UI patterns, widgets, HIG | Use `designing-gnome-ui` skill | + +## External References + +- [Blueprint docs](https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/) +- [Libadwaita API](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/) +- [GTK 4 API](https://docs.gtk.org/gtk4/) diff --git a/.claude/skills/developing-gtk-apps/SKILL.md b/.claude/skills/developing-gtk-apps/SKILL.md new file mode 100644 index 0000000..e72531e --- /dev/null +++ b/.claude/skills/developing-gtk-apps/SKILL.md @@ -0,0 +1,198 @@ +--- +name: developing-gtk-apps +description: Use when building GTK 4/libadwaita applications; before writing app boilerplate; when debugging threading, signals, or lifecycle issues; when setting up GSettings, resources, or packaging; delegates UI/widget decisions to designing-gnome-ui skill +--- + +# Developing GTK Apps + +Build robust GTK 4/libadwaita applications with correct architecture, lifecycle, and patterns. + +**Core principle:** Get the foundation right before the UI. Application lifecycle, threading model, and resource management are where most GTK apps break. + +**Relationship to UI skill:** This skill handles architecture and plumbing. For widget selection, layout, and HIG compliance, use `designing-gnome-ui`. + +## Decision Flow + +| Task | Use | +|------|-----| +| Which widget for settings? | designing-gnome-ui | +| How to structure preferences window? | designing-gnome-ui | +| App crashes on startup | THIS SKILL | +| UI freezes during operation | THIS SKILL | +| How to save user preferences | THIS SKILL (GSettings) | +| Signal not firing/memory leak | THIS SKILL | +| Setting up new app boilerplate | THIS SKILL | +| Packaging for Flatpak | THIS SKILL | + +## What's Current (libadwaita 1.7+, GTK 4.18+) + +**API deprecations to avoid:** +- `GtkShortcutsWindow` → Use `AdwShortcutsDialog` (libadwaita 1.8+) +- `.dim-label` CSS class → Use `.dimmed` class +- X11/Broadway backends are deprecated in GTK 4 (removal planned for GTK 5) + +**New patterns (libadwaita 1.6-1.8):** +- `AdwSpinner` - Preferred over `GtkSpinner` +- `AdwToggleGroup` - Replaces multiple exclusive `GtkToggleButton` instances +- `AdwBottomSheet` - Persistent bottom sheets +- `AdwWrapBox` - Box that wraps children to new lines +- `AdwInlineViewSwitcher` - For cards, sidebars, boxed lists + +## Application Boilerplate + +```python +import gi +gi.require_version('Gtk', '4.0') +gi.require_version('Adw', '1') +from gi.repository import Gtk, Adw, Gio + +class MyApp(Adw.Application): + def __init__(self): + super().__init__( + application_id="com.example.MyApp", + flags=Gio.ApplicationFlags.DEFAULT_FLAGS + ) + + def do_activate(self): + win = self.props.active_window + if not win: + win = MyWindow(application=self) + win.present() + +class MyWindow(Adw.ApplicationWindow): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.set_default_size(800, 600) + +def main(): + app = MyApp() + return app.run(None) +``` + +### Application ID Rules + +| Rule | Example | +|------|---------| +| Reverse domain notation | `com.example.AppName` | +| Only alphanumeric + dots | `org.gnome.TextEditor` | +| Min 2 segments | `com.myapp` (not `myapp`) | +| Match desktop file | `com.example.MyApp.desktop` | + +### Lifecycle Signals + +| Signal | When | Use For | +|--------|------|---------| +| `startup` | Once, app launches | Actions, CSS, GSettings | +| `activate` | Each launch/raise | Create/present window | +| `shutdown` | App exits | Save state, cleanup | +| `open` | Files passed to app | Handle file arguments | + +```python +def do_startup(self): + Adw.Application.do_startup(self) # Chain up FIRST + self.setup_actions() +``` + +## Threading - The Critical Rule + +**GTK is single-threaded. All UI calls MUST happen on the main thread.** + +```python +# WRONG - will crash +def background_task(): + result = slow_computation() + self.label.set_text(result) # CRASH + +# RIGHT - use GLib.idle_add +def background_task(): + result = slow_computation() + GLib.idle_add(self.label.set_text, result) # Safe + +threading.Thread(target=background_task).start() +``` + +For async patterns with `Gio.Task` and cancellation, see `gtk-patterns-reference.md`. + +## Actions (Quick Reference) + +Actions connect UI to behavior. Define at app level (`app.action`) or window level (`win.action`). + +```python +# In do_startup - app-level action +quit_action = Gio.SimpleAction.new("quit", None) +quit_action.connect("activate", lambda a, p: self.quit()) +self.add_action(quit_action) +self.set_accels_for_action("app.quit", ["q"]) + +# In window __init__ - window-level action +save_action = Gio.SimpleAction.new("save", None) +save_action.connect("activate", self.on_save) +self.add_action(save_action) +self.get_application().set_accels_for_action("win.save", ["s"]) +``` + +For stateful actions (toggles), parameterized actions, and menu integration, see `gtk-patterns-reference.md`. + +## GSettings (Quick Reference) + +Persist user preferences with GSettings. Requires a schema file. + +```python +# In app __init__ +self.settings = Gio.Settings.new("com.example.MyApp") + +# Read/write values +dark = self.settings.get_boolean("dark-mode") +self.settings.set_boolean("dark-mode", True) + +# Bind to widget property (auto-syncs) +self.settings.bind("window-width", window, "default-width", + Gio.SettingsBindFlags.DEFAULT) + +# React to changes +self.settings.connect("changed::dark-mode", self.on_dark_changed) +``` + +For schema XML format and installation, see `gtk-patterns-reference.md`. + +## Debugging (Quick Reference) + +```bash +GTK_DEBUG=interactive myapp # Open GTK Inspector (Ctrl+Shift+D) +G_MESSAGES_DEBUG=all myapp # Show all debug messages +G_DEBUG=fatal-criticals myapp # Abort on critical warnings +GSETTINGS_BACKEND=memory myapp # Test without persisting settings +``` + +For full debugging patterns, profiling, and GDB integration, see `gtk-debugging-reference.md`. + +## Red Flags - STOP + +- Calling UI methods from threads (use `GLib.idle_add`) +- Missing `do_startup` chain-up +- Signal handlers without disconnect on destroy +- Blocking operations in signal handlers +- Hardcoded paths instead of XDG directories +- Missing application ID or wrong format +- Using `time.sleep()` in main thread +- Using `GtkShortcutsWindow` (deprecated - use `AdwShortcutsDialog`) +- Using `GtkSpinner` for libadwaita apps (use `AdwSpinner`) + +## Reference Files + +| Need | File | +|------|------| +| GObject classes, properties, **signals**, list models, **property bindings**, **factories** | `gtk-gobject-reference.md` | +| Actions, GSettings, Resources, Blueprint, async file ops | `gtk-patterns-reference.md` | +| Desktop file, **AppStream metadata**, Meson, Flatpak, **icons**, **Python deps** | `gtk-packaging-reference.md` | +| Testing with pytest, **async testing**, **headless/CI testing** | `gtk-testing-reference.md` | +| Internationalization, gettext, **ngettext plurals**, .po files, **Blueprint i18n**, **RTL testing** | `gtk-i18n-reference.md` | +| DBus activation, **interface export**, background services, **Flatpak portals** | `gtk-dbus-reference.md` | +| GTK Inspector, env vars, **profiling**, **memory debugging** | `gtk-debugging-reference.md` | +| UI patterns, widgets, HIG | Use `designing-gnome-ui` skill | + +## External References + +- [Blueprint docs](https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/) +- [Libadwaita API](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/) +- [GTK 4 API](https://docs.gtk.org/gtk4/) diff --git a/.gitignore b/.gitignore index 4371488..9fe3d5d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ ./*.py *.glc !data/examples/*.glc +.flatpak-builder/ ./*.png **/__pycache__/ m4/ @@ -16,4 +17,6 @@ deb_dist/ .api-keys .DS_Store .ruff_cache -.mypy_cache \ No newline at end of file +.mypy_cache +dev-* +.agents/gtk4 \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..310a7a5 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,125 @@ +# CLAUDE.md — GGate + +Reference page for working on GGate. Facts here come from a project scan; when in doubt, +read the cited file. Keep this current as the codebase changes. + +## What GGate is + +A **logic-circuit simulator** — desktop app, **Python + GTK 4 + libadwaita**, with a +**Cairo**-rendered editor canvas. Users place logic gates/components, wire them into nets, +and simulate. Circuit files are `.glc` (examples in `data/examples/`). + +Requires: Python `>=3.10,<4`, `gtk4 >= 4.16`, `libadwaita-1 >= 1.6.8`. Runtime deps +(`pyproject.toml`): `pygobject`, `pycairo`, `python-igraph`, `shapely`, `packaging`, +`meson-python`. App ID `org.astralco.GGate` (dev: `org.astralco.GGate.Dev`). + +## Working model + +- **PM** (user): direction and priorities. +- **Claude** (me): senior dev / project owner — architecture, design, task breakdown, + review, holding context. I spec the work and verify it; I don't hand-write feature code. +- **agy** (`mcp__agy-bridge__*`, Gemini): the implementer — writes/edits code from my specs. + Also my recon tool (`delegate`/`analyze_files`) for read-only scans. + +Loop: I decide *what* and *how* → write a self-contained delegation (file paths, exact +change, acceptance criteria, `.agents/` references, conventions) → agy implements → I review +the diff → iterate. **Every UI delegation cites the relevant `.agents/gtk4/` page** so agy +works from ground truth, not memory. + +## Run flow + +- **Dev**: `run.py` loads `./dev-resources.gresource`, instantiates `GLogicApplication`. +- **Installed**: Meson generates `bin/ggate.in` → loads `ggate-resources.gresource` from + pkgdatadir, runs `GLogicApplication`. +- `GLogicApplication` (`Adw.Application`, in `MainFrame.py`) owns app actions (New/Open/ + Save/Preferences/Help/About…). `MainFrame` (`Adw.ApplicationWindow`, same file) builds + the UI and wires the canvas, file managers, circuit model, palette, and dialogs. + +## Architecture + +- **Canvas / rendering** — `ggate/DrawArea.py`: `DrawArea` (a `Gtk.ScrolledWindow`) hosts a + `Gtk.DrawingArea` with `set_draw_func(on_draw)`. All graphics (grid, components, nets, + selection) are drawn with **Cairo** onto a cached offscreen surface, then blitted. +- **Circuit model** — `ggate/CircuitManager.py`: stores components/wires/state, undo + history, snapping, net validation, simulation steps. + - **igraph** in `analyze_net_connections()` — vertices = pin positions, edges = net + segments; `graph.components()` resolves electrical connectivity. + - **shapely** in `split_nets()` — `Point`/`LineString` hit-tests for clicks on nets. +- **Components** — `ggate/Components/LogicGates/`. All subclass `BaseComponent` (ABC in + `SystemComponents.py`). + - Abstract: `drawComponent`, `drawComponentEditOverlap`, `drawComponentRunOverlap`. + - Common overrides: `propertyChanged` (validate; return `bool` or `PropertyError`), + `calculate` (sim state), `initialize` (defaults). + - `PropertyError(message, positions)` — error text + indices of invalid property rows + (drives red highlight + banner in the properties dialog). + - Concrete gates grouped under `Standard/`, `FlipFlops/`, `Counters/`, `StateViewers/`, + `Miscellaneous/`. `Calculator.py` does gate computation. +- **Property typing** — `const.py` enums map to libadwaita rows in the properties dialog: + `property_bool→SwitchRow`, `property_int→SpinRow`, `property_float→SpinRow(digits)`, + `property_select→ComboRow`, `property_string→EntryRow`. + +## Module map (`ggate/`) + +| File | Responsibility | +|------|----------------| +| `MainFrame.py` | `GLogicApplication` + `MainFrame` window; actions, wiring | +| `DrawArea.py` | editor canvas (ScrolledWindow + DrawingArea + Cairo) | +| `CircuitManager.py` | circuit model: storage, history, nets (igraph/shapely), sim | +| `ComponentView.py` | side palette of placeable gate categories | +| `Exporter.py` | render schematic to Cairo image/PDF/PS/SVG (the **real** one) | +| `MenuPopover.py` | context popover menus | +| `Preference.py` | load/save user settings to disk | +| `StatusDisplay.py` | `Gtk.Label` subclass for status text | +| `Utils.py` | vector/text/Cairo helpers | +| `const.py` / `config.py` | constants & metadata / VERSION, APP_PREFIX, paths | +| `Components/Managers/` | `Alerts`, `FileManager`; `Exporter.py` here is a **dead stub** | +| `Components/Windows/` | dialogs — see below | +| `Components/Windows/TimingGraph/` | `Display` (dialog) + `Diagram` (Cairo waveform) | +| `TimingDiagramWindow.py`, `DiagramArea.py` | **dead** GTK3 leftovers | + +## The dialogs (`Components/Windows/`) + +| File | Class / base | Status | +|------|--------------|--------| +| `About.py` | `AboutGGate` → `Adw.AboutDialog` | built, **not wired** into MainFrame | +| `Preferences.py` | `PreferencesWindow` (`Gtk.Dialog`, deprecated) | wired, works | +| `Properties.py` | `PropertyWindow` (`Adw.Dialog`) | wired but **buggy** (API drift) | +| `TimingGraph/Display.py` | `Adw.Dialog` wrapper | wired but **broken** (empty/parent) | +| `TimingGraph/Diagram.py` | `Gtk.ScrolledWindow` + 2 `DrawingArea` | draw fns **not registered** | + +These dialogs are the **current cleanup focus** — details and the grounded bug list live in +`.agents/TODO.md`. + +## Build & packaging + +- **Meson**: `meson.build` (deps, resource compile → `ggate-resources.gresource`, + `install_subdir('ggate')`), `meson_options.txt`, `bin/ggate.in`, `data/images/` gresource. +- **Flatpak**: `build-aux/flatpak/org.astralco.GGate.json` (GNOME 47 runtime, pip deps). +- **Snap**: `build-aux/snapcraft/snapcraft.yaml` (`core22`, poetry deps, meson plugin). +- ⚠️ `config.py`/`__init__.py` versions are **static**, not Meson-populated, and currently + **disagree** with `pyproject.toml`/`meson.build` (4.0.0 vs 5.0.0). See `.agents/TODO.md` P0. + +## Conventions (enforce in review) + +From `.vscode/copilot-instructions.md` — hard rules for generated code: +- **No comments** in code. No `// ...existing code...` markers (describe placement in prose). +- **No unused/dangling** imports or variables. **No extra** methods/types unless necessary. +- **Double quotes** for strings, always. Match surrounding style; verify meticulously. +- Commits: **Conventional Commits, one-line subject.** + +⚠️ The existing code violates some of this (mixed 2/4-space indent, mixed quotes, stale +`indent-tabs-mode: t` headers). New work should follow the rules above; don't propagate the +old inconsistency. + +GTK4 rules (full list in `.agents/README.md`): single-threaded UI (`GLib.idle_add` to +marshal); no `show_all()`/`container.add()` (use `set_visible`/`append`/`set_child`); prefer +`Adw.Dialog`/`Adw.AlertDialog` over `Gtk.Dialog`/`Gtk.MessageDialog`; prefer `Gtk.FileDialog` +(4.10+) over `Gtk.FileChooserDialog`. + +## Companion docs + +- `.agents/README.md` — GTK4 docs database (60 canonical reference pages) + refresh recipe. +- `.agents/gtk4/` — raw HTML API docs by namespace (adwaita/gtk/pango/gio/cairo). +- `.agents/gtk4/README.md` — widget → where-used-in-GGate map. +- `.agents/skills/` — `developing-gtk-apps` (architecture) + `designing-gnome-ui` (HIG). +- `.agents/TODO.md` — the working backlog (P0–P3), grounded bug lists. diff --git a/data/images/meson.build b/data/images/meson.build index 82f47f4..ef4b208 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -1,4 +1,4 @@ -icon_files = files( +icon_files = [ # Components 'components/7seg.svg', 'components/adder.svg', @@ -17,11 +17,11 @@ icon_files = files( 'actions/flip-vertical.svg', 'actions/rotate-left.svg', 'actions/rotate-right.svg', -) +] icon_files_xml = [] foreach file: icon_files - icon_files_xml += '' + file.full_path() + '' + icon_files_xml += '' + file + '' endforeach resources_xml = configure_file( @@ -42,5 +42,5 @@ ggate_resources = gnome.compile_resources( install_dir: pkgdatadir, ) -install_subdir('icons/components', install_dir: pkgdatadir) -install_subdir('icons/actions', install_dir: pkgdatadir) \ No newline at end of file +install_subdir('actions', install_dir: pkgdatadir / 'icons') +install_subdir('components', install_dir: pkgdatadir / 'icons') \ No newline at end of file diff --git a/ggate/Components/LogicGates/Counters/ModNCounter.py b/ggate/Components/LogicGates/Counters/ModNCounter.py index 7349a1b..91f9d67 100644 --- a/ggate/Components/LogicGates/Counters/ModNCounter.py +++ b/ggate/Components/LogicGates/Counters/ModNCounter.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError -from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh +from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from ggate.const import definitions as const import math @@ -44,8 +44,8 @@ def propertyChanged(self, prop): self.outpin_b = -40 + (prop[1] - 1) * 10 self.comp_rect = [10, min((self.outpin_t - 10, -60)), 120, max((self.outpin_b + 10, -20))] self.output_pins = [(120, y) for y in range(self.outpin_t, self.outpin_b + 1, 20)] - self.output_pins_dir = [const.direction_W for i in range(prop[1])] - self.output_level = [False for i in range(prop[1])] + self.output_pins_dir = [const.direction_W for _ in range(prop[1])] + self.output_level = [False for _ in range(prop[1])] self.tp_hl = prop[3] * 0.000001 self.tp_lh = prop[4] * 0.000001 return False @@ -103,11 +103,11 @@ def isMouseOvered(self, x, y): def initialize(self): self.store[0] = 0 - self.output_stack = [[[0.0, False]] for i in range(self.values[1])] + self.output_stack = [[[0.0, False]] for _ in range(self.values[1])] def calculate(self, input_datas, time): if input_datas[1]: - output_data = [False for i in range(self.values[1])] + output_data = [False for _ in range(self.values[1])] self.store[0] = 0 elif (self.values[2] == 0 and not self.input_level[0] and input_datas[0]) or (self.values[2] == 1 and self.input_level[0] and not input_datas[0]): # trigger self.store[0] += 1 diff --git a/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py b/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py index e33b446..39578df 100644 --- a/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py +++ b/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh +from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from ggate.const import definitions as const @@ -39,11 +39,11 @@ def propertyChanged(self, prop): self.outpin_b = -60 + (prop[0] - 1) * 10 self.comp_rect = [10, min((self.outpin_t - 90, -90)), 120, max((self.outpin_b + 50, -30))] self.input_pins = [(10, y) for y in range(self.outpin_t - 60, self.outpin_b + 41, 20)] - self.input_pins_dir = [const.direction_E for i in range(prop[0] + 5)] - self.input_level = [False for i in range(prop[0] + 5)] + self.input_pins_dir = [const.direction_E for _ in range(prop[0] + 5)] + self.input_level = [False for _ in range(prop[0] + 5)] self.output_pins = [(120, y) for y in range(self.outpin_t, self.outpin_b + 1, 20)] - self.output_pins_dir = [const.direction_W for i in range(prop[0])] - self.output_level = [False for i in range(prop[0])] + self.output_pins_dir = [const.direction_W for _ in range(prop[0])] + self.output_level = [False for _ in range(prop[0])] self.tp_hl = prop[2] * 0.000001 self.tp_lh = prop[3] * 0.000001 return False @@ -110,8 +110,8 @@ def isMouseOvered(self, x, y): return False def initialize(self): - self.store = [False for i in range(self.values[0])] - self.output_stack = [[[0.0, False]] for i in range(self.values[0])] + self.store = [False for _ in range(self.values[0])] + self.output_stack = [[[0.0, False]] for _ in range(self.values[0])] def calculate(self, input_datas, time): if (self.values[1] == 0 and not self.input_level[-1] and input_datas[-1]) or (self.values[1] == 1 and self.input_level[-1] and not input_datas[-1]): # trigger diff --git a/ggate/Components/LogicGates/Counters/PISOShiftRegister.py b/ggate/Components/LogicGates/Counters/PISOShiftRegister.py index d478f28..bab4585 100644 --- a/ggate/Components/LogicGates/Counters/PISOShiftRegister.py +++ b/ggate/Components/LogicGates/Counters/PISOShiftRegister.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh +from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from ggate.const import definitions as const @@ -39,8 +39,8 @@ def propertyChanged(self, prop): self.inpin_b = -60 + (prop[0] - 1) * 10 self.comp_rect = [10, min((self.inpin_t - 50, -90)), 120, max((self.inpin_b + 30, -30))] self.input_pins = [(10, y) for y in range(self.inpin_t - 20, self.inpin_b + 21, 20)] - self.input_pins_dir = [const.direction_E for i in range(prop[0] + 2)] - self.input_level = [False for i in range(prop[0] + 2)] + self.input_pins_dir = [const.direction_E for _ in range(prop[0] + 2)] + self.input_level = [False for _ in range(prop[0] + 2)] self.tp_hl = prop[2] * 0.000001 self.tp_lh = prop[3] * 0.000001 return False @@ -108,7 +108,7 @@ def isMouseOvered(self, x, y): return False def initialize(self): - self.store = [False for i in range(self.values[0])] + self.store = [False for _ in range(self.values[0])] self.output_stack = [[[0.0, False]], [[0.0, True]]] def calculate(self, input_datas, time): diff --git a/ggate/Components/LogicGates/Counters/SIPOShiftRegister.py b/ggate/Components/LogicGates/Counters/SIPOShiftRegister.py index 5e6d6fb..0cf5623 100644 --- a/ggate/Components/LogicGates/Counters/SIPOShiftRegister.py +++ b/ggate/Components/LogicGates/Counters/SIPOShiftRegister.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh +from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from ggate.const import definitions as const @@ -40,11 +40,11 @@ def propertyChanged(self, prop): self.outpin_b = -40 + (prop[0] - 1) * 10 self.comp_rect = [10, min((self.outpin_t - 30, -90)), 120, max((self.outpin_b + 10, -10))] self.output_pins = [(120, y) for y in range(self.outpin_t, self.outpin_b + 1, 20)] - self.output_pins_dir = [const.direction_W for i in range(prop[0])] - self.output_level = [False for i in range(prop[0])] + self.output_pins_dir = [const.direction_W for _ in range(prop[0])] + self.output_level = [False for _ in range(prop[0])] self.tp_hl = prop[2] * 0.000001 self.tp_lh = prop[3] * 0.000001 - self.store = [False for i in range(prop[0])] + self.store = [False for _ in range(prop[0])] return False def drawComponent(self, cr, layout): @@ -108,12 +108,12 @@ def isMouseOvered(self, x, y): return False def initialize(self): - self.store = [False for i in range(self.values[0])] - self.output_stack = [[[0.0, False]] for i in range(self.values[0])] + self.store = [False for _ in range(self.values[0])] + self.output_stack = [[[0.0, False]] for _ in range(self.values[0])] def calculate(self, input_datas, time): if input_datas[2]: - self.store = [False for i in range(self.values[0])] + self.store = [False for _ in range(self.values[0])] elif (self.values[1] == 0 and not self.input_level[1] and input_datas[1]) or (self.values[1] == 1 and self.input_level[1] and not input_datas[1]): # trigger self.store.insert(0, input_datas[0]) self.store.pop() diff --git a/ggate/Components/LogicGates/Counters/SISOShiftRegister.py b/ggate/Components/LogicGates/Counters/SISOShiftRegister.py index 29dc443..7eee1cd 100644 --- a/ggate/Components/LogicGates/Counters/SISOShiftRegister.py +++ b/ggate/Components/LogicGates/Counters/SISOShiftRegister.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const, stack_with_tphl_lh +from ggate.Utils import cairo_draw_text, cairo_paths, stack_with_tphl_lh from ggate.const import definitions as const @@ -97,7 +97,7 @@ def isMouseOvered(self, x, y): def initialize(self): self.store[0] = 0 - self.stack = [False for i in range(self.values[0])] + self.stack = [False for _ in range(self.values[0])] self.output_stack = [[[0.0, False]], [[0.0, True]]] def calculate(self, input_datas, time): diff --git a/ggate/Components/LogicGates/Miscellaneous/Probe.py b/ggate/Components/LogicGates/Miscellaneous/Probe.py index 6bd5a10..65cf69c 100644 --- a/ggate/Components/LogicGates/Miscellaneous/Probe.py +++ b/ggate/Components/LogicGates/Miscellaneous/Probe.py @@ -32,7 +32,7 @@ def drawComponent(self, cr, layout): cr.stroke() cairo_draw_text(cr, layout, "V", 40, -10, 0.5, 0.5) cairo_draw_text(cr, layout, self.values[0], 55, -10, 0.0, 0.5) - (w, h) = layout.get_size() + (w, _) = layout.get_size() self.width = w / Pango.SCALE if self.width < 12: self.width = 12 diff --git a/ggate/Components/LogicGates/Miscellaneous/Text.py b/ggate/Components/LogicGates/Miscellaneous/Text.py index a2628ab..cb85be1 100644 --- a/ggate/Components/LogicGates/Miscellaneous/Text.py +++ b/ggate/Components/LogicGates/Miscellaneous/Text.py @@ -1,5 +1,5 @@ from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError -from ggate.Utils import Pango, cairo_draw_text +from ggate.Utils import cairo_draw_text from ggate.const import definitions from gi.repository import Pango diff --git a/ggate/Components/LogicGates/Standard/GND.py b/ggate/Components/LogicGates/Standard/GND.py index 606f859..7867b79 100644 --- a/ggate/Components/LogicGates/Standard/GND.py +++ b/ggate/Components/LogicGates/Standard/GND.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const +from ggate.Utils import cairo_draw_text, cairo_paths from ggate.const import definitions as const diff --git a/ggate/Components/LogicGates/Standard/NAND.py b/ggate/Components/LogicGates/Standard/NAND.py index da828b4..6daa8fc 100644 --- a/ggate/Components/LogicGates/Standard/NAND.py +++ b/ggate/Components/LogicGates/Standard/NAND.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const +from ggate.Utils import cairo_draw_text, cairo_paths from ggate.const import definitions as const diff --git a/ggate/Components/LogicGates/Standard/NOR.py b/ggate/Components/LogicGates/Standard/NOR.py index 790f6f7..0708cc7 100644 --- a/ggate/Components/LogicGates/Standard/NOR.py +++ b/ggate/Components/LogicGates/Standard/NOR.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_bezier, cairo_draw_text, cairo_paths, const +from ggate.Utils import cairo_bezier, cairo_draw_text, cairo_paths from ggate.const import definitions as const diff --git a/ggate/Components/LogicGates/Standard/OSC.py b/ggate/Components/LogicGates/Standard/OSC.py index 8877195..7bab7ef 100644 --- a/ggate/Components/LogicGates/Standard/OSC.py +++ b/ggate/Components/LogicGates/Standard/OSC.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_paths, const +from ggate.Utils import cairo_paths from ggate.const import definitions as const diff --git a/ggate/Components/LogicGates/Standard/SW.py b/ggate/Components/LogicGates/Standard/SW.py index 829d490..6b9743a 100644 --- a/ggate/Components/LogicGates/Standard/SW.py +++ b/ggate/Components/LogicGates/Standard/SW.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_draw_text, cairo_paths, const +from ggate.Utils import cairo_draw_text, cairo_paths from ggate.const import definitions as const diff --git a/ggate/Components/LogicGates/Standard/XOR.py b/ggate/Components/LogicGates/Standard/XOR.py index 32a68a1..0a022d9 100644 --- a/ggate/Components/LogicGates/Standard/XOR.py +++ b/ggate/Components/LogicGates/Standard/XOR.py @@ -1,6 +1,6 @@ from ggate import Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent -from ggate.Utils import cairo_bezier, cairo_draw_text, cairo_paths, const +from ggate.Utils import cairo_bezier, cairo_draw_text, cairo_paths from ggate.const import definitions as const @@ -110,7 +110,6 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - print(input_datas) new_output = (input_datas[0] + input_datas[1]) % 2 if self.values[0] == 2 else (input_datas[0] + input_datas[1] + input_datas[2]) % 2 if new_output != self.output_level[0]: if self.output_level[0]: diff --git a/ggate/Components/LogicGates/SystemComponents.py b/ggate/Components/LogicGates/SystemComponents.py index 217c058..ee4d39f 100644 --- a/ggate/Components/LogicGates/SystemComponents.py +++ b/ggate/Components/LogicGates/SystemComponents.py @@ -1,7 +1,6 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from abc import ABC, abstractmethod -from gettext import gettext as _ from typing import List from gi.repository import Pango import cairo @@ -79,14 +78,14 @@ def set_rot_props(self): max((self.rot_comp_rect[1], self.rot_comp_rect[3]))] self.rot_input_pins = self.input_pins[:] self.rot_input_pins_dir = self.input_pins_dir[:] - for i, p in enumerate(self.input_pins): + for i, _ in enumerate(self.input_pins): self.rot_input_pins[i] = (self.matrix[0] * self.rot_input_pins[i][0] + self.matrix[1] * self.rot_input_pins[i][1], self.matrix[2] * self.rot_input_pins[i][0] + self.matrix[3] * self.rot_input_pins[i][1]) self.rot_input_pins_dir[i] = (self.matrix[0] * self.rot_input_pins_dir[i][0] + self.matrix[1] * self.rot_input_pins_dir[i][1], self.matrix[2] * self.rot_input_pins_dir[i][0] + self.matrix[3] * self.rot_input_pins_dir[i][1]) self.rot_output_pins = self.output_pins[:] self.rot_output_pins_dir = self.output_pins_dir[:] - for i, p in enumerate(self.output_pins): + for i, _ in enumerate(self.output_pins): self.rot_output_pins[i] = (self.matrix[0] * self.rot_output_pins[i][0] + self.matrix[1] * self.rot_output_pins[i][1], self.matrix[2] * self.rot_output_pins[i][0] + self.matrix[3] * self.rot_output_pins[i][1]) self.rot_output_pins_dir[i] = (self.matrix[0] * self.rot_output_pins_dir[i][0] + self.matrix[1] * self.rot_output_pins_dir[i][1], diff --git a/ggate/Components/LogicGates/__init__.py b/ggate/Components/LogicGates/__init__.py index 099ef90..8cfcc76 100644 --- a/ggate/Components/LogicGates/__init__.py +++ b/ggate/Components/LogicGates/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- -from gettext import gettext as _ from ggate.const import definitions from . import Calculator diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py index 2ab6620..469b1f4 100644 --- a/ggate/Components/Windows/Properties.py +++ b/ggate/Components/Windows/Properties.py @@ -27,7 +27,7 @@ def __init__(self): self.banner: Adw.Banner = None self.set_content_width(350) - self.connect("close-request", self.on_window_delete) + self.connect("closed", self.on_window_delete) def _set_invalid_state(self, positions): for idx, ctrl in enumerate(self.prop_controls): diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index 9f94dd8..d0a503d 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -1,19 +1,18 @@ -from decimal import Decimal -import math +from __future__ import annotations from typing import TYPE_CHECKING +if TYPE_CHECKING: + from ggate.MainFrame import MainFrame + +import math import cairo +from decimal import Decimal from ggate import Preference from ggate.Utils import cairo_draw_text, cairo_paths, number_in_range from ggate.const import Definitions - -if TYPE_CHECKING: - from ggate.MainFrame import MainFrame - from gi.repository import Gtk, Gdk, PangoCairo, Pango - class TimingGraphDiagram(Gtk.ScrolledWindow): def __get_timing(self): return self.timing_units[self.timing_unit] diff --git a/ggate/Components/Windows/TimingGraph/Display.py b/ggate/Components/Windows/TimingGraph/Display.py index 2db67e0..9bb0db3 100644 --- a/ggate/Components/Windows/TimingGraph/Display.py +++ b/ggate/Components/Windows/TimingGraph/Display.py @@ -1,13 +1,21 @@ +from __future__ import annotations from typing import TYPE_CHECKING -from gi.repository import Gtk, Adw, Gdk if TYPE_CHECKING: from ggate.MainFrame import MainFrame - from ggate.CircuitManager import CircuitManager + +from gi.repository import Gtk, Adw, Gdk +from ggate.Components.Windows.TimingGraph.Diagram import TimingGraphDiagram + class TimingGraphDisplayWindow (Adw.Dialog): def __init__(self, parent: MainFrame): Adw.Dialog.__init__(self, can_close=True) + self._draw_area = TimingGraphDiagram(parent) self.header_bar = Gtk.HeaderBar() + + def display(self): + self._draw_area.draw() + self.present() \ No newline at end of file diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index e0dbded..ec371af 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -5,6 +5,7 @@ import webbrowser import gi + gi.require_version("Gtk", "4.0") gi.require_version("Adw", "1") @@ -24,9 +25,8 @@ from ggate.Components.Managers.FileManager import FileIOManager from ggate.Components.Managers.FileManager import FileManager from ggate.Components.Managers.Alerts import AlertDialogs - +from ggate.Components.Windows.TimingGraph.Display import TimingGraphDisplayWindow from ggate.StatusDisplay import StatusDisplay -from ggate.TimingDiagramWindow import TimingDiagramWindow themed_icons = Gtk.IconTheme.get_for_display(Gdk.Display.get_default()) themed_icons.add_search_path(config.DATADIR + "/images") @@ -71,6 +71,8 @@ def __init__(self, *args, **kwargs): self.comp_window = ComponentView() self.comp_window.connect("component-checked", self.on_comp_checked) + self.statusbar = StatusDisplay() + self.create_window() # Property window @@ -78,11 +80,9 @@ def __init__(self, *args, **kwargs): self.prop_window.connect("window-hidden", self.on_propwindow_hidden) self.prop_window.connect("property-changed", self.on_property_changed) - # Timing diagram window - self.diagram_window = TimingDiagramWindow(self) - - # Preferences window + # Other Windows self.pref_window = PreferencesWindow(self) + self.timing_diagram = TimingGraphDisplayWindow(self) self.clipboard = self.get_clipboard() @@ -203,9 +203,7 @@ def set_up_action_bar(self, *args): # Add Net self.action_net = Gtk.ToggleButton() - image = Gtk.Image.new_from_pixbuf( - GdkPixbuf.Pixbuf.new_from_file(config.DATADIR + "images/add-net.png") - ) + image = Gtk.Image.new_from_icon_name("list-add-symbolic") self.action_net.set_child(image) self.action_net.connect("toggled", self.on_action_net_toggled) self.action_net.set_tooltip_markup( @@ -219,6 +217,7 @@ def create_window(self): paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.toast_overlay = Adw.ToastOverlay() # Menu Button @@ -268,17 +267,17 @@ def create_window(self): self.header_bar.pack_start(self.menu_button) self.header_bar.pack_end(_run_pause_box) - self.set_titlebar(self.header_bar) - # Draw area self.drawarea = DrawArea(self) self.drawarea.circuit = self.circuit - box.append(self.drawarea) - self.drawarea.set_vexpand(True) - self.drawarea.set_hexpand(True) + + self.toast_overlay.set_child(self.drawarea) + self.toast_overlay.set_vexpand(True) + self.toast_overlay.set_hexpand(True) + + box.append(self.toast_overlay) # Status bar - self.statusbar = StatusDisplay() self.action_bar = Gtk.ActionBar() self.set_up_action_bar() @@ -308,7 +307,10 @@ def create_window(self): paned.set_resize_start_child(False) paned.set_shrink_start_child(False) - self.set_child(paned) + toolbar_view = Adw.ToolbarView() + toolbar_view.add_top_bar(self.header_bar) + toolbar_view.set_content(paned) + self.set_content(toolbar_view) # Connect events self.connect("close-request", self.on_window_delete) @@ -329,8 +331,6 @@ def reset_frame(self): self.drawarea.set_component(const.component_none) self.disable_edit_actions() self.action_net.set_active(False) - self.diagram_window.destroy() - self.diagram_window = TimingDiagramWindow(self) # >> app action handlers >> @@ -427,8 +427,6 @@ def on_circuit_run(self, *args): self.drawarea.rect_select_enabled = False self.circuit.analyze_net_connections() self.circuit.initialize_logic() - if not self.circuit.analyze_logic(): - self.diagram_window.diagram_area.createDiagram() self.drawarea.redraw = True self.drawarea.queue_draw() @@ -440,9 +438,7 @@ def on_circuit_stop(self, *args): self.action_redo.set_sensitive(True) self.comp_window.set_all_sensitive(True) self.action_net.set_sensitive(True) - self.diagram_window.close() - self.diagram_window = TimingDiagramWindow(self) - self.statusbar.update("") + self.drawarea.redraw = True self.drawarea.queue_draw() @@ -453,10 +449,7 @@ def on_action_pause_clicked(self, widget, *args): play_image = Gtk.Image.new_from_icon_name("media-playback-pause-symbolic") widget.set_tooltip_markup(TOOLTIPS["simulation"]["pause"]) widget.set_child(play_image) - self.pause_running_mode = False - if not self.circuit.analyze_logic(): - self.diagram_window.diagram_area.createDiagram() self.drawarea.queue_draw() else: # if not paused, pause it pause_image = Gtk.Image.new_from_icon_name("media-playback-start-symbolic") @@ -490,34 +483,22 @@ def on_action_copy_pressed(self, *widget): .components_to_string(self.circuit.selected_components) ) - def on_action_paste_pressed(self, *widget): - def _handler(clipboard, task): + def on_action_paste_pressed(self, *args): + def _handler(clipboard: Gdk.Clipboard, task, *args): str_data = clipboard.read_text_finish(task) - if str_data is not None: - tmp = string_to_components(str_data) - if isinstance(tmp, str): - dialog = Gtk.MessageDialog( - transient_for=self, - message_type=Gtk.MessageType.ERROR, - button_type=Gtk.ButtonsType.OK, - ) - dialog.set_markup(_("Error")) - dialog.get_message_area().append(Gtk.Label(label=tmp)) - dialog.present() - return - else: - pasted_components = tmp - - if not pasted_components: - return + if str_data is None: return # noqa: E701 + components = self.circuit.converter.string_to_components(str_data) + if isinstance(components, str) or len(components) == 0: + # TODO: toast unable to parse clipboard + return + else: self.drawarea.set_component(const.component_none) - self.drawarea.set_pasted_components(pasted_components) + self.drawarea.set_pasted_components(components) self.clipboard.read_text_async(None, _handler) def on_action_undo_pressed(self, *widget): - if self.circuit.action_count == 0: return @@ -527,7 +508,6 @@ def on_action_undo_pressed(self, *widget): self.drawarea.queue_draw() def on_action_redo_pressed(self, *widget): - if self.circuit.action_count == len(self.circuit.components_history) - 1: return @@ -595,7 +575,7 @@ def on_action_bug_pressed(self, *args): webbrowser.open(const.devel_bug) def on_action_diagram_pressed(self, *widget): - self.diagram_window.present() + self.timing_diagram.display() def on_action_save_image(self, *args): save_schematics_as_image(self.circuit, self.running_mode, self) diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index 23a2d06..4dbb4aa 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -96,9 +96,9 @@ def __init__(self, parent): def _get_window(self) -> Gtk.ApplicationWindow: return self.get_parent().parent - def _handle_clipboard(self, clipboard, task, *args): + def _handle_clipboard(self, clipboard: Gdk.Clipboard, task, *args): window = self._get_window() - str_data = window.get_clipboard().read_text_finish(task) + str_data = clipboard.read_text_finish(task) if str_data is not None: components = self._parent.circuit.converter.string_to_components(str_data) has_clipboard = not isinstance(components, str) and len(components) > 0 diff --git a/ggate/Utils.py b/ggate/Utils.py index 4efb6d5..a5aff89 100644 --- a/ggate/Utils.py +++ b/ggate/Utils.py @@ -1,6 +1,5 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- -from collections import Counter from gi.repository import Pango, PangoCairo from ggate.const import definitions as const import cairo @@ -74,9 +73,6 @@ def decode_text(text): t_text += c return t_text -def get_duplicate_points(points, instance = 2): - return [point for point, count in Counter(points).items() if count == instance] - def stack_with_tphl_lh(time, current, stacks, newdatas, tp_hl, tp_lh): for i, dat in enumerate(current): if stacks[i] and newdatas[i] == stacks[i][-1][1]: diff --git a/meson.build b/meson.build index 1b5fe13..072709d 100644 --- a/meson.build +++ b/meson.build @@ -36,6 +36,7 @@ conf = configuration_data() conf.set('PYTHON', python.find_installation('python3').full_path()) conf.set('VERSION', meson.project_version()) conf.set('bindir', get_option('bindir')) +conf.set('pkgdatadir', pkgdatadir) subdir('bin') subdir('data/images') diff --git a/run.py b/run.py index b823c84..dcb950a 100755 --- a/run.py +++ b/run.py @@ -24,10 +24,14 @@ gi.require_version('PangoCairo', '1.0') gi.require_version("Adw", "1") +from gi.repository import Gio from ggate.MainFrame import GLogicApplication from ggate import __version__ if __name__ == "__main__": + resource = Gio.Resource.load("./dev-resources.gresource") + resource._register() + app = GLogicApplication() if len(sys.argv) > 1 and sys.argv[1] == "--version": print(f"GGate {__version__}") From acc8344716ce0ae961bb654dc9613e524fce0f2f Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 01:13:06 +0100 Subject: [PATCH 08/37] fix: restore libadwaita styling and repair property dialog, simulation, and centering Chain do_startup to Adw.Application so the Adwaita stylesheet loads; fix the PropertyWindow API drift (show_properties, Adw row signals, float SpinRow, group builder), the AlertDialog close crash, the simulation net_levels IndexError, and context-menu positioning. Add canvas content/resize centering with a Preferences toggle. Update .agents backlog, CLAUDE.md, and document Properties.py. Co-Authored-By: Claude Opus 4.8 --- .agents/TODO.md | 136 ++++++++++++++---------- CLAUDE.md | 7 +- ggate/CircuitManager.py | 2 + ggate/Components/Managers/Alerts.py | 9 +- ggate/Components/Windows/Preferences.py | 9 ++ ggate/Components/Windows/Properties.py | 66 ++++++------ ggate/DrawArea.py | 41 +++++-- ggate/Exporter.py | 2 +- ggate/MainFrame.py | 17 +-- ggate/MenuPopover.py | 19 ++-- ggate/Preference.py | 3 +- 11 files changed, 189 insertions(+), 122 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index 7c69aee..9132a3e 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -1,53 +1,63 @@ # GGate — working backlog -Consolidated from the root `TODO` file, inline `# TODO` markers, and agy's project scan -(session d60b8a4c). Status legend: `[ ]` open · `[~]` in progress · `[x]` done. -Items marked **(verify)** are from the scan and should be confirmed against current code -before agy acts. Owner model: Claude specs → agy implements → Claude reviews. - -## P0 — broken integration (app likely won't run clean) - -- [ ] **`bin/ggate.in` missing imports** — uses `Gio.Resource.load()` and `os.path.join()` - without importing `gi`/`Gio`/`os`. `bin/ggate.in:16`. **(verify)** -- [ ] **Version mismatch** — `pyproject.toml` + `meson.build` say `5.0.0`; `ggate/config.py` - + `ggate/__init__.py` hardcode `4.0.0`. Pick one source of truth (ideally meson - `configure_file` → `config.py`). **(verify)** -- [ ] **`MainFrame` → `PropertyWindow` API drift** — MainFrame calls window-only methods - (`set_transient_for`/`set_hide_on_close`/`set_modal`/`destroy`) and `set_component()` on - an `Adw.Dialog` subclass that no longer has them (now `show_properties`). `Adw.Dialog` - uses `.present(parent)`. `MainFrame.py:~564`. **(verify — branch diff already removed - some of these; confirm what remains)** -- [ ] **`MainFrame.about_dialog` never created** — `self.about_dialog.present()` called but - the object is never instantiated; `AboutGGate` (`Windows/About.py`) is not imported. - `MainFrame.py:~335`. Wire `AboutGGate.create()` + an `app.about` action. -- [ ] **`MainFrame.statusbar` never created** — appended at `MainFrame.py:~295` but never - instantiated; `StatusDisplay` not imported. **(verify)** - -## P1 — micro-windows cleanup (current focus) - -### `Windows/Properties.py` (PropertyWindow) — grounded against `.agents/gtk4/adwaita/` -- [ ] `close-request` signal doesn't exist on `Adw.Dialog` → use `closed`. (`:30`) -- [ ] `self.vbox` / `self.component` read before being set in `__init__` → init to `None`. -- [ ] `Adw.ComboRow` has no `changed` signal → `notify::selected`. (`:133`) -- [ ] `Adw.SpinRow` has no `changed` signal → `notify::value`. (`:146`, `:159`) -- [ ] `Adw.EntryRow` has no `set_width_chars` → remove (it's a `Gtk.Entry` method). (`:167`) -- [ ] Float `SpinRow.new_with_range(min,max,step)` passes digit-count as *step* and never - calls `set_digits`. Separate step from digits. (`:149-154`) -- [ ] Group-assignment logic drops the first control of each group (creates the group but - neither adds the widget nor appends to `prop_controls`), desyncing `prop_controls` from - value indices. (`:176-194`) -- [ ] `Adw.PreferencesGroup` has no `get_children()` → `AttributeError`. (`:206`) -- [ ] Rebuilds all widgets + `present()` on every `show_properties`; old children leak. - Consider `Adw.ToolbarView` (top bar + content) over manual `HeaderBar`-in-`Box`. +Consolidated from the root `TODO` file, inline `# TODO` markers, and agy's project scan. +Status legend: `[ ]` open · `[~]` in progress · `[x]` done. Items marked **(verify)** are +from the scan, confirm against current code first. Owner model: Claude specs → agy +implements → Claude reviews. + +## ✅ Fixed this session (working tree, uncommitted since `b87a01a`) + +App now launches and is usable. Changes not yet committed: +- [x] **App launches on GTK4/libadwaita** — imported/instantiated `StatusDisplay` + (`statusbar`); `add-net.png` → `list-add-symbolic` placeholder. +- [x] **Main window chrome → `Adw.ToolbarView`** (`add_top_bar` + `set_content`); removed + the unsupported `set_titlebar`/`set_child`. +- [x] **PropertyWindow API drift fixed** — `set_component`→`show_properties(comp, parent)`; + `present(parent)`; `hide()`→`close()`; removed `set_transient_for`/`set_hide_on_close`/ + `set_modal` and the destroy-and-recreate-on-hide block; removed duplicate signal connects. +- [x] **PropertyWindow `closed` signal** (was `close-request`) + `vbox`/`component` init. +- [x] **Adw row signals** — `ComboRow`→`notify::selected`, `SpinRow`→`notify::value`. +- [x] **Float SpinRow crash** — proper positive `step` + `set_digits` (was passing digits as step → step 0 → NULL). +- [x] **PropertyGroup builder** — dropped `get_children()` (use a per-group count) and fixed + the group-assignment bug that dropped the first control of each group / desynced + `prop_controls`. +- [x] **AlertDialogs close crash** — `add_responses(*…)` → loop `add_response(id, label)`. +- [x] **Simulation `IndexError`** — `net_levels` now sized to `net_connections` in + `analyze_net_connections` + `initialize_logic`; also fixed `Exporter` calling the + non-existent `analyze_connections()`. +- [x] **Context-menu positioning** — use `translate_coordinates` (drawingarea→parent) + instead of manual scroll subtraction; menu now lands at the cursor. +- [x] **Feature: content centering** on app start / new / open (center on component bbox, + or canvas middle when empty). +- [x] **Feature: auto-center on resize** + Preferences toggle (`autocenter_resize`, default ON). + +## P0 — still open + +- [ ] **`bin/ggate.in` missing imports** (`gi`/`Gio`/`os`). `bin/ggate.in:16`. Not hit yet + (we run via `run.py`), but breaks installed launch. **(verify)** +- [ ] **Version mismatch** — `pyproject.toml`/`meson.build` say `5.0.0`; `config.py`/ + `__init__.py` hardcode `4.0.0`. Pick one source of truth (meson `configure_file` → `config.py`). +- [ ] **`About.py` not wired** — `AboutGGate.create()` never imported/instantiated/presented; + add an `app.about` action that builds + `present(window)`s it. Duplicate `set_comments` + call in `About.py`. (Crash not hit at startup; will hit when About is invoked.) + +## P1 — micro-windows / polish + +### `Windows/Properties.py` +- [ ] Rebuilds all widgets + re-`present()` on every `show_properties`; old children leak. + Consider building once / reusing, and an `Adw.ToolbarView` layout for the dialog itself. +- [x] ~~`set_width_chars` on `Adw.EntryRow`~~ — **not a bug**: `EntryRow` implements + `GtkEditable`, which provides `set_width_chars`. Left as-is (no crash). ### `MainFrame` window chrome -- [ ] App now launches (header moved into a content `Gtk.Box` + `set_content`, since - `Adw.ApplicationWindow` has no `set_titlebar`/`set_child`). Refinement: use the idiomatic - `Adw.ToolbarView` (`add_top_bar(header)` + `set_content(body)`) instead of the plain box. +- [ ] **`Gtk.HeaderBar` vs `Adw.HeaderBar`** — header is `Gtk.HeaderBar` with + `set_use_native_controls(True)` (native macOS controls). Works in `ToolbarView`; + `Adw.HeaderBar` would integrate better but drop native controls. Design call. -### `Windows/About.py` -- [ ] Not wired into MainFrame (see P0). Duplicate `set_comments` call. `:21` TODO: - release notes / support url / debug info. +### Centering +- [ ] **Initial centering is gated by the resize preference** — when `autocenter_resize` is + OFF, the first-paint centering at startup is also skipped (corner instead of centered). + Spec was "initial always, resize gated." Split initial-vs-resize if we want it strict. ### `Windows/Preferences.py` - [ ] Still subclasses deprecated `Gtk.Dialog`. Candidate migration to @@ -62,28 +72,42 @@ before agy acts. Owner model: Claude specs → agy implements → Claude reviews - [ ] Diagram TODOs (`:135,:148,:170,:179,:210`): stroke/fill colors, name-area border, division strokes, text color, tick colors. +### Minor watch-items +- [ ] `AlertDialogs` is one instance that re-adds the same response IDs every time an alert + opens → may emit a duplicate-response warning on the 2nd+ alert. Not a crash. + ## P2 — dead code / hygiene +- [ ] **Proper GTK icon asset management (replaces the `_get_icon_path` `__file__` hack).** + Context-menu `verb-icon` + toolbar action icons must be **themed icon names** via the icon + theme, not filesystem paths. Approach: (1) bundle action SVGs in gresource at a clean + freedesktop layout (`/scalable/actions/.svg`); (2) register on the icon theme + at startup — `Gtk.IconTheme.get_for_display(display).add_resource_path("")` — + replacing the vestigial `themed_icons.add_search_path(config.DATADIR + "/images")`; + (3) reference icons by name in `MenuPopover.menu_xml` and delete `_get_icon_path`. + Requires fixing the gresource manifest (`dev-resources.xml`, `resources.xml.in`, maybe + `meson.build`) — currently nested under `…/scalable/actions/` then re-filed as `actions/*` + (double "actions") and `components/*` (misfiled) — and a dev-vs-release-aware resource base + in `config`. Scope TBD: action icons only, or also component palette. The current + `_get_icon_path` is a temporary dev-only patch. - [ ] Remove GTK3 leftovers: `ggate/TimingDiagramWindow.py`, `ggate/DiagramArea.py` (confirm no imports first). `DiagramArea.py:205` TODO. - [ ] `ggate/Components/Managers/Exporter.py` is a dead stub; real exporter is `ggate/Exporter.py`. Remove stub or consolidate. - [ ] Commented-out translator-credits block `MainFrame.py:~569-570`; commented gnome post-install in `meson.build:59-63`. -- [ ] Style inconsistency: 2-space vs 4-space indent across files; mixed single/double - quotes; stale `indent-tabs-mode: t` magic header comments while code uses spaces. - (Convention per `.vscode/copilot-instructions.md`: double quotes, no comments.) +- [ ] Style inconsistency: 2-space vs 4-space indent; mixed quotes; stale + `indent-tabs-mode: t` headers. (Convention: double quotes, no comments.) -## P3 — feature backlog (from root `TODO`) +## P3 — feature backlog - [ ] Animate logic circuit. -- [ ] **Native SVG icon set (gemini to build later).** First check for a usable - open/licensed icon pack; if none fits (logic-gate symbols are domain-specific), have - gemini author SVGs matching the existing `data/images/**.svg` style. Scope: PNG-only - component icons (`led, not, osc, probe, sw, tribuff, vdd, xor`) + the deleted toolbar - icons (`add-net`, `add-component`, currently a `list-add-symbolic` placeholder in - `set_up_action_bar`). Consider rendering component icons from each component's Cairo - `drawComponent` via `cairo.SVGSurface` (self-maintaining, matches the canvas). +- [ ] **Native SVG icon set (gemini to build later).** Check for a usable open/licensed pack; + if none fits (logic-gate symbols are domain-specific), author SVGs matching the existing + `data/images/**.svg` style. Scope: PNG-only component icons + (`led, not, osc, probe, sw, tribuff, vdd, xor`) + the toolbar icons (`add-net`, + `add-component`, currently a `list-add-symbolic` placeholder). Consider rendering component + icons from each component's Cairo `drawComponent` via `cairo.SVGSurface`. ## Other inline TODOs diff --git a/CLAUDE.md b/CLAUDE.md index 310a7a5..464a7f9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -101,8 +101,11 @@ These dialogs are the **current cleanup focus** — details and the grounded bug ## Conventions (enforce in review) -From `.vscode/copilot-instructions.md` — hard rules for generated code: -- **No comments** in code. No `// ...existing code...` markers (describe placement in prose). +From `.vscode/copilot-instructions.md`, as amended by PM direction: +- **Comments (PM-amended):** *minimal inline comments* only, on genuinely non-obvious / + "magic" code (a tricky index trick, a non-obvious workaround). NOT module/class/method + docstrings, NOT line-by-line narration. Keep it sparse. Still no `// ...existing code...` + placeholder markers. - **No unused/dangling** imports or variables. **No extra** methods/types unless necessary. - **Double quotes** for strings, always. Match surrounding style; verify meticulously. - Commits: **Conventional Commits, one-line subject.** diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index 65374d8..cf06ef0 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -336,6 +336,7 @@ def analyze_net_connections(self): self.net_no_dot = net_no_dots self.net_connections = connections + self.net_levels = [-1] * len(connections) def split_nets(self, x, y): @@ -509,6 +510,7 @@ def initialize_logic(self): for c in self.components: if c[0] != definitions.component_net: c[1].initialize() + self.net_levels = [-1]*len(self.net_connections) def revert_state(self): if self.component_state_history: diff --git a/ggate/Components/Managers/Alerts.py b/ggate/Components/Managers/Alerts.py index f589ee2..411f828 100644 --- a/ggate/Components/Managers/Alerts.py +++ b/ggate/Components/Managers/Alerts.py @@ -33,7 +33,8 @@ def alert_open_unsaved_buffer(self): self.set_heading("Unsaved changes") self.set_body("Buffer was modified, save changes?") - self.add_responses(*self.responses) + for response_id, label in self.responses: + self.add_response(response_id, label) self.set_default_response(self.YES_RESPONSE) self.set_close_response(self.CANCEL_RESPONSE) @@ -49,7 +50,8 @@ def alert_new_unsaved_buffer(self): self.set_heading("Unsaved changes") self.set_body("Buffer was modified, save changes before creating new buffer?") - self.add_responses(*self.responses) + for response_id, label in self.responses: + self.add_response(response_id, label) self.set_default_response(self.YES_RESPONSE) self.set_close_response(self.CANCEL_RESPONSE) @@ -70,7 +72,8 @@ def alert_close_unsaved_buffer(self): self.set_heading("Unsaved changes") self.set_body("Buffer was modified, save changes before closing?") - self.add_responses(*self.responses) + for response_id, label in self.responses: + self.add_response(response_id, label) self.set_default_response(self.YES_RESPONSE) self.set_close_response(self.CANCEL_RESPONSE) diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 61bbba4..7724655 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -145,6 +145,13 @@ def __init__(self, parent): vbox.append(pref) + pref2 = Gtk.Box(spacing=5) + pref2.set_margin_top(5) + pref2.append(Gtk.Label(label=_("Auto-center content on resize:"))) + self.autocenter_resize_switch = Gtk.Switch() + pref2.append(self.autocenter_resize_switch) + vbox.append(pref2) + vbox.set_margin_start(10) vbox.set_margin_top(10) vbox.set_margin_bottom(10) @@ -179,6 +186,7 @@ def update_dialog(self): self.symbol_type_combo.set_active(Preference.symbol_type) self.calc_iter_spin.set_value(Preference.max_calc_iters) self.calc_duration_spin.set_value(Preference.max_calc_duration * 1000000) + self.autocenter_resize_switch.set_active(bool(Preference.autocenter_resize)) def apply_settings(self): Preference.drawing_font = self.drawing_font_btn.get_font_desc() @@ -192,3 +200,4 @@ def apply_settings(self): Preference.symbol_type = self.symbol_type_combo.get_active() Preference.max_calc_iters = self.calc_iter_spin.get_value() Preference.max_calc_duration = self.calc_duration_spin.get_value() * 0.000001 + Preference.autocenter_resize = int(self.autocenter_resize_switch.get_active()) diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py index 469b1f4..60c0836 100644 --- a/ggate/Components/Windows/Properties.py +++ b/ggate/Components/Windows/Properties.py @@ -25,6 +25,8 @@ def __init__(self): self.old_values = [] self.content_box: Gtk.Box = None self.banner: Adw.Banner = None + self.component = None + self.vbox = None self.set_content_width(350) self.connect("closed", self.on_window_delete) @@ -81,8 +83,9 @@ def on_apply_btn_clicked(self, *widget): self.emit("property-changed") - def show_properties(self, component: Optional[BaseComponent]): + def show_properties(self, component: Optional[BaseComponent], parent: Optional[Gtk.Widget] = None): if component is None: + self.close() return self.component = component @@ -103,16 +106,15 @@ def show_properties(self, component: Optional[BaseComponent]): ) self.set_child(status_page) + if parent is not None: + self.present(parent) return property_idx = 0 - group_location = 0 - - # Create property editor self.prop_controls = [] - - # Property Groups groups = [] + group_counts = {} + current_group = None for property in component.properties: has_property = True @@ -130,7 +132,7 @@ def show_properties(self, component: Optional[BaseComponent]): ctrl.set_model(model) ctrl.set_selected(self.component.values[property_idx]) ctrl.set_enable_search(True) - ctrl.connect("changed", self.on_apply_btn_clicked) + ctrl.connect("notify::selected", self.on_apply_btn_clicked) elif property[1][0] == const.property_int: ctrl = Adw.SpinRow.new_with_range( @@ -143,20 +145,22 @@ def show_properties(self, component: Optional[BaseComponent]): ctrl.set_numeric(True) ctrl.set_title(property[0]) ctrl.set_value(component.values[property_idx]) - ctrl.connect("changed", self.on_apply_btn_clicked) + ctrl.connect("notify::value", self.on_apply_btn_clicked) elif property[1][0] == const.property_float: floating_points = property[1][3] if property[1][3] < 3 else 2 + step = 10.0 ** -floating_points if floating_points > 0 else 1.0 ctrl = Adw.SpinRow.new_with_range( property[1][1], property[1][2], - floating_points + step ) + ctrl.set_digits(floating_points) ctrl.set_numeric(True) ctrl.set_title(property[0]) ctrl.set_value(component.values[property_idx]) - ctrl.connect("changed", self.on_apply_btn_clicked) + ctrl.connect("notify::value", self.on_apply_btn_clicked) else: ctrl = Adw.EntryRow( @@ -169,31 +173,27 @@ def show_properties(self, component: Optional[BaseComponent]): else: property_idx -= 1 - group_location += 1 has_property = False - # Create initial group if it doesn't exist - if group_location >= len(groups) and has_property: - group = Adw.PreferencesGroup.new() - group.set_title(property[2]) - group.set_description(property[0]) - groups.append(group) + if has_property: + if current_group is None: + current_group = Adw.PreferencesGroup.new() + current_group.set_title(property[2]) + current_group.set_description(property[0]) + groups.append(current_group) + group_counts[current_group] = 0 - # Set current group to the previous one - elif has_property: + # self.prop_controls stays 1:1 and in-order with non-separator properties self.prop_controls.append(ctrl) + current_group.add(ctrl) + group_counts[current_group] += 1 + else: + current_group = Adw.PreferencesGroup.new() + current_group.set_title(property[2]) + current_group.set_description(property[0]) + groups.append(current_group) + group_counts[current_group] = 0 - group = groups[group_location] - group.add(ctrl) - - # Create a new group - elif not has_property: - group = Adw.PreferencesGroup.new() - group.set_title(property[2]) - group.set_description(property[0]) - groups.append(group) - - # Update the property index property_idx += 1 self.banner = Adw.Banner() @@ -201,9 +201,8 @@ def show_properties(self, component: Optional[BaseComponent]): preference_page = Adw.PreferencesPage.new() - # Add all groups to the preference page for group in groups: - if group.get_children(): + if group_counts.get(group, 0) > 0: preference_page.add(group) self.vbox.append(self.header_bar) @@ -211,4 +210,5 @@ def show_properties(self, component: Optional[BaseComponent]): self.vbox.append(preference_page) self.set_child(self.vbox) - self.present() \ No newline at end of file + if parent is not None: + self.present(parent) \ No newline at end of file diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index 88630f2..ba8cf62 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -118,6 +118,36 @@ def __init__(self, parent: MainFrame): self._pasted_components = None self._pushed_component_name = const.component_none self._pushed_component = logic_gates[const.component_none] + self._last_pw = 0 + self._last_ph = 0 + self.hadj.connect("changed", self._on_adjustment_changed) + self.vadj.connect("changed", self._on_adjustment_changed) + + def _on_adjustment_changed(self, adj): + pw = self.hadj.get_page_size() + ph = self.vadj.get_page_size() + if pw > 0 and ph > 0: + if pw != self._last_pw or ph != self._last_ph: + self._last_pw = pw + self._last_ph = ph + if Preference.autocenter_resize: + self.center_viewport() + + def center_viewport(self): + pw = self.hadj.get_page_size() + ph = self.vadj.get_page_size() + if pw <= 0 or ph <= 0: + return + if self.circuit and self.circuit.components: + rect = get_components_rect(self.circuit.components) + c_x = (rect[0] + rect[2]) / 2 + c_y = (rect[1] + rect[3]) / 2 + else: + c_x = self.width / 2 + c_y = self.height / 2 + self.hadj.set_value(c_x - pw / 2) + self.vadj.set_value(c_y - ph / 2) + def queue_draw(self, *args): self.show() @@ -141,9 +171,8 @@ def menu_activated(self, widget, action_name, *args): elif action == 'flip_verti': self.parent.on_action_flip_vertically() - elif action == 'properties': + elif action == "properties": self.set_selected_component_to_prop_window() - self.parent.prop_window.present() def draw_net(self, net, mcr: cairo.Context): """ @@ -1063,12 +1092,12 @@ def on_button_release_secondary(self, *args): def set_selected_component_to_prop_window(self): if len(self.circuit.selected_components) == 1: if self.circuit.selected_components[0][0] != const.component_net: - self.parent.prop_window.set_component( - self.circuit.selected_components[0][1]) + self.parent.prop_window.show_properties( + self.circuit.selected_components[0][1], self.parent) else: - self.parent.prop_window.set_component(None) + self.parent.prop_window.show_properties(None) else: - self.parent.prop_window.set_component(None) + self.parent.prop_window.show_properties(None) def set_component(self, comp_name): self._pasted_components = None diff --git a/ggate/Exporter.py b/ggate/Exporter.py index 9aa1440..9057eae 100644 --- a/ggate/Exporter.py +++ b/ggate/Exporter.py @@ -188,7 +188,7 @@ def draw_schematics_for_file(cr, circuit, withlevels): layout = PangoCairo.create_layout(cr) layout.set_font_description(Preference.drawing_font) - circuit.analyze_connections() + circuit.analyze_net_connections() if withlevels: circuit.set_netlevels() diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index ec371af..b6ee005 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -321,6 +321,7 @@ def create_new_buffer(self, *args): self.set_title("%s - %s" % (const.text_notitle, const.app_name)) self.reset_frame() self.circuit.reset_circuit() + self.drawarea.center_viewport() self.drawarea.nearest_component = None self.drawarea.redraw = True self.drawarea.queue_draw() @@ -370,6 +371,7 @@ def open_file_complete(self, path): return self.reset_frame() + self.drawarea.center_viewport() self.drawarea.redraw = True self.drawarea.queue_draw() @@ -420,7 +422,7 @@ def on_circuit_run(self, *args): self.comp_window.set_all_sensitive(False) self.action_net.set_sensitive(False) self.action_net.set_active(False) - self.prop_window.hide() + self.prop_window.close() self.drawarea.set_component(const.component_none) self.drawarea.component_dragged = False self.drawarea.drag_enabled = False @@ -563,7 +565,6 @@ def on_action_flip_vertically(self, *widget): def on_action_property_pressed(self, *widget): self.drawarea.set_selected_component_to_prop_window() - self.prop_window.present() def on_action_show_help(self, *args): Gtk.show_uri(None, const.help, Gdk.CURRENT_TIME) @@ -620,14 +621,6 @@ def on_compwindow_hidden(self, widget): self.action_components.set_active(False) def on_propwindow_hidden(self, widget): - - widget.destroy() - self.prop_window = PropertyWindow() - self.prop_window.set_transient_for(self) - self.prop_window.set_hide_on_close(True) - self.prop_window.set_modal(True) - self.prop_window.connect("window-hidden", self.on_propwindow_hidden) - self.prop_window.connect("property-changed", self.on_property_changed) self.drawarea.queue_draw() def on_property_changed(self, widget): @@ -642,7 +635,7 @@ def on_circuit_message_changed(self, circuit, message): self.statusbar.update(message) def on_circuit_item_unselected(self, circuit): - self.prop_window.set_component(None) + self.prop_window.show_properties(None) def on_circuit_alert(self, circuit, message): dialog = Gtk.MessageDialog( @@ -682,7 +675,7 @@ def on_show_shortcut(self, *args): ShortCutWindow(self.window) def do_startup(self, *args): - Gtk.Application.do_startup(self) + Adw.Application.do_startup(self) # New File Pressed action = Gio.SimpleAction.new("on_action_new_pressed", None) diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index 4dbb4aa..8e1be9d 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -1,9 +1,10 @@ import os from gi.repository import Gtk, Gdk -from ggate.config import DATADIR + +_PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) def _get_icon_path(icon: str): - return os.path.join(DATADIR, "images", "actions", f"{icon}.svg") + return os.path.join(_PROJECT_ROOT, "data", "images", "actions", f"{icon}.svg") menu_xml = f""" @@ -106,9 +107,10 @@ def _handle_clipboard(self, clipboard: Gdk.Clipboard, task, *args): def calculate(self, x, y): parent = self.get_parent() - point_x = x - parent.get_hadjustment().get_value() - point_y = y - parent.get_vadjustment().get_value() - return point_x, point_y + coords = parent.drawingarea.translate_coordinates(parent, x, y) + if coords is not None: + return coords[0], coords[1] + return x, y def present(self, x, y, *args): rectangle = Gdk.Rectangle() @@ -142,9 +144,10 @@ def __init__(self, parent): def calculate(self, x, y): parent = self.get_parent() - point_x = x - parent.get_hadjustment().get_value() - point_y = y - parent.get_vadjustment().get_value() - return point_x, point_y + coords = parent.drawingarea.translate_coordinates(parent, x, y) + if coords is not None: + return coords[0], coords[1] + return x, y def present(self, x, y): rectangle = Gdk.Rectangle() diff --git a/ggate/Preference.py b/ggate/Preference.py index ff4977c..3339f28 100644 --- a/ggate/Preference.py +++ b/ggate/Preference.py @@ -58,7 +58,8 @@ def __getitem__(self, __k): "selection_box_border": cairo.SolidPattern(1, 0.75, 0), "symbol_type": 0, # 0: MIL/ANSI 1: IEC "max_calc_iters": 10000, - "max_calc_duration": 0.0002 + "max_calc_duration": 0.0002, + "autocenter_resize": 1 } def load_settings(self): From a0c0edca583705da4f9c6c290538dbd6a6eaf081 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 01:36:59 +0100 Subject: [PATCH 09/37] fix: libadwaita styling, property dialog UX, and running-mode crashes Chain do_startup to Adw.Application so the Adwaita stylesheet loads. Property dialog uses Adw.ToolbarView with a working close, guarded dismiss(), no combo search, no redundant group label. Clipboard read handles empty/no-text. Single click selects, double click opens properties. Fix running-mode crashes: guarded prop_window close, timing-diagram toggle uses the real attribute, and Diagram.draw() int-casts cairo surface dims, registers draw funcs, and fixes cursor/undefined-attribute bugs. Update .agents backlog. Co-Authored-By: Gemini Co-Authored-By: Claude Opus 4.8 --- .agents/TODO.md | 28 ++++++++--- .gitignore | 3 +- ggate/Components/Windows/Properties.py | 48 ++++++++++--------- .../Components/Windows/TimingGraph/Diagram.py | 16 ++++--- ggate/DrawArea.py | 10 ++-- ggate/MainFrame.py | 2 +- ggate/MenuPopover.py | 9 +++- 7 files changed, 71 insertions(+), 45 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index 9132a3e..b4d2129 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -5,9 +5,9 @@ Status legend: `[ ]` open · `[~]` in progress · `[x]` done. Items marked **(ve from the scan, confirm against current code first. Owner model: Claude specs → agy implements → Claude reviews. -## ✅ Fixed this session (working tree, uncommitted since `b87a01a`) +## ✅ Done (committed: `b87a01a`, `acc8344`, + this commit) -App now launches and is usable. Changes not yet committed: +App launches and is usable: - [x] **App launches on GTK4/libadwaita** — imported/instantiated `StatusDisplay` (`statusbar`); `add-net.png` → `list-add-symbolic` placeholder. - [x] **Main window chrome → `Adw.ToolbarView`** (`add_top_bar` + `set_content`); removed @@ -30,6 +30,15 @@ App now launches and is usable. Changes not yet committed: - [x] **Feature: content centering** on app start / new / open (center on component bbox, or canvas middle when empty). - [x] **Feature: auto-center on resize** + Preferences toggle (`autocenter_resize`, default ON). +- [x] **Libadwaita styling** — `do_startup` chains to `Adw.Application` (was `Gtk.Application`, + which skipped the Adwaita stylesheet → plain-GTK look). +- [x] **Property dialog UX** — `Adw.ToolbarView` (working close button), guarded `dismiss()`, + dropdowns not searchable, removed redundant per-row group label. +- [x] **Clipboard guard** — `_handle_clipboard` handles "no compatible transfer format" GError. +- [x] **Single-click selects, double-click opens properties** (gesture `n_press`). +- [x] **Running-mode crashes** — guarded `prop_window` close; timing-diagram toggle uses the + real `timing_diagram` attribute; `Diagram.draw()` `int()`-casts cairo surface dims (+ clamp + 32767), registers its draw funcs, fixes cursor typo + undefined `diagram_width`/`img_height`. ## P0 — still open @@ -37,9 +46,9 @@ App now launches and is usable. Changes not yet committed: (we run via `run.py`), but breaks installed launch. **(verify)** - [ ] **Version mismatch** — `pyproject.toml`/`meson.build` say `5.0.0`; `config.py`/ `__init__.py` hardcode `4.0.0`. Pick one source of truth (meson `configure_file` → `config.py`). -- [ ] **`About.py` not wired** — `AboutGGate.create()` never imported/instantiated/presented; - add an `app.about` action that builds + `present(window)`s it. Duplicate `set_comments` - call in `About.py`. (Crash not hit at startup; will hit when About is invoked.) +- [~] **About doesn't work** — `AboutGGate.create()` never imported/instantiated/presented; + the `app.about`/menu action does nothing (or errors). Wire it: build `AboutGGate.create()` + and `present(window)`. Duplicate `set_comments` call in `About.py`. (agy fixing now.) ## P1 — micro-windows / polish @@ -60,8 +69,13 @@ App now launches and is usable. Changes not yet committed: Spec was "initial always, resize gated." Split initial-vs-resize if we want it strict. ### `Windows/Preferences.py` -- [ ] Still subclasses deprecated `Gtk.Dialog`. Candidate migration to - `Adw.PreferencesDialog`. **Confirm scope with PM first.** +- [ ] **Revamp the Preferences UI to a multi-tab/category layout.** Migrate off the deprecated + `Gtk.Dialog` to `Adw.PreferencesDialog` with multiple `Adw.PreferencesPage`s (tabs) grouping + settings by category — e.g. **Theming/Appearance** (colors, fonts, symbol type), and other + groups (simulation: iters/duration; canvas: auto-center; etc.). Use `Adw.PreferencesGroup` + + the appropriate Adw rows (`SwitchRow`, `ComboRow`, `SpinRow`, color/font buttons). Preserve + all existing settings + load/apply wiring. **agy to draft the plan (page/group breakdown, + row mapping); Claude coordinates/reviews.** - [ ] `:24` `# todo: fix font picker`. ### `Windows/TimingGraph/Display.py` + `Diagram.py` diff --git a/.gitignore b/.gitignore index 9fe3d5d..2c5e177 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ deb_dist/ .ruff_cache .mypy_cache dev-* -.agents/gtk4 \ No newline at end of file +.agents/gtk4 +.agents/debug-journal.md \ No newline at end of file diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py index 60c0836..febf777 100644 --- a/ggate/Components/Windows/Properties.py +++ b/ggate/Components/Windows/Properties.py @@ -13,8 +13,13 @@ class PropertyWindow(Adw.Dialog): } def on_window_delete(self, *args): + self._is_presented = False self.emit("window-hidden") + def dismiss(self): + if self._is_presented: + self.close() + def __init__(self): self.title = _("Properties") @@ -26,7 +31,7 @@ def __init__(self): self.content_box: Gtk.Box = None self.banner: Adw.Banner = None self.component = None - self.vbox = None + self._is_presented = False self.set_content_width(350) self.connect("closed", self.on_window_delete) @@ -85,29 +90,34 @@ def on_apply_btn_clicked(self, *widget): def show_properties(self, component: Optional[BaseComponent], parent: Optional[Gtk.Widget] = None): if component is None: - self.close() + self.dismiss() return self.component = component - if self.vbox is not None: - self.set_child(None) + self.set_child(None) - self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.header_bar = Adw.HeaderBar() - self.header_bar.set_show_start_title_buttons(False) - self.header_bar.set_decoration_layout("close") self.set_title("%s - %s" % (self.title, component.description)) + self.banner = Adw.Banner() + self.banner.set_revealed(False) + + toolbar_view = Adw.ToolbarView() + toolbar_view.add_top_bar(self.header_bar) + toolbar_view.add_top_bar(self.banner) + if len(component.properties) == 0: status_page = Adw.StatusPage( - title="No properties", - description="This component has no editable properties.", + title=_("No properties"), + description=_("This component has no editable properties."), ) - self.set_child(status_page) + toolbar_view.set_content(status_page) + self.set_child(toolbar_view) if parent is not None: self.present(parent) + self._is_presented = True return property_idx = 0 @@ -131,7 +141,6 @@ def show_properties(self, component: Optional[BaseComponent], parent: Optional[G ctrl.set_model(model) ctrl.set_selected(self.component.values[property_idx]) - ctrl.set_enable_search(True) ctrl.connect("notify::selected", self.on_apply_btn_clicked) elif property[1][0] == const.property_int: @@ -178,8 +187,6 @@ def show_properties(self, component: Optional[BaseComponent], parent: Optional[G if has_property: if current_group is None: current_group = Adw.PreferencesGroup.new() - current_group.set_title(property[2]) - current_group.set_description(property[0]) groups.append(current_group) group_counts[current_group] = 0 @@ -189,26 +196,21 @@ def show_properties(self, component: Optional[BaseComponent], parent: Optional[G group_counts[current_group] += 1 else: current_group = Adw.PreferencesGroup.new() - current_group.set_title(property[2]) - current_group.set_description(property[0]) + current_group.set_title(property[0]) groups.append(current_group) group_counts[current_group] = 0 property_idx += 1 - self.banner = Adw.Banner() - self.banner.set_revealed(False) - preference_page = Adw.PreferencesPage.new() for group in groups: if group_counts.get(group, 0) > 0: preference_page.add(group) - self.vbox.append(self.header_bar) - self.vbox.append(self.banner) - self.vbox.append(preference_page) - self.set_child(self.vbox) + toolbar_view.set_content(preference_page) + self.set_child(toolbar_view) if parent is not None: - self.present(parent) \ No newline at end of file + self.present(parent) + self._is_presented = True \ No newline at end of file diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index d0a503d..89c9ec0 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -37,7 +37,9 @@ def __init__(self, parent: MainFrame): self._parent_drawarea = parent.drawarea self.name_area = Gtk.DrawingArea() + self.name_area.set_draw_func(self.name_area_draw_fn) self.chart_area = Gtk.DrawingArea() + self.chart_area.set_draw_func(self.chart_area_draw_fn) self.name_area_surface: cairo.ImageSurface = None self.chart_area_surface: cairo.ImageSurface = None @@ -127,7 +129,7 @@ def on_timing_diagram_motion(self, controller, x_axis, y_axis, *args): self.visible_cursor["oldY"] = self.visible_cursor["y"] self.visible_cursor["x"] = x_axis - self.visible_cursor["y"] = x_axis + self.visible_cursor["y"] = y_axis def _draw_cursor(self, cr: cairo.Context): start = (self.visible_cursor["x"], self._section_height) @@ -216,10 +218,10 @@ def _draw_graduations(self, cr: cairo.Context, layout: Pango.Layout): while u_tick_time <= Decimal(u_end_time): tick_x = float(tick_time) * self.scale + 0.5 - if tick_x >= 0 and tick_x <= self.diagram_width: + if tick_x >= 0 and tick_x <= self.diagram_area_size["width"]: # Draw vertical graduation line cr.set_source_rgb(0.5, 0.5, 0.5) - cairo_paths(cr, (int(tick_x), 39), (int(tick_x), self.img_height - 1)) + cairo_paths(cr, (int(tick_x), 39), (int(tick_x), self.diagram_area_size["height"] - 1)) cr.stroke() # Draw label @@ -285,11 +287,11 @@ def _draw_graph(self, cr: cairo.Context): def draw(self): probe_amount = len(self.__get_probes()) # Calculate the draw height and add a little space - draw_height = (self._section_height * probe_amount) + (self._section_height * 2.5) - draw_width = max(1, (self.end_time - self.start_time) * self.scale) + draw_height = int(max(1, min((self._section_height * probe_amount) + (self._section_height * 2.5), 32767))) + draw_width = int(max(1, min((self.end_time - self.start_time) * self.scale, 32767))) # Create the image surface - name_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, self._name_area_width, draw_height) + name_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, int(self._name_area_width), draw_height) chart_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, draw_width, draw_height) # Create image ctx @@ -301,7 +303,7 @@ def draw(self): chart_cr_ctx.set_line_width(1.0) # Set the size request of the name & timing diagram area - self.name_area.set_size_request(self._name_area_width, draw_height) + self.name_area.set_size_request(int(self._name_area_width), draw_height) self.chart_area.set_size_request(draw_width, draw_height) # Save the context diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index ba8cf62..ac9e1c0 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -696,7 +696,7 @@ def on_button_press_primary(self, *args): self.cursor_smooth_x = args[2] self.cursor_smooth_y = args[3] - if args[1] == Gdk.BUTTON_PRIMARY: + if args[1] >= 1: if not self.parent.running_mode: if self._pushed_component_name == const.component_none and not self._pasted_components: @@ -774,7 +774,7 @@ def refresh_nets(self): # Left Click def on_button_release_primary(self, *args): state = args[0].get_current_event_state() - if args[1] == Gdk.BUTTON_PRIMARY: # Left button released + if args[1] >= 1: # Left button released if not self.parent.running_mode: self.drag_enabled = False @@ -872,7 +872,8 @@ def on_button_release_primary(self, *args): if not selected and not state & Gdk.ModifierType.CONTROL_MASK: self.circuit.selected_components = [] - self.set_selected_component_to_prop_window() + if args[1] == 2: + self.set_selected_component_to_prop_window() if len(self.circuit.selected_components) == 0: self.parent.disable_edit_actions() @@ -1058,7 +1059,8 @@ def on_button_release_primary(self, *args): self.cursor_smooth_y - c[1].pos_y) + c[1].pos_y, self.circuit.current_time): if not self.parent.pause_running_mode and not self.circuit.analyze_logic(): - self.parent.diagram_window.diagram_area.createDiagram() + if hasattr(self.parent, "timing_diagram") and self.parent.timing_diagram.get_visible(): + self.parent.timing_diagram._draw_area.draw() self.queue_draw() break diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index b6ee005..831ad0e 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -422,7 +422,7 @@ def on_circuit_run(self, *args): self.comp_window.set_all_sensitive(False) self.action_net.set_sensitive(False) self.action_net.set_active(False) - self.prop_window.close() + self.prop_window.dismiss() self.drawarea.set_component(const.component_none) self.drawarea.component_dragged = False self.drawarea.drag_enabled = False diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index 8e1be9d..80c3b1a 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -1,5 +1,5 @@ import os -from gi.repository import Gtk, Gdk +from gi.repository import Gtk, Gdk, GLib _PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -99,11 +99,16 @@ def _get_window(self) -> Gtk.ApplicationWindow: def _handle_clipboard(self, clipboard: Gdk.Clipboard, task, *args): window = self._get_window() - str_data = clipboard.read_text_finish(task) + try: + str_data = clipboard.read_text_finish(task) + except GLib.GError: + str_data = None if str_data is not None: components = self._parent.circuit.converter.string_to_components(str_data) has_clipboard = not isinstance(components, str) and len(components) > 0 window.action_set_enabled("app.on_action_paste_pressed", has_clipboard) + else: + window.action_set_enabled("app.on_action_paste_pressed", False) def calculate(self, x, y): parent = self.get_parent() From 7daa9c608040fa5bdf047cfada23b944a3456cb1 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 02:00:27 +0100 Subject: [PATCH 10/37] feat: revamp component sidebar (search, categories, all-caps) and wire About ComponentView is now a searchable, category-grouped sidebar with ALL-CAPS gate names, navigation-sidebar styling, container padding, and no search auto-focus. Wire the About dialog (AboutGGate.create + present) which previously did nothing. Add planning docs for the preferences revamp and component-movement animation under .agents/plans/. Co-Authored-By: Gemini Co-Authored-By: Claude Opus 4.8 --- .agents/plans/component-animation.md | 213 ++++++++++++++++++++ .agents/plans/preferences-revamp.md | 279 +++++++++++++++++++++++++++ ggate/ComponentView.py | 117 ++++++----- ggate/Components/Windows/About.py | 1 - ggate/MainFrame.py | 5 +- 5 files changed, 570 insertions(+), 45 deletions(-) create mode 100644 .agents/plans/component-animation.md create mode 100644 .agents/plans/preferences-revamp.md diff --git a/.agents/plans/component-animation.md b/.agents/plans/component-animation.md new file mode 100644 index 0000000..1da8af4 --- /dev/null +++ b/.agents/plans/component-animation.md @@ -0,0 +1,213 @@ +# GGate Canvas Component Animation Plan + +This document outlines the design, feasibility, and implementation plan for introducing smooth animated transitions (gliding) when logic components and nets snap to the grid in GGate. + +--- + +## 1. Feasibility Assessment + +### Verdict: YES (Highly Feasible) + +Animating component and net moves is fully feasible under the current GGate architecture without requiring fundamental structural changes to the logic simulation or the rendering pipeline. + +### Architectural Enablers + +1. **Draw loop structure (`ggate/DrawArea.py:on_draw`)**: + In `on_draw` (lines 351–386), the cached offscreen surface (`self.mpixbuf`) is **only** used to cache the background canvas color and the grid lines (lines 353–373). The components and nets are drawn *directly* on top of the rendered background onto the active widget context `cr` during every frame redraw (line 386): + ```python + [self.draw_component(cmp, cr, layout) for cmp in self.circuit.components] + ``` + This is a massive performance advantage: animating components only requires updating their visual coordinates and calling `self.queue_draw()`. The background grid does **not** need to be invalidated or re-rendered on the CPU, making redraws extremely cheap. +2. **Floating-Point Cairo rendering**: + Cairo drawing functions (such as `cr.translate(x, y)` used to position gates) natively accept floating-point values. This allows smooth, sub-pixel animations. +3. **Decoupled Grid Logic**: + Grid snapping calculations during drag/move are computed using basic modular arithmetic (`ddx - ddx % self.grid_step`) inside `on_motion`. Net splitting and connection logic are only evaluated on mouse release (`on_button_release_primary`). Thus, visual rendering during motion can be interpolated independently without breaking the underlying logical integrity of the circuit. + +### Friction Points & Challenges + +1. **Net representation**: + Logic gates are persistent objects subclassing `BaseComponent`, making it easy to store additional states. However, net segments are raw Python lists (`[const.component_net, x1, y1, x2, y2]`) that are modified in-place during dragging and frequently deleted, split, or combined on drop. The animation manager must track these lists safely via object references and clean them up when they are removed. +2. **History State deep-copy (`ggate/CircuitManager.py:undo/redo`)**: + Undo and Redo actions replace the entire list of components with deep copies (`self.components = copy.deepcopy(...)`). This changes all component object references instantly. Consequently, any active animation mapping keying off component object references will become stale. + +--- + +## 2. Core Mechanism + +The animation loop will be driven by the GTK4 Frame Clock rather than CPU-blocking timers (like `time.sleep` or high-overhead Python threads). + +### The Recommended Driver: `Gtk.Widget.add_tick_callback` + +To animate, we will register a tick callback on the `Gtk.DrawingArea` widget using: +```python +self.tick_id = self.drawingarea.add_tick_callback(self._on_tick) +``` +- **Frame-Rate Alignment**: The callback is called by GTK in sync with the GDK frame clock, matching the monitor's vertical refresh rate (v-sync). This ensures maximum fluidity. +- **Microsecond Precision**: The tick callback receives a `Gdk.FrameClock` object. Calling `frame_clock.get_frame_time()` returns monotonic microseconds, providing a jitter-free delta-time calculation. +- **Automatic Lifecycle**: Returning `GLib.SOURCE_REMOVE` (or `False` in Python) automatically removes the callback, avoiding idle CPU usage when no animations are active. + +### Alternative: Libadwaita `Adw.TimedAnimation` / `Adw.SpringAnimation` + +We evaluated using Libadwaita animations: +* **Pros**: Native C implementation, built-in physics curves (`Adw.SpringAnimation` behaves like a physical spring), and clean target-progress tracking. +* **Cons**: + * In PyGObject, creating a target callback via `Adw.CallbackAnimationTarget` introduces wrapper overhead, especially when animating dozens of gates and wires simultaneously. + * Starting/stopping dozens of concurrent animations creates multiple timers that are hard to coordinate and centralize. + * Adding references to `Adw` animation objects decreases portability if GGate components are ever rendered outside Adw widgets. + +**Recommendation**: Use a centralized `Gtk.Widget.add_tick_callback` on the canvas. It maintains a registry of all active visual animations and handles them in a single Python loop, offering superior control and minimal overhead. + +--- + +## 3. Design: Logical vs. Visual Decoupling + +To prevent animations from affecting circuit simulation, connections, or save-states, we must decouple the **logical position** (snapped integers) from the **visual position** (interpolated floats). + +```mermaid +graph TD + Cursor[Cursor Move] --> Snapped[Calculate snapped coordinates] + Snapped --> UpdateLogical[Update logical position: cmp.pos_x / cmp.pos_y] + UpdateLogical --> Registry[Register Animation: logical position is the Target] + Registry --> FrameClock[Frame clock tick callback updates visual_positions] + FrameClock --> Draw[on_draw: renders components at visual coordinates] +``` + +### Visual Position Registry +We will introduce an animation registry dictionary inside `DrawArea`: +```python +self.visual_positions = {} # Key: component obj or net list ref -> VisualState +``` + +- When a component/net `c` is drawn, `DrawArea` queries `self.visual_positions`. +- If a visual state exists, it uses those coordinates for rendering (e.g. translating the Cairo context). +- If it does not exist, it defaults to the logical position `(c[1].pos_x, c[1].pos_y)` and renders instantly. + +### Redraw Management +No modifications are required for the cached background surface `self.mpixbuf`. The background and grid lines remain cached. During an animation tick, we update the visual positions and call `self.queue_draw()`. The widget blits the background cache and draws all components dynamically at their current visual positions. + +--- + +## 4. Handling Edge Cases + +| Edge Case | Problem | Solution | +| :--- | :--- | :--- | +| **In-Flight Interruption (Re-grab)** | Component is clicked or dragged again while still gliding. | The animation target updates to the new cursor coordinate, but the starting position remains the current visual position. The glide changes direction smoothly without jumping. | +| **Multi-Select Drag** | Multiple components/nets are dragged together. | All selected items are added to the active animations list at the same time. The tick callback updates them in lockstep, preserving their relative offsets. | +| **Paste Action** | Pasted components appear instantly. | If the PM desires a glide-in effect, we initialize their visual coordinates at a minor offset (or cursor position) and target their final paste locations. Otherwise, we initialize their visual positions directly to the target, bypassing animation. | +| **Undo / Redo** | `copy.deepcopy` destroys object references, making keys in the animation registry stale. | Clear `self.visual_positions` and stop the tick callback when undo/redo is executed. The components instantly snap to their history coordinates. | +| **Simulation Mode** | Drawing area enters running mode. Components must not drift. | Component dragging is disabled during running mode. When toggling running mode, we instantly flush all pending animations (set visual positions = logical positions) and clear the registry. | +| **High Density Performance** | Moving hundreds of components simultaneously could cause frame drops. | Set a threshold (e.g., maximum of 50 moving items). If more components are moved (such as dragging the entire circuit), bypass animations and snap them instantly. | + +--- + +## 5. Reusable Animation API Sketch + +To allow future visual effects (e.g. component fades, rotations, input level pulses) to reuse the same framework, we will structure the animation controller as follows: + +```python +# ggate/Utils.py or new file ggate/Animation.py + +def ease_out_cubic(t: float) -> float: + """Standard cubic easing out.""" + return 1 - (1 - t) ** 3 + +class Vector2DAnimation: + """Manages visual coordinates interpolation for 2D movements.""" + def __init__(self, start_pos: tuple[float, float], target_pos: tuple[float, float], duration_ms: float, easing_fn=ease_out_cubic): + self.start_pos = list(start_pos) + self.target_pos = list(target_pos) + self.current_pos = list(start_pos) + self.duration_us = duration_ms * 1000 + self.elapsed_us = 0 + self.easing_fn = easing_fn + self.completed = False + + def update(self, delta_us: int) -> None: + self.elapsed_us += delta_us + if self.elapsed_us >= self.duration_us: + self.current_pos = list(self.target_pos) + self.completed = True + else: + t = self.elapsed_us / self.duration_us + eased_t = self.easing_fn(t) + self.current_pos[0] = self.start_pos[0] + (self.target_pos[0] - self.start_pos[0]) * eased_t + self.current_pos[1] = self.start_pos[1] + (self.target_pos[1] - self.start_pos[1]) * eased_t + +class CanvasAnimationController: + """Central manager registered on DrawArea to handle all tick-callbacks.""" + def __init__(self, draw_area): + self.draw_area = draw_area + self.active_animations: dict[object, Vector2DAnimation] = {} + self.tick_id: int | None = None + self.last_frame_time: int = 0 + + def start_move_animation(self, item_ref: object, start_pos: tuple[float, float], target_pos: tuple[float, float], duration_ms: float = 150) -> None: + """Starts a glide animation for a component or net segment.""" + # If already animating, continue from the current visual position to avoid jumps + actual_start = self.active_animations[item_ref].current_pos if item_ref in self.active_animations else start_pos + self.active_animations[item_ref] = Vector2DAnimation(actual_start, target_pos, duration_ms) + + if self.tick_id is None: + self.last_frame_time = 0 + self.tick_id = self.draw_area.drawingarea.add_tick_callback(self._on_tick) + + def cancel_animation(self, item_ref: object) -> None: + """Cancels animation for a specific item.""" + if item_ref in self.active_animations: + del self.active_animations[item_ref] + if not self.active_animations: + self._stop_tick() + + def clear(self) -> None: + """Clears all active animations and snaps items to their targets.""" + self.active_animations.clear() + self._stop_tick() + + def get_visual_position(self, item_ref: object, default_pos: tuple[float, float]) -> tuple[float, float]: + """Returns visual coordinates if animating, otherwise logical coordinates.""" + if item_ref in self.active_animations: + pos = self.active_animations[item_ref].current_pos + return (pos[0], pos[1]) + return default_pos + + def _on_tick(self, widget, frame_clock, user_data=None) -> bool: + """Executes on every frame clock update.""" + frame_time = frame_clock.get_frame_time() + if self.last_frame_time == 0: + self.last_frame_time = frame_time + return True # Continue clock + + delta_us = frame_time - self.last_frame_time + self.last_frame_time = frame_time + + completed_keys = [] + for key, anim in self.active_animations.items(): + anim.update(delta_us) + if anim.completed: + completed_keys.append(key) + + for key in completed_keys: + del self.active_animations[key] + + # Request canvas redraw + self.draw_area.queue_draw() + + if not self.active_animations: + self._stop_tick() + return False # Remove tick callback + return True # Continue callback + + def _stop_tick(self) -> None: + if self.tick_id is not None: + self.draw_area.drawingarea.remove_tick_callback(self.tick_id) + self.tick_id = None + self.last_frame_time = 0 +``` + +--- + +## 6. Open Questions for the PM + +1. **Paste Visual Effect**: When a component is pasted, should it snap instantly (current behavior) or glide in from the cursor position to add a sense of placement? +2. **Animation Speed / Duration**: Is a duration of `150ms` (using `ease_out_cubic`) appropriate for grid snapping, or does the PM want to test different easing functions (e.g. spring bounce)? +3. **Net Rubber-Banding / Connection Animation**: Right now, wires do not stretch or follow moving gates dynamically during a drag; they only split and reconnect when the component is released. Should we animate the wires that snap into new locations upon drop, or are we only animating the physical gate movements? diff --git a/.agents/plans/preferences-revamp.md b/.agents/plans/preferences-revamp.md new file mode 100644 index 0000000..6541435 --- /dev/null +++ b/.agents/plans/preferences-revamp.md @@ -0,0 +1,279 @@ +# PLAN: Preferences UI Revamp + +This document outlines the design and migration plan for updating GGate's preferences window from a deprecated `Gtk.Dialog` to a modern, adaptive `Adw.PreferencesDialog`. + +> [!NOTE] +> This is a planning-only document. No application code will be modified during this task. + +--- + +## 1. Inventory of Current Settings + +GGate stores user settings globally in [Preference.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Preference.py). The following table catalogues every setting, its type, default value, purpose, and the widget used in the current UI: + +| Setting Key | Data Type | Default Value | Controls / Description | Current UI Widget | +| :--- | :--- | :--- | :--- | :--- | +| `drawing_font` | `Pango.FontDescription` | `"Liberation Mono 10"` | Font family and size for component label drawing | `Gtk.FontDialogButton` (Broken/unconfigured) | +| `symbol_type` | `int` | `0` (MIL/ANSI) | Symbol style for logic gates (0: MIL/ANSI, 1: IEC) | `Gtk.ComboBoxText` | +| `max_calc_iters` | `int` | `10000` | Max iterations per simulation step | `Gtk.SpinButton` | +| `max_calc_duration` | `float` | `0.0002` (seconds) | Max calculation step duration (shown in µs in UI) | `Gtk.SpinButton` (multiplied by $10^6$ for µs) | +| `autocenter_resize` | `int` (as bool) | `1` (ON) | Automatically center canvas bounding box on resize | `Gtk.Switch` | +| `grid_step` | `int` | `10` | Grid spacing distance in pixels on canvas | *None (Hidden setting)* | +| `net_color` | `cairo.SolidPattern` | `0.0, 0.0, 1.0` (Blue) | Default net color in edit mode | `Gtk.ColorButton` | +| `net_high_color` | `cairo.SolidPattern` | `0.5, 0.5, 1.0` | Color of highlighted nets | `Gtk.ColorButton` | +| `net_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of un-powered nets in simulation mode | `Gtk.ColorButton` | +| `highlevel_color` | `cairo.SolidPattern` | `1.0, 0.0, 0.0` (Red) | Color of high logic level (1) nets | `Gtk.ColorButton` | +| `lowlevel_color` | `cairo.SolidPattern` | `0.0, 0.0, 1.0` (Blue) | Color of low logic level (0) nets | `Gtk.ColorButton` | +| `component_color` | `cairo.SolidPattern` | `0.0, 1.0, 0.0` (Green) | Default component stroke in edit mode | `Gtk.ColorButton` | +| `component_high_color` | `cairo.SolidPattern` | `0.5, 1.0, 0.5` | Color of highlighted components | `Gtk.ColorButton` | +| `component_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of components in simulation mode | `Gtk.ColorButton` | +| `picked_color` | `cairo.SolidPattern` | `1.0, 0.5, 0.0` (Orange) | Color of components currently being moved | `Gtk.ColorButton` | +| `preadd_color` | `cairo.SolidPattern` | `1.0, 0.75, 0.0` | Color of components before placement preview | `Gtk.ColorButton` | +| `selected_color` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Color of selected components | `Gtk.ColorButton` | +| `terminal_color` | `cairo.SolidPattern` | `1.0, 0.0, 0.0` (Red) | Color of terminals/pins in edit mode | `Gtk.ColorButton` | +| `terminal_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of terminals/pins in simulation mode | `Gtk.ColorButton` | +| `cursor_color` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Color of snapping placement cursor | `Gtk.ColorButton` | +| `bg_color` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Canvas background color in edit mode | `Gtk.ColorButton` | +| `bg_color_running` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Canvas background color in simulation mode | `Gtk.ColorButton` | +| `grid_color` | `cairo.SolidPattern` | `0.15, 0.12, 0.15` | Color of grid dots/lines | `Gtk.ColorButton` | + +*Note: Internal patterns starting with `_` (`_red`, `_green`, `_blue`, `_yellow`) and selection box colors (`selection_box`, `selection_box_border`) are stored in `Preference.py` but excluded from user modification UI.* + +--- + +## 2. Proposed Tab & Page Structure + +We will transition the dialog structure to a set of sub-pages within `Adw.PreferencesDialog`. This provides an adaptive sidebar/header layout with search capabilities. + +```mermaid +graph TD + PD[Adw.PreferencesDialog] --> P1[Page 1: Appearance] + PD --> P2[Page 2: Colors] + PD --> P3[Page 3: Simulation] + PD --> P4[Page 4: Canvas Behavior] + + P1 --> G1_1[Group: Typography & Style] + P1 --> G1_2[Group: Canvas Colors] + + P2 --> G2_1[Group: Component Colors] + P2 --> G2_2[Group: Net Colors] + P2 --> G2_3[Group: Terminals] + + P3 --> G3_1[Group: Performance & Constraints] + + P4 --> G4_1[Group: Layout & Grid] +``` + +### Page 1: Appearance (Title: `Appearance`, Icon: `preferences-desktop-wallpaper-symbolic`) + +#### Group 1: Typography & Style +* **Drawing Font** + * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.FontDialogButton` suffix. + * *Mapping:* Live-binds to `Preference.drawing_font` (`Pango.FontDescription`). +* **Symbol Style** + * *Adw Row Type:* `Adw.ComboRow` + * *Model:* `Gtk.StringList.new([_("MIL/ANSI"), _("IEC")])` + * *Mapping:* Live-binds to `Preference.symbol_type` (`int`, index). + +#### Group 2: Canvas Colors +* **Background (Edit Mode)** + * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. + * *Mapping:* Live-binds to `Preference.bg_color` (RGB string mapping). +* **Background (Running Mode)** + * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. + * *Mapping:* Live-binds to `Preference.bg_color_running`. +* **Grid Color** + * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. + * *Mapping:* Live-binds to `Preference.grid_color`. +* **Cursor Color** + * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. + * *Mapping:* Live-binds to `Preference.cursor_color`. + +--- + +### Page 2: Colors (Title: `Colors`, Icon: `applications-graphics-symbolic`) + +#### Group 1: Component Colors +* **Component (Default)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.component_color` +* **Component (Highlighted)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.component_high_color` +* **Component (Running)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.component_color_running` +* **Component (Picked)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.picked_color` +* **Component (Pre-added)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.preadd_color` +* **Component (Selected)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.selected_color` + +#### Group 2: Net Colors +* **Net (Default)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.net_color` +* **Net (Highlighted)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.net_high_color` +* **Net (Running)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.net_color_running` +* **Net (High Level)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.highlevel_color` +* **Net (Low Level)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.lowlevel_color` + +#### Group 3: Terminals +* **Terminal (Edit)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.terminal_color` +* **Terminal (Running)** + * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. + * *Mapping:* `Preference.terminal_color_running` + +--- + +### Page 3: Simulation (Title: `Simulation`, Icon: `media-playback-start-symbolic`) + +#### Group 1: Performance & Constraints +* **Max Calculation Iterations** + * *Adw Row Type:* `Adw.SpinRow` + * *Range:* $10$ to $1,000,000$, step $1.0$ (digits: 0, numeric: True). + * *Mapping:* Live-binds to `Preference.max_calc_iters` (`int`). +* **Max Calculation Duration (µs)** + * *Adw Row Type:* `Adw.SpinRow` + * *Range:* $0$ to $100,000$, step $1.0$ (digits: 3, numeric: True). + * *Mapping:* `Preference.max_calc_duration` (float, display value equals seconds multiplied by $10^6$). + +--- + +### Page 4: Canvas Behavior (Title: `Canvas`, Icon: `input-mouse-symbolic`) + +#### Group 1: Layout & Grid +* **Auto-Center Content on Resize** + * *Adw Row Type:* `Adw.SwitchRow` + * *Mapping:* Live-binds to `Preference.autocenter_resize` (`0` or `1`). +* **Grid Step Size (px)** + * *Adw Row Type:* `Adw.SpinRow` + * *Range:* $5$ to $50$, step $1.0$ (digits: 0, numeric: True). + * *Mapping:* Live-binds to the previously hidden `Preference.grid_step` (`int`). + +--- + +## 3. Load / Apply Wiring: Live Binding vs. Explicit Apply + +In the current architecture, settings are modified via an explicit dialog cycle: +1. Dialog reads values into widgets via `update_dialog()`. +2. User edits widgets. +3. User clicks **Apply** (which runs `apply_settings()` and saves settings) or **Cancel** (which discards inputs). + +### The Modern Adwaita Pattern: Instant-Apply (Live Binding) +Modern GNOME Human Interface Guidelines (HIG) reject "Cancel/Apply" preference modals. Instead, preferences are **instant-apply**: settings apply in real-time as widgets change. + +We plan to implement **Instant-Apply** for GGate. + +#### Real-time Wiring Workflow +1. **Instantiation:** + `PreferencesWindow` will subclass `Adw.PreferencesDialog` and accept a reference to the `MainFrame` parent: + ```python + class PreferencesWindow(Adw.PreferencesDialog): + def __init__(self, parent): + super().__init__() + self.set_transient_for(parent) + self.main_frame = parent + self.build_ui() + ``` +2. **Initial Population (No-Signal Stage):** + We construct widgets and set their values from `Preference` attributes *before* connecting change signals. This avoids triggering false change events during widget creation. +3. **Signal Binding:** + Once loaded, row properties connect to a shared update logic: + * `SwitchRow` -> `notify::active` + * `ComboRow` -> `notify::selected` + * `SpinRow` -> `notify::value` + * `Gtk.ColorDialogButton` -> `notify::rgba` + * `Gtk.FontDialogButton` -> `notify::font-desc` +4. **Shared Event Handling:** + On change, we update `Preference`, write to disk, and redraw the canvas: + ```python + def _on_color_changed(self, button, pspec, key): + rgba = button.get_rgba() + Preference.__setattr__(key, f"{rgba.red},{rgba.green},{rgba.blue}") + Preference.save_settings() + self._trigger_canvas_redraw() + + def _trigger_canvas_redraw(self): + if self.main_frame and hasattr(self.main_frame, "drawarea"): + self.main_frame.drawarea.redraw = True + self.main_frame.drawarea.queue_draw() + ``` + +> [!TIP] +> In `MainFrame.py`, the old callback response handler `_prefs_changed()` and dialog re-instantiation logic can be removed completely. Showing the preferences window becomes a simple: +> ```python +> def on_action_prefs_pressed(self, *widget): +> PreferencesWindow(self).present() +> ``` + +--- + +## 4. Migration Notes & Risks + +### 1. Font Picker Fix (`Gtk.FontDialogButton`) +The current code throws a TODO regarding the font picker: +```python +# todo: fix font picker +self.drawing_font_btn = Gtk.FontDialogButton() +``` +* **Why it's broken:** In GTK4, a `Gtk.FontDialogButton` cannot show a font selector window unless it has an associated `Gtk.FontDialog` object. +* **The Fix:** Construct a helper `Gtk.FontDialog` and set it on the button: + ```python + font_dialog = Gtk.FontDialog() + self.drawing_font_btn = Gtk.FontDialogButton.new(font_dialog) + # Alternatively: + # self.drawing_font_btn.set_dialog(font_dialog) + ``` + +### 2. Color Pickers (`Gtk.ColorDialogButton`) +The current code uses the legacy `Gtk.ColorButton` widget. Because GGate targets GTK4 $\ge$ 4.16: +* We should migrate to the modern `Gtk.ColorDialogButton` (introduced in GTK 4.10) to avoid deprecation warnings. +* Similar to the font picker, `Gtk.ColorDialogButton` requires a `Gtk.ColorDialog` context: + ```python + color_dialog = Gtk.ColorDialog() + btn = Gtk.ColorDialogButton.new(color_dialog) + ``` + +### 3. Removal of `Gtk.Dialog` Architecture +* Since `Adw.PreferencesDialog` subclasses `Adw.Dialog`, we don't need manual title-bar configuration, margins, scrolling, or action-area buttons. Removing them simplifies `Preferences.py` from 204 lines of layout boilerplate to roughly 100 lines of declarative groupings. + +--- + +## 5. Open Questions for the PM + +Before the implementation phase, the PM should clarify the following design decisions: + +1. **Exposing `grid_step`:** + Should we expose the canvas grid size setting to the user? (Currently it exists in `Preference.py` default `10` but is hidden. We recommend adding it under a "Canvas" tab). +2. **Exposing selection box colors:** + Should `selection_box` (default RGBA `1, 0.75, 0, 0.25`) and `selection_box_border` (default RGB `1, 0.75, 0`) also be added to the Colors page, or should they remain hardcoded? +3. **Light/Dark and System Style Integration:** + Libadwaita supports the system dark style preference via `Adw.StyleManager`. Since GGate has manual canvas edit/run backgrounds, should we allow matching the system color scheme (automatically switching backgrounds), or keep backgrounds fully manual? +4. **Drawing Font Restriction:** + Should the font chooser be limited to Monospaced fonts (which render labels more cleanly on a logic gate schematic), or let the user choose any system font? + +--- + +## 6. PM Decisions (2026-06-14) + +1. **grid_step** — do NOT expose yet. Keep hidden in `Preference.py`; drop the "Grid Step Size" row from the Canvas page (Canvas page then holds only Auto-Center). +2. **selection-box colors** (`selection_box`, `selection_box_border`) — do NOT expose yet. Keep hardcoded; omit from the Colors page. +3. **System dark/light (`Adw.StyleManager`)** — keep canvas colors **manual**. No automatic system-scheme integration; a proper theming system is planned separately later. +4. **Drawing font** — **monospace only.** Configure the `Gtk.FontDialog` to restrict selection to monospaced fonts. + +Implementation must honor these: no grid-step row, no selection-box rows, no `StyleManager` wiring, monospace-restricted font picker. diff --git a/ggate/ComponentView.py b/ggate/ComponentView.py index b86c188..c90e933 100644 --- a/ggate/ComponentView.py +++ b/ggate/ComponentView.py @@ -13,19 +13,42 @@ def _get_icon_path(icon: str): class ComponentViewListBoxRow(Gtk.ListBoxRow): type = BaseComponent -class ComponentView(Gtk.ScrolledWindow): +class ComponentView(Gtk.Box): __gsignals__ = { "component-checked": (GObject.SIGNAL_RUN_FIRST, None, (str,)), "window-hidden": (GObject.SIGNAL_RUN_FIRST, None, ()), } def __init__(self): - super().__init__() - self.set_margin_bottom(4) + super().__init__(orientation=Gtk.Orientation.VERTICAL) + self.set_margin_start(6) + self.set_margin_end(6) + self.set_margin_top(6) + self.set_margin_bottom(6) self.set_size_request(200, -1) self.components: list[ComponentViewListBoxRow] = [] - self.listBox = Gtk.ListBox() + self.listboxes: list[Gtk.ListBox] = [] + self.category_groups = [] + + self.search_entry = Gtk.SearchEntry() + self.search_entry.set_placeholder_text(_("Search gates")) + self.search_entry.set_margin_start(4) + self.search_entry.set_margin_end(4) + self.search_entry.set_margin_top(4) + self.search_entry.set_margin_bottom(4) + self.search_entry.connect("search-changed", self.on_search_changed) + self.append(self.search_entry) + + scrolled = Gtk.ScrolledWindow() + scrolled.set_vexpand(True) + scrolled.set_hexpand(True) + self.append(scrolled) + + self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2) + self.main_box.set_margin_start(4) + self.main_box.set_margin_end(4) + scrolled.set_child(self.main_box) # Create toggle buttons self.button_names = { @@ -64,46 +87,37 @@ def __init__(self): ], } - for button_types in self.button_names.keys(): - section = Gtk.ListBoxRow() - section_title = Gtk.Box() - - section_label = Gtk.Label() - section_label.set_markup("" + _(button_types).capitalize() + "") - section_label.set_margin_top(5) - section_label.set_margin_bottom(5) - section_label.add_css_class("title") - - section_title.append(section_label) - section_title.set_margin_start(5) - - section.set_size_request(-1, 35) - section.set_child(section_title) - section.set_activatable(False) - section.set_selectable(False) - - self.listBox.append(section) - self.listBox.set_show_separators(True) - - # The logic gates in that section - + group_label = Gtk.Label() + group_label.set_markup("" + _(button_types).capitalize() + "") + group_label.add_css_class("dimmed") + group_label.set_halign(Gtk.Align.START) + group_label.set_margin_start(4) + group_label.set_margin_top(4) + group_label.set_margin_bottom(2) + self.main_box.append(group_label) + + # ListBox for this category + lb = Gtk.ListBox() + lb.add_css_class("navigation-sidebar") + lb.connect("row-activated", self.on_row_activated) + self.main_box.append(lb) + self.listboxes.append(lb) + + group_rows = [] for gate in self.button_names[button_types]: - gate_row: ComponentViewListBoxRow = Gtk.ListBoxRow() - content_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + gate_row: ComponentViewListBoxRow = ComponentViewListBoxRow() + content_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=4) + content_box.set_valign(Gtk.Align.CENTER) icon = Gtk.Image.new_from_file(_get_icon_path(gate)) + icon.set_margin_end(4) + icon.set_margin_start(4) + icon.set_size_request(24, 24) - # Label designs - label = Gtk.Label(label=str(gate).capitalize()) - label.set_margin_start(5) + label = Gtk.Label(label=str(gate).upper()) label.add_css_class("subtitle") - # Icon organization - icon.set_margin_end(5) - icon.set_margin_start(10) - icon.set_size_request(24, 24) - content_box.append(icon) content_box.append(label) @@ -112,21 +126,38 @@ def __init__(self): gate_row.set_child(content_box) gate_row.set_activatable(True) - self.listBox.append(gate_row) + lb.append(gate_row) self.components.append(gate_row) + group_rows.append(gate_row) - self.listBox.connect("row-activated", self.on_row_activated) - self.set_child(self.listBox) + self.category_groups.append((group_label, lb, group_rows)) def set_all_sensitive(self, state, *args): [row.set_selectable(bool(state)) for row in self.components] - def on_row_activated(self, _, row, *args): - gates = [] - gate = row.type + def on_row_activated(self, listbox, row, *args): + for lb in self.listboxes: + if lb != listbox: + lb.unselect_all() + gate = row.type + gates = [] for item in self.button_names.values(): gates += item if gate in gates: self.emit("component-checked", gate) + + def on_search_changed(self, entry): + query = entry.get_text().strip().lower() + + for group_label, lb, gates in self.category_groups: + visible_count = 0 + for row in gates: + match = not query or (query in str(row.type).lower()) + row.set_visible(match) + if match: + visible_count += 1 + + lb.set_visible(visible_count > 0) + group_label.set_visible(visible_count > 0) diff --git a/ggate/Components/Windows/About.py b/ggate/Components/Windows/About.py index 5369600..2f7e271 100644 --- a/ggate/Components/Windows/About.py +++ b/ggate/Components/Windows/About.py @@ -15,7 +15,6 @@ def create() -> Adw.AboutDialog: about_dialog.set_license_type(Definitions.license) about_dialog.set_developers(Definitions.developer) about_dialog.set_issue_url(Definitions.devel_bug) - about_dialog.set_comments(Definitions.description) about_dialog.set_developer_name(Definitions.developer_name) # TODO: Add support for release notes and other features diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 831ad0e..dfae9c6 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -19,6 +19,7 @@ from ggate.CircuitManager import CircuitManager from ggate.Components.Windows.Properties import PropertyWindow from ggate.Components.Windows.Preferences import PreferencesWindow +from ggate.Components.Windows.About import AboutGGate from ggate import Preference from ggate.Components.LogicGates import logic_gates @@ -336,7 +337,8 @@ def reset_frame(self): # >> app action handlers >> def on_action_about_pressed(self, *widget): - self.about_dialog.present() + about_dialog = AboutGGate.create() + about_dialog.present(self) def on_action_new_pressed(self, *args): if self.circuit.need_save: @@ -742,3 +744,4 @@ def do_activate(self, *args): self.add_window(self.window) self.window.present() self.window.show() + self.window.set_focus(None) From f23bbef8d09d593b6ae44e002431d86bec7924bf Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 02:43:21 +0100 Subject: [PATCH 11/37] feat: preferences revamp, component-movement animation, viewport-sized window Rewrite Preferences as an Adw.PreferencesDialog (instant-apply) with an Appearance page (style + all color groups), Simulation, and Canvas pages; monospace-restricted font picker and ColorDialogButtons. Animate component movement (ease-out glide on the visual layer, model stays grid-snapped). Size the main window to 65%x60% of the monitor via a helper. Add the no-deep-nesting convention to CLAUDE.md. Co-Authored-By: Gemini Co-Authored-By: Claude Opus 4.8 --- .agents/build-system-analysis.md | 198 ++++++++++++ CLAUDE.md | 2 + ggate/Animation.py | 95 ++++++ ggate/Components/Windows/Preferences.py | 386 ++++++++++++------------ ggate/DrawArea.py | 71 ++++- ggate/MainFrame.py | 54 +++- 6 files changed, 594 insertions(+), 212 deletions(-) create mode 100644 .agents/build-system-analysis.md create mode 100644 ggate/Animation.py diff --git a/.agents/build-system-analysis.md b/.agents/build-system-analysis.md new file mode 100644 index 0000000..53ab55f --- /dev/null +++ b/.agents/build-system-analysis.md @@ -0,0 +1,198 @@ +# GGate Build & Packaging System Analysis + +This document provides a read-only analysis of the GGate logic-circuit simulator's build, packaging, and runtime asset-handling configurations. + +--- + +## 1. Meson Build Setup + +### Description of Existing Setup +The project uses **Meson** as its primary build configuration system: +- **Root `meson.build`**: Defines the project `ggate` with version `5.0.0` and minimum Meson version `1.4.0`. + - It checks for external system dependencies: `pygobject-3.0`, `gtk4 >= 4.16.0`, and `libadwaita-1 >= 1.6.8`. + - It uses python's `find_installation` module check to ensure that required library imports (`gi`, `cairo`, `packaging`, `igraph`, `shapely`) are present in the target Python environment. + - It defines a `profile` option via `meson_options.txt`. If the profile is `development` (the default), the app-id is `org.astralco.GGate.Dev` and the resource prefix is `/org/astralco/GGate/Dev`. If `release`, the app-id is `org.astralco.GGate` and the prefix is `/org/astralco/GGate`. + - It configures build variables via `configuration_data()` (setting `PYTHON`, `VERSION`, `bindir`, and `pkgdatadir`). + - Python sources are installed recursively using `install_subdir('ggate')` directly into Python's `site-packages` directory. It uses a shell callout via `run_command` with Unix tools (`find` and `sed`) to compute which `__pycache__` directories to exclude, along with excluding `*.pyc`. + - Commented-out post-install triggers for desktop files, schemas, and icon caches are present at the bottom. +- **`bin/meson.build`**: Uses `configure_file` to interpolate build variables into `bin/ggate.in`, yielding an executable python file `ggate` installed to the system binary directory (`bindir`) with execute permissions. +- **`data/images/meson.build`**: + - Generates `resources.xml` from `resources.xml.in` by dynamically inserting `@ICON_FILES@` (compiled from a list of SVGs in `components/` and `actions/`) and the profile-specific `@PREFIX@`. + - Compiles the generated XML into a binary GResource bundle `ggate-resources.gresource` using `gnome.compile_resources` and installs it to the package data directory (`pkgdatadir`). + - Directly copies raw SVGs into `pkgdatadir / 'icons'` via `install_subdir`. + +### Issues, Inconsistencies & Risks +* **Issue 1.1: Brittle Python Cache Exclusion (Unix-dependent)** + * **Severity**: `should-fix` + * **Details**: Root `meson.build` calls a shell command (`find ggate -type d -name __pycache__ | sed ...`) to construct directory exclusion lists. This is not portable (will fail on Windows) and depends on the configuration-time state of the repository. If configured in a completely clean repository, no directories will be found, but subsequent builds or updates might generate cache files that bypass the exclusion because it was computed statically at configure time. + * **Recommended Fix**: Rely on python's built-in packaging tools, or use Meson's native filesystem functions/Python helper script to filter directories portably. +* **Issue 1.2: Local Variable `prefix` Shadowing** + * **Severity**: `nice-to-have` + * **Details**: In root `meson.build`, a local variable is named `prefix` (used for GResource prefix paths). Meson has a built-in option `prefix` representing the installation base path (e.g. `/usr`). This naming overlap is confusing for developers. + * **Recommended Fix**: Rename the local variable `prefix` to `gresource_prefix`. +* **Issue 1.3: Commented-out Post-Install Actions** + * **Severity**: `should-fix` + * **Details**: `gnome.post_install` is commented out. On direct system installs (e.g., Linux distro packaging), the desktop icon database, GLib schemas, and mime databases will not update immediately, requiring manual system restarts or command execution to display app icons. + * **Recommended Fix**: Uncomment `gnome.post_install` and guard it so it only executes when not building for sandboxed targets (like Flatpak). + +--- + +## 2. Entry Points + +### Description of Existing Setup +There are two main entry points in GGate: +- **`run.py` (Development Mode)**: + - Initializes PyGObject requirements (`Gtk 4.0`, `PangoCairo 1.0`, `Adw 1`). + - Loads the compiled resource bundle `./dev-resources.gresource` directly from the current working directory. + - Registers the resource model with `resource._register()`. + - Instantiates and runs `GLogicApplication`. +- **`bin/ggate.in` (Installed Mode)**: + - Shebang is interpolated to point to the build environment's Python path. + - Receives package datadir `@pkgdatadir@` via Meson template compilation. + - Attempts to load resources from `os.path.join(pkgdatadir, "ggate-resources.gresource")` and register them. + - Instantiates and runs `GLogicApplication`. + +### Issues, Inconsistencies & Risks +* **Issue 2.1: Missing Imports in Installed Executable (Crash on Launch)** + * **Severity**: `blocker` + * **Details**: `bin/ggate.in` references `Gio.Resource` and `os.path.join` but fails to import the `Gio` repository or the standard `os` library. It only imports `gi` and `sys`. + * **Recommended Fix**: Add `import os` and `from gi.repository import Gio` to `bin/ggate.in`. +* **Issue 2.2: Inconsistent CLI `--version` Output** + * **Severity**: `nice-to-have` + * **Details**: `run.py` prints `GGate {__version__}` (no prefix letter), whereas `bin/ggate.in` prints `GGate: v{__version__}`. + * **Recommended Fix**: Standardize the console formatting across both launcher files. + +--- + +## 3. Resources & GResource Bundling + +### Description of Existing Setup +- **`data/images/dev-resources.xml`**: Checked into git. Hardcodes the prefix `/org/astralco/GGate/Dev/data/icons/scalable/actions/`. +- **`data/images/resources.xml.in`**: Configured by Meson. Prefix template is `@PREFIX@/data/icons/scalable/actions/` (resolving to `/org/astralco/GGate/data/icons/scalable/actions/` in release). +- Both resource structures package: + - Component SVGs (e.g. `components/7seg.svg`) + - Action SVGs (e.g. `actions/flip-horizontal.svg`) + +### Issues, Inconsistencies & Risks +* **Issue 3.1: Non-standard Path Hierarchy Breaking Icon-Theme Discovery** + * **Severity**: `should-fix` + * **Details**: Modern GTK4 apps rely on `Gtk.IconTheme` to automatically discover assets compiled into application GResource bundles under the standard Freedesktop structure: `/org/astralco/GGate/icons/hicolor/[size]/[context]/[name].[ext]`. + GGate's resource structure breaks this in multiple ways: + 1. It introduces a redundant `data/` subdirectory (yielding `/data/icons/` instead of `/icons/`). + 2. It completely omits the theme directory (e.g. `hicolor`). + 3. It causes double-directory naming for action items (`.../scalable/actions/actions/flip-horizontal.svg`). + 4. It misfiles components under the action prefix path (`.../scalable/actions/components/7seg.svg`). + Because of this layout, GTK's automatic icon theme lookup fails. The application is forced to resolve absolute file system paths or use custom workarounds to load images. + * **Recommended Fix**: Redesign the GResource structure. Use standard Freedesktop folder hierarchies in the XML file (e.g. `@PREFIX@/icons/hicolor/scalable/actions/` and `@PREFIX@/icons/hicolor/scalable/devices/`) and use GResource `alias` attributes to strip directory prefixes from resource IDs (e.g., mapping `actions/rotate-left.svg` to the resource name `rotate-left.svg` under the actions prefix). + +--- + +## 4. Configurations & Versioning + +### Description of Existing Setup +- **`ggate/config.py`**: A static Python file. It defines the application version (`VERSION = "4.0.0"`), base application ID prefix (`APP_PREFIX = "org.astralco.GGate"`), and runtime directory path (`DATADIR = '/'.join(__file__.split("/")[:-1]) + '/'`). +- **`ggate/__init__.py`**: Hardcodes the package variable `__version__ = '4.0.0'`. +- **`GLogicApplication`**: Instantiated with `application_id="org.astralco.ggate"`. + +### Issues, Inconsistencies & Risks +* **Issue 4.1: Out-of-sync Static Versions** + * **Severity**: `should-fix` + * **Details**: Versioning is hardcoded statically in `config.py` and `__init__.py` as `4.0.0`, while `meson.build` and `pyproject.toml` specify `5.0.0`. This discrepancy can break compatibility validation (`config.is_compatible`) and report inaccurate versions in package managers. + * **Recommended Fix**: Make `config.py` a generated configuration file (e.g., `config.py.in` compiled by Meson's `configure_file`) to dynamically ingest version numbers from `meson.build` at compile time. +* **Issue 4.2: Application ID Casing Inconsistency** + * **Severity**: `should-fix` + * **Details**: + - The D-Bus ID and desktop filename expect `org.astralco.GGate` (CamelCase). + - `GLogicApplication` initializes using the lowercase `org.astralco.ggate`. + - Meson builds with `org.astralco.GGate` (or `org.astralco.GGate.Dev`). + This mismatch breaks window management integration under Wayland (the compositor cannot match the window class to the desktop file, resulting in default fallback window icons) and prevents `Gtk.IconTheme` from automatically mapping resource paths. + * **Recommended Fix**: Standardize on `org.astralco.GGate` (and `org.astralco.GGate.Dev` for dev profiles) across the GLogicApplication codebase and resource path naming. + +--- + +## 5. `pyproject.toml` Build Configurations + +### Description of Existing Setup +- Uses `meson-python` (backend `mesonpy`) for PEP-517 compliance. +- Defines package dependencies: `pycairo`, `pygobject`, `packaging`, `python-igraph`, `shapely`, and `meson-python`. +- Target python environment requires `>= 3.10, < 4.0`. + +### Issues, Inconsistencies & Risks +* **Issue 5.1: Rigid `shapely` Dependency Version Pin** + * **Severity**: `should-fix` + * **Details**: In `pyproject.toml`, `shapely` is pinned exactly to `==2.1.1`. Strict equal pins in Python packages can cause install dependency conflicts on newer distributions or in setups that require slightly different micro-versions of shapely. + * **Recommended Fix**: Relax the constraint to a compatible range, such as `shapely (>=2.1.1, <3.0.0)`. +* **Issue 5.2: Redundant Runtime Dependency** + * **Severity**: `nice-to-have` + * **Details**: `meson-python` is listed as a runtime dependency (`dependencies`) in addition to being a build-system requirement. It is not needed at runtime. + * **Recommended Fix**: Remove `meson-python` from the runtime `dependencies` array. + +--- + +## 6. Distribution Configurations + +### Description of Existing Setup +- **Flatpak (`build-aux/flatpak/org.astralco.GGate.json`)**: + - Targets GNOME 47 runtime environments. + - Builds in two modules: standard `python-modules` (via pip) and the root `ggate` repository (via Meson). +- **Snapcraft (`build-aux/snapcraft/snapcraft.yaml`)**: + - Uses `core22` base snap. + - Installs requirements using Poetry inside an `override-build` script, followed by the Meson build stage. + +### Issues, Inconsistencies & Risks +* **Issue 6.1: Desktop File and Flatpak App ID Mismatch** + * **Severity**: `should-fix` + * **Details**: The Flatpak manifest expects the application ID `org.astralco.GGate`. It compiles the repo but the desktop launcher in `data/` is named `org.astralco.ggate.desktop` (lowercase). This name conflict will prevent Flatpak exports from displaying the desktop file on the host machine. + * **Recommended Fix**: Rename `data/org.astralco.ggate.desktop` to `org.astralco.GGate.desktop`. +* **Issue 6.2: Unsandboxed Pip Network Usage in Flatpak** + * **Severity**: `should-fix` + * **Details**: The flatpak manifest uses `--share=network` and `pip install` to install python dependencies. Flathub builds must run fully offline for security and reproducibility. + * **Recommended Fix**: Use `flatpak-pip-generator` to create a static list of verified source mirrors with SHA hashes for python dependencies. +* **Issue 6.3: Unsafe/Brittle Poetry Installer in Snapcraft** + * **Severity**: `should-fix` + * **Details**: The snapcraft recipe retrieves Poetry via `curl` from a remote location and pipes it to python (`curl -sSL https://install.python-poetry.org | python3 -`). This is insecure and fragile, and it can easily fail if internet access is interrupted or remote domains modify the payload. + * **Recommended Fix**: Install python dependencies via the native Snapcraft python plugins or pip packages. +* **Issue 6.4: Non-Relocatable Prefix in Snapcraft** + * **Severity**: `should-fix` + * **Details**: Snapcraft passes `--prefix=/snap/ggate/current/usr` as a Meson parameter. Snaps should be built with relative/relocatable paths, as hardcoding the current snap mount point path can cause layout issues if a system runs alternative channels. + * **Recommended Fix**: Let Snapcraft handle the target prefix path automatically without passing a static meson-parameter. + +--- + +## 7. `DATADIR` and Runtime Asset-Path Handling + +### Description of Existing Setup +- **`ggate/config.py`**: Resolves `DATADIR` relative to the current module file `ggate/config.py` (which points inside the `ggate/` directory). +- **`ggate/ComponentView.py`**: Attempts to locate gate assets by joining `config.DATADIR` with `"images", "components"`. +- **`ggate/MainFrame.py`**: Adds `config.DATADIR + "/images"` to the GTK Icon Theme search paths. +- **`ggate/MenuPopover.py`**: Resolves `_PROJECT_ROOT` based on module layout and builds hardcoded paths targeting `data/images/actions/*.svg`. + +### Issues, Inconsistencies & Risks +* **Issue 7.1: Broken Development and Installed Icon Paths** + * **Severity**: `blocker` + * **Details**: + 1. **Development**: `config.DATADIR` resolves to the `ggate/` folder. Since the folder `ggate/images/` does not exist in the source repository (all source images are in `data/images`), search paths resolved by `ComponentView` and `MainFrame` point to non-existent locations, failing to load icons. + 2. **Installed**: `config.DATADIR` resolves to python's site-packages path (e.g. `/usr/lib/python3/dist-packages/ggate/`). The actual assets are installed to the system prefix (e.g., `/usr/share/ggate/icons/components`), meaning the application will look in `/usr/lib/.../ggate/images/` and fail to load icons. + 3. **MenuPopover**: The context menu icon path `_PROJECT_ROOT/data/images/actions/` works in dev because `_PROJECT_ROOT` resolves to the workspace directory. When installed, `_PROJECT_ROOT` becomes `/usr/lib/python3/dist-packages/`, causing context menu icon resolution to fail. + * **Recommended Fix**: This is the single biggest risk to GGate's deployment: + - Eliminate the direct file path lookup workarounds (`_get_icon_path` and `config.DATADIR` hacks). + - Align GResource folder layouts with standard Freedesktop icon theme conventions (see Issue 3.1). + - Initialize resources at startup and load all assets strictly by name (`Gtk.Image.new_from_icon_name`) or via resource URLs (`resource:///...`), allowing GTK to handle resolution. + +--- + +## Prioritized Punch-List + +This punch-list is ordered by severity and structural impact to ensure the application builds, packages, and runs correctly both in local development and installed environments. + +1. **[BLOCKER] Fix missing imports in `bin/ggate.in`** (Issue 2.1). Add `import os` and `from gi.repository import Gio`. +2. **[BLOCKER] Resolve runtime asset path failures** (Issue 7.1). Eliminate direct filesystem path lookups in `ComponentView.py` and `MenuPopover.py`. +3. **[SHOULD-FIX] Align GResource structures with Freedesktop icon theme standards** (Issue 3.1). Re-file resources under `@PREFIX@/icons/hicolor/scalable/` and use resource aliases. +4. **[SHOULD-FIX] Standardize Application ID casing** (Issue 4.2). Rename hardcoded instances of `org.astralco.ggate` to `org.astralco.GGate` (or `org.astralco.GGate.Dev`). +5. **[SHOULD-FIX] Generate `config.py` via Meson** (Issue 4.1). Replace static version and path values in `config.py` with variables configured via `configure_file`. +6. **[SHOULD-FIX] Rename Desktop File for Flatpak compliance** (Issue 6.1). Match the desktop file name to the App ID: `org.astralco.GGate.desktop`. +7. **[SHOULD-FIX] Prepare Flatpak for offline compilation** (Issue 6.2). Use `flatpak-pip-generator` to decouple dependencies from network-dependent pip execution. +8. **[SHOULD-FIX] Fix Snapcraft setup** (Issues 6.3 & 6.4). Remove remote `curl | python3` scripts and omit the hardcoded installation prefix. +9. **[SHOULD-FIX] Eliminate Unix-dependent shell call in `meson.build`** (Issue 1.1). Compute `exclude_directories` portably. +10. **[NICE-TO-HAVE] Relax dependency pins in `pyproject.toml`** (Issue 5.1). Use range restrictions instead of a rigid version pin for `shapely`. +11. **[NICE-TO-HAVE] Clean up pyproject/meson clutter** (Issues 1.2, 1.3, 2.2, 5.2). Standardize cli formatting, clean up comments, remove redundant dependency entries, and rename shadow variables. diff --git a/CLAUDE.md b/CLAUDE.md index 464a7f9..754158b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -107,6 +107,8 @@ From `.vscode/copilot-instructions.md`, as amended by PM direction: docstrings, NOT line-by-line narration. Keep it sparse. Still no `// ...existing code...` placeholder markers. - **No unused/dangling** imports or variables. **No extra** methods/types unless necessary. +- **Avoid deep nesting:** ~3 levels of nesting is the signal to extract a helper function. + Prefer small focused functions + early returns over pyramids of `if`/`for`. - **Double quotes** for strings, always. Match surrounding style; verify meticulously. - Commits: **Conventional Commits, one-line subject.** diff --git a/ggate/Animation.py b/ggate/Animation.py new file mode 100644 index 0000000..a4a046e --- /dev/null +++ b/ggate/Animation.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- + +def ease_out_cubic(t: float) -> float: + return 1.0 - (1.0 - t) ** 3 + +class Vector2DAnimation: + def __init__(self, start_pos: tuple[float, float], target_pos: tuple[float, float], duration_ms: float): + self.start_pos = list(start_pos) + self.target_pos = list(target_pos) + self.current_pos = list(start_pos) + self.duration_us = duration_ms * 1000.0 + self.elapsed_us = 0.0 + self.completed = False + + def update(self, delta_us: float) -> None: + self.elapsed_us += delta_us + if self.elapsed_us >= self.duration_us: + self.current_pos = list(self.target_pos) + self.completed = True + else: + t = self.elapsed_us / self.duration_us + eased_t = ease_out_cubic(t) + self.current_pos[0] = self.start_pos[0] + (self.target_pos[0] - self.start_pos[0]) * eased_t + self.current_pos[1] = self.start_pos[1] + (self.target_pos[1] - self.start_pos[1]) * eased_t + +class CanvasAnimationController: + def __init__(self, draw_area): + self.draw_area = draw_area + self.active_animations = {} + self.tick_id = None + self.last_frame_time = 0 + + def start_offset_animation(self, item_ref, start_offset: tuple[float, float], duration_ms: float = 150.0) -> None: + actual_start = start_offset + if item_ref in self.active_animations: + actual_start = self.active_animations[item_ref].current_pos + + if actual_start[0] == 0.0 and actual_start[1] == 0.0: + if item_ref in self.active_animations: + del self.active_animations[item_ref] + return + + self.active_animations[item_ref] = Vector2DAnimation(actual_start, (0.0, 0.0), duration_ms) + + if self.tick_id is None: + self.last_frame_time = 0 + self.tick_id = self.draw_area.drawingarea.add_tick_callback(self._on_tick) + + def cancel_animation(self, item_ref) -> None: + if item_ref in self.active_animations: + del self.active_animations[item_ref] + if not self.active_animations: + self._stop_tick() + + def clear(self) -> None: + self.active_animations.clear() + self._stop_tick() + + def get_visual_offset(self, item_ref) -> tuple[float, float]: + if item_ref in self.active_animations: + pos = self.active_animations[item_ref].current_pos + return pos[0], pos[1] + return 0.0, 0.0 + + def _on_tick(self, widget, frame_clock, user_data=None) -> bool: + frame_time = frame_clock.get_frame_time() + if self.last_frame_time == 0: + self.last_frame_time = frame_time + return True + + delta_us = frame_time - self.last_frame_time + self.last_frame_time = frame_time + + completed_keys = [] + for key, anim in self.active_animations.items(): + anim.update(delta_us) + if anim.completed: + completed_keys.append(key) + + for key in completed_keys: + del self.active_animations[key] + + self.draw_area.queue_draw() + + if not self.active_animations: + self.tick_id = None + self.last_frame_time = 0 + return False + return True + + def _stop_tick(self) -> None: + if self.tick_id is not None: + self.draw_area.drawingarea.remove_tick_callback(self.tick_id) + self.tick_id = None + self.last_frame_time = 0 diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 7724655..2067254 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -1,203 +1,215 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from ggate import Preference -from gi.repository import Gtk, Gdk +from gi.repository import Gtk, Gdk, Adw, Pango from gettext import gettext as _ -class PreferencesWindow(Gtk.Dialog): +class PreferencesWindow(Adw.PreferencesDialog): def __init__(self, parent): - Gtk.Dialog.__init__( - self, title=_("Preferences"), use_header_bar=True, transient_for=parent - ) - self.set_resizable(False) - self.set_modal(True) - self.set_destroy_with_parent(True) - - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - - pref = Gtk.Box(spacing=5) - - font_label = Gtk.Label(label=_("Font:")) - font_label.set_margin_start(5) - pref.append(font_label) - - # todo: fix font picker - self.drawing_font_btn = Gtk.FontDialogButton() - self.drawing_font_btn.set_halign(Gtk.Align.END) - pref.append(self.drawing_font_btn) - vbox.append(pref) - - table = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - table.set_margin_top(5) - table.set_margin_bottom(5) - - prefset = { - "net colors: ": [ - ("net_color", _("Net:")), - ("net_high_color", _("Net (highlighted):")), - ("net_color_running", _("Net (running):")), - ("highlevel_color", _("Net (high level):")), - ("lowlevel_color", _("Net (low level):")), - ], - "component colors": [ - ("component_color", _("Component:")), - ("component_high_color", _("Component (highlighted):")), - ("component_color_running", _("Component (running):")), - ("picked_color", _("Component (picked):")), - ("preadd_color", _("Component (pre added):")), - ("selected_color", _("Component (selected):")), - ], - "terminals color": [ - ("terminal_color", _("Terminal:")), - ("terminal_color_running", _("Terminal (running):")), - ("cursor_color", _("Cursor:")), - ("bg_color", _("Background:")), - ("bg_color_running", _("Background (running):")), - ("grid_color", _("Grid:")), - ], - } - + super().__init__() + self.main_frame = parent self.color_buttons = {} - for key in prefset.keys(): - frame = Gtk.Frame() - - listBox = Gtk.ListBox() - listBox.set_selection_mode(Gtk.SelectionMode.NONE) - listBox.add_css_class("rich-list") - listBox.add_css_class("view") - - section_row = Gtk.ListBoxRow() - section_row.set_activatable(False) - - _label = Gtk.Label() - _label.set_markup(f"{key.capitalize()}") - - _box = Gtk.Box() - _box.append(_label) - _box.set_size_request(-1, 35) - - section_row.set_selectable(False) - - section_row.set_child(_box) - listBox.append(section_row) - - for prefpair in prefset[key]: - caption_label = Gtk.Label() - caption = Gtk.Box() - - caption_label.set_text(prefpair[1]) - caption.set_size_request(180, -1) - caption.set_halign(Gtk.Align.START) - caption.set_hexpand(True) - - caption.append(caption_label) - caption.set_margin_start(7) + self._build_ui() + self._populate_values() + self._connect_signals() - color_button = Gtk.ColorButton() - self.color_buttons[prefpair[0]] = color_button + def _build_ui(self): + self.add(self._build_appearance_page()) + self.add(self._build_simulation_page()) + self.add(self._build_canvas_page()) - box = Gtk.Box() - box.append(caption) - box.append(color_button) + def _build_appearance_page(self): + page = Adw.PreferencesPage() + page.set_title(_("Appearance")) + page.set_icon_name("preferences-desktop-wallpaper-symbolic") - row = Gtk.ListBoxRow() - row.set_activatable(False) - row.set_child(box) + group_style = Adw.PreferencesGroup() + group_style.set_title(_("Typography & Style")) - listBox.append(row) + font_row = Adw.ActionRow() + font_row.set_title(_("Font")) - table.append(frame) - frame.set_child(listBox) - frame.set_margin_start(2) - frame.set_margin_end(2) + font_dialog = Gtk.FontDialog() + monospace_filter = Gtk.CustomFilter.new(self._monospace_filter_func) + font_dialog.set_filter(monospace_filter) - vbox.append(table) - table.set_vexpand(True) - table.set_hexpand(True) - - pref = Gtk.Box(spacing=5) - pref.append(Gtk.Label(label=_("Symbol type:"))) - self.symbol_type_combo = Gtk.ComboBoxText() - self.symbol_type_combo.set_entry_text_column(0) - self.symbol_type_combo.append_text(_("MIL/ANSI")) - self.symbol_type_combo.append_text(_("IEC")) - pref.append(self.symbol_type_combo) - - # vbox.append(pref) - # pref.set_vexpand(True) - # pref.set_hexpand(True) - - # pref = Gtk.Box(spacing=5) - - pref.append(Gtk.Label(label=_("Max calc iters:"))) - self.calc_iter_spin = Gtk.SpinButton() - self.calc_iter_spin.set_hexpand(True) - self.calc_iter_spin.set_increments(1, 10) - self.calc_iter_spin.set_range(10, 1000000) - pref.append(self.calc_iter_spin) - pref.append(Gtk.Label(label=_("Max calc duration [µs]:"))) - self.calc_duration_spin = Gtk.SpinButton() - self.calc_duration_spin.set_increments(1, 10) - self.calc_duration_spin.set_range(0, 100000) - self.calc_duration_spin.set_digits(3) - pref.append(self.calc_duration_spin) - - vbox.append(pref) - - pref2 = Gtk.Box(spacing=5) - pref2.set_margin_top(5) - pref2.append(Gtk.Label(label=_("Auto-center content on resize:"))) - self.autocenter_resize_switch = Gtk.Switch() - pref2.append(self.autocenter_resize_switch) - vbox.append(pref2) - - vbox.set_margin_start(10) - vbox.set_margin_top(10) - vbox.set_margin_bottom(10) - vbox.set_margin_end(10) - - pref.set_vexpand(True) - pref.set_hexpand(True) - - box = self.get_content_area() - box.append(vbox) - - box.show() - - self.add_button("Cancel", Gtk.ResponseType.CANCEL) - apply_button = self.add_button("Apply", Gtk.ResponseType.APPLY) - apply_button.add_css_class("suggested-action") - - def update_dialog(self): + self.drawing_font_btn = Gtk.FontDialogButton.new(font_dialog) self.drawing_font_btn.set_use_font(True) + self.drawing_font_btn.set_use_size(True) + self.drawing_font_btn.set_halign(Gtk.Align.END) + self.drawing_font_btn.set_valign(Gtk.Align.CENTER) + font_row.add_suffix(self.drawing_font_btn) + group_style.add(font_row) + + self.symbol_type_row = Adw.ComboRow() + self.symbol_type_row.set_title(_("Symbol style")) + self.symbol_type_row.set_model(Gtk.StringList.new([_("MIL/ANSI"), _("IEC")])) + group_style.add(self.symbol_type_row) + + page.add(group_style) + + group_canvas = Adw.PreferencesGroup() + group_canvas.set_title(_("Canvas Colors")) + group_canvas.add(self._create_color_row(_("Background (edit mode):"), "bg_color")) + group_canvas.add(self._create_color_row(_("Background (running):"), "bg_color_running")) + group_canvas.add(self._create_color_row(_("Grid:"), "grid_color")) + group_canvas.add(self._create_color_row(_("Cursor:"), "cursor_color")) + page.add(group_canvas) + + group_comp = Adw.PreferencesGroup() + group_comp.set_title(_("Component Colors")) + group_comp.add(self._create_color_row(_("Component (default):"), "component_color")) + group_comp.add(self._create_color_row(_("Component (highlighted):"), "component_high_color")) + group_comp.add(self._create_color_row(_("Component (running):"), "component_color_running")) + group_comp.add(self._create_color_row(_("Component (picked):"), "picked_color")) + group_comp.add(self._create_color_row(_("Component (pre-added):"), "preadd_color")) + group_comp.add(self._create_color_row(_("Component (selected):"), "selected_color")) + page.add(group_comp) + + group_net = Adw.PreferencesGroup() + group_net.set_title(_("Net Colors")) + group_net.add(self._create_color_row(_("Net (default):"), "net_color")) + group_net.add(self._create_color_row(_("Net (highlighted):"), "net_high_color")) + group_net.add(self._create_color_row(_("Net (running):"), "net_color_running")) + group_net.add(self._create_color_row(_("Net (high level):"), "highlevel_color")) + group_net.add(self._create_color_row(_("Net (low level):"), "lowlevel_color")) + page.add(group_net) + + group_term = Adw.PreferencesGroup() + group_term.set_title(_("Terminals")) + group_term.add(self._create_color_row(_("Terminal (edit):"), "terminal_color")) + group_term.add(self._create_color_row(_("Terminal (running):"), "terminal_color_running")) + page.add(group_term) + + return page + + def _build_simulation_page(self): + page = Adw.PreferencesPage() + page.set_title(_("Simulation")) + page.set_icon_name("media-playback-start-symbolic") + + group = Adw.PreferencesGroup() + group.set_title(_("Performance & Constraints")) + + self.calc_iter_row = Adw.SpinRow() + self.calc_iter_row.set_title(_("Max calculation iterations")) + group.add(self.calc_iter_row) + + self.calc_duration_row = Adw.SpinRow() + self.calc_duration_row.set_title(_("Max calculation duration (µs)")) + group.add(self.calc_duration_row) + + page.add(group) + return page + + def _build_canvas_page(self): + page = Adw.PreferencesPage() + page.set_title(_("Canvas")) + page.set_icon_name("input-mouse-symbolic") + + group = Adw.PreferencesGroup() + group.set_title(_("Layout & Grid")) + + self.autocenter_row = Adw.SwitchRow() + self.autocenter_row.set_title(_("Auto-center content on resize")) + group.add(self.autocenter_row) + + page.add(group) + return page + + def _create_color_row(self, title, key): + row = Adw.ActionRow() + row.set_title(title) + + color_dialog = Gtk.ColorDialog() + btn = Gtk.ColorDialogButton.new(color_dialog) + btn.set_halign(Gtk.Align.END) + btn.set_valign(Gtk.Align.CENTER) + + self.color_buttons[key] = btn + row.add_suffix(btn) + return row + + def _monospace_filter_func(self, item, user_data=None): + if isinstance(item, Pango.FontFace): + family = item.get_family() + elif isinstance(item, Pango.FontFamily): + family = item + else: + return False + return family.is_monospace() + + def _populate_values(self): self.drawing_font_btn.set_font_desc(Preference.drawing_font) - - for key in self.color_buttons: - rgba = Preference.__getattr__(key).get_rgba() - color = Gdk.RGBA() - color.red = round(rgba[0], 2) - color.green = round(rgba[1], 2) - color.blue = round(rgba[2], 2) - color.alpha = 1.0 - - self.color_buttons[key].set_rgba(color) - - self.symbol_type_combo.set_active(Preference.symbol_type) - self.calc_iter_spin.set_value(Preference.max_calc_iters) - self.calc_duration_spin.set_value(Preference.max_calc_duration * 1000000) - self.autocenter_resize_switch.set_active(bool(Preference.autocenter_resize)) - - def apply_settings(self): - Preference.drawing_font = self.drawing_font_btn.get_font_desc() - - for key in self.color_buttons: - color = self.color_buttons[key].get_rgba() - Preference.__setattr__( - key, "%f,%f,%f" % (color.red, color.green, color.blue) - ) - - Preference.symbol_type = self.symbol_type_combo.get_active() - Preference.max_calc_iters = self.calc_iter_spin.get_value() - Preference.max_calc_duration = self.calc_duration_spin.get_value() * 0.000001 - Preference.autocenter_resize = int(self.autocenter_resize_switch.get_active()) + self.symbol_type_row.set_selected(Preference.symbol_type) + + for key, btn in self.color_buttons.items(): + pattern = Preference.__getattr__(key) + r, g, b, _ = pattern.get_rgba() + rgba = Gdk.RGBA() + rgba.red = r + rgba.green = g + rgba.blue = b + rgba.alpha = 1.0 + btn.set_rgba(rgba) + + adj_iter = Gtk.Adjustment.new(float(Preference.max_calc_iters), 10.0, 1000000.0, 1.0, 10.0, 0.0) + self.calc_iter_row.set_adjustment(adj_iter) + self.calc_iter_row.set_digits(0) + + adj_dur = Gtk.Adjustment.new(Preference.max_calc_duration * 1000000.0, 0.0, 100000.0, 1.0, 10.0, 0.0) + self.calc_duration_row.set_adjustment(adj_dur) + self.calc_duration_row.set_digits(3) + + self.autocenter_row.set_active(bool(Preference.autocenter_resize)) + + def _connect_signals(self): + self.drawing_font_btn.connect("notify::font-desc", self._on_font_changed) + self.symbol_type_row.connect("notify::selected", self._on_symbol_type_changed) + + for key, btn in self.color_buttons.items(): + btn.connect("notify::rgba", self._on_color_changed, key) + + self.calc_iter_row.connect("notify::value", self._on_calc_iters_changed) + self.calc_duration_row.connect("notify::value", self._on_calc_duration_changed) + self.autocenter_row.connect("notify::active", self._on_autocenter_changed) + + def _on_font_changed(self, button, pspec): + font_desc = button.get_font_desc() + if font_desc: + Preference.drawing_font = font_desc.to_string() + Preference.save_settings() + self._trigger_canvas_redraw() + + def _on_symbol_type_changed(self, row, pspec): + Preference.symbol_type = row.get_selected() + Preference.save_settings() + self._trigger_canvas_redraw() + + def _on_color_changed(self, button, pspec, key): + rgba = button.get_rgba() + if rgba: + Preference.__setattr__(key, f"{rgba.red},{rgba.green},{rgba.blue}") + Preference.save_settings() + self._trigger_canvas_redraw() + + def _on_calc_iters_changed(self, row, pspec): + Preference.max_calc_iters = int(row.get_value()) + Preference.save_settings() + self._trigger_canvas_redraw() + + def _on_calc_duration_changed(self, row, pspec): + Preference.max_calc_duration = row.get_value() * 0.000001 + Preference.save_settings() + self._trigger_canvas_redraw() + + def _on_autocenter_changed(self, row, pspec): + Preference.autocenter_resize = int(row.get_active()) + Preference.save_settings() + self._trigger_canvas_redraw() + + def _trigger_canvas_redraw(self): + if self.main_frame and hasattr(self.main_frame, "drawarea"): + self.main_frame.drawarea.redraw = True + self.main_frame.drawarea.queue_draw() diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index ac9e1c0..79463de 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -15,6 +15,7 @@ from ggate.Components.LogicGates import logic_gates from ggate import Preference from gi.repository import Gtk, Gdk, Pango, PangoCairo +from ggate.Animation import CanvasAnimationController class DrawArea(Gtk.ScrolledWindow): @@ -122,6 +123,9 @@ def __init__(self, parent: MainFrame): self._last_ph = 0 self.hadj.connect("changed", self._on_adjustment_changed) self.vadj.connect("changed", self._on_adjustment_changed) + self.glide_duration_ms = 150 + self.animation_controller = CanvasAnimationController(self) + self.drag_initial_offsets = {} def _on_adjustment_changed(self, adj): pw = self.hadj.get_page_size() @@ -173,7 +177,31 @@ def menu_activated(self, widget, action_name, *args): elif action == "properties": self.set_selected_component_to_prop_window() - + + def clear_animations(self): + self.animation_controller.clear() + self.drag_initial_offsets.clear() + + def get_component_visual_offset(self, cmp) -> tuple[float, float]: + if self.parent.running_mode: + return 0.0, 0.0 + + if cmp[0] == const.component_net: + if self.component_dragged and cmp in self.circuit.selected_components: + dx = self.cursor_smooth_x - self.select_start_x - self.drag_delta_x + dy = self.cursor_smooth_y - self.select_start_y - self.drag_delta_y + return dx, dy + return 0.0, 0.0 + + comp_inst = cmp[1] + if self.component_dragged and cmp in self.circuit.selected_components: + init_x, init_y = self.drag_initial_offsets.get(comp_inst, (0.0, 0.0)) + dx = init_x + (self.cursor_smooth_x - self.select_start_x - self.drag_delta_x) + dy = init_y + (self.cursor_smooth_y - self.select_start_y - self.drag_delta_y) + return dx, dy + + return self.animation_controller.get_visual_offset(comp_inst) + def draw_net(self, net, mcr: cairo.Context): """ This method draws all states of the net. @@ -193,14 +221,18 @@ def draw_net(self, net, mcr: cairo.Context): is_hovered = net == self.nearest_component and self.cursor_over \ and self._pushed_component_name == const.component_none + offset_x, offset_y = self.get_component_visual_offset(net) + x1, y1 = net[1] + offset_x, net[2] + offset_y + x2, y2 = net[3] + offset_x, net[4] + offset_y + # Get net level if self.parent.running_mode: # Draw net terminal mcr.set_source(Preference.terminal_color_running) if (net[1], net[2]) not in self.circuit.net_no_dot: - mcr.rectangle(net[1]-1.5, net[2]-1.5, 3, 3) + mcr.rectangle(x1-1.5, y1-1.5, 3, 3) elif (net[3], net[4]) not in self.circuit.net_no_dot: - mcr.rectangle(net[3]-1.5, net[4]-1.5, 3, 3) + mcr.rectangle(x2-1.5, y2-1.5, 3, 3) mcr.fill() # Get the color of the net @@ -216,7 +248,7 @@ def draw_net(self, net, mcr: cairo.Context): # Draw net mcr.set_source(net_level_color) - cairo_paths(mcr, (net[1], net[2]), (net[3], net[4])) + cairo_paths(mcr, (x1, y1), (x2, y2)) mcr.stroke() else: @@ -228,13 +260,13 @@ def draw_net(self, net, mcr: cairo.Context): mcr.set_source(Preference.net_high_color) # Draw net - cairo_paths(mcr, (net[1], net[2]), (net[3], net[4])) + cairo_paths(mcr, (x1, y1), (x2, y2)) mcr.stroke() # Draw net terminal mcr.set_source(Preference.terminal_color) - mcr.rectangle(net[1]-1.5, net[2]-1.5, 3, 3) - mcr.rectangle(net[3]-1.5, net[4]-1.5, 3, 3) + mcr.rectangle(x1-1.5, y1-1.5, 3, 3) + mcr.rectangle(x2-1.5, y2-1.5, 3, 3) mcr.fill() @@ -258,14 +290,16 @@ def draw_component(self, cmp, mcr: cairo.Context, layout: Pango.Layout): else: mcr.set_source(Preference.terminal_color) + offset_x, offset_y = self.get_component_visual_offset(cmp) + # Draw component terminal if not self.parent.running_mode: for p in cmp[1].rot_input_pins + cmp[1].rot_output_pins: - mcr.rectangle(cmp[1].pos_x+p[0]-1.5, cmp[1].pos_y+p[1]-1.5, 3, 3) + mcr.rectangle(cmp[1].pos_x + offset_x + p[0] - 1.5, cmp[1].pos_y + offset_y + p[1] - 1.5, 3, 3) mcr.fill() # Draw component - mcr.translate(cmp[1].pos_x, cmp[1].pos_y) + mcr.translate(cmp[1].pos_x + offset_x, cmp[1].pos_y + offset_y) cmp_matrix = create_component_matrix(cmp) mcr.set_matrix(cmp_matrix.multiply(mcr.get_matrix())) @@ -666,7 +700,8 @@ def on_motion(self, *args): self.redraw = True self.component_dragged = True - self.queue_draw() + + self.queue_draw() else: if self.rect_select_enabled: @@ -733,6 +768,13 @@ def on_button_press_primary(self, *args): if self.drag_enabled: self.comps_rect = get_components_rect(self.circuit.selected_components) + self.drag_initial_offsets = {} + for c in self.circuit.selected_components: + if c[0] != const.component_net: + comp_inst = c[1] + init_offset = self.animation_controller.get_visual_offset(comp_inst) + self.drag_initial_offsets[comp_inst] = init_offset + self.animation_controller.cancel_animation(comp_inst) else: self.preadd = True @@ -780,6 +822,15 @@ def on_button_release_primary(self, *args): self.drag_enabled = False if self.component_dragged: self.component_dragged = False + for c in self.circuit.selected_components: + if c[0] != const.component_net: + comp_inst = c[1] + init_x, init_y = self.drag_initial_offsets.get(comp_inst, (0.0, 0.0)) + dx = init_x + (self.cursor_smooth_x - self.select_start_x - self.drag_delta_x) + dy = init_y + (self.cursor_smooth_y - self.select_start_y - self.drag_delta_y) + self.animation_controller.start_offset_animation(comp_inst, (dx, dy), self.glide_duration_ms) + self.drag_initial_offsets.clear() + tmp_components = self.circuit.components[:] for c in tmp_components: if c[0] == const.component_net: diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index dfae9c6..2810318 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -40,6 +40,31 @@ } } +WINDOW_WIDTH_PERCENT = 0.65 +WINDOW_HEIGHT_PERCENT = 0.60 +DEFAULT_WINDOW_WIDTH = 640 +DEFAULT_WINDOW_HEIGHT = 400 + + +def compute_default_window_size(): + display = Gdk.Display.get_default() + if not display: + return DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT + + monitors = display.get_monitors() + if not monitors or len(monitors) == 0: + return DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT + + monitor = monitors.get_item(0) + if not monitor: + return DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT + + geometry = monitor.get_geometry() + width = int(geometry.width * WINDOW_WIDTH_PERCENT) + height = int(geometry.height * WINDOW_HEIGHT_PERCENT) + return width, height + + class ShortCutWindow: def __init__(self, parent): shortcut_builder = Gtk.Builder.new_from_string(UserInterfaces.shortcut_ui, -1) @@ -82,7 +107,6 @@ def __init__(self, *args, **kwargs): self.prop_window.connect("property-changed", self.on_property_changed) # Other Windows - self.pref_window = PreferencesWindow(self) self.timing_diagram = TimingGraphDisplayWindow(self) self.clipboard = self.get_clipboard() @@ -214,7 +238,7 @@ def set_up_action_bar(self, *args): self.action_net.set_active(False) def create_window(self): - self.set_default_size(640, 400) + self.set_default_size(*compute_default_window_size()) paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) @@ -322,6 +346,7 @@ def create_new_buffer(self, *args): self.set_title("%s - %s" % (const.text_notitle, const.app_name)) self.reset_frame() self.circuit.reset_circuit() + self.drawarea.clear_animations() self.drawarea.center_viewport() self.drawarea.nearest_component = None self.drawarea.redraw = True @@ -373,6 +398,7 @@ def open_file_complete(self, path): return self.reset_frame() + self.drawarea.clear_animations() self.drawarea.center_viewport() self.drawarea.redraw = True self.drawarea.queue_draw() @@ -429,6 +455,7 @@ def on_circuit_run(self, *args): self.drawarea.component_dragged = False self.drawarea.drag_enabled = False self.drawarea.rect_select_enabled = False + self.drawarea.clear_animations() self.circuit.analyze_net_connections() self.circuit.initialize_logic() @@ -443,6 +470,7 @@ def on_circuit_stop(self, *args): self.comp_window.set_all_sensitive(True) self.action_net.set_sensitive(True) + self.drawarea.clear_animations() self.drawarea.redraw = True self.drawarea.queue_draw() @@ -507,6 +535,7 @@ def on_action_undo_pressed(self, *widget): return self.circuit.undo() + self.drawarea.clear_animations() self.disable_edit_actions() self.drawarea.redraw = True self.drawarea.queue_draw() @@ -516,12 +545,14 @@ def on_action_redo_pressed(self, *widget): return self.circuit.redo() + self.drawarea.clear_animations() self.disable_edit_actions() self.drawarea.redraw = True self.drawarea.queue_draw() def on_action_delete_pressed(self, *args): self.circuit.remove_selected_component() + self.drawarea.clear_animations() self.drawarea.nearest_component = None self.drawarea.preselected_component = None self.circuit.push_history() @@ -530,6 +561,7 @@ def on_action_delete_pressed(self, *args): self.drawarea.queue_draw() def on_action_rotate_left_90(self, *widget): + self.drawarea.clear_animations() if logic_gates[self.drawarea.get_component()] is None: self.circuit.rotate_left_selected_components() self.circuit.push_history() @@ -539,6 +571,7 @@ def on_action_rotate_left_90(self, *widget): self.drawarea.queue_draw() def on_action_rotate_right_90(self, *widget): + self.drawarea.clear_animations() if logic_gates[self.drawarea.get_component()] is None: self.circuit.rotate_right_selected_components() self.circuit.push_history() @@ -548,6 +581,7 @@ def on_action_rotate_right_90(self, *widget): self.drawarea.queue_draw() def on_action_flip_horizontally(self, *widget): + self.drawarea.clear_animations() if logic_gates[self.drawarea.get_component()] is None: self.circuit.flip_hori_selected_components() self.circuit.push_history() @@ -557,6 +591,7 @@ def on_action_flip_horizontally(self, *widget): self.drawarea.queue_draw() def on_action_flip_vertically(self, *widget): + self.drawarea.clear_animations() if logic_gates[self.drawarea.get_component()] is None: self.circuit.flip_vert_selected_components() self.circuit.push_history() @@ -583,20 +618,9 @@ def on_action_diagram_pressed(self, *widget): def on_action_save_image(self, *args): save_schematics_as_image(self.circuit, self.running_mode, self) - def _prefs_changed(self, dialog, response, *args): - if response == Gtk.ResponseType.APPLY: - self.pref_window.apply_settings() - - Preference.save_settings() - self.drawarea.redraw = True - self.drawarea.queue_draw() - self.pref_window = PreferencesWindow(self) - dialog.close() - def on_action_prefs_pressed(self, *widget): - self.pref_window.connect("response", self._prefs_changed) - self.pref_window.update_dialog() - self.pref_window.present() + pref_dialog = PreferencesWindow(self) + pref_dialog.present(self) def on_comp_checked(self, widget, comp_name): if logic_gates[comp_name]: From 1d392de8717f18d103943b09010b57d26212b9a6 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 02:51:19 +0100 Subject: [PATCH 12/37] build: fix launcher imports, version, app-id casing, meson portability Add missing os/Gio imports to bin/ggate.in (installed launcher blocker). Bump config.py/__init__.py version 4.0.0 -> 5.0.0 to match pyproject/meson. Use config.APP_PREFIX (org.astralco.GGate) for the GApplication id and rename the desktop file to match. Replace the non-portable shell __pycache__ exclusion in meson.build with portable Python. Add the icon-creation plan doc. Co-Authored-By: Gemini Co-Authored-By: Claude Opus 4.8 --- .agents/plans/icon-creation.md | 266 ++++++++++++++++++ bin/ggate.in | 6 +- ...ate.desktop => org.astralco.GGate.desktop} | 0 ggate/MainFrame.py | 2 +- ggate/__init__.py | 2 +- ggate/config.py | 2 +- meson.build | 14 +- setup.py | 4 +- 8 files changed, 286 insertions(+), 10 deletions(-) create mode 100644 .agents/plans/icon-creation.md rename data/{org.astralco.ggate.desktop => org.astralco.GGate.desktop} (100%) diff --git a/.agents/plans/icon-creation.md b/.agents/plans/icon-creation.md new file mode 100644 index 0000000..6a1678b --- /dev/null +++ b/.agents/plans/icon-creation.md @@ -0,0 +1,266 @@ +# GGate Icon Creation and Asset Management Plan + +This document outlines the strategy for clean, scalable, and standardized icon management in GGate (GTK4 + libadwaita). It addresses existing asset path issues, missing icons, and provides a programmatic workflow for generating component icons directly from the canvas rendering code. + +--- + +## 1. Executive Summary & Core Recommendation + +GGate currently suffers from a split asset-delivery model: +1. **Direct Filesystem Lookups:** The side palette ([ComponentView.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/ComponentView.py)) and context menus ([MenuPopover.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/MenuPopover.py)) resolve absolute paths relative to local directories, which breaks both inside Python virtual environments and installed system prefixes (e.g., `/usr/lib/python3/...`). +2. **Non-Standard GResource Structure:** The resource compiler config in [dev-resources.xml](file:///Users/ekureedem/Documents/Projects/GGate/data/images/dev-resources.xml) bundles icons under a non-standard hierarchy (`/data/icons/scalable/actions/`), misfiling components under actions and bypassing GTK's native `Gtk.IconTheme` matching engine. +3. **PNG/SVG Mixture & Missing Assets:** Component icons are a mix of PNGs and SVGs. Important toolbar assets (like the specific net connector drawing icon) are missing, forcing fallback placeholders. + +### Recommendation: Programmatic Cairo SVG Generation + GResource Theme Mapping +* **For Logic Gates:** Rather than manually drawing 25+ logic gate SVGs twice (for ANSI and IEC styles), we will write a dev-time script (`bin/generate-gate-icons.py`) that instantiates each gate component, evaluates its bounding box, mocks a Cairo `cairo.SVGSurface`, and invokes `drawComponent`. This ensures **100% accuracy**, zero maintenance overhead, and instant updates when canvas drawing code changes. +* **For Infrastructure:** Restructure the resource compile targets using GResource `alias` attributes to conform to the Freedesktop directory spec (`hicolor/scalable/actions` and `hicolor/scalable/devices`). Register the resource base with `Gtk.IconTheme` at startup, and switch all references to standard icon-name lookups (`Gtk.Image.new_from_icon_name`). + +--- + +## 2. Complete Icon Inventory + +### A. Logic Gate & Component Palette Icons +These represent the placeable circuit elements loaded in the side palette. Currently, they reside in `data/images/components/`. + +| Component Key | Component Name | Current State | Target Format | Generation Style / Notes | +|---|---|---|---|---| +| `definitions.component_NOT` | `not` | PNG only (`not.png`) | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_AND` | `and` | PNG & SVG | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_OR` | `or` | PNG & SVG | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_XOR` | `xor` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_NAND` | `nand` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_NOR` | `nor` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_tribuff` | `tribuff` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_SW` | `sw` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_7seg` | `7seg` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_LED` | `led` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_VDD` | `vdd` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_GND` | `gnd` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_OSC` | `osc` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_probe` | `probe` | PNG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_text` | `text` | PNG & SVG | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_RSFF` | `rsff` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_JKFF` | `jkff` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_DFF` | `dff` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_TFF` | `tff` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_counter` | `counter` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_adder` | `adder` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_SISO` | `siso` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_SIPO` | `sipo` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_PISO` | `piso` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | +| `definitions.component_PIPO` | `pipo` | SVG only | SVG (Symbolic) | Programmatic (ANSI & IEC) | + +### B. Toolbar & Action Icons +These are used for editor manipulation and toolbar commands in [MainFrame.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/MainFrame.py). + +| Icon Role | Reference Name | Source Type | Current State | Target State / Fix | +|---|---|---|---|---| +| **Rotate Left** | `rotate-left-symbolic` | Custom SVG | SVG (`actions/rotate-left.svg`) | Modernized 16x16 viewbox symbolic | +| **Rotate Right** | `rotate-right-symbolic` | Custom SVG | SVG (`actions/rotate-right.svg`) | Modernized 16x16 viewbox symbolic | +| **Flip Horizontally** | `flip-horizontal-symbolic` | Custom SVG | SVG (`actions/flip-horizontal.svg`) | Modernized 16x16 viewbox symbolic | +| **Flip Vertically** | `flip-vertical-symbolic` | Custom SVG | SVG (`actions/flip-vertical.svg`) | Modernized 16x16 viewbox symbolic | +| **Add Net** | `add-net-symbolic` | Custom SVG | **Missing** (uses fallback `list-add`) | Create custom SVG showing wire symbol | +| **Simulation Start** | `media-playback-start-symbolic` | System | Standard theme icon | Keep standard Freedesktop icon | +| **Simulation Pause** | `media-playback-pause-symbolic` | System | Standard theme icon | Keep standard Freedesktop icon | +| **Simulation Stop** | `media-playback-stop-symbolic` | System | Standard theme icon | Keep standard Freedesktop icon | +| **Open Menu** | `open-menu-symbolic` | System | Standard theme icon | Keep standard Freedesktop icon | + +### C. Application & Document Icons +Standard system integration assets. + +| Icon Role | Target Name | Size Directory | Current State | Target State | +|---|---|---|---|---| +| **App Launcher Icon** | `org.astralco.GGate.svg` | `scalable/apps` | SVG (`scalable/ggate.svg`) | Scalable SVG (high-res compliant) | +| **App Launcher Icon** | `org.astralco.GGate.png` | `apps/[size]x[size]` | PNGs (`apps/[size]/ggate.png`) | Regenerated from scalable target | +| **GGate Document Icon** | `application-x-ggate-circuit-symbolic.svg` | `scalable/mimetypes` | **Missing** (only PNGs exist) | Scalable SVG representing circuit file | +| **GGate Document Icon** | `application-x-ggate-circuit.png` | `mimetypes/[size]x[size]` | PNGs (`mime/[size]/text-glc.png`) | Rename & regenerate to match MIME spec | + +--- + +## 3. The Accuracy Approach: Programmatic Gate Icon Generation + +### Analysis: Programmatic vs. Hand-Authored SVGs + +```mermaid +graph TD + A[Icon Creation Options] --> B(Programmatic Generation) + A --> C(Hand-Authoring SVGs) + + B --> B1[PRO: 100% accurate to canvas rendering] + B --> B2[PRO: Instantly updates when component code changes] + B --> B3[PRO: Handles ANSI & IEC symbol types at zero cost] + B --> B4[CON: Needs setup to crop out port pins/labels] + + C --> C1[PRO: Complete design-grid freedom] + C --> C2[CON: High maintenance - 50 SVGs to update on redraws] + C --> C3[CON: Human error can lead to mismatched shapes] +``` + +### Recommendation +**Programmatic generation is highly recommended.** +By executing a generator script in a Python/PyGObject environment, we can dynamically compile the logic gate SVGs. Since the logic gate classes inherit from `BaseComponent` and implement `drawComponent(cr, layout)`, we can reuse their exact drawing functions. + +### Implementing Programmatic Cairo Generation +A script named `bin/generate-gate-icons.py` will follow these steps: +1. Initialize GTK and Pango (to load font mappings). +2. For each logic gate registered in `logic_gates` (from `ggate.Components.LogicGates`): + - Instantiate the component object. + - Read its bounding box: `rect = component.comp_rect` (e.g. `[10, -40, 100, 0]`). + - Calculate width and height: `w = rect[2] - rect[0]`, `h = rect[3] - rect[1]`. + - Apply **Smart Bounding-Box Cropping**: + * To draw only the core gate symbol without terminal connector lines or labels, crop the drawing box to the body itself (e.g., cropping the left x-start from 10 to 30 for AND, eliminating the inputs line). + - Generate two files per component: + * `gate-[name]-symbolic.svg` (ANSI format: `Preference.symbol_type = 0`). + * `gate-[name]-iec-symbolic.svg` (IEC format: `Preference.symbol_type = 1`). + - Create a `cairo.SVGSurface(filepath, w + padding, h + padding)`. + - Instantiate a PangoCairo layout for text labels. + - Translate coordinates by `(-rect[0] + padding_x, -rect[1] + padding_y)`. + - Set standard symbolic stroke styles (`cr.set_line_width(1.5)` and `cr.set_source_rgb(0, 0, 0)`). + - Execute `component.drawComponent(cr, layout)`. + - Call `surface.finish()` to flush the SVG vectors to disk. + +--- + +## 4. Canonical SVG Specifications + +To ensure crisp rendering and native system integration (especially light/dark mode recoloring), the generated and hand-authored SVGs must strictly adhere to the following specifications: + +### A. General Specs +* **Standard Grid (Actions):** 16x16 pixels viewbox with a 1px protective margin (active drawing area: 14x14 pixels). +* **Standard Grid (Components):** 24x24 or 32x32 pixels viewbox. +* **Stroke Alignment:** Stroke centers should align to half-pixels for 1px lines (to remain crisp on pixel grids) and whole pixels for 2px lines. + +### B. GTK Symbolic Colors +GTK4 automatically parses and recolors files ending with `-symbolic.svg`. Fills and strokes must use the standard system palette hex codes without adding local inline style blocks that override them: +* **Foreground (Standard):** `#2e3436` (GTK replaces this with the current stylesheet text color: black on light mode, white on dark mode). +* **Accent/Blue:** `#3584e4` (GTK replaces with the theme's active accent color). +* **Destructive/Red:** `#e01b24` +* **Success/Green:** `#2ec27e` +* **Warning/Yellow:** `#e5a50a` +* **Styling Rule:** All paths must use `fill="currentColor"` or standard `#2e3436` with a transparent background. Do not embed gradients, complex shadow filters, or hardcoded white background fills in symbolic files. + +--- + +## 5. Integrating with GResource and Freedesktop Layouts + +To allow loading icons strictly by name (e.g., `Gtk.Image.new_from_icon_name("gate-and-symbolic")`), we must configure GResource and Gtk's IconTheme correctly. + +### A. Resource Path Restructuring (Using Alias Mapping) +Instead of reorganizing the physical file structure in git, we will map files in [dev-resources.xml](file:///Users/ekureedem/Documents/Projects/GGate/data/images/dev-resources.xml) and [resources.xml.in](file:///Users/ekureedem/Documents/Projects/GGate/data/images/resources.xml.in) using the GResource `alias` attribute: + +```xml + + + + actions/flip-horizontal.svg + actions/flip-vertical.svg + actions/rotate-left.svg + actions/rotate-right.svg + actions/add-net.svg + + + components/and.svg + components/and-iec.svg + components/or.svg + components/or-iec.svg + + +``` + +### B. Dynamically Building Aliases in Meson +In [data/images/meson.build](file:///Users/ekureedem/Documents/Projects/GGate/data/images/meson.build), we will modify the XML generation loop so Meson generates the aliases automatically during release builds: + +```meson +# Proposed data/images/meson.build snippet +icon_files_xml = [] +foreach file: icon_files + parts = file.split('/') + category = parts[0] # 'components' or 'actions' + filename = parts[1] # e.g., 'and.svg' + base_name = filename.split('.')[0] + + # Map category to freedesktop context + context = (category == 'components') ? 'devices' : category + + # Format target symbolic name + if category == 'components' + # The generator produces both ANSI and IEC files + # E.g., components/and.svg -> gate-and-symbolic.svg + # E.g., components/and-iec.svg -> gate-and-iec-symbolic.svg + alias_name = 'gate-' + base_name + '-symbolic.svg' + else + alias_name = base_name + '-symbolic.svg' + endif + + alias_path = 'hicolor/scalable/' + context + '/' + alias_name + icon_files_xml += '' + file + '' +endforeach +``` + +### C. Application Theme Registration +In [MainFrame.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/MainFrame.py), replace the old search path hack: +```python +# DEPRECATED +themed_icons.add_search_path(config.DATADIR + "/images") +``` + +With the native GResource registration inside `do_startup()` of `GLogicApplication`: +```python +# RECOMMENDED +display = Gdk.Display.get_default() +if display: + theme = Gtk.IconTheme.get_for_display(display) + # Register the GResource path prefix where GTK will search for icons + resource_prefix = "/org/astralco/GGate/Dev/icons" if config.DEV_MODE else "/org/astralco/GGate/icons" + theme.add_resource_path(resource_prefix) +``` + +### D. Updating Code References +1. **Palette Icons ([ComponentView.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/ComponentView.py)):** + Remove direct file paths and check the user preference dynamically: + ```python + suffix = "-iec" if Preference.symbol_type == 1 else "" + icon.set_from_icon_name(f"gate-{gate}{suffix}-symbolic") + ``` +2. **Context Menus ([MenuPopover.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/MenuPopover.py)):** + Change custom XML attributes from `verb-icon` (pointing to a path) to the standard `icon` attribute: + ```xml + + + Flip Horizontally + menu.flip_hori + flip-horizontal-symbolic + + ``` + +--- + +## 6. Phased Work Plan + +### Phase 1: Resource Infrastructure Setup +1. **Meson & GResource Update:** Update [data/images/meson.build](file:///Users/ekureedem/Documents/Projects/GGate/data/images/meson.build) and [dev-resources.xml](file:///Users/ekureedem/Documents/Projects/GGate/data/images/dev-resources.xml) to map resources using the new alias layout. +2. **Theme Registration:** Update [MainFrame.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/MainFrame.py) to register the `/icons` resource path at startup and delete the legacy `add_search_path` filesystem hack. +3. **Reference Refactoring:** Update `ComponentView.py` and `MenuPopover.py` to load icons by name rather than file paths. + +### Phase 2: Programmatic Icon Generation Script +1. **Development of `bin/generate-gate-icons.py`:** Write and refine the programmatic Cairo SVG generation script. +2. **Smart Cropping Adjustment:** Run tests to define the exact cropping limits for each of the 25 components to ensure ports/wires are excluded while logic gate symbols look crisp. +3. **Generation:** Run the script to generate all 50 SVGs (25 ANSI, 25 IEC) and write them to `data/images/components/`. + +### Phase 3: Hand-Authored Assets & System Files +1. **Action Icons:** Update `flip-horizontal.svg`, `flip-vertical.svg`, `rotate-left.svg`, and `rotate-right.svg` to be 16x16 symbolic SVGs. +2. **Net Icon:** Design the missing `add-net-symbolic.svg` showing a clean vector wire segment. +3. **App & MIME Icons:** Modernize `org.astralco.GGate.svg` and `application-x-ggate-circuit-symbolic.svg`, then update Meson file installers and setup configs to deploy them to standard directories. + +### Phase 4: Verification & Testing +1. **Theme Switch Verification:** Verify that toggling between ANSI and IEC symbols updates the ComponentView icons on the fly. +2. **Light/Dark Mode Check:** Test the application in both light mode and dark mode to ensure GTK recolors all symbolic icons correctly. +3. **Distribution Verification:** Run Flatpak and Snap packaging builds to confirm that compiled `.gresource` files and desktop icon registries load without warning messages. + +--- + +## 7. Open Questions for the PM + +1. **Terminal Pins in Component Icons:** Do we want the gate icons in the sidebar to display the small terminal connection dots on the margins, or should we crop them strictly to the gate symbol body? (Cropping them out is recommended for cleaner, less cluttered icons in the sidebar list). +2. **Custom Actions vs. Standard GTK Icons:** For common operations like flip or rotate, should we use our custom logic-gate-themed flip/rotate icons (which reflect a buffer shape), or should we use standard system desktop icons like `object-flip-horizontal-symbolic`? (We recommend keeping the custom buffer-based icons as they reinforce the circuit-editing domain). +3. **Dynamic Component View Refresh:** Should the component view sidebar listen to preference changes and refresh its icons instantly when the user toggles ANSI/IEC symbol types, or is it acceptable to require an application restart for the sidebar icons to switch? (Dynamic updating is highly recommended and simple to implement by listening to setting notifications). diff --git a/bin/ggate.in b/bin/ggate.in index d46a7b5..897dab1 100755 --- a/bin/ggate.in +++ b/bin/ggate.in @@ -1,12 +1,14 @@ #!@PYTHON@ +import os import gi import sys -gi.require_version("Gtk", '4.0') -gi.require_version('PangoCairo', '1.0') +gi.require_version("Gtk", "4.0") +gi.require_version("PangoCairo", "1.0") gi.require_version("Adw", "1") +from gi.repository import Gio from ggate import __version__ from ggate.MainFrame import GLogicApplication diff --git a/data/org.astralco.ggate.desktop b/data/org.astralco.GGate.desktop similarity index 100% rename from data/org.astralco.ggate.desktop rename to data/org.astralco.GGate.desktop diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 2810318..90912e8 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -683,7 +683,7 @@ def disable_edit_actions(self): class GLogicApplication(Adw.Application): def __init__(self, *args, **kwargs): - super().__init__(*args, application_id="org.astralco.ggate", **kwargs) + super().__init__(*args, application_id=config.APP_PREFIX, **kwargs) self.window = None def action_handler(self, action): diff --git a/ggate/__init__.py b/ggate/__init__.py index dc5e3f7..d89f6e7 100644 --- a/ggate/__init__.py +++ b/ggate/__init__.py @@ -1 +1 @@ -__version__ = '4.0.0' \ No newline at end of file +__version__ = "5.0.0" \ No newline at end of file diff --git a/ggate/config.py b/ggate/config.py index 33ca4ae..ce2d8f4 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -2,7 +2,7 @@ from packaging.version import Version DATADIR = '/'.join(__file__.split("/")[:-1]) + '/' -VERSION = "4.0.0" +VERSION = "5.0.0" APP_PREFIX = "org.astralco.GGate" compatibility = { diff --git a/meson.build b/meson.build index 072709d..494f37c 100644 --- a/meson.build +++ b/meson.build @@ -41,13 +41,21 @@ conf.set('pkgdatadir', pkgdatadir) subdir('bin') subdir('data/images') -exclude_pycache_dirs = run_command( - 'sh', '-c', +exclude_pycache_dirs = [] +foreach d : run_command( + py_installation, '-c', ''' - find ggate -type d -name __pycache__ | sed "s|^ggate/||" +import os +for root, dirs, files in os.walk("ggate"): + if os.path.basename(root) == "__pycache__": + print(os.path.relpath(root, "ggate").replace("\\", "/")) ''', check: true ).stdout().strip().split('\n') + if d != '' + exclude_pycache_dirs += d + endif +endforeach # Install the entire ggate package recursively, excluding .pyc files install_subdir('ggate', diff --git a/setup.py b/setup.py index 2fe1305..cc0eedc 100644 --- a/setup.py +++ b/setup.py @@ -70,7 +70,7 @@ for sizes in icons['apps'].keys(): apps.append((f'share/icons/hicolor/{sizes}x{sizes}/apps', icons['apps'][sizes])) -os.system(f'chmod +777 {here}/data/org.astralco.ggate.desktop') +os.system(f'chmod +777 {here}/data/org.astralco.GGate.desktop') os.system(f'chmod +777 {here}/bin/ggate') setup( @@ -127,7 +127,7 @@ *help_files, *mimes, *apps, - ("share/applications", ["data/org.astralco.ggate.desktop"]), + ("share/applications", ["data/org.astralco.GGate.desktop"]), ("share/mime/packages", ["data/ggate.xml"]), ("share/icons/hicolor/scalable/apps", icons["scalable"]), ] From a078fb10337c5ec266a94aed43f66f84080e93cc Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 03:10:57 +0100 Subject: [PATCH 13/37] fix: latent migration bugs in save/export/alert/sidebar/timing paths Sweep of un-exercised paths: fix save_file_complete typo, Exporter statusbar push()->update(), ComponentView set_selectable->set_sensitive (palette disabled in sim), Gtk.MessageDialog->Adw.AlertDialog in on_circuit_alert, FileManager classmethod, and stop-gap TimingGraph rendering (slated for a full revamp). Add the theming plan and build-system backlog. Co-Authored-By: Gemini Co-Authored-By: Claude Opus 4.8 --- .agents/TODO.md | 23 ++ .agents/plans/theming.md | 331 ++++++++++++++++++ ggate/ComponentView.py | 2 +- ggate/Components/Managers/FileManager.py | 1 + .../Components/Windows/TimingGraph/Diagram.py | 15 +- .../Components/Windows/TimingGraph/Display.py | 9 +- ggate/Exporter.py | 4 +- ggate/MainFrame.py | 14 +- 8 files changed, 383 insertions(+), 16 deletions(-) create mode 100644 .agents/plans/theming.md diff --git a/.agents/TODO.md b/.agents/TODO.md index b4d2129..bcc5f93 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -113,6 +113,29 @@ App launches and is usable: - [ ] Style inconsistency: 2-space vs 4-space indent; mixed quotes; stale `indent-tabs-mode: t` headers. (Convention: double quotes, no comments.) +## Build & packaging + +Full analysis in `.agents/build-system-analysis.md`; icon work planned in +`.agents/plans/icon-creation.md`. + +- [x] **`bin/ggate.in` missing imports** (os/Gio) — fixed. +- [x] **Version mismatch** — config.py/__init__.py bumped to 5.0.0 (match pyproject/meson). +- [x] **App-id casing** — `GLogicApplication` uses `config.APP_PREFIX` (`org.astralco.GGate`); + desktop file renamed to match; setup.py refs updated. +- [x] **meson.build portability** — non-portable `sh -c find|sed` → portable Python `os.walk`. +- [ ] **[BLOCKER] Runtime asset paths** — `ComponentView`/`MenuPopover` use filesystem icon + paths (the `__file__`/`DATADIR` hacks) that break when installed. Coupled to the icon work + below — fix as part of the gresource/icon-theme migration. +- [ ] **gresource → freedesktop icon-theme layout** — see the P2 icon-asset item + the icon + plan; currently double-nested `…/scalable/actions/actions/*` and misfiled `components/*`. +- [ ] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths + — must keep the dev `run.py` path working (no meson step in dev). +- [ ] **Desktop file install via meson** — confirm meson actually installs the (renamed) + desktop file + AppStream metadata, not just legacy `setup.py`. +- [ ] **Flatpak** — decouple pip deps from network (`flatpak-pip-generator`) for offline build. +- [ ] **Snapcraft** — remove remote `curl|python3` scripts; drop hardcoded prefix. +- [ ] Nice-to-have: relax `shapely` pin; pyproject/meson cleanup. + ## P3 — feature backlog - [ ] Animate logic circuit. diff --git a/.agents/plans/theming.md b/.agents/plans/theming.md new file mode 100644 index 0000000..388c724 --- /dev/null +++ b/.agents/plans/theming.md @@ -0,0 +1,331 @@ +# GGate Theming System Design Plan + +This document outlines the architecture, data structures, UI integration, and implementation roadmap for a canvas and app-wide theming system in GGate. + +## Overview + +GGate is a GTK4 + libadwaita application with a Cairo-rendered canvas. Currently, canvas colors are loaded from a flat set of keys in [Preference.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Preference.py) and edited individually via the Appearance page in [Preferences.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/Preferences.py). + +The goal of this design is to implement a unified **Theming System** containing three preinstalled premium dark/neutral themes: +1. **Space**: A custom designed dark, deep-space aesthetic. +2. **Frappé**: The official Catppuccin Frappé palette. +3. **Mocha**: The official Catppuccin Mocha palette. + +--- + +## 1. Architecture + +The theming system separates **theme definitions** (color palettes) from the active **preference settings**. + +### Theme Representation +A theme will be represented in code as a dictionary mapping each color-based GGate Preference key to a standard hexadecimal string (e.g., `#1e1e2e` or `#cba6f733` with alpha). + +A new module [ggate/Themes.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Themes.py) will house the theme registries, containing the built-in themes and parsing helpers. + +```python +# ggate/Themes.py +from gi.repository import Gdk +import cairo + +class Theme: + def __init__(self, name: str, dark_chrome: bool, colors: dict[str, str]): + self.name = name + self.dark_chrome = dark_chrome # True to prefer dark app chrome + self.colors = colors + + def get_pattern(self, key: str) -> cairo.SolidPattern: + hex_val = self.colors.get(key) + if not hex_val: + return cairo.SolidPattern(0.0, 0.0, 0.0) + return hex_to_pattern(hex_val) +``` + +### Flow & Serialization +A new setting key `"theme"` (type `str`, defaults to `"Space"`) will be added to the preference dictionary in `Preference.py` to persist the active theme's name. + +```mermaid +sequenceDiagram + participant UI as Preferences Window + participant SM as Adw.StyleManager + participant Pref as Preference Store + participant Disk as preferences file + participant Canvas as DrawArea Canvas + + UI->>Pref: Select theme (e.g., "Mocha") + Pref->>Pref: Update all color keys in memory + Pref->>SM: Set color scheme (PREFER_DARK/PREFER_LIGHT) + Pref->>Disk: Save settings (save_settings) + UI->>UI: Update color dialog buttons live + UI->>Canvas: Trigger redraw (_trigger_canvas_redraw) + Canvas->>Pref: Read new colors + Canvas->>Canvas: Redraw Cairo components +``` + +### Resolving the Selection Box Alpha Bug +Currently, GGate's preferences file parses values with commas and discards alpha settings when loading/saving: +* `cairo.SolidPattern.get_rgba()` returns `(r, g, b, a)`. +* `Preference.py:save_settings()` writes `%s=%f,%f,%f\n`. +* `Preference.py:__setattr__()` parses only three elements, setting alpha implicitly to `1.0`. + +To support the translucent `selection_box` color without hardcoding alpha values, the serialization logic in `Preference.py` must be upgraded to support optional alpha: + +```python +# Proposed serialization fix in Preference.py +elif isinstance(self.pref_dict[key], cairo.Pattern): + rgba = self.pref_dict[key].get_rgba() + if rgba[3] < 1.0: + fp.write("%s=%f,%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2], rgba[3])) + else: + fp.write("%s=%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2])) + +# Proposed parsing fix in Preference.py +elif isinstance(self.pref_dict[name], cairo.Pattern): + try: + rgba_vals = [float(x) for x in value.split(",")] + if len(rgba_vals) == 4: + self.pref_dict[name] = cairo.SolidPattern(*rgba_vals) + else: + self.pref_dict[name] = cairo.SolidPattern(rgba_vals[0], rgba_vals[1], rgba_vals[2], 1.0) + except (ValueError, IndexError): + self.pref_dict[name] = cairo.SolidPattern(0.0, 0.0, 0.0) +``` + +### Coexistence with Manual Tweaks +GGate supports tweaking individual colors. To coexist with the preset theme dropdown: +1. When a user picks a theme (e.g., `"Mocha"`), GGate loads all colors from that theme into the preferences and sets `"theme" = "Mocha"`. +2. If the user subsequently updates any individual color via the color button picker, the value of `"theme"` is updated to `"Custom"`. +3. The dropdown in the UI changes to show `"Custom"`, indicating that a user is overriding the baseline theme. + +--- + +## 2. Full Palette Mapping + +Below are the exhaustive hex and Cairo float maps for all 23 GGate color preference keys across the three themes. + +> [!NOTE] +> Cairo float values (`r, g, b, [a]`) represent the Red, Green, Blue, and Alpha channels mapped between `0.0` and `1.0`. They are computed by dividing the 8-bit hex channel by `255.0` (rounded to 3 decimal places). + +### Theme 1: "Space" (Custom Dark Cyberpunk/Deep Void Theme) +A vibrant, neon-accented dark palette designed specifically to look premium on GGate's circuit logic canvas. + +| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | +| :--- | :--- | :--- | :--- | +| `bg_color` | Canvas Background (Edit mode) | `#07080d` | `(0.027, 0.031, 0.051)` | +| `bg_color_running` | Canvas Background (Running mode) | `#0c0e16` | `(0.047, 0.055, 0.086)` | +| `grid_color` | Grid alignment lines | `#1b1e2c` | `(0.106, 0.118, 0.173)` | +| `cursor_color` | Coordinate snap dot/cursor | `#e5e8f4` | `(0.898, 0.910, 0.957)` | +| `component_color` | Logic gates border (Edit mode) | `#3d64ff` | `(0.239, 0.392, 1.000)` | +| `component_high_color` | Hovered/Highlighted logic gate | `#00f2fe` | `(0.000, 0.949, 0.996)` | +| `component_color_running` | Component border (Running mode) | `#8992a8` | `(0.537, 0.573, 0.659)` | +| `picked_color` | Gate currently selected & moving | `#ff8000` | `(1.000, 0.502, 0.000)` | +| `preadd_color` | Ghost component before placement | `#ff007f` | `(1.000, 0.000, 0.498)` | +| `selected_color` | Border of selected components | `#39ff14` | `(0.224, 1.000, 0.078)` | +| `net_color` | Wire segments (Edit mode) | `#5b637a` | `(0.357, 0.388, 0.478)` | +| `net_high_color` | Hovered wire segment | `#00f2fe` | `(0.000, 0.949, 0.996)` | +| `net_color_running` | Indeterminate wire state (Running) | `#44495b` | `(0.267, 0.286, 0.357)` | +| `highlevel_color` | Logic state 1 (High wire) | `#39ff14` | `(0.224, 1.000, 0.078)` | +| `lowlevel_color` | Logic state 0 (Low wire) | `#3d64ff` | `(0.239, 0.392, 1.000)` | +| `terminal_color` | Pin connection terminal (Edit) | `#ff3b30` | `(1.000, 0.145, 0.118)` | +| `terminal_color_running` | Pin connection terminal (Running) | `#07080d` | `(0.027, 0.031, 0.051)` | +| `selection_box` | Multi-select fill region | `#00f2fe26` | `(0.000, 0.949, 0.996, 0.150)` | +| `selection_box_border` | Multi-select border outline | `#00f2fe` | `(0.000, 0.949, 0.996)` | +| `_red` | State LED Red | `#ff3b30` | `(1.000, 0.145, 0.118)` | +| `_green` | State LED Green | `#39ff14` | `(0.224, 1.000, 0.078)` | +| `_blue` | State LED Blue | `#007aff` | `(0.000, 0.478, 1.000)` | +| `_yellow` | State LED Yellow | `#ffcc00` | `(1.000, 0.800, 0.000)` | + +### Theme 2: "Frappé" (Catppuccin Frappé) +A dark theme utilizing the official, muted, pastel-toned colors of Catppuccin Frappé. + +| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | +| :--- | :--- | :--- | :--- | +| `bg_color` | Canvas Background (Edit mode) | `#303446` | `(0.188, 0.204, 0.275)` | +| `bg_color_running` | Canvas Background (Running mode) | `#292c3c` | `(0.161, 0.173, 0.235)` | +| `grid_color` | Grid alignment lines | `#414559` | `(0.255, 0.271, 0.349)` | +| `cursor_color` | Coordinate snap dot/cursor | `#babbf1` | `(0.729, 0.733, 0.945)` | +| `component_color` | Logic gates border (Edit mode) | `#8caaee` | `(0.549, 0.667, 0.933)` | +| `component_high_color` | Hovered/Highlighted logic gate | `#85c1dc` | `(0.522, 0.757, 0.863)` | +| `component_color_running` | Component border (Running mode) | `#c6d0f5` | `(0.776, 0.816, 0.961)` | +| `picked_color` | Gate currently selected & moving | `#ef9f76` | `(0.937, 0.624, 0.463)` | +| `preadd_color` | Ghost component before placement | `#eebebe` | `(0.933, 0.745, 0.745)` | +| `selected_color` | Border of selected components | `#ca9ee6` | `(0.792, 0.620, 0.902)` | +| `net_color` | Wire segments (Edit mode) | `#838ba7` | `(0.514, 0.545, 0.655)` | +| `net_high_color` | Hovered wire segment | `#99d1db` | `(0.600, 0.820, 0.859)` | +| `net_color_running` | Indeterminate wire state (Running) | `#737994` | `(0.451, 0.475, 0.580)` | +| `highlevel_color` | Logic state 1 (High wire) | `#a6d189` | `(0.651, 0.820, 0.537)` | +| `lowlevel_color` | Logic state 0 (Low wire) | `#8caaee` | `(0.549, 0.667, 0.933)` | +| `terminal_color` | Pin connection terminal (Edit) | `#e78284` | `(0.906, 0.510, 0.518)` | +| `terminal_color_running` | Pin connection terminal (Running) | `#232634` | `(0.137, 0.149, 0.204)` | +| `selection_box` | Multi-select fill region | `#ca9ee633` | `(0.792, 0.620, 0.902, 0.200)` | +| `selection_box_border` | Multi-select border outline | `#ca9ee6` | `(0.792, 0.620, 0.902)` | +| `_red` | State LED Red | `#e78284` | `(0.906, 0.510, 0.518)` | +| `_green` | State LED Green | `#a6d189` | `(0.651, 0.820, 0.537)` | +| `_blue` | State LED Blue | `#8caaee` | `(0.549, 0.667, 0.933)` | +| `_yellow` | State LED Yellow | `#e5c890` | `(0.898, 0.784, 0.565)` | + +### Theme 3: "Mocha" (Catppuccin Mocha) +A high-contrast deep dark theme utilizing the official colors of Catppuccin Mocha. + +| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | +| :--- | :--- | :--- | :--- | +| `bg_color` | Canvas Background (Edit mode) | `#1e1e2e` | `(0.118, 0.118, 0.180)` | +| `bg_color_running` | Canvas Background (Running mode) | `#181825` | `(0.094, 0.094, 0.145)` | +| `grid_color` | Grid alignment lines | `#313244` | `(0.192, 0.196, 0.267)` | +| `cursor_color` | Coordinate snap dot/cursor | `#b4befe` | `(0.706, 0.745, 0.996)` | +| `component_color` | Logic gates border (Edit mode) | `#89b4fa` | `(0.537, 0.706, 0.980)` | +| `component_high_color` | Hovered/Highlighted logic gate | `#74c7ec` | `(0.455, 0.780, 0.925)` | +| `component_color_running` | Component border (Running mode) | `#cdd6f4` | `(0.804, 0.839, 0.957)` | +| `picked_color` | Gate currently selected & moving | `#fab387` | `(0.980, 0.702, 0.529)` | +| `preadd_color` | Ghost component before placement | `#f2cdcd` | `(0.949, 0.804, 0.804)` | +| `selected_color` | Border of selected components | `#cba6f7` | `(0.796, 0.651, 0.969)` | +| `net_color` | Wire segments (Edit mode) | `#7f849c` | `(0.498, 0.518, 0.612)` | +| `net_high_color` | Hovered wire segment | `#89dceb` | `(0.537, 0.863, 0.922)` | +| `net_color_running` | Indeterminate wire state (Running) | `#6c7086` | `(0.424, 0.439, 0.525)` | +| `highlevel_color` | Logic state 1 (High wire) | `#a6e3a1` | `(0.651, 0.890, 0.631)` | +| `lowlevel_color` | Logic state 0 (Low wire) | `#89b4fa` | `(0.537, 0.706, 0.980)` | +| `terminal_color` | Pin connection terminal (Edit) | `#f38ba8` | `(0.953, 0.545, 0.659)` | +| `terminal_color_running` | Pin connection terminal (Running) | `#11111b` | `(0.067, 0.067, 0.106)` | +| `selection_box` | Multi-select fill region | `#cba6f733` | `(0.796, 0.651, 0.969, 0.200)` | +| `selection_box_border` | Multi-select border outline | `#cba6f7` | `(0.796, 0.651, 0.969)` | +| `_red` | State LED Red | `#f38ba8` | `(0.953, 0.545, 0.659)` | +| `_green` | State LED Green | `#a6e3a1` | `(0.651, 0.890, 0.631)` | +| `_blue` | State LED Blue | `#89b4fa` | `(0.537, 0.706, 0.980)` | +| `_yellow` | State LED Yellow | `#f9e2af` | `(0.976, 0.886, 0.686)` | + +--- + +## 3. Preferences UI Integration + +The theme picker will be integrated into the top of the **Appearance** tab of the Preferences window (`ggate/Components/Windows/Preferences.py`), above the typography and color groups. + +``` ++----------------------------------------------------+ +| Preferences | ++----------------------------------------------------+ +| Appearance Simulation Canvas | +| | +| Theme | +| Theme Style........................ [ Mocha v] | +| | +| Typography & Style | +| Font....................... [ Liberation Mono ] | +| Symbol style...................... [ MIL/ANSI ] | +| | +| Canvas Colors | +| Background (edit mode)............. [ Color ] | +| Background (running)............... [ Color ] | +| ... | ++----------------------------------------------------+ +``` + +### UI Implementation Details +1. **ComboRow Addition**: An `Adw.ComboRow` with title "Theme Style" will be added at the top. The model will be populated with `"Space"`, `"Frappé"`, `"Mocha"`, and `"Custom"`. +2. **Signal Hook**: The ComboRow's `"notify::selected"` property is connected to `_on_theme_changed`. +3. **Updating values live**: When a theme is selected, the handler will load the preset dictionary, write each color to the respective preference in `Preference.py`, and immediately update the color button instances using `btn.set_rgba(rgba)` so the UI color rows update instantly. +4. **Trigger Redraw**: The handler will invoke `self._trigger_canvas_redraw()` to update the canvas in real time. +5. **Color Button Integration**: When an individual color button is adjusted, its signal handler will set the theme `ComboRow` selection index to `"Custom"` (and set the Preference theme key to `"Custom"`). + +--- + +## 4. App Chrome Styling Recommendation + +**Recommendation**: GGate should automatically align the libadwaita application chrome with the active canvas theme to avoid visual dissonance (such as displaying a bright white window header and sidebar next to a dark space canvas). + +* **Color Scheme Integration**: + - Space, Frappé, and Mocha are dark themes. Selecting them should trigger the `Adw.StyleManager` to prefer dark mode: + ```python + Adw.StyleManager.get_default().set_color_scheme(Adw.ColorScheme.PREFER_DARK) + ``` + - If a light theme is added later (e.g., Catppuccin Latte), it should trigger `Adw.ColorScheme.PREFER_LIGHT`. + - Setting the color scheme to `"Custom"` should default back to system preferences (`Adw.ColorScheme.DEFAULT`). +* **Accent Colors**: + - For GTK4/Adwaita accent highlights (e.g., active switches, focused text entries, header selections), we can dynamically apply accent-specific styles to match each theme: + - **Space**: Electric Cyan (`#00f2fe`) + - **Frappé**: Lavender (`#babbf1`) or Mauve (`#ca9ee6`) + - **Mocha**: Lavender (`#b4befe`) or Mauve (`#cba6f7`) + - Accent coloring can be applied using `Gtk.CssProvider` loaded into the default screen, defining custom Adwaita color overrides (`@accent_color` and `@accent_bg_color`). + +--- + +## 5. Extensibility + +A future-proof extension architecture will enable users to place custom `.json` themes in their config directory (`~/.config/ggate/themes/`). + +### Theme JSON Schema +```json +{ + "name": "Nord Void", + "dark_chrome": true, + "colors": { + "bg_color": "#2e3440", + "bg_color_running": "#242933", + "grid_color": "#3b4252", + "cursor_color": "#d8dee9", + "component_color": "#81a1c1", + "component_high_color": "#88c0d0", + "component_color_running": "#d8dee9", + "picked_color": "#d08770", + "preadd_color": "#b48ead", + "selected_color": "#a3be8c", + "net_color": "#4c566a", + "net_high_color": "#88c0d0", + "net_color_running": "#434c5e", + "highlevel_color": "#a3be8c", + "lowlevel_color": "#81a1c1", + "terminal_color": "#bf616a", + "terminal_color_running": "#2e3440", + "selection_box": "#88c0d033", + "selection_box_border": "#88c0d0", + "_red": "#bf616a", + "_green": "#a3be8c", + "_blue": "#81a1c1", + "_yellow": "#ebcb8b" + } +} +``` + +### Loading Mechanism +On startup, GGate's preferences loading routine will scan `definitions.config_path + "/themes/"` for `.json` files. For each valid file: +1. Parse it and instantiate a `Theme` object. +2. Register it in the theme dictionary in `ggate/Themes.py`. +3. Dynamically populate the `Adw.ComboRow` with the custom theme names. + +--- + +## 6. Phased Implementation Plan + +```mermaid +gantt + title GGate Theming System Implementation Timeline + dateFormat YYYY-MM-DD + section Phase 1: Core Engine + Refactor Preference.py (Alpha Fix) :active, p1_1, 2026-06-15, 2d + Create ggate/Themes.py Registry :active, p1_2, after p1_1, 2d + section Phase 2: UI & Canvas + Preferences.py UI Additions : p2_1, after p1_2, 3d + Signal Wiring & Button Update : p2_2, after p2_1, 2d + section Phase 3: Polish & Ext + Adw.StyleManager Integration : p3_1, after p2_2, 2d + JSON Loading Extensibility : p3_2, after p3_1, 3d +``` + +### Phase 1: Core Engine & Registry +* Refactor `Preference.py` serialization logic to support parsing/writing RGBA values with alpha components. +* Implement `ggate/Themes.py` containing the `Theme` class and built-in palettes for Space, Catppuccin Frappé, and Catppuccin Mocha. + +### Phase 2: Preferences UI & Canvas Redraw +* Add the Theme selector `Adw.ComboRow` to the Appearance page of the Preferences dialog. +* Wire signals so that selecting a theme modifies the `Preference` values, saves them to disk, updates the dialog's color buttons live, and triggers a canvas redraw. +* Add logic to auto-switch the theme picker to "Custom" if individual colors are modified manually. + +### Phase 3: Chrome Alignment & Extensibility +* Wire the `Adw.StyleManager` to match the window chrome dark/light scheme automatically with the canvas theme type. +* Implement the custom JSON scanner to dynamically load user themes from `~/.config/ggate/themes/` on startup. + +--- + +## 7. Open Questions for the PM + +1. **Selection Box Exposure**: Currently, `selection_box` and `selection_box_border` are styled on the canvas but are not exposed as rows in the Preferences window. Should they remain hidden and only controlled via themes/JSON, or should we add them to the Appearance group in `Preferences.py`? +2. **Default Theme selection**: Which of the three themes should be GGate's fresh-install default? Should GGate default to the new "Space" theme, or preserve the legacy color scheme (dark edit mode, light running mode) as a "Default" setting? +3. **Custom Theme Management**: Should GGate support importing and deleting custom JSON themes directly through the UI, or is instructing users to place JSON files in `~/.config/ggate/themes/` sufficient for the initial implementation? diff --git a/ggate/ComponentView.py b/ggate/ComponentView.py index c90e933..30f45c4 100644 --- a/ggate/ComponentView.py +++ b/ggate/ComponentView.py @@ -133,7 +133,7 @@ def __init__(self): self.category_groups.append((group_label, lb, group_rows)) def set_all_sensitive(self, state, *args): - [row.set_selectable(bool(state)) for row in self.components] + [row.set_sensitive(bool(state)) for row in self.components] def on_row_activated(self, listbox, row, *args): for lb in self.listboxes: diff --git a/ggate/Components/Managers/FileManager.py b/ggate/Components/Managers/FileManager.py index 2039d40..79a1e64 100644 --- a/ggate/Components/Managers/FileManager.py +++ b/ggate/Components/Managers/FileManager.py @@ -100,6 +100,7 @@ def for_img(cls, mainframe: MainFrame): return fm + @classmethod def for_schematics(cls, mainframe: MainFrame): # TODO: Implement schematics pass diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index 89c9ec0..d642247 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -111,8 +111,7 @@ def chart_area_draw_fn(self, widget, cr: cairo.Context, *args): cr.paint() self._draw_cursor(cr) - def on_timing_diagram_click(self, _, event, *args): - if event[0] != Gdk.BUTTON_PRIMARY: return # noqa: E701 + def on_timing_diagram_click(self, gesture, n_press, x, y, *args): if not number_in_range( self.visible_cursor["y"], self._section_height, @@ -182,6 +181,7 @@ def _draw_names(self, cr: cairo.Context): # cr.set_source_rgba() # Draw the names of the probes + current_height = self._section_height for probe in probes: probe_name = probe[1].values[0] cairo_draw_text( @@ -298,6 +298,15 @@ def draw(self): name_cr_ctx = cairo.Context(name_surface) chart_cr_ctx = cairo.Context(chart_surface) + # Paint background white and reset default stroke/fill color to black + name_cr_ctx.set_source_rgb(1.0, 1.0, 1.0) + name_cr_ctx.paint() + name_cr_ctx.set_source_rgb(0.0, 0.0, 0.0) + + chart_cr_ctx.set_source_rgb(1.0, 1.0, 1.0) + chart_cr_ctx.paint() + chart_cr_ctx.set_source_rgb(0.0, 0.0, 0.0) + # Set the line width name_cr_ctx.set_line_width(1.0) chart_cr_ctx.set_line_width(1.0) @@ -318,7 +327,7 @@ def draw(self): self._draw_names(name_cr_ctx) self._draw_graph(chart_cr_ctx) - self.queue_draw() + self.__queue_draw() diff --git a/ggate/Components/Windows/TimingGraph/Display.py b/ggate/Components/Windows/TimingGraph/Display.py index 9bb0db3..15b6977 100644 --- a/ggate/Components/Windows/TimingGraph/Display.py +++ b/ggate/Components/Windows/TimingGraph/Display.py @@ -5,17 +5,22 @@ from ggate.MainFrame import MainFrame from gi.repository import Gtk, Adw, Gdk +from gettext import gettext as _ from ggate.Components.Windows.TimingGraph.Diagram import TimingGraphDiagram class TimingGraphDisplayWindow (Adw.Dialog): def __init__(self, parent: MainFrame): Adw.Dialog.__init__(self, can_close=True) + self._parent = parent + self.set_title(_("Timing Graph")) + self.set_content_width(600) + self.set_content_height(400) self._draw_area = TimingGraphDiagram(parent) - self.header_bar = Gtk.HeaderBar() + self.set_child(self._draw_area) def display(self): self._draw_area.draw() - self.present() + self.present(self._parent) \ No newline at end of file diff --git a/ggate/Exporter.py b/ggate/Exporter.py index 9057eae..e7a978e 100644 --- a/ggate/Exporter.py +++ b/ggate/Exporter.py @@ -124,7 +124,7 @@ def _save_schematics_as_image_response(settingsdialog, response, content): settingsdialog.close() - settingsdialog.parent.statusbar.push(0, "Image schematics saved..") + settingsdialog.parent.statusbar.update(_("Image schematics saved..")) def save_timing_diagram_as_image(diagram_area, parent): @@ -178,7 +178,7 @@ def _save_timing_diagram_as_image_response(settingsdialog, response, content): surface.finish() settingsdialog.close() - settingsdialog.parent.statusbar.push(0, "Timing diagram saved..") + settingsdialog.parent.statusbar.update(_("Timing diagram saved..")) def draw_schematics_for_file(cr, circuit, withlevels): diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 90912e8..e0648ba 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -378,7 +378,7 @@ def on_action_open_pressed(self, *args): def on_action_save_pressed(self, *args): fpath = self.circuit.filepath - if not os.path.exists(fpath) or not self.save_file_complete(): + if not os.path.exists(fpath) or not self.save_file__complete(): return self.on_action_saveas_pressed() def on_action_saveas_pressed(self, *args): @@ -664,14 +664,12 @@ def on_circuit_item_unselected(self, circuit): self.prop_window.show_properties(None) def on_circuit_alert(self, circuit, message): - dialog = Gtk.MessageDialog( - transient_for=self, - message_type=Gtk.MessageType.ERROR, - buttons=Gtk.ButtonsType.OK, + dialog = Adw.AlertDialog( + heading=_("Error"), + body=_(message), ) - dialog.set_markup(_("Error")) - dialog.get_message_area().append(Gtk.Label(label=_(message))) - dialog.present() + dialog.add_response("ok", _("OK")) + dialog.present(self) def disable_edit_actions(self): if logic_gates[self.drawarea.get_component()] is None: From 2a86e13b41866d5798112ed9cae621dba295586e Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 15:43:13 +0100 Subject: [PATCH 14/37] feat: revamp timing diagram dialog and draw area Rewrite Display.py (Adw.Dialog + ToolbarView, scale/range/save toolbar) and Diagram.py (synced scrolls, pure set_draw_func rendering, gesture scrubbing, empty-history placeholder). Render the draw area from the Preference color keys so it tracks the canvas theme; fix layout expansion and unify row geometry. Exporter compatibility preserved. Co-Authored-By: Claude Opus 4.8 --- .agents/plans/timing-diagram-revamp.md | 211 +++++++ .../Components/Windows/TimingGraph/Diagram.py | 541 +++++++++--------- .../Components/Windows/TimingGraph/Display.py | 124 +++- 3 files changed, 585 insertions(+), 291 deletions(-) create mode 100644 .agents/plans/timing-diagram-revamp.md diff --git a/.agents/plans/timing-diagram-revamp.md b/.agents/plans/timing-diagram-revamp.md new file mode 100644 index 0000000..d247c27 --- /dev/null +++ b/.agents/plans/timing-diagram-revamp.md @@ -0,0 +1,211 @@ +# PLAN: Timing Diagram Revamp + +This document outlines the architectural analysis, design, and step-by-step migration plan for revamping GGate's Timing Diagram window. The current implementation is half-wired, uses outdated GTK3 patterns, and suffers from layout loops, heavy memory allocations, and API mismatch crashes. + +> [!NOTE] +> This is a planning-only task. No application code will be modified during this step. + +--- + +## 1. Architectural Analysis of the Current Implementation + +### 1.1 Current Files & Issues +* **[Display.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/TimingGraph/Display.py)**: + * Subclasses `Adw.Dialog` but is instantiated with a standard window structure that lacks modern navigation, close buttons, toolbar views, and controls. + * Relies on the obsolete `get_visible()` method from the parent window context (which crashes since `Adw.Dialog` in GTK4/Libadwaita does not inherit from `Gtk.Window` directly and doesn't support `get_visible()`). +* **[Diagram.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/TimingGraph/Diagram.py)**: + * Hosts `self.name_area` and `self.chart_area` drawing areas. + * **Layout Loop Pitfall**: In the custom `draw()` method, it calls `set_size_request()` on the drawing areas. In GTK4, modifying widget size requests inside or during a draw event queue triggers another layout pass, causing an infinite layout loop and UI freezing. + * **Memory Allocation Pitfall**: It instantiates new `cairo.ImageSurface` objects of size up to `32767px` wide on *every single redraw step*. This consumes tens of megabytes of memory per frame and leads to heavy garbage collection thrashing. + * **HiDPI/Retina Support**: By rendering to an offscreen image surface and then blitting, the diagram ignores high-DPI scaling factors, rendering blurry lines on Retina displays. + * **Scrolled Window Nesting**: It subclasses `Gtk.ScrolledWindow` but then embeds *another* scrolled window (`timing_scroll_window`) inside itself, creating a redundant nested scroll container. +* **Legacy [DiagramArea.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/DiagramArea.py) & [TimingDiagramWindow.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/TimingDiagramWindow.py)**: + * Used synchronised scrolled windows (`vadjustment` sharing) to freeze the left-side names column horizontally while scrolling it vertically in sync with the chart waveforms. + * Offered control elements (Scale zoom, units, range filters, and manual cursor spin buttons) that are completely missing in the current GTK4 dialog. + +--- + +## 2. Data Model & Simulation Grounding + +### 2.1 Waveform Data Source +All signal waveforms are extracted directly from the active simulation manager instance: +* **History Array**: `self.circuit.probe_levels_history` in [CircuitManager.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/CircuitManager.py). +* **Frame Structure**: Each entry in the history is a list of floats/booleans: + `[timestamp, probe_0_state, probe_1_state, ..., probe_n_state]` + * `timestamp` (float): The simulated timeline time in seconds. + * `probe_i_state` (bool): The logic state (high/low) of the $i$-th probe. +* **Ordering Stability**: The order of states in each frame maps strictly to the order of active Probe components returned by filtering components: + ```python + probes = [c for c in self.circuit.components if c[0] == "probe"] + ``` + Since components cannot be added, deleted, or reordered while GGate is in Running Mode, this sequence remains completely static throughout the simulation run. + +### 2.2 Time Navigation and Reversion +* **Current Time**: Plotted as a red vertical cursor line matching `self.circuit.current_time`. +* **State Travel / Scrubbing**: When the user clicks or scrubs on the chart timeline, we calculate the selected time: + ```python + selected_time = (clicked_x / scale) + start_time + ``` + We write this to `self.circuit.current_time` and call `self.circuit.revert_state()`. This rolls back component logic history to that point, and triggers a redraw on the main canvas (`self.parent.drawarea`), synchronizing the schematic's visual state with the timing graph's cursor position. + +### 2.3 Handling Empty Simulation History +When simulation starts, `initialize_logic()` clears the history. If no interactive switches are clicked, `probe_levels_history` remains empty. +* **Recommendation**: In `on_circuit_run()` in `MainFrame.py`, perform an initial evaluation step to register the $t=0.0$ state. +* **Graceful fallback**: If `probe_levels_history` is empty, the diagram drawing callbacks should render a placeholder message ("No simulation steps recorded. Operate inputs to advance simulation.") rather than crashing. + +--- + +## 3. UI Architecture (GTK4 & Libadwaita) + +A robust layout requires separating the dialog controls, the frozen name list, and the scrollable canvas. + +```mermaid +graph TD + AD[Adw.Dialog] --> TV[Adw.ToolbarView] + TV --> HB[Adw.HeaderBar] + TV --> CNT[Content Container: Gtk.Box Horizontal] + + HB --> CloseButton[Close Button] + HB --> TitleText[Title: Timing Graph] + + TV --> SubToolbar[Sub-Toolbar: Gtk.Box] + SubToolbar --> ZoomControls[Zoom Combo & Spin] + SubToolbar --> RangeControls[Range: From / To Spins] + SubToolbar --> SaveButton[Save Diagram Image] + + CNT --> ScrollNames[Left Column: Gtk.ScrolledWindow] + CNT --> ScrollChart[Right Column: Gtk.ScrolledWindow] + + ScrollNames --> DrawNames[Gtk.DrawingArea: Probe Names] + ScrollChart --> DrawChart[Gtk.DrawingArea: Waveforms & Cursor] + + ScrollNames -. Share V-Adjustment .- ScrollChart +``` + +### 3.1 Widget Layout & Hierarchy +1. **Dialog Wrapper**: `TimingGraphDisplayWindow` subclasses `Adw.Dialog`. + * Use a tracking attribute `self._is_presented` (toggled via `closed` signals) to safely guard refresh loops instead of using deprecated `get_visible()`. +2. **Chrome Structure**: Set child of the dialog to an `Adw.ToolbarView`. + * **Top Bar**: `Adw.HeaderBar` containing the title. + * **Sub-Toolbar**: A horizontal `Gtk.Box` containing: + * Zoom/Scale inputs (pixels/sec value + unit dropdown). + * Range inputs (From spinbutton, To spinbutton, with shared unit selector). + * Save button (calling `save_timing_diagram_as_image()`). + * **Content**: A horizontal layout box containing `name_scroll` and `diagram_scroll`. + +### 3.2 Vertical Scroll Synchronization +To keep the probe names lined up with their waveforms while allowing horizontal timeline scrolling: +* Pass the vertical adjustment of `diagram_scroll` to `name_scroll`: + ```python + name_scroll.set_vadjustment(diagram_scroll.get_vadjustment()) + ``` +* Set scrolling policies so scrollbars only render on the main waveform area: + ```python + name_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) + diagram_scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + ``` + +### 3.3 Drawing Area Logic (GTK4 Best Practices) +To prevent layout loops, drawing areas must be pure renderers: +* **Size Request (Triggered on data/scale change)**: + * Add an explicit `update_layout_sizes()` helper that calculates the necessary total height ($40 \text{ px} \times \text{number of probes} + \text{padding}$) and width ($(\text{end\_time} - \text{start\_time}) \times \text{scale}$). + * Call `set_size_request()` on the DrawingAreas *only* inside this helper when parameters change. **Never** call `set_size_request` within draw callbacks. +* **Pure Rendering Callbacks**: + * Configure `set_draw_func(self.name_area_draw_fn)` and `set_draw_func(self.chart_area_draw_fn)`. + * Draw directly on the `cairo.Context` passed to these functions. This respects GTK4 double buffering, scales with high-DPI factors, and avoids any manual `ImageSurface` allocation. + +### 3.4 Interaction & Gestures +Replace GTK3 event masks with GTK4 EventControllers: +* **Scrubbing/Clicking**: `Gtk.GestureClick` on the chart DrawingArea. Clicking updates the current time, triggers state reversion, and schedules redraws on both the timing canvas and main schematic canvas. +* **Hovering Cursor**: `Gtk.EventControllerMotion` tracks the cursor position to draw a light vertical guide line. + +--- + +## 4. Rewrite vs. Salvage Recommendation + +**Strong Recommendation**: **Clean rewrite** of both `Display.py` and `Diagram.py` from scratch. + +### Rationale +1. **Outdated Double-Buffering**: The existing code mimics an old GTK3 design by allocating physical offscreen `cairo.ImageSurface` buffers. In GTK4, double-buffering is native, and this manual cache logic causes layout recursion and excessive memory churn. +2. **API Drift**: The wrapper lacks sub-toolbars, navigation controls, and uses methods like `get_visible` that are missing or behave differently on libadwaita dialog wrappers. +3. **Layout Synchronization**: Salvaging the nested scrolls in `Diagram.py` will lead to scroll conflicts. Syncing adjustments directly on two side-by-side scrolled windows is cleaner and less error-prone. +4. **HiDPI**: Drawing directly onto GTK's native draw context guarantees crisp rendering across modern displays. + +--- + +## 5. Phased Implementation Steps + +### Phase 1: Dialog Shell Rewrite (`Display.py`) +1. Re-write `TimingGraphDisplayWindow` as an `Adw.Dialog` containing an `Adw.ToolbarView`. +2. Add sub-toolbar widgets: Scale / Zoom input row, Range From/To inputs, and Save button. +3. Configure `_is_presented` state tracking and hook close action signals. + +### Phase 2: Scrollable Layout & Size Calculation (`Diagram.py`) +1. Implement `TimingGraphDiagram` as a `Gtk.Box` containing two scrolled windows sharing the vertical adjustment. +2. Implement `update_layout_sizes()` to request sizes based on active Probes count and horizontal scale factor. +3. Hook up basic DrawingArea draw callbacks showing dummy shapes to verify layout and scrolling. + +### Phase 3: Waveform Cairo Rendering +1. Wire up `name_area_draw_fn` to read active Probes and print their names in aligned divisions. +2. Wire up `chart_area_draw_fn` to read `self.circuit.probe_levels_history` and draw graduation lines. +3. Render digital transitions (high/low logic levels) for each probe sequence across the timeline. + +### Phase 4: Interaction and Time Travel +1. Add `Gtk.GestureClick` and `Gtk.EventControllerMotion` to the waveform drawing area. +2. Implement hovering guide cursor and active scrubbing. +3. Hook up cursor selection to `self.circuit.revert_state()` and trigger main schematic redraws. + +### Phase 5: Zoom, Units, and Image Export +1. Connect the scale and range widgets in `Display.py` to update diagram properties and trigger size updates. +2. Expose expected attributes/methods (`diagram_width`, `name_width`, `img_height`, `draw_names()`, `draw_diagrams()`) to ensure full compatibility with the existing [Exporter.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Exporter.py) image saver. + +--- + +## 6. Open Questions for the PM + +1. **Auto-Scrolling**: When simulation is running, should the timing diagram automatically scroll horizontally to follow the latest simulated timestamp? +2. **Open/Short Circuit States**: In the event of a simulation fault (open circuit `-1` or short circuit), should the timing diagram display a special diagnostic line style (e.g. dashed red line) or simply stop drawing? +3. **Default Timeline Limits**: Should the timeline range default to the maximum calculation duration (`0.0002` s / 200 µs), or should it grow dynamically if the duration preference is updated? + +--- + +## 7. Draw-Area Redesign (post-implementation fixes) + +### 7.1 Layout / Expansion Fix + +The chart collapsed to ~115 px because neither the `Gtk.Box` (TimingGraphDiagram) nor its scrolled windows had expand flags set. Fix: + +- `TimingGraphDiagram` (`Gtk.Box`): `set_hexpand(True)`, `set_vexpand(True)` so the ToolbarView content area stretches it. +- `name_scroll`: `set_hexpand(False)`, `set_vexpand(True)` — fixed width, tracks height. +- `diagram_scroll`: `set_hexpand(True)`, `set_vexpand(True)` — fills all remaining width and height. +- `chart_area` DrawingArea: `set_hexpand(True)` so it expands within its scrolled window viewport; horizontal scroll only when `diagram_width` exceeds viewport. + +Row Y math must be identical between `draw_names` and `draw_diagrams`: +- Ruler strip: rows 0–39 (40 px tall). +- Probe row `j`: y-range `40 + j*40` … `40 + j*40 + 39`. Total height: `40 + n_probes * 40`. +- Separator line at `40 + j*40 + 39.5` (between rows). +- Probe label vertically centred at `40 + j*40 + 20` (mid-row). +- Waveform HIGH at `y = 40 + j*40 + 10 + 0.5`; LOW at `y = 40 + j*40 + 30 + 0.5`. + +### 7.2 Theme-Aware Color Mapping (Preference keys) + +All `set_source_rgb` / `set_source_rgba` literals are replaced with `cr.set_source(Preference.)`. Since `Preference` values are `cairo.SolidPattern` objects, they work identically from the Exporter (no widget context needed). Cross-reference `.agents/plans/theming.md` — these are the same keys that theming.md will update per palette. + +| Surface | Preference key | +|---------|---------------| +| Background fill (names + chart) | `bg_color_running` | +| Probe names + ruler labels (text) | `component_color_running` | +| Row separators, panel border, ruler divider, graduation lines | `grid_color` | +| Waveform HIGH segments | `highlevel_color` | +| Waveform LOW segments | `lowlevel_color` | +| Current-time cursor | `terminal_color` | +| Hover guide line | `cursor_color` | +| Empty-history placeholder text | `component_color_running` | + +### 7.3 Visual Design + +- **Ruler strip** (top 40 px): background `bg_color_running`; bottom separator in `grid_color`; start/end labels + graduation labels in `component_color_running`; graduation tick lines in `grid_color`. +- **Name column rows**: background `bg_color_running`; separator lines `grid_color`; probe labels left-aligned, vertically centred, `component_color_running`. +- **Waveform rows**: background `bg_color_running`; HIGH segment `highlevel_color`; LOW segment `lowlevel_color`; 1.5 px line weight. +- **Cursors**: current-time `terminal_color` 1 px (drawn after `draw_diagrams`); hover guide `cursor_color` 1 px (only when `show_cursor`). +- No hardcoded white, grey, or black anywhere in the on-screen draw path. diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index d642247..3c36b7f 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -2,337 +2,328 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from ggate.MainFrame import MainFrame + from ggate.MainFrame import MainFrame import math import cairo - from decimal import Decimal +from gettext import gettext as _ from ggate import Preference -from ggate.Utils import cairo_draw_text, cairo_paths, number_in_range +from ggate.Utils import cairo_draw_text, cairo_paths from ggate.const import Definitions -from gi.repository import Gtk, Gdk, PangoCairo, Pango - -class TimingGraphDiagram(Gtk.ScrolledWindow): - def __get_timing(self): - return self.timing_units[self.timing_unit] +from gi.repository import Gtk, Gdk, PangoCairo - def __get_probes(self): - return [ - cmp - for cmp in self._circuit.components - if cmp[0] == Definitions.component_probe - ] - - def __queue_draw(self): - self.name_area.queue_draw() - self.chart_area.queue_draw() +# Ruler strip height in pixels; each probe row is also _ROW_H px. +_ROW_H = 40 +class TimingGraphDiagram(Gtk.Box): def __init__(self, parent: MainFrame): - Gtk.ScrolledWindow.__init__(self) - - self.layout_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) + # expand to fill all space given by the ToolbarView content area + self.set_hexpand(True) + self.set_vexpand(True) self._circuit = parent.circuit self._parent_drawarea = parent.drawarea + self.name_width = 150 + self.diagram_width = 1 + self.img_height = 1 + + self.start_time = 0.0 + self.end_time = 0.0002 + self.scale = 5000000.0 + self.timing_unit = 1 + self.gra_pix = 150 + + self.show_cursor = False + self.cursor_x = 0 + self.mouse_down = False + self.name_area = Gtk.DrawingArea() self.name_area.set_draw_func(self.name_area_draw_fn) + self.chart_area = Gtk.DrawingArea() self.chart_area.set_draw_func(self.chart_area_draw_fn) + self.chart_area.set_hexpand(True) # fills viewport width before scrolling kicks in - self.name_area_surface: cairo.ImageSurface = None - self.chart_area_surface: cairo.ImageSurface = None - - # Seperate scrolling box so the name part is floating - self.timing_scroll_window = Gtk.ScrolledWindow() - self.timing_scroll_window.set_vexpand(True) - self.timing_scroll_window.set_hexpand(True) - self.timing_scroll_window.set_child(self.chart_area) + self.name_scroll = Gtk.ScrolledWindow() + self.name_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) + self.name_scroll.set_hexpand(False) + self.name_scroll.set_vexpand(True) + self.name_scroll.set_child(self.name_area) - self.scroll_hadj = self.timing_scroll_window.get_hadjustment() - self.scroll_vadj = self.timing_scroll_window.get_vadjustment() + self.diagram_scroll = Gtk.ScrolledWindow() + self.diagram_scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + self.diagram_scroll.set_hexpand(True) + self.diagram_scroll.set_vexpand(True) + self.diagram_scroll.set_child(self.chart_area) - self.layout_box.append(self.name_area) - self.layout_box.append(self.timing_scroll_window) - self.set_child(self.layout_box) + # share diagram's vertical adjustment so both columns scroll in sync + self.name_scroll.set_vadjustment(self.diagram_scroll.get_vadjustment()) - controller = Gtk.EventControllerMotion() - controller.connect("motion", self.on_timing_diagram_motion) - self.chart_area.add_controller(controller) + self.append(self.name_scroll) + self.append(self.diagram_scroll) - controller = Gtk.GestureClick() - controller.set_button(Gdk.BUTTON_PRIMARY) - controller.connect("pressed", self.on_timing_diagram_click) - self.chart_area.add_controller(controller) + click_gesture = Gtk.GestureClick() + click_gesture.set_button(Gdk.BUTTON_PRIMARY) + click_gesture.connect("pressed", self.on_timing_diagram_click) + click_gesture.connect("released", self.on_timing_diagram_release) + self.chart_area.add_controller(click_gesture) - # Sizings - self._section_height = 45 - self._name_area_width = 100 + motion_controller = Gtk.EventControllerMotion() + motion_controller.connect("motion", self.on_timing_diagram_motion) + motion_controller.connect("leave", self.on_timing_diagram_leave) + self.chart_area.add_controller(motion_controller) - # Timing - self.start_time = 0 - self.end_time = 0.1 + self.update_layout_sizes() - # x and y padding - self._paddings = { "x": 10, "y": 15 } - - # Timing units - self.timing_unit = 2 - self.timing_units = [ - { "unit": "ms", "scale": 10 ** 3 }, - { "unit": "µs", "scale": 10 ** 6 }, - { "unit": "ns", "scale": 10 ** 9 }, + def __get_probes(self): + return [ + cmp + for cmp in self._circuit.components + if cmp[0] == Definitions.component_probe ] - # Graduations - self.gra_pix = 150 - self.scale = 5_000_000 # px/sec - - # Cursor - self.visible_cursor = { - "x": 0, - "y": 0, - "oldX": 0, - "oldY": 0, - } - - # Layout sizing - self.diagram_area_size = { "width": 0, "height": 0 } - - def name_area_draw_fn(self, widget, cr: cairo.Context, *args): - if self.name_area_surface is None: return # noqa: E701 - cr.set_source_surface(self.name_area_surface) - cr.paint() - - def chart_area_draw_fn(self, widget, cr: cairo.Context, *args): - if self.chart_area_surface is None: return # noqa: E701 - cr.set_source_surface(self.chart_area_surface) - cr.paint() - self._draw_cursor(cr) - - def on_timing_diagram_click(self, gesture, n_press, x, y, *args): - if not number_in_range( - self.visible_cursor["y"], - self._section_height, - self.diagram_area_size["height"] - ): return # noqa: E701 - - current_time = self.visible_cursor["x"] / self.scale + self.start_time - self._circuit.current_time = current_time - self._circuit.revert_state() - self.__queue_draw() + def update_layout_sizes(self): + n = len(self.__get_probes()) + self.img_height = _ROW_H + n * _ROW_H # ruler row + one row per probe + self.diagram_width = int(max(1, (self.end_time - self.start_time) * self.scale)) + # set_size_request only ever called here — never inside a draw callback (avoids layout loop) + self.name_area.set_size_request(self.name_width, self.img_height) + self.chart_area.set_size_request(self.diagram_width, self.img_height) - def on_timing_diagram_motion(self, controller, x_axis, y_axis, *args): - self.visible_cursor["oldX"] = self.visible_cursor["x"] - self.visible_cursor["oldY"] = self.visible_cursor["y"] + def draw(self): + self.update_layout_sizes() + self.name_area.queue_draw() + self.chart_area.queue_draw() - self.visible_cursor["x"] = x_axis - self.visible_cursor["y"] = y_axis + # ── draw callbacks ──────────────────────────────────────────────────────── - def _draw_cursor(self, cr: cairo.Context): - start = (self.visible_cursor["x"], self._section_height) - end = (self.visible_cursor["x"], self.diagram_area_size["height"]) - # TODO: set color for stroke path - cairo_paths(cr, start, end) - cr.stroke() - pass + def name_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *args): + self.draw_names(cr) - def _draw_names(self, cr: cairo.Context): + def chart_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *args): + history = self._circuit.probe_levels_history + if not history: + cr.set_source(Preference.bg_color_running) + cr.rectangle(0, 0, width, height) + cr.fill() + layout = PangoCairo.create_layout(cr) + layout.set_font_description(Preference.drawing_font) + msg = _("No simulation steps recorded. Operate inputs to advance simulation.") + cr.set_source(Preference.component_color_running) + cairo_draw_text(cr, layout, msg, width / 2, height / 2, 0.5, 0.5) + cr.fill() + return + + self.draw_diagrams(cr) + + current_time_x = (self._circuit.current_time - self.start_time) * self.scale + if 0 <= current_time_x <= self.diagram_width: + cr.set_source(Preference.terminal_color) + cr.set_line_width(1.0) + cairo_paths(cr, (current_time_x + 0.5, _ROW_H), (current_time_x + 0.5, self.img_height)) # +0.5 aligns 1px stroke to pixel grid + cr.stroke() + + if self.show_cursor and 0 <= self.cursor_x <= self.diagram_width: + cr.set_source(Preference.cursor_color) + cr.set_line_width(1.0) + cairo_paths(cr, (self.cursor_x + 0.5, _ROW_H), (self.cursor_x + 0.5, self.img_height)) + cr.stroke() + + # ── exporter-compatible public draw methods ─────────────────────────────── + + def draw_names(self, cr: cairo.Context): + probes = self.__get_probes() name_layout = PangoCairo.create_layout(cr) name_layout.set_font_description(Preference.drawing_font) - timing_unit = self.__get_timing()["unit"] - probes = self.__get_probes() - current_height = 0 - - # TODO: Fill the border at the right side of the name area - # cr.set_source_rgba() - - # Create a 1px border on the right side of the name area - cr.rectangle(self._name_area_width, 0, 1, self.name_area.get_allocated_height()) + # background + cr.set_source(Preference.bg_color_running) + cr.rectangle(0, 0, self.name_width, self.img_height) cr.fill() - # Draw heading top - cairo_draw_text( - cr, name_layout, - f"Probes / Time ({timing_unit})", - self._paddings["x"], - self._paddings["y"], - ) - - # Draw the headings bottom border - current_height += self._section_height - cairo_paths( - cr, (0, current_height), - (self._name_area_width, current_height) - ) - - # TODO: Stroke the divisions the border color - # cr.set_source_rgba() - - # Draw divisions - for probe in probes: - current_height += self._section_height - cairo_paths(cr, (0, current_height), (self._name_area_width, current_height)) + # outer border + row separators + cr.set_source(Preference.grid_color) + cr.set_line_width(1.0) + cr.rectangle(0.5, 0.5, self.name_width - 1, self.img_height - 1) cr.stroke() - # TODO: Set the color for the text - # cr.set_source_rgba() - - # Draw the names of the probes - current_height = self._section_height - for probe in probes: - probe_name = probe[1].values[0] - cairo_draw_text( - cr, name_layout, probe_name, - self._paddings["x"], - current_height + self._paddings["y"], - ) - current_height += self._section_height - cr.fill() - - def _draw_graduations(self, cr: cairo.Context, layout: Pango.Layout): - # Graduation interval calculation (same as before) - gra_interval = Decimal(self.gra_pix) / Decimal(self.scale) - order = 10 ** Decimal(int(math.log10(gra_interval))) - normalized = gra_interval / order - unit_scale = self.__get_timing()["scale"] - - if 0.15 <= normalized < 0.35: - gra_interval = order * Decimal("0.2") - elif 0.35 <= normalized <= 0.75: - gra_interval = order * Decimal("0.5") - else: - gra_interval = order * Decimal("0.1") - - u_end_time = self.end_time * unit_scale - u_gra_interval = gra_interval * unit_scale - - # TODO: Set color --- Start drawing ticks - # cr.set_source_rgb(0.0, 0.0, 0.0) - - tick_time = Decimal(0) - u_tick_time = Decimal(0) - - while u_tick_time <= Decimal(u_end_time): - tick_x = float(tick_time) * self.scale + 0.5 - - if tick_x >= 0 and tick_x <= self.diagram_area_size["width"]: - # Draw vertical graduation line - cr.set_source_rgb(0.5, 0.5, 0.5) - cairo_paths(cr, (int(tick_x), 39), (int(tick_x), self.diagram_area_size["height"] - 1)) - cr.stroke() + # ruler / header bottom divider + cairo_paths(cr, (0, _ROW_H - 0.5), (self.name_width, _ROW_H - 0.5)) + cr.stroke() - # Draw label - cr.set_source_rgb(0.0, 0.0, 0.0) - label = str(Decimal(u_tick_time).quantize(Decimal(".00"))) - cairo_draw_text(cr, layout, label, tick_x, 35, 0.5, 1.0) - cr.fill() + # probe row separators + for j in range(len(probes)): + sep_y = _ROW_H + j * _ROW_H + _ROW_H - 0.5 + cairo_paths(cr, (0, sep_y), (self.name_width, sep_y)) + cr.stroke() - # Advance - tick_time += gra_interval - u_tick_time += u_gra_interval + # header label ("Time [µs]") right-aligned into the ruler strip + unit_str = ["ns", "µs", "ms"][self.timing_unit] + cr.set_source(Preference.component_color_running) + cairo_draw_text(cr, name_layout, f"{_('Time')} [{unit_str}]", self.name_width - 6, _ROW_H // 2, 1.0, 0.5) + cr.fill() + # probe name labels, vertically centred in each row + for j, probe in enumerate(probes): + row_mid = _ROW_H + j * _ROW_H + _ROW_H // 2 + cairo_draw_text(cr, name_layout, probe[1].values[0], 8, row_mid, 0, 0.5) + cr.fill() - def _draw_graph(self, cr: cairo.Context): + def draw_diagrams(self, cr: cairo.Context): + probes = self.__get_probes() diagram_layout = PangoCairo.create_layout(cr) diagram_layout.set_font_description(Preference.drawing_font) - self._draw_graduations(cr, diagram_layout) - - # vertical space between signals - signal_spacing = self._section_height - - # height between high and low state - signal_height = self._section_height - self._paddings["y"] * 2 - # subpixel offset for crisp rendering - line_offset = 0.5 - - # to avoid overlapping transition with horizontal lines - transition_padding = 0.5 + # background + cr.set_source(Preference.bg_color_running) + cr.rectangle(0, 0, self.diagram_width, self.img_height) + cr.fill() - history = self._circuit.probe_levels_history - for i, current_frame in enumerate(history[:-1]): - next_frame = history[i + 1] - t0, t1 = current_frame[0], next_frame[0] - - # Skip if this frame is entirely outside the visible time window - if t1 <= self.start_time or self.end_time < t0: - continue - - signal_start_x = round((t0 - self.start_time) * self.scale) - signal_end_x = round((t1 - self.start_time) * self.scale) + 1 - transition_x = round((t1 - self.start_time) * self.scale) + line_offset - - for j, level in enumerate(current_frame[1:]): - base_y = j * signal_spacing - y_high = base_y + line_offset - y_low = base_y + signal_height + line_offset - - y = y_high if level else y_low - cairo_paths(cr, (signal_start_x, y), (signal_end_x, y)) - - # Draw vertical line at transition point if level changes - if level != next_frame[j + 1]: - cairo_paths( - cr, - (transition_x, y_high + transition_padding), - (transition_x, y_low - transition_padding) - ) - - # removed logic for drawing to end of draw area + # outer border + cr.set_source(Preference.grid_color) + cr.set_line_width(1.0) + cairo_paths(cr, (0, 0.5), (self.diagram_width, 0.5)) + cairo_paths(cr, (self.diagram_width - 0.5, 0), (self.diagram_width - 0.5, self.img_height)) + cairo_paths(cr, (0, self.img_height - 0.5), (self.diagram_width, self.img_height - 0.5)) cr.stroke() - def draw(self): - probe_amount = len(self.__get_probes()) - # Calculate the draw height and add a little space - draw_height = int(max(1, min((self._section_height * probe_amount) + (self._section_height * 2.5), 32767))) - draw_width = int(max(1, min((self.end_time - self.start_time) * self.scale, 32767))) - - # Create the image surface - name_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, int(self._name_area_width), draw_height) - chart_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, draw_width, draw_height) - - # Create image ctx - name_cr_ctx = cairo.Context(name_surface) - chart_cr_ctx = cairo.Context(chart_surface) - - # Paint background white and reset default stroke/fill color to black - name_cr_ctx.set_source_rgb(1.0, 1.0, 1.0) - name_cr_ctx.paint() - name_cr_ctx.set_source_rgb(0.0, 0.0, 0.0) - - chart_cr_ctx.set_source_rgb(1.0, 1.0, 1.0) - chart_cr_ctx.paint() - chart_cr_ctx.set_source_rgb(0.0, 0.0, 0.0) - - # Set the line width - name_cr_ctx.set_line_width(1.0) - chart_cr_ctx.set_line_width(1.0) - - # Set the size request of the name & timing diagram area - self.name_area.set_size_request(int(self._name_area_width), draw_height) - self.chart_area.set_size_request(draw_width, draw_height) + # ruler bottom divider + row separators + cairo_paths(cr, (0, _ROW_H - 0.5), (self.diagram_width, _ROW_H - 0.5)) + for j in range(len(probes)): + sep_y = _ROW_H + j * _ROW_H + _ROW_H - 0.5 + cairo_paths(cr, (0, sep_y), (self.diagram_width, sep_y)) + cr.stroke() - # Save the context - self.name_area_surface = name_surface - self.chart_area_surface = chart_surface - self.diagram_area_size = { - "width": draw_width, - "height": draw_height - } + history = self._circuit.probe_levels_history + if not history: + return - # Start drawings - self._draw_names(name_cr_ctx) - self._draw_graph(chart_cr_ctx) + self._draw_graduations(cr, diagram_layout) + self._draw_waveforms(cr, history, probes) + + def _draw_graduations(self, cr: cairo.Context, layout): + if self.scale <= 0: + return + gra_p = Decimal(self.gra_pix) / Decimal(self.scale) + if gra_p <= 0: + return + order = 10 ** Decimal(int(math.log10(gra_p))) + grasec_top = gra_p / order + # round to nearest "nice" step: 0.1, 0.2, or 0.5 × the leading power-of-10 + if 0.15 <= grasec_top < 0.35: + gra_p = order * Decimal("0.2") + elif 0.35 <= grasec_top <= 0.75: + gra_p = order * Decimal("0.5") + else: + gra_p = order * Decimal("0.1") - self.__queue_draw() + unit_multipliers = {0: 1000000000.0, 1: 1000000.0, 2: 1000.0} + mult = unit_multipliers.get(self.timing_unit, 1000000.0) + u_start = self.start_time * mult + u_end = self.end_time * mult + u_gra_p = float(gra_p) * mult + ruler_mid = _ROW_H // 2 + # start / end boundary labels + cr.set_source(Preference.component_color_running) + cairo_draw_text(cr, layout, str(Decimal(u_start).quantize(Decimal(".00"))), 4, ruler_mid, 0.0, 0.5) + cairo_draw_text(cr, layout, str(Decimal(u_end).quantize(Decimal(".00"))), self.diagram_width - 4, ruler_mid, 1.0, 0.5) + cr.fill() + u_gra_sec = Decimal(u_gra_p) + gra_sec = Decimal(gra_p) + u_gra_p_dec = Decimal(u_gra_p) + u_end_dec = Decimal(u_end) + + while True: + if u_gra_sec + u_gra_p_dec / 4 >= u_end_dec: + break + x = int(float(gra_sec) * self.scale) + 0.5 + cr.set_source(Preference.grid_color) + cairo_paths(cr, (x, _ROW_H), (x, self.img_height - 1)) + cr.stroke() + cr.set_source(Preference.component_color_running) + cairo_draw_text(cr, layout, str(u_gra_sec.quantize(Decimal(".00"))), float(gra_sec) * self.scale, ruler_mid, 0.5, 0.5) + cr.fill() + u_gra_sec += u_gra_p_dec + gra_sec += gra_p + + def _draw_waveforms(self, cr: cairo.Context, history, probes): + cr.set_line_width(1.5) + + def _row_y(j, high): + # each row spans _ROW_H px starting at _ROW_H offset; high at +10, low at +30 + base = _ROW_H + j * _ROW_H + return (base + 10 + 0.5) if high else (base + 30 + 0.5) # +0.5 aligns 1px stroke to pixel grid + + def _draw_segment(j, x0, x1, data, next_data=None): + if data == -1: + return # open-circuit state: leave a gap, don't draw + high = data is True or data == 1 + cr.set_source(Preference.highlevel_color if high else Preference.lowlevel_color) + y = _row_y(j, high) + cairo_paths(cr, (x0, y), (x1, y)) + cr.stroke() + if next_data is not None and next_data != -1 and data != next_data: + # vertical transition line between high and low + cr.set_source(Preference.highlevel_color if high else Preference.lowlevel_color) + tx = x1 - 0.5 # +0.5 aligns 1px stroke to pixel grid + base = _ROW_H + j * _ROW_H + cairo_paths(cr, (tx, base + 11), (tx, base + 29)) + cr.stroke() + if len(history) > 1: + for i, frame in enumerate(history[:-1]): + t0, t1 = frame[0], history[i + 1][0] + if t1 <= self.start_time or self.end_time < t0: + continue + x0 = round((t0 - self.start_time) * self.scale) + x1 = round((t1 - self.start_time) * self.scale) + 1 + for j, data in enumerate(frame[1:]): + _draw_segment(j, x0, x1, data, history[i + 1][j + 1]) + + last = history[-1] + if last[0] < self.end_time: + x0 = round((last[0] - self.start_time) * self.scale) + for j, data in enumerate(last[1:]): + _draw_segment(j, x0, self.diagram_width, data) + else: + last = history[0] + x0 = round((last[0] - self.start_time) * self.scale) + for j, data in enumerate(last[1:]): + _draw_segment(j, x0, self.diagram_width, data) + + # ── time scrubbing ──────────────────────────────────────────────────────── + + def update_current_time(self, x): + if self.scale <= 0: + return + selected_time = max(self.start_time, min(x / self.scale + self.start_time, self.end_time)) + self._circuit.current_time = selected_time + self._circuit.revert_state() + self.chart_area.queue_draw() + if self._parent_drawarea: + self._parent_drawarea.queue_draw() + def on_timing_diagram_click(self, gesture, n_press, x, y, *args): + self.mouse_down = True + self.update_current_time(x) + def on_timing_diagram_release(self, gesture, n_press, x, y, *args): + self.mouse_down = False + self.chart_area.queue_draw() + def on_timing_diagram_motion(self, controller, x, y, *args): + self.cursor_x = x + self.show_cursor = True + if self.mouse_down: + self.update_current_time(x) + self.chart_area.queue_draw() + def on_timing_diagram_leave(self, controller, *args): + self.show_cursor = False + self.chart_area.queue_draw() diff --git a/ggate/Components/Windows/TimingGraph/Display.py b/ggate/Components/Windows/TimingGraph/Display.py index 15b6977..77579fd 100644 --- a/ggate/Components/Windows/TimingGraph/Display.py +++ b/ggate/Components/Windows/TimingGraph/Display.py @@ -2,25 +2,117 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from ggate.MainFrame import MainFrame + from ggate.MainFrame import MainFrame -from gi.repository import Gtk, Adw, Gdk +from gi.repository import Gtk, Adw from gettext import gettext as _ from ggate.Components.Windows.TimingGraph.Diagram import TimingGraphDiagram +from ggate import Preference - -class TimingGraphDisplayWindow (Adw.Dialog): +class TimingGraphDisplayWindow(Adw.Dialog): def __init__(self, parent: MainFrame): - Adw.Dialog.__init__(self, can_close=True) - self._parent = parent - self.set_title(_("Timing Graph")) - self.set_content_width(600) - self.set_content_height(400) - - self._draw_area = TimingGraphDiagram(parent) - self.set_child(self._draw_area) - + Adw.Dialog.__init__(self, can_close=True) + self._parent = parent + self._is_presented = False + + self.set_title(_("Timing Graph")) + self.set_content_width(650) + self.set_content_height(450) + + toolbar_view = Adw.ToolbarView() + + header_bar = Adw.HeaderBar() + toolbar_view.add_top_bar(header_bar) + + sub_toolbar = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=12) + sub_toolbar.set_margin_start(12) + sub_toolbar.set_margin_end(12) + sub_toolbar.set_margin_top(6) + sub_toolbar.set_margin_bottom(6) + + scale_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) + scale_box.append(Gtk.Label(label=_("Scale:"))) + + self.scale_spin = Gtk.SpinButton.new_with_range(0.1, 1000.0, 0.5) + self.scale_spin.set_value(5.0) + self.scale_spin.set_digits(1) + self.scale_spin.connect("value-changed", self.on_parameters_changed) + scale_box.append(self.scale_spin) + + self.scale_unit = Gtk.DropDown.new_from_strings(["ns", "µs", "ms"]) + self.scale_unit.set_selected(1) + self.scale_unit.connect("notify::selected", self.on_parameters_changed) + scale_box.append(self.scale_unit) + + sub_toolbar.append(scale_box) + + spacer = Gtk.Box(hexpand=True) + sub_toolbar.append(spacer) + + range_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) + range_box.append(Gtk.Label(label=_("Range From:"))) + + self.from_spin = Gtk.SpinButton.new_with_range(0.0, 100000.0, 1.0) + self.from_spin.set_value(0.0) + self.from_spin.set_digits(2) + self.from_spin.connect("value-changed", self.on_parameters_changed) + range_box.append(self.from_spin) + + range_box.append(Gtk.Label(label=_("To:"))) + + self.to_spin = Gtk.SpinButton.new_with_range(0.0, 100000.0, 10.0) + max_dur = getattr(Preference, "max_calc_duration", 0.0002) + self.to_spin.set_value(max_dur * 1e6) + self.to_spin.set_digits(2) + self.to_spin.connect("value-changed", self.on_parameters_changed) + range_box.append(self.to_spin) + + self.range_unit = Gtk.DropDown.new_from_strings(["ns", "µs", "ms"]) + self.range_unit.set_selected(1) + self.range_unit.connect("notify::selected", self.on_parameters_changed) + range_box.append(self.range_unit) + + sub_toolbar.append(range_box) + + save_button = Gtk.Button(label=_("Save Image")) + save_button.connect("clicked", self.on_save_clicked) + sub_toolbar.append(save_button) + + toolbar_view.add_top_bar(sub_toolbar) + + self._draw_area = TimingGraphDiagram(parent) + toolbar_view.set_content(self._draw_area) + + self.set_child(toolbar_view) + self.connect("closed", self.on_closed) + + def on_parameters_changed(self, *args): + # spin value is in display-unit (ns/μs/ms); divide by seconds-per-unit to get px/s + multipliers = {0: 1e-9, 1: 1e-6, 2: 1e-3} + scale_val = self.scale_spin.get_value() + scale_mult = multipliers.get(self.scale_unit.get_selected(), 1e-6) + + self._draw_area.scale = scale_val / scale_mult + + range_mult = multipliers.get(self.range_unit.get_selected(), 1e-6) + self._draw_area.start_time = self.from_spin.get_value() * range_mult + self._draw_area.end_time = self.to_spin.get_value() * range_mult + self._draw_area.timing_unit = self.range_unit.get_selected() + + self._draw_area.draw() + + def on_save_clicked(self, button): + from ggate.Exporter import save_timing_diagram_as_image + save_timing_diagram_as_image(self._draw_area, self._parent) + + def on_closed(self, dialog): + self._is_presented = False + def display(self): - self._draw_area.draw() - self.present(self._parent) - \ No newline at end of file + self._is_presented = True + self.on_parameters_changed() + self.present(self._parent) + + # Adw.Dialog has no usable get_visible(); return our own tracking flag instead + def get_visible(self) -> bool: + return self._is_presented \ No newline at end of file From f7b37cc2c5593701fafab96ccbb97cf7077aa869 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 15:43:22 +0100 Subject: [PATCH 15/37] feat: add theming system with dynamic JSON theme pipeline Built-in themes (Classic, Space, Frappe, Mocha) ship as JSON in data/themes, globbed into the gresource by Meson and discovered at runtime by enumerating the resource dir (no hardcoded theme list). Classic reproduces the legacy default palette and is the default. Add Themes.py (registry, apply_theme, apply_chrome), a Theme picker in Preferences with live recolor + Custom fallback, RGBA-alpha round-trip in Preference, and StyleManager/accent chrome alignment. Co-Authored-By: Claude Opus 4.8 --- .agents/plans/theming.md | 81 ++++++++-------- data/images/meson.build | 21 +++- data/images/resources.xml.in | 3 + data/themes/Classic.json | 30 ++++++ data/themes/Frappe.json | 30 ++++++ data/themes/Mocha.json | 30 ++++++ data/themes/Space.json | 30 ++++++ ggate/Components/Windows/Preferences.py | 89 ++++++++++++++--- ggate/MainFrame.py | 5 + ggate/Preference.py | 25 +++-- ggate/Themes.py | 124 ++++++++++++++++++++++++ ggate/config.py | 4 + 12 files changed, 410 insertions(+), 62 deletions(-) create mode 100644 data/themes/Classic.json create mode 100644 data/themes/Frappe.json create mode 100644 data/themes/Mocha.json create mode 100644 data/themes/Space.json create mode 100644 ggate/Themes.py diff --git a/.agents/plans/theming.md b/.agents/plans/theming.md index 388c724..5fa55d7 100644 --- a/.agents/plans/theming.md +++ b/.agents/plans/theming.md @@ -4,23 +4,22 @@ This document outlines the architecture, data structures, UI integration, and im ## Overview -GGate is a GTK4 + libadwaita application with a Cairo-rendered canvas. Currently, canvas colors are loaded from a flat set of keys in [Preference.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Preference.py) and edited individually via the Appearance page in [Preferences.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/Preferences.py). +GGate is a GTK4 + libadwaita application with a Cairo-rendered canvas. Canvas colors are defined in theme JSON files stored in `data/themes/`, bundled into the gresource at build time, and dynamically loaded at runtime. The Appearance page in [Preferences.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/Preferences.py) allows switching between preinstalled and user themes, and editing individual colors. -The goal of this design is to implement a unified **Theming System** containing three preinstalled premium dark/neutral themes: -1. **Space**: A custom designed dark, deep-space aesthetic. -2. **Frappé**: The official Catppuccin Frappé palette. -3. **Mocha**: The official Catppuccin Mocha palette. +The system includes four built-in themes: +1. **Classic**: The legacy GGate color scheme (derived from original Preference defaults). +2. **Space**: A custom designed dark, deep-space aesthetic. +3. **Frappé**: The official Catppuccin Frappé palette. +4. **Mocha**: The official Catppuccin Mocha palette. --- ## 1. Architecture -The theming system separates **theme definitions** (color palettes) from the active **preference settings**. +The theming system separates **theme definitions** (static JSON files in `data/themes/`) from the active **preference settings** (in-memory Preference object and on-disk preferences file). -### Theme Representation -A theme will be represented in code as a dictionary mapping each color-based GGate Preference key to a standard hexadecimal string (e.g., `#1e1e2e` or `#cba6f733` with alpha). - -A new module [ggate/Themes.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Themes.py) will house the theme registries, containing the built-in themes and parsing helpers. +### Theme Representation & Discovery +Themes are stored as JSON files in `data/themes/` (one per theme). At build time, Meson globs these files and injects them into both dev and installed gresources under `/org/astralco/GGate/Dev/themes/` (dev) and `/org/astralco/GGate/themes/` (installed). At runtime, `ggate/Themes.py` enumerates the gresource directory, parses each JSON file into a `Theme` object, and registers it in a module-level `THEME_REGISTRY` dict. User themes can also be placed in `~/.config/ggate/themes/*.json` and are loaded via filesystem scan after gresource themes. ```python # ggate/Themes.py @@ -247,48 +246,48 @@ The theme picker will be integrated into the top of the **Appearance** tab of th --- -## 5. Extensibility +## 5. Dynamic Theme Pipeline & Extensibility -A future-proof extension architecture will enable users to place custom `.json` themes in their config directory (`~/.config/ggate/themes/`). +### Built-in Theme Storage +Built-in themes are stored as JSON files in `data/themes/` and are bundled into the gresource at build time via Meson auto-globbing. No manual XML or hardcoded list is needed — adding a new `*.json` file to `data/themes/` automatically includes it in the build. ### Theme JSON Schema +All themes, built-in and user-provided, follow this schema: ```json { - "name": "Nord Void", + "name": "Theme Name", "dark_chrome": true, + "accent_hex": "#00f2fe", "colors": { - "bg_color": "#2e3440", - "bg_color_running": "#242933", - "grid_color": "#3b4252", - "cursor_color": "#d8dee9", - "component_color": "#81a1c1", - "component_high_color": "#88c0d0", - "component_color_running": "#d8dee9", - "picked_color": "#d08770", - "preadd_color": "#b48ead", - "selected_color": "#a3be8c", - "net_color": "#4c566a", - "net_high_color": "#88c0d0", - "net_color_running": "#434c5e", - "highlevel_color": "#a3be8c", - "lowlevel_color": "#81a1c1", - "terminal_color": "#bf616a", - "terminal_color_running": "#2e3440", - "selection_box": "#88c0d033", - "selection_box_border": "#88c0d0", - "_red": "#bf616a", - "_green": "#a3be8c", - "_blue": "#81a1c1", - "_yellow": "#ebcb8b" + "bg_color": "#07080d", + "bg_color_running": "#0c0e16", + "grid_color": "#1b1e2c", + "cursor_color": "#e5e8f4", + "component_color": "#3d64ff", + "component_high_color": "#00f2fe", + "component_color_running": "#8992a8", + "picked_color": "#ff8000", + "preadd_color": "#ff007f", + "selected_color": "#39ff14", + "net_color": "#5b637a", + "net_high_color": "#00f2fe", + "net_color_running": "#44495b", + "highlevel_color": "#39ff14", + "lowlevel_color": "#3d64ff", + "terminal_color": "#ff3b30", + "terminal_color_running": "#07080d", + "selection_box": "#00f2fe26", + "selection_box_border": "#00f2fe", + "_red": "#ff3b30", + "_green": "#39ff14", + "_blue": "#007aff", + "_yellow": "#ffcc00" } } ``` -### Loading Mechanism -On startup, GGate's preferences loading routine will scan `definitions.config_path + "/themes/"` for `.json` files. For each valid file: -1. Parse it and instantiate a `Theme` object. -2. Register it in the theme dictionary in `ggate/Themes.py`. -3. Dynamically populate the `Adw.ComboRow` with the custom theme names. +### Runtime Theme Discovery +`Themes.init_registry(dev_mode)` enumerates the gresource theme prefix (`/org/astralco/GGate/Dev/themes` or `/org/astralco/GGate/themes`) via `Gio.resources_enumerate_children()`, parses each JSON child, and registers themes in `THEME_REGISTRY`. It then scans `~/.config/ggate/themes/` for user-provided JSON files to load and merge. No hardcoded list of theme names exists in the codebase. --- diff --git a/data/images/meson.build b/data/images/meson.build index ef4b208..798df00 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -24,11 +24,27 @@ foreach file: icon_files icon_files_xml += '' + file + '' endforeach +# Dynamically glob theme JSON files from ../themes/ +theme_files_list = run_command( + 'find', meson.project_source_root() / 'data/themes', '-maxdepth', '1', '-name', '*.json', '-type', 'f', + check: false +).stdout().strip().split('\n') + +theme_files_xml = [] +foreach file: theme_files_list + if file != '' + basename = run_command('basename', file, check: true).stdout().strip() + # alias keeps the resource path clean (/); disk path is ../themes via source_dir + theme_files_xml += 'themes/' + basename + '' + endif +endforeach + resources_xml = configure_file( input: 'resources.xml.in', output: 'resources.xml', configuration: { 'ICON_FILES': '\n '.join(icon_files_xml), + 'THEME_FILES': '\n '.join(theme_files_xml), 'PREFIX': prefix, } ) @@ -36,11 +52,12 @@ resources_xml = configure_file( ggate_resources = gnome.compile_resources( 'ggate-resources', resources_xml, - source_dir: meson.current_source_dir(), + source_dir: [meson.current_source_dir(), meson.current_source_dir() / '..'], gresource_bundle: true, install: true, install_dir: pkgdatadir, ) install_subdir('actions', install_dir: pkgdatadir / 'icons') -install_subdir('components', install_dir: pkgdatadir / 'icons') \ No newline at end of file +install_subdir('components', install_dir: pkgdatadir / 'icons') +install_subdir('../themes', install_dir: pkgdatadir) \ No newline at end of file diff --git a/data/images/resources.xml.in b/data/images/resources.xml.in index 41a1d09..a2cd6c5 100644 --- a/data/images/resources.xml.in +++ b/data/images/resources.xml.in @@ -3,4 +3,7 @@ @ICON_FILES@ + + @THEME_FILES@ + diff --git a/data/themes/Classic.json b/data/themes/Classic.json new file mode 100644 index 0000000..f42296c --- /dev/null +++ b/data/themes/Classic.json @@ -0,0 +1,30 @@ +{ + "name": "Classic", + "dark_chrome": false, + "accent_hex": "#ff8000", + "colors": { + "bg_color": "#000000", + "bg_color_running": "#ffffff", + "grid_color": "#261f26", + "cursor_color": "#ffffff", + "component_color": "#00ff00", + "component_high_color": "#80ff80", + "component_color_running": "#000000", + "picked_color": "#ff8000", + "preadd_color": "#ffbf00", + "selected_color": "#ffffff", + "net_color": "#0000ff", + "net_high_color": "#8080ff", + "net_color_running": "#000000", + "highlevel_color": "#ff0000", + "lowlevel_color": "#0000ff", + "terminal_color": "#ff0000", + "terminal_color_running": "#000000", + "selection_box": "#ffbf0040", + "selection_box_border": "#ffbf00", + "_red": "#ff0000", + "_green": "#00ff00", + "_blue": "#0000ff", + "_yellow": "#ffff00" + } +} diff --git a/data/themes/Frappe.json b/data/themes/Frappe.json new file mode 100644 index 0000000..c60a88b --- /dev/null +++ b/data/themes/Frappe.json @@ -0,0 +1,30 @@ +{ + "name": "Frappé", + "dark_chrome": true, + "accent_hex": "#ca9ee6", + "colors": { + "bg_color": "#303446", + "bg_color_running": "#292c3c", + "grid_color": "#414559", + "cursor_color": "#babbf1", + "component_color": "#8caaee", + "component_high_color": "#85c1dc", + "component_color_running": "#c6d0f5", + "picked_color": "#ef9f76", + "preadd_color": "#eebebe", + "selected_color": "#ca9ee6", + "net_color": "#838ba7", + "net_high_color": "#99d1db", + "net_color_running": "#737994", + "highlevel_color": "#a6d189", + "lowlevel_color": "#8caaee", + "terminal_color": "#e78284", + "terminal_color_running": "#232634", + "selection_box": "#ca9ee633", + "selection_box_border": "#ca9ee6", + "_red": "#e78284", + "_green": "#a6d189", + "_blue": "#8caaee", + "_yellow": "#e5c890" + } +} diff --git a/data/themes/Mocha.json b/data/themes/Mocha.json new file mode 100644 index 0000000..5e14be9 --- /dev/null +++ b/data/themes/Mocha.json @@ -0,0 +1,30 @@ +{ + "name": "Mocha", + "dark_chrome": true, + "accent_hex": "#cba6f7", + "colors": { + "bg_color": "#1e1e2e", + "bg_color_running": "#181825", + "grid_color": "#313244", + "cursor_color": "#b4befe", + "component_color": "#89b4fa", + "component_high_color": "#74c7ec", + "component_color_running": "#cdd6f4", + "picked_color": "#fab387", + "preadd_color": "#f2cdcd", + "selected_color": "#cba6f7", + "net_color": "#7f849c", + "net_high_color": "#89dceb", + "net_color_running": "#6c7086", + "highlevel_color": "#a6e3a1", + "lowlevel_color": "#89b4fa", + "terminal_color": "#f38ba8", + "terminal_color_running": "#11111b", + "selection_box": "#cba6f733", + "selection_box_border": "#cba6f7", + "_red": "#f38ba8", + "_green": "#a6e3a1", + "_blue": "#89b4fa", + "_yellow": "#f9e2af" + } +} diff --git a/data/themes/Space.json b/data/themes/Space.json new file mode 100644 index 0000000..0fa2155 --- /dev/null +++ b/data/themes/Space.json @@ -0,0 +1,30 @@ +{ + "name": "Space", + "dark_chrome": true, + "accent_hex": "#00f2fe", + "colors": { + "bg_color": "#07080d", + "bg_color_running": "#0c0e16", + "grid_color": "#1b1e2c", + "cursor_color": "#e5e8f4", + "component_color": "#3d64ff", + "component_high_color": "#00f2fe", + "component_color_running": "#8992a8", + "picked_color": "#ff8000", + "preadd_color": "#ff007f", + "selected_color": "#39ff14", + "net_color": "#5b637a", + "net_high_color": "#00f2fe", + "net_color_running": "#44495b", + "highlevel_color": "#39ff14", + "lowlevel_color": "#3d64ff", + "terminal_color": "#ff3b30", + "terminal_color_running": "#07080d", + "selection_box": "#00f2fe26", + "selection_box_border": "#00f2fe", + "_red": "#ff3b30", + "_green": "#39ff14", + "_blue": "#007aff", + "_yellow": "#ffcc00" + } +} diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 2067254..01c578a 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -1,14 +1,15 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- - from ggate import Preference +from ggate.Themes import THEME_REGISTRY, apply_theme from gi.repository import Gtk, Gdk, Adw, Pango from gettext import gettext as _ + class PreferencesWindow(Adw.PreferencesDialog): def __init__(self, parent): super().__init__() self.main_frame = parent self.color_buttons = {} + self._suppress_custom = False # guard: don't mark Custom while theme is loading self._build_ui() self._populate_values() @@ -24,6 +25,18 @@ def _build_appearance_page(self): page.set_title(_("Appearance")) page.set_icon_name("preferences-desktop-wallpaper-symbolic") + # ── Theme group ─────────────────────────────────────────────────────── + group_theme = Adw.PreferencesGroup() + group_theme.set_title(_("Theme")) + + theme_names = list(THEME_REGISTRY.keys()) + ["Custom"] + self.theme_row = Adw.ComboRow() + self.theme_row.set_title(_("Theme Style")) + self.theme_row.set_model(Gtk.StringList.new(theme_names)) + group_theme.add(self.theme_row) + page.add(group_theme) + + # ── Typography & Style ──────────────────────────────────────────────── group_style = Adw.PreferencesGroup() group_style.set_title(_("Typography & Style")) @@ -46,9 +59,9 @@ def _build_appearance_page(self): self.symbol_type_row.set_title(_("Symbol style")) self.symbol_type_row.set_model(Gtk.StringList.new([_("MIL/ANSI"), _("IEC")])) group_style.add(self.symbol_type_row) - page.add(group_style) + # ── Canvas Colors ───────────────────────────────────────────────────── group_canvas = Adw.PreferencesGroup() group_canvas.set_title(_("Canvas Colors")) group_canvas.add(self._create_color_row(_("Background (edit mode):"), "bg_color")) @@ -144,15 +157,16 @@ def _populate_values(self): self.drawing_font_btn.set_font_desc(Preference.drawing_font) self.symbol_type_row.set_selected(Preference.symbol_type) + # set theme ComboRow to match saved theme name + active_theme = Preference.theme + theme_names = list(THEME_REGISTRY.keys()) + ["Custom"] + idx = theme_names.index(active_theme) if active_theme in theme_names else len(theme_names) - 1 + self._suppress_custom = True + self.theme_row.set_selected(idx) + self._suppress_custom = False + for key, btn in self.color_buttons.items(): - pattern = Preference.__getattr__(key) - r, g, b, _ = pattern.get_rgba() - rgba = Gdk.RGBA() - rgba.red = r - rgba.green = g - rgba.blue = b - rgba.alpha = 1.0 - btn.set_rgba(rgba) + self._sync_button_from_preference(key) adj_iter = Gtk.Adjustment.new(float(Preference.max_calc_iters), 10.0, 1000000.0, 1.0, 10.0, 0.0) self.calc_iter_row.set_adjustment(adj_iter) @@ -164,7 +178,17 @@ def _populate_values(self): self.autocenter_row.set_active(bool(Preference.autocenter_resize)) + def _sync_button_from_preference(self, key): + pattern = Preference.__getattr__(key) + r, g, b, a = pattern.get_rgba() + rgba = Gdk.RGBA() + rgba.red, rgba.green, rgba.blue, rgba.alpha = r, g, b, a + btn = self.color_buttons.get(key) + if btn: + btn.set_rgba(rgba) + def _connect_signals(self): + self.theme_row.connect("notify::selected", self._on_theme_changed) self.drawing_font_btn.connect("notify::font-desc", self._on_font_changed) self.symbol_type_row.connect("notify::selected", self._on_symbol_type_changed) @@ -175,6 +199,28 @@ def _connect_signals(self): self.calc_duration_row.connect("notify::value", self._on_calc_duration_changed) self.autocenter_row.connect("notify::active", self._on_autocenter_changed) + # ── signal handlers ─────────────────────────────────────────────────────── + + def _on_theme_changed(self, row, pspec): + theme_names = list(THEME_REGISTRY.keys()) + ["Custom"] + selected = theme_names[row.get_selected()] + if selected == "Custom": + Preference.__setattr__("theme", "Custom") + Preference.save_settings() + return + + # load all palette colors into Preference + save + update chrome + self._suppress_custom = True + apply_theme(selected, Preference) + self._suppress_custom = False + + # update every color button live to reflect the new palette + for key in self.color_buttons: + self._sync_button_from_preference(key) + + self._apply_chrome(selected) + self._trigger_canvas_redraw() + def _on_font_changed(self, button, pspec): font_desc = button.get_font_desc() if font_desc: @@ -188,10 +234,14 @@ def _on_symbol_type_changed(self, row, pspec): self._trigger_canvas_redraw() def _on_color_changed(self, button, pspec, key): + if self._suppress_custom: + return rgba = button.get_rgba() if rgba: - Preference.__setattr__(key, f"{rgba.red},{rgba.green},{rgba.blue}") + Preference.__setattr__(key, f"{rgba.red},{rgba.green},{rgba.blue},{rgba.alpha}") Preference.save_settings() + # any individual tweak → switch combo to "Custom" + self._set_theme_row_custom() self._trigger_canvas_redraw() def _on_calc_iters_changed(self, row, pspec): @@ -209,6 +259,21 @@ def _on_autocenter_changed(self, row, pspec): Preference.save_settings() self._trigger_canvas_redraw() + # ── helpers ─────────────────────────────────────────────────────────────── + + def _set_theme_row_custom(self): + theme_names = list(THEME_REGISTRY.keys()) + ["Custom"] + custom_idx = len(theme_names) - 1 + self._suppress_custom = True + self.theme_row.set_selected(custom_idx) + self._suppress_custom = False + Preference.__setattr__("theme", "Custom") + Preference.save_settings() + + def _apply_chrome(self, theme_name: str): + from ggate.Themes import apply_chrome + apply_chrome(theme_name, Gdk.Display.get_default()) + def _trigger_canvas_redraw(self): if self.main_frame and hasattr(self.main_frame, "drawarea"): self.main_frame.drawarea.redraw = True diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index e0648ba..e4477f2 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -21,6 +21,7 @@ from ggate.Components.Windows.Preferences import PreferencesWindow from ggate.Components.Windows.About import AboutGGate from ggate import Preference +from ggate import Themes as _Themes from ggate.Components.LogicGates import logic_gates from ggate.Components.Managers.FileManager import FileIOManager @@ -93,6 +94,9 @@ def __init__(self, *args, **kwargs): Preference.load_settings() + _Themes.init_registry(config.DEV_MODE) + _Themes.apply_chrome(Preference.theme, Gdk.Display.get_default()) + # Component window self.comp_window = ComponentView() self.comp_window.connect("component-checked", self.on_comp_checked) @@ -117,6 +121,7 @@ def __init__(self, *args, **kwargs): self.drawarea.queue_draw() def set_up_shortcuts(self, *args): + actions = { "application": [ ("app.on_action_new_pressed", ["N"]), diff --git a/ggate/Preference.py b/ggate/Preference.py index 3339f28..02f01c3 100644 --- a/ggate/Preference.py +++ b/ggate/Preference.py @@ -13,14 +13,19 @@ def __setattr__(self, name, value): self.pref_dict[name] = Pango.FontDescription(value) elif isinstance(self.pref_dict[name], cairo.Pattern): try: - rgb = value.split(",") - self.pref_dict[name] = cairo.SolidPattern(float(rgb[0]), float(rgb[1]), float(rgb[2])) - except ValueError: + parts = [float(x) for x in value.split(",")] + if len(parts) == 4: + self.pref_dict[name] = cairo.SolidPattern(*parts) + else: + self.pref_dict[name] = cairo.SolidPattern(parts[0], parts[1], parts[2], 1.0) + except (ValueError, IndexError): self.pref_dict[name] = cairo.SolidPattern(0.0, 0.0, 0.0) elif isinstance(self.pref_dict[name], int): self.pref_dict[name] = int(value) elif isinstance(self.pref_dict[name], float): self.pref_dict[name] = float(value) + elif isinstance(self.pref_dict[name], str): + self.pref_dict[name] = str(value) def __getattr__(self, name): return self.pref_dict[name] @@ -56,10 +61,11 @@ def __getitem__(self, __k): "grid_color": cairo.SolidPattern(0.15, 0.12, 0.15), "selection_box": cairo.SolidPattern(1, 0.75, 0, 0.25), "selection_box_border": cairo.SolidPattern(1, 0.75, 0), - "symbol_type": 0, # 0: MIL/ANSI 1: IEC + "symbol_type": 0, "max_calc_iters": 10000, "max_calc_duration": 0.0002, - "autocenter_resize": 1 + "autocenter_resize": 1, + "theme": "Classic", } def load_settings(self): @@ -69,7 +75,7 @@ def load_settings(self): return for line in data: - pref = line.split("=") + pref = line.split("=", 1) # maxsplit=1 so string values like theme names survive if len(pref) == 2 and pref[0] in self.pref_dict: self.__setattr__(pref[0], pref[1]) @@ -87,11 +93,16 @@ def save_settings(self): fp.write("%s=%s\n" % (key, self.pref_dict[key].to_string())) elif isinstance(self.pref_dict[key], cairo.Pattern): rgba = self.pref_dict[key].get_rgba() - fp.write("%s=%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2])) + if rgba[3] < 1.0: + fp.write("%s=%f,%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2], rgba[3])) + else: + fp.write("%s=%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2])) elif isinstance(self.pref_dict[key], int): fp.write("%s=%d\n" % (key, self.pref_dict[key])) elif isinstance(self.pref_dict[key], float): fp.write("%s=%.9f\n" % (key, self.pref_dict[key])) + elif isinstance(self.pref_dict[key], str): + fp.write("%s=%s\n" % (key, self.pref_dict[key])) fp.close() sys.modules[__name__] = _Preference() diff --git a/ggate/Themes.py b/ggate/Themes.py new file mode 100644 index 0000000..6cf3be5 --- /dev/null +++ b/ggate/Themes.py @@ -0,0 +1,124 @@ +import cairo +import json +import os +from gi.repository import Gio, Adw, Gtk, Gdk, GLib + + +def hex_to_pattern(hex_color: str) -> cairo.SolidPattern: + h = hex_color.lstrip("#") + if len(h) == 8: + r, g, b, a = (int(h[i:i+2], 16) / 255.0 for i in (0, 2, 4, 6)) + elif len(h) == 6: + r, g, b = (int(h[i:i+2], 16) / 255.0 for i in (0, 2, 4)) + a = 1.0 + else: + return cairo.SolidPattern(0.0, 0.0, 0.0) + return cairo.SolidPattern(r, g, b, a) + + +class Theme: + def __init__(self, name: str, dark_chrome: bool, accent_hex: str, colors: dict): + self.name = name + self.dark_chrome = dark_chrome + self.accent_hex = accent_hex + self.colors = colors + + def get_pattern(self, key: str) -> cairo.SolidPattern: + hex_val = self.colors.get(key) + if not hex_val: + return cairo.SolidPattern(0.0, 0.0, 0.0) + return hex_to_pattern(hex_val) + + +THEME_REGISTRY: dict[str, Theme] = {} + + +def init_registry(dev_mode: bool = False) -> None: + """Dynamically enumerate and load themes from gresource + user config dir.""" + THEME_REGISTRY.clear() + + prefix = "/org/astralco/GGate/Dev/themes" if dev_mode else "/org/astralco/GGate/themes" + + try: + children = Gio.resources_enumerate_children(prefix, Gio.ResourceLookupFlags.NONE) + for child in children: + path = f"{prefix}/{child}" + try: + data_bytes = Gio.resources_lookup_data(path, Gio.ResourceLookupFlags.NONE) + data_str = data_bytes.get_data().decode("utf-8") + data = json.loads(data_str) + theme = Theme( + name=data["name"], + dark_chrome=bool(data.get("dark_chrome", True)), + accent_hex=data.get("accent_hex", "#ffffff"), + colors=data["colors"], + ) + THEME_REGISTRY[theme.name] = theme + except (KeyError, ValueError, json.JSONDecodeError): + pass + except GLib.Error: + pass + + _load_user_themes() + + +def _load_user_themes() -> None: + """Scan ~/.config/ggate/themes/ for user-provided JSON themes.""" + from ggate.const import definitions + themes_dir = os.path.join(definitions.config_path, "themes") + if not os.path.isdir(themes_dir): + return + for fname in os.listdir(themes_dir): + if not fname.endswith(".json"): + continue + path = os.path.join(themes_dir, fname) + try: + with open(path, encoding="utf-8") as fh: + data = json.load(fh) + theme = Theme( + name=data["name"], + dark_chrome=bool(data.get("dark_chrome", True)), + accent_hex=data.get("accent_hex", "#ffffff"), + colors=data["colors"], + ) + THEME_REGISTRY[theme.name] = theme + except (KeyError, ValueError, OSError): + pass + + +def apply_theme(name: str, preference_module) -> None: + """Write all color keys from the named theme into Preference, then save.""" + theme = THEME_REGISTRY.get(name) + if theme is None: + return + for key, hex_val in theme.colors.items(): + pat = hex_to_pattern(hex_val) + rgba = pat.get_rgba() + if rgba[3] < 1.0: + preference_module.__setattr__(key, f"{rgba[0]},{rgba[1]},{rgba[2]},{rgba[3]}") + else: + preference_module.__setattr__(key, f"{rgba[0]},{rgba[1]},{rgba[2]}") + preference_module.__setattr__("theme", name) + preference_module.save_settings() + + +def apply_chrome(name: str, display: Gdk.Display) -> None: + """Apply theme chrome (color scheme + accent CSS) to the app.""" + theme = THEME_REGISTRY.get(name) + if theme is None: + return + + scheme = Adw.ColorScheme.PREFER_DARK if theme.dark_chrome else Adw.ColorScheme.DEFAULT + Adw.StyleManager.get_default().set_color_scheme(scheme) + + css = ( + f"@define-color accent_color {theme.accent_hex};" + f"@define-color accent_bg_color {theme.accent_hex};" + ) + provider = Gtk.CssProvider() + provider.load_from_string(css) + Gtk.StyleContext.add_provider_for_display( + display, + provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION, + ) diff --git a/ggate/config.py b/ggate/config.py index ce2d8f4..a3b1468 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -5,6 +5,10 @@ VERSION = "5.0.0" APP_PREFIX = "org.astralco.GGate" +import os as _os +# True when running from a source checkout (run.py is adjacent to the ggate package) +DEV_MODE = _os.path.isfile(_os.path.join(_os.path.dirname(_os.path.dirname(__file__)), "run.py")) + compatibility = { "version": VERSION, "required": "2.6.0", From 50270a64e04c7f0205a725da229ac543bd0379b3 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 15:43:31 +0100 Subject: [PATCH 16/37] docs: expand icon-creation plan and add delegation brief Add per-component visual specs to the icon plan; add a reusable delegation brief (repo facts, conventions, build/gresource rules, logic-level verification workflow) so delegations reference it. Co-Authored-By: Claude Opus 4.8 --- .agents/delegation-brief.md | 50 ++++ .agents/plans/icon-creation.md | 406 ++++++++++++++++++++++++++++++++- 2 files changed, 455 insertions(+), 1 deletion(-) create mode 100644 .agents/delegation-brief.md diff --git a/.agents/delegation-brief.md b/.agents/delegation-brief.md new file mode 100644 index 0000000..ca8b150 --- /dev/null +++ b/.agents/delegation-brief.md @@ -0,0 +1,50 @@ +# Delegation Brief — GGate + +Stable preliminary context for any implementer (subagent / agy) working on GGate. +Delegations reference this file instead of restating it. Read this first, then the +task-specific prompt. + +## Repo +- Path / working dir: `/Users/ekureedem/Documents/Projects/GGate` (git repo, branch off `main`). +- Stack: Python `>=3.10`, GTK 4 (`>=4.16`), libadwaita (`>=1.6.8`), Cairo-rendered canvas. +- App IDs: `org.astralco.GGate` (installed), `org.astralco.GGate.Dev` (dev). +- Authoritative architecture notes: `CLAUDE.md` (read it). Working backlog: `.agents/TODO.md`. + +## Conventions (enforced in review) +- Double quotes for strings, always. +- Minimal inline comments — single-line, only on genuinely non-obvious / "magic" code. + NO docstrings, NO line-by-line narration, NO `# ...existing code...` markers. +- No unused/dangling imports or variables. No extra methods/types unless necessary. +- Avoid deep nesting: extract a helper at ~3 levels; prefer early returns. +- GTK4: single-threaded UI (`GLib.idle_add` to marshal); no `show_all()`/`container.add()` + (use `set_visible`/`append`/`set_child`); prefer `Adw.Dialog`/`Adw.AlertDialog` and + `Gtk.FileDialog`. Never call `set_size_request` inside a draw callback (layout loop). +- Commits: Conventional Commits, one-line subject. **Do NOT commit unless told.** + +## Build & resources +- Meson is the build system. Resources compile to gresource bundles: + - Dev: `run.py` loads `dev-resources.gresource` (from `data/images/dev-resources.xml`). + - Installed: `ggate-resources.gresource` (from `data/images/resources.xml.in`, via + `data/images/meson.build` which does dynamic XML generation — reuse that technique). +- Resource prefixes follow `/org/astralco/GGate/...` (installed) and + `/org/astralco/GGate/Dev/...` (dev). Dev-vs-installed detection lives in `config.py`. +- New bundled assets MUST go through Meson + both gresource XMLs and load by resource + path — never an absolute/relative filesystem path (breaks in venv/installed prefixes). +- Icon/asset gresource conventions are detailed in `.agents/plans/icon-creation.md`. + +## Sandbox / verification +- GTK CANNOT headless-launch here (setuid sandbox blocks GTK init). Verify at LOGIC level: + `python3 -c "import ast; ast.parse(open(p).read())"` per changed .py; `json.load` per + JSON; small comparison scripts; `grep` assertions; `meson setup build`/`--reconfigure` + if `meson` is on PATH (else paste the generated XML/meson snippets for review). + +## Plans (specs live here) +- `.agents/plans/theming.md` — theming system (palettes §2, JSON schema §5). +- `.agents/plans/icon-creation.md` — icon generation + dynamic gresource/meson globbing. +- `.agents/plans/timing-diagram-revamp.md` — timing dialog rewrite (done; §7 draw-area). +- `.agents/plans/preferences-revamp.md`, `theming.md`, `component-animation.md`. + +## Reporting +- Re-read current on-disk state before editing (prior partial work may exist). +- Report: per-task summary, files created/changed (precise paths), verification results, + and anything deferred or uncertain. Do not commit. diff --git a/.agents/plans/icon-creation.md b/.agents/plans/icon-creation.md index 6a1678b..a621619 100644 --- a/.agents/plans/icon-creation.md +++ b/.agents/plans/icon-creation.md @@ -75,8 +75,412 @@ Standard system integration assets. | **GGate Document Icon** | `application-x-ggate-circuit-symbolic.svg` | `scalable/mimetypes` | **Missing** (only PNGs exist) | Scalable SVG representing circuit file | | **GGate Document Icon** | `application-x-ggate-circuit.png` | `mimetypes/[size]x[size]` | PNGs (`mime/[size]/text-glc.png`) | Rename & regenerate to match MIME spec | +### D. Per-Component Visual Specifications + +This subsection provides the ground-truth visual specs derived directly from each component's canvas drawing implementation (`drawComponent`, `drawComponentEditOverlap`, etc.). + +#### 1. `not` (NOT Gate) +* **Source File:** [NOT.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/NOT.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 90, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** Right-pointing triangle with vertices `(30, -35)`, `(30, -5)`, and `(60, -20)`. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `30` and height `40`. +* **Distinguishing Marks:** + * **Both styles:** Inversion bubble (circle) centered at `(66, -20)` with radius `6` (extending `x` from `60` to `72`). + * **IEC Only:** Centered internal text `"1"` at `(45, -40)` (align: `0.5`, `0.0`). +* **Terminals & Pins:** + * **Input:** 1 pin at `(10, -20)`. Stub: `(10, -20)` to `(30, -20)`. + * **Output:** 1 pin at `(90, -20)`. Stub: `(72, -20)` to `(90, -20)` (connecting to the edge of the inversion bubble). +* **Smart Crop (Body only):** `[30, -40, 72, 0]` + +#### 2. `and` (AND Gate) +* **Source File:** [AND.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/AND.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 100, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** D-shape. Flat back segment from `(30, -40)` to `(30, 0)`. Parallel top/bottom lines extending to `(60, -40)` and `(60, 0)`. Front semi-circle centered at `(60, -20)` with radius `20`. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * **IEC Only:** Centered internal text `"&"` at `(55, -40)` (align: `0.5`, `0.0`). +* **Terminals & Pins:** + * **Inputs (2 or 3):** + * 2-pin: `(10, -30)` and `(10, -10)`. Stubs: `(10, -30)` to `(30, -30)`, `(10, -10)` to `(30, -10)`. + * 3-pin: Adds `(10, -20)`. Stub: `(10, -20)` to `(30, -20)`. + * **Output:** 1 pin at `(100, -20)`. Stub: `(80, -20)` to `(100, -20)`. +* **Smart Crop (Body only):** `[30, -40, 80, 0]` + +#### 3. `or` (OR Gate) +* **Source File:** [OR.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/OR.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 100, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** Shield-like shape pointing right. + - Curved back edge: Bezier curve from `(30, -40)` to `(30, 0)` with control points `(40, -30)` and `(40, -10)`. + - Curved top edge: Bezier from `(30, -40)` to tip `(80, -20)` with control points `(50, -40)` and `(65, -40)`. + - Curved bottom edge: Bezier from `(30, 0)` to tip `(80, -20)` with control points `(50, 0)` and `(65, 0)`. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * **IEC Only:** Centered internal text `"≥1"` at `(55, -40)` (align: `0.5`, `0.0`). +* **Terminals & Pins:** + * **Inputs (2 or 3):** + * 2-pin: `(10, -30)` and `(10, -10)`. Stubs: ANSI to `(36, -30)` / `(36, -10)`, IEC to `(30, -30)` / `(30, -10)`. + * 3-pin: Adds `(10, -20)`. Stubs: ANSI to `(36, -30)` / `(37, -20)` / `(36, -10)`, IEC to `(30, y)`. + * **Output:** 1 pin at `(100, -20)`. Stub: `(80, -20)` to `(100, -20)`. +* **Smart Crop (Body only):** `[30, -40, 80, 0]` + +#### 4. `xor` (XOR Gate) +* **Source File:** [XOR.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/XOR.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 100, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** Same shield shape as OR, plus an extra curved line offset at the input back: Bezier from `(25, -40)` to `(25, 0)` with control points `(35, -30)` and `(35, -10)`. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * **ANSI Only:** Extra curved input back line. + * **IEC Only:** Centered internal text `"=1"` at `(55, -40)` (align: `0.5`, `0.0`). +* **Terminals & Pins:** + * **Inputs (2 or 3):** Same connections/stubs as OR. + * **Output:** 1 pin at `(100, -20)`. Stub: `(80, -20)` to `(100, -20)`. +* **Smart Crop (Body only):** `[25, -40, 80, 0]` + +#### 5. `nand` (NAND Gate) +* **Source File:** [NAND.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/NAND.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 110, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** Same D-shape as AND. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * **ANSI Only:** Inversion bubble (circle) at `(86, -20)` with radius `6` (extends `x` from `80` to `92`). + * **IEC Only:** Centered internal text `"&"` at `(55, -40)` (align: `0.5`, `0.0`) and output diagonal inversion stroke from `(80, -28)` to `(92, -20)`. +* **Terminals & Pins:** + * **Inputs (2 or 3):** Same as AND. + * **Output:** 1 pin at `(110, -20)`. Stub: `(92, -20)` to `(110, -20)`. +* **Smart Crop (Body only):** `[30, -40, 92, 0]` + +#### 6. `nor` (NOR Gate) +* **Source File:** [NOR.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/NOR.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 110, 0]` +* **Body Silhouette:** + * **ANSI (distinctive):** Same shield shape as OR. + * **IEC (rectangular):** Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * **ANSI Only:** Inversion bubble (circle) at `(86, -20)` with radius `6` (extends `x` from `80` to `92`). + * **IEC Only:** Centered internal text `"≥1"` at `(55, -40)` (align: `0.5`, `0.0`) and output diagonal inversion stroke from `(80, -28)` to `(92, -20)`. +* **Terminals & Pins:** + * **Inputs (2 or 3):** Same as OR. + * **Output:** 1 pin at `(110, -20)`. Stub: `(92, -20)` to `(110, -20)`. +* **Smart Crop (Body only):** `[30, -40, 92, 0]` + +#### 7. `tribuff` (Tri-State Buffer) +* **Source File:** [TSB.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/TSB.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 90, 0]` (*Note: Control pin stub vertically extends to `y = -60`*). +* **Body Silhouette:** + * **ANSI / All styles:** Right-pointing triangle with vertices `(30, -35)`, `(30, -5)`, and `(60, -20)`. + * *Note: The code does not define a separate IEC variant (the triangle is drawn only when `Preference.symbol_type == 0`)*. +* **Distinguishing Marks:** + * **Active Low Control:** Circle (control bubble) at `(40, -35)` with radius `4` (if triggered on low level). + * **Inversion Output:** Circle (bubble) at `(64, -20)` with radius `4` (if inverted output). +* **Terminals & Pins:** + * **Data Input:** 1 pin at `(10, -20)`. Stub: `(10, -20)` to `(30, -20)`. + * **Control (Enable):** 1 pin at `(40, -60)`. Stub: `(40, -60)` to `(40, -38)` (active low) or `(40, -30)` (active high). + * **Output:** 1 pin at `(80, -20)`. Stub: `(68, -20)` to `(80, -20)` (inverted) or `(58, -20)` to `(80, -20)` (non-inverted). +* **Smart Crop (Body only):** `[30, -40, 68, 0]` + +#### 8. `sw` (Switch) +* **Source File:** [SW.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/SW.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 70, 0]` +* **Body Silhouette:** + * Rectangle starting at `(10, -40)` with width `40` and height `40`. +* **Distinguishing Marks:** + * Horizontal inner track rectangle: `(15, -30)` with width `30` and height `10`. + * Centered internal text labels: `"L"` at `(20, -10)` and `"H"` at `(40, -10)` (align: `0.5`, `0.5`). + * Slide handle: Outlined rectangle at `(17, -28)` of size `12x6` (Edit mode / Low state) or filled rectangle at `(30.5, -28.5)` of size `13x7` (High state in Run mode). +* **Terminals & Pins:** + * **Output:** 1 pin at `(70, -20)`. Stub: `(50, -20)` to `(70, -20)`. + * **Inputs:** None. +* **Smart Crop (Body only):** `[10, -40, 50, 0]` + +#### 9. `7seg` (Seven-Segment Display) +* **Source File:** [SevenSegment.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/StateViewers/SevenSegment.py) +* **Bounding Box (`comp_rect`):** `[10, -80, 100, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -80)` with width `70` and height `80`. +* **Distinguishing Marks:** + * Centered 7-segment display layout, with segments drawn as polygons: + - **a (top):** `(60, -70), (62, -68), (88, -68), (90, -70), (88, -72), (62, -72)` + - **b (top-right):** `(90, -70), (88, -68), (88, -42), (90, -40), (92, -42), (92, -68)` + - **c (bottom-right):** `(90, -40), (88, -38), (88, -12), (90, -10), (92, -12), (92, -38)` + - **d (bottom):** `(60, -10), (62, -8), (88, -8), (90, -10), (88, -12), (62, -12)` + - **e (bottom-left):** `(60, -40), (58, -38), (58, -12), (60, -10), (62, -12), (62, -38)` + - **f (top-left):** `(60, -70), (58, -68), (58, -42), (60, -40), (62, -42), (62, -68)` + - **g (middle):** `(60, -40), (62, -38), (88, -38), (90, -40), (88, -42), (62, -42)` + - Centered internal labels on left: `"IA"`, `"IB"`, `"IC"`, and `"ID"` at `(35, -70)`, `(35, -50)`, `(35, -30)`, and `(35, -10)` (align: `0.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** 4 pins at `(10, -70)`, `(10, -50)`, `(10, -30)`, and `(10, -10)`. Stubs go from `(10, y)` to `(30, y)`. + - **Outputs:** None. +* **Smart Crop (Body only):** `[30, -80, 100, 0]` + +#### 10. `led` (LED Display) +* **Source File:** [LED.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/StateViewers/LED.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 70, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -40)` with width `40` and height `40`. +* **Distinguishing Marks:** + * Centered inner circular LED element at `(50, -20)` with radius `8`. +* **Terminals & Pins:** + - **Input:** 1 pin at `(10, -20)`. Stub goes from `(10, -20)` to `(30, -20)`. + - **Outputs:** None. +* **Smart Crop (Body only):** `[30, -40, 70, 0]` + +#### 11. `vdd` (VDD Rail) +* **Source File:** [VDD.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/VDD.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 30, 0]` +* **Body Silhouette:** + * Horizontal bar: `(10, -20)` to `(30, -20)`. + * Tiny square dot at `(19, -21)` of size 2x2. +* **Distinguishing Marks:** + * Centered text label `"Vdd"` drawn above the bar at `(20, -30)` (align: `0.5`, `0.5`). +* **Terminals & Pins:** + - **Output:** 1 pin at `(20, 0)`. Stub drawn vertically from `(20, -20)` to `(20, 0)`. + - **Inputs:** None. +* **Smart Crop (Body only):** `[10, -40, 30, -20]` + +#### 12. `gnd` (GND Rail) +* **Source File:** [GND.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/GND.py) +* **Bounding Box (`comp_rect`):** `[10, -50, 30, 0]` +* **Body Silhouette:** + * Horizontal bar: `(10, -30)` to `(30, -30)`. +* **Distinguishing Marks:** + * Three parallel diagonal ground stripes extending down-left: + - Stripe 1: `(16, -30)` to `(12, -20)` + - Stripe 2: `(22, -30)` to `(18, -20)` + - Stripe 3: `(28, -30)` to `(24, -20)` + * Centered text label `"GND"` drawn below stripes at `(20, -10)` (align: `0.5`, `0.5`). +* **Terminals & Pins:** + - **Output:** 1 pin at `(20, -50)`. Stub drawn vertically from `(20, -50)` to `(20, -30)`. + - **Inputs:** None. +* **Smart Crop (Body only):** `[10, -30, 30, 0]` + +#### 13. `osc` (Oscillator) +* **Source File:** [OSC.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Standard/OSC.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 70, 0]` +* **Body Silhouette:** + * Rectangle starting at `(10, -40)` with width `40` and height `40`. +* **Distinguishing Marks:** + * Inner square-wave glyph drawn at `y = -10` and `y = -30` levels: + - Path: `(15, -10) -> (20, -10) -> (20, -30) -> (25, -30) -> (25, -10) -> (30, -10) -> (30, -30) -> (35, -30) -> (35, -10) -> (40, -10) -> (40, -30) -> (45, -30)`. +* **Terminals & Pins:** + - **Output:** 1 pin at `(70, -20)`. Stub goes from `(50, -20)` to `(70, -20)`. + - **Inputs:** None. +* **Smart Crop (Body only):** `[10, -40, 50, 0]` + +#### 14. `probe` (Probe) +* **Source File:** [Probe.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Miscellaneous/Probe.py) +* **Bounding Box (`comp_rect`):** Dynamic: `[10, -20, 55 + label_width, 0]`. `label_width` defaults to minimum 12. +* **Body Silhouette:** + * Circle centered at `(40, -10)` with radius `10`. +* **Distinguishing Marks:** + * Centered internal text label `"V"` at `(40, -10)` (align: `0.5`, `0.5`). + * External text label: drawn starting at `(55, -10)` containing name string (align: `0.0`, `0.5`). +* **Terminals & Pins:** + - **Input:** 1 pin at `(10, -10)`. Stub goes from `(10, -10)` to `(30, -10)`. + - **Outputs:** None. +* **Smart Crop (Body only):** `[30, -20, 50, 0]` + +#### 15. `text` (Text Box) +* **Source File:** [Text.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Miscellaneous/Text.py) +* **Bounding Box (`comp_rect`):** Dynamic: `[10, -10 - height/2, 10 + width, -10 + height/2]`, minimum size 12x12. +* **Body Silhouette:** None (no body outline is drawn). +* **Distinguishing Marks:** + * User-specified text drawn starting at `(10, -10)` (align: `0.0`, `0.5`). +* **Terminals & Pins:** None. +* **Smart Crop (Body only):** Matches dynamic bounding box. + +#### 16. `rsff` (RS Flip-Flop) +* **Source File:** [RSFF.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/FlipFlops/RSFF.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 100, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -40)` with width `50` and height `40`. +* **Distinguishing Marks:** + * Centered internal text labels: + - `"S"` at `(35, -30)` (align: `0.0`, `0.5`). + - `"R"` at `(35, -10)` (align: `0.0`, `0.5`). + - `"Q"` at `(75, -30)` (align: `1.0`, `0.5`). + - `"~Q"` at `(75, -10)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** 2 pins: `(10, -30)` (`S`) and `(10, -10)` (`R`). Stubs go from `(10, y)` to `(30, y)`. + - **Outputs:** 2 pins: `(100, -30)` (`Q`) and `(100, -10)` (`~Q`). Stubs go from `(80, y)` to `(100, y)`. +* **Smart Crop (Body only):** `[30, -40, 80, 0]` + +#### 17. `jkff` (JK Flip-Flop) +* **Source File:** [JKFF.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/FlipFlops/JKFF.py) +* **Bounding Box (`comp_rect`):** `[10, -60, 110, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -60)` with width `60` and height `60`. +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -30)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -35), (40, -30), (30, -25)`. + * Centered internal text labels: + - `"J"` at `(45, -50)` (align: `0.0`, `0.5`). + - `"CK"` at `(45, -30)` (align: `0.0`, `0.5`). + - `"K"` at `(45, -10)` (align: `0.0`, `0.5`). + - `"Q"` at `(85, -50)` (align: `1.0`, `0.5`). + - `"~Q"` at `(85, -10)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** 3 pins: `(10, -50)` (`J`), `(10, -30)` (`CK`), and `(10, -10)` (`K`). Stubs for `J` and `K` go to `(30, y)`. `CK` stub goes to `(30, -30)` (positive edge) or `(20, -30)` (negative edge). + - **Outputs:** 2 pins: `(110, -50)` (`Q`), `(110, -10)` (`~Q`). Stubs go from `(90, y)` to `(110, y)`. +* **Smart Crop (Body only):** `[30, -60, 90, 0]` + +#### 18. `dff` (D Flip-Flop) +* **Source File:** [DFF.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/FlipFlops/DFF.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 110, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -40)` with width `60` and height `40`. +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -10)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -15), (40, -10), (30, -5)`. + * Centered internal text labels: + - `"D"` at `(45, -30)` (align: `0.0`, `0.5`). + - `"CK"` at `(45, -10)` (align: `0.0`, `0.5`). + - `"Q"` at `(85, -30)` (align: `1.0`, `0.5`). + - `"~Q"` at `(85, -10)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** 2 pins: `(10, -30)` (`D`) and `(10, -10)` (`CK`). Stub for `D` goes to `(30, -30)`. `CK` stub goes to `(30, -10)` (positive edge) or `(20, -10)` (negative edge). + - **Outputs:** 2 pins: `(110, -30)` (`Q`), `(110, -10)` (`~Q`). Stubs go from `(90, y)` to `(110, y)`. +* **Smart Crop (Body only):** `[30, -40, 90, 0]` + +#### 19. `tff` (T Flip-Flop) +* **Source File:** [TFF.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/FlipFlops/TFF.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 110, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -40)` with width `60` and height `40`. +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -20)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -25), (40, -20), (30, -15)`. + * Centered internal text labels: + - `"T"` at `(45, -20)` (align: `0.0`, `0.5`). + - `"Q"` at `(85, -30)` (align: `1.0`, `0.5`). + - `"~Q"` at `(85, -10)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Input:** 1 pin at `(10, -20)` (`T`). Stub goes to `(30, -20)` (positive edge) or `(20, -20)` (negative edge). + - **Outputs:** 2 pins: `(110, -30)` (`Q`), `(110, -10)` (`~Q`). Stubs go from `(90, y)` to `(110, y)`. +* **Smart Crop (Body only):** `[30, -40, 90, 0]` + +#### 20. `counter` (Mod-N Counter) +* **Source File:** [ModNCounter.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Counters/ModNCounter.py) +* **Bounding Box (`comp_rect`):** Dynamic based on bits: `[10, min((outpin_t - 10, -60)), 120, max((outpin_b + 10, -20))]` (default 4 bits: `[10, -80, 120, 0]`). +* **Body Silhouette:** + * Rectangle starting at `(30, comp_rect[1])` with width `70` and height `comp_rect[3] - comp_rect[1]` (width 70, height 80 for default 4 bits). +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -50)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -55), (40, -50), (30, -45)`. + * Centered internal text labels: + - `"CK"` at `(45, -50)` (align: `0.0`, `0.5`). + - `"RST"` at `(45, -30)` (align: `0.0`, `0.5`). + - `"Q0"`, `"Q1"`, ... at `(95, y)` (align: `1.0`, `0.5`) for each output pin. +* **Terminals & Pins:** + - **Inputs:** 2 pins: `(10, -50)` (`CK`), `(10, -30)` (`RST`). `RST` stub goes to `(30, -30)`. `CK` stub goes to `(30, -50)` (positive edge) or `(20, -50)` (negative edge). + - **Outputs:** `bits` output pins: `(120, y)` for `y` in range `outpin_t` to `outpin_b` with step 20 (e.g. `[-70, -50, -30, -10]` for default 4 bits). Stubs go from `(100, y)` to `(120, y)`. +* **Smart Crop (Body only):** `[30, comp_rect[1], 100, comp_rect[3]]` + +#### 21. `adder` (Adder) +* **Source File:** [Calculator.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Calculator.py) +* **Bounding Box (`comp_rect`):** `[10, -40, 100, 0]` (Half Adder) or `[10, -60, 100, 0]` (Full Adder). +* **Body Silhouette:** + * Rectangle starting at `(30, -40)` with size 50x40 (Half) or starting at `(30, -60)` with size 50x60 (Full). +* **Distinguishing Marks:** + * Centered internal text labels: + - **Half Adder:** `"X"` at `(35, -30)`, `"Y"` at `(35, -10)`, `"C"` at `(75, -30)`, `"S"` at `(75, -10)`. + - **Full Adder:** `"X"` at `(35, -50)`, `"Y"` at `(35, -30)`, `"Z"` at `(35, -10)`, `"C"` at `(75, -50)`, `"S"` at `(75, -10)`. +* **Terminals & Pins:** + - **Inputs:** + - Half Adder (2 pins): `(10, -30)` (`X`), `(10, -10)` (`Y`). Stubs to `(30, y)`. + - Full Adder (3 pins): `(10, -50)` (`X`), `(10, -30)` (`Y`), `(10, -10)` (`Z`). Stubs to `(30, y)`. + - **Outputs:** 2 pins: + - Half Adder: `(100, -30)` (`C`), `(100, -10)` (`S`). Stubs from `(80, y)` to `(100, y)`. + - Full Adder: `(100, -50)` (`C`), `(100, -10)` (`S`). Stubs from `(80, y)` to `(100, y)`. +* **Smart Crop (Body only):** `[30, comp_rect[1], 80, 0]` + +#### 22. `siso` (SISO Shift Register) +* **Source File:** [SISOShiftRegister.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Counters/SISOShiftRegister.py) +* **Bounding Box (`comp_rect`):** `[10, -60, 120, 0]` +* **Body Silhouette:** + * Rectangle starting at `(30, -60)` with width `70` and height `60`. +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -10)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -15), (40, -10), (30, -5)`. + * Centered internal text labels: + - `"SISO"` at `(65, -50)` (align: `0.5`, `0.5`). + - `"D"` at `(45, -30)` (align: `0.0`, `0.5`). + - `"CK"` at `(45, -10)` (align: `0.0`, `0.5`). + - `"Q"` at `(95, -30)` (align: `1.0`, `0.5`). + - `"~Q"` at `(95, -10)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** 2 pins: `(10, -30)` (`D`), `(10, -10)` (`CK`). `D` stub goes to `(30, -30)`. `CK` stub goes to `(30, -10)` (positive edge) or `(20, -10)` (negative edge). + - **Outputs:** 2 pins: `(120, -30)` (`Q`), `(120, -10)` (`~Q`). Stubs go from `(100, y)` to `(120, y)`. +* **Smart Crop (Body only):** `[30, -60, 100, 0]` + +#### 23. `sipo` (SIPO Shift Register) +* **Source File:** [SIPOShiftRegister.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Counters/SIPOShiftRegister.py) +* **Bounding Box (`comp_rect`):** Dynamic based on bits: `[10, min((outpin_t - 30, -90)), 120, max((outpin_b + 10, -10))]` (default 4 bits: `[10, -100, 120, 0]`). +* **Body Silhouette:** + * Rectangle starting at `(30, comp_rect[1])` with width `70` and height `comp_rect[3] - comp_rect[1]` (width 70, height 100 for default 4 bits). +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, -40)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, -45), (40, -40), (30, -35)`. + * Centered internal text labels: + - `"SIPO"` at `(65, comp_rect[1] + 10)` (align: `0.5`, `0.5`). + - `"D"` at `(45, -60)` (align: `0.0`, `0.5`). + - `"CK"` at `(45, -40)` (align: `0.0`, `0.5`). + - `"RST"` at `(45, -20)` (align: `0.0`, `0.5`). + - `"Q0"`, `"Q1"`, ... at `(95, y)` (align: `1.0`, `0.5`) for each output pin. +* **Terminals & Pins:** + - **Inputs:** 3 pins: `(10, -60)` (`D`), `(10, -40)` (`CK`), and `(10, -20)` (`RST`). `D` and `RST` stubs go to `(30, y)`. `CK` stub goes to `(30, -40)` (positive edge) or `(20, -40)` (negative edge). + - **Outputs:** `bits` output pins: `(120, y)` for `y` in range `outpin_t` to `outpin_b` with step 20 (e.g. `[-70, -50, -30, -10]` for default 4 bits). Stubs go from `(100, y)` to `(120, y)`. +* **Smart Crop (Body only):** `[30, comp_rect[1], 100, comp_rect[3]]` + +#### 24. `piso` (PISO Shift Register) +* **Source File:** [PISOShiftRegister.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Counters/PISOShiftRegister.py) +* **Bounding Box (`comp_rect`):** Dynamic based on bits: `[10, min((inpin_t - 50, -90)), 120, max((inpin_b + 30, -30))]` (default 4 bits: `[10, -140, 120, 0]`). +* **Body Silhouette:** + * Rectangle starting at `(30, comp_rect[1])` with width `70` and height `comp_rect[3] - comp_rect[1]` (width 70, height 140 for default 4 bits). +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, inpin_b + 20)` with radius `5` (if negative-edge triggered). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, inpin_b + 15), (40, inpin_b + 20), (30, inpin_b + 25)`. + * Centered internal text labels: + - `"PISO"` at `(65, comp_rect[1] + 10)` (align: `0.5`, `0.5`). + - `"W/S"` at `(45, inpin_t - 20)` (align: `0.0`, `0.5`). + - `"D0"`, `"D1"`, ... at `(45, y)` (align: `0.0`, `0.5`) for each data input pin. + - `"CK"` at `(45, inpin_b + 20)` (align: `0.0`, `0.5`). + - `"Q"` at `(95, -70)` (align: `1.0`, `0.5`). + - `"~Q"` at `(95, -50)` (align: `1.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** `bits + 2` pins: `(10, inpin_t - 20)` (`W/S`), `(10, y)` for `y` in range `inpin_t` to `inpin_b` with step 20 (data inputs), and `(10, inpin_b + 20)` (`CK`). All stubs except `CK` go to `(30, y)`. `CK` stub goes to `(30, inpin_b + 20)` (positive edge) or `(20, inpin_b + 20)` (negative edge). + - **Outputs:** 2 pins: `(120, -70)` (`Q`), `(120, -50)` (`~Q`). Stubs go from `(100, y)` to `(120, y)`. +* **Smart Crop (Body only):** `[30, comp_rect[1], 100, comp_rect[3]]` + +#### 25. `pipo` (PIPO Shift Register) +* **Source File:** [PIPOShiftRegister.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py) +* **Bounding Box (`comp_rect`):** Dynamic based on bits: `[10, min((outpin_t - 90, -90)), 120, max((outpin_b + 50, -30))]` (default 4 bits: `[10, -200, 120, 0]`). +* **Body Silhouette:** + * Rectangle starting at `(30, comp_rect[1])` with width `70` and height `comp_rect[3] - comp_rect[1]` (width 70, height 200 for default 4 bits). +* **Distinguishing Marks:** + * Negative-edge trigger clock bubble: Circle centered at `(25, outpin_b + 20)` with radius `5` (*Note: Drawn at `SL` position due to clock bubble position drawing bug in code*). + * Clock-edge triangle: Inward-pointing triangle at clock input `(30, outpin_b + 35), (40, outpin_b + 40), (30, outpin_b + 45)`. + * Centered internal text labels: + - `"PIPO"` at `(65, comp_rect[1] + 10)` (align: `0.5`, `0.5`). + - `"S0"` at `(45, outpin_t - 60)` (align: `0.0`, `0.5`). + - `"S1"` at `(45, outpin_t - 40)` (align: `0.0`, `0.5`). + - `"SR"` at `(45, outpin_t - 20)` (align: `0.0`, `0.5`). + - `"D0"`, `"D1"`, ... at `(45, y)` (align: `0.0`, `0.5`) for each data input pin. + - `"Q0"`, `"Q1"`, ... at `(95, y)` (align: `1.0`, `0.5`) for each output pin. + - `"SL"` at `(45, outpin_b + 20)` (align: `0.0`, `0.5`). + - `"CK"` at `(45, outpin_b + 40)` (align: `0.0`, `0.5`). +* **Terminals & Pins:** + - **Inputs:** `bits + 5` pins: `(10, outpin_t - 60)` (`S0`), `(10, outpin_t - 40)` (`S1`), `(10, outpin_t - 20)` (`SR`), `(10, y)` for `y` in range `outpin_t` to `outpin_b` with step 20 (data inputs), `(10, outpin_b + 20)` (`SL`), and `(10, outpin_b + 40)` (`CK`). All stubs except `CK` go to `(30, y)`. `CK` stub goes to `(30, outpin_b + 40)` (positive edge) or `(20, outpin_b + 40)` (negative edge). + - **Outputs:** `bits` output pins: `(120, y)` for `y` in range `outpin_t` to `outpin_b` with step 20. Stubs go from `(100, y)` to `(120, y)`. +* **Smart Crop (Body only):** `[30, comp_rect[1], 100, comp_rect[3]]` + --- + ## 3. The Accuracy Approach: Programmatic Gate Icon Generation ### Analysis: Programmatic vs. Hand-Authored SVGs @@ -108,7 +512,7 @@ A script named `bin/generate-gate-icons.py` will follow these steps: - Read its bounding box: `rect = component.comp_rect` (e.g. `[10, -40, 100, 0]`). - Calculate width and height: `w = rect[2] - rect[0]`, `h = rect[3] - rect[1]`. - Apply **Smart Bounding-Box Cropping**: - * To draw only the core gate symbol without terminal connector lines or labels, crop the drawing box to the body itself (e.g., cropping the left x-start from 10 to 30 for AND, eliminating the inputs line). + * To draw only the core gate symbol without terminal connector lines or labels, crop the drawing box to the body itself using the coordinates specified in Section 2.D (e.g., for `and`, cropping the left `x`-start from `10` to `30` and the right `x`-end from `100` to `80`, eliminating the pin-stubs). - Generate two files per component: * `gate-[name]-symbolic.svg` (ANSI format: `Preference.symbol_type = 0`). * `gate-[name]-iec-symbolic.svg` (IEC format: `Preference.symbol_type = 1`). From 12916113b25555f6bbdcb8e1ab5add8402c1e5a8 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 17:56:55 +0100 Subject: [PATCH 17/37] fix: oscillator timing, gate sim safety, theme picker, dev-mode flag Load .glc property types correctly (parse_section), compute gates via all/any/sum so unconnected pins don't IndexError, and run analyze_logic at run start so oscillators populate the timing history. Rebuild the theme ComboRow model from the registry so its dropdown isn't stuck on Custom, and keep selections from reverting. Rename config.DEV_MODE to RUNNING_FROM_SOURCE and drop docstrings/stale headers. Co-Authored-By: Claude Opus 4.8 --- .agents/plans/icon-creation.md | 2 +- .agents/plans/theming.md | 2 +- .github/workflows/build.yml | 51 +++++++++++++++++++ CLAUDE.md | 9 ++++ bin/ggate.in | 2 +- build-aux/meson-exclude-pycache.sh | 9 ++++ data/images/meson.build | 14 ++--- ggate/CircuitManager.py | 34 +++++++++---- ggate/Components/LogicGates/Standard/AND.py | 2 +- ggate/Components/LogicGates/Standard/NAND.py | 2 +- ggate/Components/LogicGates/Standard/NOR.py | 2 +- ggate/Components/LogicGates/Standard/OR.py | 2 +- ggate/Components/LogicGates/Standard/XOR.py | 2 +- ggate/Components/Windows/Preferences.py | 13 +++-- .../Components/Windows/TimingGraph/Diagram.py | 3 +- ggate/MainFrame.py | 10 ++-- ggate/Preference.py | 14 +++-- ggate/Themes.py | 8 +-- ggate/config.py | 5 +- meson.build | 27 +++++----- pyproject.toml | 3 +- 21 files changed, 145 insertions(+), 71 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100755 build-aux/meson-exclude-pycache.sh diff --git a/.agents/plans/icon-creation.md b/.agents/plans/icon-creation.md index a621619..3922683 100644 --- a/.agents/plans/icon-creation.md +++ b/.agents/plans/icon-creation.md @@ -615,7 +615,7 @@ display = Gdk.Display.get_default() if display: theme = Gtk.IconTheme.get_for_display(display) # Register the GResource path prefix where GTK will search for icons - resource_prefix = "/org/astralco/GGate/Dev/icons" if config.DEV_MODE else "/org/astralco/GGate/icons" + resource_prefix = "/org/astralco/GGate/Dev/icons" if config.RUNNING_FROM_SOURCE else "/org/astralco/GGate/icons" theme.add_resource_path(resource_prefix) ``` diff --git a/.agents/plans/theming.md b/.agents/plans/theming.md index 5fa55d7..2d10e1e 100644 --- a/.agents/plans/theming.md +++ b/.agents/plans/theming.md @@ -287,7 +287,7 @@ All themes, built-in and user-provided, follow this schema: ``` ### Runtime Theme Discovery -`Themes.init_registry(dev_mode)` enumerates the gresource theme prefix (`/org/astralco/GGate/Dev/themes` or `/org/astralco/GGate/themes`) via `Gio.resources_enumerate_children()`, parses each JSON child, and registers themes in `THEME_REGISTRY`. It then scans `~/.config/ggate/themes/` for user-provided JSON files to load and merge. No hardcoded list of theme names exists in the codebase. +`Themes.init_registry(running_from_source)` enumerates the gresource theme prefix (`/org/astralco/GGate/Dev/themes` or `/org/astralco/GGate/themes`) via `Gio.resources_enumerate_children()`, parses each JSON child, and registers themes in `THEME_REGISTRY`. It then scans `~/.config/ggate/themes/` for user-provided JSON files to load and merge. No hardcoded list of theme names exists in the codebase. --- diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..614cbac --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,51 @@ +name: Build Pipeline + +on: + push: + branches: [ "main", "v5(development)" ] + tags: [ "v*" ] + pull_request: + branches: [ "main", "v5(development)" ] + +permissions: + contents: write + +jobs: + dist: + runs-on: ubuntu-latest + container: fedora:41 + steps: + - name: Install dependencies + run: > + dnf install -y + git meson ninja-build glib2-devel + gtk4-devel libadwaita-devel + python3-gobject python3-cairo + python3-igraph python3-shapely python3-packaging + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Mark workspace safe for git + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + + - name: Configure + run: meson setup build + + - name: Compile + run: meson compile -C build + + - name: Build source tarball + run: meson dist -C build --no-tests --formats gztar + + - name: Upload tarball artifact + uses: actions/upload-artifact@v4 + with: + name: ggate-source-tarball + path: build/meson-dist/*.tar.gz + + - name: Attach to release + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + files: build/meson-dist/*.tar.gz diff --git a/CLAUDE.md b/CLAUDE.md index 754158b..17f53cc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -96,6 +96,15 @@ These dialogs are the **current cleanup focus** — details and the grounded bug `install_subdir('ggate')`), `meson_options.txt`, `bin/ggate.in`, `data/images/` gresource. - **Flatpak**: `build-aux/flatpak/org.astralco.GGate.json` (GNOME 47 runtime, pip deps). - **Snap**: `build-aux/snapcraft/snapcraft.yaml` (`core22`, poetry deps, meson plugin). +- **Dev resources**: `run.py` loads `./dev-resources.gresource`. This bundle is a build + artifact (git-ignored) and must be recompiled from `data/images/dev-resources.xml` + whenever bundled assets (icons, themes) change — a stale bundle silently drops new + resources (e.g. themes not enumerating → empty registry). `run.py` now recompiles it on + every launch via `glib-compile-resources`; never hand-edit the `.gresource`. +- ⚠️ `data/images/dev-resources.xml` is currently hand-maintained and git-ignored, so it + can drift from the Meson-generated installed resource (`resources.xml.in` + the + `data/images/meson.build` glob). A "proper" fix is to generate the dev XML the same way + Meson generates the installed one (single source of truth). See `.agents/TODO.md`. - ⚠️ `config.py`/`__init__.py` versions are **static**, not Meson-populated, and currently **disagree** with `pyproject.toml`/`meson.build` (4.0.0 vs 5.0.0). See `.agents/TODO.md` P0. diff --git a/bin/ggate.in b/bin/ggate.in index 897dab1..cfdad0b 100755 --- a/bin/ggate.in +++ b/bin/ggate.in @@ -20,7 +20,7 @@ if __name__ == "__main__": app = GLogicApplication() if len(sys.argv) > 1 and sys.argv[1] == "--version": - print(f"GGate: v{__version__}") + print(f"GGate {__version__}") sys.exit(0) app.run() diff --git a/build-aux/meson-exclude-pycache.sh b/build-aux/meson-exclude-pycache.sh new file mode 100755 index 0000000..248c91c --- /dev/null +++ b/build-aux/meson-exclude-pycache.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Emit __pycache__ dirs relative to the first arg, for meson's +# install_subdir exclude_directories property. + +# enter the package dir meson passed as $1, or exit quietly if it's missing +cd "$1" 2>/dev/null || exit 0 + +# list every __pycache__ dir, stripping the leading "./" so paths stay relative +find . -type d -name '__pycache__' | sed 's|^\./||' diff --git a/data/images/meson.build b/data/images/meson.build index 798df00..8b18fb2 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -24,16 +24,16 @@ foreach file: icon_files icon_files_xml += '' + file + '' endforeach -# Dynamically glob theme JSON files from ../themes/ +# Collect theme JSON filenames from ../themes/ to bundle into the gresource theme_files_list = run_command( - 'find', meson.project_source_root() / 'data/themes', '-maxdepth', '1', '-name', '*.json', '-type', 'f', - check: false + 'sh', '-c', 'for f in "$0"/*.json; do [ -e "$f" ] && basename "$f"; done', + meson.project_source_root() / 'data/themes', + check: true ).stdout().strip().split('\n') theme_files_xml = [] -foreach file: theme_files_list - if file != '' - basename = run_command('basename', file, check: true).stdout().strip() +foreach basename: theme_files_list + if basename != '' # alias keeps the resource path clean (/); disk path is ../themes via source_dir theme_files_xml += 'themes/' + basename + '' endif @@ -45,7 +45,7 @@ resources_xml = configure_file( configuration: { 'ICON_FILES': '\n '.join(icon_files_xml), 'THEME_FILES': '\n '.join(theme_files_xml), - 'PREFIX': prefix, + 'PREFIX': gresource_prefix, } ) diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index cf06ef0..09b9df2 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -119,20 +119,32 @@ def parse_section(self, section: str): name, value = property.split(":") value = decode_text(value) - if name in component[1].prop_names: - index = component[1].prop_names.index(name) + if name not in component[1].prop_names: + continue - if component[1].properties[index][1] == definitions.property_int: - component[1].values[index] = int(value) + index = component[1].prop_names.index(name) + real_props = [p for p in component[1].properties if p[1] is not None] + if index >= len(real_props): + component[1].values[index] = value + continue - elif component[1].properties[index][1] == definitions.property_float: - component[1].values[index] = float(value) - - elif component[1].properties[index][1] == definitions.property_select: - component[1].values[index] = int(value) + prop_type = real_props[index][1] + if isinstance(prop_type, tuple): + prop_type = prop_type[0] + + if prop_type == definitions.property_int: + component[1].values[index] = int(float(value)) + elif prop_type == definitions.property_float: + component[1].values[index] = float(value) + elif prop_type == definitions.property_select: + component[1].values[index] = int(float(value)) + elif prop_type == definitions.property_bool: + component[1].values[index] = bool(value) or value == "1" + else: + component[1].values[index] = value - else: - component[1].values[index] = value + component[1].propertyChanged(component[1].values) + component[1].set_rot_props() return component diff --git a/ggate/Components/LogicGates/Standard/AND.py b/ggate/Components/LogicGates/Standard/AND.py index 2a3a07b..6d8ae52 100644 --- a/ggate/Components/LogicGates/Standard/AND.py +++ b/ggate/Components/LogicGates/Standard/AND.py @@ -103,7 +103,7 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - new_output = input_datas[0] and input_datas[1] if self.values[0] == 2 else input_datas[0] and input_datas[1] and input_datas[2] + new_output = all(input_datas) if new_output != self.output_level[0]: if self.output_level[0]: self.output_stack = [[[time + self.tp_hl, new_output]]] diff --git a/ggate/Components/LogicGates/Standard/NAND.py b/ggate/Components/LogicGates/Standard/NAND.py index 6daa8fc..d8801b6 100644 --- a/ggate/Components/LogicGates/Standard/NAND.py +++ b/ggate/Components/LogicGates/Standard/NAND.py @@ -98,7 +98,7 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - new_output = not (input_datas[0] and input_datas[1]) if self.values[0] == 2 else not (input_datas[0] and input_datas[1] and input_datas[2]) + new_output = not all(input_datas) if new_output != self.output_level[0]: if self.output_level[0]: self.output_stack = [[[time + self.tp_hl, new_output]]] diff --git a/ggate/Components/LogicGates/Standard/NOR.py b/ggate/Components/LogicGates/Standard/NOR.py index 0708cc7..06d1c03 100644 --- a/ggate/Components/LogicGates/Standard/NOR.py +++ b/ggate/Components/LogicGates/Standard/NOR.py @@ -114,7 +114,7 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - new_output = not (input_datas[0] or input_datas[1]) if self.values[0] == 2 else not (input_datas[0] or input_datas[1] or input_datas[2]) + new_output = not any(input_datas) if new_output != self.output_level[0]: if self.output_level[0]: self.output_stack = [[[time + self.tp_hl, new_output]]] diff --git a/ggate/Components/LogicGates/Standard/OR.py b/ggate/Components/LogicGates/Standard/OR.py index 95802b1..7b37958 100644 --- a/ggate/Components/LogicGates/Standard/OR.py +++ b/ggate/Components/LogicGates/Standard/OR.py @@ -124,7 +124,7 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - new_output = input_datas[0] or input_datas[1] if self.values[0] == 2 else input_datas[0] or input_datas[1] or input_datas[2] + new_output = any(input_datas) if new_output != self.output_level[0]: if self.output_level[0]: self.output_stack = [[[time + self.tp_hl, new_output]]] diff --git a/ggate/Components/LogicGates/Standard/XOR.py b/ggate/Components/LogicGates/Standard/XOR.py index 0a022d9..cbea51f 100644 --- a/ggate/Components/LogicGates/Standard/XOR.py +++ b/ggate/Components/LogicGates/Standard/XOR.py @@ -110,7 +110,7 @@ def isMouseOvered(self, x, y): return False def calculate(self, input_datas, time): - new_output = (input_datas[0] + input_datas[1]) % 2 if self.values[0] == 2 else (input_datas[0] + input_datas[1] + input_datas[2]) % 2 + new_output = sum(input_datas) % 2 if new_output != self.output_level[0]: if self.output_level[0]: self.output_stack = [[[time + self.tp_hl, new_output]]] diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 01c578a..2a0967d 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -157,16 +157,15 @@ def _populate_values(self): self.drawing_font_btn.set_font_desc(Preference.drawing_font) self.symbol_type_row.set_selected(Preference.symbol_type) - # set theme ComboRow to match saved theme name active_theme = Preference.theme theme_names = list(THEME_REGISTRY.keys()) + ["Custom"] idx = theme_names.index(active_theme) if active_theme in theme_names else len(theme_names) - 1 + self._suppress_custom = True self.theme_row.set_selected(idx) - self._suppress_custom = False - - for key, btn in self.color_buttons.items(): + for key in self.color_buttons: self._sync_button_from_preference(key) + self._suppress_custom = False adj_iter = Gtk.Adjustment.new(float(Preference.max_calc_iters), 10.0, 1000000.0, 1.0, 10.0, 0.0) self.calc_iter_row.set_adjustment(adj_iter) @@ -210,13 +209,13 @@ def _on_theme_changed(self, row, pspec): return # load all palette colors into Preference + save + update chrome + # suppress through the whole load: apply_theme + button sync both emit + # notify::rgba, which would otherwise flip the row back to "Custom" self._suppress_custom = True apply_theme(selected, Preference) - self._suppress_custom = False - - # update every color button live to reflect the new palette for key in self.color_buttons: self._sync_button_from_preference(key) + self._suppress_custom = False self._apply_chrome(selected) self._trigger_canvas_redraw() diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index 3c36b7f..55d82fe 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -163,7 +163,8 @@ def draw_names(self, cr: cairo.Context): # header label ("Time [µs]") right-aligned into the ruler strip unit_str = ["ns", "µs", "ms"][self.timing_unit] cr.set_source(Preference.component_color_running) - cairo_draw_text(cr, name_layout, f"{_('Time')} [{unit_str}]", self.name_width - 6, _ROW_H // 2, 1.0, 0.5) + time_label = _("Time") + cairo_draw_text(cr, name_layout, f"{time_label} [{unit_str}]", self.name_width - 6, _ROW_H // 2, 1.0, 0.5) cr.fill() # probe name labels, vertically centred in each row diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index e4477f2..ad11b7c 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -21,7 +21,7 @@ from ggate.Components.Windows.Preferences import PreferencesWindow from ggate.Components.Windows.About import AboutGGate from ggate import Preference -from ggate import Themes as _Themes +from ggate import Themes from ggate.Components.LogicGates import logic_gates from ggate.Components.Managers.FileManager import FileIOManager @@ -94,8 +94,8 @@ def __init__(self, *args, **kwargs): Preference.load_settings() - _Themes.init_registry(config.DEV_MODE) - _Themes.apply_chrome(Preference.theme, Gdk.Display.get_default()) + Themes.init_registry(config.RUNNING_FROM_SOURCE) + Themes.apply_chrome(Preference.theme, Gdk.Display.get_default()) # Component window self.comp_window = ComponentView() @@ -121,7 +121,6 @@ def __init__(self, *args, **kwargs): self.drawarea.queue_draw() def set_up_shortcuts(self, *args): - actions = { "application": [ ("app.on_action_new_pressed", ["N"]), @@ -464,6 +463,9 @@ def on_circuit_run(self, *args): self.circuit.analyze_net_connections() self.circuit.initialize_logic() + # compute t=0..stop_time once so oscillators/probes populate history + self.circuit.analyze_logic() + self.drawarea.redraw = True self.drawarea.queue_draw() diff --git a/ggate/Preference.py b/ggate/Preference.py index 02f01c3..279dfd9 100644 --- a/ggate/Preference.py +++ b/ggate/Preference.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- - import cairo import sys import os @@ -34,10 +32,10 @@ def __getitem__(self, __k): return self.pref_dict.get(__k, None) pref_dict = { - '_red': cairo.SolidPattern(1.0, 0.0, 0.0), - '_green': cairo.SolidPattern(0.0, 1.0, 0.0), - '_blue': cairo.SolidPattern(0.0, 0.0, 1.0), - '_yellow': cairo.SolidPattern(1.0, 1.0, 0.0), + "_red": cairo.SolidPattern(1.0, 0.0, 0.0), + "_green": cairo.SolidPattern(0.0, 1.0, 0.0), + "_blue": cairo.SolidPattern(0.0, 0.0, 1.0), + "_yellow": cairo.SolidPattern(1.0, 1.0, 0.0), "grid_step": 10, @@ -74,8 +72,8 @@ def load_settings(self): if not success or not data: return - for line in data: - pref = line.split("=", 1) # maxsplit=1 so string values like theme names survive + for line in data.splitlines(): + pref = line.split("=", 1) if len(pref) == 2 and pref[0] in self.pref_dict: self.__setattr__(pref[0], pref[1]) diff --git a/ggate/Themes.py b/ggate/Themes.py index 6cf3be5..d6dd3c0 100644 --- a/ggate/Themes.py +++ b/ggate/Themes.py @@ -33,11 +33,10 @@ def get_pattern(self, key: str) -> cairo.SolidPattern: THEME_REGISTRY: dict[str, Theme] = {} -def init_registry(dev_mode: bool = False) -> None: - """Dynamically enumerate and load themes from gresource + user config dir.""" +def init_registry(is_dev_mode: bool = False) -> None: THEME_REGISTRY.clear() - prefix = "/org/astralco/GGate/Dev/themes" if dev_mode else "/org/astralco/GGate/themes" + prefix = "/org/astralco/GGate/Dev/themes" if is_dev_mode else "/org/astralco/GGate/themes" try: children = Gio.resources_enumerate_children(prefix, Gio.ResourceLookupFlags.NONE) @@ -63,7 +62,6 @@ def init_registry(dev_mode: bool = False) -> None: def _load_user_themes() -> None: - """Scan ~/.config/ggate/themes/ for user-provided JSON themes.""" from ggate.const import definitions themes_dir = os.path.join(definitions.config_path, "themes") if not os.path.isdir(themes_dir): @@ -87,7 +85,6 @@ def _load_user_themes() -> None: def apply_theme(name: str, preference_module) -> None: - """Write all color keys from the named theme into Preference, then save.""" theme = THEME_REGISTRY.get(name) if theme is None: return @@ -103,7 +100,6 @@ def apply_theme(name: str, preference_module) -> None: def apply_chrome(name: str, display: Gdk.Display) -> None: - """Apply theme chrome (color scheme + accent CSS) to the app.""" theme = THEME_REGISTRY.get(name) if theme is None: return diff --git a/ggate/config.py b/ggate/config.py index a3b1468..6b17029 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -1,13 +1,12 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- +from os import path from packaging.version import Version DATADIR = '/'.join(__file__.split("/")[:-1]) + '/' VERSION = "5.0.0" APP_PREFIX = "org.astralco.GGate" -import os as _os # True when running from a source checkout (run.py is adjacent to the ggate package) -DEV_MODE = _os.path.isfile(_os.path.join(_os.path.dirname(_os.path.dirname(__file__)), "run.py")) +RUNNING_FROM_SOURCE = path.isfile(path.join(path.dirname(path.dirname(__file__)), "run.py")) compatibility = { "version": VERSION, diff --git a/meson.build b/meson.build index 494f37c..e7bef04 100644 --- a/meson.build +++ b/meson.build @@ -26,10 +26,10 @@ pkgdatadir = get_option('prefix') / get_option('datadir') / meson.project_name() profile = get_option('profile') if profile == 'development' app_id = 'org.astralco.GGate.Dev' - prefix = '/org/astralco/GGate/Dev' + gresource_prefix = '/org/astralco/GGate/Dev' elif profile == 'release' app_id = 'org.astralco.GGate' - prefix = '/org/astralco/GGate' + gresource_prefix = '/org/astralco/GGate' endif conf = configuration_data() @@ -43,13 +43,9 @@ subdir('data/images') exclude_pycache_dirs = [] foreach d : run_command( - py_installation, '-c', - ''' -import os -for root, dirs, files in os.walk("ggate"): - if os.path.basename(root) == "__pycache__": - print(os.path.relpath(root, "ggate").replace("\\", "/")) - ''', + find_program('sh'), + files('build-aux/meson-exclude-pycache.sh'), + 'ggate', check: true ).stdout().strip().split('\n') if d != '' @@ -64,8 +60,11 @@ install_subdir('ggate', exclude_files: ['*.pyc'] ) -# gnome.post_install( -# glib_compile_schemas: true, -# gtk_update_icon_cache: true, -# update_desktop_database: true, -# ) \ No newline at end of file +# Update desktop/icon caches only when not building inside a sandbox (Flatpak/Snap) +if not get_option('prefix').startswith('/app') and not get_option('prefix').startswith('/snap') + gnome.post_install( + glib_compile_schemas: true, + gtk_update_icon_cache: true, + update_desktop_database: true, + ) +endif \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ffaab30..7c49874 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,8 +13,7 @@ dependencies = [ "pygobject (>=3.52.3,<4.0.0)", "packaging (>=25.0)", "python-igraph (>=0.11.9,<0.12.0)", - "shapely (==2.1.1)", - "meson-python (>=0.18.0,<0.19.0)", + "shapely (>=2.1.1,<3.0.0)", ] [tool.ruff.lint] From 14693f10999cfffff31966aad38ae0fd659dc1e1 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 17:56:55 +0100 Subject: [PATCH 18/37] build: portable resource pipeline, dynamic dev gresource, CI tarball run.py regenerates and compiles dev-resources.gresource from the asset dirs each launch so it can't go stale. Replace non-portable find|sed/inline-python globbing with shell helpers, fix the prefix shadowing, and add a Fedora-based GitHub Actions workflow that produces a meson dist tar.gz. Document the flow. Co-Authored-By: Claude Opus 4.8 --- run.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/run.py b/run.py index dcb950a..1ea0f5a 100755 --- a/run.py +++ b/run.py @@ -1,5 +1,4 @@ #!/usr/bin/python3 -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- # # Copyright (C) Koichi Akabe 2012 # @@ -19,16 +18,71 @@ import gi import sys +import os +import subprocess -gi.require_version("Gtk", '4.0') -gi.require_version('PangoCairo', '1.0') +gi.require_version("Gtk", "4.0") +gi.require_version("PangoCairo", "1.0") gi.require_version("Adw", "1") from gi.repository import Gio from ggate.MainFrame import GLogicApplication from ggate import __version__ + +def build_dev_resources(): + import glob + base = os.path.dirname(os.path.abspath(__file__)) + images_dir = os.path.join(base, "data", "images") + xml = os.path.join(images_dir, "dev-resources.xml") + target = os.path.join(base, "dev-resources.gresource") + + comp_files = sorted(glob.glob(os.path.join(images_dir, "components", "*.svg"))) + act_files = sorted(glob.glob(os.path.join(images_dir, "actions", "*.svg"))) + theme_files = sorted(glob.glob(os.path.join(base, "data", "themes", "*.json"))) + + icon_lines = [] + for f in comp_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + icon_lines.append(f" {rel}") + for f in act_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + icon_lines.append(f" {rel}") + + theme_lines = [] + for f in theme_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + basename = os.path.basename(f) + theme_lines.append(f" {rel}") + + xml_content = ( + "\n" + "\n" + " \n" + + "\n".join(icon_lines) + + "\n \n" + " \n" + + "\n".join(theme_lines) + + "\n \n" + "\n" + ) + + try: + with open(xml, "w", encoding="utf-8") as f: + f.write(xml_content) + except OSError: + pass + + try: + subprocess.run( + ["glib-compile-resources", "--sourcedir", images_dir, "--target", target, xml], + check=True, + ) + except (OSError, subprocess.CalledProcessError): + pass + if __name__ == "__main__": + build_dev_resources() resource = Gio.Resource.load("./dev-resources.gresource") resource._register() From c42b081d3083317b4f7984b4ffb3b43b91267047 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:18:11 +0100 Subject: [PATCH 19/37] style: tidy build-script comments Co-Authored-By: Antigravity --- .agents/README.md | 28 +- .agents/TODO.md | 218 +++++-------- .agents/build-system-analysis.md | 198 ------------ .agents/plans/component-animation.md | 213 ------------- .agents/plans/preferences-revamp.md | 279 ----------------- .agents/plans/theming.md | 330 -------------------- .agents/plans/timing-diagram-revamp.md | 211 ------------- .agents/reference/build-system-analysis.md | 35 +++ .agents/{ => reference}/delegation-brief.md | 3 - .agents/skills/glc-format/SKILL.md | 153 +++++++++ CLAUDE.md | 14 +- 11 files changed, 298 insertions(+), 1384 deletions(-) delete mode 100644 .agents/build-system-analysis.md delete mode 100644 .agents/plans/component-animation.md delete mode 100644 .agents/plans/preferences-revamp.md delete mode 100644 .agents/plans/theming.md delete mode 100644 .agents/plans/timing-diagram-revamp.md create mode 100644 .agents/reference/build-system-analysis.md rename .agents/{ => reference}/delegation-brief.md (91%) create mode 100644 .agents/skills/glc-format/SKILL.md diff --git a/.agents/README.md b/.agents/README.md index 50ab28b..43f4562 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -1,11 +1,24 @@ -# `.agents/` — GGate GTK4 documentation database +# `.agents/` — agent working docs for GGate -Curated reference for building GGate (logic-circuit simulator, **GTK 4 + libadwaita**, -heavy **Cairo** canvas rendering). Scoped to the widgets/APIs this project actually uses, -not the whole toolkit. Built so an agent (agy / Gemini) can continue UI work without -re-deriving the toolkit from scratch. +Index of the working docs and reference material agents use on GGate +(logic-circuit simulator, **GTK 4 + libadwaita**, heavy **Cairo** canvas). -## How to use this database +## Directory map + +- `TODO.md` — working backlog (P-levels; Done at the bottom). +- `plans/` — forward-looking implementation plans (icons). +- `skills/` — actionable how-to: `developing-gtk-apps.md` (architecture/plumbing), + `designing-gnome-ui.md` (HIG), `glc-format/SKILL.md` (authoring `.glc` circuits; + self-contained, portable to external models). +- `reference/` — `delegation-brief.md` (read first when delegating: repo facts, + conventions, verification) and `build-system-analysis.md` (build audit). +- `gtk4/` — raw GTK4/libadwaita/Pango/Gio/Cairo API docs by namespace; index at + `gtk4/README.md`. + +## GTK4 documentation database — how to use + +Scoped to the widgets/APIs this project actually uses, not the whole toolkit, so an +agent can continue UI work without re-deriving it from scratch. 1. **Architecture / plumbing question** (lifecycle, threading, GSettings, actions, packaging, "app crashes/freezes") → `skills/developing-gtk-apps.md`. @@ -46,12 +59,13 @@ the official docs — read them directly. They are grouped by namespace: | `gtk4/gio/` | GIO — docs.gtk.org/gio | 2: SimpleAction, ListStore | | `gtk4/cairo/` | PyCairo — pycairo.readthedocs.io | 4: context, surfaces, patterns, matrix | -`skills/` holds two installable skills as authored guidance (not raw docs): +`skills/` holds three installable skills as authored guidance (not raw docs): | File | Covers | |------|--------| | `skills/developing-gtk-apps.md` | App architecture, lifecycle, threading, GSettings, packaging | | `skills/designing-gnome-ui.md` | GNOME HIG, widget selection, UI polish | +| `skills/glc-format/SKILL.md` | GGate GLC circuit file format specification and catalog | > Pages are full HTML (nav chrome included) — read the class's *Constructors / Methods / > Properties / Signals* sections. To refresh or add a class, curl the canonical URL, e.g. diff --git a/.agents/TODO.md b/.agents/TODO.md index bcc5f93..f3ead9e 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -1,154 +1,96 @@ # GGate — working backlog -Consolidated from the root `TODO` file, inline `# TODO` markers, and agy's project scan. -Status legend: `[ ]` open · `[~]` in progress · `[x]` done. Items marked **(verify)** are -from the scan, confirm against current code first. Owner model: Claude specs → agy -implements → Claude reviews. - -## ✅ Done (committed: `b87a01a`, `acc8344`, + this commit) - -App launches and is usable: -- [x] **App launches on GTK4/libadwaita** — imported/instantiated `StatusDisplay` - (`statusbar`); `add-net.png` → `list-add-symbolic` placeholder. -- [x] **Main window chrome → `Adw.ToolbarView`** (`add_top_bar` + `set_content`); removed - the unsupported `set_titlebar`/`set_child`. -- [x] **PropertyWindow API drift fixed** — `set_component`→`show_properties(comp, parent)`; - `present(parent)`; `hide()`→`close()`; removed `set_transient_for`/`set_hide_on_close`/ - `set_modal` and the destroy-and-recreate-on-hide block; removed duplicate signal connects. -- [x] **PropertyWindow `closed` signal** (was `close-request`) + `vbox`/`component` init. -- [x] **Adw row signals** — `ComboRow`→`notify::selected`, `SpinRow`→`notify::value`. -- [x] **Float SpinRow crash** — proper positive `step` + `set_digits` (was passing digits as step → step 0 → NULL). -- [x] **PropertyGroup builder** — dropped `get_children()` (use a per-group count) and fixed - the group-assignment bug that dropped the first control of each group / desynced - `prop_controls`. -- [x] **AlertDialogs close crash** — `add_responses(*…)` → loop `add_response(id, label)`. -- [x] **Simulation `IndexError`** — `net_levels` now sized to `net_connections` in - `analyze_net_connections` + `initialize_logic`; also fixed `Exporter` calling the - non-existent `analyze_connections()`. -- [x] **Context-menu positioning** — use `translate_coordinates` (drawingarea→parent) - instead of manual scroll subtraction; menu now lands at the cursor. -- [x] **Feature: content centering** on app start / new / open (center on component bbox, - or canvas middle when empty). -- [x] **Feature: auto-center on resize** + Preferences toggle (`autocenter_resize`, default ON). -- [x] **Libadwaita styling** — `do_startup` chains to `Adw.Application` (was `Gtk.Application`, - which skipped the Adwaita stylesheet → plain-GTK look). -- [x] **Property dialog UX** — `Adw.ToolbarView` (working close button), guarded `dismiss()`, - dropdowns not searchable, removed redundant per-row group label. -- [x] **Clipboard guard** — `_handle_clipboard` handles "no compatible transfer format" GError. -- [x] **Single-click selects, double-click opens properties** (gesture `n_press`). -- [x] **Running-mode crashes** — guarded `prop_window` close; timing-diagram toggle uses the - real `timing_diagram` attribute; `Diagram.draw()` `int()`-casts cairo surface dims (+ clamp - 32767), registers its draw funcs, fixes cursor typo + undefined `diagram_width`/`img_height`. - -## P0 — still open - -- [ ] **`bin/ggate.in` missing imports** (`gi`/`Gio`/`os`). `bin/ggate.in:16`. Not hit yet - (we run via `run.py`), but breaks installed launch. **(verify)** -- [ ] **Version mismatch** — `pyproject.toml`/`meson.build` say `5.0.0`; `config.py`/ - `__init__.py` hardcode `4.0.0`. Pick one source of truth (meson `configure_file` → `config.py`). -- [~] **About doesn't work** — `AboutGGate.create()` never imported/instantiated/presented; - the `app.about`/menu action does nothing (or errors). Wire it: build `AboutGGate.create()` - and `present(window)`. Duplicate `set_comments` call in `About.py`. (agy fixing now.) - -## P1 — micro-windows / polish - -### `Windows/Properties.py` -- [ ] Rebuilds all widgets + re-`present()` on every `show_properties`; old children leak. - Consider building once / reusing, and an `Adw.ToolbarView` layout for the dialog itself. -- [x] ~~`set_width_chars` on `Adw.EntryRow`~~ — **not a bug**: `EntryRow` implements - `GtkEditable`, which provides `set_width_chars`. Left as-is (no crash). - -### `MainFrame` window chrome -- [ ] **`Gtk.HeaderBar` vs `Adw.HeaderBar`** — header is `Gtk.HeaderBar` with - `set_use_native_controls(True)` (native macOS controls). Works in `ToolbarView`; - `Adw.HeaderBar` would integrate better but drop native controls. Design call. - -### Centering -- [ ] **Initial centering is gated by the resize preference** — when `autocenter_resize` is - OFF, the first-paint centering at startup is also skipped (corner instead of centered). - Spec was "initial always, resize gated." Split initial-vs-resize if we want it strict. - -### `Windows/Preferences.py` -- [ ] **Revamp the Preferences UI to a multi-tab/category layout.** Migrate off the deprecated - `Gtk.Dialog` to `Adw.PreferencesDialog` with multiple `Adw.PreferencesPage`s (tabs) grouping - settings by category — e.g. **Theming/Appearance** (colors, fonts, symbol type), and other - groups (simulation: iters/duration; canvas: auto-center; etc.). Use `Adw.PreferencesGroup` - + the appropriate Adw rows (`SwitchRow`, `ComboRow`, `SpinRow`, color/font buttons). Preserve - all existing settings + load/apply wiring. **agy to draft the plan (page/group breakdown, - row mapping); Claude coordinates/reviews.** -- [ ] `:24` `# todo: fix font picker`. - -### `Windows/TimingGraph/Display.py` + `Diagram.py` -- [ ] `Display` never adds the diagram canvas as a child → blank dialog; `.present()` - called without a parent. **(verify)** -- [ ] `Diagram` never registers `name_area_draw_fn` / `chart_area_draw_fn` via - `set_draw_func()` → draw fns never run. **(verify)** -- [ ] Diagram TODOs (`:135,:148,:170,:179,:210`): stroke/fill colors, name-area border, - division strokes, text color, tick colors. - -### Minor watch-items -- [ ] `AlertDialogs` is one instance that re-adds the same response IDs every time an alert - opens → may emit a duplicate-response warning on the 2nd+ alert. Not a crash. - -## P2 — dead code / hygiene - -- [ ] **Proper GTK icon asset management (replaces the `_get_icon_path` `__file__` hack).** - Context-menu `verb-icon` + toolbar action icons must be **themed icon names** via the icon - theme, not filesystem paths. Approach: (1) bundle action SVGs in gresource at a clean - freedesktop layout (`/scalable/actions/.svg`); (2) register on the icon theme - at startup — `Gtk.IconTheme.get_for_display(display).add_resource_path("")` — - replacing the vestigial `themed_icons.add_search_path(config.DATADIR + "/images")`; - (3) reference icons by name in `MenuPopover.menu_xml` and delete `_get_icon_path`. - Requires fixing the gresource manifest (`dev-resources.xml`, `resources.xml.in`, maybe - `meson.build`) — currently nested under `…/scalable/actions/` then re-filed as `actions/*` - (double "actions") and `components/*` (misfiled) — and a dev-vs-release-aware resource base - in `config`. Scope TBD: action icons only, or also component palette. The current - `_get_icon_path` is a temporary dev-only patch. -- [ ] Remove GTK3 leftovers: `ggate/TimingDiagramWindow.py`, `ggate/DiagramArea.py` - (confirm no imports first). `DiagramArea.py:205` TODO. -- [ ] `ggate/Components/Managers/Exporter.py` is a dead stub; real exporter is - `ggate/Exporter.py`. Remove stub or consolidate. -- [ ] Commented-out translator-credits block `MainFrame.py:~569-570`; commented gnome - post-install in `meson.build:59-63`. -- [ ] Style inconsistency: 2-space vs 4-space indent; mixed quotes; stale - `indent-tabs-mode: t` headers. (Convention: double quotes, no comments.) +Status legend: `[ ]` open · `[~]` in progress · `[x]` done. **(verify)** = confirm +against current code first. Owner model: Claude specs → agy implements → Claude reviews. +Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brief.md`, +`plans/`, `skills/glc-format/SKILL.md`. + +## P1 — polish + +- [ ] **Timing diagram visual polish** (PM: "not looking great"). Dense oscillator waveforms + read as a picket-fence and the hi/lo amplitude is small; large empty tail (data ends at the + oscillator duration but range defaults to 200µs) and dead vertical space below the rows. + Ideas: default the time range to the actual data extent; increase waveform amplitude within + each row; a saner default zoom for high-frequency signals. +- [ ] **`Windows/Properties.py`** rebuilds all widgets + re-`present()` on every + `show_properties` (old children leak). Build once / reuse; consider `Adw.ToolbarView`. +- [ ] **Header bar** — `Gtk.HeaderBar` + `set_use_native_controls(True)` (native macOS + controls) vs `Adw.HeaderBar` (better integration, loses native controls). Design call. +- [ ] **Initial centering gated by resize pref** — when `autocenter_resize` is OFF, first-paint + centering is also skipped. Split initial-vs-resize if we want it strict. +- [ ] `Preferences.py:` font picker TODO. +- [ ] `AlertDialogs` single instance re-adds response IDs each open (possible duplicate-response + warning; not a crash). + +## P2 — icons & dead code + +- [ ] **Icon system** (plan: `plans/icon-creation.md`, specced incl. per-component visuals). + Implement: `bin/generate-gate-icons.py` (programmatic SVGs, ANSI+IEC), gresource→freedesktop + layout with aliases (reuse the proven dynamic-glob+`alias` pattern from theming), + `IconTheme.add_resource_path` at startup, switch `ComponentView`/`MenuPopover` from filesystem + paths to icon-name lookups, delete `_get_icon_path`. **(BLOCKER for installed runs: + `ComponentView`/`MenuPopover` still use `__file__`/`DATADIR` filesystem icon paths.)** +- [ ] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ + actions/` with components misfiled there too (double "actions" / misfile). Tidy into a clean + freedesktop layout, dev + installed in sync. +- [ ] Remove GTK3 leftovers (confirm no imports first): `ggate/TimingDiagramWindow.py`, + `ggate/DiagramArea.py` — now safe since the timing dialog was rewritten. +- [ ] Remove dead stub `ggate/Components/Managers/Exporter.py` (real one is `ggate/Exporter.py`). +- [ ] Style: residual 2-vs-4-space indent, mixed quotes, stale `indent-tabs-mode` headers in + older files (new work follows: double quotes, comments per the `comment-style` memory). +- [ ] Commented-out translator-credits block in `MainFrame.py`. ## Build & packaging -Full analysis in `.agents/build-system-analysis.md`; icon work planned in -`.agents/plans/icon-creation.md`. - -- [x] **`bin/ggate.in` missing imports** (os/Gio) — fixed. -- [x] **Version mismatch** — config.py/__init__.py bumped to 5.0.0 (match pyproject/meson). -- [x] **App-id casing** — `GLogicApplication` uses `config.APP_PREFIX` (`org.astralco.GGate`); - desktop file renamed to match; setup.py refs updated. -- [x] **meson.build portability** — non-portable `sh -c find|sed` → portable Python `os.walk`. -- [ ] **[BLOCKER] Runtime asset paths** — `ComponentView`/`MenuPopover` use filesystem icon - paths (the `__file__`/`DATADIR` hacks) that break when installed. Coupled to the icon work - below — fix as part of the gresource/icon-theme migration. -- [ ] **gresource → freedesktop icon-theme layout** — see the P2 icon-asset item + the icon - plan; currently double-nested `…/scalable/actions/actions/*` and misfiled `components/*`. +- [ ] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` draws the clock trigger bubble at + the `SL` coordinate (`outpin_b + 20`) instead of `CK` (`outpin_b + 40`). (Found during icon recon.) - [ ] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths — must keep the dev `run.py` path working (no meson step in dev). -- [ ] **Desktop file install via meson** — confirm meson actually installs the (renamed) - desktop file + AppStream metadata, not just legacy `setup.py`. +- [ ] **Desktop file + AppStream install via meson** — confirm meson installs the (renamed) + desktop/metadata, not just legacy `setup.py`. +- [ ] **Unify dev vs installed resource source** — dev XML is generated by `run.py`, installed + by `resources.xml.in` + meson glob; consider a single shared generator so they can't diverge. - [ ] **Flatpak** — decouple pip deps from network (`flatpak-pip-generator`) for offline build. - [ ] **Snapcraft** — remove remote `curl|python3` scripts; drop hardcoded prefix. -- [ ] Nice-to-have: relax `shapely` pin; pyproject/meson cleanup. +- [ ] Relax `shapely` pin / pyproject cleanup (partly done — confirm). ## P3 — feature backlog -- [ ] Animate logic circuit. -- [ ] **Native SVG icon set (gemini to build later).** Check for a usable open/licensed pack; - if none fits (logic-gate symbols are domain-specific), author SVGs matching the existing - `data/images/**.svg` style. Scope: PNG-only component icons - (`led, not, osc, probe, sw, tribuff, vdd, xor`) + the toolbar icons (`add-net`, - `add-component`, currently a `list-add-symbolic` placeholder). Consider rendering component - icons from each component's Cairo `drawComponent` via `cairo.SVGSurface`. +- [ ] Animate logic circuit during simulation. +- [ ] Auto-scroll the timing diagram to follow the latest timestamp while running (deferred from + the timing plan §6 Q1). -## Other inline TODOs +## Inline TODOs -- [ ] `Managers/Alerts.py:8`, `MainFrame.py:374` — i18n/translations. +- [ ] `Managers/Alerts.py:8`, `MainFrame.py` — i18n/translations. - [ ] `Managers/FileManager.py:104` — implement schematics export. -- [ ] `MainFrame.py:491` — toast on clipboard parse failure. +- [ ] `MainFrame.py` — toast on clipboard parse failure. - [ ] `DrawArea.py:516` — optimize redraw. + +## ✅ Done + +Earlier work (app launches, dialogs migrated, sim/crash fixes) — see git history +`a0c0edc`…`a078fb1`. Recent (this development cycle): + +- [x] **Timing diagram revamp** — `Display.py` (`Adw.Dialog` + `ToolbarView`, scale/range/ + save toolbar) and `Diagram.py` (synced scrolls, pure `set_draw_func` rendering, gesture + scrubbing, empty-history placeholder) rewritten; renders waveforms theme-aware. +- [x] **Theming system** — built-in themes (Classic/Space/Frappé/Mocha) as JSON in + `data/themes/`, globbed into the gresource and discovered dynamically at runtime; + `Themes.py` registry + `apply_theme`/`apply_chrome`; theme picker in Preferences. +- [x] **Preferences revamp** — migrated to `Adw.PreferencesDialog` with multiple pages + (Appearance/Theme/Simulation/Canvas) and Adw rows. +- [x] **Theme picker fixed** — model rebuilt from registry (chevron shows), selection no + longer reverts to Custom. +- [x] **Oscillator timing + gate sim safety** — `analyze_logic` runs at run start so + oscillators populate history; gates compute via `all/any/sum` (no IndexError on + unconnected pins); `.glc` property types load correctly (`parse_section`). +- [x] **Dev gresource never stale** — `run.py` regenerates + compiles `dev-resources.gresource` + from the asset dirs each launch. +- [x] **Build portability** — non-portable `find|sed`/inline-python globbing → shell helpers; + `prefix` shadowing fixed; `RUNNING_FROM_SOURCE` replaces vague `DEV_MODE`. +- [x] **CI** — Fedora-container GitHub Actions workflow produces a `meson dist` `tar.gz`. +- [x] **About dialog wired** (`on_action_about_pressed` → `AboutGGate.create().present`). +- [x] **Version unified** — `config.py`/`__init__.py`/`pyproject`/`meson` all `5.0.0`. +- [x] **bin/ggate.in** imports + version string correct. +- [x] **`.glc` format spec** documented (`skills/glc-format/SKILL.md`). diff --git a/.agents/build-system-analysis.md b/.agents/build-system-analysis.md deleted file mode 100644 index 53ab55f..0000000 --- a/.agents/build-system-analysis.md +++ /dev/null @@ -1,198 +0,0 @@ -# GGate Build & Packaging System Analysis - -This document provides a read-only analysis of the GGate logic-circuit simulator's build, packaging, and runtime asset-handling configurations. - ---- - -## 1. Meson Build Setup - -### Description of Existing Setup -The project uses **Meson** as its primary build configuration system: -- **Root `meson.build`**: Defines the project `ggate` with version `5.0.0` and minimum Meson version `1.4.0`. - - It checks for external system dependencies: `pygobject-3.0`, `gtk4 >= 4.16.0`, and `libadwaita-1 >= 1.6.8`. - - It uses python's `find_installation` module check to ensure that required library imports (`gi`, `cairo`, `packaging`, `igraph`, `shapely`) are present in the target Python environment. - - It defines a `profile` option via `meson_options.txt`. If the profile is `development` (the default), the app-id is `org.astralco.GGate.Dev` and the resource prefix is `/org/astralco/GGate/Dev`. If `release`, the app-id is `org.astralco.GGate` and the prefix is `/org/astralco/GGate`. - - It configures build variables via `configuration_data()` (setting `PYTHON`, `VERSION`, `bindir`, and `pkgdatadir`). - - Python sources are installed recursively using `install_subdir('ggate')` directly into Python's `site-packages` directory. It uses a shell callout via `run_command` with Unix tools (`find` and `sed`) to compute which `__pycache__` directories to exclude, along with excluding `*.pyc`. - - Commented-out post-install triggers for desktop files, schemas, and icon caches are present at the bottom. -- **`bin/meson.build`**: Uses `configure_file` to interpolate build variables into `bin/ggate.in`, yielding an executable python file `ggate` installed to the system binary directory (`bindir`) with execute permissions. -- **`data/images/meson.build`**: - - Generates `resources.xml` from `resources.xml.in` by dynamically inserting `@ICON_FILES@` (compiled from a list of SVGs in `components/` and `actions/`) and the profile-specific `@PREFIX@`. - - Compiles the generated XML into a binary GResource bundle `ggate-resources.gresource` using `gnome.compile_resources` and installs it to the package data directory (`pkgdatadir`). - - Directly copies raw SVGs into `pkgdatadir / 'icons'` via `install_subdir`. - -### Issues, Inconsistencies & Risks -* **Issue 1.1: Brittle Python Cache Exclusion (Unix-dependent)** - * **Severity**: `should-fix` - * **Details**: Root `meson.build` calls a shell command (`find ggate -type d -name __pycache__ | sed ...`) to construct directory exclusion lists. This is not portable (will fail on Windows) and depends on the configuration-time state of the repository. If configured in a completely clean repository, no directories will be found, but subsequent builds or updates might generate cache files that bypass the exclusion because it was computed statically at configure time. - * **Recommended Fix**: Rely on python's built-in packaging tools, or use Meson's native filesystem functions/Python helper script to filter directories portably. -* **Issue 1.2: Local Variable `prefix` Shadowing** - * **Severity**: `nice-to-have` - * **Details**: In root `meson.build`, a local variable is named `prefix` (used for GResource prefix paths). Meson has a built-in option `prefix` representing the installation base path (e.g. `/usr`). This naming overlap is confusing for developers. - * **Recommended Fix**: Rename the local variable `prefix` to `gresource_prefix`. -* **Issue 1.3: Commented-out Post-Install Actions** - * **Severity**: `should-fix` - * **Details**: `gnome.post_install` is commented out. On direct system installs (e.g., Linux distro packaging), the desktop icon database, GLib schemas, and mime databases will not update immediately, requiring manual system restarts or command execution to display app icons. - * **Recommended Fix**: Uncomment `gnome.post_install` and guard it so it only executes when not building for sandboxed targets (like Flatpak). - ---- - -## 2. Entry Points - -### Description of Existing Setup -There are two main entry points in GGate: -- **`run.py` (Development Mode)**: - - Initializes PyGObject requirements (`Gtk 4.0`, `PangoCairo 1.0`, `Adw 1`). - - Loads the compiled resource bundle `./dev-resources.gresource` directly from the current working directory. - - Registers the resource model with `resource._register()`. - - Instantiates and runs `GLogicApplication`. -- **`bin/ggate.in` (Installed Mode)**: - - Shebang is interpolated to point to the build environment's Python path. - - Receives package datadir `@pkgdatadir@` via Meson template compilation. - - Attempts to load resources from `os.path.join(pkgdatadir, "ggate-resources.gresource")` and register them. - - Instantiates and runs `GLogicApplication`. - -### Issues, Inconsistencies & Risks -* **Issue 2.1: Missing Imports in Installed Executable (Crash on Launch)** - * **Severity**: `blocker` - * **Details**: `bin/ggate.in` references `Gio.Resource` and `os.path.join` but fails to import the `Gio` repository or the standard `os` library. It only imports `gi` and `sys`. - * **Recommended Fix**: Add `import os` and `from gi.repository import Gio` to `bin/ggate.in`. -* **Issue 2.2: Inconsistent CLI `--version` Output** - * **Severity**: `nice-to-have` - * **Details**: `run.py` prints `GGate {__version__}` (no prefix letter), whereas `bin/ggate.in` prints `GGate: v{__version__}`. - * **Recommended Fix**: Standardize the console formatting across both launcher files. - ---- - -## 3. Resources & GResource Bundling - -### Description of Existing Setup -- **`data/images/dev-resources.xml`**: Checked into git. Hardcodes the prefix `/org/astralco/GGate/Dev/data/icons/scalable/actions/`. -- **`data/images/resources.xml.in`**: Configured by Meson. Prefix template is `@PREFIX@/data/icons/scalable/actions/` (resolving to `/org/astralco/GGate/data/icons/scalable/actions/` in release). -- Both resource structures package: - - Component SVGs (e.g. `components/7seg.svg`) - - Action SVGs (e.g. `actions/flip-horizontal.svg`) - -### Issues, Inconsistencies & Risks -* **Issue 3.1: Non-standard Path Hierarchy Breaking Icon-Theme Discovery** - * **Severity**: `should-fix` - * **Details**: Modern GTK4 apps rely on `Gtk.IconTheme` to automatically discover assets compiled into application GResource bundles under the standard Freedesktop structure: `/org/astralco/GGate/icons/hicolor/[size]/[context]/[name].[ext]`. - GGate's resource structure breaks this in multiple ways: - 1. It introduces a redundant `data/` subdirectory (yielding `/data/icons/` instead of `/icons/`). - 2. It completely omits the theme directory (e.g. `hicolor`). - 3. It causes double-directory naming for action items (`.../scalable/actions/actions/flip-horizontal.svg`). - 4. It misfiles components under the action prefix path (`.../scalable/actions/components/7seg.svg`). - Because of this layout, GTK's automatic icon theme lookup fails. The application is forced to resolve absolute file system paths or use custom workarounds to load images. - * **Recommended Fix**: Redesign the GResource structure. Use standard Freedesktop folder hierarchies in the XML file (e.g. `@PREFIX@/icons/hicolor/scalable/actions/` and `@PREFIX@/icons/hicolor/scalable/devices/`) and use GResource `alias` attributes to strip directory prefixes from resource IDs (e.g., mapping `actions/rotate-left.svg` to the resource name `rotate-left.svg` under the actions prefix). - ---- - -## 4. Configurations & Versioning - -### Description of Existing Setup -- **`ggate/config.py`**: A static Python file. It defines the application version (`VERSION = "4.0.0"`), base application ID prefix (`APP_PREFIX = "org.astralco.GGate"`), and runtime directory path (`DATADIR = '/'.join(__file__.split("/")[:-1]) + '/'`). -- **`ggate/__init__.py`**: Hardcodes the package variable `__version__ = '4.0.0'`. -- **`GLogicApplication`**: Instantiated with `application_id="org.astralco.ggate"`. - -### Issues, Inconsistencies & Risks -* **Issue 4.1: Out-of-sync Static Versions** - * **Severity**: `should-fix` - * **Details**: Versioning is hardcoded statically in `config.py` and `__init__.py` as `4.0.0`, while `meson.build` and `pyproject.toml` specify `5.0.0`. This discrepancy can break compatibility validation (`config.is_compatible`) and report inaccurate versions in package managers. - * **Recommended Fix**: Make `config.py` a generated configuration file (e.g., `config.py.in` compiled by Meson's `configure_file`) to dynamically ingest version numbers from `meson.build` at compile time. -* **Issue 4.2: Application ID Casing Inconsistency** - * **Severity**: `should-fix` - * **Details**: - - The D-Bus ID and desktop filename expect `org.astralco.GGate` (CamelCase). - - `GLogicApplication` initializes using the lowercase `org.astralco.ggate`. - - Meson builds with `org.astralco.GGate` (or `org.astralco.GGate.Dev`). - This mismatch breaks window management integration under Wayland (the compositor cannot match the window class to the desktop file, resulting in default fallback window icons) and prevents `Gtk.IconTheme` from automatically mapping resource paths. - * **Recommended Fix**: Standardize on `org.astralco.GGate` (and `org.astralco.GGate.Dev` for dev profiles) across the GLogicApplication codebase and resource path naming. - ---- - -## 5. `pyproject.toml` Build Configurations - -### Description of Existing Setup -- Uses `meson-python` (backend `mesonpy`) for PEP-517 compliance. -- Defines package dependencies: `pycairo`, `pygobject`, `packaging`, `python-igraph`, `shapely`, and `meson-python`. -- Target python environment requires `>= 3.10, < 4.0`. - -### Issues, Inconsistencies & Risks -* **Issue 5.1: Rigid `shapely` Dependency Version Pin** - * **Severity**: `should-fix` - * **Details**: In `pyproject.toml`, `shapely` is pinned exactly to `==2.1.1`. Strict equal pins in Python packages can cause install dependency conflicts on newer distributions or in setups that require slightly different micro-versions of shapely. - * **Recommended Fix**: Relax the constraint to a compatible range, such as `shapely (>=2.1.1, <3.0.0)`. -* **Issue 5.2: Redundant Runtime Dependency** - * **Severity**: `nice-to-have` - * **Details**: `meson-python` is listed as a runtime dependency (`dependencies`) in addition to being a build-system requirement. It is not needed at runtime. - * **Recommended Fix**: Remove `meson-python` from the runtime `dependencies` array. - ---- - -## 6. Distribution Configurations - -### Description of Existing Setup -- **Flatpak (`build-aux/flatpak/org.astralco.GGate.json`)**: - - Targets GNOME 47 runtime environments. - - Builds in two modules: standard `python-modules` (via pip) and the root `ggate` repository (via Meson). -- **Snapcraft (`build-aux/snapcraft/snapcraft.yaml`)**: - - Uses `core22` base snap. - - Installs requirements using Poetry inside an `override-build` script, followed by the Meson build stage. - -### Issues, Inconsistencies & Risks -* **Issue 6.1: Desktop File and Flatpak App ID Mismatch** - * **Severity**: `should-fix` - * **Details**: The Flatpak manifest expects the application ID `org.astralco.GGate`. It compiles the repo but the desktop launcher in `data/` is named `org.astralco.ggate.desktop` (lowercase). This name conflict will prevent Flatpak exports from displaying the desktop file on the host machine. - * **Recommended Fix**: Rename `data/org.astralco.ggate.desktop` to `org.astralco.GGate.desktop`. -* **Issue 6.2: Unsandboxed Pip Network Usage in Flatpak** - * **Severity**: `should-fix` - * **Details**: The flatpak manifest uses `--share=network` and `pip install` to install python dependencies. Flathub builds must run fully offline for security and reproducibility. - * **Recommended Fix**: Use `flatpak-pip-generator` to create a static list of verified source mirrors with SHA hashes for python dependencies. -* **Issue 6.3: Unsafe/Brittle Poetry Installer in Snapcraft** - * **Severity**: `should-fix` - * **Details**: The snapcraft recipe retrieves Poetry via `curl` from a remote location and pipes it to python (`curl -sSL https://install.python-poetry.org | python3 -`). This is insecure and fragile, and it can easily fail if internet access is interrupted or remote domains modify the payload. - * **Recommended Fix**: Install python dependencies via the native Snapcraft python plugins or pip packages. -* **Issue 6.4: Non-Relocatable Prefix in Snapcraft** - * **Severity**: `should-fix` - * **Details**: Snapcraft passes `--prefix=/snap/ggate/current/usr` as a Meson parameter. Snaps should be built with relative/relocatable paths, as hardcoding the current snap mount point path can cause layout issues if a system runs alternative channels. - * **Recommended Fix**: Let Snapcraft handle the target prefix path automatically without passing a static meson-parameter. - ---- - -## 7. `DATADIR` and Runtime Asset-Path Handling - -### Description of Existing Setup -- **`ggate/config.py`**: Resolves `DATADIR` relative to the current module file `ggate/config.py` (which points inside the `ggate/` directory). -- **`ggate/ComponentView.py`**: Attempts to locate gate assets by joining `config.DATADIR` with `"images", "components"`. -- **`ggate/MainFrame.py`**: Adds `config.DATADIR + "/images"` to the GTK Icon Theme search paths. -- **`ggate/MenuPopover.py`**: Resolves `_PROJECT_ROOT` based on module layout and builds hardcoded paths targeting `data/images/actions/*.svg`. - -### Issues, Inconsistencies & Risks -* **Issue 7.1: Broken Development and Installed Icon Paths** - * **Severity**: `blocker` - * **Details**: - 1. **Development**: `config.DATADIR` resolves to the `ggate/` folder. Since the folder `ggate/images/` does not exist in the source repository (all source images are in `data/images`), search paths resolved by `ComponentView` and `MainFrame` point to non-existent locations, failing to load icons. - 2. **Installed**: `config.DATADIR` resolves to python's site-packages path (e.g. `/usr/lib/python3/dist-packages/ggate/`). The actual assets are installed to the system prefix (e.g., `/usr/share/ggate/icons/components`), meaning the application will look in `/usr/lib/.../ggate/images/` and fail to load icons. - 3. **MenuPopover**: The context menu icon path `_PROJECT_ROOT/data/images/actions/` works in dev because `_PROJECT_ROOT` resolves to the workspace directory. When installed, `_PROJECT_ROOT` becomes `/usr/lib/python3/dist-packages/`, causing context menu icon resolution to fail. - * **Recommended Fix**: This is the single biggest risk to GGate's deployment: - - Eliminate the direct file path lookup workarounds (`_get_icon_path` and `config.DATADIR` hacks). - - Align GResource folder layouts with standard Freedesktop icon theme conventions (see Issue 3.1). - - Initialize resources at startup and load all assets strictly by name (`Gtk.Image.new_from_icon_name`) or via resource URLs (`resource:///...`), allowing GTK to handle resolution. - ---- - -## Prioritized Punch-List - -This punch-list is ordered by severity and structural impact to ensure the application builds, packages, and runs correctly both in local development and installed environments. - -1. **[BLOCKER] Fix missing imports in `bin/ggate.in`** (Issue 2.1). Add `import os` and `from gi.repository import Gio`. -2. **[BLOCKER] Resolve runtime asset path failures** (Issue 7.1). Eliminate direct filesystem path lookups in `ComponentView.py` and `MenuPopover.py`. -3. **[SHOULD-FIX] Align GResource structures with Freedesktop icon theme standards** (Issue 3.1). Re-file resources under `@PREFIX@/icons/hicolor/scalable/` and use resource aliases. -4. **[SHOULD-FIX] Standardize Application ID casing** (Issue 4.2). Rename hardcoded instances of `org.astralco.ggate` to `org.astralco.GGate` (or `org.astralco.GGate.Dev`). -5. **[SHOULD-FIX] Generate `config.py` via Meson** (Issue 4.1). Replace static version and path values in `config.py` with variables configured via `configure_file`. -6. **[SHOULD-FIX] Rename Desktop File for Flatpak compliance** (Issue 6.1). Match the desktop file name to the App ID: `org.astralco.GGate.desktop`. -7. **[SHOULD-FIX] Prepare Flatpak for offline compilation** (Issue 6.2). Use `flatpak-pip-generator` to decouple dependencies from network-dependent pip execution. -8. **[SHOULD-FIX] Fix Snapcraft setup** (Issues 6.3 & 6.4). Remove remote `curl | python3` scripts and omit the hardcoded installation prefix. -9. **[SHOULD-FIX] Eliminate Unix-dependent shell call in `meson.build`** (Issue 1.1). Compute `exclude_directories` portably. -10. **[NICE-TO-HAVE] Relax dependency pins in `pyproject.toml`** (Issue 5.1). Use range restrictions instead of a rigid version pin for `shapely`. -11. **[NICE-TO-HAVE] Clean up pyproject/meson clutter** (Issues 1.2, 1.3, 2.2, 5.2). Standardize cli formatting, clean up comments, remove redundant dependency entries, and rename shadow variables. diff --git a/.agents/plans/component-animation.md b/.agents/plans/component-animation.md deleted file mode 100644 index 1da8af4..0000000 --- a/.agents/plans/component-animation.md +++ /dev/null @@ -1,213 +0,0 @@ -# GGate Canvas Component Animation Plan - -This document outlines the design, feasibility, and implementation plan for introducing smooth animated transitions (gliding) when logic components and nets snap to the grid in GGate. - ---- - -## 1. Feasibility Assessment - -### Verdict: YES (Highly Feasible) - -Animating component and net moves is fully feasible under the current GGate architecture without requiring fundamental structural changes to the logic simulation or the rendering pipeline. - -### Architectural Enablers - -1. **Draw loop structure (`ggate/DrawArea.py:on_draw`)**: - In `on_draw` (lines 351–386), the cached offscreen surface (`self.mpixbuf`) is **only** used to cache the background canvas color and the grid lines (lines 353–373). The components and nets are drawn *directly* on top of the rendered background onto the active widget context `cr` during every frame redraw (line 386): - ```python - [self.draw_component(cmp, cr, layout) for cmp in self.circuit.components] - ``` - This is a massive performance advantage: animating components only requires updating their visual coordinates and calling `self.queue_draw()`. The background grid does **not** need to be invalidated or re-rendered on the CPU, making redraws extremely cheap. -2. **Floating-Point Cairo rendering**: - Cairo drawing functions (such as `cr.translate(x, y)` used to position gates) natively accept floating-point values. This allows smooth, sub-pixel animations. -3. **Decoupled Grid Logic**: - Grid snapping calculations during drag/move are computed using basic modular arithmetic (`ddx - ddx % self.grid_step`) inside `on_motion`. Net splitting and connection logic are only evaluated on mouse release (`on_button_release_primary`). Thus, visual rendering during motion can be interpolated independently without breaking the underlying logical integrity of the circuit. - -### Friction Points & Challenges - -1. **Net representation**: - Logic gates are persistent objects subclassing `BaseComponent`, making it easy to store additional states. However, net segments are raw Python lists (`[const.component_net, x1, y1, x2, y2]`) that are modified in-place during dragging and frequently deleted, split, or combined on drop. The animation manager must track these lists safely via object references and clean them up when they are removed. -2. **History State deep-copy (`ggate/CircuitManager.py:undo/redo`)**: - Undo and Redo actions replace the entire list of components with deep copies (`self.components = copy.deepcopy(...)`). This changes all component object references instantly. Consequently, any active animation mapping keying off component object references will become stale. - ---- - -## 2. Core Mechanism - -The animation loop will be driven by the GTK4 Frame Clock rather than CPU-blocking timers (like `time.sleep` or high-overhead Python threads). - -### The Recommended Driver: `Gtk.Widget.add_tick_callback` - -To animate, we will register a tick callback on the `Gtk.DrawingArea` widget using: -```python -self.tick_id = self.drawingarea.add_tick_callback(self._on_tick) -``` -- **Frame-Rate Alignment**: The callback is called by GTK in sync with the GDK frame clock, matching the monitor's vertical refresh rate (v-sync). This ensures maximum fluidity. -- **Microsecond Precision**: The tick callback receives a `Gdk.FrameClock` object. Calling `frame_clock.get_frame_time()` returns monotonic microseconds, providing a jitter-free delta-time calculation. -- **Automatic Lifecycle**: Returning `GLib.SOURCE_REMOVE` (or `False` in Python) automatically removes the callback, avoiding idle CPU usage when no animations are active. - -### Alternative: Libadwaita `Adw.TimedAnimation` / `Adw.SpringAnimation` - -We evaluated using Libadwaita animations: -* **Pros**: Native C implementation, built-in physics curves (`Adw.SpringAnimation` behaves like a physical spring), and clean target-progress tracking. -* **Cons**: - * In PyGObject, creating a target callback via `Adw.CallbackAnimationTarget` introduces wrapper overhead, especially when animating dozens of gates and wires simultaneously. - * Starting/stopping dozens of concurrent animations creates multiple timers that are hard to coordinate and centralize. - * Adding references to `Adw` animation objects decreases portability if GGate components are ever rendered outside Adw widgets. - -**Recommendation**: Use a centralized `Gtk.Widget.add_tick_callback` on the canvas. It maintains a registry of all active visual animations and handles them in a single Python loop, offering superior control and minimal overhead. - ---- - -## 3. Design: Logical vs. Visual Decoupling - -To prevent animations from affecting circuit simulation, connections, or save-states, we must decouple the **logical position** (snapped integers) from the **visual position** (interpolated floats). - -```mermaid -graph TD - Cursor[Cursor Move] --> Snapped[Calculate snapped coordinates] - Snapped --> UpdateLogical[Update logical position: cmp.pos_x / cmp.pos_y] - UpdateLogical --> Registry[Register Animation: logical position is the Target] - Registry --> FrameClock[Frame clock tick callback updates visual_positions] - FrameClock --> Draw[on_draw: renders components at visual coordinates] -``` - -### Visual Position Registry -We will introduce an animation registry dictionary inside `DrawArea`: -```python -self.visual_positions = {} # Key: component obj or net list ref -> VisualState -``` - -- When a component/net `c` is drawn, `DrawArea` queries `self.visual_positions`. -- If a visual state exists, it uses those coordinates for rendering (e.g. translating the Cairo context). -- If it does not exist, it defaults to the logical position `(c[1].pos_x, c[1].pos_y)` and renders instantly. - -### Redraw Management -No modifications are required for the cached background surface `self.mpixbuf`. The background and grid lines remain cached. During an animation tick, we update the visual positions and call `self.queue_draw()`. The widget blits the background cache and draws all components dynamically at their current visual positions. - ---- - -## 4. Handling Edge Cases - -| Edge Case | Problem | Solution | -| :--- | :--- | :--- | -| **In-Flight Interruption (Re-grab)** | Component is clicked or dragged again while still gliding. | The animation target updates to the new cursor coordinate, but the starting position remains the current visual position. The glide changes direction smoothly without jumping. | -| **Multi-Select Drag** | Multiple components/nets are dragged together. | All selected items are added to the active animations list at the same time. The tick callback updates them in lockstep, preserving their relative offsets. | -| **Paste Action** | Pasted components appear instantly. | If the PM desires a glide-in effect, we initialize their visual coordinates at a minor offset (or cursor position) and target their final paste locations. Otherwise, we initialize their visual positions directly to the target, bypassing animation. | -| **Undo / Redo** | `copy.deepcopy` destroys object references, making keys in the animation registry stale. | Clear `self.visual_positions` and stop the tick callback when undo/redo is executed. The components instantly snap to their history coordinates. | -| **Simulation Mode** | Drawing area enters running mode. Components must not drift. | Component dragging is disabled during running mode. When toggling running mode, we instantly flush all pending animations (set visual positions = logical positions) and clear the registry. | -| **High Density Performance** | Moving hundreds of components simultaneously could cause frame drops. | Set a threshold (e.g., maximum of 50 moving items). If more components are moved (such as dragging the entire circuit), bypass animations and snap them instantly. | - ---- - -## 5. Reusable Animation API Sketch - -To allow future visual effects (e.g. component fades, rotations, input level pulses) to reuse the same framework, we will structure the animation controller as follows: - -```python -# ggate/Utils.py or new file ggate/Animation.py - -def ease_out_cubic(t: float) -> float: - """Standard cubic easing out.""" - return 1 - (1 - t) ** 3 - -class Vector2DAnimation: - """Manages visual coordinates interpolation for 2D movements.""" - def __init__(self, start_pos: tuple[float, float], target_pos: tuple[float, float], duration_ms: float, easing_fn=ease_out_cubic): - self.start_pos = list(start_pos) - self.target_pos = list(target_pos) - self.current_pos = list(start_pos) - self.duration_us = duration_ms * 1000 - self.elapsed_us = 0 - self.easing_fn = easing_fn - self.completed = False - - def update(self, delta_us: int) -> None: - self.elapsed_us += delta_us - if self.elapsed_us >= self.duration_us: - self.current_pos = list(self.target_pos) - self.completed = True - else: - t = self.elapsed_us / self.duration_us - eased_t = self.easing_fn(t) - self.current_pos[0] = self.start_pos[0] + (self.target_pos[0] - self.start_pos[0]) * eased_t - self.current_pos[1] = self.start_pos[1] + (self.target_pos[1] - self.start_pos[1]) * eased_t - -class CanvasAnimationController: - """Central manager registered on DrawArea to handle all tick-callbacks.""" - def __init__(self, draw_area): - self.draw_area = draw_area - self.active_animations: dict[object, Vector2DAnimation] = {} - self.tick_id: int | None = None - self.last_frame_time: int = 0 - - def start_move_animation(self, item_ref: object, start_pos: tuple[float, float], target_pos: tuple[float, float], duration_ms: float = 150) -> None: - """Starts a glide animation for a component or net segment.""" - # If already animating, continue from the current visual position to avoid jumps - actual_start = self.active_animations[item_ref].current_pos if item_ref in self.active_animations else start_pos - self.active_animations[item_ref] = Vector2DAnimation(actual_start, target_pos, duration_ms) - - if self.tick_id is None: - self.last_frame_time = 0 - self.tick_id = self.draw_area.drawingarea.add_tick_callback(self._on_tick) - - def cancel_animation(self, item_ref: object) -> None: - """Cancels animation for a specific item.""" - if item_ref in self.active_animations: - del self.active_animations[item_ref] - if not self.active_animations: - self._stop_tick() - - def clear(self) -> None: - """Clears all active animations and snaps items to their targets.""" - self.active_animations.clear() - self._stop_tick() - - def get_visual_position(self, item_ref: object, default_pos: tuple[float, float]) -> tuple[float, float]: - """Returns visual coordinates if animating, otherwise logical coordinates.""" - if item_ref in self.active_animations: - pos = self.active_animations[item_ref].current_pos - return (pos[0], pos[1]) - return default_pos - - def _on_tick(self, widget, frame_clock, user_data=None) -> bool: - """Executes on every frame clock update.""" - frame_time = frame_clock.get_frame_time() - if self.last_frame_time == 0: - self.last_frame_time = frame_time - return True # Continue clock - - delta_us = frame_time - self.last_frame_time - self.last_frame_time = frame_time - - completed_keys = [] - for key, anim in self.active_animations.items(): - anim.update(delta_us) - if anim.completed: - completed_keys.append(key) - - for key in completed_keys: - del self.active_animations[key] - - # Request canvas redraw - self.draw_area.queue_draw() - - if not self.active_animations: - self._stop_tick() - return False # Remove tick callback - return True # Continue callback - - def _stop_tick(self) -> None: - if self.tick_id is not None: - self.draw_area.drawingarea.remove_tick_callback(self.tick_id) - self.tick_id = None - self.last_frame_time = 0 -``` - ---- - -## 6. Open Questions for the PM - -1. **Paste Visual Effect**: When a component is pasted, should it snap instantly (current behavior) or glide in from the cursor position to add a sense of placement? -2. **Animation Speed / Duration**: Is a duration of `150ms` (using `ease_out_cubic`) appropriate for grid snapping, or does the PM want to test different easing functions (e.g. spring bounce)? -3. **Net Rubber-Banding / Connection Animation**: Right now, wires do not stretch or follow moving gates dynamically during a drag; they only split and reconnect when the component is released. Should we animate the wires that snap into new locations upon drop, or are we only animating the physical gate movements? diff --git a/.agents/plans/preferences-revamp.md b/.agents/plans/preferences-revamp.md deleted file mode 100644 index 6541435..0000000 --- a/.agents/plans/preferences-revamp.md +++ /dev/null @@ -1,279 +0,0 @@ -# PLAN: Preferences UI Revamp - -This document outlines the design and migration plan for updating GGate's preferences window from a deprecated `Gtk.Dialog` to a modern, adaptive `Adw.PreferencesDialog`. - -> [!NOTE] -> This is a planning-only document. No application code will be modified during this task. - ---- - -## 1. Inventory of Current Settings - -GGate stores user settings globally in [Preference.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Preference.py). The following table catalogues every setting, its type, default value, purpose, and the widget used in the current UI: - -| Setting Key | Data Type | Default Value | Controls / Description | Current UI Widget | -| :--- | :--- | :--- | :--- | :--- | -| `drawing_font` | `Pango.FontDescription` | `"Liberation Mono 10"` | Font family and size for component label drawing | `Gtk.FontDialogButton` (Broken/unconfigured) | -| `symbol_type` | `int` | `0` (MIL/ANSI) | Symbol style for logic gates (0: MIL/ANSI, 1: IEC) | `Gtk.ComboBoxText` | -| `max_calc_iters` | `int` | `10000` | Max iterations per simulation step | `Gtk.SpinButton` | -| `max_calc_duration` | `float` | `0.0002` (seconds) | Max calculation step duration (shown in µs in UI) | `Gtk.SpinButton` (multiplied by $10^6$ for µs) | -| `autocenter_resize` | `int` (as bool) | `1` (ON) | Automatically center canvas bounding box on resize | `Gtk.Switch` | -| `grid_step` | `int` | `10` | Grid spacing distance in pixels on canvas | *None (Hidden setting)* | -| `net_color` | `cairo.SolidPattern` | `0.0, 0.0, 1.0` (Blue) | Default net color in edit mode | `Gtk.ColorButton` | -| `net_high_color` | `cairo.SolidPattern` | `0.5, 0.5, 1.0` | Color of highlighted nets | `Gtk.ColorButton` | -| `net_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of un-powered nets in simulation mode | `Gtk.ColorButton` | -| `highlevel_color` | `cairo.SolidPattern` | `1.0, 0.0, 0.0` (Red) | Color of high logic level (1) nets | `Gtk.ColorButton` | -| `lowlevel_color` | `cairo.SolidPattern` | `0.0, 0.0, 1.0` (Blue) | Color of low logic level (0) nets | `Gtk.ColorButton` | -| `component_color` | `cairo.SolidPattern` | `0.0, 1.0, 0.0` (Green) | Default component stroke in edit mode | `Gtk.ColorButton` | -| `component_high_color` | `cairo.SolidPattern` | `0.5, 1.0, 0.5` | Color of highlighted components | `Gtk.ColorButton` | -| `component_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of components in simulation mode | `Gtk.ColorButton` | -| `picked_color` | `cairo.SolidPattern` | `1.0, 0.5, 0.0` (Orange) | Color of components currently being moved | `Gtk.ColorButton` | -| `preadd_color` | `cairo.SolidPattern` | `1.0, 0.75, 0.0` | Color of components before placement preview | `Gtk.ColorButton` | -| `selected_color` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Color of selected components | `Gtk.ColorButton` | -| `terminal_color` | `cairo.SolidPattern` | `1.0, 0.0, 0.0` (Red) | Color of terminals/pins in edit mode | `Gtk.ColorButton` | -| `terminal_color_running` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Color of terminals/pins in simulation mode | `Gtk.ColorButton` | -| `cursor_color` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Color of snapping placement cursor | `Gtk.ColorButton` | -| `bg_color` | `cairo.SolidPattern` | `0.0, 0.0, 0.0` (Black) | Canvas background color in edit mode | `Gtk.ColorButton` | -| `bg_color_running` | `cairo.SolidPattern` | `1.0, 1.0, 1.0` (White) | Canvas background color in simulation mode | `Gtk.ColorButton` | -| `grid_color` | `cairo.SolidPattern` | `0.15, 0.12, 0.15` | Color of grid dots/lines | `Gtk.ColorButton` | - -*Note: Internal patterns starting with `_` (`_red`, `_green`, `_blue`, `_yellow`) and selection box colors (`selection_box`, `selection_box_border`) are stored in `Preference.py` but excluded from user modification UI.* - ---- - -## 2. Proposed Tab & Page Structure - -We will transition the dialog structure to a set of sub-pages within `Adw.PreferencesDialog`. This provides an adaptive sidebar/header layout with search capabilities. - -```mermaid -graph TD - PD[Adw.PreferencesDialog] --> P1[Page 1: Appearance] - PD --> P2[Page 2: Colors] - PD --> P3[Page 3: Simulation] - PD --> P4[Page 4: Canvas Behavior] - - P1 --> G1_1[Group: Typography & Style] - P1 --> G1_2[Group: Canvas Colors] - - P2 --> G2_1[Group: Component Colors] - P2 --> G2_2[Group: Net Colors] - P2 --> G2_3[Group: Terminals] - - P3 --> G3_1[Group: Performance & Constraints] - - P4 --> G4_1[Group: Layout & Grid] -``` - -### Page 1: Appearance (Title: `Appearance`, Icon: `preferences-desktop-wallpaper-symbolic`) - -#### Group 1: Typography & Style -* **Drawing Font** - * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.FontDialogButton` suffix. - * *Mapping:* Live-binds to `Preference.drawing_font` (`Pango.FontDescription`). -* **Symbol Style** - * *Adw Row Type:* `Adw.ComboRow` - * *Model:* `Gtk.StringList.new([_("MIL/ANSI"), _("IEC")])` - * *Mapping:* Live-binds to `Preference.symbol_type` (`int`, index). - -#### Group 2: Canvas Colors -* **Background (Edit Mode)** - * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. - * *Mapping:* Live-binds to `Preference.bg_color` (RGB string mapping). -* **Background (Running Mode)** - * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. - * *Mapping:* Live-binds to `Preference.bg_color_running`. -* **Grid Color** - * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. - * *Mapping:* Live-binds to `Preference.grid_color`. -* **Cursor Color** - * *Adw Row Type:* `Adw.ActionRow` containing a `Gtk.ColorDialogButton` suffix. - * *Mapping:* Live-binds to `Preference.cursor_color`. - ---- - -### Page 2: Colors (Title: `Colors`, Icon: `applications-graphics-symbolic`) - -#### Group 1: Component Colors -* **Component (Default)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.component_color` -* **Component (Highlighted)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.component_high_color` -* **Component (Running)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.component_color_running` -* **Component (Picked)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.picked_color` -* **Component (Pre-added)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.preadd_color` -* **Component (Selected)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.selected_color` - -#### Group 2: Net Colors -* **Net (Default)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.net_color` -* **Net (Highlighted)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.net_high_color` -* **Net (Running)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.net_color_running` -* **Net (High Level)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.highlevel_color` -* **Net (Low Level)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.lowlevel_color` - -#### Group 3: Terminals -* **Terminal (Edit)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.terminal_color` -* **Terminal (Running)** - * *Adw Row Type:* `Adw.ActionRow` with `Gtk.ColorDialogButton` suffix. - * *Mapping:* `Preference.terminal_color_running` - ---- - -### Page 3: Simulation (Title: `Simulation`, Icon: `media-playback-start-symbolic`) - -#### Group 1: Performance & Constraints -* **Max Calculation Iterations** - * *Adw Row Type:* `Adw.SpinRow` - * *Range:* $10$ to $1,000,000$, step $1.0$ (digits: 0, numeric: True). - * *Mapping:* Live-binds to `Preference.max_calc_iters` (`int`). -* **Max Calculation Duration (µs)** - * *Adw Row Type:* `Adw.SpinRow` - * *Range:* $0$ to $100,000$, step $1.0$ (digits: 3, numeric: True). - * *Mapping:* `Preference.max_calc_duration` (float, display value equals seconds multiplied by $10^6$). - ---- - -### Page 4: Canvas Behavior (Title: `Canvas`, Icon: `input-mouse-symbolic`) - -#### Group 1: Layout & Grid -* **Auto-Center Content on Resize** - * *Adw Row Type:* `Adw.SwitchRow` - * *Mapping:* Live-binds to `Preference.autocenter_resize` (`0` or `1`). -* **Grid Step Size (px)** - * *Adw Row Type:* `Adw.SpinRow` - * *Range:* $5$ to $50$, step $1.0$ (digits: 0, numeric: True). - * *Mapping:* Live-binds to the previously hidden `Preference.grid_step` (`int`). - ---- - -## 3. Load / Apply Wiring: Live Binding vs. Explicit Apply - -In the current architecture, settings are modified via an explicit dialog cycle: -1. Dialog reads values into widgets via `update_dialog()`. -2. User edits widgets. -3. User clicks **Apply** (which runs `apply_settings()` and saves settings) or **Cancel** (which discards inputs). - -### The Modern Adwaita Pattern: Instant-Apply (Live Binding) -Modern GNOME Human Interface Guidelines (HIG) reject "Cancel/Apply" preference modals. Instead, preferences are **instant-apply**: settings apply in real-time as widgets change. - -We plan to implement **Instant-Apply** for GGate. - -#### Real-time Wiring Workflow -1. **Instantiation:** - `PreferencesWindow` will subclass `Adw.PreferencesDialog` and accept a reference to the `MainFrame` parent: - ```python - class PreferencesWindow(Adw.PreferencesDialog): - def __init__(self, parent): - super().__init__() - self.set_transient_for(parent) - self.main_frame = parent - self.build_ui() - ``` -2. **Initial Population (No-Signal Stage):** - We construct widgets and set their values from `Preference` attributes *before* connecting change signals. This avoids triggering false change events during widget creation. -3. **Signal Binding:** - Once loaded, row properties connect to a shared update logic: - * `SwitchRow` -> `notify::active` - * `ComboRow` -> `notify::selected` - * `SpinRow` -> `notify::value` - * `Gtk.ColorDialogButton` -> `notify::rgba` - * `Gtk.FontDialogButton` -> `notify::font-desc` -4. **Shared Event Handling:** - On change, we update `Preference`, write to disk, and redraw the canvas: - ```python - def _on_color_changed(self, button, pspec, key): - rgba = button.get_rgba() - Preference.__setattr__(key, f"{rgba.red},{rgba.green},{rgba.blue}") - Preference.save_settings() - self._trigger_canvas_redraw() - - def _trigger_canvas_redraw(self): - if self.main_frame and hasattr(self.main_frame, "drawarea"): - self.main_frame.drawarea.redraw = True - self.main_frame.drawarea.queue_draw() - ``` - -> [!TIP] -> In `MainFrame.py`, the old callback response handler `_prefs_changed()` and dialog re-instantiation logic can be removed completely. Showing the preferences window becomes a simple: -> ```python -> def on_action_prefs_pressed(self, *widget): -> PreferencesWindow(self).present() -> ``` - ---- - -## 4. Migration Notes & Risks - -### 1. Font Picker Fix (`Gtk.FontDialogButton`) -The current code throws a TODO regarding the font picker: -```python -# todo: fix font picker -self.drawing_font_btn = Gtk.FontDialogButton() -``` -* **Why it's broken:** In GTK4, a `Gtk.FontDialogButton` cannot show a font selector window unless it has an associated `Gtk.FontDialog` object. -* **The Fix:** Construct a helper `Gtk.FontDialog` and set it on the button: - ```python - font_dialog = Gtk.FontDialog() - self.drawing_font_btn = Gtk.FontDialogButton.new(font_dialog) - # Alternatively: - # self.drawing_font_btn.set_dialog(font_dialog) - ``` - -### 2. Color Pickers (`Gtk.ColorDialogButton`) -The current code uses the legacy `Gtk.ColorButton` widget. Because GGate targets GTK4 $\ge$ 4.16: -* We should migrate to the modern `Gtk.ColorDialogButton` (introduced in GTK 4.10) to avoid deprecation warnings. -* Similar to the font picker, `Gtk.ColorDialogButton` requires a `Gtk.ColorDialog` context: - ```python - color_dialog = Gtk.ColorDialog() - btn = Gtk.ColorDialogButton.new(color_dialog) - ``` - -### 3. Removal of `Gtk.Dialog` Architecture -* Since `Adw.PreferencesDialog` subclasses `Adw.Dialog`, we don't need manual title-bar configuration, margins, scrolling, or action-area buttons. Removing them simplifies `Preferences.py` from 204 lines of layout boilerplate to roughly 100 lines of declarative groupings. - ---- - -## 5. Open Questions for the PM - -Before the implementation phase, the PM should clarify the following design decisions: - -1. **Exposing `grid_step`:** - Should we expose the canvas grid size setting to the user? (Currently it exists in `Preference.py` default `10` but is hidden. We recommend adding it under a "Canvas" tab). -2. **Exposing selection box colors:** - Should `selection_box` (default RGBA `1, 0.75, 0, 0.25`) and `selection_box_border` (default RGB `1, 0.75, 0`) also be added to the Colors page, or should they remain hardcoded? -3. **Light/Dark and System Style Integration:** - Libadwaita supports the system dark style preference via `Adw.StyleManager`. Since GGate has manual canvas edit/run backgrounds, should we allow matching the system color scheme (automatically switching backgrounds), or keep backgrounds fully manual? -4. **Drawing Font Restriction:** - Should the font chooser be limited to Monospaced fonts (which render labels more cleanly on a logic gate schematic), or let the user choose any system font? - ---- - -## 6. PM Decisions (2026-06-14) - -1. **grid_step** — do NOT expose yet. Keep hidden in `Preference.py`; drop the "Grid Step Size" row from the Canvas page (Canvas page then holds only Auto-Center). -2. **selection-box colors** (`selection_box`, `selection_box_border`) — do NOT expose yet. Keep hardcoded; omit from the Colors page. -3. **System dark/light (`Adw.StyleManager`)** — keep canvas colors **manual**. No automatic system-scheme integration; a proper theming system is planned separately later. -4. **Drawing font** — **monospace only.** Configure the `Gtk.FontDialog` to restrict selection to monospaced fonts. - -Implementation must honor these: no grid-step row, no selection-box rows, no `StyleManager` wiring, monospace-restricted font picker. diff --git a/.agents/plans/theming.md b/.agents/plans/theming.md deleted file mode 100644 index 2d10e1e..0000000 --- a/.agents/plans/theming.md +++ /dev/null @@ -1,330 +0,0 @@ -# GGate Theming System Design Plan - -This document outlines the architecture, data structures, UI integration, and implementation roadmap for a canvas and app-wide theming system in GGate. - -## Overview - -GGate is a GTK4 + libadwaita application with a Cairo-rendered canvas. Canvas colors are defined in theme JSON files stored in `data/themes/`, bundled into the gresource at build time, and dynamically loaded at runtime. The Appearance page in [Preferences.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/Preferences.py) allows switching between preinstalled and user themes, and editing individual colors. - -The system includes four built-in themes: -1. **Classic**: The legacy GGate color scheme (derived from original Preference defaults). -2. **Space**: A custom designed dark, deep-space aesthetic. -3. **Frappé**: The official Catppuccin Frappé palette. -4. **Mocha**: The official Catppuccin Mocha palette. - ---- - -## 1. Architecture - -The theming system separates **theme definitions** (static JSON files in `data/themes/`) from the active **preference settings** (in-memory Preference object and on-disk preferences file). - -### Theme Representation & Discovery -Themes are stored as JSON files in `data/themes/` (one per theme). At build time, Meson globs these files and injects them into both dev and installed gresources under `/org/astralco/GGate/Dev/themes/` (dev) and `/org/astralco/GGate/themes/` (installed). At runtime, `ggate/Themes.py` enumerates the gresource directory, parses each JSON file into a `Theme` object, and registers it in a module-level `THEME_REGISTRY` dict. User themes can also be placed in `~/.config/ggate/themes/*.json` and are loaded via filesystem scan after gresource themes. - -```python -# ggate/Themes.py -from gi.repository import Gdk -import cairo - -class Theme: - def __init__(self, name: str, dark_chrome: bool, colors: dict[str, str]): - self.name = name - self.dark_chrome = dark_chrome # True to prefer dark app chrome - self.colors = colors - - def get_pattern(self, key: str) -> cairo.SolidPattern: - hex_val = self.colors.get(key) - if not hex_val: - return cairo.SolidPattern(0.0, 0.0, 0.0) - return hex_to_pattern(hex_val) -``` - -### Flow & Serialization -A new setting key `"theme"` (type `str`, defaults to `"Space"`) will be added to the preference dictionary in `Preference.py` to persist the active theme's name. - -```mermaid -sequenceDiagram - participant UI as Preferences Window - participant SM as Adw.StyleManager - participant Pref as Preference Store - participant Disk as preferences file - participant Canvas as DrawArea Canvas - - UI->>Pref: Select theme (e.g., "Mocha") - Pref->>Pref: Update all color keys in memory - Pref->>SM: Set color scheme (PREFER_DARK/PREFER_LIGHT) - Pref->>Disk: Save settings (save_settings) - UI->>UI: Update color dialog buttons live - UI->>Canvas: Trigger redraw (_trigger_canvas_redraw) - Canvas->>Pref: Read new colors - Canvas->>Canvas: Redraw Cairo components -``` - -### Resolving the Selection Box Alpha Bug -Currently, GGate's preferences file parses values with commas and discards alpha settings when loading/saving: -* `cairo.SolidPattern.get_rgba()` returns `(r, g, b, a)`. -* `Preference.py:save_settings()` writes `%s=%f,%f,%f\n`. -* `Preference.py:__setattr__()` parses only three elements, setting alpha implicitly to `1.0`. - -To support the translucent `selection_box` color without hardcoding alpha values, the serialization logic in `Preference.py` must be upgraded to support optional alpha: - -```python -# Proposed serialization fix in Preference.py -elif isinstance(self.pref_dict[key], cairo.Pattern): - rgba = self.pref_dict[key].get_rgba() - if rgba[3] < 1.0: - fp.write("%s=%f,%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2], rgba[3])) - else: - fp.write("%s=%f,%f,%f\n" % (key, rgba[0], rgba[1], rgba[2])) - -# Proposed parsing fix in Preference.py -elif isinstance(self.pref_dict[name], cairo.Pattern): - try: - rgba_vals = [float(x) for x in value.split(",")] - if len(rgba_vals) == 4: - self.pref_dict[name] = cairo.SolidPattern(*rgba_vals) - else: - self.pref_dict[name] = cairo.SolidPattern(rgba_vals[0], rgba_vals[1], rgba_vals[2], 1.0) - except (ValueError, IndexError): - self.pref_dict[name] = cairo.SolidPattern(0.0, 0.0, 0.0) -``` - -### Coexistence with Manual Tweaks -GGate supports tweaking individual colors. To coexist with the preset theme dropdown: -1. When a user picks a theme (e.g., `"Mocha"`), GGate loads all colors from that theme into the preferences and sets `"theme" = "Mocha"`. -2. If the user subsequently updates any individual color via the color button picker, the value of `"theme"` is updated to `"Custom"`. -3. The dropdown in the UI changes to show `"Custom"`, indicating that a user is overriding the baseline theme. - ---- - -## 2. Full Palette Mapping - -Below are the exhaustive hex and Cairo float maps for all 23 GGate color preference keys across the three themes. - -> [!NOTE] -> Cairo float values (`r, g, b, [a]`) represent the Red, Green, Blue, and Alpha channels mapped between `0.0` and `1.0`. They are computed by dividing the 8-bit hex channel by `255.0` (rounded to 3 decimal places). - -### Theme 1: "Space" (Custom Dark Cyberpunk/Deep Void Theme) -A vibrant, neon-accented dark palette designed specifically to look premium on GGate's circuit logic canvas. - -| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | -| :--- | :--- | :--- | :--- | -| `bg_color` | Canvas Background (Edit mode) | `#07080d` | `(0.027, 0.031, 0.051)` | -| `bg_color_running` | Canvas Background (Running mode) | `#0c0e16` | `(0.047, 0.055, 0.086)` | -| `grid_color` | Grid alignment lines | `#1b1e2c` | `(0.106, 0.118, 0.173)` | -| `cursor_color` | Coordinate snap dot/cursor | `#e5e8f4` | `(0.898, 0.910, 0.957)` | -| `component_color` | Logic gates border (Edit mode) | `#3d64ff` | `(0.239, 0.392, 1.000)` | -| `component_high_color` | Hovered/Highlighted logic gate | `#00f2fe` | `(0.000, 0.949, 0.996)` | -| `component_color_running` | Component border (Running mode) | `#8992a8` | `(0.537, 0.573, 0.659)` | -| `picked_color` | Gate currently selected & moving | `#ff8000` | `(1.000, 0.502, 0.000)` | -| `preadd_color` | Ghost component before placement | `#ff007f` | `(1.000, 0.000, 0.498)` | -| `selected_color` | Border of selected components | `#39ff14` | `(0.224, 1.000, 0.078)` | -| `net_color` | Wire segments (Edit mode) | `#5b637a` | `(0.357, 0.388, 0.478)` | -| `net_high_color` | Hovered wire segment | `#00f2fe` | `(0.000, 0.949, 0.996)` | -| `net_color_running` | Indeterminate wire state (Running) | `#44495b` | `(0.267, 0.286, 0.357)` | -| `highlevel_color` | Logic state 1 (High wire) | `#39ff14` | `(0.224, 1.000, 0.078)` | -| `lowlevel_color` | Logic state 0 (Low wire) | `#3d64ff` | `(0.239, 0.392, 1.000)` | -| `terminal_color` | Pin connection terminal (Edit) | `#ff3b30` | `(1.000, 0.145, 0.118)` | -| `terminal_color_running` | Pin connection terminal (Running) | `#07080d` | `(0.027, 0.031, 0.051)` | -| `selection_box` | Multi-select fill region | `#00f2fe26` | `(0.000, 0.949, 0.996, 0.150)` | -| `selection_box_border` | Multi-select border outline | `#00f2fe` | `(0.000, 0.949, 0.996)` | -| `_red` | State LED Red | `#ff3b30` | `(1.000, 0.145, 0.118)` | -| `_green` | State LED Green | `#39ff14` | `(0.224, 1.000, 0.078)` | -| `_blue` | State LED Blue | `#007aff` | `(0.000, 0.478, 1.000)` | -| `_yellow` | State LED Yellow | `#ffcc00` | `(1.000, 0.800, 0.000)` | - -### Theme 2: "Frappé" (Catppuccin Frappé) -A dark theme utilizing the official, muted, pastel-toned colors of Catppuccin Frappé. - -| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | -| :--- | :--- | :--- | :--- | -| `bg_color` | Canvas Background (Edit mode) | `#303446` | `(0.188, 0.204, 0.275)` | -| `bg_color_running` | Canvas Background (Running mode) | `#292c3c` | `(0.161, 0.173, 0.235)` | -| `grid_color` | Grid alignment lines | `#414559` | `(0.255, 0.271, 0.349)` | -| `cursor_color` | Coordinate snap dot/cursor | `#babbf1` | `(0.729, 0.733, 0.945)` | -| `component_color` | Logic gates border (Edit mode) | `#8caaee` | `(0.549, 0.667, 0.933)` | -| `component_high_color` | Hovered/Highlighted logic gate | `#85c1dc` | `(0.522, 0.757, 0.863)` | -| `component_color_running` | Component border (Running mode) | `#c6d0f5` | `(0.776, 0.816, 0.961)` | -| `picked_color` | Gate currently selected & moving | `#ef9f76` | `(0.937, 0.624, 0.463)` | -| `preadd_color` | Ghost component before placement | `#eebebe` | `(0.933, 0.745, 0.745)` | -| `selected_color` | Border of selected components | `#ca9ee6` | `(0.792, 0.620, 0.902)` | -| `net_color` | Wire segments (Edit mode) | `#838ba7` | `(0.514, 0.545, 0.655)` | -| `net_high_color` | Hovered wire segment | `#99d1db` | `(0.600, 0.820, 0.859)` | -| `net_color_running` | Indeterminate wire state (Running) | `#737994` | `(0.451, 0.475, 0.580)` | -| `highlevel_color` | Logic state 1 (High wire) | `#a6d189` | `(0.651, 0.820, 0.537)` | -| `lowlevel_color` | Logic state 0 (Low wire) | `#8caaee` | `(0.549, 0.667, 0.933)` | -| `terminal_color` | Pin connection terminal (Edit) | `#e78284` | `(0.906, 0.510, 0.518)` | -| `terminal_color_running` | Pin connection terminal (Running) | `#232634` | `(0.137, 0.149, 0.204)` | -| `selection_box` | Multi-select fill region | `#ca9ee633` | `(0.792, 0.620, 0.902, 0.200)` | -| `selection_box_border` | Multi-select border outline | `#ca9ee6` | `(0.792, 0.620, 0.902)` | -| `_red` | State LED Red | `#e78284` | `(0.906, 0.510, 0.518)` | -| `_green` | State LED Green | `#a6d189` | `(0.651, 0.820, 0.537)` | -| `_blue` | State LED Blue | `#8caaee` | `(0.549, 0.667, 0.933)` | -| `_yellow` | State LED Yellow | `#e5c890` | `(0.898, 0.784, 0.565)` | - -### Theme 3: "Mocha" (Catppuccin Mocha) -A high-contrast deep dark theme utilizing the official colors of Catppuccin Mocha. - -| Preference Key | GGate Canvas Element | Hex Color | Cairo Float Value (`r, g, b, [a]`) | -| :--- | :--- | :--- | :--- | -| `bg_color` | Canvas Background (Edit mode) | `#1e1e2e` | `(0.118, 0.118, 0.180)` | -| `bg_color_running` | Canvas Background (Running mode) | `#181825` | `(0.094, 0.094, 0.145)` | -| `grid_color` | Grid alignment lines | `#313244` | `(0.192, 0.196, 0.267)` | -| `cursor_color` | Coordinate snap dot/cursor | `#b4befe` | `(0.706, 0.745, 0.996)` | -| `component_color` | Logic gates border (Edit mode) | `#89b4fa` | `(0.537, 0.706, 0.980)` | -| `component_high_color` | Hovered/Highlighted logic gate | `#74c7ec` | `(0.455, 0.780, 0.925)` | -| `component_color_running` | Component border (Running mode) | `#cdd6f4` | `(0.804, 0.839, 0.957)` | -| `picked_color` | Gate currently selected & moving | `#fab387` | `(0.980, 0.702, 0.529)` | -| `preadd_color` | Ghost component before placement | `#f2cdcd` | `(0.949, 0.804, 0.804)` | -| `selected_color` | Border of selected components | `#cba6f7` | `(0.796, 0.651, 0.969)` | -| `net_color` | Wire segments (Edit mode) | `#7f849c` | `(0.498, 0.518, 0.612)` | -| `net_high_color` | Hovered wire segment | `#89dceb` | `(0.537, 0.863, 0.922)` | -| `net_color_running` | Indeterminate wire state (Running) | `#6c7086` | `(0.424, 0.439, 0.525)` | -| `highlevel_color` | Logic state 1 (High wire) | `#a6e3a1` | `(0.651, 0.890, 0.631)` | -| `lowlevel_color` | Logic state 0 (Low wire) | `#89b4fa` | `(0.537, 0.706, 0.980)` | -| `terminal_color` | Pin connection terminal (Edit) | `#f38ba8` | `(0.953, 0.545, 0.659)` | -| `terminal_color_running` | Pin connection terminal (Running) | `#11111b` | `(0.067, 0.067, 0.106)` | -| `selection_box` | Multi-select fill region | `#cba6f733` | `(0.796, 0.651, 0.969, 0.200)` | -| `selection_box_border` | Multi-select border outline | `#cba6f7` | `(0.796, 0.651, 0.969)` | -| `_red` | State LED Red | `#f38ba8` | `(0.953, 0.545, 0.659)` | -| `_green` | State LED Green | `#a6e3a1` | `(0.651, 0.890, 0.631)` | -| `_blue` | State LED Blue | `#89b4fa` | `(0.537, 0.706, 0.980)` | -| `_yellow` | State LED Yellow | `#f9e2af` | `(0.976, 0.886, 0.686)` | - ---- - -## 3. Preferences UI Integration - -The theme picker will be integrated into the top of the **Appearance** tab of the Preferences window (`ggate/Components/Windows/Preferences.py`), above the typography and color groups. - -``` -+----------------------------------------------------+ -| Preferences | -+----------------------------------------------------+ -| Appearance Simulation Canvas | -| | -| Theme | -| Theme Style........................ [ Mocha v] | -| | -| Typography & Style | -| Font....................... [ Liberation Mono ] | -| Symbol style...................... [ MIL/ANSI ] | -| | -| Canvas Colors | -| Background (edit mode)............. [ Color ] | -| Background (running)............... [ Color ] | -| ... | -+----------------------------------------------------+ -``` - -### UI Implementation Details -1. **ComboRow Addition**: An `Adw.ComboRow` with title "Theme Style" will be added at the top. The model will be populated with `"Space"`, `"Frappé"`, `"Mocha"`, and `"Custom"`. -2. **Signal Hook**: The ComboRow's `"notify::selected"` property is connected to `_on_theme_changed`. -3. **Updating values live**: When a theme is selected, the handler will load the preset dictionary, write each color to the respective preference in `Preference.py`, and immediately update the color button instances using `btn.set_rgba(rgba)` so the UI color rows update instantly. -4. **Trigger Redraw**: The handler will invoke `self._trigger_canvas_redraw()` to update the canvas in real time. -5. **Color Button Integration**: When an individual color button is adjusted, its signal handler will set the theme `ComboRow` selection index to `"Custom"` (and set the Preference theme key to `"Custom"`). - ---- - -## 4. App Chrome Styling Recommendation - -**Recommendation**: GGate should automatically align the libadwaita application chrome with the active canvas theme to avoid visual dissonance (such as displaying a bright white window header and sidebar next to a dark space canvas). - -* **Color Scheme Integration**: - - Space, Frappé, and Mocha are dark themes. Selecting them should trigger the `Adw.StyleManager` to prefer dark mode: - ```python - Adw.StyleManager.get_default().set_color_scheme(Adw.ColorScheme.PREFER_DARK) - ``` - - If a light theme is added later (e.g., Catppuccin Latte), it should trigger `Adw.ColorScheme.PREFER_LIGHT`. - - Setting the color scheme to `"Custom"` should default back to system preferences (`Adw.ColorScheme.DEFAULT`). -* **Accent Colors**: - - For GTK4/Adwaita accent highlights (e.g., active switches, focused text entries, header selections), we can dynamically apply accent-specific styles to match each theme: - - **Space**: Electric Cyan (`#00f2fe`) - - **Frappé**: Lavender (`#babbf1`) or Mauve (`#ca9ee6`) - - **Mocha**: Lavender (`#b4befe`) or Mauve (`#cba6f7`) - - Accent coloring can be applied using `Gtk.CssProvider` loaded into the default screen, defining custom Adwaita color overrides (`@accent_color` and `@accent_bg_color`). - ---- - -## 5. Dynamic Theme Pipeline & Extensibility - -### Built-in Theme Storage -Built-in themes are stored as JSON files in `data/themes/` and are bundled into the gresource at build time via Meson auto-globbing. No manual XML or hardcoded list is needed — adding a new `*.json` file to `data/themes/` automatically includes it in the build. - -### Theme JSON Schema -All themes, built-in and user-provided, follow this schema: -```json -{ - "name": "Theme Name", - "dark_chrome": true, - "accent_hex": "#00f2fe", - "colors": { - "bg_color": "#07080d", - "bg_color_running": "#0c0e16", - "grid_color": "#1b1e2c", - "cursor_color": "#e5e8f4", - "component_color": "#3d64ff", - "component_high_color": "#00f2fe", - "component_color_running": "#8992a8", - "picked_color": "#ff8000", - "preadd_color": "#ff007f", - "selected_color": "#39ff14", - "net_color": "#5b637a", - "net_high_color": "#00f2fe", - "net_color_running": "#44495b", - "highlevel_color": "#39ff14", - "lowlevel_color": "#3d64ff", - "terminal_color": "#ff3b30", - "terminal_color_running": "#07080d", - "selection_box": "#00f2fe26", - "selection_box_border": "#00f2fe", - "_red": "#ff3b30", - "_green": "#39ff14", - "_blue": "#007aff", - "_yellow": "#ffcc00" - } -} -``` - -### Runtime Theme Discovery -`Themes.init_registry(running_from_source)` enumerates the gresource theme prefix (`/org/astralco/GGate/Dev/themes` or `/org/astralco/GGate/themes`) via `Gio.resources_enumerate_children()`, parses each JSON child, and registers themes in `THEME_REGISTRY`. It then scans `~/.config/ggate/themes/` for user-provided JSON files to load and merge. No hardcoded list of theme names exists in the codebase. - ---- - -## 6. Phased Implementation Plan - -```mermaid -gantt - title GGate Theming System Implementation Timeline - dateFormat YYYY-MM-DD - section Phase 1: Core Engine - Refactor Preference.py (Alpha Fix) :active, p1_1, 2026-06-15, 2d - Create ggate/Themes.py Registry :active, p1_2, after p1_1, 2d - section Phase 2: UI & Canvas - Preferences.py UI Additions : p2_1, after p1_2, 3d - Signal Wiring & Button Update : p2_2, after p2_1, 2d - section Phase 3: Polish & Ext - Adw.StyleManager Integration : p3_1, after p2_2, 2d - JSON Loading Extensibility : p3_2, after p3_1, 3d -``` - -### Phase 1: Core Engine & Registry -* Refactor `Preference.py` serialization logic to support parsing/writing RGBA values with alpha components. -* Implement `ggate/Themes.py` containing the `Theme` class and built-in palettes for Space, Catppuccin Frappé, and Catppuccin Mocha. - -### Phase 2: Preferences UI & Canvas Redraw -* Add the Theme selector `Adw.ComboRow` to the Appearance page of the Preferences dialog. -* Wire signals so that selecting a theme modifies the `Preference` values, saves them to disk, updates the dialog's color buttons live, and triggers a canvas redraw. -* Add logic to auto-switch the theme picker to "Custom" if individual colors are modified manually. - -### Phase 3: Chrome Alignment & Extensibility -* Wire the `Adw.StyleManager` to match the window chrome dark/light scheme automatically with the canvas theme type. -* Implement the custom JSON scanner to dynamically load user themes from `~/.config/ggate/themes/` on startup. - ---- - -## 7. Open Questions for the PM - -1. **Selection Box Exposure**: Currently, `selection_box` and `selection_box_border` are styled on the canvas but are not exposed as rows in the Preferences window. Should they remain hidden and only controlled via themes/JSON, or should we add them to the Appearance group in `Preferences.py`? -2. **Default Theme selection**: Which of the three themes should be GGate's fresh-install default? Should GGate default to the new "Space" theme, or preserve the legacy color scheme (dark edit mode, light running mode) as a "Default" setting? -3. **Custom Theme Management**: Should GGate support importing and deleting custom JSON themes directly through the UI, or is instructing users to place JSON files in `~/.config/ggate/themes/` sufficient for the initial implementation? diff --git a/.agents/plans/timing-diagram-revamp.md b/.agents/plans/timing-diagram-revamp.md deleted file mode 100644 index d247c27..0000000 --- a/.agents/plans/timing-diagram-revamp.md +++ /dev/null @@ -1,211 +0,0 @@ -# PLAN: Timing Diagram Revamp - -This document outlines the architectural analysis, design, and step-by-step migration plan for revamping GGate's Timing Diagram window. The current implementation is half-wired, uses outdated GTK3 patterns, and suffers from layout loops, heavy memory allocations, and API mismatch crashes. - -> [!NOTE] -> This is a planning-only task. No application code will be modified during this step. - ---- - -## 1. Architectural Analysis of the Current Implementation - -### 1.1 Current Files & Issues -* **[Display.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/TimingGraph/Display.py)**: - * Subclasses `Adw.Dialog` but is instantiated with a standard window structure that lacks modern navigation, close buttons, toolbar views, and controls. - * Relies on the obsolete `get_visible()` method from the parent window context (which crashes since `Adw.Dialog` in GTK4/Libadwaita does not inherit from `Gtk.Window` directly and doesn't support `get_visible()`). -* **[Diagram.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Components/Windows/TimingGraph/Diagram.py)**: - * Hosts `self.name_area` and `self.chart_area` drawing areas. - * **Layout Loop Pitfall**: In the custom `draw()` method, it calls `set_size_request()` on the drawing areas. In GTK4, modifying widget size requests inside or during a draw event queue triggers another layout pass, causing an infinite layout loop and UI freezing. - * **Memory Allocation Pitfall**: It instantiates new `cairo.ImageSurface` objects of size up to `32767px` wide on *every single redraw step*. This consumes tens of megabytes of memory per frame and leads to heavy garbage collection thrashing. - * **HiDPI/Retina Support**: By rendering to an offscreen image surface and then blitting, the diagram ignores high-DPI scaling factors, rendering blurry lines on Retina displays. - * **Scrolled Window Nesting**: It subclasses `Gtk.ScrolledWindow` but then embeds *another* scrolled window (`timing_scroll_window`) inside itself, creating a redundant nested scroll container. -* **Legacy [DiagramArea.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/DiagramArea.py) & [TimingDiagramWindow.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/TimingDiagramWindow.py)**: - * Used synchronised scrolled windows (`vadjustment` sharing) to freeze the left-side names column horizontally while scrolling it vertically in sync with the chart waveforms. - * Offered control elements (Scale zoom, units, range filters, and manual cursor spin buttons) that are completely missing in the current GTK4 dialog. - ---- - -## 2. Data Model & Simulation Grounding - -### 2.1 Waveform Data Source -All signal waveforms are extracted directly from the active simulation manager instance: -* **History Array**: `self.circuit.probe_levels_history` in [CircuitManager.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/CircuitManager.py). -* **Frame Structure**: Each entry in the history is a list of floats/booleans: - `[timestamp, probe_0_state, probe_1_state, ..., probe_n_state]` - * `timestamp` (float): The simulated timeline time in seconds. - * `probe_i_state` (bool): The logic state (high/low) of the $i$-th probe. -* **Ordering Stability**: The order of states in each frame maps strictly to the order of active Probe components returned by filtering components: - ```python - probes = [c for c in self.circuit.components if c[0] == "probe"] - ``` - Since components cannot be added, deleted, or reordered while GGate is in Running Mode, this sequence remains completely static throughout the simulation run. - -### 2.2 Time Navigation and Reversion -* **Current Time**: Plotted as a red vertical cursor line matching `self.circuit.current_time`. -* **State Travel / Scrubbing**: When the user clicks or scrubs on the chart timeline, we calculate the selected time: - ```python - selected_time = (clicked_x / scale) + start_time - ``` - We write this to `self.circuit.current_time` and call `self.circuit.revert_state()`. This rolls back component logic history to that point, and triggers a redraw on the main canvas (`self.parent.drawarea`), synchronizing the schematic's visual state with the timing graph's cursor position. - -### 2.3 Handling Empty Simulation History -When simulation starts, `initialize_logic()` clears the history. If no interactive switches are clicked, `probe_levels_history` remains empty. -* **Recommendation**: In `on_circuit_run()` in `MainFrame.py`, perform an initial evaluation step to register the $t=0.0$ state. -* **Graceful fallback**: If `probe_levels_history` is empty, the diagram drawing callbacks should render a placeholder message ("No simulation steps recorded. Operate inputs to advance simulation.") rather than crashing. - ---- - -## 3. UI Architecture (GTK4 & Libadwaita) - -A robust layout requires separating the dialog controls, the frozen name list, and the scrollable canvas. - -```mermaid -graph TD - AD[Adw.Dialog] --> TV[Adw.ToolbarView] - TV --> HB[Adw.HeaderBar] - TV --> CNT[Content Container: Gtk.Box Horizontal] - - HB --> CloseButton[Close Button] - HB --> TitleText[Title: Timing Graph] - - TV --> SubToolbar[Sub-Toolbar: Gtk.Box] - SubToolbar --> ZoomControls[Zoom Combo & Spin] - SubToolbar --> RangeControls[Range: From / To Spins] - SubToolbar --> SaveButton[Save Diagram Image] - - CNT --> ScrollNames[Left Column: Gtk.ScrolledWindow] - CNT --> ScrollChart[Right Column: Gtk.ScrolledWindow] - - ScrollNames --> DrawNames[Gtk.DrawingArea: Probe Names] - ScrollChart --> DrawChart[Gtk.DrawingArea: Waveforms & Cursor] - - ScrollNames -. Share V-Adjustment .- ScrollChart -``` - -### 3.1 Widget Layout & Hierarchy -1. **Dialog Wrapper**: `TimingGraphDisplayWindow` subclasses `Adw.Dialog`. - * Use a tracking attribute `self._is_presented` (toggled via `closed` signals) to safely guard refresh loops instead of using deprecated `get_visible()`. -2. **Chrome Structure**: Set child of the dialog to an `Adw.ToolbarView`. - * **Top Bar**: `Adw.HeaderBar` containing the title. - * **Sub-Toolbar**: A horizontal `Gtk.Box` containing: - * Zoom/Scale inputs (pixels/sec value + unit dropdown). - * Range inputs (From spinbutton, To spinbutton, with shared unit selector). - * Save button (calling `save_timing_diagram_as_image()`). - * **Content**: A horizontal layout box containing `name_scroll` and `diagram_scroll`. - -### 3.2 Vertical Scroll Synchronization -To keep the probe names lined up with their waveforms while allowing horizontal timeline scrolling: -* Pass the vertical adjustment of `diagram_scroll` to `name_scroll`: - ```python - name_scroll.set_vadjustment(diagram_scroll.get_vadjustment()) - ``` -* Set scrolling policies so scrollbars only render on the main waveform area: - ```python - name_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) - diagram_scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - ``` - -### 3.3 Drawing Area Logic (GTK4 Best Practices) -To prevent layout loops, drawing areas must be pure renderers: -* **Size Request (Triggered on data/scale change)**: - * Add an explicit `update_layout_sizes()` helper that calculates the necessary total height ($40 \text{ px} \times \text{number of probes} + \text{padding}$) and width ($(\text{end\_time} - \text{start\_time}) \times \text{scale}$). - * Call `set_size_request()` on the DrawingAreas *only* inside this helper when parameters change. **Never** call `set_size_request` within draw callbacks. -* **Pure Rendering Callbacks**: - * Configure `set_draw_func(self.name_area_draw_fn)` and `set_draw_func(self.chart_area_draw_fn)`. - * Draw directly on the `cairo.Context` passed to these functions. This respects GTK4 double buffering, scales with high-DPI factors, and avoids any manual `ImageSurface` allocation. - -### 3.4 Interaction & Gestures -Replace GTK3 event masks with GTK4 EventControllers: -* **Scrubbing/Clicking**: `Gtk.GestureClick` on the chart DrawingArea. Clicking updates the current time, triggers state reversion, and schedules redraws on both the timing canvas and main schematic canvas. -* **Hovering Cursor**: `Gtk.EventControllerMotion` tracks the cursor position to draw a light vertical guide line. - ---- - -## 4. Rewrite vs. Salvage Recommendation - -**Strong Recommendation**: **Clean rewrite** of both `Display.py` and `Diagram.py` from scratch. - -### Rationale -1. **Outdated Double-Buffering**: The existing code mimics an old GTK3 design by allocating physical offscreen `cairo.ImageSurface` buffers. In GTK4, double-buffering is native, and this manual cache logic causes layout recursion and excessive memory churn. -2. **API Drift**: The wrapper lacks sub-toolbars, navigation controls, and uses methods like `get_visible` that are missing or behave differently on libadwaita dialog wrappers. -3. **Layout Synchronization**: Salvaging the nested scrolls in `Diagram.py` will lead to scroll conflicts. Syncing adjustments directly on two side-by-side scrolled windows is cleaner and less error-prone. -4. **HiDPI**: Drawing directly onto GTK's native draw context guarantees crisp rendering across modern displays. - ---- - -## 5. Phased Implementation Steps - -### Phase 1: Dialog Shell Rewrite (`Display.py`) -1. Re-write `TimingGraphDisplayWindow` as an `Adw.Dialog` containing an `Adw.ToolbarView`. -2. Add sub-toolbar widgets: Scale / Zoom input row, Range From/To inputs, and Save button. -3. Configure `_is_presented` state tracking and hook close action signals. - -### Phase 2: Scrollable Layout & Size Calculation (`Diagram.py`) -1. Implement `TimingGraphDiagram` as a `Gtk.Box` containing two scrolled windows sharing the vertical adjustment. -2. Implement `update_layout_sizes()` to request sizes based on active Probes count and horizontal scale factor. -3. Hook up basic DrawingArea draw callbacks showing dummy shapes to verify layout and scrolling. - -### Phase 3: Waveform Cairo Rendering -1. Wire up `name_area_draw_fn` to read active Probes and print their names in aligned divisions. -2. Wire up `chart_area_draw_fn` to read `self.circuit.probe_levels_history` and draw graduation lines. -3. Render digital transitions (high/low logic levels) for each probe sequence across the timeline. - -### Phase 4: Interaction and Time Travel -1. Add `Gtk.GestureClick` and `Gtk.EventControllerMotion` to the waveform drawing area. -2. Implement hovering guide cursor and active scrubbing. -3. Hook up cursor selection to `self.circuit.revert_state()` and trigger main schematic redraws. - -### Phase 5: Zoom, Units, and Image Export -1. Connect the scale and range widgets in `Display.py` to update diagram properties and trigger size updates. -2. Expose expected attributes/methods (`diagram_width`, `name_width`, `img_height`, `draw_names()`, `draw_diagrams()`) to ensure full compatibility with the existing [Exporter.py](file:///Users/ekureedem/Documents/Projects/GGate/ggate/Exporter.py) image saver. - ---- - -## 6. Open Questions for the PM - -1. **Auto-Scrolling**: When simulation is running, should the timing diagram automatically scroll horizontally to follow the latest simulated timestamp? -2. **Open/Short Circuit States**: In the event of a simulation fault (open circuit `-1` or short circuit), should the timing diagram display a special diagnostic line style (e.g. dashed red line) or simply stop drawing? -3. **Default Timeline Limits**: Should the timeline range default to the maximum calculation duration (`0.0002` s / 200 µs), or should it grow dynamically if the duration preference is updated? - ---- - -## 7. Draw-Area Redesign (post-implementation fixes) - -### 7.1 Layout / Expansion Fix - -The chart collapsed to ~115 px because neither the `Gtk.Box` (TimingGraphDiagram) nor its scrolled windows had expand flags set. Fix: - -- `TimingGraphDiagram` (`Gtk.Box`): `set_hexpand(True)`, `set_vexpand(True)` so the ToolbarView content area stretches it. -- `name_scroll`: `set_hexpand(False)`, `set_vexpand(True)` — fixed width, tracks height. -- `diagram_scroll`: `set_hexpand(True)`, `set_vexpand(True)` — fills all remaining width and height. -- `chart_area` DrawingArea: `set_hexpand(True)` so it expands within its scrolled window viewport; horizontal scroll only when `diagram_width` exceeds viewport. - -Row Y math must be identical between `draw_names` and `draw_diagrams`: -- Ruler strip: rows 0–39 (40 px tall). -- Probe row `j`: y-range `40 + j*40` … `40 + j*40 + 39`. Total height: `40 + n_probes * 40`. -- Separator line at `40 + j*40 + 39.5` (between rows). -- Probe label vertically centred at `40 + j*40 + 20` (mid-row). -- Waveform HIGH at `y = 40 + j*40 + 10 + 0.5`; LOW at `y = 40 + j*40 + 30 + 0.5`. - -### 7.2 Theme-Aware Color Mapping (Preference keys) - -All `set_source_rgb` / `set_source_rgba` literals are replaced with `cr.set_source(Preference.)`. Since `Preference` values are `cairo.SolidPattern` objects, they work identically from the Exporter (no widget context needed). Cross-reference `.agents/plans/theming.md` — these are the same keys that theming.md will update per palette. - -| Surface | Preference key | -|---------|---------------| -| Background fill (names + chart) | `bg_color_running` | -| Probe names + ruler labels (text) | `component_color_running` | -| Row separators, panel border, ruler divider, graduation lines | `grid_color` | -| Waveform HIGH segments | `highlevel_color` | -| Waveform LOW segments | `lowlevel_color` | -| Current-time cursor | `terminal_color` | -| Hover guide line | `cursor_color` | -| Empty-history placeholder text | `component_color_running` | - -### 7.3 Visual Design - -- **Ruler strip** (top 40 px): background `bg_color_running`; bottom separator in `grid_color`; start/end labels + graduation labels in `component_color_running`; graduation tick lines in `grid_color`. -- **Name column rows**: background `bg_color_running`; separator lines `grid_color`; probe labels left-aligned, vertically centred, `component_color_running`. -- **Waveform rows**: background `bg_color_running`; HIGH segment `highlevel_color`; LOW segment `lowlevel_color`; 1.5 px line weight. -- **Cursors**: current-time `terminal_color` 1 px (drawn after `draw_diagrams`); hover guide `cursor_color` 1 px (only when `show_cursor`). -- No hardcoded white, grey, or black anywhere in the on-screen draw path. diff --git a/.agents/reference/build-system-analysis.md b/.agents/reference/build-system-analysis.md new file mode 100644 index 0000000..c07110c --- /dev/null +++ b/.agents/reference/build-system-analysis.md @@ -0,0 +1,35 @@ +# GGate Remaining Build & Packaging Issues + +This document tracks the outstanding build, packaging, and resource issues in GGate. All previously identified issues (such as local variable shadowing, missing imports in the launcher, CLI version mismatch, static version unification, app ID casing, and desktop file naming) have been resolved. + +--- + +## 1. Resource and Icon Path Handling (P2) +* **Status**: **Still Pending** +* **Linked Plan**: [.agents/plans/icon-creation.md](file:///.agents/plans/icon-creation.md) +* **Description**: Component icons are still loaded using direct filesystem path lookups (e.g. `_get_icon_path` in `ComponentView.py` and absolute file path constructs in `MenuPopover.py`). +* **Issues**: + 1. This breaks when the application is installed globally (since the source `data/images` path is not present at the python site-packages folder level). + 2. The GResource path layout is non-standard (redundant `data/` subdirectory, missing icon theme folder hierarchy like `hicolor`, and double actions paths). +* **Recommended Resolution**: + - Restructure the icons folder hierarchy inside both the dev and release GResource bundles to follow the Freedesktop icon theme standards: `/org/astralco/GGate/icons/hicolor/[size]/[context]/[name].[ext]`. + - Use `GResource` aliases to map resource paths cleanly. + - Load all icons strictly by name using `Gtk.Image.new_from_icon_name` or `resource://` URLs. + +--- + +## 2. Flatpak Build Improvements +* **Status**: **Still Pending** +* **Description**: The Flatpak manifest (`build-aux/flatpak/org.astralco.GGate.json`) compiles python modules using pip with active network access (`--share=network`). +* **Issues**: For official distribution on Flathub, builds must be fully offline and reproducible. +* **Recommended Resolution**: Use `flatpak-pip-generator` to generate a static list of dependencies with SHA-256 hashes, allowing local offline pip installation. + +--- + +## 3. Snapcraft Build Improvements +* **Status**: **Still Pending** +* **Description**: + 1. The snapcraft recipe (`build-aux/snapcraft/snapcraft.yaml`) uses a remote installer script via `curl` and pipes it to python (`curl -sSL https://install.python-poetry.org | python3 -`) to fetch Poetry. + 2. The recipe passes a hardcoded prefix: `--prefix=/snap/ggate/current/usr`. +* **Issues**: Downloading third-party installer scripts at build time is insecure and prone to network failure. Hardcoded snap prefix paths make snap execution non-relocatable across alternative snap channels. +* **Recommended Resolution**: Use native Snapcraft python plugins or local offline packaging of pip dependencies, and let Snapcraft handle the meson installation prefix automatically. diff --git a/.agents/delegation-brief.md b/.agents/reference/delegation-brief.md similarity index 91% rename from .agents/delegation-brief.md rename to .agents/reference/delegation-brief.md index ca8b150..75e5a07 100644 --- a/.agents/delegation-brief.md +++ b/.agents/reference/delegation-brief.md @@ -39,10 +39,7 @@ task-specific prompt. if `meson` is on PATH (else paste the generated XML/meson snippets for review). ## Plans (specs live here) -- `.agents/plans/theming.md` — theming system (palettes §2, JSON schema §5). - `.agents/plans/icon-creation.md` — icon generation + dynamic gresource/meson globbing. -- `.agents/plans/timing-diagram-revamp.md` — timing dialog rewrite (done; §7 draw-area). -- `.agents/plans/preferences-revamp.md`, `theming.md`, `component-animation.md`. ## Reporting - Re-read current on-disk state before editing (prior partial work may exist). diff --git a/.agents/skills/glc-format/SKILL.md b/.agents/skills/glc-format/SKILL.md new file mode 100644 index 0000000..392252a --- /dev/null +++ b/.agents/skills/glc-format/SKILL.md @@ -0,0 +1,153 @@ +--- +name: glc-format +description: Use when reading, writing, or programmatically generating GGate logic-circuit (`.glc`) files, or troubleshooting their load/save. +--- + +# GGate GLC Circuit File Format + +`.glc` is GGate's plain-text logic-circuit format: it lists the components, their +placement and initial state, and the wires between them. This skill is enough to +author or parse a `.glc` file by hand. + +**Core principle:** Wires connect *geometrically*. A `net` segment joins to a +component pin, or to another net, wherever their endpoint coordinates coincide — +there are no ids. Property values containing structural characters must be escaped. + +## Decision flow + +| Task | What to do | +|------|------------| +| Declare file version/compatibility | Add a `version` section (first) | +| Place a component | Section whose header is the component type key | +| Connect pins electrically | Add `net` segment(s) whose endpoints match pin coordinates | +| Put `= , : \` inside a text/name value | Escape it (`\e \c \s \\`) | + +## File shape + +- Plain **UTF-8 text**. +- A file is a list of **sections** separated by a blank line (`\n\n`). +- Each section is: + - a **header line** — the section type, no leading space; then + - zero or more **attribute lines** `key=v1,v2,...` (a single leading space is + optional and ignored). +- An attribute line is split into exactly two parts on the first `=`, and the value + is split on `,`. **Keys and raw values must not contain unescaped `=` or `,`.** +- The first section should be `version`; component and `net` sections follow in any order. + +## `version` section + +``` +version + author=5.0.0 + required=2.6.0 +``` + +- `author` — the GGate version that wrote the file. +- `required` — the minimum GGate version needed to open it; if the opening app is + older, the load is rejected. Safe defaults: `author=5.0.0`, `required=2.6.0`. + +## Component sections + +The header is a **component type key** (see catalog). Attributes: + +| key | meaning | format | +|-----|---------|--------| +| `position` | top-left placement on the canvas | `x,y` (integers, grid units) | +| `input_level` | initial logic level of each **input** pin | `0`/`1` per pin; empty if none | +| `output_level` | initial logic level of each **output** pin | `0`/`1` per pin; empty if none | +| `matrix` | 2×2 orientation transform `a,b,c,d` | identity = `1,0,0,1` | +| `properties` | component settings | `name:value,name:value,...` | + +- `input_level`/`output_level` have one entry per input/output pin; leave empty for + components that have none (e.g. a source has no inputs, a probe has no outputs). The + simulator overwrites these once it runs. +- `matrix` is the rotation/flip. `1,0,0,1` is upright; 90°/180°/270° and flips are the + usual 2×2 integer matrices. +- `properties` are `name:value` pairs; `name` must be one of the component's property + names (catalog below). The value is unescaped, then interpreted as that property's + type (integer / float / select-index / boolean / string). Unknown names are ignored. + +## `net` sections (wires) + +``` +net + position=540,290,410,290 +``` + +- `position` = `x1,y1,x2,y2` — one straight wire segment between two points. +- Connectivity is geometric: route a `net` segment so its endpoint lands exactly on a + pin's coordinate to connect it; segments that share an endpoint are the same net. + +## Encoding (property values only) + +`=` `,` `:` and `\` are structural, so they are escaped inside property **values** on +write and restored on read: + +| character | stored as | +|-----------|-----------| +| `\` | `\\` | +| `,` | `\c` | +| `=` | `\e` | +| `:` | `\s` | + +Example: the label `T=0.25µs` is stored as `text:T\e0.25µs`. Values must stay on one +line (newlines are not escaped). + +## Component catalog + +Type keys and their property names. `tphl`/`tplh` are the high→low / low→high +propagation delays (µs). Select-index properties store the chosen option's index. + +| key | properties | +|-----|------------| +| `not` | `tphl, tplh` | +| `and`, `or`, `nand`, `nor`, `xor` | `inputs` (2 or 3), `tphl, tplh` | +| `tribuff` | `active`, `inverted` (select-indexes) | +| `sw` | `initstate` (0/1) | +| `osc` | `period`, `shift`, `duration` (µs), `initstate` (0/1) | +| `probe` | `name` (string; labels the signal in the timing graph) | +| `text` | `text` (string label, not simulated) | +| `led`, `7seg` | color select-index (`0`=Red, `1`=Blue, `2`=Green, `3`=Yellow) | +| `vdd`, `gnd` | (none) | +| `rsff` | `tphl, tplh` | +| `dff`, `jkff`, `tff` | `trig` (`0`=positive edge, `1`=negative), `tphl, tplh` | +| `counter` | `n`, `bits`, `trig`, `tphl, tplh` | +| `adder` | `halffull` (`0`=half, `1`=full), `tphl, tplh` | +| `siso`, `sipo`, `piso`, `pipo` | `bits`, `trig`, `tphl, tplh` | +| `net` | `position=x1,y1,x2,y2` only | + +## Worked example + +A source oscillator wired to a probe: + +``` +version + author=5.0.0 + required=2.6.0 + +osc + position=340,260 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=period:2.5,shift:0.0,duration:80.0,initstate:0 + +probe + position=530,250 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:Signal1 + +net + position=540,290,410,290 +``` + +## Gotchas + +- Separate sections with exactly one blank line; the file ends without a trailing blank line. +- Each attribute line must split into exactly two parts on `=` — escape any structural + character in values. +- Wire endpoints must land exactly on pin coordinates, or the connection isn't made. +- Parsing is lenient: unknown sections/properties are skipped, so a malformed file loads + partially instead of erroring. diff --git a/CLAUDE.md b/CLAUDE.md index 17f53cc..cd5fd49 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -132,8 +132,12 @@ marshal); no `show_all()`/`container.add()` (use `set_visible`/`append`/`set_chi ## Companion docs -- `.agents/README.md` — GTK4 docs database (60 canonical reference pages) + refresh recipe. -- `.agents/gtk4/` — raw HTML API docs by namespace (adwaita/gtk/pango/gio/cairo). -- `.agents/gtk4/README.md` — widget → where-used-in-GGate map. -- `.agents/skills/` — `developing-gtk-apps` (architecture) + `designing-gnome-ui` (HIG). -- `.agents/TODO.md` — the working backlog (P0–P3), grounded bug lists. +- `.agents/README.md` — index/map of the whole `.agents/` directory. +- `.agents/TODO.md` — working backlog (P-levels; Done at the bottom). +- `.agents/plans/` — forward-looking implementation plans. +- `.agents/skills/` — `developing-gtk-apps` (architecture) + `designing-gnome-ui` (HIG) + + `glc-format` (authoring `.glc` circuit files). +- `.agents/reference/` — `delegation-brief` (read first when delegating) + + `build-system-analysis` (build audit). +- `.agents/gtk4/` — raw HTML API docs by namespace (adwaita/gtk/pango/gio/cairo); + `.agents/gtk4/README.md` is the widget → where-used-in-GGate map. From 80857e7c158cc5203551ee9fee2f84d0d19abd51 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:32:08 +0100 Subject: [PATCH 20/37] ci: resolve pygobject dependency and upgrade flatpak to gnome-48 Co-Authored-By: Antigravity --- .github/workflows/build.yml | 4 ++++ .github/workflows/flatpak.yml | 7 +++++-- build-aux/flatpak/org.astralco.GGate.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 614cbac..2325c6d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,6 +7,9 @@ on: pull_request: branches: [ "main", "v5(development)" ] +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + permissions: contents: write @@ -20,6 +23,7 @@ jobs: dnf install -y git meson ninja-build glib2-devel gtk4-devel libadwaita-devel + pygobject3-devel python3-gobject python3-cairo python3-igraph python3-shapely python3-packaging diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 12be8a3..1355616 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -5,11 +5,14 @@ on: branches: [ "**" ] pull_request: +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + jobs: flatpak-builder: runs-on: ubuntu-latest container: - image: bilelmoussaoui/flatpak-github-actions:gnome-47 + image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48 options: --privileged steps: - name: Checkout @@ -18,7 +21,7 @@ jobs: - name: Set up Flatpak environment run: | flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak install -y flathub org.gnome.Platform//47 org.gnome.Sdk//47 + flatpak install -y flathub org.gnome.Platform//48 org.gnome.Sdk//48 - name: Build Flatpak run: | diff --git a/build-aux/flatpak/org.astralco.GGate.json b/build-aux/flatpak/org.astralco.GGate.json index 456f144..cbdcd8c 100644 --- a/build-aux/flatpak/org.astralco.GGate.json +++ b/build-aux/flatpak/org.astralco.GGate.json @@ -1,7 +1,7 @@ { "app-id" : "org.astralco.GGate", "runtime" : "org.gnome.Platform", - "runtime-version" : "47", + "runtime-version" : "48", "sdk" : "org.gnome.Sdk", "command" : "ggate", "finish-args" : [ From 774f6c0a97b3b6a23932e86a77f917077d7fc56e Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:32:59 +0100 Subject: [PATCH 21/37] ci: use correct package name python3-gobject-devel on Fedora Co-Authored-By: Antigravity --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2325c6d..b563f3d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: dnf install -y git meson ninja-build glib2-devel gtk4-devel libadwaita-devel - pygobject3-devel + python3-gobject-devel python3-gobject python3-cairo python3-igraph python3-shapely python3-packaging From 7f59f0f3e0ece69113eaf415b23f44103ad7875e Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:34:38 +0100 Subject: [PATCH 22/37] ci: install python3-devel dependency in build pipeline Co-Authored-By: Antigravity --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b563f3d..ffad1db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: dnf install -y git meson ninja-build glib2-devel gtk4-devel libadwaita-devel - python3-gobject-devel + python3-gobject-devel python3-devel python3-gobject python3-cairo python3-igraph python3-shapely python3-packaging From 19e8654ea6a0ef1bf2ad81d0af31f78e756997f1 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:36:04 +0100 Subject: [PATCH 23/37] ci: install desktop-file-utils and disable flatpak builder rofiles-fuse Co-Authored-By: Antigravity --- .github/workflows/build.yml | 2 +- .github/workflows/flatpak.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ffad1db..d6a691d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: dnf install -y git meson ninja-build glib2-devel gtk4-devel libadwaita-devel - python3-gobject-devel python3-devel + python3-gobject-devel python3-devel desktop-file-utils python3-gobject python3-cairo python3-igraph python3-shapely python3-packaging diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 1355616..99a60af 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -25,4 +25,4 @@ jobs: - name: Build Flatpak run: | - flatpak-builder --repo=repo --force-clean build-dir build-aux/flatpak/org.astralco.GGate.json + flatpak-builder --disable-rofiles-fuse --repo=repo --force-clean build-dir build-aux/flatpak/org.astralco.GGate.json From 13a0816fe3f525ae484cd76aebb374627604e89b Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:39:46 +0100 Subject: [PATCH 24/37] ci: restrict package builds to releases and add snap and deb workflows Co-Authored-By: Antigravity --- .github/workflows/deb.yml | 66 +++++++++++++++++++++++++++++++++++ .github/workflows/flatpak.yml | 5 ++- .github/workflows/snap.yml | 27 ++++++++++++++ 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/deb.yml create mode 100644 .github/workflows/snap.yml diff --git a/.github/workflows/deb.yml b/.github/workflows/deb.yml new file mode 100644 index 0000000..61920c3 --- /dev/null +++ b/.github/workflows/deb.yml @@ -0,0 +1,66 @@ +name: Deb Build + +on: + release: + types: [published] + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + deb: + runs-on: ubuntu-latest + container: fedora:41 + steps: + - name: Install dependencies + run: > + dnf install -y + git meson ninja-build glib2-devel + gtk4-devel libadwaita-devel + python3-gobject-devel python3-devel desktop-file-utils + python3-gobject python3-cairo + python3-igraph python3-shapely python3-packaging + dpkg + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Mark workspace safe for git + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + + - name: Configure + run: meson setup build --prefix=/usr + + - name: Compile + run: meson compile -C build + + - name: Install to staging + run: DESTDIR=staging meson install -C build + + - name: Create Debian control file + run: | + VERSION=$(grep -oE "version: '[^']+'" meson.build | head -n1 | cut -d"'" -f2) + mkdir -p staging/DEBIAN + cat << EOF > staging/DEBIAN/control + Package: ggate + Version: ${VERSION} + Section: utils + Priority: optional + Architecture: amd64 + Maintainer: Astraldev + Depends: python3, python3-gi, python3-gi-cairo, python3-igraph, python3-shapely, python3-packaging, libgtk-4-1 (>= 4.16.0), libadwaita-1-0 (>= 1.6.8) + Description: A digital logic circuit simulator and designer + GGate is a digital logic circuit simulator that allows you to design + and test digital circuits using standard logic gates and components. + EOF + + - name: Build Debian package + run: | + VERSION=$(grep -oE "version: '[^']+'" meson.build | head -n1 | cut -d"'" -f2) + dpkg-deb --build staging "ggate_${VERSION}_amd64.deb" + + - name: Upload deb artifact + uses: actions/upload-artifact@v4 + with: + name: ggate-deb + path: ggate_*.deb diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 99a60af..8c475aa 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -1,9 +1,8 @@ name: Flatpak Build on: - push: - branches: [ "**" ] - pull_request: + release: + types: [published] env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true diff --git a/.github/workflows/snap.yml b/.github/workflows/snap.yml new file mode 100644 index 0000000..8f951a3 --- /dev/null +++ b/.github/workflows/snap.yml @@ -0,0 +1,27 @@ +name: Snap Build + +on: + release: + types: [published] + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + snapcraft: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Build Snap + uses: snapcore/action-build@v1 + id: snapcraft + with: + path: build-aux/snapcraft + + - name: Upload Snap artifact + uses: actions/upload-artifact@v4 + with: + name: ggate-snap + path: ${{ steps.snapcraft.outputs.snap }} From 56176d7cb012bcfcd875d26d7e55bde2e21d5e0b Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:15:29 +0100 Subject: [PATCH 25/37] build: modernize CI runners, release-gate packaging, add Debian packaging Bump actions (checkout@v5, action-gh-release@v3, upload-artifact@v7) and set the Node-24 opt-in across all workflows. Gate flatpak/snap/deb to release; keep the source-tarball Build Pipeline on push/PR. Add real Debian packaging under build-aux/debian (debhelper + meson) with a Python generator that transpiles CHANGELOG.md into a multi-entry debian/changelog at build time; add the 5.0.0 CHANGELOG entry. Consolidate AI docs to .agents (drop the .claude duplicate, git-ignore .claude); scope the debian build-output ignores. Co-Authored-By: Antigravity --- .claude/skills/developing-gtk-apps/SKILL.md | 198 -------------------- .github/workflows/build.yml | 6 +- .github/workflows/deb.yml | 68 +++---- .github/workflows/flatpak.yml | 2 +- .github/workflows/snap.yml | 4 +- .gitignore | 7 +- CHANGELOG.md | 7 + build-aux/debian/control | 31 +++ build-aux/debian/copyright | 7 + build-aux/debian/rules | 6 + build-aux/gen-deb-changelog.py | 130 +++++++++++++ 11 files changed, 218 insertions(+), 248 deletions(-) delete mode 100644 .claude/skills/developing-gtk-apps/SKILL.md create mode 100644 build-aux/debian/control create mode 100644 build-aux/debian/copyright create mode 100755 build-aux/debian/rules create mode 100644 build-aux/gen-deb-changelog.py diff --git a/.claude/skills/developing-gtk-apps/SKILL.md b/.claude/skills/developing-gtk-apps/SKILL.md deleted file mode 100644 index e72531e..0000000 --- a/.claude/skills/developing-gtk-apps/SKILL.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -name: developing-gtk-apps -description: Use when building GTK 4/libadwaita applications; before writing app boilerplate; when debugging threading, signals, or lifecycle issues; when setting up GSettings, resources, or packaging; delegates UI/widget decisions to designing-gnome-ui skill ---- - -# Developing GTK Apps - -Build robust GTK 4/libadwaita applications with correct architecture, lifecycle, and patterns. - -**Core principle:** Get the foundation right before the UI. Application lifecycle, threading model, and resource management are where most GTK apps break. - -**Relationship to UI skill:** This skill handles architecture and plumbing. For widget selection, layout, and HIG compliance, use `designing-gnome-ui`. - -## Decision Flow - -| Task | Use | -|------|-----| -| Which widget for settings? | designing-gnome-ui | -| How to structure preferences window? | designing-gnome-ui | -| App crashes on startup | THIS SKILL | -| UI freezes during operation | THIS SKILL | -| How to save user preferences | THIS SKILL (GSettings) | -| Signal not firing/memory leak | THIS SKILL | -| Setting up new app boilerplate | THIS SKILL | -| Packaging for Flatpak | THIS SKILL | - -## What's Current (libadwaita 1.7+, GTK 4.18+) - -**API deprecations to avoid:** -- `GtkShortcutsWindow` → Use `AdwShortcutsDialog` (libadwaita 1.8+) -- `.dim-label` CSS class → Use `.dimmed` class -- X11/Broadway backends are deprecated in GTK 4 (removal planned for GTK 5) - -**New patterns (libadwaita 1.6-1.8):** -- `AdwSpinner` - Preferred over `GtkSpinner` -- `AdwToggleGroup` - Replaces multiple exclusive `GtkToggleButton` instances -- `AdwBottomSheet` - Persistent bottom sheets -- `AdwWrapBox` - Box that wraps children to new lines -- `AdwInlineViewSwitcher` - For cards, sidebars, boxed lists - -## Application Boilerplate - -```python -import gi -gi.require_version('Gtk', '4.0') -gi.require_version('Adw', '1') -from gi.repository import Gtk, Adw, Gio - -class MyApp(Adw.Application): - def __init__(self): - super().__init__( - application_id="com.example.MyApp", - flags=Gio.ApplicationFlags.DEFAULT_FLAGS - ) - - def do_activate(self): - win = self.props.active_window - if not win: - win = MyWindow(application=self) - win.present() - -class MyWindow(Adw.ApplicationWindow): - def __init__(self, **kwargs): - super().__init__(**kwargs) - self.set_default_size(800, 600) - -def main(): - app = MyApp() - return app.run(None) -``` - -### Application ID Rules - -| Rule | Example | -|------|---------| -| Reverse domain notation | `com.example.AppName` | -| Only alphanumeric + dots | `org.gnome.TextEditor` | -| Min 2 segments | `com.myapp` (not `myapp`) | -| Match desktop file | `com.example.MyApp.desktop` | - -### Lifecycle Signals - -| Signal | When | Use For | -|--------|------|---------| -| `startup` | Once, app launches | Actions, CSS, GSettings | -| `activate` | Each launch/raise | Create/present window | -| `shutdown` | App exits | Save state, cleanup | -| `open` | Files passed to app | Handle file arguments | - -```python -def do_startup(self): - Adw.Application.do_startup(self) # Chain up FIRST - self.setup_actions() -``` - -## Threading - The Critical Rule - -**GTK is single-threaded. All UI calls MUST happen on the main thread.** - -```python -# WRONG - will crash -def background_task(): - result = slow_computation() - self.label.set_text(result) # CRASH - -# RIGHT - use GLib.idle_add -def background_task(): - result = slow_computation() - GLib.idle_add(self.label.set_text, result) # Safe - -threading.Thread(target=background_task).start() -``` - -For async patterns with `Gio.Task` and cancellation, see `gtk-patterns-reference.md`. - -## Actions (Quick Reference) - -Actions connect UI to behavior. Define at app level (`app.action`) or window level (`win.action`). - -```python -# In do_startup - app-level action -quit_action = Gio.SimpleAction.new("quit", None) -quit_action.connect("activate", lambda a, p: self.quit()) -self.add_action(quit_action) -self.set_accels_for_action("app.quit", ["q"]) - -# In window __init__ - window-level action -save_action = Gio.SimpleAction.new("save", None) -save_action.connect("activate", self.on_save) -self.add_action(save_action) -self.get_application().set_accels_for_action("win.save", ["s"]) -``` - -For stateful actions (toggles), parameterized actions, and menu integration, see `gtk-patterns-reference.md`. - -## GSettings (Quick Reference) - -Persist user preferences with GSettings. Requires a schema file. - -```python -# In app __init__ -self.settings = Gio.Settings.new("com.example.MyApp") - -# Read/write values -dark = self.settings.get_boolean("dark-mode") -self.settings.set_boolean("dark-mode", True) - -# Bind to widget property (auto-syncs) -self.settings.bind("window-width", window, "default-width", - Gio.SettingsBindFlags.DEFAULT) - -# React to changes -self.settings.connect("changed::dark-mode", self.on_dark_changed) -``` - -For schema XML format and installation, see `gtk-patterns-reference.md`. - -## Debugging (Quick Reference) - -```bash -GTK_DEBUG=interactive myapp # Open GTK Inspector (Ctrl+Shift+D) -G_MESSAGES_DEBUG=all myapp # Show all debug messages -G_DEBUG=fatal-criticals myapp # Abort on critical warnings -GSETTINGS_BACKEND=memory myapp # Test without persisting settings -``` - -For full debugging patterns, profiling, and GDB integration, see `gtk-debugging-reference.md`. - -## Red Flags - STOP - -- Calling UI methods from threads (use `GLib.idle_add`) -- Missing `do_startup` chain-up -- Signal handlers without disconnect on destroy -- Blocking operations in signal handlers -- Hardcoded paths instead of XDG directories -- Missing application ID or wrong format -- Using `time.sleep()` in main thread -- Using `GtkShortcutsWindow` (deprecated - use `AdwShortcutsDialog`) -- Using `GtkSpinner` for libadwaita apps (use `AdwSpinner`) - -## Reference Files - -| Need | File | -|------|------| -| GObject classes, properties, **signals**, list models, **property bindings**, **factories** | `gtk-gobject-reference.md` | -| Actions, GSettings, Resources, Blueprint, async file ops | `gtk-patterns-reference.md` | -| Desktop file, **AppStream metadata**, Meson, Flatpak, **icons**, **Python deps** | `gtk-packaging-reference.md` | -| Testing with pytest, **async testing**, **headless/CI testing** | `gtk-testing-reference.md` | -| Internationalization, gettext, **ngettext plurals**, .po files, **Blueprint i18n**, **RTL testing** | `gtk-i18n-reference.md` | -| DBus activation, **interface export**, background services, **Flatpak portals** | `gtk-dbus-reference.md` | -| GTK Inspector, env vars, **profiling**, **memory debugging** | `gtk-debugging-reference.md` | -| UI patterns, widgets, HIG | Use `designing-gnome-ui` skill | - -## External References - -- [Blueprint docs](https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/) -- [Libadwaita API](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/) -- [GTK 4 API](https://docs.gtk.org/gtk4/) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d6a691d..3c6a112 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: python3-igraph python3-shapely python3-packaging - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Mark workspace safe for git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -43,13 +43,13 @@ jobs: run: meson dist -C build --no-tests --formats gztar - name: Upload tarball artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ggate-source-tarball path: build/meson-dist/*.tar.gz - name: Attach to release if: startsWith(github.ref, 'refs/tags/') - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: files: build/meson-dist/*.tar.gz diff --git a/.github/workflows/deb.yml b/.github/workflows/deb.yml index 61920c3..9970c74 100644 --- a/.github/workflows/deb.yml +++ b/.github/workflows/deb.yml @@ -7,60 +7,44 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true +permissions: + contents: write + jobs: deb: runs-on: ubuntu-latest - container: fedora:41 + container: ubuntu:26.04 steps: - - name: Install dependencies - run: > - dnf install -y - git meson ninja-build glib2-devel - gtk4-devel libadwaita-devel - python3-gobject-devel python3-devel desktop-file-utils - python3-gobject python3-cairo - python3-igraph python3-shapely python3-packaging - dpkg + - name: Install build dependencies + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y \ + git build-essential devscripts debhelper dh-python \ + meson ninja-build pkg-config \ + python3-dev python3-gi-dev libcairo2-dev \ + libgtk-4-dev libadwaita-1-dev \ + python3-gi python3-gi-cairo python3-igraph python3-shapely python3-packaging - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Mark workspace safe for git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - - name: Configure - run: meson setup build --prefix=/usr - - - name: Compile - run: meson compile -C build - - - name: Install to staging - run: DESTDIR=staging meson install -C build - - - name: Create Debian control file + - name: Stage debian/, generate changelog, and build package run: | - VERSION=$(grep -oE "version: '[^']+'" meson.build | head -n1 | cut -d"'" -f2) - mkdir -p staging/DEBIAN - cat << EOF > staging/DEBIAN/control - Package: ggate - Version: ${VERSION} - Section: utils - Priority: optional - Architecture: amd64 - Maintainer: Astraldev - Depends: python3, python3-gi, python3-gi-cairo, python3-igraph, python3-shapely, python3-packaging, libgtk-4-1 (>= 4.16.0), libadwaita-1-0 (>= 1.6.8) - Description: A digital logic circuit simulator and designer - GGate is a digital logic circuit simulator that allows you to design - and test digital circuits using standard logic gates and components. - EOF - - - name: Build Debian package - run: | - VERSION=$(grep -oE "version: '[^']+'" meson.build | head -n1 | cut -d"'" -f2) - dpkg-deb --build staging "ggate_${VERSION}_amd64.deb" + cp -r build-aux/debian debian + python3 build-aux/gen-deb-changelog.py > debian/changelog + dpkg-buildpackage -us -uc -b - name: Upload deb artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ggate-deb - path: ggate_*.deb + path: ../ggate_*.deb + + - name: Attach to release + uses: softprops/action-gh-release@v3 + with: + files: ../ggate_*.deb diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 8c475aa..cc84913 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -15,7 +15,7 @@ jobs: options: --privileged steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Flatpak environment run: | diff --git a/.github/workflows/snap.yml b/.github/workflows/snap.yml index 8f951a3..7258a96 100644 --- a/.github/workflows/snap.yml +++ b/.github/workflows/snap.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Build Snap uses: snapcore/action-build@v1 @@ -21,7 +21,7 @@ jobs: path: build-aux/snapcraft - name: Upload Snap artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: ggate-snap path: ${{ steps.snapcraft.outputs.snap }} diff --git a/.gitignore b/.gitignore index 2c5e177..c17a18e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,10 @@ **/__pycache__/ m4/ *.cache/ -debian/ +# /debian is a transient CI copy of build-aux/debian; ignore it and deb build dirs +/debian/ +obj-*/ +build-dir/ *.egg-info/ dist/ build/ @@ -20,4 +23,4 @@ deb_dist/ .mypy_cache dev-* .agents/gtk4 -.agents/debug-journal.md \ No newline at end of file +.claude/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index dc0dd32..8343423 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # ChangeLog +## 2026-06-14 Ekure Edem + Revamp timing diagram: Adw dialog with themed Cairo waveforms + Add theming system with Classic, Space, Frappé and Mocha themes + Migrate preferences to Adw.PreferencesDialog + Dynamic JSON to gresource pipeline; recompile dev resources on launch + Fix oscillator timing and gate simulation crashes + ## 2025-04-26 Ekure Edem Switch all tabs to spaces Reorganized project structure and split files to seperate parts diff --git a/build-aux/debian/control b/build-aux/debian/control new file mode 100644 index 0000000..d92f7ad --- /dev/null +++ b/build-aux/debian/control @@ -0,0 +1,31 @@ +Source: ggate +Section: utils +Priority: optional +Maintainer: Astraldev +Build-Depends: debhelper-compat (= 13), + meson (>= 1.4.0), + ninja-build, + pkg-config, + python3-dev, + python3-gi-dev, + libcairo2-dev, + libgtk-4-dev (>= 4.16.0), + libadwaita-1-dev (>= 1.6.8), + dh-python +Standards-Version: 4.6.2 +Homepage: https://github.com/astraldev/GGate + +Package: ggate +Architecture: any +Depends: ${python3:Depends}, + ${misc:Depends}, + python3-gi, + python3-gi-cairo, + python3-igraph, + python3-shapely, + python3-packaging, + libgtk-4-1 (>= 4.16.0), + libadwaita-1-0 (>= 1.6.8) +Description: A digital logic circuit simulator and designer + GGate is a digital logic circuit simulator that allows you to design + and test digital circuits using standard logic gates and components. diff --git a/build-aux/debian/copyright b/build-aux/debian/copyright new file mode 100644 index 0000000..cba1d8c --- /dev/null +++ b/build-aux/debian/copyright @@ -0,0 +1,7 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: ggate +Source: https://github.com/astraldev/GGate + +Files: * +Copyright: 2026 Astraldev +License: GPL-3.0+ diff --git a/build-aux/debian/rules b/build-aux/debian/rules new file mode 100755 index 0000000..2e113b3 --- /dev/null +++ b/build-aux/debian/rules @@ -0,0 +1,6 @@ +#!/usr/bin/make -f + +export DH_VERBOSE = 1 + +%: + dh $@ --with python3 --buildsystem=meson diff --git a/build-aux/gen-deb-changelog.py b/build-aux/gen-deb-changelog.py new file mode 100644 index 0000000..8c1c102 --- /dev/null +++ b/build-aux/gen-deb-changelog.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +# Generate multi-entry debian/changelog from meson.build version and CHANGELOG.md. +import os +import re +import sys +import datetime +import email.utils + +VERSION_PATTERNS = [ + re.compile(r"[Bb]ump version to (\d+\.\d+(?:\.\d+)?)"), + re.compile(r"[Rr]elease version (\d+\.\d+(?:\.\d+)?)"), + re.compile(r"[Bb]ump to (\d+\.\d+(?:\.\d+)?)"), + re.compile(r"(?:^|\s)[vV](\d+\.\d+(?:\.\d+)?)") +] + +class Section: + def __init__(self, date_str, author): + # Section attributes + self.date_str = date_str + self.author = author + self.bullets = [] + self.explicit_version = None + self.version = None + +def get_meson_version(meson_path): + # Extract version from meson.build + with open(meson_path, "r", encoding="utf-8") as f: + content = f.read() + match = re.search(r"version\s*:\s*'([0-9][^']*)'", content) + if match: + return match.group(1) + return "0.0.0" + +def extract_version(line): + # Find explicit version in a line + for pattern in VERSION_PATTERNS: + match = pattern.search(line) + if match: + return match.group(1) + return None + +def parse_header(line): + # Parse header fields + content = line[2:].strip() + parts = content.split(None, 1) + if len(parts) < 2: + return None, None + return parts[0], parts[1].strip() + +def parse_changelog(changelog_path): + # Parse changelog sections + sections = [] + current_section = None + with open(changelog_path, "r", encoding="utf-8") as f: + for line in f: + if line.startswith("## "): + date_str, author = parse_header(line) + if date_str: + current_section = Section(date_str, author) + sections.append(current_section) + elif current_section is not None: + stripped = line.strip() + if stripped: + current_section.bullets.append(stripped) + ver = extract_version(stripped) + if ver and current_section.explicit_version is None: + current_section.explicit_version = ver + return sections + +def resolve_versions(sections, meson_version): + # Assign versions to stanzas + if not sections: + return + + sections[0].version = meson_version + for i in range(1, len(sections)): + if sections[i].explicit_version: + sections[i].version = sections[i].explicit_version + + is_anchor = [s.version is not None for s in sections] + + for i in range(len(sections)): + if not is_anchor[i]: + ref_ver = "0" + for j in range(i - 1, -1, -1): + if is_anchor[j]: + ref_ver = sections[j].version + break + + a = i + while a > 0 and not is_anchor[a - 1]: + a -= 1 + b = i + while b < len(sections) - 1 and not is_anchor[b + 1]: + b += 1 + + n_val = b - i + 1 + sections[i].version = f"{ref_ver}~dev{n_val}" + +def format_rfc2822_date(date_str): + # Format date as RFC-2822 + try: + dt = datetime.datetime.strptime(date_str, "%Y-%m-%d").astimezone() + return email.utils.format_datetime(dt) + except Exception: + return email.utils.formatdate(localtime=True) + +def generate_changelog(sections): + # Print formatted stanzas to stdout + for i, sec in enumerate(sections): + rfc_date = format_rfc2822_date(sec.date_str) + print(f"ggate ({sec.version}-1) unstable; urgency=medium\n") + for bullet in sec.bullets: + print(f" * {bullet}") + print(f"\n -- {sec.author} {rfc_date}") + if i < len(sections) - 1: + print() + +def main(): + root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + meson_path = os.path.join(root, "meson.build") + changelog_path = os.path.join(root, "CHANGELOG.md") + + meson_version = get_meson_version(meson_path) + sections = parse_changelog(changelog_path) + resolve_versions(sections, meson_version) + generate_changelog(sections) + +if __name__ == "__main__": + main() From 295e47c61d714dbe71aa0a6592c0d7711eb6b043 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 20:20:20 +0100 Subject: [PATCH 26/37] perf: improvement of main page and timing running screen calculation --- .agents/TODO.md | 7 + ggate/CircuitManager.py | 285 +++++++++++++----- .../Components/Windows/TimingGraph/Diagram.py | 9 +- ggate/DrawArea.py | 5 +- ggate/MainFrame.py | 8 +- ggate/Utils.py | 4 + 6 files changed, 230 insertions(+), 88 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index f3ead9e..65f99d4 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -7,6 +7,13 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie ## P1 — polish +- [ ] **Guard against over-large circuits.** Warn (and optionally block) when loading a circuit + too large to handle, and warn when a save/compress or simulation will take too long, instead of + hanging/OOM-ing. (Run-time hang is mitigated by the non-blocking sim + the >15s log, but there's + no up-front guard.) +- [ ] **Timing diagram: surface the width cap.** `diagram_width` is now clamped to Cairo's 32767px + so a fine timing unit can't OOM; tell the user (status/banner) when the chart is capped and to + zoom out, instead of silently capping. - [ ] **Timing diagram visual polish** (PM: "not looking great"). Dense oscillator waveforms read as a picket-fence and the hi/lo amplitude is small; large empty tail (data ends at the oscillator duration but range defaults to 200µs) and dead vertical space below the rows. diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index 09b9df2..a59c4f1 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -7,19 +7,23 @@ import os import copy +import time import igraph -from gi.repository import GObject +from gi.repository import GObject, GLib from shapely.geometry import LineString, Point from ggate.Components.LogicGates.SystemComponents import BaseComponent from ggate.Components.LogicGates import logic_gates from ggate.const import definitions from ggate import config from ggate import Preference -from ggate.Utils import encode_text, decode_text, fit_components, get_components_rect, multiply_matrix, rotate_left_90, rotate_right_90 +from ggate.Utils import encode_text, decode_text, fit_components, get_components_rect, multiply_matrix, rotate_left_90, rotate_right_90, logger from gettext import gettext as _ CircuitComponent = Tuple[definitions, BaseComponent] +# warn if a simulation run takes longer than this (seconds) +_SLOW_SIM_SECONDS = 15 + class CircuitConverter(): def __init__(self, circuit: CircuitManager): self.circuit = circuit @@ -204,6 +208,9 @@ def __init__(self, mainframe: MainFrame): self.filepath = "" self.mainframe = mainframe self.converter = CircuitConverter(self) + self.sim_generator = None + self.sim_idle_id = None + self.sim_start_time = None self.net_connections = [] self.net_levels = [] @@ -543,97 +550,213 @@ def revert_state(self): self.emit("currenttime-changed", self.current_time) - def analyze_logic(self): - counter = 0 - stop_time = Preference.max_calc_duration - max_iters = Preference.max_calc_iters + def cancel_simulation(self): + if hasattr(self, "sim_idle_id") and self.sim_idle_id is not None: + GLib.source_remove(self.sim_idle_id) + self.sim_idle_id = None + self.sim_generator = None + self.sim_cancelled = True - if self.component_state_history: - t = 0 - for i, comp_state in reversed(list(enumerate(self.component_state_history))): - if comp_state[0] <= self.current_time: - t = i - break - self.current_time = self.component_state_history[t][0] - self.component_state_history = self.component_state_history[:t] - self.probe_levels_history = self.probe_levels_history[:t] + def _rewind_history(self): + # re-running from current_time: drop any recorded state newer than it + if not self.component_state_history: + return + t = 0 + for i, comp_state in reversed(list(enumerate(self.component_state_history))): + if comp_state[0] <= self.current_time: + t = i + break + self.current_time = self.component_state_history[t][0] + self.component_state_history = self.component_state_history[:t] + self.probe_levels_history = self.probe_levels_history[:t] + + def _net_index_at(self, x, y): + for j, net in enumerate(self.net_connections): + if (x, y) in net: + return j + return None - while self.current_time < stop_time: - net_levels_history = [] + def _gather_inputs(self, comp): + # input level per connected input pin; None if any pin sits on an open net + inputs = [] + for px, py in comp.rot_input_pins: + j = self._net_index_at(comp.pos_x + px, comp.pos_y + py) + if j is None: + continue + if self.net_levels[j] == -1: + return None + inputs.append(self.net_levels[j]) + return inputs + + def _apply_output_stack(self, comp): + for i in range(len(comp.rot_output_pins)): + stack = comp.output_stack[i] + if not stack: + continue + if stack[0][0] == self.current_time: + comp.output_level[i] = stack.pop(0)[1] + elif comp.output_level[i] == stack[0][1]: + stack.pop(0) - while True: - if self.set_netlevels(): - return True - - for c in self.components: - if c[0] != definitions.component_net: - input_datas = [] - for p in c[1].rot_input_pins: - for j, net in enumerate(self.net_connections): - if (c[1].pos_x + p[0], c[1].pos_y + p[1]) in net: - if self.net_levels[j] == -1: - self.emit("message-changed", _("Input port is open circuit!")) - return True - input_datas.append(self.net_levels[j]) - - c[1].calculate(input_datas, self.current_time) - c[1].input_level = input_datas[:] - - for i, p in enumerate(c[1].rot_output_pins): - if c[1].output_stack[i]: - if c[1].output_stack[i][0][0] == self.current_time: - c[1].output_level[i] = c[1].output_stack[i].pop(0)[1] - elif c[1].output_level[i] == c[1].output_stack[i][0][1]: - c[1].output_stack[i].pop(0) - - if self.net_levels in net_levels_history[:-1]: - if self.net_levels == net_levels_history[len(net_levels_history) - 1]: - self.emit("message-changed", "") - break - else: - self.emit("message-changed", _("This circuit oscillates on infinite frequency!")) - return True + def _evaluate_components(self): + # evaluate every non-net component at current_time; True if an input is open + for c in self.components: + if c[0] == definitions.component_net: + continue + inputs = self._gather_inputs(c[1]) + if inputs is None: + self.emit("message-changed", _("Input port is open circuit!")) + return True + c[1].calculate(inputs, self.current_time) + c[1].input_level = inputs[:] + self._apply_output_stack(c[1]) + return False - net_levels_history.append(self.net_levels) + def _settle_state(self, net_levels_history): + # "settled" (stable), "oscillate" (repeating cycle), or "continue" + if self.net_levels in net_levels_history[:-1]: + if self.net_levels == net_levels_history[-1]: + return "settled" + return "oscillate" + return "continue" - if counter >= max_iters: - self.emit("message-changed", _("This logic is complexity! (iters > %d)") % max_iters) - return True + def _record_state(self): + probe_levels = [self.current_time] + for c in self.components: + if c[0] == definitions.component_probe: + probe_levels.append(c[1].input_level[0]) + self.probe_levels_history.append(probe_levels) - counter += 1 + comp_state = [self.current_time, self.net_levels[:]] + for c in self.components: + if c[0] != definitions.component_net: + comp_state.append((c[1].input_level[:], c[1].output_level[:], copy.deepcopy(c[1].output_stack), copy.deepcopy(c[1].store))) + self.component_state_history.append(comp_state) - probe_levels = [self.current_time] - for c in self.components: - if c[0] == definitions.component_probe: - probe_levels.append(c[1].input_level[0]) - self.probe_levels_history.append(probe_levels) + def _advance_to_next_event(self): + # jump current_time to the soonest pending output event; False if none + timelist = [] + for c in self.components: + if c[0] == definitions.component_net: + continue + for s in c[1].output_stack: + if s and s[0][0] != self.current_time: + timelist.append(s[0][0]) + if not timelist or min(timelist) == self.current_time: + return False + self.current_time = min(timelist) + for c in self.components: + if c[0] == definitions.component_net: + continue + for i, s in enumerate(c[1].output_stack): + if s and s[0][0] == self.current_time: + c[1].output_level[i] = s.pop(0)[1] + return True - comp_state = [self.current_time, self.net_levels[:]] - for c in self.components: - if c[0] != definitions.component_net: - comp_state.append((c[1].input_level[:], c[1].output_level[:], copy.deepcopy(c[1].output_stack), copy.deepcopy(c[1].store))) - self.component_state_history.append(comp_state) + def _settle(self, counter, max_iters): + # run the per-timestep settle loop; yields ("progress", t) each iteration and + # returns the updated counter when settled, or None on error (message emitted) + net_levels_history = [] + while True: + if self.set_netlevels(): + return None + if self._evaluate_components(): + return None + + state = self._settle_state(net_levels_history) + if state == "settled": + self.emit("message-changed", "") + return counter + if state == "oscillate": + self.emit("message-changed", _("This circuit oscillates on infinite frequency!")) + return None + + net_levels_history.append(self.net_levels) + if counter >= max_iters: + self.emit("message-changed", _("Calculation exceeded %d iterations — raise the limit in Preferences.") % max_iters) + return None + counter += 1 + yield ("progress", self.current_time) + + def analyze_logic_generator(self): + self._rewind_history() + counter = 0 + stop_time = Preference.max_calc_duration + max_iters = Preference.max_calc_iters - tmptime = self.current_time - timelist = [] - for c in self.components: - if c[0] != definitions.component_net: - for s in c[1].output_stack: - if s and s[0][0] != self.current_time: - timelist.append(s[0][0]) - if timelist: - self.current_time = min(timelist) - if tmptime == self.current_time: + while self.current_time < stop_time: + counter = yield from self._settle(counter, max_iters) + if counter is None: + yield ("error", True) + return + self._record_state() + if not self._advance_to_next_event(): break - - for c in self.components: - if c[0] != definitions.component_net: - for i, s in enumerate(c[1].output_stack): - if s and s[0][0] == self.current_time: - c[1].output_level[i] = s.pop(0)[1] + yield ("progress", self.current_time) self.emit("currenttime-changed", self.current_time) - return False + yield ("success", False) + + def _run_sim_sync(self): + result = None + try: + while True: + step_type, val = next(self.sim_generator) + if step_type in ("success", "error"): + result = val + break + except StopIteration: + pass + self.sim_generator = None + self._log_if_slow() + return result + + def _emit_progress(self): + pct = (self.current_time / Preference.max_calc_duration) * 100 + self.emit("message-changed", _("Calculating... %.0f%%") % pct) + + def _log_if_slow(self): + if self.sim_start_time is None: + return + elapsed = time.time() - self.sim_start_time + self.sim_start_time = None + if elapsed > _SLOW_SIM_SECONDS: + logger.warning("simulation took %.1fs (%d frames)", elapsed, len(self.probe_levels_history)) + + def _finish_sim(self, callback, val, clear_message): + self.sim_idle_id = None + self.sim_generator = None + self._log_if_slow() + if clear_message: + self.emit("message-changed", "") + if callback: + callback(val) + + def _sim_idle_step(self, callback): + if self.sim_cancelled: + return GLib.SOURCE_REMOVE + start = time.time() + try: + while time.time() - start < 0.02: + step_type, val = next(self.sim_generator) + if step_type == "progress": + self._emit_progress() + elif step_type in ("success", "error"): + self._finish_sim(callback, val, step_type == "success") + return GLib.SOURCE_REMOVE + except StopIteration: + self._finish_sim(callback, False, True) + return GLib.SOURCE_REMOVE + return GLib.SOURCE_CONTINUE + + def analyze_logic(self, callback=None): + self.cancel_simulation() + self.sim_cancelled = False + self.sim_generator = self.analyze_logic_generator() + self.sim_start_time = time.time() + if callback is None: + return self._run_sim_sync() + self.sim_idle_id = GLib.idle_add(self._sim_idle_step, callback) def remove_selected_component(self): for c in self.selected_components: diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index 55d82fe..eb9f7f6 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -15,6 +15,8 @@ # Ruler strip height in pixels; each probe row is also _ROW_H px. _ROW_H = 40 +# max chart width in px (Cairo surface limit) +_MAX_DIAGRAM_WIDTH = 32767 class TimingGraphDiagram(Gtk.Box): def __init__(self, parent: MainFrame): @@ -48,7 +50,8 @@ def __init__(self, parent: MainFrame): self.chart_area.set_hexpand(True) # fills viewport width before scrolling kicks in self.name_scroll = Gtk.ScrolledWindow() - self.name_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) + # EXTERNAL: no scrollbar but still scrolls via the shared vadjustment + self.name_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.EXTERNAL) self.name_scroll.set_hexpand(False) self.name_scroll.set_vexpand(True) self.name_scroll.set_child(self.name_area) @@ -88,7 +91,9 @@ def __get_probes(self): def update_layout_sizes(self): n = len(self.__get_probes()) self.img_height = _ROW_H + n * _ROW_H # ruler row + one row per probe - self.diagram_width = int(max(1, (self.end_time - self.start_time) * self.scale)) + raw_width = int(max(1, (self.end_time - self.start_time) * self.scale)) + self.width_capped = raw_width > _MAX_DIAGRAM_WIDTH + self.diagram_width = min(raw_width, _MAX_DIAGRAM_WIDTH) # set_size_request only ever called here — never inside a draw callback (avoids layout loop) self.name_area.set_size_request(self.name_width, self.img_height) self.chart_area.set_size_request(self.diagram_width, self.img_height) diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index 79463de..54223c9 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -1109,9 +1109,8 @@ def on_button_release_primary(self, *args): im[2] * (self.cursor_smooth_x - c[1].pos_x) + im[3] * ( self.cursor_smooth_y - c[1].pos_y) + c[1].pos_y, self.circuit.current_time): - if not self.parent.pause_running_mode and not self.circuit.analyze_logic(): - if hasattr(self.parent, "timing_diagram") and self.parent.timing_diagram.get_visible(): - self.parent.timing_diagram._draw_area.draw() + if not self.parent.pause_running_mode: + self.circuit.analyze_logic(callback=self.parent.on_simulation_finished) self.queue_draw() break diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index ad11b7c..f970415 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -463,13 +463,17 @@ def on_circuit_run(self, *args): self.circuit.analyze_net_connections() self.circuit.initialize_logic() - # compute t=0..stop_time once so oscillators/probes populate history - self.circuit.analyze_logic() + self.circuit.analyze_logic(callback=self.on_simulation_finished) + def on_simulation_finished(self, is_error): + if not is_error: + if hasattr(self, "timing_diagram") and self.timing_diagram.get_visible(): + self.timing_diagram._draw_area.draw() self.drawarea.redraw = True self.drawarea.queue_draw() def on_circuit_stop(self, *args): + self.circuit.cancel_simulation() if self.running_mode: self.running_mode = False if self.circuit.action_count < len(self.circuit.components_history) - 1: diff --git a/ggate/Utils.py b/ggate/Utils.py index a5aff89..5fcbe81 100644 --- a/ggate/Utils.py +++ b/ggate/Utils.py @@ -1,9 +1,13 @@ # -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- +import logging from gi.repository import Pango, PangoCairo from ggate.const import definitions as const import cairo +# shared application logger +logger = logging.getLogger("ggate") + def number_in_range(value, min_value, max_value): return min_value <= value <= max_value From aa264824627f3017ff5726a28cf6e2f79ebdc232 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:25:01 +0100 Subject: [PATCH 27/37] perf: improvement of main page and timing running screen calculation --- ggate/CircuitManager.py | 29 ++++++++++--------- .../Components/Windows/TimingGraph/Diagram.py | 5 ++-- ggate/MainFrame.py | 10 +++++++ 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index a59c4f1..7f3a11b 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -210,7 +210,9 @@ def __init__(self, mainframe: MainFrame): self.converter = CircuitConverter(self) self.sim_generator = None self.sim_idle_id = None + self.sim_cancelled = False self.sim_start_time = None + self.sim_last_emit = 0.0 self.net_connections = [] self.net_levels = [] @@ -551,11 +553,11 @@ def revert_state(self): self.emit("currenttime-changed", self.current_time) def cancel_simulation(self): - if hasattr(self, "sim_idle_id") and self.sim_idle_id is not None: + self.sim_cancelled = True + if self.sim_idle_id is not None: GLib.source_remove(self.sim_idle_id) self.sim_idle_id = None self.sim_generator = None - self.sim_cancelled = True def _rewind_history(self): # re-running from current_time: drop any recorded state newer than it @@ -711,10 +713,6 @@ def _run_sim_sync(self): self._log_if_slow() return result - def _emit_progress(self): - pct = (self.current_time / Preference.max_calc_duration) * 100 - self.emit("message-changed", _("Calculating... %.0f%%") % pct) - def _log_if_slow(self): if self.sim_start_time is None: return @@ -723,30 +721,34 @@ def _log_if_slow(self): if elapsed > _SLOW_SIM_SECONDS: logger.warning("simulation took %.1fs (%d frames)", elapsed, len(self.probe_levels_history)) - def _finish_sim(self, callback, val, clear_message): + def _finish_sim(self, callback, val): self.sim_idle_id = None self.sim_generator = None + if self.sim_cancelled: + return self._log_if_slow() - if clear_message: + if not val: self.emit("message-changed", "") if callback: callback(val) def _sim_idle_step(self, callback): + # process a ~20ms slice per idle tick so the UI stays responsive; emit progress ~10 Hz if self.sim_cancelled: return GLib.SOURCE_REMOVE start = time.time() try: while time.time() - start < 0.02: step_type, val = next(self.sim_generator) - if step_type == "progress": - self._emit_progress() - elif step_type in ("success", "error"): - self._finish_sim(callback, val, step_type == "success") + if step_type in ("success", "error"): + self._finish_sim(callback, val) return GLib.SOURCE_REMOVE except StopIteration: - self._finish_sim(callback, False, True) + self._finish_sim(callback, False) return GLib.SOURCE_REMOVE + if start - self.sim_last_emit > 0.1: + self.sim_last_emit = start + self.emit("currenttime-changed", self.current_time) return GLib.SOURCE_CONTINUE def analyze_logic(self, callback=None): @@ -754,6 +756,7 @@ def analyze_logic(self, callback=None): self.sim_cancelled = False self.sim_generator = self.analyze_logic_generator() self.sim_start_time = time.time() + self.sim_last_emit = 0.0 if callback is None: return self._run_sim_sync() self.sim_idle_id = GLib.idle_add(self._sim_idle_step, callback) diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index eb9f7f6..c006fc6 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -109,7 +109,8 @@ def name_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *arg self.draw_names(cr) def chart_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *args): - history = self._circuit.probe_levels_history + # snapshot so iterating is safe while the worker thread appends frames + history = list(self._circuit.probe_levels_history) if not history: cr.set_source(Preference.bg_color_running) cr.rectangle(0, 0, width, height) @@ -203,7 +204,7 @@ def draw_diagrams(self, cr: cairo.Context): cairo_paths(cr, (0, sep_y), (self.diagram_width, sep_y)) cr.stroke() - history = self._circuit.probe_levels_history + history = list(self._circuit.probe_levels_history) if not history: return diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index f970415..df89f8d 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -91,6 +91,7 @@ def __init__(self, *args, **kwargs): self.circuit.connect("message-changed", self.on_circuit_message_changed) self.circuit.connect("item-unselected", self.on_circuit_item_unselected) self.circuit.connect("alert", self.on_circuit_alert) + self.circuit.connect("currenttime-changed", self.on_sim_progress) Preference.load_settings() @@ -472,6 +473,15 @@ def on_simulation_finished(self, is_error): self.drawarea.redraw = True self.drawarea.queue_draw() + def on_sim_progress(self, circuit, current_time): + # progress signal -> status % + trailing timing-graph refresh + if self.circuit.sim_idle_id is None: + return + pct = min(100, int(current_time / Preference.max_calc_duration * 100)) + self.statusbar.update(_("Calculating... %d%%") % pct) + if self.timing_diagram.get_visible(): + self.timing_diagram._draw_area.draw() + def on_circuit_stop(self, *args): self.circuit.cancel_simulation() if self.running_mode: From a3f99f64c8bcfe96b5909198ddcce54f2e3268e0 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:50:27 +0100 Subject: [PATCH 28/37] perf: improve draw area performance and zoom responsiveness --- ggate/DrawArea.py | 181 ++++++++++++++++++++++++++++++++------------- ggate/MainFrame.py | 7 +- 2 files changed, 136 insertions(+), 52 deletions(-) diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index 54223c9..269c088 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -14,7 +14,7 @@ from ggate.Utils import cairo_paths, inv_matrix, multiply_matrix, create_component_matrix, get_components_rect, draw_rounded_rectangle, clamp from ggate.Components.LogicGates import logic_gates from ggate import Preference -from gi.repository import Gtk, Gdk, Pango, PangoCairo +from gi.repository import Gtk, Gdk, Pango, PangoCairo, GLib from ggate.Animation import CanvasAnimationController @@ -25,6 +25,7 @@ def __init__(self, parent: MainFrame): self.set_vexpand(True) self.width = 1920 self.height = 1080 + self.zoom = 1.0 self.vadj = self.get_vadjustment() self.hadj = self.get_hadjustment() self.netstarted = False @@ -34,6 +35,15 @@ def __init__(self, parent: MainFrame): self.set_child(self.drawingarea) self.drawingarea.set_draw_func(self.on_draw) + scroll_controller = Gtk.EventControllerScroll.new(Gtk.EventControllerScrollFlags.BOTH_AXES) + scroll_controller.connect("scroll", self.on_scroll) + self.drawingarea.add_controller(scroll_controller) + + zoom_gesture = Gtk.GestureZoom() + zoom_gesture.connect("begin", self.on_zoom_begin) + zoom_gesture.connect("scale-changed", self.on_zoom_scale_changed) + self.drawingarea.add_controller(zoom_gesture) + self.vadj.set_value(self.height / 2) self.hadj.set_value(self.width / 2) @@ -111,11 +121,9 @@ def __init__(self, parent: MainFrame): self.rect_select_enabled = False self.middle_move_enabled = False self.mouse_down = False - self.mbitmap = None self.circuit: CircuitManager = None self.redraw = True self.netstarted = False - self.mpixbuf = cairo.ImageSurface(cairo.FORMAT_RGB24, self.width, self.height) self._pasted_components = None self._pushed_component_name = const.component_none self._pushed_component = logic_gates[const.component_none] @@ -141,19 +149,89 @@ def center_viewport(self): pw = self.hadj.get_page_size() ph = self.vadj.get_page_size() if pw <= 0 or ph <= 0: - return + return False if self.circuit and self.circuit.components: rect = get_components_rect(self.circuit.components) - c_x = (rect[0] + rect[2]) / 2 - c_y = (rect[1] + rect[3]) / 2 + c_x = ((rect[0] + rect[2]) / 2) * self.zoom + c_y = ((rect[1] + rect[3]) / 2) * self.zoom else: - c_x = self.width / 2 - c_y = self.height / 2 + c_x = (self.width / 2) * self.zoom + c_y = (self.height / 2) * self.zoom self.hadj.set_value(c_x - pw / 2) self.vadj.set_value(c_y - ph / 2) + return False + def update_canvas_size(self): + min_width = 1920 + min_height = 1080 + margin = 300 + if self.circuit and self.circuit.components: + rect = get_components_rect(self.circuit.components) + if rect: + req_width = max(min_width, int(rect[2] + margin)) + req_height = max(min_height, int(rect[3] + margin)) + else: + req_width = min_width + req_height = min_height + else: + req_width = min_width + req_height = min_height + req_width = min(req_width, 32767) + req_height = min(req_height, 32767) + if req_width != self.width or req_height != self.height: + self.width = req_width + self.height = req_height + self.drawingarea.set_size_request(int(self.width * self.zoom), int(self.height * self.zoom)) + + def on_scroll(self, controller, dx, dy): + state = controller.get_current_event_state() + if state & Gdk.ModifierType.CONTROL_MASK: + zoom_step = 1.1 + if dy < 0: + new_zoom = self.zoom * zoom_step + elif dy > 0: + new_zoom = self.zoom / zoom_step + else: + return False + new_zoom = clamp(new_zoom, 0.1, 8.0) + if new_zoom != self.zoom: + old_zoom = self.zoom + cx = self.cursor_smooth_x + cy = self.cursor_smooth_y + self.zoom = new_zoom + self.drawingarea.set_size_request(int(self.width * self.zoom), int(self.height * self.zoom)) + new_hadj = self.hadj.get_value() + cx * (new_zoom - old_zoom) + new_vadj = self.vadj.get_value() + cy * (new_zoom - old_zoom) + self.hadj.set_value(new_hadj) + self.vadj.set_value(new_vadj) + self.queue_draw() + return True + return False + + def on_zoom_begin(self, gesture, sequence): + self.zoom_start_factor = self.zoom + + def on_zoom_scale_changed(self, gesture, scale): + if not hasattr(self, "zoom_start_factor"): + self.zoom_start_factor = self.zoom + new_zoom = clamp(self.zoom_start_factor * scale, 0.1, 8.0) + if new_zoom != self.zoom: + success, gx, gy = gesture.get_bounding_box_center() + if success: + old_zoom = self.zoom + cx = gx / old_zoom + cy = gy / old_zoom + self.zoom = new_zoom + self.drawingarea.set_size_request(int(self.width * self.zoom), int(self.height * self.zoom)) + new_hadj = self.hadj.get_value() + cx * (new_zoom - old_zoom) + new_vadj = self.vadj.get_value() + cy * (new_zoom - old_zoom) + self.hadj.set_value(new_hadj) + self.vadj.set_value(new_vadj) + self.queue_draw() + def queue_draw(self, *args): + self.update_canvas_size() self.show() self.drawingarea.queue_draw() super().queue_draw(*args) @@ -383,31 +461,34 @@ def draw_pushed_component(self, where, cmp, cr: cairo.Context, layout: Pango.Lay cr.set_matrix(matrix) def on_draw(self, widget, cr: cairo.Context, width, height, *args): - # Rerender whole screen - if self.redraw: - mcr = cairo.Context(self.mpixbuf) - if self.parent.running_mode: - mcr.set_source(Preference.bg_color_running) - else: - mcr.set_source(Preference.bg_color) - - # Setup the background color - mcr.rectangle(0, 0, self.width, self.height) - mcr.fill() + if self.parent.running_mode: + cr.set_source(Preference.bg_color_running) + else: + cr.set_source(Preference.bg_color) + cr.rectangle(0, 0, width, height) + cr.fill() - # Draw grids - if not self.parent.running_mode: - mcr.set_source(Preference.grid_color) - for x in range(0, self.width, self.grid_step): - cairo_paths(mcr, (x, 0), (x, self.height)) - for y in range(0, self.height, self.grid_step): - cairo_paths(mcr, (0, y), (self.width, y)) - mcr.stroke() + cr.scale(self.zoom, self.zoom) - self.redraw = False + if not self.parent.running_mode: + cr.set_source(Preference.grid_color) + x1, y1, x2, y2 = cr.clip_extents() + if math.isfinite(x1) and math.isfinite(x2) and math.isfinite(y1) and math.isfinite(y2): + effective_step = self.grid_step + while (x2 - x1) / effective_step > 300 or (y2 - y1) / effective_step > 300: + effective_step *= 2 + + start_x = int(x1 - (x1 % effective_step)) + end_x = int(x2) + for x in range(start_x, end_x + effective_step, effective_step): + cairo_paths(cr, (x, y1), (x, y2)) + start_y = int(y1 - (y1 % effective_step)) + end_y = int(y2) + for y in range(start_y, end_y + effective_step, effective_step): + cairo_paths(cr, (x1, y), (x2, y)) + cr.stroke() - cr.set_source_surface(self.mpixbuf, 0, 0) - cr.paint() + self.redraw = False cr.translate(0.5, 0.5) cr.set_line_width(1.0) @@ -424,15 +505,15 @@ def on_draw(self, widget, cr: cairo.Context, width, height, *args): """ if self.rect_select_enabled: x, y = self.select_start_x - 0.5, self.select_start_y - 0.5 - width = self.cursor_smooth_x - self.select_start_x - height = self.cursor_smooth_y - self.select_start_y + sel_w = self.cursor_smooth_x - self.select_start_x + sel_h = self.cursor_smooth_y - self.select_start_y cr.set_source(Preference.selection_box) - draw_rounded_rectangle(cr, x, y, width, height) + draw_rounded_rectangle(cr, x, y, sel_w, sel_h) cr.fill() cr.set_source(Preference.selection_box_border) - draw_rounded_rectangle(cr, x, y, width, height) + draw_rounded_rectangle(cr, x, y, sel_w, sel_h) cr.stroke() cr.set_source(source) @@ -577,18 +658,19 @@ def on_key_press(self, *args): def on_motion(self, *args): """TODO: Optimize this""" - x_axis, y_axis = args[1], args[2] + x_axis, y_axis = args[1] / self.zoom, args[2] / self.zoom self.cursor_smooth_x = x_axis self.cursor_smooth_y = y_axis if self.middle_move_enabled: - delta_x = self.move_start_x - x_axis - delta_y = self.move_start_y - y_axis - if -1 < delta_x < 1 and -1 < delta_y < 1: - return - self.hadj.set_value(self.hadj.get_value() + delta_x) - self.vadj.set_value(self.vadj.get_value() + delta_y) + delta_x = self.move_start_x - args[1] + delta_y = self.move_start_y - args[2] + if not (-1 < delta_x < 1 and -1 < delta_y < 1): + self.hadj.set_value(self.hadj.get_value() + delta_x) + self.vadj.set_value(self.vadj.get_value() + delta_y) + self.move_start_x = args[1] + self.move_start_y = args[2] if self.parent.running_mode: return @@ -728,8 +810,8 @@ def on_motion(self, *args): def on_button_press_primary(self, *args): - self.cursor_smooth_x = args[2] - self.cursor_smooth_y = args[3] + self.cursor_smooth_x = args[2] / self.zoom + self.cursor_smooth_y = args[3] / self.zoom if args[1] >= 1: @@ -753,7 +835,7 @@ def on_button_press_primary(self, *args): else: im = inv_matrix(c[1].matrix) if c[1].isMouseOvered(im[0] * (self.cursor_smooth_x - c[1].pos_x) + im[1] * (self.cursor_smooth_y - c[1].pos_y) + c[1].pos_x, - im[2] * (self.cursor_smooth_x - c[1].pos_x) + im[3] * (self.cursor_smooth_y - c[1].pos_y) + c[1].pos_y): + im[2] * (self.cursor_smooth_x - c[1].pos_x) + im[3] * (self.cursor_smooth_y - c[1].pos_y) + c[1].pos_y): if c in self.circuit.selected_components: self.drag_delta_x = 0 self.drag_delta_y = 0 @@ -791,10 +873,9 @@ def on_button_press_primary(self, *args): self.mouse_down = True def on_button_press_middle(self, *args): - if args[2] == Gdk.BUTTON_MIDDLE: - self.middle_move_enabled = True - self.move_start_x = self.cursor_smooth_x - self.move_start_y = self.cursor_smooth_y + self.middle_move_enabled = True + self.move_start_x = args[2] + self.move_start_y = args[3] def refresh_nets(self): tmp_components = self.circuit.components[:] @@ -1033,7 +1114,7 @@ def on_button_release_primary(self, *args): self.cursor_x - self._paste_center_x bottom = self._pasted_rect[3] + \ self.cursor_y - self._paste_center_y - if left >= 0 and top >= 0 and right <= 1980 and bottom <= 1080: + if left >= 0 and top >= 0 and right <= self.width and bottom <= self.height: for cadd in self._pasted_components: if cadd[0] == const.component_net: cadd[1] += self.cursor_x - \ @@ -1085,7 +1166,7 @@ def on_button_release_primary(self, *args): component_data[1].pos_x = self.cursor_x component_data[1].pos_y = self.cursor_y - if 0 <= component_data[1].pos_x + component_data[1].rot_comp_rect[0] + 3 and 0 <= component_data[1].pos_y + component_data[1].rot_comp_rect[1] + 3 and component_data[1].pos_x + component_data[1].rot_comp_rect[2] - 3 <= 1920 and component_data[1].pos_y + component_data[1].rot_comp_rect[3] - 3 <= 1080: + if 0 <= component_data[1].pos_x + component_data[1].rot_comp_rect[0] + 3 and 0 <= component_data[1].pos_y + component_data[1].rot_comp_rect[1] + 3 and component_data[1].pos_x + component_data[1].rot_comp_rect[2] - 3 <= self.width and component_data[1].pos_y + component_data[1].rot_comp_rect[3] - 3 <= self.height: for p in component_data[1].rot_input_pins + component_data[1].rot_output_pins: self.circuit.split_nets( p[0] + self.cursor_x, p[1] + self.cursor_y) diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index df89f8d..d490a02 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -9,7 +9,7 @@ gi.require_version("Gtk", "4.0") gi.require_version("Adw", "1") -from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, Adw +from gi.repository import Gtk, Gdk, GdkPixbuf, Gio, Adw, GLib from ggate import UserInterfaces, config from ggate.const import definitions as const from ggate.Exporter import save_schematics_as_image @@ -118,8 +118,10 @@ def __init__(self, *args, **kwargs): if len(sys.argv) >= 2: self.circuit.open_file(sys.argv[1]) + self.drawarea.zoom = 1.0 self.drawarea.redraw = True self.drawarea.queue_draw() + GLib.idle_add(self.drawarea.center_viewport) def set_up_shortcuts(self, *args): actions = { @@ -404,9 +406,10 @@ def open_file_complete(self, path): self.reset_frame() self.drawarea.clear_animations() - self.drawarea.center_viewport() + self.drawarea.zoom = 1.0 self.drawarea.redraw = True self.drawarea.queue_draw() + GLib.idle_add(self.drawarea.center_viewport) # todo: translations self.statusbar.update(f"Opened
{path.split('/')[-1]}") From b8c1ca25f174faf23a43cf96e68850bf3c81c713 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 23:37:56 +0100 Subject: [PATCH 29/37] chore: ui improvements for theming and consistency --- .agents/TODO.md | 6 +- data/examples/adder.glc | 338 ++++++++++--------- data/themes/Classic.json | 1 - data/themes/{Frappe.json => FrappeDark.json} | 3 +- data/themes/FrappeLight.json | 29 ++ data/themes/{Mocha.json => MochaDark.json} | 3 +- data/themes/MochaLight.json | 29 ++ data/themes/{Space.json => SpaceDark.json} | 3 +- data/themes/SpaceLight.json | 29 ++ ggate/CircuitManager.py | 49 ++- ggate/Components/Managers/Alerts.py | 70 ++-- ggate/DrawArea.py | 4 +- ggate/MainFrame.py | 14 +- ggate/Themes.py | 8 +- 14 files changed, 331 insertions(+), 255 deletions(-) rename data/themes/{Frappe.json => FrappeDark.json} (94%) create mode 100644 data/themes/FrappeLight.json rename data/themes/{Mocha.json => MochaDark.json} (94%) create mode 100644 data/themes/MochaLight.json rename data/themes/{Space.json => SpaceDark.json} (94%) create mode 100644 data/themes/SpaceLight.json diff --git a/.agents/TODO.md b/.agents/TODO.md index 65f99d4..e8cbb1e 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -21,13 +21,11 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie each row; a saner default zoom for high-frequency signals. - [ ] **`Windows/Properties.py`** rebuilds all widgets + re-`present()` on every `show_properties` (old children leak). Build once / reuse; consider `Adw.ToolbarView`. -- [ ] **Header bar** — `Gtk.HeaderBar` + `set_use_native_controls(True)` (native macOS - controls) vs `Adw.HeaderBar` (better integration, loses native controls). Design call. +- [x] **Header bar** — migrated to `Adw.HeaderBar` for better Adwaita/Gnome integration. - [ ] **Initial centering gated by resize pref** — when `autocenter_resize` is OFF, first-paint centering is also skipped. Split initial-vs-resize if we want it strict. - [ ] `Preferences.py:` font picker TODO. -- [ ] `AlertDialogs` single instance re-adds response IDs each open (possible duplicate-response - warning; not a crash). +- [x] `AlertDialogs` single instance re-adds response IDs each open (fixed by dynamic instantiation). ## P2 — icons & dead code diff --git a/data/examples/adder.glc b/data/examples/adder.glc index a4e2187..420c47c 100644 --- a/data/examples/adder.glc +++ b/data/examples/adder.glc @@ -1,506 +1,508 @@ version - author=3.0.0 - required=2.6 + author=5.0.0 + required=2.6.0 + +meta + zoom=0.9424371608722886 sw - position=30,550 - input_level= + position=410.0,750.0 + input_level=0 output_level=1 matrix=1,0,0,1 properties=initstate:0 sw - position=30,500 - input_level= + position=410.0,700.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:1 sw - position=30,450 - input_level= + position=410.0,650.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:1 sw - position=30,400 - input_level= + position=410.0,600.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:0 7seg - position=50,100 + position=430.0,300.0 input_level=0,0,0,1 - output_level= + output_level=0 matrix=1,0,0,1 properties=_red:2 7seg - position=180,100 + position=560.0,300.0 input_level=0,0,0,1 - output_level= + output_level=0 matrix=1,0,0,1 properties=_red:1 7seg - position=610,100 + position=990.0,300.0 input_level=0,0,1,0 - output_level= + output_level=0 matrix=1,0,0,1 properties=_red:0 sw - position=160,400 - input_level= + position=540.0,600.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:0 sw - position=160,450 - input_level= + position=540.0,650.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:1 sw - position=160,500 - input_level= + position=540.0,700.0 + input_level=0 output_level=0 matrix=1,0,0,1 properties=initstate:0 sw - position=160,550 - input_level= + position=540.0,750.0 + input_level=0 output_level=1 matrix=1,0,0,1 properties=initstate:1 and - position=400,220 + position=780.0,420.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 and - position=400,270 + position=780.0,470.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 and - position=400,350 + position=780.0,550.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 and - position=400,400 - input_level=0,1 + position=780.0,600.0 + input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=300,260 + position=680.0,460.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=300,390 + position=680.0,590.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=400,170 + position=780.0,370.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=490,180 + position=870.0,380.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=490,310 + position=870.0,510.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=490,440 - input_level=0,1 + position=870.0,640.0 + input_level=0,0 output_level=1 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 xor - position=490,550 - input_level=1,1 + position=870.0,750.0 + input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 and - position=490,500 - input_level=1,1 + position=870.0,700.0 + input_level=0,0 output_level=1 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 or - position=490,390 + position=870.0,590.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 or - position=490,260 + position=870.0,460.0 input_level=0,0 output_level=0 matrix=1,0,0,1 - properties=inputs:2,tphl:0.0,tplh:0.0 + properties=inputs:2.0,tphl:0.0,tplh:0.0 text - position=30,350 - input_level= - output_level= + position=410.0,550.0 + input_level=0 + output_level=0 matrix=1,0,0,1 properties=text:IN1 text - position=160,350 - input_level= - output_level= + position=540.0,550.0 + input_level=0 + output_level=0 matrix=1,0,0,1 properties=text:IN2 text - position=630,120 - input_level= - output_level= + position=1010.0,320.0 + input_level=0 + output_level=0 matrix=1,0,0,1 properties=text:OUT \e IN1 + IN2 net - position=500,410,400,410 + position=880.0,610.0,780.0,610.0 net - position=400,370,410,370 + position=790.0,570.0,780.0,570.0 net - position=400,410,400,370 + position=780.0,610.0,780.0,570.0 net - position=500,360,500,330 + position=880.0,560.0,880.0,530.0 net - position=500,230,500,200 + position=880.0,430.0,880.0,400.0 net - position=500,280,400,280 + position=880.0,480.0,780.0,480.0 net - position=400,280,400,240 + position=780.0,480.0,780.0,440.0 net - position=410,240,400,240 + position=790.0,440.0,780.0,440.0 net - position=590,480,590,450 + position=970.0,680.0,970.0,650.0 net - position=410,430,410,390 + position=790.0,590.0,790.0,630.0 net - position=590,450,500,450 + position=970.0,650.0,880.0,650.0 net - position=500,430,410,430 + position=790.0,630.0,880.0,630.0 net - position=500,450,500,430 + position=880.0,650.0,880.0,630.0 net - position=590,370,590,320 + position=970.0,570.0,970.0,520.0 net - position=410,300,410,260 + position=790.0,460.0,790.0,500.0 net - position=590,320,500,320 + position=970.0,520.0,880.0,520.0 net - position=500,300,410,300 + position=790.0,500.0,880.0,500.0 net - position=500,320,500,300 + position=880.0,520.0,880.0,500.0 net - position=590,240,590,190 + position=970.0,440.0,970.0,390.0 net - position=590,190,500,190 + position=970.0,390.0,880.0,390.0 net - position=500,190,500,170 + position=880.0,390.0,880.0,370.0 net - position=60,50,40,50 + position=440.0,250.0,420.0,250.0 net - position=410,210,310,210 + position=790.0,410.0,690.0,410.0 net - position=40,180,40,50 + position=420.0,250.0,420.0,380.0 net - position=310,210,310,230 + position=690.0,410.0,690.0,430.0 net - position=40,180,110,180 + position=420.0,380.0,490.0,380.0 net - position=310,230,110,230 + position=690.0,430.0,490.0,430.0 net - position=110,180,110,230 + position=490.0,380.0,490.0,430.0 net - position=100,430,110,430 + position=480.0,630.0,490.0,630.0 net - position=110,230,110,430 + position=490.0,430.0,490.0,630.0 net - position=190,50,170,50 + position=570.0,290.0,570.0,340.0 net - position=190,90,190,140 + position=880.0,720.0,880.0,690.0 net - position=500,520,500,490 + position=570.0,340.0,640.0,340.0 net - position=190,140,260,140 + position=880.0,690.0,640.0,690.0 net - position=500,490,260,490 + position=640.0,340.0,640.0,690.0 net - position=260,140,260,490 + position=610.0,730.0,640.0,730.0 net - position=230,530,260,530 + position=640.0,690.0,640.0,730.0 net - position=260,490,260,530 + position=1000.0,230.0,970.0,230.0 net - position=620,30,590,30 + position=970.0,230.0,970.0,360.0 net - position=590,30,590,160 + position=1000.0,250.0,980.0,250.0 net - position=620,50,600,50 + position=980.0,250.0,980.0,490.0 net - position=600,50,600,290 + position=980.0,490.0,970.0,490.0 net - position=600,290,590,290 + position=1000.0,270.0,990.0,270.0 net - position=620,70,610,70 + position=990.0,270.0,990.0,620.0 net - position=610,70,610,420 + position=990.0,620.0,970.0,620.0 net - position=610,420,590,420 + position=1000.0,290.0,1000.0,730.0 net - position=620,90,620,530 + position=1000.0,730.0,970.0,730.0 net - position=620,530,590,530 + position=440.0,270.0,430.0,270.0 net - position=50,70,60,70 + position=690.0,580.0,680.0,580.0 net - position=300,380,310,380 + position=430.0,270.0,430.0,360.0 net - position=50,70,50,160 + position=790.0,520.0,680.0,520.0 net - position=410,320,300,320 + position=680.0,580.0,680.0,520.0 net - position=300,320,300,380 + position=430.0,360.0,500.0,360.0 net - position=50,160,120,160 + position=680.0,520.0,500.0,520.0 net - position=300,320,120,320 + position=500.0,360.0,500.0,520.0 net - position=120,160,120,320 + position=480.0,680.0,500.0,680.0 net - position=100,480,120,480 + position=500.0,520.0,500.0,680.0 net - position=120,320,120,480 + position=440.0,290.0,440.0,340.0 net - position=60,140,60,90 + position=880.0,740.0,870.0,740.0 net - position=500,540,490,540 + position=440.0,340.0,510.0,340.0 net - position=60,140,130,140 + position=480.0,730.0,510.0,730.0 net - position=100,530,130,530 + position=870.0,740.0,870.0,670.0 net - position=490,540,490,470 + position=880.0,670.0,870.0,670.0 net - position=500,470,490,470 + position=510.0,340.0,510.0,550.0 net - position=130,140,130,350 + position=510.0,730.0,510.0,550.0 net - position=130,350,130,530 + position=870.0,670.0,660.0,670.0 net - position=490,470,280,470 + position=510.0,550.0,660.0,550.0 net - position=130,350,280,350 + position=660.0,670.0,660.0,550.0 net - position=280,470,280,350 + position=570.0,270.0,560.0,270.0 net - position=180,70,190,70 + position=560.0,270.0,560.0,360.0 net - position=180,160,180,70 + position=790.0,540.0,690.0,540.0 net - position=410,340,310,340 + position=690.0,560.0,690.0,540.0 net - position=310,340,310,360 + position=560.0,360.0,630.0,360.0 net - position=250,160,180,160 + position=690.0,540.0,630.0,540.0 net - position=310,340,250,340 + position=630.0,360.0,630.0,540.0 net - position=250,160,250,340 + position=610.0,680.0,630.0,680.0 net - position=230,480,250,480 + position=630.0,540.0,630.0,680.0 net - position=250,340,250,480 + position=570.0,250.0,550.0,250.0 net - position=170,50,170,180 + position=550.0,250.0,550.0,380.0 net - position=170,180,240,180 + position=550.0,380.0,620.0,380.0 net - position=230,430,240,430 + position=610.0,630.0,620.0,630.0 net - position=240,180,240,250 + position=620.0,380.0,620.0,450.0 net - position=240,250,240,430 + position=620.0,630.0,620.0,450.0 net - position=410,190,300,190 + position=790.0,390.0,680.0,390.0 net - position=300,250,310,250 + position=690.0,450.0,680.0,450.0 net - position=300,250,240,250 + position=620.0,450.0,680.0,450.0 net - position=300,190,300,250 + position=680.0,390.0,680.0,450.0 net - position=190,30,160,30 + position=570.0,230.0,540.0,230.0 net - position=160,30,160,200 + position=540.0,230.0,540.0,400.0 net - position=160,200,230,200 + position=540.0,400.0,610.0,400.0 net - position=230,200,230,380 + position=610.0,580.0,610.0,400.0 net - position=230,200,280,200 + position=610.0,400.0,660.0,400.0 net - position=410,140,280,140 + position=790.0,340.0,660.0,340.0 net - position=280,200,280,140 + position=660.0,400.0,660.0,340.0 net - position=30,30,60,30 + position=440.0,230.0,410.0,230.0 net - position=30,30,30,200 + position=410.0,230.0,410.0,400.0 net - position=100,200,30,200 + position=410.0,400.0,480.0,400.0 net - position=100,200,100,210 + position=480.0,400.0,480.0,410.0 net - position=100,210,100,380 + position=480.0,580.0,480.0,410.0 net - position=410,160,290,160 + position=790.0,360.0,670.0,360.0 net - position=100,210,290,210 + position=480.0,410.0,670.0,410.0 net - position=290,160,290,210 - + position=670.0,360.0,670.0,410.0 \ No newline at end of file diff --git a/data/themes/Classic.json b/data/themes/Classic.json index f42296c..36b5480 100644 --- a/data/themes/Classic.json +++ b/data/themes/Classic.json @@ -1,6 +1,5 @@ { "name": "Classic", - "dark_chrome": false, "accent_hex": "#ff8000", "colors": { "bg_color": "#000000", diff --git a/data/themes/Frappe.json b/data/themes/FrappeDark.json similarity index 94% rename from data/themes/Frappe.json rename to data/themes/FrappeDark.json index c60a88b..b00da68 100644 --- a/data/themes/Frappe.json +++ b/data/themes/FrappeDark.json @@ -1,6 +1,5 @@ { - "name": "Frappé", - "dark_chrome": true, + "name": "Frappé (Dark)", "accent_hex": "#ca9ee6", "colors": { "bg_color": "#303446", diff --git a/data/themes/FrappeLight.json b/data/themes/FrappeLight.json new file mode 100644 index 0000000..5dcc4dc --- /dev/null +++ b/data/themes/FrappeLight.json @@ -0,0 +1,29 @@ +{ + "name": "Frappé (Light)", + "accent_hex": "#8839ef", + "colors": { + "bg_color": "#eff1f5", + "bg_color_running": "#e6e9ef", + "grid_color": "#ccd0da", + "cursor_color": "#7287fd", + "component_color": "#1e66f5", + "component_high_color": "#209fb5", + "component_color_running": "#4c4f69", + "picked_color": "#fe640b", + "preadd_color": "#dc8a78", + "selected_color": "#8839ef", + "net_color": "#6c6f93", + "net_high_color": "#04a5e5", + "net_color_running": "#5c5f77", + "highlevel_color": "#40a02b", + "lowlevel_color": "#1e66f5", + "terminal_color": "#d20f39", + "terminal_color_running": "#dce0e8", + "selection_box": "#8839ef33", + "selection_box_border": "#8839ef", + "_red": "#d20f39", + "_green": "#40a02b", + "_blue": "#1e66f5", + "_yellow": "#df8e1d" + } +} diff --git a/data/themes/Mocha.json b/data/themes/MochaDark.json similarity index 94% rename from data/themes/Mocha.json rename to data/themes/MochaDark.json index 5e14be9..d3b0432 100644 --- a/data/themes/Mocha.json +++ b/data/themes/MochaDark.json @@ -1,6 +1,5 @@ { - "name": "Mocha", - "dark_chrome": true, + "name": "Mocha (Dark)", "accent_hex": "#cba6f7", "colors": { "bg_color": "#1e1e2e", diff --git a/data/themes/MochaLight.json b/data/themes/MochaLight.json new file mode 100644 index 0000000..0805432 --- /dev/null +++ b/data/themes/MochaLight.json @@ -0,0 +1,29 @@ +{ + "name": "Mocha (Light)", + "accent_hex": "#8839ef", + "colors": { + "bg_color": "#eff1f5", + "bg_color_running": "#e6e9ef", + "grid_color": "#ccd0da", + "cursor_color": "#7287fd", + "component_color": "#1e66f5", + "component_high_color": "#209fb5", + "component_color_running": "#4c4f69", + "picked_color": "#fe640b", + "preadd_color": "#dc8a78", + "selected_color": "#8839ef", + "net_color": "#6c6f93", + "net_high_color": "#04a5e5", + "net_color_running": "#5c5f77", + "highlevel_color": "#40a02b", + "lowlevel_color": "#1e66f5", + "terminal_color": "#d20f39", + "terminal_color_running": "#dce0e8", + "selection_box": "#8839ef33", + "selection_box_border": "#8839ef", + "_red": "#d20f39", + "_green": "#40a02b", + "_blue": "#1e66f5", + "_yellow": "#df8e1d" + } +} diff --git a/data/themes/Space.json b/data/themes/SpaceDark.json similarity index 94% rename from data/themes/Space.json rename to data/themes/SpaceDark.json index 0fa2155..bcbf5c1 100644 --- a/data/themes/Space.json +++ b/data/themes/SpaceDark.json @@ -1,6 +1,5 @@ { - "name": "Space", - "dark_chrome": true, + "name": "Space (Dark)", "accent_hex": "#00f2fe", "colors": { "bg_color": "#07080d", diff --git a/data/themes/SpaceLight.json b/data/themes/SpaceLight.json new file mode 100644 index 0000000..6467042 --- /dev/null +++ b/data/themes/SpaceLight.json @@ -0,0 +1,29 @@ +{ + "name": "Space (Light)", + "accent_hex": "#0d9488", + "colors": { + "bg_color": "#f4f5f8", + "bg_color_running": "#eaecee", + "grid_color": "#d1d5db", + "cursor_color": "#1b1e2c", + "component_color": "#2563eb", + "component_high_color": "#06b6d4", + "component_color_running": "#4b5563", + "picked_color": "#ea580c", + "preadd_color": "#db2777", + "selected_color": "#16a34a", + "net_color": "#6b7280", + "net_high_color": "#0d9488", + "net_color_running": "#374151", + "highlevel_color": "#16a34a", + "lowlevel_color": "#2563eb", + "terminal_color": "#dc2626", + "terminal_color_running": "#e5e7eb", + "selection_box": "#06b6d426", + "selection_box_border": "#06b6d4", + "_red": "#dc2626", + "_green": "#16a34a", + "_blue": "#2563eb", + "_yellow": "#ca8a04" + } +} diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index 7f3a11b..42ed676 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -6,6 +6,7 @@ from ggate.MainFrame import MainFrame import os +import re import copy import time import igraph @@ -36,6 +37,11 @@ def _start_write(self): ("required", [config.compatibility["required"]]), ]) + zoom = self.circuit.mainframe.drawarea.zoom + self._add_data("meta", [ + ("zoom", [zoom]), + ]) + def _add_data(self, key: str, attributes: list[tuple[str, list[str]]]) -> None: self.data += f"{key}" @@ -47,26 +53,29 @@ def _add_data(self, key: str, attributes: list[tuple[str, list[str]]]) -> None: self.data += "\n\n" - def components_to_string(self): + def components_to_string(self, components=None): + self.data = "" self._start_write() - for c in self.circuit.components: + target_components = components if components is not None else self.circuit.components + for c in target_components: if c[0] == definitions.component_net: self._add_data("net", [ - ("position", [c[1], c[2], c[3], c[4]]), + ("position", [int(round(float(x))) for x in c[1:5]]), ]) else: + formatted_props = [] + for i, p in enumerate(c[1].values): + val_str = str(p) + if isinstance(p, float) and p.is_integer(): + val_str = str(int(p)) + formatted_props.append(f"{c[1].prop_names[i]}:{encode_text(val_str)}") + self._add_data(c[0], [ - ("position", [c[1].pos_x, c[1].pos_y]), + ("position", [int(round(float(x))) for x in (c[1].pos_x, c[1].pos_y)]), ("input_level", [str(int(p)) for p in c[1].input_level]), ("output_level", [str(int(p)) for p in c[1].output_level]), ("matrix", [str(int(p)) for p in c[1].matrix]), - ( - "properties", - [ - f"{c[1].prop_names[i]}:{encode_text(str(p))}" \ - for i, p in enumerate(c[1].values) - ] - ), + ("properties", formatted_props), ]) self.data = self.data.strip() return self.data @@ -89,7 +98,7 @@ def parse_section(self, section: str): content = self._parse_section_content(lines[1:]) if which == "net": - content["position"] = [int(x) for x in content["position"]] + content["position"] = [int(float(x)) for x in content["position"]] if len(content["position"]) != 4: content["position"] = [0, 10, 10, 10] @@ -98,8 +107,8 @@ def parse_section(self, section: str): elif which in logic_gates: component: CircuitComponent = [which, copy.deepcopy(logic_gates[which])] if (position := content.get("position", None)) and len(position) == 2: - component[1].pos_x = int(position[0]) - component[1].pos_y = int(position[1]) + component[1].pos_x = int(float(position[0])) + component[1].pos_y = int(float(position[1])) if (input_level := content.get("input_level", None)): component[1].input_level = [ @@ -166,12 +175,22 @@ def parse_section(self, section: str): % { "creator": authored_version, "this": current_version, "minimum": current_required } return None + + elif which == "meta": + if (zoom_val := content.get("zoom", None)): + zoom = float(zoom_val[0]) + self.circuit.mainframe.drawarea.zoom = zoom + self.circuit.mainframe.drawarea.drawingarea.set_size_request( + int(self.circuit.mainframe.drawarea.width * zoom), + int(self.circuit.mainframe.drawarea.height * zoom) + ) + return None return None def string_to_components(self, str_data) -> list[CircuitComponent]: components: list[CircuitComponent] = [] - for section in str_data.split("\n\n"): + for section in re.split(r'\n[ \t\r]*\n', str_data): section = section.strip() if not section or section == "": continue diff --git a/ggate/Components/Managers/Alerts.py b/ggate/Components/Managers/Alerts.py index 411f828..6d2e43c 100644 --- a/ggate/Components/Managers/Alerts.py +++ b/ggate/Components/Managers/Alerts.py @@ -7,9 +7,8 @@ # TODO: translations -class AlertDialogs(Adw.AlertDialog): - def __init__(self, mainframe: MainFrame, *args, **kwargs): - super().__init__(*args, **kwargs) +class AlertDialogs: + def __init__(self, mainframe: MainFrame): self.mainframe = mainframe self.responses = [("cancel", "Cancel"), ("yes", "Yes"), ("no", "No")] @@ -17,74 +16,63 @@ def __init__(self, mainframe: MainFrame, *args, **kwargs): self.YES_RESPONSE = self.responses[1][0] self.NO_RESPONSE = self.responses[2][0] - def __get_unsaved_buffer_alert_result(self, allow, deny): - def internal(dialog, result): - result = self.choose_finish(result) - if result == self.CANCEL_RESPONSE: + def _create_dialog(self, heading: str, body: str) -> Adw.AlertDialog: + dialog = Adw.AlertDialog() + dialog.set_heading(heading) + dialog.set_body(body) + for response_id, label in self.responses: + dialog.add_response(response_id, label) + dialog.set_default_response(self.YES_RESPONSE) + dialog.set_close_response(self.CANCEL_RESPONSE) + return dialog + + def __get_unsaved_buffer_alert_result(self, dialog, allow, deny): + def internal(dialog_obj, result): + res = dialog.choose_finish(result) + if res == self.CANCEL_RESPONSE: return - elif result == self.YES_RESPONSE: + elif res == self.YES_RESPONSE: allow() else: deny() - return internal - - def alert_open_unsaved_buffer(self): - self.set_heading("Unsaved changes") - self.set_body("Buffer was modified, save changes?") - for response_id, label in self.responses: - self.add_response(response_id, label) - self.set_default_response(self.YES_RESPONSE) - self.set_close_response(self.CANCEL_RESPONSE) - - self.choose( + def alert_open_unsaved_buffer(self): + dialog = self._create_dialog("Unsaved changes", "Buffer was modified, save changes?") + dialog.choose( parent=self.mainframe, callback=self.__get_unsaved_buffer_alert_result( + dialog, self.mainframe.on_action_save_pressed, self.mainframe.file_manager.open_activated, ) ) def alert_new_unsaved_buffer(self): - self.set_heading("Unsaved changes") - self.set_body("Buffer was modified, save changes before creating new buffer?") - - for response_id, label in self.responses: - self.add_response(response_id, label) - self.set_default_response(self.YES_RESPONSE) - self.set_close_response(self.CANCEL_RESPONSE) - - self.set_response_appearance( + dialog = self._create_dialog("Unsaved changes", "Buffer was modified, save changes before creating new buffer?") + dialog.set_response_appearance( self.NO_RESPONSE, Adw.ResponseAppearance.DESTRUCTIVE ) - - self.choose( + dialog.choose( parent=self.mainframe, callback=self.__get_unsaved_buffer_alert_result( + dialog, self.mainframe.on_action_save_pressed, self.mainframe.create_new_buffer, ) ) def alert_close_unsaved_buffer(self): - self.set_heading("Unsaved changes") - self.set_body("Buffer was modified, save changes before closing?") - - for response_id, label in self.responses: - self.add_response(response_id, label) - self.set_default_response(self.YES_RESPONSE) - self.set_close_response(self.CANCEL_RESPONSE) - - self.set_response_appearance( + dialog = self._create_dialog("Unsaved changes", "Buffer was modified, save changes before closing?") + dialog.set_response_appearance( self.NO_RESPONSE, Adw.ResponseAppearance.DESTRUCTIVE ) - - self.choose( + dialog.choose( parent=self.mainframe, callback=self.__get_unsaved_buffer_alert_result( + dialog, self.mainframe.on_action_save_pressed, self.mainframe.application.quit, ) diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index 269c088..d26e836 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -194,7 +194,7 @@ def on_scroll(self, controller, dx, dy): new_zoom = self.zoom / zoom_step else: return False - new_zoom = clamp(new_zoom, 0.1, 8.0) + new_zoom = clamp(new_zoom, 0.5, 5.0) if new_zoom != self.zoom: old_zoom = self.zoom cx = self.cursor_smooth_x @@ -215,7 +215,7 @@ def on_zoom_begin(self, gesture, sequence): def on_zoom_scale_changed(self, gesture, scale): if not hasattr(self, "zoom_start_factor"): self.zoom_start_factor = self.zoom - new_zoom = clamp(self.zoom_start_factor * scale, 0.1, 8.0) + new_zoom = clamp(self.zoom_start_factor * scale, 0.5, 20.0) if new_zoom != self.zoom: success, gx, gy = gesture.get_bounding_box_center() if success: diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index d490a02..b6af70d 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -287,17 +287,9 @@ def create_window(self): _run_pause_box.append(self.action_pause) # Header Bar - self.header_bar = Gtk.HeaderBar() - - if sys.platform.startswith("win32") or sys.platform.startswith("darwin"): - self.header_bar.set_use_native_controls(True) - - if self.header_bar.get_use_native_controls(): - self.header_bar.pack_end(self.menu_button) - self.header_bar.pack_end(_run_pause_box) - else: - self.header_bar.pack_start(self.menu_button) - self.header_bar.pack_end(_run_pause_box) + self.header_bar = Adw.HeaderBar() + self.header_bar.pack_end(self.menu_button) + self.header_bar.pack_end(_run_pause_box) # Draw area self.drawarea = DrawArea(self) diff --git a/ggate/Themes.py b/ggate/Themes.py index d6dd3c0..b944d0e 100644 --- a/ggate/Themes.py +++ b/ggate/Themes.py @@ -17,9 +17,8 @@ def hex_to_pattern(hex_color: str) -> cairo.SolidPattern: class Theme: - def __init__(self, name: str, dark_chrome: bool, accent_hex: str, colors: dict): + def __init__(self, name: str, accent_hex: str, colors: dict): self.name = name - self.dark_chrome = dark_chrome self.accent_hex = accent_hex self.colors = colors @@ -48,7 +47,6 @@ def init_registry(is_dev_mode: bool = False) -> None: data = json.loads(data_str) theme = Theme( name=data["name"], - dark_chrome=bool(data.get("dark_chrome", True)), accent_hex=data.get("accent_hex", "#ffffff"), colors=data["colors"], ) @@ -75,7 +73,6 @@ def _load_user_themes() -> None: data = json.load(fh) theme = Theme( name=data["name"], - dark_chrome=bool(data.get("dark_chrome", True)), accent_hex=data.get("accent_hex", "#ffffff"), colors=data["colors"], ) @@ -104,9 +101,6 @@ def apply_chrome(name: str, display: Gdk.Display) -> None: if theme is None: return - scheme = Adw.ColorScheme.PREFER_DARK if theme.dark_chrome else Adw.ColorScheme.DEFAULT - Adw.StyleManager.get_default().set_color_scheme(scheme) - css = ( f"@define-color accent_color {theme.accent_hex};" f"@define-color accent_bg_color {theme.accent_hex};" From 58a2c8c52ea48b74de06e5c8e79ad22fea8e82dd Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 23:50:29 +0100 Subject: [PATCH 30/37] feat: improve toast management and bottom bar --- .agents/TODO.md | 9 ++++--- ggate/CircuitManager.py | 29 ++++++++++---------- ggate/MainFrame.py | 60 +++++++++++++++++++++-------------------- 3 files changed, 52 insertions(+), 46 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index e8cbb1e..e406daa 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -21,11 +21,8 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie each row; a saner default zoom for high-frequency signals. - [ ] **`Windows/Properties.py`** rebuilds all widgets + re-`present()` on every `show_properties` (old children leak). Build once / reuse; consider `Adw.ToolbarView`. -- [x] **Header bar** — migrated to `Adw.HeaderBar` for better Adwaita/Gnome integration. - [ ] **Initial centering gated by resize pref** — when `autocenter_resize` is OFF, first-paint centering is also skipped. Split initial-vs-resize if we want it strict. -- [ ] `Preferences.py:` font picker TODO. -- [x] `AlertDialogs` single instance re-adds response IDs each open (fixed by dynamic instantiation). ## P2 — icons & dead code @@ -77,6 +74,12 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie Earlier work (app launches, dialogs migrated, sim/crash fixes) — see git history `a0c0edc`…`a078fb1`. Recent (this development cycle): +- [x] **Header bar migrated to Adw.HeaderBar** — replaced Gtk.HeaderBar with Adw.HeaderBar for standard Adwaita layout, positioning menu buttons and simulation controls on the right. +- [x] **AlertDialogs duplicate response fixed** — refactored class to dynamically instantiate Adw.AlertDialog instead of subclassing it to avoid registering same response IDs multiple times. +- [x] **Theme Light/Dark Variants** — renamed existing dark themes (Frappé, Mocha, Space) to (Dark) and created new (Light) variant JSON files: FrappeLight.json (using Catppuccin Latte), MochaLight.json (using Catppuccin Latte/Light variant), and SpaceLight.json (using Space Light variant). +- [x] **Zoom limit restrictions** — restricted zoom level range on the canvas to between 0.5 and 20.0 (in ggate/DrawArea.py). +- [x] **GLC file serialization and parsing zoom/positions** — added a `meta` block to output and restore the current canvas zoom level on load, and cleaned up coordinate serialization/parsing using comprehensions and float string handling. +- [x] **Preferences font picker** — completed typography section with monospace font filtering. - [x] **Timing diagram revamp** — `Display.py` (`Adw.Dialog` + `ToolbarView`, scale/range/ save toolbar) and `Diagram.py` (synced scrolls, pure `set_draw_func` rendering, gesture scrubbing, empty-history placeholder) rewritten; renders waveforms theme-aware. diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index 42ed676..7a2f453 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -179,11 +179,12 @@ def parse_section(self, section: str): elif which == "meta": if (zoom_val := content.get("zoom", None)): zoom = float(zoom_val[0]) - self.circuit.mainframe.drawarea.zoom = zoom - self.circuit.mainframe.drawarea.drawingarea.set_size_request( - int(self.circuit.mainframe.drawarea.width * zoom), - int(self.circuit.mainframe.drawarea.height * zoom) - ) + if self.circuit.mainframe: + self.circuit.mainframe.drawarea.zoom = zoom + self.circuit.mainframe.drawarea.drawingarea.set_size_request( + int(self.circuit.mainframe.drawarea.width * zoom), + int(self.circuit.mainframe.drawarea.height * zoom) + ) return None return None @@ -210,7 +211,7 @@ class CircuitManager(GObject.GObject): __gsignals__ = { 'currenttime-changed': (GObject.SIGNAL_RUN_FIRST, None, (float,)), 'title-changed': (GObject.SIGNAL_RUN_FIRST, None, (str,)), - 'message-changed': (GObject.SIGNAL_RUN_FIRST, None, (str,)), + 'message-changed': (GObject.SIGNAL_RUN_FIRST, None, (str, bool)), 'item-unselected': (GObject.SIGNAL_RUN_FIRST, None, ()), 'alert': (GObject.SIGNAL_RUN_FIRST, None, (str,)) } @@ -253,7 +254,7 @@ def save_file(self, filepath): self.simple_change = True self.save_point = self.action_count self.emit("title-changed", "%s - %s" % (os.path.basename(filepath), definitions.app_name)) - self.emit('message-changed', _('Saved File ')+os.path.basename(filepath)) + self.emit('message-changed', _('Saved File ')+os.path.basename(filepath), True) return True @@ -274,7 +275,7 @@ def open_file(self, filepath): self.components_history = [copy.deepcopy(self.components)] self.filepath = filepath self.emit("title-changed", "%s - %s" % (os.path.basename(filepath), definitions.app_name)) - self.emit('message-changed', _('Opened file ' + os.path.basename(filepath))) + self.emit('message-changed', _('Opened file ' + os.path.basename(filepath)), True) return False @@ -538,7 +539,7 @@ def set_netlevels(self): for j,net in enumerate(self.net_connections): if (c[1].pos_x + p[0], c[1].pos_y + p[1]) in net: if self.net_levels[j] != -1 and self.net_levels[j] != c[1].output_level[i]: - self.emit("message-changed", _("Output port is short circuit!")) + self.emit("message-changed", _("Output port is short circuit!"), False) return True self.net_levels[j] = c[1].output_level[i] return False @@ -626,7 +627,7 @@ def _evaluate_components(self): continue inputs = self._gather_inputs(c[1]) if inputs is None: - self.emit("message-changed", _("Input port is open circuit!")) + self.emit("message-changed", _("Input port is open circuit!"), False) return True c[1].calculate(inputs, self.current_time) c[1].input_level = inputs[:] @@ -686,15 +687,15 @@ def _settle(self, counter, max_iters): state = self._settle_state(net_levels_history) if state == "settled": - self.emit("message-changed", "") + self.emit("message-changed", "", False) return counter if state == "oscillate": - self.emit("message-changed", _("This circuit oscillates on infinite frequency!")) + self.emit("message-changed", _("This circuit oscillates on infinite frequency!"), False) return None net_levels_history.append(self.net_levels) if counter >= max_iters: - self.emit("message-changed", _("Calculation exceeded %d iterations — raise the limit in Preferences.") % max_iters) + self.emit("message-changed", _("Calculation exceeded %d iterations — raise the limit in Preferences.") % max_iters, False) return None counter += 1 yield ("progress", self.current_time) @@ -747,7 +748,7 @@ def _finish_sim(self, callback, val): return self._log_if_slow() if not val: - self.emit("message-changed", "") + self.emit("message-changed", "", False) if callback: callback(val) diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index b6af70d..4d2fe2f 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -198,8 +198,6 @@ def set_up_action_bar(self, *args): _("Rotate component ") + "" + _("Left 90°") + "" ) - self.action_bar.pack_start(self.action_rotleft) - # Rotate Right Action self.action_rotright = Gtk.Button() image = Gtk.Image.new_from_icon_name("object-rotate-right-symbolic") @@ -209,7 +207,12 @@ def set_up_action_bar(self, *args): _("Rotate component ") + "" + _("Right 90°") + "" ) - self.action_bar.pack_start(self.action_rotright) + # Group Rotate Actions + _rot_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + _rot_box.add_css_class("linked") + _rot_box.append(self.action_rotleft) + _rot_box.append(self.action_rotright) + self.action_bar.pack_start(_rot_box) # Flip Horizontal self.action_fliphori = Gtk.Button() @@ -220,8 +223,6 @@ def set_up_action_bar(self, *args): _("Flip component " + "" + _("horizontally") + "") ) - self.action_bar.pack_start(self.action_fliphori) - # Flip Vertical self.action_flipvert = Gtk.Button() image = Gtk.Image.new_from_icon_name("object-flip-vertical-symbolic") @@ -231,7 +232,12 @@ def set_up_action_bar(self, *args): _("Flip component ") + "" + _("vertically") + "" ) - self.action_bar.pack_start(self.action_flipvert) + # Group Flip Actions + _flip_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + _flip_box.add_css_class("linked") + _flip_box.append(self.action_fliphori) + _flip_box.append(self.action_flipvert) + self.action_bar.pack_start(_flip_box) # Add Net self.action_net = Gtk.ToggleButton() @@ -301,24 +307,15 @@ def create_window(self): box.append(self.toast_overlay) - # Status bar + # Status bar / Bottom Action Bar self.action_bar = Gtk.ActionBar() + self.action_bar.set_hexpand(True) self.set_up_action_bar() self.set_up_shortcuts() - action_bar_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - - _box = Gtk.Box() - _box.set_hexpand(False) - _box.set_halign(Gtk.Align.START) - - _box.append(self.action_bar) - action_bar_box.append(_box) - action_bar_box.append(self.statusbar) - action_bar_box.set_hexpand(True) - - box.append(action_bar_box) + self.action_bar.pack_end(self.statusbar) + box.append(self.action_bar) # Component box paned.set_start_child(self.comp_window) @@ -403,9 +400,6 @@ def open_file_complete(self, path): self.drawarea.queue_draw() GLib.idle_add(self.drawarea.center_viewport) - # todo: translations - self.statusbar.update(f"Opened {path.split('/')[-1]}") - def save_file__complete(self, path = None): "Saves current circuit to the specified path or opened file" path = path or self.circuit.filepath @@ -526,10 +520,10 @@ def on_action_cut_pressed(self, *widget): self.on_action_delete_pressed() def on_action_copy_pressed(self, *widget): - self.clipboard.set( - self.circuit.converter - .components_to_string(self.circuit.selected_components) - ) + serialized = self.circuit.converter.components_to_string(self.circuit.selected_components) + self.clipboard.set(serialized) + if not serialized: return + self.show_feedback(_("Copied selected components to clipboard"), is_toast=True) def on_action_paste_pressed(self, *args): def _handler(clipboard: Gdk.Clipboard, task, *args): @@ -538,7 +532,7 @@ def _handler(clipboard: Gdk.Clipboard, task, *args): components = self.circuit.converter.string_to_components(str_data) if isinstance(components, str) or len(components) == 0: - # TODO: toast unable to parse clipboard + self.show_feedback(_("Unable to parse clipboard data"), is_toast=True) return else: self.drawarea.set_component(const.component_none) @@ -673,8 +667,16 @@ def on_property_changed(self, widget): def on_circuit_title_changed(self, circuit, title): self.set_title(title) - def on_circuit_message_changed(self, circuit, message): - self.statusbar.update(message) + def show_feedback(self, message: str, is_toast: bool = False, timeout: int = 3): + if is_toast: + toast = Adw.Toast.new(message) + toast.set_timeout(timeout) + self.toast_overlay.add_toast(toast) + else: + self.statusbar.update(message) + + def on_circuit_message_changed(self, circuit, message, is_toast=False): + self.show_feedback(message, is_toast=is_toast) def on_circuit_item_unselected(self, circuit): self.prop_window.show_properties(None) From 54353a8acedceefe6f7e20b8972a96fc2a2b774e Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Sun, 14 Jun 2026 23:59:16 +0100 Subject: [PATCH 31/37] chore: project cleanup, remove orphaned files and improve property windows --- .agents/TODO.md | 24 +- ggate/Components/LogicGates/Standard/TSB.py | 4 +- .../Components/LogicGates/StateViewers/LED.py | 2 +- .../LogicGates/StateViewers/SevenSegment.py | 3 +- ggate/Components/Managers/Exporter.py | 9 - ggate/Components/Windows/Properties.py | 28 +- ggate/DiagramArea.py | 408 ------------------ ggate/TimingDiagramWindow.py | 312 -------------- 8 files changed, 29 insertions(+), 761 deletions(-) delete mode 100644 ggate/Components/Managers/Exporter.py delete mode 100644 ggate/DiagramArea.py delete mode 100644 ggate/TimingDiagramWindow.py diff --git a/.agents/TODO.md b/.agents/TODO.md index e406daa..9df3972 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -19,25 +19,23 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie oscillator duration but range defaults to 200µs) and dead vertical space below the rows. Ideas: default the time range to the actual data extent; increase waveform amplitude within each row; a saner default zoom for high-frequency signals. -- [ ] **`Windows/Properties.py`** rebuilds all widgets + re-`present()` on every - `show_properties` (old children leak). Build once / reuse; consider `Adw.ToolbarView`. + - [ ] **Initial centering gated by resize pref** — when `autocenter_resize` is OFF, first-paint centering is also skipped. Split initial-vs-resize if we want it strict. ## P2 — icons & dead code -- [ ] **Icon system** (plan: `plans/icon-creation.md`, specced incl. per-component visuals). - Implement: `bin/generate-gate-icons.py` (programmatic SVGs, ANSI+IEC), gresource→freedesktop - layout with aliases (reuse the proven dynamic-glob+`alias` pattern from theming), - `IconTheme.add_resource_path` at startup, switch `ComponentView`/`MenuPopover` from filesystem - paths to icon-name lookups, delete `_get_icon_path`. **(BLOCKER for installed runs: - `ComponentView`/`MenuPopover` still use `__file__`/`DATADIR` filesystem icon paths.)** +- [ ] **Icon system** (plan: `plans/icon-creation.md`). Implement: `bin/generate-gate-icons.py` + to output properly drawn icons with useful curves and accurate, straight-to-the-point SVG outputs + in two variants (ANSI and IEC). Set up gresource→freedesktop layout with aliases (using the + dynamic-glob+`alias` pattern from theming), call `IconTheme.add_resource_path` at startup, + switch `ComponentView`/`MenuPopover` from filesystem paths to icon-name lookups, and delete + `_get_icon_path`. **(BLOCKER for installed runs: `ComponentView`/`MenuPopover` still use + `__file__`/`DATADIR` filesystem icon paths.)** - [ ] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ actions/` with components misfiled there too (double "actions" / misfile). Tidy into a clean freedesktop layout, dev + installed in sync. -- [ ] Remove GTK3 leftovers (confirm no imports first): `ggate/TimingDiagramWindow.py`, - `ggate/DiagramArea.py` — now safe since the timing dialog was rewritten. -- [ ] Remove dead stub `ggate/Components/Managers/Exporter.py` (real one is `ggate/Exporter.py`). + - [ ] Style: residual 2-vs-4-space indent, mixed quotes, stale `indent-tabs-mode` headers in older files (new work follows: double quotes, comments per the `comment-style` memory). - [ ] Commented-out translator-credits block in `MainFrame.py`. @@ -74,6 +72,10 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie Earlier work (app launches, dialogs migrated, sim/crash fixes) — see git history `a0c0edc`…`a078fb1`. Recent (this development cycle): +- [x] **Property window widget reuse & leak fix** — optimized `PropertyWindow` (`ggate/Components/Windows/Properties.py`) to build its toolbar view, header bar, and banner once on initialization and reuse them, avoiding widget leaks. Also removed the redundant section header from Seven Segment LED properties. + +- [x] **Remove GTK3 leftovers & dead exporter stub** — deleted dead GTK3 leftover files `ggate/TimingDiagramWindow.py` and `ggate/DiagramArea.py`, and the dead exporter stub `ggate/Components/Managers/Exporter.py`. + - [x] **Header bar migrated to Adw.HeaderBar** — replaced Gtk.HeaderBar with Adw.HeaderBar for standard Adwaita layout, positioning menu buttons and simulation controls on the right. - [x] **AlertDialogs duplicate response fixed** — refactored class to dynamically instantiate Adw.AlertDialog instead of subclassing it to avoid registering same response IDs multiple times. - [x] **Theme Light/Dark Variants** — renamed existing dark themes (Frappé, Mocha, Space) to (Dark) and created new (Light) variant JSON files: FrappeLight.json (using Catppuccin Latte), MochaLight.json (using Catppuccin Latte/Light variant), and SpaceLight.json (using Space Light variant). diff --git a/ggate/Components/LogicGates/Standard/TSB.py b/ggate/Components/LogicGates/Standard/TSB.py index c17dfb5..06b9427 100644 --- a/ggate/Components/LogicGates/Standard/TSB.py +++ b/ggate/Components/LogicGates/Standard/TSB.py @@ -25,9 +25,9 @@ def __init__(self, *args, **kwds): self.active_high = True self.prop_names = ['active', 'inverted'] - self.properties.append((_("Active :"), (definitions.property_select, _("Low"), _("High")), "")) + self.properties.append((_("Active:"), (definitions.property_select, _("Low"), _("High")), "")) self.values.append(1) - self.properties.append((_("Inverted :"), (definitions.property_select, _("True"), _("False")), "")) + self.properties.append((_("Inverted:"), (definitions.property_select, _("True"), _("False")), "")) self.values.append(1) def propertyChanged(self, prop): diff --git a/ggate/Components/LogicGates/StateViewers/LED.py b/ggate/Components/LogicGates/StateViewers/LED.py index 4f2907b..c17f785 100644 --- a/ggate/Components/LogicGates/StateViewers/LED.py +++ b/ggate/Components/LogicGates/StateViewers/LED.py @@ -19,7 +19,7 @@ def __init__(self, *args, **kwds): self.output_level = [] self.prop_names = ['_red', '_blue', '_green', '_yellow'] - self.properties.append((_("Color :"), (definitions.property_select, _('Red'), _('Blue'), _('Green'), _('Yellow')), '')) + self.properties.append((_("Color:"), (definitions.property_select, _('Red'), _('Blue'), _('Green'), _('Yellow')), '')) self.values.append(2) def drawComponent(self, cr, layout): diff --git a/ggate/Components/LogicGates/StateViewers/SevenSegment.py b/ggate/Components/LogicGates/StateViewers/SevenSegment.py index bb0f6f1..1704b0c 100644 --- a/ggate/Components/LogicGates/StateViewers/SevenSegment.py +++ b/ggate/Components/LogicGates/StateViewers/SevenSegment.py @@ -18,8 +18,7 @@ def __init__(self, *args, **kwds): self.output_level = [] self.prop_names = ['_red', '_blue', '_green', '_yellow'] - self.properties.append((_("Color of 7 Segment LEDs :"), None, '')) - self.properties.append((_("Color :"), (definitions.property_select, _('Red'), _('Blue'), _('Green'), _('Yellow')), '')) + self.properties.append((_("Color:"), (definitions.property_select, _('Red'), _('Blue'), _('Green'), _('Yellow')), '')) self.values.append(2) def set_7seg(self, cr: cairo.Context, a, b, c, d, e, f, g): diff --git a/ggate/Components/Managers/Exporter.py b/ggate/Components/Managers/Exporter.py deleted file mode 100644 index 7852559..0000000 --- a/ggate/Components/Managers/Exporter.py +++ /dev/null @@ -1,9 +0,0 @@ -from __future__ import annotations -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from ggate.MainFrame import MainFrame - -class Exporter: - def __init__(self, mainframe: MainFrame): - self.mainframe = mainframe diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py index febf777..277443e 100644 --- a/ggate/Components/Windows/Properties.py +++ b/ggate/Components/Windows/Properties.py @@ -28,13 +28,21 @@ def __init__(self): self.prop_controls = [] self.old_values = [] - self.content_box: Gtk.Box = None - self.banner: Adw.Banner = None self.component = None self._is_presented = False self.set_content_width(350) self.connect("closed", self.on_window_delete) + + # Build persistent UI hierarchy once to prevent widget leaks + self.header_bar = Adw.HeaderBar() + self.banner = Adw.Banner() + self.banner.set_revealed(False) + + self.toolbar_view = Adw.ToolbarView() + self.toolbar_view.add_top_bar(self.header_bar) + self.toolbar_view.add_top_bar(self.banner) + self.set_child(self.toolbar_view) def _set_invalid_state(self, positions): for idx, ctrl in enumerate(self.prop_controls): @@ -94,27 +102,16 @@ def show_properties(self, component: Optional[BaseComponent], parent: Optional[G return self.component = component - self.set_child(None) - - self.header_bar = Adw.HeaderBar() - self.set_title("%s - %s" % (self.title, component.description)) - - self.banner = Adw.Banner() self.banner.set_revealed(False) - toolbar_view = Adw.ToolbarView() - toolbar_view.add_top_bar(self.header_bar) - toolbar_view.add_top_bar(self.banner) - if len(component.properties) == 0: status_page = Adw.StatusPage( title=_("No properties"), description=_("This component has no editable properties."), ) - toolbar_view.set_content(status_page) - self.set_child(toolbar_view) + self.toolbar_view.set_content(status_page) if parent is not None: self.present(parent) self._is_presented = True @@ -208,8 +205,7 @@ def show_properties(self, component: Optional[BaseComponent], parent: Optional[G if group_counts.get(group, 0) > 0: preference_page.add(group) - toolbar_view.set_content(preference_page) - self.set_child(toolbar_view) + self.toolbar_view.set_content(preference_page) if parent is not None: self.present(parent) diff --git a/ggate/DiagramArea.py b/ggate/DiagramArea.py deleted file mode 100644 index 6aaddda..0000000 --- a/ggate/DiagramArea.py +++ /dev/null @@ -1,408 +0,0 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- - -import cairo -import math -from decimal import Decimal -from ggate.const import definitions as const -from ggate.Utils import * -from ggate import Preference -from gi.repository import Gtk, Gdk, PangoCairo -from gettext import gettext as _ - -class TimingDiagramArea(Gtk.Box): - def __init__(self, circuit, drawarea): - Gtk.Box.__init__(self) - - self.circuit = circuit - self.drawarea = drawarea - self.scale = 5_000_000 # pix/sec - self.start_time = 0.0 - self.end_time = 0.0002 - self.diagram_unit = 1 # 0: ns, 1: µs, 2: ms - - self.gra_pix = 120 - - self.name_width = 150 - self.img_height = 0 - - self.diagram_scroll = Gtk.ScrolledWindow() - self.diagram_scroll.set_hexpand(True) - self.diagram_scroll.set_vexpand(True) - self.diagram_area = Gtk.DrawingArea() - self.diagram_scroll.set_child(self.diagram_area) - self.diagram_scroll_hadj = self.diagram_scroll.get_hadjustment() - self.diagram_scroll_vadj = self.diagram_scroll.get_vadjustment() - - self.name_scroll = Gtk.ScrolledWindow( - vadjustment=self.diagram_scroll.get_vadjustment()) - self.name_scroll.set_size_request(150, -1) - self.namearea = Gtk.DrawingArea() - self.name_scroll.set_child(self.namearea) - self.name_scroll_hadj = self.name_scroll.get_hadjustment() - self.name_scroll_vadj = self.name_scroll.get_vadjustment() - - self.append(self.name_scroll) - self.append(self.diagram_scroll) - - self.cursor_x = 0 - self.cursor_y = 0 - self.show_cursor = False - self.mouse_down = False - self.middle_move_enabled = False - - self.name_pixbuf = None - self.diagram_pixbuf = None - - self.namearea.set_draw_func(self.on_namearea_draw) - self.diagram_area.set_draw_func(self.on_diagram_area_draw) - - controller = Gtk.EventControllerMotion() - controller.connect('leave', self.on_diagram_area_leave) - self.diagram_area.add_controller(controller) - - controller = Gtk.EventControllerMotion() - controller.connect('motion', self.on_diagram_area_motion) - self.diagram_area.add_controller(controller) - - self.diagram_area.set_draw_func(self.on_diagram_area_draw) - - controller = Gtk.GestureClick() - # Primary Button - controller.set_button(Gdk.BUTTON_PRIMARY) - controller.connect('pressed', self.on_diagram_area_button_press_primary) - self.diagram_area.add_controller(controller) - - controller = Gtk.GestureClick() - # Secondary click (right click) - controller.set_button(Gdk.BUTTON_SECONDARY) - controller.connect('pressed', self.on_diagram_area_button_press_secondary) - self.diagram_area.add_controller(controller) - - controller = Gtk.GestureClick() - # Left click release - controller.set_button(Gdk.BUTTON_PRIMARY) - controller.connect('released', self.on_diagram_area_button_release_primary) - self.diagram_area.add_controller(controller) - - controller = Gtk.GestureClick() - # Right click release - controller.set_button(Gdk.BUTTON_SECONDARY) - controller.connect('released', self.on_diagram_area_button_release_secondary) - self.diagram_area.add_controller(controller) - - controller = Gtk.GestureClick() - controller.set_button(Gdk.BUTTON_SECONDARY) - controller.connect('pressed', self.on_namearea_button_press) - self.namearea.add_controller(controller) - - controller = Gtk.GestureClick() - controller.set_button(Gdk.BUTTON_SECONDARY) - controller.connect('released', self.on_namearea_button_release) - self.namearea.add_controller(controller) - - controller = Gtk.EventControllerMotion() - controller.connect('motion', self.on_namearea_motion) - self.namearea.add_controller(controller) - - def on_namearea_button_press(self, widget, *event): - self.middle_move_enabled = True - self.move_start_x = event[1] - self.move_start_y = event[2] - - def on_namearea_button_release(self, widget, *event): - self.middle_move_enabled = False - - def on_namearea_motion(self, widget, *event): - - x_axis, y_axis = event[0], event[1] - - if self.middle_move_enabled: - delta_x = self.move_start_x - x_axis - delta_y = self.move_start_y - y_axis - if -1 < delta_x < 1 and -1 < delta_y < 1: - return - self.name_scroll_hadj.set_value( - self.name_scroll_hadj.get_value() + delta_x) - self.name_scroll_vadj.set_value( - self.name_scroll_vadj.get_value() + delta_y) - - def on_diagram_area_button_press_primary(self, widget, *event): - event_button, x_axis, y_axis = event - - if event_button == Gdk.BUTTON_PRIMARY: - self.cursor_x = x_axis - - if self.cursor_x < 0.0: - self.cursor_x = 0.0 - if self.diagram_width < self.cursor_x: - self.cursor_x = self.diagram_width - self.cursor_y = y_axis - if 39 <= self.cursor_y < self.img_height: - self.mouse_down = True - self.queue_draw() - - def on_diagram_area_button_press_secondary(self, controller, *events): - event_button, x_axis, y_axis = events - if event_button == Gdk.BUTTON_SECONDARY: - self.middle_move_enabled = True - self.move_start_x = x_axis - self.move_start_y = y_axis - - def on_diagram_area_button_release_primary(self, widget, *event): - if event[0] == Gdk.BUTTON_PRIMARY: - self.mouse_down = False - if 39 <= self.cursor_y < self.img_height: - self.circuit.current_time = self.cursor_x / self.scale + self.start_time - self.circuit.revert_state() - self.drawarea.redraw = True - self.drawarea.queue_draw() - - def on_diagram_area_button_release_secondary(self, controller, *event): - self.middle_move_enabled = False - - def on_diagram_area_motion(self, controller, x_axis, y_axis, *args): - widget = controller.get_widget() - - if self.middle_move_enabled: - delta_x = self.move_start_x - x_axis - delta_y = self.move_start_y - y_axis - if -1 < delta_x < 1 and -1 < delta_y < 1: - return - self.diagram_scroll_hadj.set_value( - self.diagram_scroll_hadj.get_value() + delta_x) - self.diagram_scroll_vadj.set_value( - self.diagram_scroll_vadj.get_value() + delta_y) - - self.cursor_x_old = self.cursor_x - self.cursor_y_old = self.cursor_y - self.cursor_x = x_axis - try: - self.diagram_width - except: - return - if self.cursor_x < 0.0: - self.cursor_x = 0.0 - if self.diagram_width < self.cursor_x: - self.cursor_x = self.diagram_width - self.cursor_y = y_axis - if 39 <= self.cursor_y < self.img_height: - int(min((self.cursor_x_old, self.cursor_x)) - 1) - int(abs(self.cursor_x_old - self.cursor_x) + 4) - if self.show_cursor: - widget.queue_draw() # _area(left, 0, width, self.img_height) - else: - widget.queue_draw() - self.show_cursor = True - elif self.show_cursor: - self.show_cursor = False - widget.queue_draw() - - def set_time(self, time): - old_x = (self.circuit.current_time - self.start_time) * self.scale - self.circuit.current_time = time - new_x = (self.circuit.current_time - self.start_time) * self.scale - - # TODO: Figure out what this is used for - int(min((old_x, new_x)) - 1) - int(abs(old_x - new_x) + 4) - self.diagram_area.queue_draw() - - def on_diagram_area_leave(self, controller, *event): - - widget = controller.get_widget() - - self.show_cursor = False - widget.queue_draw() #int(self.cursor_x - 1), 0, 3, self.img_height) - - def on_namearea_draw(self, widget, cr, *args): - if self.name_pixbuf is not None: - cr.set_source_surface(self.name_pixbuf, 0, 0) - cr.paint() - - def on_diagram_area_draw(self, widget, cr, *args): - if self.diagram_pixbuf is not None: - cr.set_source_surface(self.diagram_pixbuf, 0, 0) - cr.paint() - cr.set_line_width(1.0) - if self.show_cursor: - if self.mouse_down: - cr.set_source_rgba(0.0, 1.0, 0.0, 0.8) - else: - cr.set_source_rgba(0.0, 0.0, 1.0, 0.8) - cairo_paths(cr, (self.cursor_x, 39), - (self.cursor_x, self.img_height)) - cr.stroke() - if not self.mouse_down or not self.show_cursor: - cr.set_source_rgba(1.0, 0.0, 0.0, 0.8) - current_time_x = (self.circuit.current_time - - self.start_time) * self.scale - cairo_paths(cr, (current_time_x, 39), - (current_time_x, self.img_height)) - cr.stroke() - - def draw_names(self, cr): - name_layout = PangoCairo.create_layout(cr) - name_layout.set_font_description(Preference.drawing_font) - # draw borders - cr.set_source_rgb(1.0, 1.0, 1.0) - cr.rectangle(1, 1, self.name_width-1, 38) - cr.fill() - cr.set_source_rgb(0.875, 0.875, 0.875) - cr.rectangle(1, 40, self.name_width - 1, self.img_height - 41) - cr.fill() - cr.set_source_rgb(0.5, 0.5, 0.5) - cr.rectangle(0.5, 0.5, self.name_width - 1, self.img_height - 1) - i = 0 - for c in self.circuit.components: - if c[0] == const.component_probe: - cairo_paths(cr, (1, i * 40 + 39.5), - (self.name_width - 1, i * 40 + 39.5)) - i += 1 - cr.stroke() - - # draw probe names - cr.set_source_rgb(0.0, 0.0, 0.0) - i = 0 - for c in self.circuit.components: - if c[0] == const.component_probe: - cairo_draw_text(cr, name_layout, - c[1].values[0], 10, i * 40 + 60, 0, 0.5) - i += 1 - cr.fill() - - if self.diagram_unit == 0: - cairo_draw_text(cr, name_layout, "%s [ns]" % _( - "Time"), 130, 35, 1.0, 1.0) - elif self.diagram_unit == 1: - cairo_draw_text(cr, name_layout, "%s [µs]" % _( - "Time"), 130, 35, 1.0, 1.0) - else: - cairo_draw_text(cr, name_layout, "%s [ms]" % _( - "Time"), 130, 35, 1.0, 1.0) - - cr.fill() - - def draw_diagrams(self, cr): - diagram_layout = PangoCairo.create_layout(cr) - diagram_layout.set_font_description(Preference.drawing_font) - - # draw borders - cr.set_source_rgb(1.0, 1.0, 1.0) - cr.rectangle(0, 1, self.diagram_width - 1, self.img_height - 2) - cr.fill() - cr.set_source_rgb(0.5, 0.5, 0.5) - cairo_paths(cr, (0, 0.5), (self.diagram_width, 0.5)) - cairo_paths(cr, (self.diagram_width - 0.5, 1), - (self.diagram_width - 0.5, self.img_height - 1)) - cairo_paths(cr, (0, self.img_height - 0.5), - (self.diagram_width, self.img_height - 0.5)) - i = 0 - for c in self.circuit.components: - if c[0] == const.component_probe: - cairo_paths(cr, (0, i * 40 + 39.5), - (self.diagram_width - 1, i * 40 + 39.5)) - i += 1 - cr.stroke() - - # draw graduaton - gra_p = Decimal(self.gra_pix) / Decimal(self.scale) - order = 10 ** Decimal(int(math.log10(gra_p))) - grasec_top = gra_p / order - if 0.15 <= grasec_top < 0.35: - gra_p = order * Decimal("0.2") - elif 0.35 <= grasec_top <= 0.75: - gra_p = order * Decimal("0.5") - else: - gra_p = order * Decimal("0.1") - cr.set_source_rgb(0.0, 0.0, 0.0) - - if self.diagram_unit == 0: - u_start_time = self.start_time * 1000000000 - u_end_time = self.end_time * 1000000000 - u_gra_p = gra_p * 1000000000 - elif self.diagram_unit == 1: - u_start_time = self.start_time * 1000000 - u_end_time = self.end_time * 1000000 - u_gra_p = gra_p * 1000000 - else: - u_start_time = self.start_time * 1000 - u_end_time = self.end_time * 1000 - u_gra_p = gra_p * 1000 - - cairo_draw_text(cr, diagram_layout, str( - Decimal(u_start_time).quantize(Decimal(".00"))), 5, 35, 0.0, 1.0) - cairo_draw_text(cr, diagram_layout, str(Decimal(u_end_time).quantize( - Decimal(".00"))), self.diagram_width - 5, 35, 1.0, 1.0) - cr.fill() - - u_gra_sec = u_gra_p - gra_sec = gra_p - while True: - if u_gra_sec + u_gra_p / 4 >= u_end_time: - break - cr.set_source_rgb(0.5, 0.5, 0.5) - cairo_paths(cr, (int(float(gra_sec) * self.scale) + 0.5, 39), - (int(float(gra_sec) * self.scale) + 0.5, self.img_height - 1)) - cr.stroke() - cr.set_source_rgb(0.0, 0.0, 0.0) - cairo_draw_text(cr, diagram_layout, str(Decimal(u_gra_sec).quantize( - Decimal(".00"))), float(gra_sec) * self.scale, 35, 0.5, 1.0) - u_gra_sec += u_gra_p - gra_sec += gra_p - cr.fill() - - # plot graphs - history = self.circuit.probe_levels_history - for i, probe_lebels in enumerate(history[:-1]): - if history[i + 1][0] <= self.start_time or self.end_time < probe_lebels[0]: - continue - for j, data in enumerate(probe_lebels[1:]): - if data is True: - cairo_paths(cr, (round((probe_lebels[0] - self.start_time) * self.scale), j * 40 + 55.5), (round( - (history[i + 1][0] - self.start_time) * self.scale) + 1, j * 40 + 55.5)) - else: - cairo_paths(cr, (round((probe_lebels[0] - self.start_time) * self.scale), j * 40 + 65.5), (round( - (history[i + 1][0] - self.start_time) * self.scale) + 1, j * 40 + 65.5)) - if data != history[i + 1][j + 1]: - cairo_paths(cr, (round((history[i + 1][0] - self.start_time) * self.scale) + 0.5, j * 40 + 56), (round( - (history[i + 1][0] - self.start_time) * self.scale) + 0.5, j * 40 + 65)) - - if history[-1][0] < self.end_time: - for j, data in enumerate(history[-1][1:]): - if data is True: - cairo_paths(cr, (round( - (history[-1][0] - self.start_time) * self.scale), j * 40 + 55.5), (self.diagram_width, j * 40 + 55.5)) - else: - cairo_paths(cr, (round( - (history[-1][0] - self.start_time) * self.scale), j * 40 + 65.5), (self.diagram_width, j * 40 + 65.5)) - - cr.stroke() - - def createDiagram(self): - i = 0 - for c in self.circuit.components: - if c[0] == const.component_probe: - i += 1 - self.img_height = 40 * i + 40 - - self.diagram_width = int( - (self.end_time - self.start_time) * self.scale) - if self.diagram_width == 0: - self.diagram_width = 1 - - self.name_pixbuf = cairo.ImageSurface( - cairo.FORMAT_RGB24, self.name_width, self.img_height) - self.namearea.set_size_request(self.name_width, self.img_height) - ncr = cairo.Context(self.name_pixbuf) - ncr.set_line_width(1.0) - self.draw_names(ncr) - - self.diagram_pixbuf = cairo.ImageSurface( - cairo.FORMAT_RGB24, self.diagram_width, self.img_height) - self.diagram_area.set_size_request(self.diagram_width, self.img_height) - ccr = cairo.Context(self.diagram_pixbuf) - ccr.set_line_width(1.0) - self.draw_diagrams(ccr) - self.queue_draw() - - \ No newline at end of file diff --git a/ggate/TimingDiagramWindow.py b/ggate/TimingDiagramWindow.py deleted file mode 100644 index 202f85c..0000000 --- a/ggate/TimingDiagramWindow.py +++ /dev/null @@ -1,312 +0,0 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- - -from ggate.DiagramArea import DiagramArea -from ggate.Exporter import save_timing_diagram_as_image -from gi.repository import Gtk -from gettext import gettext as _ - -class TimingDiagramWindow(Gtk.Window): - def __init__(self, parent): - Gtk.Window.__init__(self, title=_("Timing diagram")) - self.set_default_size(480, 480) - self.parent = parent - self.set_hide_on_close(True) - # self.set_type_hint(Gdk.WindowTypeHint.DIALOG) - self.set_transient_for(parent) - - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - - self.scale_list = Gtk.ListStore(str) - scales = ["500.0", "200.0", "100.0", "50.0", "20.0", "10.0", "5.0", "2.0", "1.0"] - for scale in scales: - self.scale_list.insert_with_values(0, range(len(scales)), [scale]) - - self.units = ["ns", "µs", "ms"] - - # Scale - vbox.append(self._get_scale()) - - # Cursor Position - vbox.append(self._get_cursor_position()) - - # Range - vbox.append(self._get_range()) - - # Save button - vbox.append(self._get_save()) - - self.diagram_area = DiagramArea(self.parent.circuit, self.parent.drawarea) - self.parent.circuit.connect("currenttime-changed", self.on_diagram_area_current_time_changed) - vbox.append(self.diagram_area) - - vbox.set_margin_top(3) - vbox.set_margin_bottom(6) - vbox.set_margin_start(6) - vbox.set_margin_end(6) - - self.set_child(vbox) - - def _get_save(self): # Save image - save_image_btn = Gtk.Button(label=_("Save _diagram...")) - save_image_btn.set_use_underline(True) - save_image_btn.connect("clicked", self.on_save_image_clicked) - save_image_btn.set_margin_bottom(6) - - return save_image_btn - - def _get_unit_list(self): - unit_list = Gtk.ListStore(str) - for unit in self.units: - unit_list.insert_with_values(0, range(len(self.units)), [unit]) - - return unit_list - - - def _get_cursor_position(self): - - self.cursor_spin = Gtk.SpinButton(hexpand=True) - self.cursor_spin.set_increments(1, 10) - self.cursor_spin.set_range(0, 10000) - self.cursor_spin.set_digits(2) - self.cursor_spin.set_value(200.0) - self.cursor_spin_changed_id = self.cursor_spin.connect("changed", self.on_cursor_spin_changed) - - self.cursor_combo = Gtk.ComboBox.new_with_model(self._get_unit_list()) - renderer_text = Gtk.CellRendererText() - self.cursor_combo.pack_start(renderer_text, True) - self.cursor_combo.add_attribute(renderer_text, "text", 0) - self.cursor_combo.set_active(1) - self.cursor_combo_changed_id = self.cursor_combo.connect("changed", self.on_combo_changed) - - cursor_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, hexpand=True) - cursor_box.append(self.cursor_spin) - cursor_box.append(self.cursor_combo) - cursor_box.add_css_class("linked") - - frame = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - frame_label = Gtk.Box() - frame_label.append(Gtk.Label(label=_("Cursor position:"))) - frame.append(frame_label) - frame.append(cursor_box) - - frame.set_margin_top(3) - frame.set_margin_bottom(3) - - return frame - - def _get_scale(self): - self.scale_combo = Gtk.ComboBox.new_with_model_and_entry(self.scale_list) - # self.scale_combo.set_events(Gdk.EventMask.FOCUS_CHANGE_MASK) - self.scale_combo.get_child().connect("activate", self.on_scale_combo_activate) - - focus_event_controller = Gtk.EventControllerFocus() - focus_event_controller.connect('leave', self.on_scale_combo_focusout) - - self.scale_combo.get_child().add_controller(focus_event_controller) - self.scale_combo.get_child().set_width_chars(6) - self.scale_combo.set_entry_text_column(0) - self.scale_combo.get_child().set_text("5.0") - - self.scale_unit_combo = Gtk.ComboBox.new_with_model(self._get_unit_list()) - renderer_text = Gtk.CellRendererText() - self.scale_unit_combo.pack_start(renderer_text, True) - self.scale_unit_combo.add_attribute(renderer_text, "text", 0) - self.scale_unit_combo.set_active(1) - self.scale_unit_combo_changed_id = self.scale_unit_combo.connect("changed", self.on_combo_changed) - - scale_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - scale_box.append(self.scale_combo) - scale_box.append(self.scale_unit_combo) - scale_box.add_css_class("linked") - - frame = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - frame_label = Gtk.Box() - frame_label.append(Gtk.Label(label=_("Scale (px):"))) - frame.append(frame_label) - frame.append(scale_box) - - frame.set_margin_top(3) - frame.set_margin_bottom(3) - - return frame - - def _get_range(self): - # From - from_label = Gtk.Box() - from_label.append(Gtk.Label(label=_("From"))) - - from_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True) - inner_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, hexpand=True) - - self.from_spin = Gtk.SpinButton(hexpand=True) - self.from_spin.set_increments(1, 10) - self.from_spin.set_range(0, 10000) - self.from_spin.set_digits(2) - self.from_spin.set_value(0) - self.from_spin_changed_id = self.from_spin.connect("changed", self.on_from_time_changed) - - self.from_combo = Gtk.ComboBox.new_with_model(self._get_unit_list()) - renderer_text = Gtk.CellRendererText() - self.from_combo.pack_start(renderer_text, True) - self.from_combo.add_attribute(renderer_text, "text", 0) - self.from_combo.set_active(1) - self.from_combo_changed_id = self.from_combo.connect("changed", self.on_combo_changed) - - inner_box.append(self.from_spin) - inner_box.append(self.from_combo) - inner_box.add_css_class("linked") - inner_box.set_margin_end(3) - - from_box.append(from_label) - from_box.append(inner_box) - - # To - to_label = Gtk.Box() - to_label.append(Gtk.Label(label=_("To"))) - to_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True) - inner_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, hexpand=True) - - self.to_spin = Gtk.SpinButton(hexpand=True) - self.to_spin.set_increments(1, 10) - self.to_spin.set_range(0, 10000) - self.to_spin.set_digits(2) - self.to_spin.set_value(200.0) - self.to_spin_changed_id = self.to_spin.connect("changed", self.on_to_time_changed) - - self.to_combo = Gtk.ComboBox.new_with_model(self._get_unit_list()) - renderer_text = Gtk.CellRendererText() - self.to_combo.pack_start(renderer_text, True) - self.to_combo.add_attribute(renderer_text, "text", 0) - self.to_combo.set_active(1) - self.to_combo_changed_id = self.to_combo.connect("changed", self.on_combo_changed) - - inner_box.append(self.to_spin) - inner_box.append(self.to_combo) - inner_box.add_css_class("linked") - inner_box.set_margin_start(3) - - to_box.append(to_label) - to_box.append(inner_box) - - # Container - frame = Gtk.Frame(label=_("Range:")) - - range_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - range_box.append(from_box) - range_box.append(to_box) - range_box.set_margin_end(3) - range_box.set_margin_start(3) - range_box.set_margin_bottom(3) - - frame.set_child(range_box) - - frame.set_margin_top(3) - frame.set_margin_bottom(3) - - return frame - - - def check_scale_format(self): - try: - scale = float(self.scale_combo.get_child().get_text()) - if scale == int(scale): - self.scale_combo.get_child().set_text(str(int(scale)) + ".0") - except ValueError: - scale = 5.0 - self.scale_combo.get_child().set_text("5.0") - - self.on_redraw() - - def on_scale_combo_activate(self, *widget): - self.check_scale_format() - - def on_scale_combo_focusout(self, *args): - self.check_scale_format() - - def expand_time(self, time, unit): - if unit == 0: - return time / 1000000000 - elif unit == 1: - return time / 1000000 - else: - return time / 1000 - - def on_diagram_area_current_time_changed(self, diagram_area, time): - unit = self.cursor_combo.get_active() - if unit == 0: - self.cursor_spin.set_value(time * 1000000000) - elif unit == 1: - self.cursor_spin.set_value(time * 1000000) - else: - self.cursor_spin.set_value(time * 1000) - - def on_from_time_changed(self, widget): - from_time = self.from_spin.get_value() - to_time = self.to_spin.get_value() - if from_time > to_time: - self.to_spin.disconnect(self.to_spin_changed_id) - self.to_spin.set_value(from_time) - self.to_spin_changed_id = self.to_spin.connect("changed", self.on_to_time_changed) - self.on_redraw() - - - def on_to_time_changed(self, widget): - from_time = self.from_spin.get_value() - to_time = self.to_spin.get_value() - if from_time > to_time: - self.from_spin.disconnect(self.from_spin_changed_id) - self.from_spin.set_value(to_time) - self.from_spin_changed_id = self.from_spin.connect("changed", self.on_from_time_changed) - self.on_redraw() - - - def on_cursor_spin_changed(self, widget): - self.diagram_area.set_time(self.expand_time(self.cursor_spin.get_value(), self.cursor_combo.get_active())) - self.on_redraw() - - def on_combo_changed(self, widget): - self.scale_unit_combo.disconnect(self.scale_unit_combo_changed_id) - self.from_combo.disconnect(self.from_combo_changed_id) - self.to_combo.disconnect(self.to_combo_changed_id) - self.cursor_combo.disconnect(self.cursor_combo_changed_id) - self.scale_unit_combo.set_active(widget.get_active()) - self.from_combo.set_active(widget.get_active()) - self.to_combo.set_active(widget.get_active()) - self.cursor_combo.set_active(widget.get_active()) - self.scale_unit_combo_changed_id = self.scale_unit_combo.connect("changed", self.on_combo_changed) - self.from_combo_changed_id = self.from_combo.connect("changed", self.on_combo_changed) - self.to_combo_changed_id = self.to_combo.connect("changed", self.on_combo_changed) - self.cursor_combo_changed_id = self.cursor_combo.connect("changed", self.on_combo_changed) - self.diagram_area.set_time(self.expand_time(self.cursor_spin.get_value(), self.cursor_combo.get_active())) - self.on_redraw() - - def on_redraw(self, *args): - if self.scale_unit_combo.get_active() == 0: - new_scale = float(self.scale_combo.get_child().get_text()) * 1000000000 - elif self.scale_unit_combo.get_active() == 1: - new_scale = float(self.scale_combo.get_child().get_text()) * 1000000 - else: - new_scale = float(self.scale_combo.get_child().get_text()) * 1000 - - new_diagram_unit = self.scale_unit_combo.get_active() - new_start_time = self.expand_time(self.from_spin.get_value(), self.from_combo.get_active()) - new_end_time = self.expand_time(self.to_spin.get_value(), self.to_combo.get_active()) - - diagram_width = int((new_end_time - new_start_time) * new_scale) - - if diagram_width > 5000: - dialog = Gtk.MessageDialog(transient_for=self, message_type=Gtk.MessageType.ERROR, button_type=Gtk.ButtonsType.OK) - dialog.set_modal(True) - dialog.set_markup(_("Can't create timing diagram!")) - dialog.get_message_area().append(Gtk.Label(label=_("The width of the timing diagram will be too wide. (> 5000)"))) - dialog.present() - - else: - self.diagram_area.scale = new_scale - self.diagram_area.diagram_unit = new_diagram_unit - self.diagram_area.start_time = new_start_time - self.diagram_area.end_time = new_end_time - self.diagram_area.createDiagram() - - def on_save_image_clicked(self, widget): - save_timing_diagram_as_image(self.diagram_area, self) From dc3e5a901bf33b290c8fba4b77aec2ca79f07646 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 00:54:54 +0100 Subject: [PATCH 32/37] feat: update app id, and improve app bindings --- .agents/TODO.md | 42 +++--- .agents/plans/icon-creation.md | 10 +- .agents/reference/build-system-analysis.md | 4 +- .agents/reference/delegation-brief.md | 6 +- .github/workflows/flatpak.yml | 2 +- CLAUDE.md | 4 +- ...lco.GGate.json => org.astralco.ggate.json} | 2 +- ....desktop => org.astralco.ggate.desktop.in} | 6 +- data/org.astralco.ggate.metainfo.xml.in | 19 +++ ggate/Animation.py | 1 - ggate/ComponentView.py | 4 +- ggate/Components/LogicGates/Calculator.py | 1 - .../Components/LogicGates/SystemComponents.py | 1 - ggate/Components/LogicGates/__init__.py | 1 - ggate/Components/Windows/Properties.py | 1 - .../Components/Windows/TimingGraph/Diagram.py | 31 ++-- .../Components/Windows/TimingGraph/Display.py | 34 +++++ ggate/DrawArea.py | 8 +- ggate/Exporter.py | 1 - ggate/MainFrame.py | 7 +- ggate/MenuPopover.py | 5 +- ggate/Themes.py | 2 +- ggate/config.py | 19 ++- meson.build | 84 ++++++++++- run.py | 4 +- setup.py | 134 ------------------ 26 files changed, 213 insertions(+), 220 deletions(-) rename build-aux/flatpak/{org.astralco.GGate.json => org.astralco.ggate.json} (96%) rename data/{org.astralco.GGate.desktop => org.astralco.ggate.desktop.in} (65%) mode change 100755 => 100644 create mode 100644 data/org.astralco.ggate.metainfo.xml.in delete mode 100644 setup.py diff --git a/.agents/TODO.md b/.agents/TODO.md index 9df3972..6d4f4f4 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -11,42 +11,32 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie too large to handle, and warn when a save/compress or simulation will take too long, instead of hanging/OOM-ing. (Run-time hang is mitigated by the non-blocking sim + the >15s log, but there's no up-front guard.) -- [ ] **Timing diagram: surface the width cap.** `diagram_width` is now clamped to Cairo's 32767px - so a fine timing unit can't OOM; tell the user (status/banner) when the chart is capped and to - zoom out, instead of silently capping. -- [ ] **Timing diagram visual polish** (PM: "not looking great"). Dense oscillator waveforms - read as a picket-fence and the hi/lo amplitude is small; large empty tail (data ends at the - oscillator duration but range defaults to 200µs) and dead vertical space below the rows. - Ideas: default the time range to the actual data extent; increase waveform amplitude within - each row; a saner default zoom for high-frequency signals. - -- [ ] **Initial centering gated by resize pref** — when `autocenter_resize` is OFF, first-paint - centering is also skipped. Split initial-vs-resize if we want it strict. + + + + ## P2 — icons & dead code -- [ ] **Icon system** (plan: `plans/icon-creation.md`). Implement: `bin/generate-gate-icons.py` - to output properly drawn icons with useful curves and accurate, straight-to-the-point SVG outputs - in two variants (ANSI and IEC). Set up gresource→freedesktop layout with aliases (using the - dynamic-glob+`alias` pattern from theming), call `IconTheme.add_resource_path` at startup, - switch `ComponentView`/`MenuPopover` from filesystem paths to icon-name lookups, and delete - `_get_icon_path`. **(BLOCKER for installed runs: `ComponentView`/`MenuPopover` still use - `__file__`/`DATADIR` filesystem icon paths.)** +- [ ] **Icon system** (plan: `plans/icon-creation.md`). Integrate hand-drawn, accurate, straight-to-the-point + SVG files for each component with useful curves in two variants (ANSI and IEC). Set up + gresource→freedesktop layout with aliases (using the dynamic-glob+`alias` pattern from theming), + call `IconTheme.add_resource_path` at startup, switch `ComponentView`/`MenuPopover` from + filesystem paths to icon-name lookups, and delete `_get_icon_path`. **(BLOCKER for installed + runs: `ComponentView`/`MenuPopover` still use `__file__`/`DATADIR` filesystem icon paths.)** - [ ] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ actions/` with components misfiled there too (double "actions" / misfile). Tidy into a clean freedesktop layout, dev + installed in sync. -- [ ] Style: residual 2-vs-4-space indent, mixed quotes, stale `indent-tabs-mode` headers in - older files (new work follows: double quotes, comments per the `comment-style` memory). -- [ ] Commented-out translator-credits block in `MainFrame.py`. +- [ ] Style: residual 2-vs-4-space indent, mixed quotes in older files (new work follows: double quotes, comments per the `comment-style` memory). ## Build & packaging - [ ] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` draws the clock trigger bubble at the `SL` coordinate (`outpin_b + 20`) instead of `CK` (`outpin_b + 40`). (Found during icon recon.) -- [ ] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths +- [x] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths — must keep the dev `run.py` path working (no meson step in dev). -- [ ] **Desktop file + AppStream install via meson** — confirm meson installs the (renamed) +- [x] **Desktop file + AppStream install via meson** — confirm meson installs the (renamed) desktop/metadata, not just legacy `setup.py`. - [ ] **Unify dev vs installed resource source** — dev XML is generated by `run.py`, installed by `resources.xml.in` + meson glob; consider a single shared generator so they can't diverge. @@ -72,6 +62,12 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie Earlier work (app launches, dialogs migrated, sim/crash fixes) — see git history `a0c0edc`…`a078fb1`. Recent (this development cycle): +- [x] **Timing diagram width cap warning** — added a warning banner (`Adw.Banner`) in the timing graph dialog to notify the user when the diagram width is capped at Cairo's limit. +- [x] **First-paint centering decoupled** — fixed `ggate/DrawArea.py` and `ggate/MainFrame.py` so that initial canvas viewport centering is always performed on file/buffer load, even when the resize auto-centering preference is disabled. +- [x] **translator-credits & header cleanups** — cleaned up the commented-out translator-credits block in `MainFrame.py` and removed the stale `indent-tabs-mode` editor directives from 8 Python files. + +- [x] **Timing diagram visual polish** — increased waveform amplitude within each row (from 20px to 28px), auto-fit/default the time range to the actual extent of simulation history, calculated a saner default zoom for high-frequency signals to avoid picket-fences, and fixed dead vertical space by drawing backgrounds down the full allocated height. + - [x] **Property window widget reuse & leak fix** — optimized `PropertyWindow` (`ggate/Components/Windows/Properties.py`) to build its toolbar view, header bar, and banner once on initialization and reuse them, avoiding widget leaks. Also removed the redundant section header from Seven Segment LED properties. - [x] **Remove GTK3 leftovers & dead exporter stub** — deleted dead GTK3 leftover files `ggate/TimingDiagramWindow.py` and `ggate/DiagramArea.py`, and the dead exporter stub `ggate/Components/Managers/Exporter.py`. diff --git a/.agents/plans/icon-creation.md b/.agents/plans/icon-creation.md index 3922683..8a6e8fa 100644 --- a/.agents/plans/icon-creation.md +++ b/.agents/plans/icon-creation.md @@ -70,8 +70,8 @@ Standard system integration assets. | Icon Role | Target Name | Size Directory | Current State | Target State | |---|---|---|---|---| -| **App Launcher Icon** | `org.astralco.GGate.svg` | `scalable/apps` | SVG (`scalable/ggate.svg`) | Scalable SVG (high-res compliant) | -| **App Launcher Icon** | `org.astralco.GGate.png` | `apps/[size]x[size]` | PNGs (`apps/[size]/ggate.png`) | Regenerated from scalable target | +| **App Launcher Icon** | `org.astralco.ggate.svg` | `scalable/apps` | SVG (`scalable/ggate.svg`) | Scalable SVG (high-res compliant) | +| **App Launcher Icon** | `org.astralco.ggate.png` | `apps/[size]x[size]` | PNGs (`apps/[size]/ggate.png`) | Regenerated from scalable target | | **GGate Document Icon** | `application-x-ggate-circuit-symbolic.svg` | `scalable/mimetypes` | **Missing** (only PNGs exist) | Scalable SVG representing circuit file | | **GGate Document Icon** | `application-x-ggate-circuit.png` | `mimetypes/[size]x[size]` | PNGs (`mime/[size]/text-glc.png`) | Rename & regenerate to match MIME spec | @@ -554,7 +554,7 @@ Instead of reorganizing the physical file structure in git, we will map files in ```xml - + actions/flip-horizontal.svg actions/flip-vertical.svg @@ -615,7 +615,7 @@ display = Gdk.Display.get_default() if display: theme = Gtk.IconTheme.get_for_display(display) # Register the GResource path prefix where GTK will search for icons - resource_prefix = "/org/astralco/GGate/Dev/icons" if config.RUNNING_FROM_SOURCE else "/org/astralco/GGate/icons" + resource_prefix = "/org/astralco/ggate/Dev/icons" if config.RUNNING_FROM_SOURCE else "/org/astralco/ggate/icons" theme.add_resource_path(resource_prefix) ``` @@ -654,7 +654,7 @@ if display: ### Phase 3: Hand-Authored Assets & System Files 1. **Action Icons:** Update `flip-horizontal.svg`, `flip-vertical.svg`, `rotate-left.svg`, and `rotate-right.svg` to be 16x16 symbolic SVGs. 2. **Net Icon:** Design the missing `add-net-symbolic.svg` showing a clean vector wire segment. -3. **App & MIME Icons:** Modernize `org.astralco.GGate.svg` and `application-x-ggate-circuit-symbolic.svg`, then update Meson file installers and setup configs to deploy them to standard directories. +3. **App & MIME Icons:** Modernize `org.astralco.ggate.svg` and `application-x-ggate-circuit-symbolic.svg`, then update Meson file installers and setup configs to deploy them to standard directories. ### Phase 4: Verification & Testing 1. **Theme Switch Verification:** Verify that toggling between ANSI and IEC symbols updates the ComponentView icons on the fly. diff --git a/.agents/reference/build-system-analysis.md b/.agents/reference/build-system-analysis.md index c07110c..3a5865b 100644 --- a/.agents/reference/build-system-analysis.md +++ b/.agents/reference/build-system-analysis.md @@ -12,7 +12,7 @@ This document tracks the outstanding build, packaging, and resource issues in GG 1. This breaks when the application is installed globally (since the source `data/images` path is not present at the python site-packages folder level). 2. The GResource path layout is non-standard (redundant `data/` subdirectory, missing icon theme folder hierarchy like `hicolor`, and double actions paths). * **Recommended Resolution**: - - Restructure the icons folder hierarchy inside both the dev and release GResource bundles to follow the Freedesktop icon theme standards: `/org/astralco/GGate/icons/hicolor/[size]/[context]/[name].[ext]`. + - Restructure the icons folder hierarchy inside both the dev and release GResource bundles to follow the Freedesktop icon theme standards: `/org/astralco/ggate/icons/hicolor/[size]/[context]/[name].[ext]`. - Use `GResource` aliases to map resource paths cleanly. - Load all icons strictly by name using `Gtk.Image.new_from_icon_name` or `resource://` URLs. @@ -20,7 +20,7 @@ This document tracks the outstanding build, packaging, and resource issues in GG ## 2. Flatpak Build Improvements * **Status**: **Still Pending** -* **Description**: The Flatpak manifest (`build-aux/flatpak/org.astralco.GGate.json`) compiles python modules using pip with active network access (`--share=network`). +* **Description**: The Flatpak manifest (`build-aux/flatpak/org.astralco.ggate.json`) compiles python modules using pip with active network access (`--share=network`). * **Issues**: For official distribution on Flathub, builds must be fully offline and reproducible. * **Recommended Resolution**: Use `flatpak-pip-generator` to generate a static list of dependencies with SHA-256 hashes, allowing local offline pip installation. diff --git a/.agents/reference/delegation-brief.md b/.agents/reference/delegation-brief.md index 75e5a07..a216f1a 100644 --- a/.agents/reference/delegation-brief.md +++ b/.agents/reference/delegation-brief.md @@ -7,7 +7,7 @@ task-specific prompt. ## Repo - Path / working dir: `/Users/ekureedem/Documents/Projects/GGate` (git repo, branch off `main`). - Stack: Python `>=3.10`, GTK 4 (`>=4.16`), libadwaita (`>=1.6.8`), Cairo-rendered canvas. -- App IDs: `org.astralco.GGate` (installed), `org.astralco.GGate.Dev` (dev). +- App IDs: `org.astralco.ggate` (installed), `org.astralco.ggate.Dev` (dev). - Authoritative architecture notes: `CLAUDE.md` (read it). Working backlog: `.agents/TODO.md`. ## Conventions (enforced in review) @@ -26,8 +26,8 @@ task-specific prompt. - Dev: `run.py` loads `dev-resources.gresource` (from `data/images/dev-resources.xml`). - Installed: `ggate-resources.gresource` (from `data/images/resources.xml.in`, via `data/images/meson.build` which does dynamic XML generation — reuse that technique). -- Resource prefixes follow `/org/astralco/GGate/...` (installed) and - `/org/astralco/GGate/Dev/...` (dev). Dev-vs-installed detection lives in `config.py`. +- Resource prefixes follow `/org/astralco/ggate/...` (installed) and + `/org/astralco/ggate/Dev/...` (dev). Dev-vs-installed detection lives in `config.py`. - New bundled assets MUST go through Meson + both gresource XMLs and load by resource path — never an absolute/relative filesystem path (breaks in venv/installed prefixes). - Icon/asset gresource conventions are detailed in `.agents/plans/icon-creation.md`. diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index cc84913..56d3016 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -24,4 +24,4 @@ jobs: - name: Build Flatpak run: | - flatpak-builder --disable-rofiles-fuse --repo=repo --force-clean build-dir build-aux/flatpak/org.astralco.GGate.json + flatpak-builder --disable-rofiles-fuse --repo=repo --force-clean build-dir build-aux/flatpak/org.astralco.ggate.json diff --git a/CLAUDE.md b/CLAUDE.md index cd5fd49..f9c4805 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,7 +11,7 @@ and simulate. Circuit files are `.glc` (examples in `data/examples/`). Requires: Python `>=3.10,<4`, `gtk4 >= 4.16`, `libadwaita-1 >= 1.6.8`. Runtime deps (`pyproject.toml`): `pygobject`, `pycairo`, `python-igraph`, `shapely`, `packaging`, -`meson-python`. App ID `org.astralco.GGate` (dev: `org.astralco.GGate.Dev`). +`meson-python`. App ID `org.astralco.ggate` (dev: `org.astralco.ggate.Dev`). ## Working model @@ -94,7 +94,7 @@ These dialogs are the **current cleanup focus** — details and the grounded bug - **Meson**: `meson.build` (deps, resource compile → `ggate-resources.gresource`, `install_subdir('ggate')`), `meson_options.txt`, `bin/ggate.in`, `data/images/` gresource. -- **Flatpak**: `build-aux/flatpak/org.astralco.GGate.json` (GNOME 47 runtime, pip deps). +- **Flatpak**: `build-aux/flatpak/org.astralco.ggate.json` (GNOME 47 runtime, pip deps). - **Snap**: `build-aux/snapcraft/snapcraft.yaml` (`core22`, poetry deps, meson plugin). - **Dev resources**: `run.py` loads `./dev-resources.gresource`. This bundle is a build artifact (git-ignored) and must be recompiled from `data/images/dev-resources.xml` diff --git a/build-aux/flatpak/org.astralco.GGate.json b/build-aux/flatpak/org.astralco.ggate.json similarity index 96% rename from build-aux/flatpak/org.astralco.GGate.json rename to build-aux/flatpak/org.astralco.ggate.json index cbdcd8c..40c1599 100644 --- a/build-aux/flatpak/org.astralco.GGate.json +++ b/build-aux/flatpak/org.astralco.ggate.json @@ -1,5 +1,5 @@ { - "app-id" : "org.astralco.GGate", + "app-id" : "org.astralco.ggate", "runtime" : "org.gnome.Platform", "runtime-version" : "48", "sdk" : "org.gnome.Sdk", diff --git a/data/org.astralco.GGate.desktop b/data/org.astralco.ggate.desktop.in old mode 100755 new mode 100644 similarity index 65% rename from data/org.astralco.GGate.desktop rename to data/org.astralco.ggate.desktop.in index d421acf..1d51375 --- a/data/org.astralco.GGate.desktop +++ b/data/org.astralco.ggate.desktop.in @@ -4,7 +4,7 @@ Exec=ggate %F Name=GGate Terminal=false Type=Application -Icon=ggate -Categories=Science +Icon=@APP_ID@ +Categories=Science;Education;Utility; StartupNotify=true -MimeType=text/glc +MimeType=text/glc; diff --git a/data/org.astralco.ggate.metainfo.xml.in b/data/org.astralco.ggate.metainfo.xml.in new file mode 100644 index 0000000..8108010 --- /dev/null +++ b/data/org.astralco.ggate.metainfo.xml.in @@ -0,0 +1,19 @@ + + + @APP_ID@ + CC0-1.0 + GPL-3.0-or-later + GGate + Logic circuit simulator developed with GTK 4 and Python + +

+ GGate is a user-friendly logic circuit simulator that lets you design, + wire, and simulate digital logic circuits in real time. +

+
+ @APP_ID@.desktop + Koichi Akabe + https://github.com/vbkaisetsu/ggate + https://github.com/vbkaisetsu/ggate/issues + +
diff --git a/ggate/Animation.py b/ggate/Animation.py index a4a046e..b09f0ed 100644 --- a/ggate/Animation.py +++ b/ggate/Animation.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- def ease_out_cubic(t: float) -> float: return 1.0 - (1.0 - t) ** 3 diff --git a/ggate/ComponentView.py b/ggate/ComponentView.py index 30f45c4..b6599cd 100644 --- a/ggate/ComponentView.py +++ b/ggate/ComponentView.py @@ -6,8 +6,8 @@ from gi.repository import Gtk, GdkPixbuf, GObject def _get_icon_path(icon: str): - svg_path = os.path.join(config.DATADIR, "images", "components", f"{icon}.svg") - png_path = os.path.join(config.DATADIR, "images", "components", f"{icon}.png") + svg_path = os.path.join(config.ICONDIR, "components", f"{icon}.svg") + png_path = os.path.join(config.ICONDIR, "components", f"{icon}.png") return svg_path if os.path.exists(svg_path) else png_path class ComponentViewListBoxRow(Gtk.ListBoxRow): diff --git a/ggate/Components/LogicGates/Calculator.py b/ggate/Components/LogicGates/Calculator.py index e58605e..a1f6fd1 100644 --- a/ggate/Components/LogicGates/Calculator.py +++ b/ggate/Components/LogicGates/Calculator.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from gettext import gettext as _ from ggate import Preference diff --git a/ggate/Components/LogicGates/SystemComponents.py b/ggate/Components/LogicGates/SystemComponents.py index ee4d39f..65fc0aa 100644 --- a/ggate/Components/LogicGates/SystemComponents.py +++ b/ggate/Components/LogicGates/SystemComponents.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from abc import ABC, abstractmethod from typing import List diff --git a/ggate/Components/LogicGates/__init__.py b/ggate/Components/LogicGates/__init__.py index 8cfcc76..a363482 100644 --- a/ggate/Components/LogicGates/__init__.py +++ b/ggate/Components/LogicGates/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from ggate.const import definitions diff --git a/ggate/Components/Windows/Properties.py b/ggate/Components/Windows/Properties.py index 277443e..ff2dcd1 100644 --- a/ggate/Components/Windows/Properties.py +++ b/ggate/Components/Windows/Properties.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from typing import Optional from ggate.Components.LogicGates.SystemComponents import BaseComponent, PropertyError diff --git a/ggate/Components/Windows/TimingGraph/Diagram.py b/ggate/Components/Windows/TimingGraph/Diagram.py index c006fc6..3cd4f04 100644 --- a/ggate/Components/Windows/TimingGraph/Diagram.py +++ b/ggate/Components/Windows/TimingGraph/Diagram.py @@ -106,7 +106,7 @@ def draw(self): # ── draw callbacks ──────────────────────────────────────────────────────── def name_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *args): - self.draw_names(cr) + self.draw_names(cr, height) def chart_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *args): # snapshot so iterating is safe while the worker thread appends frames @@ -123,7 +123,7 @@ def chart_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *ar cr.fill() return - self.draw_diagrams(cr) + self.draw_diagrams(cr, width, height) current_time_x = (self._circuit.current_time - self.start_time) * self.scale if 0 <= current_time_x <= self.diagram_width: @@ -140,14 +140,15 @@ def chart_area_draw_fn(self, drawing_area, cr: cairo.Context, width, height, *ar # ── exporter-compatible public draw methods ─────────────────────────────── - def draw_names(self, cr: cairo.Context): + def draw_names(self, cr: cairo.Context, allocated_height: int = None): + h = allocated_height if allocated_height is not None else self.img_height probes = self.__get_probes() name_layout = PangoCairo.create_layout(cr) name_layout.set_font_description(Preference.drawing_font) # background cr.set_source(Preference.bg_color_running) - cr.rectangle(0, 0, self.name_width, self.img_height) + cr.rectangle(0, 0, self.name_width, h) cr.fill() # outer border + row separators @@ -179,29 +180,31 @@ def draw_names(self, cr: cairo.Context): cairo_draw_text(cr, name_layout, probe[1].values[0], 8, row_mid, 0, 0.5) cr.fill() - def draw_diagrams(self, cr: cairo.Context): + def draw_diagrams(self, cr: cairo.Context, allocated_width: int = None, allocated_height: int = None): + w = max(self.diagram_width, allocated_width) if allocated_width is not None else self.diagram_width + h = allocated_height if allocated_height is not None else self.img_height probes = self.__get_probes() diagram_layout = PangoCairo.create_layout(cr) diagram_layout.set_font_description(Preference.drawing_font) # background cr.set_source(Preference.bg_color_running) - cr.rectangle(0, 0, self.diagram_width, self.img_height) + cr.rectangle(0, 0, w, h) cr.fill() # outer border cr.set_source(Preference.grid_color) cr.set_line_width(1.0) - cairo_paths(cr, (0, 0.5), (self.diagram_width, 0.5)) - cairo_paths(cr, (self.diagram_width - 0.5, 0), (self.diagram_width - 0.5, self.img_height)) - cairo_paths(cr, (0, self.img_height - 0.5), (self.diagram_width, self.img_height - 0.5)) + cairo_paths(cr, (0, 0.5), (w, 0.5)) + cairo_paths(cr, (w - 0.5, 0), (w - 0.5, self.img_height)) + cairo_paths(cr, (0, self.img_height - 0.5), (w, self.img_height - 0.5)) cr.stroke() # ruler bottom divider + row separators - cairo_paths(cr, (0, _ROW_H - 0.5), (self.diagram_width, _ROW_H - 0.5)) + cairo_paths(cr, (0, _ROW_H - 0.5), (w, _ROW_H - 0.5)) for j in range(len(probes)): sep_y = _ROW_H + j * _ROW_H + _ROW_H - 0.5 - cairo_paths(cr, (0, sep_y), (self.diagram_width, sep_y)) + cairo_paths(cr, (0, sep_y), (w, sep_y)) cr.stroke() history = list(self._circuit.probe_levels_history) @@ -263,9 +266,9 @@ def _draw_waveforms(self, cr: cairo.Context, history, probes): cr.set_line_width(1.5) def _row_y(j, high): - # each row spans _ROW_H px starting at _ROW_H offset; high at +10, low at +30 + # each row spans _ROW_H px starting at _ROW_H offset; high at +6, low at +34 base = _ROW_H + j * _ROW_H - return (base + 10 + 0.5) if high else (base + 30 + 0.5) # +0.5 aligns 1px stroke to pixel grid + return (base + 6 + 0.5) if high else (base + 34 + 0.5) # +0.5 aligns 1px stroke to pixel grid def _draw_segment(j, x0, x1, data, next_data=None): if data == -1: @@ -280,7 +283,7 @@ def _draw_segment(j, x0, x1, data, next_data=None): cr.set_source(Preference.highlevel_color if high else Preference.lowlevel_color) tx = x1 - 0.5 # +0.5 aligns 1px stroke to pixel grid base = _ROW_H + j * _ROW_H - cairo_paths(cr, (tx, base + 11), (tx, base + 29)) + cairo_paths(cr, (tx, base + 7), (tx, base + 33)) cr.stroke() if len(history) > 1: diff --git a/ggate/Components/Windows/TimingGraph/Display.py b/ggate/Components/Windows/TimingGraph/Display.py index 77579fd..a8ddd41 100644 --- a/ggate/Components/Windows/TimingGraph/Display.py +++ b/ggate/Components/Windows/TimingGraph/Display.py @@ -87,6 +87,8 @@ def __init__(self, parent: MainFrame): self.connect("closed", self.on_closed) def on_parameters_changed(self, *args): + if getattr(self, "_blocking_updates", False): + return # spin value is in display-unit (ns/μs/ms); divide by seconds-per-unit to get px/s multipliers = {0: 1e-9, 1: 1e-6, 2: 1e-3} scale_val = self.scale_spin.get_value() @@ -110,6 +112,38 @@ def on_closed(self, dialog): def display(self): self._is_presented = True + + history = self._parent.circuit.probe_levels_history + if not history or len(history) <= 1: + self.on_parameters_changed() + self.present(self._parent) + return + + start_t = history[0][0] + end_t = history[-1][0] + duration = end_t - start_t + if duration <= 1e-12: + self.on_parameters_changed() + self.present(self._parent) + return + + self._blocking_updates = True + + multipliers = {0: 1e9, 1: 1e6, 2: 1e3} + selected_unit = self.range_unit.get_selected() + mult = multipliers.get(selected_unit, 1e6) + + self.from_spin.set_value(start_t * mult) + self.to_spin.set_value(end_t * mult) + + # Saner default zoom: scale so that the duration fits ~500 pixels wide + scale_unit_mult = multipliers.get(self.scale_unit.get_selected(), 1e6) + ideal_scale_val = (500.0 / duration) / scale_unit_mult + clamped_scale_val = max(0.1, min(ideal_scale_val, 1000.0)) + self.scale_spin.set_value(clamped_scale_val) + + self._blocking_updates = False + self.on_parameters_changed() self.present(self._parent) diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index d26e836..67d348c 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- from __future__ import annotations from typing import TYPE_CHECKING @@ -129,12 +128,16 @@ def __init__(self, parent: MainFrame): self._pushed_component = logic_gates[const.component_none] self._last_pw = 0 self._last_ph = 0 + self._initial_centering_done = False self.hadj.connect("changed", self._on_adjustment_changed) self.vadj.connect("changed", self._on_adjustment_changed) self.glide_duration_ms = 150 self.animation_controller = CanvasAnimationController(self) self.drag_initial_offsets = {} + def reset_initial_centering(self): + self._initial_centering_done = False + def _on_adjustment_changed(self, adj): pw = self.hadj.get_page_size() ph = self.vadj.get_page_size() @@ -142,7 +145,7 @@ def _on_adjustment_changed(self, adj): if pw != self._last_pw or ph != self._last_ph: self._last_pw = pw self._last_ph = ph - if Preference.autocenter_resize: + if not self._initial_centering_done or Preference.autocenter_resize: self.center_viewport() def center_viewport(self): @@ -159,6 +162,7 @@ def center_viewport(self): c_y = (self.height / 2) * self.zoom self.hadj.set_value(c_x - pw / 2) self.vadj.set_value(c_y - ph / 2) + self._initial_centering_done = True return False diff --git a/ggate/Exporter.py b/ggate/Exporter.py index e7a978e..637d7e8 100644 --- a/ggate/Exporter.py +++ b/ggate/Exporter.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- import cairo import os diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 4d2fe2f..401cd3b 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8; indent-tabs-mode: t; tab-width: 4 -*- import os import sys @@ -31,7 +30,7 @@ from ggate.StatusDisplay import StatusDisplay themed_icons = Gtk.IconTheme.get_for_display(Gdk.Display.get_default()) -themed_icons.add_search_path(config.DATADIR + "/images") +themed_icons.add_search_path(config.ICONDIR) TOOLTIPS = { "simulation": { @@ -340,6 +339,7 @@ def create_window(self): def create_new_buffer(self, *args): self.set_title("%s - %s" % (const.text_notitle, const.app_name)) + self.drawarea.reset_initial_centering() self.reset_frame() self.circuit.reset_circuit() self.drawarea.clear_animations() @@ -393,6 +393,7 @@ def open_file_complete(self, path): if self.circuit.open_file(path): return + self.drawarea.reset_initial_centering() self.reset_frame() self.drawarea.clear_animations() self.drawarea.zoom = 1.0 @@ -616,8 +617,6 @@ def on_action_property_pressed(self, *widget): def on_action_show_help(self, *args): Gtk.show_uri(None, const.help, Gdk.CURRENT_TIME) - # def on_action_translate_pressed(self, *args): - # webbrowser.open(const.devel_translate) def on_action_bug_pressed(self, *args): webbrowser.open(const.devel_bug) diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index 80c3b1a..ae80cc1 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -1,10 +1,9 @@ import os from gi.repository import Gtk, Gdk, GLib - -_PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +from ggate import config def _get_icon_path(icon: str): - return os.path.join(_PROJECT_ROOT, "data", "images", "actions", f"{icon}.svg") + return os.path.join(config.ICONDIR, "actions", f"{icon}.svg") menu_xml = f""" diff --git a/ggate/Themes.py b/ggate/Themes.py index b944d0e..0786da0 100644 --- a/ggate/Themes.py +++ b/ggate/Themes.py @@ -35,7 +35,7 @@ def get_pattern(self, key: str) -> cairo.SolidPattern: def init_registry(is_dev_mode: bool = False) -> None: THEME_REGISTRY.clear() - prefix = "/org/astralco/GGate/Dev/themes" if is_dev_mode else "/org/astralco/GGate/themes" + prefix = "/org/astralco/ggate/Dev/themes" if is_dev_mode else "/org/astralco/ggate/themes" try: children = Gio.resources_enumerate_children(prefix, Gio.ResourceLookupFlags.NONE) diff --git a/ggate/config.py b/ggate/config.py index 6b17029..60dd73e 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -1,12 +1,20 @@ from os import path from packaging.version import Version -DATADIR = '/'.join(__file__.split("/")[:-1]) + '/' -VERSION = "5.0.0" -APP_PREFIX = "org.astralco.GGate" +# Determine if running from source checkout (run.py is adjacent to the parent directory of this file) +_parent_dir = path.dirname(path.dirname(path.abspath(__file__))) +RUNNING_FROM_SOURCE = path.isfile(path.join(_parent_dir, "run.py")) -# True when running from a source checkout (run.py is adjacent to the ggate package) -RUNNING_FROM_SOURCE = path.isfile(path.join(path.dirname(path.dirname(__file__)), "run.py")) +if RUNNING_FROM_SOURCE: + DATADIR = path.join(_parent_dir, "data") + ICONDIR = path.join(DATADIR, "images") + APP_PREFIX = "org.astralco.ggate.Dev" +else: + DATADIR = "@pkgdatadir@" + ICONDIR = path.join(DATADIR, "icons") + APP_PREFIX = "@APP_PREFIX@" + +VERSION = "@VERSION@" compatibility = { "version": VERSION, @@ -19,3 +27,4 @@ def is_compatible(target: str) -> int: elif Version(target) > Version(compatibility["version"]): return 1 # Higher version needed return 0 + diff --git a/meson.build b/meson.build index e7bef04..cddf286 100644 --- a/meson.build +++ b/meson.build @@ -25,11 +25,11 @@ pkgdatadir = get_option('prefix') / get_option('datadir') / meson.project_name() profile = get_option('profile') if profile == 'development' - app_id = 'org.astralco.GGate.Dev' - gresource_prefix = '/org/astralco/GGate/Dev' + app_id = 'org.astralco.ggate.Dev' + gresource_prefix = '/org/astralco/ggate/Dev' elif profile == 'release' - app_id = 'org.astralco.GGate' - gresource_prefix = '/org/astralco/GGate' + app_id = 'org.astralco.ggate' + gresource_prefix = '/org/astralco/ggate' endif conf = configuration_data() @@ -37,6 +37,76 @@ conf.set('PYTHON', python.find_installation('python3').full_path()) conf.set('VERSION', meson.project_version()) conf.set('bindir', get_option('bindir')) conf.set('pkgdatadir', pkgdatadir) +conf.set('APP_PREFIX', app_id) + +# Configure and install config.py to python installation directory +configure_file( + input: 'ggate/config.py', + output: 'config.py', + configuration: conf, + install: true, + install_dir: py_installation.get_install_dir() / 'ggate' +) + +# Configure and install desktop file +desktop_conf = configuration_data() +desktop_conf.set('APP_ID', app_id) +configure_file( + input: 'data/org.astralco.ggate.desktop.in', + output: app_id + '.desktop', + configuration: desktop_conf, + install: true, + install_dir: get_option('datadir') / 'applications' +) + +# Configure and install AppStream metadata +metainfo_conf = configuration_data() +metainfo_conf.set('APP_ID', app_id) +configure_file( + input: 'data/org.astralco.ggate.metainfo.xml.in', + output: app_id + '.metainfo.xml', + configuration: metainfo_conf, + install: true, + install_dir: get_option('datadir') / 'metainfo' +) + +# Install MIME package description +install_data('data/ggate.xml', + install_dir: get_option('datadir') / 'mime' / 'packages' +) + +# Install scalable application icon (renamed to app_id) +install_data('data/images/scalable/ggate.svg', + rename: app_id + '.svg', + install_dir: get_option('datadir') / 'icons' / 'hicolor' / 'scalable' / 'apps' +) + +# Install sized application icons (renamed to app_id) +icon_sizes = ['16', '24', '32', '48', '64', '96', '128', '256', '512'] +foreach size : icon_sizes + install_data('data/images/apps' / (size + 'x' + size) / 'ggate.png', + rename: app_id + '.png', + install_dir: get_option('datadir') / 'icons' / 'hicolor' / (size + 'x' + size) / 'apps' + ) +endforeach + +# Install MIME type icons (using standard name text-glc.png) +foreach size : icon_sizes + install_data('data/images/mime' / (size + 'x' + size) / 'text-glc.png', + install_dir: get_option('datadir') / 'icons' / 'hicolor' / (size + 'x' + size) / 'mimetypes' + ) + if size in ['16', '24', '32', '48', '256'] + install_data('data/images/mime' / (size + 'x' + size) / 'text-glc.png', + install_dir: get_option('datadir') / 'icons' / 'Yaru' / (size + 'x' + size) / 'mimetypes' + ) + endif +endforeach + +# Install help manual +install_subdir('data/help/C', + install_dir: get_option('datadir') / 'help' / 'ggate', + strip_directory: false +) subdir('bin') subdir('data/images') @@ -53,11 +123,11 @@ foreach d : run_command( endif endforeach -# Install the entire ggate package recursively, excluding .pyc files +# Install the entire ggate package recursively, excluding .pyc and unconfigured config.py install_subdir('ggate', install_dir: py_installation.get_install_dir(), exclude_directories: exclude_pycache_dirs, - exclude_files: ['*.pyc'] + exclude_files: ['*.pyc', 'config.py'] ) # Update desktop/icon caches only when not building inside a sandbox (Flatpak/Snap) @@ -65,6 +135,6 @@ if not get_option('prefix').startswith('/app') and not get_option('prefix').star gnome.post_install( glib_compile_schemas: true, gtk_update_icon_cache: true, - update_desktop_database: true, + update_desktop_database: find_program('update-desktop-database', required: false).found(), ) endif \ No newline at end of file diff --git a/run.py b/run.py index 1ea0f5a..cf2cfe1 100755 --- a/run.py +++ b/run.py @@ -58,10 +58,10 @@ def build_dev_resources(): xml_content = ( "\n" "\n" - " \n" + " \n" + "\n".join(icon_lines) + "\n \n" - " \n" + " \n" + "\n".join(theme_lines) + "\n \n" "\n" diff --git a/setup.py b/setup.py deleted file mode 100644 index cc0eedc..0000000 --- a/setup.py +++ /dev/null @@ -1,134 +0,0 @@ -import os -from setuptools import setup -import pathlib -import ggate - -here = pathlib.Path(__file__).parent -help_translations = [] -translations = [] -pkg_name = 'ggate' -base = 'data/help' -help_files = [] - -os.chdir(here) - -for root, folders, files in os.walk(base): - for folder in folders: - if root+'/'+folder not in help_translations: - help_translations.append(root+'/'+folder) - if root == base: - for folder in folders: - translations.append(folder) - -for folder in help_translations: - if folder.split('/')[1] in translations: - parts = list(folder.split('/')) - parts.insert(2, pkg_name) - parts = ['share'] + parts - fd = "/".join(parts) - help_files.append((fd, [folder+'/'+x for x in os.listdir(folder) if os.path.isfile(folder+'/'+x)])) - -icons = { - "apps": { - '16': ['data/images/apps/16x16/ggate.png'], - '32': ['data/images/apps/32x32/ggate.png'], - '24': ['data/images/apps/24x24/ggate.png'], - '48': ['data/images/apps/48x48/ggate.png'], - '256': ['data/images/apps/256x256/ggate.png'], - - '64': ['data/images/apps/64x64/ggate.png'], - '96': ['data/images/apps/96x96/ggate.png'], - '128':['data/images/apps/128x128/ggate.png'], - '512': ['data/images/apps/512x512/ggate.png'] - }, - "scalable": ['data/images/scalable/ggate.svg'], - "mime": { - '16': ['data/images/mime/16x16/text-glc.png'], - '32': ['data/images/mime/32x32/text-glc.png'], - '24': ['data/images/mime/24x24/text-glc.png'], - '48': ['data/images/mime/48x48/text-glc.png'], - '256': ['data/images/mime/256x256/text-glc.png'], - - '64': ['data/images/mime/64x64/text-glc.png'], - '96': ['data/images/mime/96x96/text-glc.png'], - '128':['data/images/mime/128x128/text-glc.png'], - '512': ['data/images/mime/512x512/text-glc.png'] - } -} - -mime_sizes = { - 'yaru': ['16', '32', '24', '48', '256'] -} - -mimes = [] -for sizes in icons['mime'].keys(): - mimes.append((f'share/icons/hicolor/{sizes}x{sizes}/mimetypes', icons['mime'][sizes])) - if sizes in mime_sizes['yaru']: - mimes.append((f'share/icons/Yaru/{sizes}x{sizes}/mimetypes', icons['mime'][sizes])) - -apps = [] -for sizes in icons['apps'].keys(): - apps.append((f'share/icons/hicolor/{sizes}x{sizes}/apps', icons['apps'][sizes])) - -os.system(f'chmod +777 {here}/data/org.astralco.GGate.desktop') -os.system(f'chmod +777 {here}/bin/ggate') - -setup( - name="ggate", - version=ggate.__version__, - author="Koichi Akabe ", - author_email='vbkaisetsu@gmail.com', - maintainer='Ekure Edem', - maintainer_email="ekureedem480@gmail.com", - description='A logic gate simulator for linux developed with Gtk and python', - long_description=str(open('README.md').read()), - long_description_content_type="text/markdown", - license="GPL v3", - keywords="logic circuit simulation simulate gates computers buffers", - python_requires=">=3", - scripts=['bin/ggate'], - packages=['ggate', 'ggate.Components'], - package_data={ - 'ggate': [ - 'images/ggate.ico', - 'images/add-net.png', - 'images/ggate.png', - 'images/add-component.png', - 'images/components', - 'images/ggate-small.ico', - 'images/components/piso.png', - 'images/components/siso.png', - 'images/components/gnd.png', - 'images/components/dff.png', - 'images/components/tribuff.png', - 'images/components/or.png', - 'images/components/osc.png', - 'images/components/vdd.png', - 'images/components/probe.png', - 'images/components/and.png', - 'images/components/rsff.png', - 'images/components/counter.png', - 'images/components/text.png', - 'images/components/led.png', - 'images/components/sipo.png', - 'images/components/nand.png', - 'images/components/7seg.png', - 'images/components/pipo.png', - 'images/components/not.png', - 'images/components/tff.png', - 'images/components/nor.png', - 'images/components/jkff.png', - 'images/components/adder.png', - 'images/components/xor.png', - 'images/components/sw.png' - ] - }, - data_files=[ - *help_files, - *mimes, - *apps, - ("share/applications", ["data/org.astralco.GGate.desktop"]), - ("share/mime/packages", ["data/ggate.xml"]), - ("share/icons/hicolor/scalable/apps", icons["scalable"]), - ] -) From fdcc7ae858ef4e38ad4d19be9fde62bf34a92722 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 02:46:16 +0100 Subject: [PATCH 33/37] feat: integrate themed component icon set and fix icon loading Add hand-drawn ANSI/IEC component SVGs with a gresource->freedesktop icon-theme layout, register the resource path at startup, and switch the component palette and context menu to icon-name lookups. Fixes the broken-icon regression caused by a duplicate do_startup that dropped the icon resource path, and renders palette icons at full pixel size. Co-Authored-By: agy (Antigravity/Gemini) --- .agents/TODO.md | 10 +- build-aux/generate-resources-xml.py | 66 ++ data/examples/mixed.glc | 365 +++++++++ data/examples/timing_polish_verify.glc | 71 ++ data/images/actions/flip-horizontal.svg | 9 +- data/images/actions/flip-vertical.svg | 8 +- data/images/components/7seg.svg | 16 +- data/images/components/adder.svg | 9 +- data/images/components/and-iec.svg | 7 + data/images/components/and.png | Bin 317 -> 0 bytes data/images/components/and.svg | 13 +- data/images/components/counter.svg | 9 +- data/images/components/dff.svg | 13 +- data/images/components/gnd.svg | 16 +- data/images/components/jkff.svg | 14 +- data/images/components/led.png | Bin 515 -> 0 bytes data/images/components/led.svg | 5 + data/images/components/nand-iec.svg | 8 + data/images/components/nand.svg | 20 +- data/images/components/nor-iec.svg | 8 + data/images/components/nor.svg | 14 +- data/images/components/not-iec.svg | 7 + data/images/components/not.png | Bin 505 -> 0 bytes data/images/components/not.svg | 6 + data/images/components/or-iec.svg | 7 + data/images/components/or.png | Bin 431 -> 0 bytes data/images/components/or.svg | 15 +- data/images/components/osc.png | Bin 300 -> 0 bytes data/images/components/osc.svg | 5 + data/images/components/pipo.svg | 9 +- data/images/components/piso.svg | 9 +- data/images/components/probe.png | Bin 706 -> 0 bytes data/images/components/probe.svg | 5 + data/images/components/rsff.svg | 12 +- data/images/components/sipo.svg | 9 +- data/images/components/siso.svg | 10 +- data/images/components/spec.md | 178 ++++ data/images/components/sw.png | Bin 660 -> 0 bytes data/images/components/sw.svg | 7 + data/images/components/text.png | Bin 422 -> 0 bytes data/images/components/text.svg | 758 +----------------- data/images/components/tff.svg | 11 +- data/images/components/tribuff.png | Bin 489 -> 0 bytes data/images/components/tribuff.svg | 6 + data/images/components/vdd.png | Bin 329 -> 0 bytes data/images/components/vdd.svg | 5 + data/images/components/xor-iec.svg | 7 + data/images/components/xor.png | Bin 479 -> 0 bytes data/images/components/xor.svg | 7 + data/images/index.theme | 19 + data/images/meson.build | 33 +- data/images/resources.xml.in | 9 - ggate/ComponentView.py | 21 +- .../LogicGates/Counters/PIPOShiftRegister.py | 2 +- ggate/Components/Windows/Preferences.py | 2 + ggate/MainFrame.py | 6 + ggate/MenuPopover.py | 14 +- ggate/config.py | 4 +- run.py | 45 +- scripts/generate-resources-xml.py | 49 ++ 60 files changed, 1022 insertions(+), 936 deletions(-) create mode 100755 build-aux/generate-resources-xml.py create mode 100644 data/examples/mixed.glc create mode 100644 data/examples/timing_polish_verify.glc create mode 100644 data/images/components/and-iec.svg delete mode 100644 data/images/components/and.png delete mode 100644 data/images/components/led.png create mode 100644 data/images/components/led.svg create mode 100644 data/images/components/nand-iec.svg create mode 100644 data/images/components/nor-iec.svg create mode 100644 data/images/components/not-iec.svg delete mode 100644 data/images/components/not.png create mode 100644 data/images/components/not.svg create mode 100644 data/images/components/or-iec.svg delete mode 100644 data/images/components/or.png delete mode 100644 data/images/components/osc.png create mode 100644 data/images/components/osc.svg delete mode 100644 data/images/components/probe.png create mode 100644 data/images/components/probe.svg create mode 100644 data/images/components/spec.md delete mode 100644 data/images/components/sw.png create mode 100644 data/images/components/sw.svg delete mode 100644 data/images/components/text.png delete mode 100644 data/images/components/tribuff.png create mode 100644 data/images/components/tribuff.svg delete mode 100644 data/images/components/vdd.png create mode 100644 data/images/components/vdd.svg create mode 100644 data/images/components/xor-iec.svg delete mode 100644 data/images/components/xor.png create mode 100644 data/images/components/xor.svg create mode 100644 data/images/index.theme delete mode 100644 data/images/resources.xml.in create mode 100755 scripts/generate-resources-xml.py diff --git a/.agents/TODO.md b/.agents/TODO.md index 6d4f4f4..6cc7388 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -18,13 +18,13 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie ## P2 — icons & dead code -- [ ] **Icon system** (plan: `plans/icon-creation.md`). Integrate hand-drawn, accurate, straight-to-the-point +- [x] **Icon system** (plan: `plans/icon-creation.md`). Integrate hand-drawn, accurate, straight-to-the-point SVG files for each component with useful curves in two variants (ANSI and IEC). Set up gresource→freedesktop layout with aliases (using the dynamic-glob+`alias` pattern from theming), call `IconTheme.add_resource_path` at startup, switch `ComponentView`/`MenuPopover` from filesystem paths to icon-name lookups, and delete `_get_icon_path`. **(BLOCKER for installed runs: `ComponentView`/`MenuPopover` still use `__file__`/`DATADIR` filesystem icon paths.)** -- [ ] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ +- [x] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ actions/` with components misfiled there too (double "actions" / misfile). Tidy into a clean freedesktop layout, dev + installed in sync. @@ -32,13 +32,13 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie ## Build & packaging -- [ ] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` draws the clock trigger bubble at - the `SL` coordinate (`outpin_b + 20`) instead of `CK` (`outpin_b + 40`). (Found during icon recon.) +- [x] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` draws the clock trigger bubble at + the `CK` coordinate (`outpin_b + 40`) instead of `SL` (`outpin_b + 20`). - [x] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths — must keep the dev `run.py` path working (no meson step in dev). - [x] **Desktop file + AppStream install via meson** — confirm meson installs the (renamed) desktop/metadata, not just legacy `setup.py`. -- [ ] **Unify dev vs installed resource source** — dev XML is generated by `run.py`, installed +- [x] **Unify dev vs installed resource source** — dev XML is generated by `run.py`, installed by `resources.xml.in` + meson glob; consider a single shared generator so they can't diverge. - [ ] **Flatpak** — decouple pip deps from network (`flatpak-pip-generator`) for offline build. - [ ] **Snapcraft** — remove remote `curl|python3` scripts; drop hardcoded prefix. diff --git a/build-aux/generate-resources-xml.py b/build-aux/generate-resources-xml.py new file mode 100755 index 0000000..995e72f --- /dev/null +++ b/build-aux/generate-resources-xml.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +import os +import glob +import sys +import argparse + +def main(): + parser = argparse.ArgumentParser(description="Generate GResource XML file dynamically") + parser.add_argument("--prefix", required=True, help="GResource prefix") + parser.add_argument("--output", required=True, help="Output XML file path") + parser.add_argument("--source-dir", required=True, help="Source data/images directory") + args = parser.parse_args() + + # Base directory is data/images + images_dir = os.path.abspath(args.source_dir) + # Project data dir is parent of images_dir (which is data/) + data_dir = os.path.dirname(images_dir) + + comp_files = sorted(glob.glob(os.path.join(images_dir, "components", "*.svg"))) + act_files = sorted(glob.glob(os.path.join(images_dir, "actions", "*.svg"))) + theme_files = sorted(glob.glob(os.path.join(data_dir, "themes", "*.json"))) + + lines = [] + lines.append('') + lines.append('') + lines.append(f' ') + + # Add components and actions (relative to images_dir) mapped to standard icon paths + # Collect all component file base names (without extension) + comp_basenames = {os.path.splitext(os.path.basename(f))[0] for f in comp_files} + + for f in comp_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + basename = os.path.basename(f) + name_no_ext = os.path.splitext(basename)[0] + if name_no_ext.endswith("-iec"): + base_name = name_no_ext[:-4] + lines.append(f' {rel}') + else: + lines.append(f' {rel}') + if f"{name_no_ext}-iec" not in comp_basenames: + lines.append(f' {rel}') + for f in act_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + basename = os.path.basename(f) + name_no_ext = os.path.splitext(basename)[0] + lines.append(f' {rel}') + + # Add themes (alias is basename, path relative to images_dir) + for f in theme_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + basename = os.path.basename(f) + lines.append(f' {rel}') + + # Add index.theme + if os.path.exists(os.path.join(images_dir, "index.theme")): + lines.append(' index.theme') + + lines.append(' ') + lines.append('') + + with open(args.output, "w", encoding="utf-8") as f: + f.write("\n".join(lines) + "\n") + +if __name__ == "__main__": + main() diff --git a/data/examples/mixed.glc b/data/examples/mixed.glc new file mode 100644 index 0000000..d98a98a --- /dev/null +++ b/data/examples/mixed.glc @@ -0,0 +1,365 @@ +version + author=5.0.0 + required=2.6.0 + +sw + position=100,100 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:1 + +sw + position=100,200 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=initstate:0 + +osc + position=100,300 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=period:2.0,shift:0.0,duration:200.0,initstate:0 + +not + position=250,200 + input_level=0 + output_level=1 + matrix=1,0,0,1 + properties=tphl:0.0,tplh:0.0 + +and + position=250,300 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +xor + position=400,150 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +or + position=550,150 + input_level=0,0 + output_level=0 + matrix=1,0,0,1 + properties=inputs:2,tphl:0.0,tplh:0.0 + +counter + position=700,300 + input_level=0,0 + output_level=0,0,0,0 + matrix=1,0,0,1 + properties=n:16,bits:4,trig:0,tphl:0.0,tplh:0.0 + +7seg + position=950,300 + input_level=0,0,0,0 + output_level= + matrix=1,0,0,1 + properties=_red:2 + +siso + position=700,450 + input_level=0,0 + output_level=0,1 + matrix=1,0,0,1 + properties=bits:4,trig:0,tphl:0.0,tplh:0.0 + +led + position=950,440 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=_red:2 + +dff + position=700,570 + input_level=0,0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +led + position=950,560 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=_red:2 + +jkff + position=700,700 + input_level=0,0,0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=700,800 + input_level=0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +rsff + position=700,900 + input_level=0,0 + output_level=0,1 + matrix=1,0,0,1 + properties=tphl:0.0,tplh:0.0 + +probe + position=950,80 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:CLK_0 + +probe + position=950,140 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:ECLK_0 + +probe + position=950,200 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:RST_0 + +probe + position=950,350 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:CNT_Q0_0 + +probe + position=950,700 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:JK_Q_0 + +probe + position=950,800 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:T_Q_0 + +probe + position=950,900 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:RS_Q_0 + +net + position=170,280,200,280 + +net + position=200,70,200,280 + +net + position=200,280,200,290 + +net + position=200,290,260,290 + +net + position=200,70,960,70 + +net + position=170,80,202,80 + +net + position=202,80,202,270 + +net + position=202,270,260,270 + +net + position=170,180,210,180 + +net + position=210,180,210,190 + +net + position=210,190,210,690 + +net + position=210,690,210,870 + +net + position=210,180,260,180 + +net + position=210,690,710,690 + +net + position=210,870,710,870 + +net + position=210,190,960,190 + +net + position=340,180,370,180 + +net + position=370,140,370,180 + +net + position=370,180,370,270 + +net + position=370,140,410,140 + +net + position=370,270,710,270 + +net + position=350,280,380,280 + +net + position=380,120,380,130 + +net + position=380,130,380,250 + +net + position=380,250,380,280 + +net + position=380,280,380,440 + +net + position=380,440,380,560 + +net + position=380,560,380,670 + +net + position=380,670,380,780 + +net + position=380,120,410,120 + +net + position=380,120,560,120 + +net + position=380,250,710,250 + +net + position=380,440,710,440 + +net + position=380,560,710,560 + +net + position=380,670,710,670 + +net + position=380,780,710,780 + +net + position=380,130,960,130 + +net + position=500,130,520,130 + +net + position=520,130,520,140 + +net + position=520,140,560,140 + +net + position=650,130,670,130 + +net + position=670,130,670,420 + +net + position=670,420,670,540 + +net + position=670,540,670,650 + +net + position=670,650,670,890 + +net + position=670,420,710,420 + +net + position=670,540,710,540 + +net + position=670,650,710,650 + +net + position=670,890,710,890 + +net + position=820,230,850,230 + +net + position=850,230,850,340 + +net + position=850,230,960,230 + +net + position=850,340,960,340 + +net + position=820,250,960,250 + +net + position=820,270,960,270 + +net + position=820,290,960,290 + +net + position=820,420,960,420 + +net + position=810,540,960,540 + +net + position=810,650,860,650 + +net + position=860,650,860,690 + +net + position=860,690,960,690 + +net + position=810,770,870,770 + +net + position=870,770,870,790 + +net + position=870,790,960,790 + +net + position=800,870,880,870 + +net + position=880,870,880,890 + +net + position=880,890,960,890 \ No newline at end of file diff --git a/data/examples/timing_polish_verify.glc b/data/examples/timing_polish_verify.glc new file mode 100644 index 0000000..ba5c351 --- /dev/null +++ b/data/examples/timing_polish_verify.glc @@ -0,0 +1,71 @@ +version + author=5.0.0 + required=2.6.0 + +osc + position=340,260 + input_level= + output_level=0 + matrix=1,0,0,1 + properties=period:5.0,shift:0.0,duration:160.0,initstate:0 + +tff + position=420,260 + input_level=0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=540,250 + input_level=0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +tff + position=660,240 + input_level=0 + output_level=0,1 + matrix=1,0,0,1 + properties=trig:0,tphl:0.0,tplh:0.0 + +probe + position=420,250 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:CLK + +probe + position=540,240 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:Q0 + +probe + position=660,230 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:Q1 + +probe + position=780,220 + input_level=0 + output_level= + matrix=1,0,0,1 + properties=name:Q2 + +net + position=410,240,430,240 + +net + position=530,230,550,230 + +net + position=650,220,670,220 + +net + position=770,210,790,210 diff --git a/data/images/actions/flip-horizontal.svg b/data/images/actions/flip-horizontal.svg index 63e1570..a6a6be2 100644 --- a/data/images/actions/flip-horizontal.svg +++ b/data/images/actions/flip-horizontal.svg @@ -1,7 +1,4 @@ - - - - - + + + \ No newline at end of file diff --git a/data/images/actions/flip-vertical.svg b/data/images/actions/flip-vertical.svg index 8da1d53..2192a27 100644 --- a/data/images/actions/flip-vertical.svg +++ b/data/images/actions/flip-vertical.svg @@ -1,6 +1,4 @@ - - - - - + + + \ No newline at end of file diff --git a/data/images/components/7seg.svg b/data/images/components/7seg.svg index 458f450..5bc0e77 100644 --- a/data/images/components/7seg.svg +++ b/data/images/components/7seg.svg @@ -1,3 +1,15 @@ - - + + + + + + + + + + + + + + diff --git a/data/images/components/adder.svg b/data/images/components/adder.svg index 3546429..b7f8758 100644 --- a/data/images/components/adder.svg +++ b/data/images/components/adder.svg @@ -1,3 +1,8 @@ - - + + + + + + + Σ diff --git a/data/images/components/and-iec.svg b/data/images/components/and-iec.svg new file mode 100644 index 0000000..ebfdd59 --- /dev/null +++ b/data/images/components/and-iec.svg @@ -0,0 +1,7 @@ + + + + + + & + diff --git a/data/images/components/and.png b/data/images/components/and.png deleted file mode 100644 index 6f922ace371b66e7dc5ac92a9da35ad12bb24fe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;>1s;*b zK=s!_n9)gNb_Gz7y~NYkmHiH*D6gFLJlVZK^$ce`T^vI^j=!B^$aTm;z;(akOSfrH z7&PAoJr%kpr!XP-slZCzHLSYDjcge`MMoiZy({X7THi z39q_m5zB^xcMsemr^&cpT()+?^CaaC7A6M+??v3tW76 z>w~j};EGjTjshp{-&R^{njX2VBjfM89qs#{i0{w%|5jh>r?OrrTgq+4&5wM5{$lWS L^>bP0l+XkK)}Vi2 diff --git a/data/images/components/and.svg b/data/images/components/and.svg index 507ba60..d257666 100644 --- a/data/images/components/and.svg +++ b/data/images/components/and.svg @@ -1,9 +1,6 @@ - - - - - - - - + + + + + diff --git a/data/images/components/counter.svg b/data/images/components/counter.svg index 2b417f1..098f848 100644 --- a/data/images/components/counter.svg +++ b/data/images/components/counter.svg @@ -1,3 +1,8 @@ - - + + + + + + + CTR diff --git a/data/images/components/dff.svg b/data/images/components/dff.svg index 17dc71f..16015ee 100644 --- a/data/images/components/dff.svg +++ b/data/images/components/dff.svg @@ -1,4 +1,11 @@ - - - + + + + + + + + D + Q + ~Q diff --git a/data/images/components/gnd.svg b/data/images/components/gnd.svg index a700794..6866eac 100644 --- a/data/images/components/gnd.svg +++ b/data/images/components/gnd.svg @@ -1,12 +1,6 @@ - - - - - - - - - - - + + + + + diff --git a/data/images/components/jkff.svg b/data/images/components/jkff.svg index d8a8409..424deac 100644 --- a/data/images/components/jkff.svg +++ b/data/images/components/jkff.svg @@ -1,3 +1,13 @@ - - + + + + + + + + + J + K + Q + ~Q diff --git a/data/images/components/led.png b/data/images/components/led.png deleted file mode 100644 index ce093eca8fe471f2c556b5be50d759e4d69dd54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmV+e0{s1nP)1a~2H%aDLm2Fc=QaO)Q+Zc-^F;Na%uCKW$`6htIzgn(Tg z3U$*#aMM8qTLWUQQ>FDUqAtZB+;Ydu!+ZDK0XJ@38agMU(P#kR?x4UqR4SE~q9`8# z_^SwnVMw-Z&lzJ+dj*G1QBjmv0Q|`UhG8I;O2M{msH(co zXEGTyn@y}%D-cn{G);{$_88gt_EFO5G#F#hb$zQAkH?WnBrq5ZP$(3nFbtog0JsgC z9;8~W!Y~YoqPWi`;5ZJsTyFj&a1y$%!?LWMwefh2(P)IpWD*XC!}sNK`Lb7_*XyC( zZUX=`O$)UK63Mbm zmSvHqX + + + + diff --git a/data/images/components/nand-iec.svg b/data/images/components/nand-iec.svg new file mode 100644 index 0000000..39f2b32 --- /dev/null +++ b/data/images/components/nand-iec.svg @@ -0,0 +1,8 @@ + + + + + + + & + diff --git a/data/images/components/nand.svg b/data/images/components/nand.svg index c12cbdf..41817f2 100644 --- a/data/images/components/nand.svg +++ b/data/images/components/nand.svg @@ -1,15 +1,7 @@ - - - - - - - - - - - - - - + + + + + + diff --git a/data/images/components/nor-iec.svg b/data/images/components/nor-iec.svg new file mode 100644 index 0000000..bbe5660 --- /dev/null +++ b/data/images/components/nor-iec.svg @@ -0,0 +1,8 @@ + + + + + + + ≥1 + diff --git a/data/images/components/nor.svg b/data/images/components/nor.svg index 3b79a0d..3e5c030 100644 --- a/data/images/components/nor.svg +++ b/data/images/components/nor.svg @@ -1,9 +1,7 @@ - - - - - - - - + + + + + + diff --git a/data/images/components/not-iec.svg b/data/images/components/not-iec.svg new file mode 100644 index 0000000..d819be1 --- /dev/null +++ b/data/images/components/not-iec.svg @@ -0,0 +1,7 @@ + + + + + + 1 + diff --git a/data/images/components/not.png b/data/images/components/not.png deleted file mode 100644 index 9898061cd0abdd4f7fe4ae6a7cb3b8e94db65af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmVU2jT!4RmBg;C)thWn>VO%oC7L-zl0H!~2 z1M+=8@;vXxvaC%2hIRuYqF%2@rBdmRbAAqBO}haRky46+Ac#5Vk?Xqq0G6~G%o&fz zRIAmdjIoJr+YJDYR)aZ%!GJ22%AM=FR{*wN>{%2-oY=M<2_cRF6uxCJr`zpPKA*qO zWHLtpR)r9!&1Q2ZrKCoqG0SGNN3R6m##b1PMpP&ilxdn_GMSu8DW9J+kw`pinNMl> zGCo8pg-)kK#bR+HrQD0-c*XO)vsSC6!Z1X;-Htiu#~ch5OL08rLi$<=B# vbR6dzz=rl-WEjQ+V{8XN`cKS*e?H|A$D~BQi( + + + + + diff --git a/data/images/components/or-iec.svg b/data/images/components/or-iec.svg new file mode 100644 index 0000000..6e4ff94 --- /dev/null +++ b/data/images/components/or-iec.svg @@ -0,0 +1,7 @@ + + + + + + ≥1 + diff --git a/data/images/components/or.png b/data/images/components/or.png deleted file mode 100644 index bcef64e4da03327c3cc3071f8e1281d7c587e2a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431 zcmV;g0Z{&lP)YU6vn@s+(ma5>TUQ?;;A0d*UCi!g5kv?$6f@MJ zkfoF)Bq1dpSBKVWTIgVYaF#QikMH~gT3U96t;t=es`@O1;GFZ7s;ZTuC@aR;dzNL7 zRaM;scm+^5R@HU=ZZH@W^ZA^jD55Y7$@hI44u_RxS&3m79{{d)adxU{S{}zSts@8m z>UO)CX_{jIC)c zn9XKL(-hO`6qCthH5!e|#bU8clH>-!xXCX%XN - - - - - - - - - + + + + + diff --git a/data/images/components/osc.png b/data/images/components/osc.png deleted file mode 100644 index fc1796239b990c4174ed568e7bae8740bcc72ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;>1s;*b zK=s!_n9)gNb_Gz7y~NYkmHiHrAP0xa!4@rkpwMnl7sn8f<8P-Jay1)Bxb2_Ru|lB# z!oq0w{s*;HO?@->I`}=lrYutaK7iXPc>lViP9c9{yZD(N#>-WzFqW06Jeaj~>pR9d zO--g2&+k>vyU)17m*ud*2A$J-o|9hd9JDxiWsb`2ZK=~z{TZG|HmUx$T + + + + diff --git a/data/images/components/pipo.svg b/data/images/components/pipo.svg index c42a309..695b6b8 100644 --- a/data/images/components/pipo.svg +++ b/data/images/components/pipo.svg @@ -1,3 +1,8 @@ - - + + + + + + + PIPO diff --git a/data/images/components/piso.svg b/data/images/components/piso.svg index 74a0e2e..3111e88 100644 --- a/data/images/components/piso.svg +++ b/data/images/components/piso.svg @@ -1,3 +1,8 @@ - - + + + + + + + PISO diff --git a/data/images/components/probe.png b/data/images/components/probe.png deleted file mode 100644 index 0c1cd83c701f64961443041b24e64fa37230b7e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmV;z0zLhSP);OM7om&1K-8=i`Ur(SL7$ z#@L5+I(>bgT&Gg0>p&oIGAq}sUbN?&^Ea|AZwMg}kH^;lpxf<^Ow*KzsCRjJSq1R^ of1J!60PA=DHvr9LC-d>!Z?{{xL + + + + diff --git a/data/images/components/rsff.svg b/data/images/components/rsff.svg index d5315d7..50bfe32 100644 --- a/data/images/components/rsff.svg +++ b/data/images/components/rsff.svg @@ -1,3 +1,11 @@ - - + + + + + + + S + R + Q + ~Q diff --git a/data/images/components/sipo.svg b/data/images/components/sipo.svg index ab19515..6ecae46 100644 --- a/data/images/components/sipo.svg +++ b/data/images/components/sipo.svg @@ -1,3 +1,8 @@ - - + + + + + + + SIPO diff --git a/data/images/components/siso.svg b/data/images/components/siso.svg index d4e3403..bdad68c 100644 --- a/data/images/components/siso.svg +++ b/data/images/components/siso.svg @@ -1,4 +1,8 @@ - - - + + + + + + + SISO diff --git a/data/images/components/spec.md b/data/images/components/spec.md new file mode 100644 index 0000000..90f5605 --- /dev/null +++ b/data/images/components/spec.md @@ -0,0 +1,178 @@ +# GGate Component SVG Icon Specification + +This document defines the visual design system and technical specifications for all component SVG icons in GGate. Following these specifications ensures visual consistency, crisp pixel alignment, and native Libadwaita theme compatibility (automatic light/dark mode recoloring). + +--- + +## 1. Technical Requirements + +1. **ViewBox Grid:** All component icons must use exactly `viewBox="0 0 28 28"`. +2. **Stroke/Fill Rules:** + - Standard stroke width: `2px`. + - Element stroke: `stroke="currentColor"`. + - Element fill: `fill="none"` by default (or `fill="currentColor"` for solid indicator shapes/bubbles). + - Inversion bubbles: `circle` elements with a radius of `2px` or `2.5px`, `fill="none"` or `fill="currentColor"`. +3. **Corner Treatment:** All strokes should use `stroke-linejoin="round"` and `stroke-linecap="round"` to ensure smooth connections. +4. **Theme Recoloring:** Never use hardcoded hex colors (e.g. `#000`, `#1a1a1a`, `#ffffff`) or inline CSS `style` attributes. GTK4 recolors SVG paths dynamically using `currentColor`. +5. **Text Labels:** Use the `` element: + - Font family: `sans-serif` (or monospace where appropriate). + - Font size: `5px` to `6px`. + - Font weight: `bold` for main component keys. + - Text color: `fill="currentColor"`. + - Alignment: Use `text-anchor="middle"` or `text-anchor="end"` for precise positioning. + +--- + +## 2. Component Design Specifications + +### A. Logic Gates + +All standard gates occupy a horizontal span centered at `y = 14`. Input pins enter from `x = 1`, and output pins exit to `x = 27`. + +#### 1. `and.svg` +- **Body:** Back line from `(9, 6)` to `(9, 22)`. Top flat line to `(16, 6)`. Bottom flat line to `(16, 22)`. Front semi-circle centered at `(16, 14)` with radius `8`. +- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to `x = 9`. +- **Output:** One line at `y = 14` from `x = 24` to `x = 27`. + +#### 2. `or.svg` +- **Body:** Curved back `M 9,6 C 12,10 12,18 9,22`. Top edge `M 9,6 C 14,6 20,9 24,14`. Bottom edge `M 9,22 C 14,22 20,19 24,14`. +- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to the back curve (approx `x = 10`). +- **Output:** One line at `y = 14` from `x = 24` to `x = 27`. + +#### 3. `not.svg` +- **Body:** Right-pointing triangle with vertices `(7, 6)`, `(7, 22)`, and `(18, 14)`. +- **Inversion Bubble:** Circle centered at `(21, 14)` with radius `2.5`. +- **Input:** Line at `y = 14` from `x = 1` to `x = 7`. +- **Output:** Line at `y = 14` from `x = 23.5` to `x = 27`. + +#### 4. `xor.svg` +- **Body:** Same top, bottom, and back curves as `or.svg`. Additional back-offset curve `M 6,6 C 9,10 9,18 6,22`. +- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to the first curve (approx `x = 7.5`). +- **Output:** One line at `y = 14` from `x = 24` to `x = 27`. + +#### 5. `nand.svg` +- **Body & Inputs:** Same as `and.svg`. +- **Inversion Bubble:** Circle centered at `(25, 14)` with radius `2`. +- **Output:** Line at `y = 14` from `x = 27` to the bubble. + +#### 6. `nor.svg` +- **Body & Inputs:** Same as `or.svg`. +- **Inversion Bubble:** Circle centered at `(25, 14)` with radius `2`. +- **Output:** Line at `y = 14` from `x = 27` to the bubble. + +#### 7. `tribuff.svg` (Tri-State Buffer) +- **Body:** Right-pointing triangle with vertices `(7, 6)`, `(7, 22)`, and `(19, 14)`. +- **Inputs:** Data input line at `y = 14` from `x = 1` to `x = 7`. Control input line from `(13, 1)` to the top of the body `(13, 10)`. +- **Output:** Line at `y = 14` from `x = 19` to `x = 27`. + +--- + +### B. Flip-Flops & Sequential Components + +Flip-flops and block components use a centered rectangular frame, typically of size `16x20` (from `x = 6` to `x = 22` and `y = 4` to `y = 24`). + +#### 8. `rsff.svg` +- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. +- **Inputs:** `S` input at `y = 8` from `x = 1` to `x = 6`. `R` input at `y = 20` from `x = 1` to `x = 6`. +- **Outputs:** `Q` output at `y = 8` from `x = 22` to `x = 27`. `~Q` output at `y = 20` from `x = 22` to `x = 27`. +- **Labels:** + - `S` at `(8, 10)` + - `R` at `(8, 22)` + - `Q` at `(20, 10)` (anchor: end) + - `Q̅` at `(20, 22)` (anchor: end) + +#### 9. `jkff.svg` +- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. +- **Inputs:** `J` input at `y = 8`. `CK` input at `y = 14`. `K` input at `y = 20`. +- **Clock Triangle:** Inward-pointing wedge `M 6,11 L 9,14 L 6,17`. +- **Outputs:** `Q` output at `y = 8`. `~Q` output at `y = 20`. +- **Labels:** + - `J` at `(8, 10)` + - `K` at `(8, 22)` + - `Q` at `(20, 10)` (anchor: end) + - `Q̅` at `(20, 22)` (anchor: end) + +#### 10. `dff.svg` +- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. +- **Inputs:** `D` input at `y = 8`. `CK` input at `y = 20`. +- **Clock Triangle:** Inward-pointing wedge `M 6,17 L 9,20 L 6,23`. +- **Outputs:** `Q` output at `y = 8`. `~Q` output at `y = 20`. +- **Labels:** + - `D` at `(8, 10)` + - `Q` at `(20, 10)` (anchor: end) + - `Q̅` at `(20, 22)` (anchor: end) + +#### 11. `tff.svg` +- **Body & Outputs:** Same as `dff.svg`. +- **Inputs:** Clock input at `y = 14`. +- **Clock Triangle:** Inward-pointing wedge `M 6,11 L 9,14 L 6,17`. +- **Labels:** + - `T` centered at `(14, 17)` (larger font size). + - `Q` at `(20, 10)` (anchor: end) + - `Q̅` at `(20, 22)` (anchor: end) + +--- + +### C. Registers & Complex Block Components + +Registers use a wider rectangular box `18x20` (from `x = 5` to `x = 23` and `y = 4` to `y = 24`) and centered text labels. + +#### 12. `7seg.svg` (Seven-Segment Display) +- **Body:** Outer rectangular frame `rect x="6" y="3" width="16" height="22" rx="1.5" ry="1.5"`. +- **Digit Segments:** Seven individual `line` elements of width `2px` with a flat `butt` linecap, separated by 1px gaps, forming the digit "8". +- **Decimal Point:** A filled circle `circle cx="20.5" cy="23" r="1"`. + +#### 13. `counter.svg` (Mod-N Counter) +- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. +- **Labels:** Center-aligned text `"CTR"` at `(14, 14)`. + +#### 14. `adder.svg` (Arithmetic Adder) +- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. +- **Labels:** Center-aligned text `"\u03a3"` (Sigma symbol) at `(14, 14)` with large font size. + +#### 15. `siso.svg`, `sipo.svg`, `piso.svg`, `pipo.svg` +- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. +- **Labels:** Center-aligned text (e.g. `"SISO"`, `"SIPO"`, `"PISO"`, `"PIPO"`) at `(14, 14)`. + +--- + +### D. Input, Output & Infrastructure Components + +#### 16. `sw.svg` (Switch) +- Lever switch symbol: + - Input connection dot: `circle cx="6" cy="14" r="1.5"`. + - Output connection dot: `circle cx="22" cy="14" r="1.5"`. + - Input stub: `line x1="1" y1="14" x2="6" y2="14"`. + - Lever: `line x1="6" y1="14" x2="20" y2="6"`. + - Output stub: `line x1="22" y1="14" x2="27" y2="14"`. + +#### 17. `led.svg` (LED Indicator) +- **Body:** Rectangular frame `rect x="9" y="5" width="18" height="18" rx="1.5" ry="1.5"`. +- **Emitter Circle:** Centered at `(18, 14)` with radius `4.5`. +- **Input Stub:** Line at `y = 14` from `x = 1` to `x = 9`. + +#### 18. `vdd.svg` (Power Source) +- Upward-pointing arrow: + - Vertical connection line from `(14, 27)` to `(14, 6)`. + - Arrow head lines: `M 8,12 L 14,6 L 20,12`. + - Text label `"Vdd"` starting at `(17, 18)` (to the right of the vertical line). + +#### 19. `gnd.svg` (Ground) +- Ground schematic symbol: + - Vertical connection line from `(14, 1)` to `(14, 14)`. + - First bar: `line x1="5" y1="14" x2="23" y2="14"`. + - Second bar: `line x1="9" y1="18" x2="19" y2="18"`. + - Third bar: `line x1="13" y1="22" x2="15" y2="22"`. + +#### 20. `osc.svg` (Clock Oscillator) +- Rectangular enclosure: `rect x="3" y="5" width="22" height="18" rx="3"`. +- Enclosed square wave path: `M 6,17 L 10,17 L 10,11 L 15,11 L 15,17 L 19,17 L 19,11 L 22,11`. + +#### 21. `probe.svg` (Voltage Probe) +- Outer indicator circle: `circle cx="16" cy="14" r="8"`. +- Center active probe dot: `circle cx="16" cy="14" r="2.5" fill="currentColor"`. +- Probe lead stub: `line x1="1" y1="14" x2="8" y2="14"`. + +#### 22. `text.svg` (Text Box Label) +- Letter icon: + - Stylized uppercase text letter `"A"` centered at `(14, 19)` with a font size of `18px`, `font-family="serif"`, and `font-weight="bold"`. diff --git a/data/images/components/sw.png b/data/images/components/sw.png deleted file mode 100644 index c7c3e16aa60e4a02d5f61c146827e4874170f06a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmV;F0&D$=P)DEC45s?eraM@IF5gaTI$&!+(N1)N z#5r@IK|&NRmj-dXNyYJMNkek?y4WL0?H^E=;t$^N`*`pB@%`TW9`J$}JO$`65ekLA z19vrio-SiEucKxw$zAf)M0!9EbV& z`G7AkFQZzmzETvWHfvRAlC)Yac%Fyd-Cby!7MzQs2*wz0Zf*bojIk*J0LW&u{PFSe z>$9`7kAuOW^56?}T}LbyLn@WR&dv^cy&eESk|Z$3kWQzO$z&i1!Y=|G$DvRtNWSkE zC#P&mAR3Lrwr!M3C7hm~VtsubmzS52Wf??-PN#!zw+qknAW71cfaiHI4CBuC{SN@R zpTW;IWpQy4`FtLhWnnlRqS0tTQ53Y>ZK$dWRaJ3*ehyidr|J$44#tk-bVs9+`P(L2 zmIcEwaB^~jqoX7Ez7I{)u(Y%U+qSX2y^YPyP4xSHL?V%(?&9JC#bR;jy6(GsYaSlc zX0u80c$^j%7ATQOP`O+tBBFY|P8`S4_4PH~-rf?=^Hi(Vh=^!B9@EOo%2z=U-apGn ut5hl@S(ZQFd;avhh%xrpUG#$g96tbBJj-pDw{_qE0000 + + + + + + diff --git a/data/images/components/text.png b/data/images/components/text.png deleted file mode 100644 index fd4bd0842b4525f5198a5d1f387fde9a82c61a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP) - - -CRSSIPO + + A + diff --git a/data/images/components/tff.svg b/data/images/components/tff.svg index a280198..7a48624 100644 --- a/data/images/components/tff.svg +++ b/data/images/components/tff.svg @@ -1,3 +1,10 @@ - - + + + + + + + T + Q + ~Q diff --git a/data/images/components/tribuff.png b/data/images/components/tribuff.png deleted file mode 100644 index a9e06f07e2f8606438e05387ca24721803a3a4e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVP)kmxrj+^XFwD#Qwoy zsjIs$1(sm_jP9){YscB&}+IGR@)*MidtLvL$ zU?lVgmKA8Uf8|l$hC!gcGTGtjUcIkXlt4 zR|8~nx#Hr|vas7*jzQ}Em2o8?8ru_2r{@vOVQTm$zLmq#k?9{8E`YQEST!^Llz9lu fZFMmI*I&{*x-iu<^o@JH00000NkvXXu0mjfG@02; diff --git a/data/images/components/tribuff.svg b/data/images/components/tribuff.svg new file mode 100644 index 0000000..f91fc32 --- /dev/null +++ b/data/images/components/tribuff.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/images/components/vdd.png b/data/images/components/vdd.png deleted file mode 100644 index 1637ca4934ca051e7beb84fc54a0c7a9d244960f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;>1s;*b zK=s!_n9)gNb_Gz7y~NYkmHiH*1c#ON>=3t$K%pC+E{-7{$KPJr>&5ISa`a<-%akOC zrd*vjmsYxRZ9FCXq%h|a>l$6*nhpmp?m!-~ta}Hn1Uw#c&$w|X>1NG_6!X?Z{+JoY z%-_$?*~!zsD!oSKk9AymX33Vs|J>pm*DaXI^o(uK!Zx;Zg*}B61+RYS_PfHg{6(VN zhRvpRu2XdY2F(d!d&vz08e1HA!$&5S_A2P$sf%6A@gFRQa W#Z7Mw%lkk-GI+ZBxvXVOdd diff --git a/data/images/components/vdd.svg b/data/images/components/vdd.svg new file mode 100644 index 0000000..8d52f39 --- /dev/null +++ b/data/images/components/vdd.svg @@ -0,0 +1,5 @@ + + + + Vdd + diff --git a/data/images/components/xor-iec.svg b/data/images/components/xor-iec.svg new file mode 100644 index 0000000..dfb2189 --- /dev/null +++ b/data/images/components/xor-iec.svg @@ -0,0 +1,7 @@ + + + + + + =1 + diff --git a/data/images/components/xor.png b/data/images/components/xor.png deleted file mode 100644 index fbfa6ea0704fe7e21b23615d6aeafb7f47b1fe2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)F-M#1e8t#TVxCnuglEpQfyX_VsB!7T7xVU9;=vK!_r~VCr5Qp|~ zbu%r95O4_15QjiOLP(Cggx2xOjwr(^Ux>~I! z*=%;~y6zpY|38jSfivKP<2d19Fwl?T`@YWQa)IZ0OqWZB=O6gjy_MqnwhM}%h zDv|5DSHSurE`9^Mz?VXyFw#$url~F#i;?GfzZMbr0UQBanM@|s&k)D4&gb)il=9%E z0^fiWV9hX$RKEb<_qF3V(VTWK-@%*DV5wX5=67Jt + + + + + + diff --git a/data/images/index.theme b/data/images/index.theme new file mode 100644 index 0000000..479776c --- /dev/null +++ b/data/images/index.theme @@ -0,0 +1,19 @@ +[Icon Theme] +Name=Hicolor +Comment=Fallback icon theme +Hidden=true +Directories=scalable/actions,scalable/devices + +[scalable/actions] +Size=16 +MinSize=8 +MaxSize=512 +Context=Actions +Type=Scalable + +[scalable/devices] +Size=16 +MinSize=8 +MaxSize=512 +Context=Devices +Type=Scalable diff --git a/data/images/meson.build b/data/images/meson.build index 8b18fb2..35c9651 100644 --- a/data/images/meson.build +++ b/data/images/meson.build @@ -19,34 +19,15 @@ icon_files = [ 'actions/rotate-right.svg', ] -icon_files_xml = [] -foreach file: icon_files - icon_files_xml += '' + file + '' -endforeach - -# Collect theme JSON filenames from ../themes/ to bundle into the gresource -theme_files_list = run_command( - 'sh', '-c', 'for f in "$0"/*.json; do [ -e "$f" ] && basename "$f"; done', - meson.project_source_root() / 'data/themes', - check: true -).stdout().strip().split('\n') - -theme_files_xml = [] -foreach basename: theme_files_list - if basename != '' - # alias keeps the resource path clean (/); disk path is ../themes via source_dir - theme_files_xml += 'themes/' + basename + '' - endif -endforeach - resources_xml = configure_file( - input: 'resources.xml.in', output: 'resources.xml', - configuration: { - 'ICON_FILES': '\n '.join(icon_files_xml), - 'THEME_FILES': '\n '.join(theme_files_xml), - 'PREFIX': gresource_prefix, - } + command: [ + py_installation, + meson.project_source_root() / 'build-aux/generate-resources-xml.py', + '--prefix', gresource_prefix, + '--output', '@OUTPUT@', + '--source-dir', meson.current_source_dir() + ] ) ggate_resources = gnome.compile_resources( diff --git a/data/images/resources.xml.in b/data/images/resources.xml.in deleted file mode 100644 index a2cd6c5..0000000 --- a/data/images/resources.xml.in +++ /dev/null @@ -1,9 +0,0 @@ - - - - @ICON_FILES@ - - - @THEME_FILES@ - - diff --git a/ggate/ComponentView.py b/ggate/ComponentView.py index b6599cd..36827f7 100644 --- a/ggate/ComponentView.py +++ b/ggate/ComponentView.py @@ -1,17 +1,12 @@ -import os -from ggate import config +from ggate import config, Preference from ggate.Components.LogicGates.SystemComponents import BaseComponent from ggate.const import definitions from gettext import gettext as _ from gi.repository import Gtk, GdkPixbuf, GObject -def _get_icon_path(icon: str): - svg_path = os.path.join(config.ICONDIR, "components", f"{icon}.svg") - png_path = os.path.join(config.ICONDIR, "components", f"{icon}.png") - return svg_path if os.path.exists(svg_path) else png_path - class ComponentViewListBoxRow(Gtk.ListBoxRow): type = BaseComponent + icon = None class ComponentView(Gtk.Box): __gsignals__ = { @@ -110,10 +105,10 @@ def __init__(self): content_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=4) content_box.set_valign(Gtk.Align.CENTER) - icon = Gtk.Image.new_from_file(_get_icon_path(gate)) + icon = Gtk.Image() icon.set_margin_end(4) icon.set_margin_start(4) - icon.set_size_request(24, 24) + icon.set_pixel_size(22) label = Gtk.Label(label=str(gate).upper()) label.add_css_class("subtitle") @@ -123,6 +118,7 @@ def __init__(self): # Setup row gate_row.type = gate + gate_row.icon = icon gate_row.set_child(content_box) gate_row.set_activatable(True) @@ -132,6 +128,13 @@ def __init__(self): self.category_groups.append((group_label, lb, group_rows)) + self.refresh_icons() + + def refresh_icons(self): + suffix = "-iec" if Preference.symbol_type == 1 else "" + for row in self.components: + row.icon.set_from_icon_name(f"gate-{row.type}{suffix}-symbolic") + def set_all_sensitive(self, state, *args): [row.set_sensitive(bool(state)) for row in self.components] diff --git a/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py b/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py index 39578df..dc284c3 100644 --- a/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py +++ b/ggate/Components/LogicGates/Counters/PIPOShiftRegister.py @@ -51,7 +51,7 @@ def propertyChanged(self, prop): def drawComponent(self, cr, layout): cr.rectangle(30, self.comp_rect[1], 70, self.comp_rect[3] - self.comp_rect[1]) if self.values[1] == 1: - cr.arc(25, self.outpin_b + 20, 5, 0, 2 * math.pi) + cr.arc(25, self.outpin_b + 40, 5, 0, 2 * math.pi) cairo_paths(cr, (30, self.outpin_b + 35), (40, self.outpin_b + 40), (30, self.outpin_b + 45)) cr.stroke() cairo_draw_text(cr, layout, "PIPO", 65, self.comp_rect[1] + 10, 0.5, 0.5) diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 2a0967d..8ac3ac0 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -230,6 +230,8 @@ def _on_font_changed(self, button, pspec): def _on_symbol_type_changed(self, row, pspec): Preference.symbol_type = row.get_selected() Preference.save_settings() + if self.main_frame and hasattr(self.main_frame, "comp_window"): + self.main_frame.comp_window.refresh_icons() self._trigger_canvas_redraw() def _on_color_changed(self, button, pspec, key): diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index 401cd3b..f23f3bf 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -718,6 +718,12 @@ def on_show_shortcut(self, *args): def do_startup(self, *args): Adw.Application.do_startup(self) + display = Gdk.Display.get_default() + if display: + theme = Gtk.IconTheme.get_for_display(display) + resource_prefix = "/org/astralco/ggate/Dev/hicolor" if config.RUNNING_FROM_SOURCE else "/org/astralco/ggate/hicolor" + theme.add_resource_path(resource_prefix) + # New File Pressed action = Gio.SimpleAction.new("on_action_new_pressed", None) action.connect("activate", self.action_handler("on_action_new_pressed")) diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index ae80cc1..6ed3c6b 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -1,11 +1,7 @@ -import os from gi.repository import Gtk, Gdk, GLib from ggate import config -def _get_icon_path(icon: str): - return os.path.join(config.ICONDIR, "actions", f"{icon}.svg") - -menu_xml = f""" +menu_xml = """
@@ -13,22 +9,22 @@ def _get_icon_path(icon: str): Flip Horizontally menu.flip_hori - {_get_icon_path("flip-horizontal")} + flip-horizontal-symbolic Flip Vertically menu.flip_verti - {_get_icon_path("flip-vertical")} + flip-vertical-symbolic Rotate Left menu.rot_left - {_get_icon_path("rotate-left")} + rotate-left-symbolic Rotate right menu.rot_right - {_get_icon_path("rotate-right")} + rotate-right-symbolic
diff --git a/ggate/config.py b/ggate/config.py index 60dd73e..bfd4823 100644 --- a/ggate/config.py +++ b/ggate/config.py @@ -9,12 +9,12 @@ DATADIR = path.join(_parent_dir, "data") ICONDIR = path.join(DATADIR, "images") APP_PREFIX = "org.astralco.ggate.Dev" + VERSION = "5.0.0" else: DATADIR = "@pkgdatadir@" ICONDIR = path.join(DATADIR, "icons") APP_PREFIX = "@APP_PREFIX@" - -VERSION = "@VERSION@" + VERSION = "@VERSION@" compatibility = { "version": VERSION, diff --git a/run.py b/run.py index cf2cfe1..d6ec44d 100755 --- a/run.py +++ b/run.py @@ -31,46 +31,23 @@ def build_dev_resources(): - import glob base = os.path.dirname(os.path.abspath(__file__)) images_dir = os.path.join(base, "data", "images") xml = os.path.join(images_dir, "dev-resources.xml") target = os.path.join(base, "dev-resources.gresource") - comp_files = sorted(glob.glob(os.path.join(images_dir, "components", "*.svg"))) - act_files = sorted(glob.glob(os.path.join(images_dir, "actions", "*.svg"))) - theme_files = sorted(glob.glob(os.path.join(base, "data", "themes", "*.json"))) - - icon_lines = [] - for f in comp_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - icon_lines.append(f" {rel}") - for f in act_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - icon_lines.append(f" {rel}") - - theme_lines = [] - for f in theme_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - basename = os.path.basename(f) - theme_lines.append(f" {rel}") - - xml_content = ( - "\n" - "\n" - " \n" - + "\n".join(icon_lines) - + "\n \n" - " \n" - + "\n".join(theme_lines) - + "\n \n" - "\n" - ) - try: - with open(xml, "w", encoding="utf-8") as f: - f.write(xml_content) - except OSError: + subprocess.run( + [ + sys.executable, + os.path.join(base, "build-aux", "generate-resources-xml.py"), + "--prefix", "/org/astralco/ggate/Dev", + "--output", xml, + "--source-dir", images_dir, + ], + check=True, + ) + except (OSError, subprocess.CalledProcessError): pass try: diff --git a/scripts/generate-resources-xml.py b/scripts/generate-resources-xml.py new file mode 100755 index 0000000..e710fc8 --- /dev/null +++ b/scripts/generate-resources-xml.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import os +import glob +import sys +import argparse + +def main(): + parser = argparse.ArgumentParser(description="Generate GResource XML file dynamically") + parser.add_argument("--prefix", required=True, help="GResource prefix") + parser.add_argument("--output", required=True, help="Output XML file path") + parser.add_argument("--source-dir", required=True, help="Source data/images directory") + args = parser.parse_args() + + # Base directory is data/images + images_dir = os.path.abspath(args.source_dir) + # Project data dir is parent of images_dir (which is data/) + data_dir = os.path.dirname(images_dir) + + comp_files = sorted(glob.glob(os.path.join(images_dir, "components", "*.svg"))) + act_files = sorted(glob.glob(os.path.join(images_dir, "actions", "*.svg"))) + theme_files = sorted(glob.glob(os.path.join(data_dir, "themes", "*.json"))) + + lines = [] + lines.append('') + lines.append('') + lines.append(f' ') + + # Add components and actions (relative to images_dir) + for f in comp_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + lines.append(f' {rel}') + for f in act_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + lines.append(f' {rel}') + + # Add themes (alias is basename, path relative to images_dir) + for f in theme_files: + rel = os.path.relpath(f, images_dir).replace("\\", "/") + basename = os.path.basename(f) + lines.append(f' {rel}') + + lines.append(' ') + lines.append('') + + with open(args.output, "w", encoding="utf-8") as f: + f.write("\n".join(lines) + "\n") + +if __name__ == "__main__": + main() From 8818c61c8ff1cb5d2384905d4c40f123465d366d Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 15:26:54 +0100 Subject: [PATCH 34/37] chore: asset updates --- .agents/TODO.md | 5 +++++ data/images/actions/flip-horizontal.svg | 6 ++++-- data/images/actions/flip-vertical.svg | 6 ++++-- data/images/actions/rotate-left.svg | 8 ++++---- data/images/actions/rotate-right.svg | 7 +++---- data/images/components/7seg.svg | 23 +++++++++-------------- data/images/components/adder.svg | 4 +++- data/images/components/counter.svg | 3 ++- data/images/components/dff.svg | 6 ++---- data/images/components/jkff.svg | 8 +++----- data/images/components/pipo.svg | 15 ++++++++++----- data/images/components/piso.svg | 13 ++++++++----- data/images/components/rsff.svg | 9 +++++---- data/images/components/sipo.svg | 13 ++++++++----- data/images/components/siso.svg | 11 ++++++----- data/images/components/text.svg | 3 ++- data/images/components/tff.svg | 6 ++---- data/images/components/vdd.svg | 6 +++--- ggate/MenuPopover.py | 8 ++++---- 19 files changed, 87 insertions(+), 73 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index 6cc7388..1c47b58 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -47,6 +47,11 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie ## P3 — feature backlog - [ ] Animate logic circuit during simulation. +- [ ] **Real-time (human-paced) simulation playback.** Add a mode that advances the sim in + wall-clock time (human seconds, not instant settle) so wires/components are seen toggling + live — net colors and component states switching at a watchable rate. Needs a clock that + maps sim-time→real-time with a speed control, driving incremental redraws. Pairs with the + "animate logic circuit during simulation" item above. - [ ] Auto-scroll the timing diagram to follow the latest timestamp while running (deferred from the timing plan §6 Q1). diff --git a/data/images/actions/flip-horizontal.svg b/data/images/actions/flip-horizontal.svg index a6a6be2..3d51541 100644 --- a/data/images/actions/flip-horizontal.svg +++ b/data/images/actions/flip-horizontal.svg @@ -1,4 +1,6 @@ - - + + + + \ No newline at end of file diff --git a/data/images/actions/flip-vertical.svg b/data/images/actions/flip-vertical.svg index 2192a27..5bf7368 100644 --- a/data/images/actions/flip-vertical.svg +++ b/data/images/actions/flip-vertical.svg @@ -1,4 +1,6 @@ - - + + + + \ No newline at end of file diff --git a/data/images/actions/rotate-left.svg b/data/images/actions/rotate-left.svg index 23b9ab1..c901d95 100644 --- a/data/images/actions/rotate-left.svg +++ b/data/images/actions/rotate-left.svg @@ -1,4 +1,4 @@ - - - - \ No newline at end of file + + + + diff --git a/data/images/actions/rotate-right.svg b/data/images/actions/rotate-right.svg index b94b045..29abcb6 100644 --- a/data/images/actions/rotate-right.svg +++ b/data/images/actions/rotate-right.svg @@ -1,5 +1,4 @@ - - - - \ No newline at end of file + + + diff --git a/data/images/components/7seg.svg b/data/images/components/7seg.svg index 5bc0e77..ba2c3aa 100644 --- a/data/images/components/7seg.svg +++ b/data/images/components/7seg.svg @@ -1,15 +1,10 @@ - - - - - - - - - - - - - - + + + + + + + + + diff --git a/data/images/components/adder.svg b/data/images/components/adder.svg index b7f8758..8976284 100644 --- a/data/images/components/adder.svg +++ b/data/images/components/adder.svg @@ -4,5 +4,7 @@ - Σ + + + diff --git a/data/images/components/counter.svg b/data/images/components/counter.svg index 098f848..63d0d90 100644 --- a/data/images/components/counter.svg +++ b/data/images/components/counter.svg @@ -4,5 +4,6 @@ - CTR + + diff --git a/data/images/components/dff.svg b/data/images/components/dff.svg index 16015ee..9b462c4 100644 --- a/data/images/components/dff.svg +++ b/data/images/components/dff.svg @@ -2,10 +2,8 @@ - + - D - Q - ~Q + D diff --git a/data/images/components/jkff.svg b/data/images/components/jkff.svg index 424deac..edfac08 100644 --- a/data/images/components/jkff.svg +++ b/data/images/components/jkff.svg @@ -2,12 +2,10 @@ - + - J - K - Q - ~Q + + diff --git a/data/images/components/pipo.svg b/data/images/components/pipo.svg index 695b6b8..046800d 100644 --- a/data/images/components/pipo.svg +++ b/data/images/components/pipo.svg @@ -1,8 +1,13 @@ - - - - - PIPO + + + + + + + + + + diff --git a/data/images/components/piso.svg b/data/images/components/piso.svg index 3111e88..65103b0 100644 --- a/data/images/components/piso.svg +++ b/data/images/components/piso.svg @@ -1,8 +1,11 @@ - - - - - PISO + + + + + + + + diff --git a/data/images/components/rsff.svg b/data/images/components/rsff.svg index 50bfe32..e36f92c 100644 --- a/data/images/components/rsff.svg +++ b/data/images/components/rsff.svg @@ -1,11 +1,12 @@ + + - S - R - Q - ~Q + + + diff --git a/data/images/components/sipo.svg b/data/images/components/sipo.svg index 6ecae46..662010a 100644 --- a/data/images/components/sipo.svg +++ b/data/images/components/sipo.svg @@ -1,8 +1,11 @@ - - - - - SIPO + + + + + + + + diff --git a/data/images/components/siso.svg b/data/images/components/siso.svg index bdad68c..e175979 100644 --- a/data/images/components/siso.svg +++ b/data/images/components/siso.svg @@ -1,8 +1,9 @@ - - - - - SISO + + + + + + diff --git a/data/images/components/text.svg b/data/images/components/text.svg index de7ff8e..c64248c 100644 --- a/data/images/components/text.svg +++ b/data/images/components/text.svg @@ -1,3 +1,4 @@ - A + + diff --git a/data/images/components/tff.svg b/data/images/components/tff.svg index 7a48624..e1db7e4 100644 --- a/data/images/components/tff.svg +++ b/data/images/components/tff.svg @@ -1,10 +1,8 @@ - + - T - Q - ~Q + T diff --git a/data/images/components/vdd.svg b/data/images/components/vdd.svg index 8d52f39..a9e719f 100644 --- a/data/images/components/vdd.svg +++ b/data/images/components/vdd.svg @@ -1,5 +1,5 @@ - - - Vdd + + + diff --git a/ggate/MenuPopover.py b/ggate/MenuPopover.py index 6ed3c6b..dcd1b52 100644 --- a/ggate/MenuPopover.py +++ b/ggate/MenuPopover.py @@ -9,22 +9,22 @@ Flip Horizontally menu.flip_hori - flip-horizontal-symbolic + flip-horizontal-symbolic Flip Vertically menu.flip_verti - flip-vertical-symbolic + flip-vertical-symbolic Rotate Left menu.rot_left - rotate-left-symbolic + rotate-left-symbolic Rotate right menu.rot_right - rotate-right-symbolic + rotate-right-symbolic
From f9304cbdf46d81f38f6d9311fae7e5110b9903d2 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 15:56:17 +0100 Subject: [PATCH 35/37] feat: improve animation computing on circuit manager + icon spec update --- .agents/TODO.md | 16 ++ data/images/components/spec.md | 253 ++++++++++++------------ ggate/CircuitManager.py | 83 +++++--- ggate/Components/Windows/Preferences.py | 18 ++ ggate/MainFrame.py | 11 +- ggate/Preference.py | 1 + 6 files changed, 220 insertions(+), 162 deletions(-) diff --git a/.agents/TODO.md b/.agents/TODO.md index 1c47b58..c2aff28 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -52,6 +52,22 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie live — net colors and component states switching at a watchable rate. Needs a clock that maps sim-time→real-time with a speed control, driving incremental redraws. Pairs with the "animate logic circuit during simulation" item above. + - **Architecture (decided):** *record-then-play*, not compute-and-trail. Phase 1 computes + the full timeline at engine speed (existing `_run_sim_sync` path — already records history + via `_record_state`/output_stacks). Phase 2 is a separate `timeout_add` "player" that walks + the **recorded frames** (not the generator), restoring each frame's levels + emitting + `currenttime-changed` + redrawing. This decouples compute speed from playback cadence. + - **Pacing:** target a fixed playback *duration*, not a fixed per-frame delay: + `interval = target_duration / frame_count`, clamped to a ≥16ms floor; subsample frames when + the timeline is too long to hold the target. (So 1s compute → e.g. 30s playback over data + already in memory.) + - ⚠️ Supersedes the current uncommitted `CircuitManager.py` attempt, which throttles the + *engine* to 30 steps/sec. See `.agents/reviews/circuitmanager-sim-animation-review.md`. +- [ ] **Sleek playback control bar (bottom).** When a simulation has started, surface a slim + transport control along the bottom of the canvas: play/pause, step, scrub/seek through the + recorded timeline, current-time readout, and a speed control. Driven by the record-then-play + player above. HIG: keep it minimal/overlayed and auto-hide when no sim is active. Cite + `.agents/skills/designing-gnome-ui` + relevant `.agents/gtk4/` pages on the UI delegation. - [ ] Auto-scroll the timing diagram to follow the latest timestamp while running (deferred from the timing plan §6 Q1). diff --git a/data/images/components/spec.md b/data/images/components/spec.md index 90f5605..5e951df 100644 --- a/data/images/components/spec.md +++ b/data/images/components/spec.md @@ -6,173 +6,164 @@ This document defines the visual design system and technical specifications for ## 1. Technical Requirements -1. **ViewBox Grid:** All component icons must use exactly `viewBox="0 0 28 28"`. +1. **ViewBox Grid:** All component icons must use exactly `viewBox="0 0 28 28"`. No `width` or `height` attributes on ``. 2. **Stroke/Fill Rules:** - - Standard stroke width: `2px`. + - Standard stroke width: `2px`. Secondary detail lines may use `1.5px`. Bold cross-lines (e.g. adder "+") may use `2.5px`. - Element stroke: `stroke="currentColor"`. - - Element fill: `fill="none"` by default (or `fill="currentColor"` for solid indicator shapes/bubbles). - - Inversion bubbles: `circle` elements with a radius of `2px` or `2.5px`, `fill="none"` or `fill="currentColor"`. -3. **Corner Treatment:** All strokes should use `stroke-linejoin="round"` and `stroke-linecap="round"` to ensure smooth connections. -4. **Theme Recoloring:** Never use hardcoded hex colors (e.g. `#000`, `#1a1a1a`, `#ffffff`) or inline CSS `style` attributes. GTK4 recolors SVG paths dynamically using `currentColor`. -5. **Text Labels:** Use the `` element: - - Font family: `sans-serif` (or monospace where appropriate). - - Font size: `5px` to `6px`. - - Font weight: `bold` for main component keys. - - Text color: `fill="currentColor"`. - - Alignment: Use `text-anchor="middle"` or `text-anchor="end"` for precise positioning. + - Element fill: `fill="none"` by default; `fill="currentColor"` only for solid dots/indicators/inversion bubbles. +3. **Corner Treatment:** All strokes use `stroke-linejoin="round"` and `stroke-linecap="round"`. Use `stroke-linecap="butt"` only on seven-segment display segments where clean rectangular ends are required. +4. **Theme Recoloring:** Never use hardcoded hex colors (`#000`, `#fff`, etc.) or inline `style=` attributes. GTK4 recolors dynamically using `currentColor`. +5. **Pictorial Glyphs — No Tiny Text Labels:** The sidebar already displays each component's name as a text label next to the icon. Icons must NOT attempt to spell out the part name in small text. All icons use pictorial line-art glyphs. Avoid `` elements with `font-size` below `~10px` — they are illegible at 22px display size. The only permitted `` elements are large single-letter glyphs (e.g. `font-size="11"` for "D" or "T" in flip-flops, `font-size="18"` for "A" in text.svg). +6. **Allowed Elements:** ``, ``, ``, ``, ``. Keep markup minimal. --- -## 2. Component Design Specifications +## 2. Body Dimensions (enforce consistency) + +| Component class | Body rect | Pin stub length | +|-----------------|-----------|-----------------| +| Flip-flops (dff, jkff, rsff, tff) | `x=6 y=4 width=16 height=20 rx=1` | 5 units (`x=1`→`x=6` in; `x=22`→`x=27` out) | +| Block components (adder, counter, siso/sipo/piso/pipo) | `x=5 y=4 width=18 height=20 rx=1` | 4 units (`x=1`→`x=5` in; `x=23`→`x=27` out) | +| 7seg display | `x=8 y=3 width=16 height=22 rx=1.5` | 7 units (`x=1`→`x=8`) | + +--- + +## 3. Component Design Specifications ### A. Logic Gates -All standard gates occupy a horizontal span centered at `y = 14`. Input pins enter from `x = 1`, and output pins exit to `x = 27`. +All standard gates occupy a horizontal span centered at `y = 14`. Input pins enter from `x = 1`, output pins exit to `x = 27`. #### 1. `and.svg` -- **Body:** Back line from `(9, 6)` to `(9, 22)`. Top flat line to `(16, 6)`. Bottom flat line to `(16, 22)`. Front semi-circle centered at `(16, 14)` with radius `8`. +- **Body:** Back line from `(9, 6)` to `(9, 22)`. Top/bottom flat lines to `(16, 6)` / `(16, 22)`. Front semi-circle centered at `(16, 14)` radius `8`. - **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to `x = 9`. - **Output:** One line at `y = 14` from `x = 24` to `x = 27`. #### 2. `or.svg` -- **Body:** Curved back `M 9,6 C 12,10 12,18 9,22`. Top edge `M 9,6 C 14,6 20,9 24,14`. Bottom edge `M 9,22 C 14,22 20,19 24,14`. -- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to the back curve (approx `x = 10`). +- **Body:** Curved back `M 9,6 C 12,10 12,18 9,22`. Top/bottom curves meeting at `(24, 14)`. +- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to ~`x = 10.5`. - **Output:** One line at `y = 14` from `x = 24` to `x = 27`. #### 3. `not.svg` -- **Body:** Right-pointing triangle with vertices `(7, 6)`, `(7, 22)`, and `(18, 14)`. -- **Inversion Bubble:** Circle centered at `(21, 14)` with radius `2.5`. -- **Input:** Line at `y = 14` from `x = 1` to `x = 7`. -- **Output:** Line at `y = 14` from `x = 23.5` to `x = 27`. +- **Body:** Right-pointing triangle vertices `(7, 6)`, `(7, 22)`, `(18, 14)`. +- **Inversion Bubble:** `circle cx="21" cy="14" r="2.5"`. +- **Input:** `y = 14` from `x = 1` to `x = 7`. +- **Output:** `y = 14` from `x = 23.5` to `x = 27`. #### 4. `xor.svg` -- **Body:** Same top, bottom, and back curves as `or.svg`. Additional back-offset curve `M 6,6 C 9,10 9,18 6,22`. -- **Inputs:** Two lines at `y = 10` and `y = 18` from `x = 1` to the first curve (approx `x = 7.5`). -- **Output:** One line at `y = 14` from `x = 24` to `x = 27`. +- Same as `or.svg` plus extra back-offset curve `M 6,6 C 9,10 9,18 6,22`. Inputs shorten to ~`x = 7.5`. #### 5. `nand.svg` -- **Body & Inputs:** Same as `and.svg`. -- **Inversion Bubble:** Circle centered at `(25, 14)` with radius `2`. -- **Output:** Line at `y = 14` from `x = 27` to the bubble. +- Same body as `and.svg` (shifted left by 1). Inversion bubble `circle cx="24.5" cy="14" r="1.5"`. #### 6. `nor.svg` -- **Body & Inputs:** Same as `or.svg`. -- **Inversion Bubble:** Circle centered at `(25, 14)` with radius `2`. -- **Output:** Line at `y = 14` from `x = 27` to the bubble. +- Same body as `or.svg` (shifted left by 1). Inversion bubble `circle cx="24.5" cy="14" r="1.5"`. #### 7. `tribuff.svg` (Tri-State Buffer) -- **Body:** Right-pointing triangle with vertices `(7, 6)`, `(7, 22)`, and `(19, 14)`. -- **Inputs:** Data input line at `y = 14` from `x = 1` to `x = 7`. Control input line from `(13, 1)` to the top of the body `(13, 10)`. -- **Output:** Line at `y = 14` from `x = 19` to `x = 27`. +- **Body:** Right-pointing triangle `(7, 6)`, `(7, 22)`, `(19, 14)`. +- **Inputs:** Data at `y = 14` from `x = 1`; control from `(13, 1)` to `(13, 10)`. +- **Output:** `y = 14` from `x = 19` to `x = 27`. --- -### B. Flip-Flops & Sequential Components - -Flip-flops and block components use a centered rectangular frame, typically of size `16x20` (from `x = 6` to `x = 22` and `y = 4` to `y = 24`). - -#### 8. `rsff.svg` -- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. -- **Inputs:** `S` input at `y = 8` from `x = 1` to `x = 6`. `R` input at `y = 20` from `x = 1` to `x = 6`. -- **Outputs:** `Q` output at `y = 8` from `x = 22` to `x = 27`. `~Q` output at `y = 20` from `x = 22` to `x = 27`. -- **Labels:** - - `S` at `(8, 10)` - - `R` at `(8, 22)` - - `Q` at `(20, 10)` (anchor: end) - - `Q̅` at `(20, 22)` (anchor: end) - -#### 9. `jkff.svg` -- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. -- **Inputs:** `J` input at `y = 8`. `CK` input at `y = 14`. `K` input at `y = 20`. -- **Clock Triangle:** Inward-pointing wedge `M 6,11 L 9,14 L 6,17`. -- **Outputs:** `Q` output at `y = 8`. `~Q` output at `y = 20`. -- **Labels:** - - `J` at `(8, 10)` - - `K` at `(8, 22)` - - `Q` at `(20, 10)` (anchor: end) - - `Q̅` at `(20, 22)` (anchor: end) - -#### 10. `dff.svg` -- **Body:** Rectangular frame `rect x="6" y="4" width="16" height="20" rx="1" ry="1"`. -- **Inputs:** `D` input at `y = 8`. `CK` input at `y = 20`. -- **Clock Triangle:** Inward-pointing wedge `M 6,17 L 9,20 L 6,23`. -- **Outputs:** `Q` output at `y = 8`. `~Q` output at `y = 20`. -- **Labels:** - - `D` at `(8, 10)` - - `Q` at `(20, 10)` (anchor: end) - - `Q̅` at `(20, 22)` (anchor: end) - -#### 11. `tff.svg` -- **Body & Outputs:** Same as `dff.svg`. -- **Inputs:** Clock input at `y = 14`. -- **Clock Triangle:** Inward-pointing wedge `M 6,11 L 9,14 L 6,17`. -- **Labels:** - - `T` centered at `(14, 17)` (larger font size). - - `Q` at `(20, 10)` (anchor: end) - - `Q̅` at `(20, 22)` (anchor: end) +### B. Flip-Flops + +All flip-flops use body `rect x="6" y="4" width="16" height="20" rx="1"`. Input stubs run from `x=1` to `x=6`; output stubs from `x=22` to `x=27`. Clock-edge triangles point inward from the left wall. The combination of pin count, clock triangle position, and interior glyph distinguishes each type. Sidebar text labels provide the definitive name. + +#### 8. `dff.svg` — D Flip-Flop +- **Inputs:** D at `y = 8`; clock at `y = 20`. +- **Clock triangle:** `M 6,17 L 9,20 L 6,23` (at bottom-left, matching the clock pin at `y=20`). +- **Outputs:** Q at `y = 8`; ~Q at `y = 20`. +- **Interior glyph:** Large `"D"` centered at `(14, 18)`. + +#### 9. `jkff.svg` — JK Flip-Flop +- **Inputs:** J at `y = 8`; clock at `y = 14`; K at `y = 20`. Three left stubs. +- **Clock triangle:** `M 6,11 L 9,14 L 6,17` (at middle-left). +- **Outputs:** Q at `y = 8`; ~Q at `y = 20`. +- **Interior glyph:** Filled dot `circle r="1.5" fill="currentColor"` on the J pin (`cx=7 cy=8`) and K pin (`cx=7 cy=20`) — visually marks the two data inputs without text. + +#### 10. `rsff.svg` — RS Flip-Flop (latch) +- **Inputs:** S at `y = 8`; R at `y = 20`. Two left stubs, no clock triangle. +- **Outputs:** Q at `y = 8`; ~Q at `y = 20`. +- **Interior glyph:** Two diagonal lines `M 10,9 L 18,14` and `M 10,19 L 18,14` (`stroke-width="1.5"`) converging rightward — suggests cross-coupled NOR/NAND latch structure. + +#### 11. `tff.svg` — T Flip-Flop +- **Inputs:** Clock at `y = 14` only. One left stub. +- **Clock triangle:** `M 6,11 L 9,14 L 6,17` (at middle-left). +- **Outputs:** Q at `y = 8`; ~Q at `y = 20`. +- **Interior glyph:** Large `"T"` centered at `(15, 18)`. --- -### C. Registers & Complex Block Components +### C. Block Components + +All use body `rect x="5" y="4" width="18" height="20" rx="1"`. Pins at `x=1`/`x=27` with 4-unit stubs. + +#### 12. `adder.svg` — Arithmetic Adder +- **Pins:** 2 inputs (`y = 9`, `y = 19`); 2 outputs (`y = 9`, `y = 19`). +- **Interior glyph:** Bold "+" — vertical `line x1="14" y1="8" x2="14" y2="20"` and horizontal `line x1="8" y1="14" x2="20" y2="14"`, both `stroke-width="2.5"`. + +#### 13. `counter.svg` — Mod-N Counter +- **Pins:** 2 inputs (`y = 9`, `y = 19`); 2 outputs (`y = 9`, `y = 19`). +- **Interior glyph:** Ascending staircase polyline `M 8,20 L 8,17 L 11,17 L 11,13 L 15,13 L 15,9 L 20,9` — implies counting/incrementing. -Registers use a wider rectangular box `18x20` (from `x = 5` to `x = 23` and `y = 4` to `y = 24`) and centered text labels. +#### 14. `siso.svg` — Serial-In Serial-Out +- **Pins:** 1 serial input (`y = 14` left); 1 serial output (`y = 14` right). +- **Interior glyph:** Right-arrow — horizontal stem `M 9,14 L 16,14` plus chevron arrowhead `M 13,10 L 17,14 L 13,18`. -#### 12. `7seg.svg` (Seven-Segment Display) -- **Body:** Outer rectangular frame `rect x="6" y="3" width="16" height="22" rx="1.5" ry="1.5"`. -- **Digit Segments:** Seven individual `line` elements of width `2px` with a flat `butt` linecap, separated by 1px gaps, forming the digit "8". -- **Decimal Point:** A filled circle `circle cx="20.5" cy="23" r="1"`. +#### 15. `sipo.svg` — Serial-In Parallel-Out +- **Pins:** 1 serial input (`y = 14` left); 3 parallel outputs (`y = 8`, `y = 14`, `y = 20` right). +- **Interior glyph:** Same right-arrow as siso. -#### 13. `counter.svg` (Mod-N Counter) -- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. -- **Labels:** Center-aligned text `"CTR"` at `(14, 14)`. +#### 16. `piso.svg` — Parallel-In Serial-Out +- **Pins:** 3 parallel inputs (`y = 8`, `y = 14`, `y = 20` left); 1 serial output (`y = 14` right). +- **Interior glyph:** Same right-arrow as siso. -#### 14. `adder.svg` (Arithmetic Adder) -- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. -- **Labels:** Center-aligned text `"\u03a3"` (Sigma symbol) at `(14, 14)` with large font size. +#### 17. `pipo.svg` — Parallel-In Parallel-Out +- **Pins:** 3 parallel inputs (`y = 8`, `y = 14`, `y = 20` left); 3 parallel outputs (`y = 8`, `y = 14`, `y = 20` right). +- **Interior glyph:** Same right-arrow as siso. -#### 15. `siso.svg`, `sipo.svg`, `piso.svg`, `pipo.svg` -- **Body:** Rectangular frame `rect x="5" y="4" width="18" height="20" rx="1"`. -- **Labels:** Center-aligned text (e.g. `"SISO"`, `"SIPO"`, `"PISO"`, `"PIPO"`) at `(14, 14)`. +The 1-stub vs 3-stub pin pattern is the primary visual differentiator between shift register types. The sidebar text label is the definitive identifier. --- -### D. Input, Output & Infrastructure Components - -#### 16. `sw.svg` (Switch) -- Lever switch symbol: - - Input connection dot: `circle cx="6" cy="14" r="1.5"`. - - Output connection dot: `circle cx="22" cy="14" r="1.5"`. - - Input stub: `line x1="1" y1="14" x2="6" y2="14"`. - - Lever: `line x1="6" y1="14" x2="20" y2="6"`. - - Output stub: `line x1="22" y1="14" x2="27" y2="14"`. - -#### 17. `led.svg` (LED Indicator) -- **Body:** Rectangular frame `rect x="9" y="5" width="18" height="18" rx="1.5" ry="1.5"`. -- **Emitter Circle:** Centered at `(18, 14)` with radius `4.5`. -- **Input Stub:** Line at `y = 14` from `x = 1` to `x = 9`. - -#### 18. `vdd.svg` (Power Source) -- Upward-pointing arrow: - - Vertical connection line from `(14, 27)` to `(14, 6)`. - - Arrow head lines: `M 8,12 L 14,6 L 20,12`. - - Text label `"Vdd"` starting at `(17, 18)` (to the right of the vertical line). - -#### 19. `gnd.svg` (Ground) -- Ground schematic symbol: - - Vertical connection line from `(14, 1)` to `(14, 14)`. - - First bar: `line x1="5" y1="14" x2="23" y2="14"`. - - Second bar: `line x1="9" y1="18" x2="19" y2="18"`. - - Third bar: `line x1="13" y1="22" x2="15" y2="22"`. - -#### 20. `osc.svg` (Clock Oscillator) -- Rectangular enclosure: `rect x="3" y="5" width="22" height="18" rx="3"`. -- Enclosed square wave path: `M 6,17 L 10,17 L 10,11 L 15,11 L 15,17 L 19,17 L 19,11 L 22,11`. - -#### 21. `probe.svg` (Voltage Probe) -- Outer indicator circle: `circle cx="16" cy="14" r="8"`. -- Center active probe dot: `circle cx="16" cy="14" r="2.5" fill="currentColor"`. -- Probe lead stub: `line x1="1" y1="14" x2="8" y2="14"`. - -#### 22. `text.svg` (Text Box Label) -- Letter icon: - - Stylized uppercase text letter `"A"` centered at `(14, 19)` with a font size of `18px`, `font-family="serif"`, and `font-weight="bold"`. +### D. Display, Input/Output & Infrastructure Components + +#### 18. `7seg.svg` — Seven-Segment Display +- **Enclosure:** `rect x="8" y="3" width="16" height="22" rx="1.5"`. +- **Input pins:** 4 on left at `y = 6`, `y = 11`, `y = 16`, `y = 21`, each from `x=1` to `x=8`. +- **Segments:** Seven `` elements, `stroke-width="2.5"`, `stroke-linecap="butt"`, forming digit "8": + - Top horizontal: `x=13`–`x=20` at `y=6`. + - Upper-left vertical: `x=12` from `y=7.5` to `y=12.5`. + - Upper-right vertical: `x=21` from `y=7.5` to `y=12.5`. + - Middle horizontal: `x=13`–`x=20` at `y=14`. + - Lower-left vertical: `x=12` from `y=15.5` to `y=20.5`. + - Lower-right vertical: `x=21` from `y=15.5` to `y=20.5`. + - Bottom horizontal: `x=13`–`x=20` at `y=22`. +- **Decimal point:** `circle cx="23" cy="22.5" r="1.2" fill="currentColor"`. + +#### 19. `vdd.svg` — Power Supply (VDD) +- **Vertical stem:** `line x1="14" y1="27" x2="14" y2="9"` (connection point at bottom). +- **Arrowhead chevron:** `M 7,16 L 14,9 L 21,16` pointing upward. +- **Power rail bar:** `line x1="7" y1="6" x2="21" y2="6" stroke-width="2.5"` at top. +- No text label — the upward arrow + top bar is a universally recognized power symbol. + +#### 20. `gnd.svg` — Ground (unchanged) +- Vertical line `(14, 1)` to `(14, 14)`. Three narrowing horizontal bars at `y=14` (full), `y=18` (medium), `y=22` (narrow). + +#### 21. `osc.svg` — Clock Oscillator (unchanged) +- Rounded-rect enclosure `x="3" y="5" width="22" height="18" rx="3"`. +- Square-wave path inside: `M 6,17 L 10,17 L 10,11 L 15,11 L 15,17 L 19,17 L 19,11 L 22,11`. +- Output stub `x=25` to `x=27` at `y=14`. + +#### 22. `probe.svg` — Voltage Probe (unchanged) +- Outer circle `cx="16" cy="14" r="8"`. Center filled dot `r="3"`. Lead stub `x=1` to `x=8` at `y=14`. + +#### 23. `sw.svg` — Switch (unchanged) +- Two filled contact dots. Lever line from `(6, 14)` to `(20, 6)`. Input/output stubs. + +#### 24. `led.svg` — LED Indicator (unchanged) +- Rect enclosure `x="9" y="5" width="18" height="18" rx="1.5"`. Inner circle `cx="18" cy="14" r="4.5"`. Input stub at `y=14`. + +#### 25. `text.svg` — Text Label Component (unchanged) +- Large serif `"A"` centered at `(14, 20)`. No enclosure — the letter is the icon. diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index 7a2f453..f855f46 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -24,6 +24,12 @@ # warn if a simulation run takes longer than this (seconds) _SLOW_SIM_SECONDS = 15 +# max time each compute idle-tick may run before yielding to keep the UI responsive +_COMPUTE_SLICE_SECONDS = 0.008 +# floor on playback frame interval (~60fps cap) +_PLAYBACK_MIN_INTERVAL_MS = 16 +# ceiling on playback frame interval (stops few-frame circuits crawling) +_PLAYBACK_MAX_INTERVAL_MS = 200 class CircuitConverter(): def __init__(self, circuit: CircuitManager): @@ -232,7 +238,8 @@ def __init__(self, mainframe: MainFrame): self.sim_idle_id = None self.sim_cancelled = False self.sim_start_time = None - self.sim_last_emit = 0.0 + self.playback_index = 0 + self.is_playing = False self.net_connections = [] self.net_levels = [] @@ -553,6 +560,17 @@ def initialize_logic(self): c[1].initialize() self.net_levels = [-1]*len(self.net_connections) + def _apply_recorded_frame(self, t): + i = 2 + for c in self.components: + if c[0] != definitions.component_net: + c[1].input_level = self.component_state_history[t][i][0] + c[1].output_level = self.component_state_history[t][i][1] + c[1].output_stack = self.component_state_history[t][i][2] + c[1].store = self.component_state_history[t][i][3] + i += 1 + self.net_levels = self.component_state_history[t][1] + def revert_state(self): if self.component_state_history: t = 0 @@ -560,20 +578,13 @@ def revert_state(self): if comp_state[0] <= self.current_time: t = i break - i = 2 - for c in self.components: - if c[0] != definitions.component_net: - c[1].input_level = self.component_state_history[t][i][0] - c[1].output_level = self.component_state_history[t][i][1] - c[1].output_stack = self.component_state_history[t][i][2] - c[1].store = self.component_state_history[t][i][3] - i += 1 - self.net_levels = self.component_state_history[t][1] + self._apply_recorded_frame(t) self.emit("currenttime-changed", self.current_time) def cancel_simulation(self): self.sim_cancelled = True + self.is_playing = False if self.sim_idle_id is not None: GLib.source_remove(self.sim_idle_id) self.sim_idle_id = None @@ -744,6 +755,7 @@ def _log_if_slow(self): def _finish_sim(self, callback, val): self.sim_idle_id = None self.sim_generator = None + self.is_playing = False if self.sim_cancelled: return self._log_if_slow() @@ -752,23 +764,16 @@ def _finish_sim(self, callback, val): if callback: callback(val) - def _sim_idle_step(self, callback): - # process a ~20ms slice per idle tick so the UI stays responsive; emit progress ~10 Hz + def _play_frame(self, callback, compute_error_result): if self.sim_cancelled: return GLib.SOURCE_REMOVE - start = time.time() - try: - while time.time() - start < 0.02: - step_type, val = next(self.sim_generator) - if step_type in ("success", "error"): - self._finish_sim(callback, val) - return GLib.SOURCE_REMOVE - except StopIteration: - self._finish_sim(callback, False) + if self.playback_index >= len(self.component_state_history): + self._finish_sim(callback, compute_error_result) return GLib.SOURCE_REMOVE - if start - self.sim_last_emit > 0.1: - self.sim_last_emit = start - self.emit("currenttime-changed", self.current_time) + self.current_time = self.component_state_history[self.playback_index][0] + self._apply_recorded_frame(self.playback_index) + self.emit("currenttime-changed", self.current_time) + self.playback_index += 1 return GLib.SOURCE_CONTINUE def analyze_logic(self, callback=None): @@ -776,10 +781,36 @@ def analyze_logic(self, callback=None): self.sim_cancelled = False self.sim_generator = self.analyze_logic_generator() self.sim_start_time = time.time() - self.sim_last_emit = 0.0 + self.is_playing = False if callback is None: return self._run_sim_sync() - self.sim_idle_id = GLib.idle_add(self._sim_idle_step, callback) + self.sim_idle_id = GLib.idle_add(self._compute_step, callback) + + def _compute_step(self, callback): + if self.sim_cancelled: + return GLib.SOURCE_REMOVE + start = time.time() + while time.time() - start < _COMPUTE_SLICE_SECONDS: + try: + step_type, val = next(self.sim_generator) + if step_type in ("success", "error"): + self._begin_playback(callback, val) + return GLib.SOURCE_REMOVE + except StopIteration: + self._begin_playback(callback, False) + return GLib.SOURCE_REMOVE + return GLib.SOURCE_CONTINUE + + def _begin_playback(self, callback, compute_error_result): + self._log_if_slow() + self.sim_generator = None + if self.sim_cancelled: + return + self.playback_index = 0 + self.is_playing = True + frame_count = len(self.component_state_history) + interval = max(_PLAYBACK_MIN_INTERVAL_MS, min(int(Preference.playback_duration * 1000 / max(1, frame_count)), _PLAYBACK_MAX_INTERVAL_MS)) + self.sim_idle_id = GLib.timeout_add(interval, self._play_frame, callback, compute_error_result) def remove_selected_component(self): for c in self.selected_components: diff --git a/ggate/Components/Windows/Preferences.py b/ggate/Components/Windows/Preferences.py index 8ac3ac0..87b9523 100644 --- a/ggate/Components/Windows/Preferences.py +++ b/ggate/Components/Windows/Preferences.py @@ -114,6 +114,15 @@ def _build_simulation_page(self): group.add(self.calc_duration_row) page.add(group) + + playback_group = Adw.PreferencesGroup() + playback_group.set_title(_("Playback")) + + self.playback_duration_row = Adw.SpinRow() + self.playback_duration_row.set_title(_("Animation duration (s)")) + playback_group.add(self.playback_duration_row) + + page.add(playback_group) return page def _build_canvas_page(self): @@ -175,6 +184,10 @@ def _populate_values(self): self.calc_duration_row.set_adjustment(adj_dur) self.calc_duration_row.set_digits(3) + adj_playback = Gtk.Adjustment.new(float(Preference.playback_duration), 0.5, 60.0, 0.5, 1.0, 0.0) + self.playback_duration_row.set_adjustment(adj_playback) + self.playback_duration_row.set_digits(1) + self.autocenter_row.set_active(bool(Preference.autocenter_resize)) def _sync_button_from_preference(self, key): @@ -196,6 +209,7 @@ def _connect_signals(self): self.calc_iter_row.connect("notify::value", self._on_calc_iters_changed) self.calc_duration_row.connect("notify::value", self._on_calc_duration_changed) + self.playback_duration_row.connect("notify::value", self._on_playback_duration_changed) self.autocenter_row.connect("notify::active", self._on_autocenter_changed) # ── signal handlers ─────────────────────────────────────────────────────── @@ -260,6 +274,10 @@ def _on_autocenter_changed(self, row, pspec): Preference.save_settings() self._trigger_canvas_redraw() + def _on_playback_duration_changed(self, row, pspec): + Preference.playback_duration = row.get_value() + Preference.save_settings() + # ── helpers ─────────────────────────────────────────────────────────────── def _set_theme_row_custom(self): diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index f23f3bf..b2aee0b 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -40,12 +40,11 @@ } } -WINDOW_WIDTH_PERCENT = 0.65 -WINDOW_HEIGHT_PERCENT = 0.60 +WINDOW_WIDTH_PERCENT = 0.85 +WINDOW_HEIGHT_PERCENT = 0.75 DEFAULT_WINDOW_WIDTH = 640 DEFAULT_WINDOW_HEIGHT = 400 - def compute_default_window_size(): display = Gdk.Display.get_default() if not display: @@ -465,12 +464,14 @@ def on_simulation_finished(self, is_error): def on_sim_progress(self, circuit, current_time): # progress signal -> status % + trailing timing-graph refresh - if self.circuit.sim_idle_id is None: + if not self.circuit.is_playing: return pct = min(100, int(current_time / Preference.max_calc_duration * 100)) - self.statusbar.update(_("Calculating... %d%%") % pct) + self.statusbar.update(_("Playing: %d%%") % pct) if self.timing_diagram.get_visible(): self.timing_diagram._draw_area.draw() + self.drawarea.redraw = True + self.drawarea.queue_draw() def on_circuit_stop(self, *args): self.circuit.cancel_simulation() diff --git a/ggate/Preference.py b/ggate/Preference.py index 279dfd9..18010c4 100644 --- a/ggate/Preference.py +++ b/ggate/Preference.py @@ -62,6 +62,7 @@ def __getitem__(self, __k): "symbol_type": 0, "max_calc_iters": 10000, "max_calc_duration": 0.0002, + "playback_duration": 6.0, "autocenter_resize": 1, "theme": "Classic", } From 34454fe447aa0b8b282bca3279dfa90283610783 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:58:01 +0100 Subject: [PATCH 36/37] feat: improve animation computing on circuit manager, and playback controls --- .agents/TODO.md | 86 ++++++------- CHANGELOG.md | 8 ++ README.md | 1 + ggate/CircuitManager.py | 104 +++++++--------- ggate/CircuitPlaybackAnimation.py | 138 +++++++++++++++++++++ ggate/Components/LogicGates/Standard/SW.py | 1 + ggate/DrawArea.py | 23 ++-- ggate/MainFrame.py | 51 ++------ ggate/PlaybackControls.py | 137 ++++++++++++++++++++ 9 files changed, 399 insertions(+), 150 deletions(-) create mode 100644 ggate/CircuitPlaybackAnimation.py create mode 100644 ggate/PlaybackControls.py diff --git a/.agents/TODO.md b/.agents/TODO.md index c2aff28..bc524b9 100644 --- a/.agents/TODO.md +++ b/.agents/TODO.md @@ -11,65 +11,22 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie too large to handle, and warn when a save/compress or simulation will take too long, instead of hanging/OOM-ing. (Run-time hang is mitigated by the non-blocking sim + the >15s log, but there's no up-front guard.) - - - - - -## P2 — icons & dead code - -- [x] **Icon system** (plan: `plans/icon-creation.md`). Integrate hand-drawn, accurate, straight-to-the-point - SVG files for each component with useful curves in two variants (ANSI and IEC). Set up - gresource→freedesktop layout with aliases (using the dynamic-glob+`alias` pattern from theming), - call `IconTheme.add_resource_path` at startup, switch `ComponentView`/`MenuPopover` from - filesystem paths to icon-name lookups, and delete `_get_icon_path`. **(BLOCKER for installed - runs: `ComponentView`/`MenuPopover` still use `__file__`/`DATADIR` filesystem icon paths.)** -- [x] Fix the gresource icon layout: dev XML nests icons under `…/Dev/data/icons/scalable/ - actions/` with components misfiled there too (double "actions" / misfile). Tidy into a clean - freedesktop layout, dev + installed in sync. - - [ ] Style: residual 2-vs-4-space indent, mixed quotes in older files (new work follows: double quotes, comments per the `comment-style` memory). ## Build & packaging -- [x] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` draws the clock trigger bubble at - the `CK` coordinate (`outpin_b + 40`) instead of `SL` (`outpin_b + 20`). -- [x] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths - — must keep the dev `run.py` path working (no meson step in dev). -- [x] **Desktop file + AppStream install via meson** — confirm meson installs the (renamed) - desktop/metadata, not just legacy `setup.py`. -- [x] **Unify dev vs installed resource source** — dev XML is generated by `run.py`, installed - by `resources.xml.in` + meson glob; consider a single shared generator so they can't diverge. - [ ] **Flatpak** — decouple pip deps from network (`flatpak-pip-generator`) for offline build. - [ ] **Snapcraft** — remove remote `curl|python3` scripts; drop hardcoded prefix. - [ ] Relax `shapely` pin / pyproject cleanup (partly done — confirm). ## P3 — feature backlog -- [ ] Animate logic circuit during simulation. -- [ ] **Real-time (human-paced) simulation playback.** Add a mode that advances the sim in - wall-clock time (human seconds, not instant settle) so wires/components are seen toggling - live — net colors and component states switching at a watchable rate. Needs a clock that - maps sim-time→real-time with a speed control, driving incremental redraws. Pairs with the - "animate logic circuit during simulation" item above. - - **Architecture (decided):** *record-then-play*, not compute-and-trail. Phase 1 computes - the full timeline at engine speed (existing `_run_sim_sync` path — already records history - via `_record_state`/output_stacks). Phase 2 is a separate `timeout_add` "player" that walks - the **recorded frames** (not the generator), restoring each frame's levels + emitting - `currenttime-changed` + redrawing. This decouples compute speed from playback cadence. - - **Pacing:** target a fixed playback *duration*, not a fixed per-frame delay: - `interval = target_duration / frame_count`, clamped to a ≥16ms floor; subsample frames when - the timeline is too long to hold the target. (So 1s compute → e.g. 30s playback over data - already in memory.) - - ⚠️ Supersedes the current uncommitted `CircuitManager.py` attempt, which throttles the - *engine* to 30 steps/sec. See `.agents/reviews/circuitmanager-sim-animation-review.md`. -- [ ] **Sleek playback control bar (bottom).** When a simulation has started, surface a slim - transport control along the bottom of the canvas: play/pause, step, scrub/seek through the - recorded timeline, current-time readout, and a speed control. Driven by the record-then-play - player above. HIG: keep it minimal/overlayed and auto-hide when no sim is active. Cite - `.agents/skills/designing-gnome-ui` + relevant `.agents/gtk4/` pages on the UI delegation. - [ ] Auto-scroll the timing diagram to follow the latest timestamp while running (deferred from the timing plan §6 Q1). +- [ ] **Playback follow-ups (deferred).** Frame subsampling for very long timelines (so playback + holds the target duration instead of running long at the 16ms floor); optional per-session + speed control beyond the global `playback_duration` preference; a "Computing…" affordance for + pathological circuits whose up-front compute is slow. ## Inline TODOs @@ -83,6 +40,41 @@ Companion docs: `reference/build-system-analysis.md`, `reference/delegation-brie Earlier work (app launches, dialogs migrated, sim/crash fixes) — see git history `a0c0edc`…`a078fb1`. Recent (this development cycle): +- [x] **Animated simulation playback (record-then-play)** — replaced the throttle-the-engine + attempt with a clean two-phase model: `CircuitManager` computes the full timeline at engine + speed in non-blocking idle slices (`begin_compute`/`compute_slice`), then a new + `ggate/CircuitPlaybackAnimation.py` GObject paces playback over the recorded frames + (`apply_frame_at`), pacing to a target duration (`playback_duration` pref) clamped to + 16–200ms/frame. State machine `computing→playing⇄paused→ended/idle` via `playback-state-changed`. + Non-animating circuits (no time evolution, e.g. no oscillator) skip playback and just show the + settled state. See `.agents/reviews/circuitmanager-sim-animation-review.md` for the rejected + first attempt. +- [x] **Floating playback control bar** (`ggate/PlaybackControls.py`) — OSD pill overlaid bottom- + centre of the canvas (DrawArea reworked to a `Gtk.Overlay` wrapping its scroller). Stop · + Restart · Play/Pause │ seek scale · fixed-width sim-time readout. Shown only for animating + circuits, persists through the whole session, Stop ends the run via the header toggle. +- [x] **`playback_duration` preference** — new Simulation-page setting (`Preference.py`, + `Preferences.py`) controlling how long an animation takes to play back. +- [x] **Header simulation controls simplified to Play/Stop** — removed the redundant header Pause + button and the orphaned `pause_running_mode` path now that the floating bar owns transport. +- [x] **Live-edit recompute (switch/property desync fix)** — editing a property or toggling a + switch during a run now cancels playback and recomputes from t=0 via a shared + `MainFrame.recompute_simulation()`; switch toggles persist into their initial-state value so a + from-scratch recompute holds them. +- [x] **Icon system** (plan: `plans/icon-creation.md`) — hand-drawn component SVGs in two + variants (ANSI/IEC), gresource→freedesktop layout with aliases, `IconTheme.add_resource_path` + at startup, `ComponentView`/`MenuPopover` switched to icon-name lookups, `_get_icon_path` + deleted. Includes new themed 7-segment and LED icons. +- [x] **Fix gresource icon layout** — tidied the dev XML's double-"actions" nesting/misfiled + components into a clean freedesktop layout, dev + installed in sync. +- [x] **PIPO clock-bubble draw bug** — `PIPOShiftRegister.py` drew the clock trigger bubble at + the `CK` coordinate (`outpin_b + 40`) instead of `SL` (`outpin_b + 20`). +- [x] **Generate `config.py` via meson** (`configure_file`) instead of hardcoded VERSION/paths, + keeping the dev `run.py` path working. +- [x] **Desktop file + AppStream install via meson** — meson installs the renamed + desktop/metadata, not just legacy `setup.py`. +- [x] **Unify dev vs installed resource source** — dev XML generated by `run.py`, installed by + `resources.xml.in` + meson glob. - [x] **Timing diagram width cap warning** — added a warning banner (`Adw.Banner`) in the timing graph dialog to notify the user when the diagram width is capped at Cairo's limit. - [x] **First-paint centering decoupled** — fixed `ggate/DrawArea.py` and `ggate/MainFrame.py` so that initial canvas viewport centering is always performed on file/buffer load, even when the resize auto-centering preference is disabled. - [x] **translator-credits & header cleanups** — cleaned up the commented-out translator-credits block in `MainFrame.py` and removed the stale `indent-tabs-mode` editor directives from 8 Python files. diff --git a/CHANGELOG.md b/CHANGELOG.md index 8343423..fa40bb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # ChangeLog +## 2026-06-15 Ekure Edem + Animated simulation playback: compute the full timeline, then play it back paced + Floating playback control bar (Stop/Restart/Play, seek, sim-time) for animating circuits + Add playback duration preference; only animate circuits that evolve over time (e.g. oscillators) + Simplify header simulation controls to Play/Stop + Recompute simulation on live edits (switch toggle / property change) to fix desync + New themed 7-segment and LED component icons + ## 2026-06-14 Ekure Edem Revamp timing diagram: Adw dialog with themed Cairo waveforms Add theming system with Classic, Space, Frappé and Mocha themes diff --git a/README.md b/README.md index 62e4efd..4dda88e 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ A logic gate simulator for linux developed with Gtk and python. * Easy to understand UI and accesible shortcuts * Contains all logic gates with appropriate diagrams and alternative (IEC, MIL/ANSI) * Supports Simulation and Timing Diagrams +* Animated playback of a simulation with a floating transport bar (play/pause, restart, seek) * Support exporting of drawings and timing diagrams. * Variable component properties * Contains all types Flip Flop diff --git a/ggate/CircuitManager.py b/ggate/CircuitManager.py index f855f46..850d1f2 100644 --- a/ggate/CircuitManager.py +++ b/ggate/CircuitManager.py @@ -10,8 +10,9 @@ import copy import time import igraph -from gi.repository import GObject, GLib +from gi.repository import GObject from shapely.geometry import LineString, Point +from ggate.CircuitPlaybackAnimation import CircuitPlaybackAnimation from ggate.Components.LogicGates.SystemComponents import BaseComponent from ggate.Components.LogicGates import logic_gates from ggate.const import definitions @@ -26,10 +27,7 @@ _SLOW_SIM_SECONDS = 15 # max time each compute idle-tick may run before yielding to keep the UI responsive _COMPUTE_SLICE_SECONDS = 0.008 -# floor on playback frame interval (~60fps cap) -_PLAYBACK_MIN_INTERVAL_MS = 16 -# ceiling on playback frame interval (stops few-frame circuits crawling) -_PLAYBACK_MAX_INTERVAL_MS = 200 + class CircuitConverter(): def __init__(self, circuit: CircuitManager): @@ -234,12 +232,10 @@ def __init__(self, mainframe: MainFrame): self.filepath = "" self.mainframe = mainframe self.converter = CircuitConverter(self) + self.playback = CircuitPlaybackAnimation(self) self.sim_generator = None - self.sim_idle_id = None self.sim_cancelled = False self.sim_start_time = None - self.playback_index = 0 - self.is_playing = False self.net_connections = [] self.net_levels = [] @@ -583,12 +579,7 @@ def revert_state(self): self.emit("currenttime-changed", self.current_time) def cancel_simulation(self): - self.sim_cancelled = True - self.is_playing = False - if self.sim_idle_id is not None: - GLib.source_remove(self.sim_idle_id) - self.sim_idle_id = None - self.sim_generator = None + self.playback.cancel() def _rewind_history(self): # re-running from current_time: drop any recorded state newer than it @@ -752,65 +743,62 @@ def _log_if_slow(self): if elapsed > _SLOW_SIM_SECONDS: logger.warning("simulation took %.1fs (%d frames)", elapsed, len(self.probe_levels_history)) - def _finish_sim(self, callback, val): - self.sim_idle_id = None - self.sim_generator = None - self.is_playing = False - if self.sim_cancelled: - return - self._log_if_slow() - if not val: - self.emit("message-changed", "", False) - if callback: - callback(val) - - def _play_frame(self, callback, compute_error_result): - if self.sim_cancelled: - return GLib.SOURCE_REMOVE - if self.playback_index >= len(self.component_state_history): - self._finish_sim(callback, compute_error_result) - return GLib.SOURCE_REMOVE - self.current_time = self.component_state_history[self.playback_index][0] - self._apply_recorded_frame(self.playback_index) - self.emit("currenttime-changed", self.current_time) - self.playback_index += 1 - return GLib.SOURCE_CONTINUE - def analyze_logic(self, callback=None): self.cancel_simulation() + if callback is None: + self.sim_cancelled = False + self.sim_generator = self.analyze_logic_generator() + self.sim_start_time = time.time() + return self._run_sim_sync() + self.playback.run(callback) + + def begin_compute(self): self.sim_cancelled = False self.sim_generator = self.analyze_logic_generator() self.sim_start_time = time.time() - self.is_playing = False - if callback is None: - return self._run_sim_sync() - self.sim_idle_id = GLib.idle_add(self._compute_step, callback) - def _compute_step(self, callback): - if self.sim_cancelled: - return GLib.SOURCE_REMOVE + def compute_slice(self): start = time.time() while time.time() - start < _COMPUTE_SLICE_SECONDS: try: step_type, val = next(self.sim_generator) if step_type in ("success", "error"): - self._begin_playback(callback, val) - return GLib.SOURCE_REMOVE + self._end_compute() + return ("done", val) except StopIteration: - self._begin_playback(callback, False) - return GLib.SOURCE_REMOVE - return GLib.SOURCE_CONTINUE + self._end_compute() + return ("done", False) + return ("running", None) - def _begin_playback(self, callback, compute_error_result): + def _end_compute(self): self._log_if_slow() self.sim_generator = None - if self.sim_cancelled: - return - self.playback_index = 0 - self.is_playing = True - frame_count = len(self.component_state_history) - interval = max(_PLAYBACK_MIN_INTERVAL_MS, min(int(Preference.playback_duration * 1000 / max(1, frame_count)), _PLAYBACK_MAX_INTERVAL_MS)) - self.sim_idle_id = GLib.timeout_add(interval, self._play_frame, callback, compute_error_result) + + def cancel_compute(self): + self.sim_cancelled = True + self.sim_generator = None + + def apply_frame_at(self, index): + self.current_time = self.component_state_history[index][0] + self._apply_recorded_frame(index) + self.emit("currenttime-changed", self.current_time) + + def frame_count(self): + return len(self.component_state_history) + + def total_time(self): + if not self.component_state_history: + return 0.0 + return self.component_state_history[-1][0] + + def is_animated(self): + return len(self.component_state_history) > 1 and self.total_time() > 0 + + def finalize_playback(self, error, callback): + if not error: + self.emit("message-changed", "", False) + if callback: + callback(error) def remove_selected_component(self): for c in self.selected_components: diff --git a/ggate/CircuitPlaybackAnimation.py b/ggate/CircuitPlaybackAnimation.py new file mode 100644 index 0000000..065beb4 --- /dev/null +++ b/ggate/CircuitPlaybackAnimation.py @@ -0,0 +1,138 @@ +from gi.repository import GObject, GLib +from ggate import Preference + +# floor on playback frame interval (~60fps cap) +_PLAYBACK_MIN_INTERVAL_MS = 16 +# ceiling on playback frame interval (stops few-frame circuits crawling) +_PLAYBACK_MAX_INTERVAL_MS = 200 + +class CircuitPlaybackAnimation(GObject.GObject): + __gsignals__ = { + "playback-state-changed": (GObject.SIGNAL_RUN_FIRST, None, (str,)) + } + + def __init__(self, circuit): + GObject.GObject.__init__(self) + self.circuit = circuit + self.source_id = None + self.playback_index = 0 + self.is_playing = False + self.state = "idle" + self.callback = None + self.compute_error = False + + def _update_state(self, state): + self.state = state + self.emit("playback-state-changed", state) + + def run(self, callback): + self.cancel() + self.callback = callback + self.circuit.begin_compute() + self._update_state("computing") + self.source_id = GLib.idle_add(self._compute_step) + + def _compute_step(self): + if self.circuit.sim_cancelled: + return GLib.SOURCE_REMOVE + status, err = self.circuit.compute_slice() + if status == "done": + self.compute_error = err + if self.circuit.is_animated(): + self._start_playback() + else: + self._finish_static() + return GLib.SOURCE_REMOVE + return GLib.SOURCE_CONTINUE + + def _start_playback(self): + self.playback_index = 0 + self.is_playing = True + self._update_state("playing") + self.source_id = GLib.timeout_add(self._interval(), self._play_frame) + + def _play_frame(self): + if not self.is_playing: + return GLib.SOURCE_REMOVE + if self.playback_index >= self.circuit.frame_count(): + self._finish() + return GLib.SOURCE_REMOVE + self.circuit.apply_frame_at(self.playback_index) + self.playback_index += 1 + return GLib.SOURCE_CONTINUE + + def _finish(self): + self.is_playing = False + self.source_id = None + self._update_state("ended") + self.circuit.finalize_playback(self.compute_error, self.callback) + + def _finish_static(self): + frame_count = self.circuit.frame_count() + if frame_count: + self.circuit.apply_frame_at(frame_count - 1) + self.is_playing = False + self.source_id = None + self._update_state("idle") + self.circuit.finalize_playback(self.compute_error, self.callback) + + def pause(self): + if not self.is_playing: + return + if self.source_id is not None: + GLib.source_remove(self.source_id) + self.source_id = None + self.is_playing = False + self._update_state("paused") + + def play(self): + if self.state not in ("paused", "ended"): + return + if self.playback_index >= self.circuit.frame_count(): + self.playback_index = 0 + self.is_playing = True + self._update_state("playing") + self.source_id = GLib.timeout_add(self._interval(), self._play_frame) + + def toggle_play(self): + if self.state == "playing": + self.pause() + elif self.state in ("paused", "ended"): + self.play() + + def restart(self): + if not self.circuit.frame_count(): + return + self.playback_index = 0 + self.circuit.apply_frame_at(0) + if self.state != "playing": + self.is_playing = True + self._update_state("playing") + self.source_id = GLib.timeout_add(self._interval(), self._play_frame) + + def seek(self, index): + frame_count = self.circuit.frame_count() + if not frame_count: + return + index = max(0, min(index, frame_count - 1)) + self.playback_index = index + self.circuit.apply_frame_at(index) + + def stop(self): + self.cancel() + + def cancel(self): + if self.source_id is not None: + GLib.source_remove(self.source_id) + self.source_id = None + self.circuit.cancel_compute() + self.is_playing = False + if self.state != "idle": + self._update_state("idle") + + def frame_count(self): + return self.circuit.frame_count() + + def _interval(self): + frame_count = self.circuit.frame_count() + return max(_PLAYBACK_MIN_INTERVAL_MS, min(int(Preference.playback_duration * 1000 / max(1, frame_count)), _PLAYBACK_MAX_INTERVAL_MS)) diff --git a/ggate/Components/LogicGates/Standard/SW.py b/ggate/Components/LogicGates/Standard/SW.py index 6b9743a..0a592e7 100644 --- a/ggate/Components/LogicGates/Standard/SW.py +++ b/ggate/Components/LogicGates/Standard/SW.py @@ -62,6 +62,7 @@ def initialize(self): def click(self, x, y, time): self.store[0] = not self.store[0] + self.values[0] = int(self.store[0]) self.clicked_time = time return True diff --git a/ggate/DrawArea.py b/ggate/DrawArea.py index 67d348c..39cb6a1 100644 --- a/ggate/DrawArea.py +++ b/ggate/DrawArea.py @@ -15,25 +15,35 @@ from ggate import Preference from gi.repository import Gtk, Gdk, Pango, PangoCairo, GLib from ggate.Animation import CanvasAnimationController +from ggate.PlaybackControls import PlaybackControls -class DrawArea(Gtk.ScrolledWindow): +class DrawArea(Gtk.Overlay): def __init__(self, parent: MainFrame): - Gtk.ScrolledWindow.__init__(self) + Gtk.Overlay.__init__(self) self.set_hexpand(True) self.set_vexpand(True) + + self.scroller = Gtk.ScrolledWindow() + self.scroller.set_hexpand(True) + self.scroller.set_vexpand(True) + self.width = 1920 self.height = 1080 self.zoom = 1.0 - self.vadj = self.get_vadjustment() - self.hadj = self.get_hadjustment() + self.vadj = self.scroller.get_vadjustment() + self.hadj = self.scroller.get_hadjustment() self.netstarted = False self.drawingarea = Gtk.DrawingArea() self.drawingarea.set_size_request(self.width, self.height) - self.set_child(self.drawingarea) + self.scroller.set_child(self.drawingarea) + self.set_child(self.scroller) self.drawingarea.set_draw_func(self.on_draw) + self.playback_controls = PlaybackControls(parent) + self.add_overlay(self.playback_controls) + scroll_controller = Gtk.EventControllerScroll.new(Gtk.EventControllerScrollFlags.BOTH_AXES) scroll_controller.connect("scroll", self.on_scroll) self.drawingarea.add_controller(scroll_controller) @@ -1194,8 +1204,7 @@ def on_button_release_primary(self, *args): im[2] * (self.cursor_smooth_x - c[1].pos_x) + im[3] * ( self.cursor_smooth_y - c[1].pos_y) + c[1].pos_y, self.circuit.current_time): - if not self.parent.pause_running_mode: - self.circuit.analyze_logic(callback=self.parent.on_simulation_finished) + self.parent.recompute_simulation() self.queue_draw() break diff --git a/ggate/MainFrame.py b/ggate/MainFrame.py index b2aee0b..4c3257b 100644 --- a/ggate/MainFrame.py +++ b/ggate/MainFrame.py @@ -36,7 +36,6 @@ "simulation": { "start": _("Run and simulate this circuit"), "stop": _("Stop simulation"), - "pause": _("Continue simulation"), } } @@ -78,7 +77,6 @@ def __init__(self, *args, **kwargs): ) self.application: Adw.Application = kwargs["application"] self.running_mode = False - self.pause_running_mode = False self.io_manager = FileIOManager self.file_manager = FileManager.for_glc(self) @@ -269,31 +267,18 @@ def create_window(self): self.popover = Gtk.PopoverMenu.new_from_model(_menu) self.menu_button.set_popover(self.popover) - # play, pause, stop button + # play / stop button self.action_run = Gtk.ToggleButton() - self.action_pause = Gtk.Button() play_image = Gtk.Image.new_from_icon_name("media-playback-start-symbolic") self.action_run.set_tooltip_text(TOOLTIPS["simulation"]["start"]) self.action_run.connect("toggled", self.on_action_run_clicked) - - pause_image = Gtk.Image.new_from_icon_name("media-playback-pause-symbolic") - self.action_pause.set_tooltip_text(TOOLTIPS["simulation"]["pause"]) - self.action_pause.set_visible(False) - self.action_pause.connect("clicked", self.on_action_pause_clicked) - self.action_run.set_child(play_image) - self.action_pause.set_child(pause_image) - - _run_pause_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - _run_pause_box.add_css_class("linked") - _run_pause_box.append(self.action_run) - _run_pause_box.append(self.action_pause) # Header Bar self.header_bar = Adw.HeaderBar() self.header_bar.pack_end(self.menu_button) - self.header_bar.pack_end(_run_pause_box) + self.header_bar.pack_end(self.action_run) # Draw area self.drawarea = DrawArea(self) @@ -464,10 +449,9 @@ def on_simulation_finished(self, is_error): def on_sim_progress(self, circuit, current_time): # progress signal -> status % + trailing timing-graph refresh - if not self.circuit.is_playing: - return - pct = min(100, int(current_time / Preference.max_calc_duration * 100)) - self.statusbar.update(_("Playing: %d%%") % pct) + if self.circuit.playback.is_playing: + pct = min(100, int(current_time / Preference.max_calc_duration * 100)) + self.statusbar.update(_("Playing: %d%%") % pct) if self.timing_diagram.get_visible(): self.timing_diagram._draw_area.draw() self.drawarea.redraw = True @@ -486,21 +470,6 @@ def on_circuit_stop(self, *args): self.drawarea.redraw = True self.drawarea.queue_draw() - def on_action_pause_clicked(self, widget, *args): - if self.drawarea.drag_enabled: - return - if self.pause_running_mode: # if already paused, play simulation - play_image = Gtk.Image.new_from_icon_name("media-playback-pause-symbolic") - widget.set_tooltip_markup(TOOLTIPS["simulation"]["pause"]) - widget.set_child(play_image) - self.pause_running_mode = False - self.drawarea.queue_draw() - else: # if not paused, pause it - pause_image = Gtk.Image.new_from_icon_name("media-playback-start-symbolic") - widget.set_tooltip_markup(TOOLTIPS["simulation"]["start"]) - widget.set_child(pause_image) - self.pause_running_mode = True - def on_action_run_clicked(self, widget, *args): if self.drawarea.drag_enabled: return @@ -509,13 +478,11 @@ def on_action_run_clicked(self, widget, *args): widget.set_tooltip_markup(TOOLTIPS["simulation"]["stop"]) widget.set_child(stop_image) self.on_circuit_run() - self.action_pause.set_visible(True) else: start_image = Gtk.Image.new_from_icon_name("media-playback-start-symbolic") widget.set_tooltip_markup(TOOLTIPS["simulation"]["start"]) widget.set_child(start_image) self.on_circuit_stop() - self.action_pause.set_visible(False) def on_action_cut_pressed(self, *widget): self.on_action_copy_pressed() @@ -661,9 +628,17 @@ def on_propwindow_hidden(self, widget): def on_property_changed(self, widget): self.circuit.push_history() + if self.running_mode: + self.recompute_simulation() self.drawarea.redraw = True self.drawarea.queue_draw() + def recompute_simulation(self): + # a live edit (property or switch) invalidates the recorded timeline: stop and recompute from t=0 + self.circuit.analyze_net_connections() + self.circuit.initialize_logic() + self.circuit.analyze_logic(callback=self.on_simulation_finished) + def on_circuit_title_changed(self, circuit, title): self.set_title(title) diff --git a/ggate/PlaybackControls.py b/ggate/PlaybackControls.py new file mode 100644 index 0000000..a4e91c6 --- /dev/null +++ b/ggate/PlaybackControls.py @@ -0,0 +1,137 @@ +from gi.repository import Gtk, Gdk + +_CSS = """ +.playback-bar { padding: 5px; } +.playback-bar button { min-height: 0; padding: 3px; } +""" + +def _ensure_css(): + if getattr(_ensure_css, "_done", False): + return + provider = Gtk.CssProvider() + provider.load_from_string(_CSS) + Gtk.StyleContext.add_provider_for_display( + Gdk.Display.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + _ensure_css._done = True + +def _format_progress(current, total): + # pick a session-stable unit from the total so width/unit never jump mid-playback + if total >= 1: + scale, unit = 1.0, "s" + elif total >= 1e-3: + scale, unit = 1e3, "ms" + elif total >= 1e-6: + scale, unit = 1e6, "µs" + elif total > 0: + scale, unit = 1e9, "ns" + else: + scale, unit = 1.0, "s" + return f"{current * scale:6.2f} / {total * scale:6.2f} {unit}" + +class PlaybackControls(Gtk.Box): + def __init__(self, mainframe): + super().__init__(orientation=Gtk.Orientation.HORIZONTAL) + self.mainframe = mainframe + self.circuit = mainframe.circuit + self.playback = self.circuit.playback + self._suppress_seek = False + _ensure_css() + + self.add_css_class("playback-bar") + self.add_css_class("osd") + self.add_css_class("toolbar") + self.set_halign(Gtk.Align.CENTER) + self.set_valign(Gtk.Align.END) + self.set_margin_bottom(6) + self.set_spacing(2) + self.set_visible(False) + + # Stop button — fully ends the run via the header toggle + self.stop_btn = Gtk.Button() + self.stop_btn.add_css_class("flat") + self.stop_img = Gtk.Image.new_from_icon_name("media-playback-stop-symbolic") + self.stop_img.set_pixel_size(14) + self.stop_btn.set_child(self.stop_img) + self.stop_btn.connect("clicked", lambda btn: self.mainframe.action_run.set_active(False)) + self.append(self.stop_btn) + + # Restart button + self.restart_btn = Gtk.Button() + self.restart_btn.add_css_class("flat") + self.restart_img = Gtk.Image.new_from_icon_name("view-refresh-symbolic") + self.restart_img.set_pixel_size(14) + self.restart_btn.set_child(self.restart_img) + self.restart_btn.connect("clicked", lambda btn: self.playback.restart()) + self.append(self.restart_btn) + + # Play/Pause toggle + self.play_btn = Gtk.Button() + self.play_btn.add_css_class("flat") + self.play_img = Gtk.Image.new_from_icon_name("media-playback-start-symbolic") + self.play_img.set_pixel_size(14) + self.play_btn.set_child(self.play_img) + self.play_btn.connect("clicked", lambda btn: self.playback.toggle_play()) + self.append(self.play_btn) + + # Vertical divider separator + self.divider = Gtk.Separator(orientation=Gtk.Orientation.VERTICAL) + self.divider.set_margin_top(4) + self.divider.set_margin_bottom(4) + self.append(self.divider) + + # Seek scale + self.scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL) + self.scale.set_hexpand(True) + self.scale.set_size_request(140, -1) + self.scale.set_draw_value(False) + self.scale.connect("value-changed", self._on_scale_value_changed) + self.append(self.scale) + + # Time label — fixed width + tabular figures so updates don't jiggle the bar + self.time_label = Gtk.Label() + self.time_label.add_css_class("numeric") + self.time_label.set_width_chars(18) + self.time_label.set_xalign(1.0) + self.time_label.set_text("0.00 / 0.00 s") + self.append(self.time_label) + + # Connect signals + self.playback.connect("playback-state-changed", self._on_playback_state_changed) + self.circuit.connect("currenttime-changed", self._on_current_time_changed) + + def _on_playback_state_changed(self, playback, state): + if state in ("playing", "paused", "ended"): + self.set_visible(True) + else: + self.set_visible(False) + + if state == "playing": + self.play_img.set_from_icon_name("media-playback-pause-symbolic") + else: + self.play_img.set_from_icon_name("media-playback-start-symbolic") + + is_ready = state in ("playing", "paused", "ended") + self.stop_btn.set_sensitive(True) + self.play_btn.set_sensitive(is_ready) + self.restart_btn.set_sensitive(is_ready) + self.scale.set_sensitive(is_ready) + + if is_ready: + total_frames = self.playback.frame_count() + self.scale.set_range(0, max(0, total_frames - 1)) + self._update_time_label() + + def _update_time_label(self): + self.time_label.set_text(_format_progress(self.circuit.current_time, self.circuit.total_time())) + + def _on_current_time_changed(self, circuit, t): + self._suppress_seek = True + self.scale.set_value(self.playback.playback_index) + self._suppress_seek = False + self._update_time_label() + + def _on_scale_value_changed(self, scale): + if self._suppress_seek: + return + self.playback.seek(int(scale.get_value())) From 8516b0ccdd8f4d100798bcb48cd675343a4ca693 Mon Sep 17 00:00:00 2001 From: Ekure Edem <61796351+astraldev@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:59:07 +0100 Subject: [PATCH 37/37] docs: add preview gallery and demo video, refresh project docs - README: click-to-play playback hero (-> gallery/ggate-demo.mp4), Screenshots section, v1->v5 history, accurate requirements/links - NEWS 5.0.0; INSTALL.md from-source steps; root TODO roadmap; meson_options profile description - gallery/: procedurally captured stills (themes, playback, timing, preferences, properties) + 1080p/30fps demo clip + index README - build-aux/: add capture_screenshots.py + make_demo.sh and remove the dead, diverged scripts/generate-resources-xml.py (scripts/ folded into build-aux/) - add pytest dev dependency + [tool.pytest.ini_options] Co-Authored-By: Claude Opus 4.8 --- INSTALL.md | 18 +++ NEWS | 10 ++ README.md | 84 +++++++++--- TODO | 41 ++---- build-aux/capture_screenshots.py | 189 +++++++++++++++++++++++++++ build-aux/make_demo.sh | 24 ++++ gallery/README.md | 63 +++++++++ gallery/ggate-demo.mp4 | Bin 0 -> 1491181 bytes gallery/ggate-playback.png | Bin 0 -> 60429 bytes gallery/ggate-preferences.png | Bin 0 -> 92330 bytes gallery/ggate-properties.png | Bin 0 -> 70883 bytes gallery/ggate-theme-classic.png | Bin 0 -> 59971 bytes gallery/ggate-theme-frappe-dark.png | Bin 0 -> 63188 bytes gallery/ggate-theme-frappe-light.png | Bin 0 -> 60766 bytes gallery/ggate-theme-mocha-dark.png | Bin 0 -> 68401 bytes gallery/ggate-theme-mocha-light.png | Bin 0 -> 59135 bytes gallery/ggate-theme-space-dark.png | Bin 0 -> 61083 bytes gallery/ggate-theme-space-light.png | Bin 0 -> 60269 bytes gallery/ggate-timing-diagram.png | Bin 0 -> 67862 bytes meson_options.txt | 3 +- poetry.lock | 142 ++++++++++++-------- pyproject.toml | 6 + scripts/generate-resources-xml.py | 49 ------- 23 files changed, 475 insertions(+), 154 deletions(-) create mode 100644 build-aux/capture_screenshots.py create mode 100755 build-aux/make_demo.sh create mode 100644 gallery/README.md create mode 100644 gallery/ggate-demo.mp4 create mode 100644 gallery/ggate-playback.png create mode 100644 gallery/ggate-preferences.png create mode 100644 gallery/ggate-properties.png create mode 100644 gallery/ggate-theme-classic.png create mode 100644 gallery/ggate-theme-frappe-dark.png create mode 100644 gallery/ggate-theme-frappe-light.png create mode 100644 gallery/ggate-theme-mocha-dark.png create mode 100644 gallery/ggate-theme-mocha-light.png create mode 100644 gallery/ggate-theme-space-dark.png create mode 100644 gallery/ggate-theme-space-light.png create mode 100644 gallery/ggate-timing-diagram.png delete mode 100755 scripts/generate-resources-xml.py diff --git a/INSTALL.md b/INSTALL.md index a1af02f..f7ab747 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,5 +1,23 @@ # Installation Instructions +## From source (development) + +Make sure the system dependencies are present: Python `>= 3.10`, GTK `>= 4.16`, +libadwaita `>= 1.6.8`, and the Python packages `pygobject`, `pycairo`, `python-igraph`, +`shapely`, `packaging`. + +Then run, from the project root: + +```bash +python3 run.py +``` + +You can pass a `.glc` circuit file to open it on launch: + +```bash +python3 run.py data/examples/oscillators.glc +``` + ## Flatpak *Coming soon* diff --git a/NEWS b/NEWS index ea3798d..1d1127f 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,15 @@ # NEWS +2026-06: version 5.0.0 + +* Animated simulation playback with a floating transport bar (stop, restart, play/pause, seek) +* Playback duration preference; only circuits that evolve over time animate +* Simplified header simulation controls to Play/Stop +* Recompute the simulation on live edits (switch toggle / property change) +* New themed component icon set (ANSI + IEC), with light/dark theming +* Revamped timing diagram (Adw dialog, themed Cairo waveforms) +* Migrated dialogs to libadwaita; build via meson, with CI + 2023-09-03: version 4.0.0-rc * Changed name to aid publishing diff --git a/README.md b/README.md index 4dda88e..b044922 100644 --- a/README.md +++ b/README.md @@ -2,38 +2,80 @@ ![GGate Logo](./data/images/apps/256x256/ggate.png) -A logic gate simulator for linux developed with Gtk and python. +A logic-circuit simulator for Linux, built with **Python**, **GTK 4** and **libadwaita**. +Place logic gates and components on a Cairo-rendered canvas, wire them into nets, run the +simulation, and watch the circuit evolve. + +[![GGate simulating an oscillator circuit with the playback bar](./gallery/ggate-playback.png)](./gallery/ggate-demo.mp4) + +▶ [Watch the 30s demo](./gallery/ggate-demo.mp4) — or browse the full [gallery](./gallery). ## Features -* Includes Tri State Buffer -* LED and 7 segment for state viewing -* Easy to understand UI and accesible shortcuts -* Contains all logic gates with appropriate diagrams and alternative (IEC, MIL/ANSI) -* Supports Simulation and Timing Diagrams -* Animated playback of a simulation with a floating transport bar (play/pause, restart, seek) -* Support exporting of drawings and timing diagrams. -* Variable component properties -* Contains all types Flip Flop -* Has display contents like LED, 7 Segments etc -* File handling support +* All standard logic gates, with both **IEC** and **MIL/ANSI** symbol sets +* Flip-flops, counters, shift registers (SISO/SIPO/PISO/PIPO) and a tri-state buffer +* State viewers — LEDs and a 7-segment display +* Interactive switches and a clock oscillator +* **Simulation** with an animated, **record-then-play** playback and a floating transport bar + (stop, restart, play/pause, seek, live sim-time) +* **Timing diagrams** for the simulated signals +* Export drawings and timing diagrams (PNG / PDF / PS / SVG) +* Per-component editable properties +* Light/dark theming (Classic, Space, Frappé, Mocha) +* Open/save circuits as `.glc` files + +See the [changelog](./CHANGELOG.md) for recent changes and the [roadmap](./TODO) for what's planned. + +## Screenshots + +| Timing diagram | Preferences | +|---|---| +| ![Timing diagram](./gallery/ggate-timing-diagram.png) | ![Preferences](./gallery/ggate-preferences.png) | + +Themes ship in light and dark variants: + +| Classic | Space (Dark) | Mocha (Light) | +|---|---|---| +| ![Classic theme](./gallery/ggate-theme-classic.png) | ![Space dark theme](./gallery/ggate-theme-space-dark.png) | ![Mocha light theme](./gallery/ggate-theme-mocha-light.png) | + +More previews live in [`gallery/`](./gallery). -Check out the latest changelog on GGate [here.](./NEWS) and [future plans](./TODO) +## From v1 to v5 -## Installation +GGate began life in 2012 as **GLogic**, a wxWidgets desktop app. It has since been rebuilt into +a modern GNOME application: + +* **v1 (2012)** — initial release; basic gates, oscillator, probe, timing chart. +* **v2 (2012)** — migrated wxWidgets → GTK+; added the property window, IEC symbols and preferences. +* **v3 (2022)** — ported to **GTK 4**, added the tri-state buffer and shift registers. +* **v4 (2023)** — renamed to GGate for publishing; revamped the timing dialog. +* **v5 (2026)** — libadwaita throughout, a themed component icon set (ANSI + IEC) with light/dark + themes, a meson build with CI, and **animated record-then-play simulation** with a floating + transport bar and live recompute on edits. + +## Requirements + +* Python `>= 3.10` +* GTK `>= 4.16`, libadwaita `>= 1.6.8` +* Python packages: `pygobject`, `pycairo`, `python-igraph`, `shapely`, `packaging` + +## Running + +To run from source without installing: -To run without installing ```bash python3 run.py ``` -GGate will soon be available on snapcraft, flatpak and normal apt. View [installation](./INSTALL.md) for more details - -## Contribution +To open a circuit on launch, pass a `.glc` file (examples live in [`data/examples/`](./data/examples)): -GGate is open to any contributions and translation aid. +```bash +python3 run.py data/examples/oscillators.glc +``` -### How To Contribute +Packaged builds (Snap, Flatpak, and meson install) are in progress — see [INSTALL.md](./INSTALL.md). -Fork this repo, make your edits and submit a pull request +## Contributing +Contributions and translation help are welcome. Fork the repository, make your changes, and +open a pull request. diff --git a/TODO b/TODO index 4f59dcc..25e1684 100644 --- a/TODO +++ b/TODO @@ -1,38 +1,15 @@ # Todo -* Animate logic circuit +Roadmap of upcoming work. The detailed working backlog lives in `.agents/TODO.md`. +## Planned -### Icons +* Packaging: Flatpak, Snap and Deb builds +* Guard against over-large circuits (warn before a load/save/simulation hangs) +* Auto-scroll the timing diagram to follow the latest timestamp while running +* Playback polish: frame subsampling for very long timelines, optional per-session speed -> Done +## Done -- tff -- rsff -- jkff -- counter -- dff -- 7seg -- PIPO -- PISO -- SISO -- SIPO -- counter -- dff -- adder -- and -- nand -- gnd -- not -- or -- xor -- nor - -> To convert - -- vdd -- tribuff -- sw -- probe -- osc -- led +* Animated logic-circuit playback with a floating transport bar +* Themed component icon set (all components, ANSI + IEC variants) diff --git a/build-aux/capture_screenshots.py b/build-aux/capture_screenshots.py new file mode 100644 index 0000000..3695f12 --- /dev/null +++ b/build-aux/capture_screenshots.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +"""Procedurally capture a gallery of GGate previews — themes, playback, timing +diagram, preferences and properties — to ./gallery/. + +Bootstraps exactly like run.py (compiles + registers the dev gresource, so themes +and icons load), then drives the real app through a sequence of "scenes", grabbing +an in-app snapshot of each (no external screenshot tool; X11 and Wayland both work). + +Run on a real desktop session with GTK4/libadwaita: + + python3 build-aux/capture_screenshots.py + +Must NOT run under a setuid/setgid shell (GTK refuses to init there). +""" + +import os +import re +import sys +import unicodedata + +import gi + +gi.require_version("Gtk", "4.0") +gi.require_version("PangoCairo", "1.0") +gi.require_version("Adw", "1") + +from gi.repository import Gtk, Gdk, Gio, GLib, Adw + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, ROOT) + +import run as ggate_run # noqa: E402 (run.py's bootstrap helpers) +from ggate import Preference # noqa: E402 +from ggate.Themes import THEME_REGISTRY, apply_theme, apply_chrome # noqa: E402 +from ggate.MainFrame import GLogicApplication # noqa: E402 +from ggate.const import definitions as const # noqa: E402 +from ggate.Components.Windows.Preferences import PreferencesWindow # noqa: E402 + +EXAMPLE = os.path.join(ROOT, "data", "examples", "oscillators.glc") +OUTDIR = os.path.join(ROOT, "gallery") +WINDOW_SIZE = (1280, 800) +SETTLE_MS = 800 # repaint/animation settle before a grab +GAP_MS = 350 # pause between scenes +RUN_SETTLE_MS = 2200 # let compute finish + playback start + + +def slug(text): + text = unicodedata.normalize("NFKD", text).encode("ascii", "ignore").decode() + return re.sub(r"-+", "-", re.sub(r"[^a-z0-9]+", "-", text.lower())).strip("-") + + +def snapshot(window, name): + width, height = window.get_width(), window.get_height() + if width <= 0 or height <= 0: + print("skip (not realized):", name) + return + paintable = Gtk.WidgetPaintable.new(window) + snap = Gtk.Snapshot.new() + paintable.snapshot(snap, width, height) + node = snap.to_node() + if node is None: + print("skip (empty node):", name) + return + texture = window.get_native().get_renderer().render_texture(node, None) + path = os.path.join(OUTDIR, f"ggate-{name}.png") + texture.save_to_png(path) + print("saved", path) + + +def first_component(win): + # prefer a component that actually has editable properties for a richer dialog + comps = [c for c in win.circuit.components if c[0] != const.component_net] + for c in comps: + if getattr(c[1], "properties", None): + return c + return comps[0] if comps else None + + +def build_scenes(win): + scenes = [] + + # one canvas/palette shot per registered theme + for name in THEME_REGISTRY: + def setup(w, n=name): + apply_theme(n, Preference) + apply_chrome(n, Gdk.Display.get_default()) + # match the libadwaita chrome to the theme variant (screenshot only) + scheme = Adw.ColorScheme.FORCE_LIGHT if "Light" in n else Adw.ColorScheme.FORCE_DARK + Adw.StyleManager.get_default().set_color_scheme(scheme) + w.drawarea.redraw = True + w.drawarea.queue_draw() + scenes.append({"name": f"theme-{slug(name)}", "setup": setup}) + + # start a run -> playback bar visible + scenes.append({ + "name": "playback", + "setup": lambda w: w.toggle_run(), + "settle": RUN_SETTLE_MS, + }) + + # timing diagram (history exists from the run above) + scenes.append({ + "name": "timing-diagram", + "setup": lambda w: w.timing_diagram.display(), + "teardown": lambda w: w.timing_diagram.force_close(), + }) + + # stop the run, back to edit mode + scenes.append({ + "name": None, + "setup": lambda w: w.action_run.set_active(False), + }) + + # preferences dialog + def open_prefs(w): + w._gallery_prefs = PreferencesWindow(w) + w._gallery_prefs.present(w) + scenes.append({ + "name": "preferences", + "setup": open_prefs, + "teardown": lambda w: w._gallery_prefs.force_close(), + }) + + # properties dialog for the first real component + def open_props(w): + comp = first_component(w) + if comp is not None: + w.prop_window.show_properties(comp[1], w) + scenes.append({ + "name": "properties", + "setup": open_props, + "teardown": lambda w: w.prop_window.dismiss(), + }) + + return scenes + + +def main(): + os.makedirs(OUTDIR, exist_ok=True) + + # same bootstrap as run.py so the dev gresource (themes, icons) is live + ggate_run.build_dev_resources() + try: + Gio.Resource.load(os.path.join(ROOT, "dev-resources.gresource"))._register() + except GLib.Error as exc: + print("warning: could not register dev gresource:", exc) + + sys.argv = [sys.argv[0], EXAMPLE] # MainFrame opens sys.argv[1] on startup + app = GLogicApplication() + + def on_ready(_app): + win = app.get_active_window() + win.set_default_size(*WINDOW_SIZE) + win.present() + scenes = build_scenes(win) + + def run_scene(i): + if i >= len(scenes): + app.quit() + return False + scene = scenes[i] + try: + if scene.get("setup"): + scene["setup"](win) + except Exception as exc: # one bad scene shouldn't abort the gallery + print(f"scene {scene['name']} setup failed:", exc) + GLib.timeout_add(scene.get("settle", SETTLE_MS), lambda: capture(i)) + return False + + def capture(i): + scene = scenes[i] + try: + if scene.get("name"): + snapshot(win, scene["name"]) + if scene.get("teardown"): + scene["teardown"](win) + except Exception as exc: + print(f"scene {scene['name']} capture failed:", exc) + GLib.timeout_add(GAP_MS, lambda: run_scene(i + 1)) + return False + + GLib.timeout_add(900, lambda: run_scene(0)) + + app.connect_after("activate", on_ready) + app.run([sys.argv[0]]) + + +if __name__ == "__main__": + main() diff --git a/build-aux/make_demo.sh b/build-aux/make_demo.sh new file mode 100755 index 0000000..53d6ffa --- /dev/null +++ b/build-aux/make_demo.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# +# Turn a screen recording into the demo clip used in the README / gallery: +# trimmed, scaled to 1080p, 30fps, h264 (web-friendly, no audio). +# +# Usage: +# build-aux/make_demo.sh INPUT [START] [DURATION] [OUTPUT] +# +# Defaults: START=25.7s, DURATION=30s, OUTPUT=gallery/ggate-demo.mp4 +# +set -euo pipefail + +SRC="${1:?usage: make_demo.sh INPUT [START] [DURATION] [OUTPUT]}" +START="${2:-25.7}" +DURATION="${3:-30}" +OUT="${4:-gallery/ggate-demo.mp4}" + +ffmpeg -hide_banner -loglevel error \ + -ss "$START" -t "$DURATION" -i "$SRC" \ + -vf "fps=30,scale=-2:1080:flags=lanczos" \ + -c:v libx264 -crf 23 -preset slow -pix_fmt yuv420p \ + -movflags +faststart -an -y "$OUT" + +echo "wrote $OUT" diff --git a/gallery/README.md b/gallery/README.md new file mode 100644 index 0000000..b09d7e9 --- /dev/null +++ b/gallery/README.md @@ -0,0 +1,63 @@ +# GGate gallery + +Previews of GGate. The stills are captured procedurally: + +```bash +python3 build-aux/capture_screenshots.py # the stills below +``` + +The demo clip is a screen recording cleaned up with ffmpeg (1080p, 30fps, 30s). + +## Demo + +A short tour — opening properties, changing an LED's colour, running the simulation: + +[![GGate demo (click to play)](./ggate-playback.png)](./ggate-demo.mp4) + +▶ [ggate-demo.mp4](./ggate-demo.mp4) + +## Simulation + +![Simulating an oscillator circuit with the playback bar](./ggate-playback.png) + +## Timing diagram + +![Timing diagram of the simulated signals](./ggate-timing-diagram.png) + +## Dialogs + +| Preferences | Component properties | +|---|---| +| ![Preferences dialog](./ggate-preferences.png) | ![Properties dialog](./ggate-properties.png) | + +## Themes + +Each theme ships in light and dark variants; the libadwaita chrome matches the variant. + +**Classic** + +![Classic](./ggate-theme-classic.png) + +**Space (Light)** + +![Space Light](./ggate-theme-space-light.png) + +**Space (Dark)** + +![Space Dark](./ggate-theme-space-dark.png) + +**Frappé (Light)** + +![Frappé Light](./ggate-theme-frappe-light.png) + +**Frappé (Dark)** + +![Frappé Dark](./ggate-theme-frappe-dark.png) + +**Mocha (Light)** + +![Mocha Light](./ggate-theme-mocha-light.png) + +**Mocha (Dark)** + +![Mocha Dark](./ggate-theme-mocha-dark.png) diff --git a/gallery/ggate-demo.mp4 b/gallery/ggate-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..db2348460fce1999bfcc0ae29eaaea437014ebbb GIT binary patch literal 1491181 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
    AGSzHNjQTmY+oMN7b#g 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

    r)ax(n0WH+dZL=_Cf=q&+ICf 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

    w@WdT$&uq8jq%1t7WDi zx&UbX`}3S9gQ;II9Ao8&B(XxaqFNO^i$Mn54Fh@So*Zf+y#4I3w?VwCYq7txZyG?$Lgy{b(-xbz#Q&p{S>qmjc0PIPv z>;8v7#A@9y_=CGQjrAyAs%O{|3n%`6zLxCXgKN(({U;vF?YAoqZ>9;tP|#TWyt?tc z_juK`3~VK5ZBflCw6WaQ%37h7W=bvV|43JY|CCJ!8Hr=86HoP5rr~RkHS2Q_h*5<` zhZsJ;{UoH8IMI(xB`n`GEVz!}v#)A>IX>I*tf(4sM>4Qx0&A6G>@38r0Ox3}M4pnu zB*|Fr%CzE9TF6s_!-(xND@J-~ITp;c#|2 zR;%WYmryPOJ(3q&+L}>Gbcg@YfH)o1@``1(TMTl6f72etA)4w{q8wFRYLq%4?u%4V zz5i7yV(p1w=;bqE1Va$)t{?vHE0ShTh+x*lB-ir7oJXL+Kvdb;+N;B*o5m}dxad2t4<>3f$?^z1?ty>J1c7i z_2&axN}b2{GG=0H1;xba^l)x0W4rs=|TA7-Ry|K?3^88#~yno-iCCOW!SAISq)(6~~B z-r*$mJ{LkF@vD7MSgLaOTjXOK+5C4pOwi1kRo*yuyyH29GUzs)2Bs|ih=aJ-O6@u- zZ3y#kJ~3P;i1UnyT>T)u@wW=3gB_Y{$qzF$Esj_gRMvkkMjMSJ$M5ytAUM9dSB z%1~M*-gYo8bm=Vl#UUr&5kA2y;pT8i?q>qk=5q*PwcxKE4~+%9qu;Y(#a~$GWH`x> zp2Nsp0_qZrCT6S5oJVA%N2LF}qM)6N9vxu*RB@(~5D4Ge<1LML6HGu+5xHVpuHCCy zkIhso?NCc|mR6+X4KOf}amaA!IV)0w%YbFTKe#ovh3$qzVjP?cb9Mvk%WoRW_u+RD9gLa5C(d@|itA_K>CdcT#p@5*wgJA2|O zkB45r-FDqa{<+lPnkBm_D}B89chC@>hJ5z1ztv&$qjgk{81q@@67RkIeDxKW0nqDI z@1r3W>w&4Sv5(oT&0aTG4E!j!0o^_OgNV!ah01-DFA&;3mkH-Ba{5CIK&_i(-f6{l8+DOkYs8ro;6xZo>Gprw0{LdPddQI*IbBWnlT={sYkmSwx>H)lp z9}-&~G9XoRf*x|6sC4;u3_#c4&E&pzvmygU;-G6>l8Oy)!4$-{@w~sueoiqLh8ZZ-WOG>9tc)p+j`&InZ?oIL*Svp zl}@?HVlw#&I_aK@`0Y|xBaO%D2%VSR2ZHw3jW9<#+ED3BO_0E)Em46h z?60JNzG{4q85f{WWLC!TefZVM^Ztk5Dq!(t*ioCjjjgnWlbl$)Tj?33QS-@ERj`_V zt^#cL$DmbB+N$uVytR+xv0HHSgbC3ctf78a@75QuoW3RU=*iNEZw1i6$N$th&7;=A z=>BA9nqwxT_>}YQTe(iZO&SaKZ}akCsHSAR5pj7xG#=Zgr-Z z2u6j3?XdGhqwB-)q^EDW+$X)L>}-Wbf2qXZa=*e5f(7jI?Huas3*Hdg_XrX z4)27fE(cV+0}#SeFUzU6^=8Z8U!Ef_LRGlmewiJ7Zn(t0dv=zp88?c?9-Aa|)GCi2 ztHVQ6rDwIE`M@bRTEE2cysB)wqy$~x=khS&$5o#N|~LfA!;7 zK7gOOr-Kfbxp*dA&J!?acOFgGc)rK8*abPbDZ7)PbJ7bj(OGaVbM?gVG~W#qZ?=lT zq8Nh<*x&WXLz_~r&bhk`#MQ%CYp9d)hEfFGr1L&pg@7m~V_@T2C_rWY9mRbq*S#+62=Nqo7a9 zrI{a~@WCuN7bCYBJcsR4aCUerEdMC9ZapniMTY5`4z$QM1Lu&vX_323{IEn@Gg&I{2+@gU4fQq%lOz zc+G8rwPbbfGP8;;>_6!|7+em<#W6#r80DEuY7(&kbsjfg(gwemdo#;@BOeng2KChy zT6?7-V|VdtM3puedy=k}M5Uo4=-rrAjH^w;TNy|7L{K$5DF=b+m@V4}PJ1X^%;~opveTMg&*OBL2`-u*dF|dca z#&tW;xbG~IMOMpjr?q{Tt9<_U>TIZJvO5aIMep|K#g5y|!*%yfP3Bp}>0 zO&l1e_*ifsN1G>p0I^<@r>En#Mfc=r6wQo3n}|EK^WYd!GeafojQeqKZ&KJyO$pnt zf6jJsu)FILR~1*QF=QfFz);7N2sl+4w;8CuJ;H>=??gl8pDN6bEZIpTPd{KDVNWXe z+a(wLg|xAdivkH8QT8){R#MG<`*l(peg5cXlq9h?;<`{38M_(t{)tat=($KgW^X&P zPlb)_sT^KuEjG@D{gHKd)H34+wSSwqGI_ep-lX=(=HR}fHN(Hl>UGT4TaBfDKN+GZ zOMJAk5lVU)QBS>Bovu2j5EClvFJ+SF9c+ZM&vZK8OHd$-5g6*J_~-cp4c_Pzm+E*o zy)kP!?f!RRN>WZK&7+?@ZJB`|+Qh$r%*}A#FLS=Yly~SmEo87CU=l)iGx9PeThaZ| z`5J*YZQnHr6)zIql>uvx!G+^Uul`Fq$5$D@?$d=aes#J7WgjDP9@eKrnDm_b!0g;6qF$r0ZYPcg5hZ~jx zGIkBAkKi`q=h-{mWx1|ZLvDj2{m-c9LbgAxZG}3nDecA2oK697MS8wDvrHa?3pIQu z$E3|=!!uraAya#iT^?Z(7jFdTBun`Ix$djkUK9GgX8QRaD$@^al03Z_-nV-5 z{IhH3dY+Bw^zCmYd7x`%f3zhS?v73OWp!hS{8Sar7@Fpn!n(|uZum~98MkEBpZ&bx zpe%KaeS%Dv3UawdfmA#0uH>qCFlgm*{#N;z$g_vr-<#iBhqmI!7QB_S&EJ@`U4Y+PS88dF<6)Du!2dO%I&$yiX`E>DBJmJ8(tpif_)(metwXe~U zT@;&3Wtpgn{B8{vgIaCE2kl7GD1)TiR{RvvQ+?D!YvmY6js21u&5j9jJFJ){yNK-5 zXVoVp(;eaa^cYA3%dW=ZUs-hmi*Njj_mxLG z>eQ~7l`57bv%K4P!QjwjztU@%VCyB}6O&k?EmdO0?(PsS1BvFSvjns64NN;`Sbqu( zoD%CG*DF7Q!(MYwPHU~_GQgS~_RHga*^Nn8sS;0Y=<&>v^Tfv2&(~|fv9@h{Mo?@v zy*H8TQ#D2^gYx;fs}1C<)>9?lJldwy(~sqz^6%vshdlPyl3|JgP$H0}$Di)YGewD0 z7b)=@%XxF7t<3m|$z6fiy%qfiYo*b~cZ*x0p{z{4y!=ZcldZ2M*bH~&KeZ=vy*&6y>W#NVhF-a&DrFX-%7>5nHNok;Lz@v^oP$R= zj+Um;%acQ*_R#j8_zLvOjjIi?zYc+EXg@fx;wy3TUI8614%QsqK$bbPkUsq)Yut77uxD#oF7>g9I^w=K0o^RkOD%AG@y1w_ z^FAJp0igy%bZ6~n5cd1>6C?R7k469ow=L{L51=J<>iUHu@7V|+o}8H3ZTXXML)YnP z$F-*N4vhQBphIhnCfv2d`!|;Xo5bZaAGDI+y8j+!IkAy!iS7p_r)3;H` zhF;Be3#-?klaUEZ0e{AM+hm||hmq(7w*AdN%Nh{euUapet4-Nv_=<|Q&-wAFMCZG< zR%BL%WDn$e9dQc0wxo38WkdglFKxV#!iv$^J6fo1+`WY6>!cu4W{h3Bf^IL+<>-3( z;PQ#E27W$bP|=$Y_Q)>qM{B0h&*(?8p ztg~$?!AZw7+X`#6jcUHbFzU#a-BqVF<9U-fgJH{kk~GWy3_nW7wwcT`13zU4KI=Fg zS@$YD7irSQzwth!{8cgIuZYD?w<6dmT5K=MTKS4t+}OJuIudS?Nv^V{!Nnu*hVuLF zZ*$h0E%40<&z9fOdD{1`daz)Q2gd0PISXJ@^GDXZVs#_SntSuu;+x!wdCTX&N5C*x zty779x;d;X)L^pGm6j%0@B!>EZA$)F<$emSB~DVfx9l7zZ%B!^N2L2Em9%}nNn)CJ zx1Jd_`9N9bNu6)9?BMf&pY;@~3UaBD){QTE!^q!kfp>q$PW4Sqz0huLqC^(`-ZAx5 zv?k#U0r6|uJZ*a3C#3wEj<^ClRgDPTp>Lhf`xF{C>=M0k3G{Y}qM=>)H$SlQ!=}T-b(&2qED{l{Wm|kMoX}1x0<|cX;bc#xQvS z;`KtmS9DOw3I}Mq#L5G8`=w)O=3^pjVM(1N&c4EMr`cGuUaWu8#{H=-$PA0{v++}J z`JZECFdeEhy}3cA#=*~3u}0SswOiA&HC$q&C*0df!ji)}_{!ha2+I0S0bex(Vq;kt zYw`ReEduN2=O@^`hrl{q@L>TJ{7IlmEgXFYGEb7*dftyDoy;Ggq}wixCk8gV^~7O$9a^GeenQ7-v4y*iIZ0q*rA z<=cX;&Z*4fkzM}J4-c|STqc;wHh1H)vhgL|t*Czlm6ufBD`S2VD&8jei7KxDHhq!# zqt_3~FW(=X-XE&IJGRY^D{uL8>-*;^1^{r7V}=48Nk9|*>|ho@!7eNNPR11sy4ICB zY!Xe>{CFgFM(9t)TJxM!gd#>~XUemkV#aK$W@h!R3Aq5P9t6pZpEx z{p!sY9DZf3xGzDEw^f>8mS%~iL_$n#8B zf{<#UZL{Y{4Pw56DUB$A@Q`k9z{7dK#7X0X_H%`nfobuS<48B@XPH8pjs(2k(AAmN zpFA~=K`mZYt4m*Yl?T2^GY?Ovw?ky2mdg*1wnMm|gWGp#;~$OBvJE|4OP`$r(g!%< z=m(u```fcrCDGG~V%xXwYpIxX_vz;For?_W3gplb+}D^UtscsX4VH@4>&?-R%V>3m z1a3%*Ba2vjRbpqf^*-6wB+uD#Bb^q;5*G{GmCO~H%A(Yei%SivZ~{b=wBnrTydh|e zs;E!xnVHk){*|@3Wb6ePEr zsYN)e&5J`nQ>l+Oo>t-PEk>a19Ezc@C`UPa`Kqf8&l5MeZjB~Z9AMR&01 zJ9`NU=DH;sZ!7uK{4Bkj{1c1}tv`+!xbUHgGknqZl5TcefruhJKvQ8jpVulekt$vQ zisO5@L|ERKgo0qNvhG`NdN%u#UX~{4GCi6nUD09i-bxUQKTSJPQ_YqG^1&iJa>|^3{L}f2Pzv*Js(48 z!j0OULMe-LZ-XTHrA_SD(<+R@+H)3G?4B$)4V~`*Wu4KLTQq!xO~ccPx7YsyyFf(0 zjEi2f7q1Ay-+r>920#pLQuT~oVJb=fJtxFoZc_`(!r~QDra7KQb=hma$6@Y0*e=AHC0V668dm7nVd+sNb#;$@m!3fA^Q$LfC@@dY2YC8oCIN=8KS%vI=N ziO47q2Iu4rz{%0a3@?=sqdGqKh)WDQwnkF{+PPc*O} zwzL!vEa&=Z?HWul-p65NVW@&h!&0RZsd`lc^$VU3_oHN<&b*8Dl$5rPB;$NNK#w(0x zfcOV|d{szcBL`UcxKaGqn#q1kSf=ASv#blz#n(hgx)Si-lTR|k^^(2yogeQy&raC> z@o#IMAgZKrYQR#M^~2xaOO5&^WB^z;d?)yjznk-FVvy4mMYOoW^dAE4k`?Y8AOkV! z#=GX!|Cg)$XC1(rfZHRoTHmOGo6 zr*Hziaz|GH-}i}wCC~5x8S7WXwaRW736->Me4+vtzA2@O38CqBS169mG#G$mA; zswo%dy_r&}2hoH>Htb9N&D#ACORtsi&i;&M1{ zOHiP=T2m9UazP9c5VlS<>H^8cDY(Q{PZchVviaVT@1$obW<{u=gsHx< zvhOrdYK`);@FORn5>MG)sB55)*`W}TVp^S zl{Ie!>6Vre;fwv2Wuw9KvLo>q8}qM93^q!jwIWGF#FErFj^o-~=ckHsQ@T8jc&Q`z>{!kazB#iYM#F1&Z&9I$YpzJ5RLdodN2 zfG;1{`*3X33ONV{aJ+smX;h>_>dy21Q7~S8fqj#5N8*HQaxVn3;{OUPp^h)NiE_k- zSXZz$yZ4U=69!Rf5%gRc*`4^c)YBFy&;+Lc0zioQ3r?N66BfU+7|w6V4WS7jrl6dD zJ$oT49qpjI?%Z|>krM_94bt#T*wH^01rMz>5@Y~dAx~P<0L^)&U6_-V zrzRldGwf|L3`yBP@4A196MZT z&js)&HH&pi{O0chCv#0hKliWFj5^0!amW->o*Mpv275*-1C*8yxX9xxRQ3rb+ZA z0-L81A{#K8$G_K(E`L05avG8mo0i3t;3pnj&SdfdE(1CF)TPf5L-6SBR4;ip^b-c{ zA(#E(`tMTpHkx@7W_Ut^VIr!5dtrDydzSu#FBn3EovAcq`bsQL6nMWPtAfhWRdCj$ zWtlaC9(sIr)Dc~KAdVGpk_bfIQGATZp~m2h13K3U)3SzhwaP6vuhZT@%{jtBJ%NYE z!kiW$v27jlQ~>ugL_SHfz%X9HFix8qq0Rx|z6+TU;DPC^yYR>FD@bXJ$eph`HF%3m zB>_yJ%6kL!ciZ4sb$RC$_-Dk8J^R$?^Hbipei6vkCBB$YUAYPQuV=+DBPC5=^IT;` zTs2QU5qben`6^+Iejxr$3O{St8B}tr@#g&RUX-7wB6zQQSuL{{xFV{LAjP?s>)B$s zJ-nmX(-&MlkZA^0v5N7$k&cf1d3sw!v{*vR1*(Le_crH8VuD82t|9t`REu_N|$9>mb<0&BZ(FCk)? zk6PT-w6Q|oX1pNZzeE4e!t<~ddHIn;7LodM6eX<@-(VM+?`YKq>|B#9-cWUy~LGQMPV*pbu z(WM;c%UxQOMWNW|7<>0h$g)?(PDiLdu^O0EV(;N_Z>9!Wo;MZIu*F7aQ@&PuvJ82efM2l;eK?A9}i|b(xb-6m76g-X3 ze3S;i5C}JoZ#1S`!6|bcdN+(3!*p3uyUsWpUI5A0M>-si^h9t!mF0%4b8f0}=J#a25RXif8su5^Gic2aE05P%qfCjopO`I*{D z>I82FuwIdTVW3;2zmo_2>-Is}1f{vui$T`CQwoOlw$b2K_cBhOr~;~wcIMpwqCa#S zn#giWGun(td>!IFY~dZCs5lA^w%M1B3q;B+O+KL~-r704%I@jd|J`M+!J_ zl1r{FGUDb*S4}QSPzCMheZVogooN(UoIUUR7tiM}&N{EV(-2@ftT7NP-LUR&Ws-qF zyk5o71SBqTbDNK`o{{p2pJ~+Aq*?89z9#QXK+vdUj%T0nKOKRlvx9nW1wgojwVT!f zIsjk*DYuXV01O*@$&HIUPe+?iZln3f@l5I>XX@uO>wu8xDt-^82?H{1EXj_`kLvI< zVDuo>A+UBa>krlDR-9@N?F5@b1&!vIOztdcYPIzz+UM6x$V5nPI2J=dj&ulin#UR~ z;)ijDJ0xIn3G^soByv|{%zqE2t7q6~td7h0mW!f_%v}rjnEzW(P=dX5Sxx2?f{_Ua zDso1OS8b=or~C&m8k~jhkjUV(_cpQxCY^T`yJn_t;@!Ln$?~v#TUcqu)cPFsIgyT0 z(zYLoM+OK-_XHjBOEt|CSN!@By)0)oEvu*LRbl(OX_^*G=spUJpsR@z$q**-uf7To z3JylNrv3xi@ZD8vdVJ~Ffn4pwl~%8mhvig!BqhbfiWjNUIz1L2R8}aGaT8WEsPTC# z?>CzmO=R(hq!Je-w#`fuV*5qBvo;o2{O(U#7$KAP2^Wg-4iy-lS!}UL4b89D(cmgeRwZf@=bisJxQ+8E~+>)Jz{OAiso{vitbT;mx?~fyhRM z9A0#~xb>BdYuzNO`@|IeJwXFqf6*3*tIV-O=cYStySymgdw46y`!$RRrPTlg-8sSN z=JSp~=W=DKQBV=o#G5}QMw>&Hbg1ZU0B+U^*)ZgqjgC-9vh8qM{u-Y_>S9=`HeD_E zDy-EeglFNq>%pYI57DJwQ*^elZ5U{ipBF^8wivMwGX{-)1)mYKWotU=lnOBR-pC@; zdxt|qDR~@j1!vml{2$5v4@_zfG5uD+wPZQRF={2%0CHS2uHSM~W=r*5Y@z=s3sAu= z;XrgQ%;L!IZcEQ{zCG;?DaouddtQ7*WA4jt$h%6Eg5sW-A#dxT@SU#Bo2$N$hSN~DJm2T3V0(v(YfWPQ;5_9l= zH1p&*a)$5p?x7ZE^I*b26&szU46JNIB^zaRFq(bGfPj(AaCAqbbAD1npk?M3MzD)P z`#jQ}`E&$M&clE>qJWbhMIm~4P-UIyVw3yC{_4zJagM8E5SyRUn?G?;XIQv__Rb#K zzCi8UL|+86dBB^Lzsd`*DzhydBk>{JXIW=`$DV;rt+p}>?A>U>Vn#t532s#A5|~t` z`}5pjYM}=u)vvp#4;9ZjogjcFRJ@VGNM*sE7#b7wy&_Cy7j*?$ zJaOkW`MJaia&21Fgih`p@R$);je9$-S6yn~Fe&fMqh(QB0tZ$PRk_yi(Nz2Q+j?0W zMfbvR7MXb2GF^BCQo4Q@#9(c~fh#<4qx)Oc{_`dTue#Vy$=)?;`Qp?Tt-<*hx=#lr zV`#dE=sx);21QMd%vi86wV)HT2dkRUV^OjLT;!c`QCXCqTdHdGt|6;hzC7!7FIfv< zl!il^RPRvO{8m}H7uLjE>1^~bdJ&guW0{}R=4R$A?+U$|w34}i;176dycMT;dAZnHc zs6f7hdxdbEoB1Dq_9j8xw7)ZzM+){%ENpP?_M1V`*>m-B{h z(kwYoE0yK>>3VE{d)|%HeWHc%(s402U}jm6V^{$5WkhTLpH7aAPkIY|m+o5z#43@Y ze-UWVI1ek`EcSt1LRz#;Yg_dl!uDR(rK@|NAA!E)L^mMBSfPX)x-0nRe$^h8{o#=8Y$iuIq-2JkEy)e0G@W& zjaQ?ry|p5D0g-`(=0AT_zz278nM2oR?%LNp5|LxOD5_6pZD58qZec-v=qW%{#t9#! zP__){@+KAR1nk?`)`EO-qK1pf*Kj{Q%@f!I$C&`b;vt+U&8mZ5|AiXTH z@WlN43rnovcu}E99&=-z6P&O1PLAMrdkbW?ec@v93nCSAjYEuKy!WSaTX6Z?iMNjZfRBf9m0de=SKk^DV&hKF-I=Gp*J%!^tjFE zFskj*dfinOguG|t>R~f-9jpKesVD=-(GQ_q9Vr+q5fb|R=9>;T=%KF4#ytZp_>l$= zex8DY0t9UvNCMg)3Rj9Sq?$Z$SRzFy#`r~zIk4>+#fP)nuR65&FU_1FxRk^V6!S@L z+ezf}qEk2eN7fDqlW5Q zj{!@y=v@k^Yu~ZN68G8+JV&{l2Dq}r0o|7f0c`OPyXd{(G~N)QG1-VJo1E8#OgZuD zglp84C4KE|m-sy`CDgMZOUM!eTvcCCf_et6A3ce!w275c zu`K+L1cJ}SWz?FnLZP}V>7NhbX}%1ePC~XC!-IYq0N^lY_OE;&93X(LJ?K^ONuj

    s(q#?HnJ#Sk=ofNs1&=JRp)3Krto&S5kwo7;97lq z`ar#}#_c*==1uZ1ZOfDV=W#|>^U)1OEDGgh4_ zW;Qz;_|6L-hOVSj5t5AwcS3WaNgM(by;kDdnE$(N6M*0z9$LLT4?j_$)g&45$-{sE z07ii0OC{QXsCjY7r29+w?szVgJv0)#j!RJ%g;ND;fWI?Q&7)E?o=MbOI}w80fhm(nD^{%7WrbW&s#tWpw7YWqNhc zb9J01qiD`rQJ5S2<)4UdEIU7NNk$DSZe8IWT`o`*9iotS)@<)}ah>$X+{g?lbo{%x z7;1aoFurGZYzbh2Jv4BKpL8%|h+^&+J~ma`q=qo)?Q0I-Q3NdSavdMHEh?sViSD;< zFfeLX6iCghNGDN7P!Qj%md4foothP3T%&zFm59Jp*5VyilzQHH=TDN)q-=FGE+lDrgBsp|~qfP}nf6=(%#Wwa6xt_1)g)0gLVf7(9Yk{q+(T^^t9!7WcbQEgGMSmA&CEj$N&HX0KbUu ziPeaJOgC5ya`Dk(uR9E!mSBZMDo8fsO43Z`UW594i(rlxqC{h1Ri>Z|+2X(*v(F<@-XgfBw+EQ|Nl3O6x* zx)Gf;13p_!lI)7@pal^RFxM33rliMHqd!mNjC7+elrZ=Z&c^kM?RY&Ja zw&Gd2;_gLoI|-O&VOAFL7&*Qg8iC96TR;^x6X@on#RnlyJqQIeKS0`wZQ*^ z5JDE6Vu?Lb5^Ar6N%o2YQx^x%uw9*EyV~D+++RY}0zs=GTd|KNBW{-fH)ksCt81}K zSRM{FD^*n;Zxio5sv{ilnC!IqHOqBiKp&xV?3u5&S?@aiK&e7o0@E5RSz4G$S;&a# zaJ@FAD~27+q&;I%HYm=r8tnslG=*3TDE_uAk$hu^9_Sj-ygKl?6JREf2b1@l-HWX| z_DC4HdJ4evT1%zSe-fc8JnY57HisUKpk6b{o#l<;Y|+-oyB?E-jUtU6C|}uj5i|g| zWzN##Cd3HLjt#CbsFRV`TyKwbjVd0fHTPb>4X5)PK@tKinZ!ls`**ojQ0n&*H)B%* zCU^v*;0=wHDIlNHg_@mvQ>IOMT(!%;g;Gvv?pP2w0I|{*>wG{2>mjL9sH|jobRf%L zzJ=#i#@C%Er(PJfg(B=#R{iT16s`%pBlQABncy^ zd)wUDSy$YqW>}FZgqGfF^8xco7Ck+NxqvZR%q(%Lrx3>uc~;Mc_?{ zYPzpaewZ4wIBkv#9nwZ(OQMztf(MT6*Jven;^i-*7Z)gM6rvY~u&{P1jADR>dOTl1DmXXoP@-0YZI1%h-b9 zAEM;9!Ts+%M7pB^tg(GyE1c-M{7PYd7&G7L>c;73Q7NlA6mYzTO3PrzG93vV3_s6AxuPhh<`UrB!#?(w}3BuW`s)A`&X@Q8E8)TZ-3 zklc~n@^}p$Zm86rU%@3EhV{AfH2FefNzIdcL^adWbhE1R?4Q96ODzL#t~0!e_|OBp zCa+O36h!;TYZ~EKv}Q(S%p}(0eX|)4^%N}}@Y&(X-?#CEojg1xwuc22F5T7-87;)7P@0H>$Ozv z=2RwkaI-u&-_P&Z4+u;$?lF94&WHH5@+UY$jDeafIfv7=?eYK{0nSZyk7h`y^fz`!Q(k-dYOEkQQa3n3qQO#`hTLPYH%F zd6iRGheWO5QzNAI{-*8m1vAN0_vXfjyaSewmJE=W;@~vTLQsLPD{UBu(^~}Gd8Bq+ zKkEy|-~7PL~Gwd|%Qzgv8irhu;Yj{yYmqlnFej>~{7MeJ}7qk5YqEQv4? zVMDlSSYoT_7Mu8wCNuy+TTw+4Bwai(Av>$b!Uh;ls2=nbi8hbGCZ%P9OOK}(QwC(C zdOwAGCHfv!Gxeg&*~_Q`bn=v}N{1^%nXDtKb3gz90|L>)^7x&2#>t>e>@~%3yag;P@1Z#^ zbL0zI?GR`|OGz-;Ckj8Ki4;cqfP9$;UJRk8c#x)q?QHuC;y8baE_(o{NIS|#K=WC}?cT3v zDrh4zi#rdhmCC)3S6yE@N_o_`W0*f*A=J&T!AR|UNPG@~XFJS*+*f(+U>Q;>=9*OH zrq~za^<~LE$6=4w_18esv(nD*4~mAImPeFv|Z^4XJSSOFb5WkG|@632}A^P($2w~oI zKqdJALxRH@!9;JTL%j9BR?FtKu6jWxwLbAQ6-lCPwcGo7@7^n={ZQ_zWf&q4DMk}8 zikT3bu)k*e2p!@z@N27y>00{+V=4Q}@f%R7b%fNdZhy42S=`0*KcjrJ8zw^pGK{M(N3Ai`Um+nD?Xg3+Qm!SPZDSU3lOt@U0 z)Y$aHR?P5NYB#_^pYqLrOLif{p;$3vubX17Ve#3vKSWXmla+FpFQ0!Oda`ygx;Z}( zR=OM%(~mRyT4NDv6{sOjIy-Qwy9k4xh~T8)$l}#jzWE;L4_i`LnUZlMk0%jQA99ot zTO!jo{xf!XD57*vDiY})b6&6tQ4&|Gr)>_8AfkB5~%Vh}kP zuMniv)yHiyXlS%`uIWWo<^+srg+%@KWswh)6Nk1?)z?#@7xXXPKWpf$Z?ogsL;3VR z8(P1BNHH7(QIg@t4C!-#?-h>2CWVxS8ISN4OG+6qb&;l?vh|^{^c->l0!_v<+!8Bk z-EC{E^_^SLw4SaJ1M=j6PCb42I>-kipz*-i@Eb%A!{qKpy3CY6Q0;v%&dn)AfGK#4 z84_4PM1-SAj;FyXJ@CUbl4V~ZgzgNs+Y)PKo9cg^=!mIr%#)1UNMu#!NAgu0x^fs_ z%w4XC;Dzwnmq*KZPfV3RT?|3xpYi|%kn=gSgD*`-p!x&@fB^qH>mUeF}uHp6L*DR=SyDA4|I%zqZ+o|aCD#3 zQ?iHY&_4QanEA~Hy;}pQXIH1R1_GrT$ZawZ7x*%QGirP-*dMaU41hFEeD$h@H?t*_ zkmG>%!7?w(ywg7!3TcR~DQJz9hzqGT+;P->&_)H=azE6+iFVs(gMJozR70Y`?}sE3 z=zp_f}1 zDj!aok;SN7kAJ5fMv{oq0ZT@(LhF*e(c}_!$Pb=({4Rm2yqY&hM22c$D^}-ns~IVk zE#p@#-kNgug9aRuaNG*PKJryZZ(CekWUMCaKE2J(%$9^%gNHHJT3$lY_?LAc#vy+U-}XzO74EaxHy)qRU}C1+ugf@I zBt+#r8*)-Ab+ns0Zv70two*f)Q0QbB?8G^#-Rp2N+G{NYIWyDmIV7Ua@6@nj(2ALA4^GL~EbC$Yq!k z*p~KSi~a0i=K6zc$S2Dsp<-AHOq_3(1GRyLE%ZEOm9uNWJ@@_@#cRx2Rmm_Y`Y^SY z?g)IE>=uKuhJNq<$X`>u60MG#XjVf)UVYEfoctB{eEtF8dfVW5?uAw5a) zq%|2ffQhkSDFKF4r3{Fc!~)bBQVT{FxJ0kRI+i1WU?3AMFw9)*x4su_re_FD;>Xb; zjh4wGrm+T47cvnKV|6RYdp&|@%iY)e8-dUINK%%>bnw1BQZkmNrjjHh3&;l*#hRkQ zVg^vUfn;f5$jsAq*1`>5=MPpo(TN^NP_wtjQM8-EAXy%rsM{XVzq!o=QaAZ=dNblRoY;d7~000933f}#|3ffw` zwC6ko*#Ab|<4z3$8k*K91qI%ERc-A5gdFuukwL$^)Ht9K)mr{dlRD4F%R*&5olXkX zCBo_&FI{AtMJ$4n0eeFRg#aOdK{`B zlEZLw1KRWiNXocv^fJ*vgk{hZ!C-Ouh9)yLZ#i7ez=Ba&xDf)xhi?(k6~X^m!}pCr zontyCJ?}$~P{dUpikNmDq_8DrU&S7YMM#OCUZ5Xi zYR?P(5~bgb<$8C>Bt_N14&xV;gz30udw1kSl?b8Aw@zflPsA^;)xSMEXVJ~ zOBZL1V~y}JcbwY%HNAm2vG3k6F}?$Tg`D=wfE?Mi!_!<-k<(31PR^S4gYffIZaN$> zb~f>Y(5puUjNb%nD<3OU)ao}4_dc|&D*8ZYU4@sk5G4=p!9~e`JH;mZ-BI3g7`n+# zI{aq3Ofp?MTBaxBY5YilkHvHob;PHvLjc13Y6i4c_S0}^r@`;4%GGJBwB$0~eIQ)o za~mPhA(RzVcX1anKysD@+A+3RlEmHOKH6=)>!42PQSQk^@Oic0v7#NcN3a41pR z*Z{84`x#*-IyccC8sFC{%>jccgtG_UA!ms*)_c)bFSvO5R$95#*{)k%e3}1I5&r!K zn?IkWol=#NsO4>l?0@2E3h`z8#^S8*&7w$d2@$4?yWSpW5wb9XJ6t7<$gkZwX%c7g z6aI>3bA1~xwqWfFO%_*?Ukck6)q%pZexhW{KutN1*O zkkHjAesA0Aa2Y1#?zrxd926Rc@g1y#Pti`ydTTe9hgr51Iio1Dz9SAO&m*^`Z}Hxs zCzNtoa^T!A0Si7e+&$FG<<*K&*1?vnBEyUdk6q%|6mTFPrxC>h8XqTs8@a-M7{t9d zuoL;M1&2xS-a&G(tyjOZWse{_%zP?vp9Dw9CN10%TO=p75e(gAcNXSvLrAc!(%>i>#1~~u^sW>=fR6Ckl+4Ah+&@8 zO`m!wgQ0<#l+}G59K7||3?Js1w9FDD>JY1|B*!C{6SHu#V5fOE(JUIL;d}0r0=tgh zZrsp9uk`5baHE-TJe;)7M+jP+J0MNTx7~#}_bY9v3 z2IDz%1p8J$yZ|rrs;8P1nQ!1xlo?!W>hzv-x@tbD(QLYpMmNa1A)oG;&~_(cn9+SSvUnhnwY?N9{vk9(0=kxv)1BZJd*`>GcJ}R(vbqi zJM6_6Fn38l8x0UjG)Lco6z!$VOT+fUzoz%{f{e)Uey3WT&go!fNYFnD_ZWqJ~S@ZpY7HF zfxH1v51sIn6N7Ql$LR_#6c0DI*E!VOz1&}BaxnUqgc-HFq-eg^Cm=w=TeZldW>s?)%)`BW*0{{V5)uZB$^37jm4MHal(^U<9BC> zQFS-&GNi<$7BXZZ2{(V{92^zJ$KM(TRyp)XORT0|; z+@j?Dpbb7w3v0vL%2+q{k?m}!8yJB*EDAwDyuh25bfJYL5gj}V%Vf=S)yB1XeBh7( z3WC}ja0mfk^P6PmwDo&G+CnV{E(Qo zf?8*9;Kgr(-i^S2ku|&&J#{VZZTK{l3ytRR83CZjK4g=_QWiPXKrqSc=Ofx z&$y3b)QgI|%zz|u0Va7dw>zyQNF}L~d{;OovC*dMUQ(_wXM152xP;Nckct5!=d+@Dmn_zhcpgfk9Yt84St{o6K`XmmVBzf%O}V7;S3zz=o_f2GMjFDvXa^d?H$p<{AH_2B?J{Eo$z zNoF)g_$D}jq}x%e!Is+((4i@l&a~=~uZt^WPyi2AmeE9TGJP*XS5xMR4NspwKYA)! z$*g>BNrz-5Z{M61LyuaB5D`7tJXlFO1mW>dQqk#1JYG!SB5o?F>t9xKvDDG-cv_BP zP!OtCO1G9$OAJtYo1FRlTg;<1ROLSe9_`$ASEC3Te}){25nH%FmLThSKH;BDqrnk^ zOli+)A8Lz-e3<-9r)crjcHESxHyt%K+)qAB;{OHMRvoxyV1(0v*EPNKab-WNmARdtbySf-4q;$+OJ&(#j^c{PF?T zIJV&;f}s{FmA&vqtxw+MA>Ut%uof6j=rc$0cF@0@x2gY#Quq*N%)Yq2t(XY+fO>EM zb$eyIgppeQ;T9m+M~7;2bCq0JY(}Xv#i!k&Te%aW=Bhq2T)?6yLn|a76Jjx@kqfG8 zgNGaVJ4Idu?t@YcS9nLf3btifWnPJLvibIDtWgZ}nm<&6pHFtDrAxe+t&_P+(~4E= zDn-ZF9JlD7i{z2`gd$4h85{co3G|r000093%R`|<_;3pgAkIRNRV1r;#9y|mrr%_v zDc27|^~kH3c(MDl(=xX=)_a^Ol&c0sSA$5Vzq~{>TfE-Fjt>5kZeS$1h{4sU940{=;iVCx*rnmuMA0HM$d_V6-b-^L003l*o{YW zP}Y8|TQgz_@!C=rX?r5nB3=jp%A?Y*Q_LV?S^9L$yzI@(by~%uxSI;%?kEoE|EIrm z0I<*yS`+Q|MhkZnz2!)%Ps7{!(om6(f4jo8%4--tCgFXMv+Tss}dML@o zNPJ}Epg*MY20HY_L_hA5AS663Ie2w$7w39aSj&H^`(RkY+v|qxGj$w8(Ss)zAh@LO zgz9uTLnu9-V;eHE+X3&YDUq->3M8t{HR4ee(J+~pJ$_Rz?I%)x551yOi$twKZ|8N=vSo64Eg zg26r+A{N$$P!}f3Jz9=`+Ek5IzI(ND=vZNqcMcC$js#^?ldBQ>-BJAbTONmF4jUpCuvn4Qeq?OK!D9yW38`mw`OFmTf~jN@Xg1k!nHTX z({-w~zG21A;QE#c8fIb}3CM$e6mo@@8H5a2Q!%p#D%D4Bsoyvnah&)Eei9-OrOnKJ z#^&ZUb(#1&SR;-7ZxP8KUV8#FiNc(M2ErGX_M~>RI0@>jhfcAOGAaO(QbCUe^bW?E zVhGZ50#29wCH;mmzP1v=(y5uJ9=o(dX=aH1qEay_;JN<#_p7R54bCw z5}DCG+i&^#9K`!*I%rx@+iV-l{A^bkk4TOve*?qRh71=A22N^h z$t2+c*d1`}`Oor&2zQTdo+^u)LW9WKMal7Juv=w<(G2BL_L3PH`7{gWL5;L{IPil3i1%EQxLD9>8Qn0}*e_WOuYvVj0|5rTt&HOsP@ z`^EmfC=p3pjZ_f11?@l3Wi_&wtxf^`CfKCkV_S30J%gx9l|qtAsT$OwZE}369k#?@ zg@#A_Q0uHnR7TBKBBWVJ?Ttb~8X9Ao-paeleCaozW-HDM3jNJgC0u$fa?LXGLed-S1x$Z??V=WNE@ptwiX)nWc7&&PRc&7dqsa~+WC&LPfG%OZVYcgM%nOGYnf zRC#VTV~zZKsU2s@of5*NO)OlXuhaUE zKpj^(JW!F*R%w(@r(>=`Z$l?a91vL}ULAV?=d1^BWG}l@Pl_3C$zX-m*GKgkl4E@v zNzy`ufN9MxiGfCW>Ifcob*~C-gq9Q|&xO8)r_~ehD>4^=6pgwaS@!X^O|gPh*H8q6 z*YK52{!)ZJhk2;*cDOp}<)P73)m1T_uvLfO#F5;7sLbAV!a~a0vJS!6m_?0qw z2gUYIW&QISY3U&<0_U-}%H(vuparq6Gn^B{{(hh$6S|qHnu09%$134dlGZ4&7~ERo zGOu}?l05u>&yphjSUz1DW}b>V_tT8D6J>&%vwHNS1ToQockZ!A)vZj33pOYlv%m;{ z3sfvBd|iJ7IMNC^D`gzT)DDdTStRDM=(D~ffSV32h)jtpF&^P&BR+Ujlk!Fg{fy10 zUfP5(WM?zB5H{y1d<|$?6R3==L2W+dCe!$Hg~)9b!k>K$H0JEC@dce`L1l(bKG%oB zM}T-jkA)mt%G|m$LQ(B+K(yCOt;lBVR&Cb74HV!ESvAlhf$Mb((1nwL-3rSVn|Efo za~js-Rpj9IgU|W{x-(sx!GjXlbrQt}xo;Xfw<$C)&I_E4(6w9u?dsFe=HPs*Ld1Pz zor)O7%;DxU%G~dxt)u*9=iz?$=)Di>9k=?2${s;UO&l-oG2GDH%@1~vqh-hO-4_58 z0Fvrx$2^BwF^#-DQbFW%db@3U8Dcx;8@VZ^00O29gjKO=fD`gI z?kN?UMM>iW=fpfHabmffwd@n@Nix+v+d=O4)bcXrpvMwAk^)Xk_Z?&p?=&}0hrRL; zw@I)PU?ze904;#HTX{mLasYaGWjF*_0pGWa#$2^)-|5<8Hx#OEdeslKoj4ZY$5aIVlt8$AKM5Bflr+dV|tvu4eyW0)+c$_x`^ z&4U0UILt+S5C91o0003OL7s$Ultf%B{{R3OiwpNtt4C7qC&s#4O?{Hn#Db1f7#{{-#vNnQJ#3q zog_&}y{azW-x%c{%$f=uN3Lvs*ckZuy6e72);j0im$JsJ2{ry}H$8JlJ}TI~j;8S8 zz>oT+HsHjVeX3|O>zjn#&4z+QS+%u*09jhhRMxPDu+N>xxRw0{RM^6wJ+ILnv<9mX zZ|d4Dh!bj=M%!Ng>gooSsHLMDhC@M=UG=Qd@)qHud|%^yO1wkphw0|d=|&wsHJv7Z zt}Worgfj5*EzBBH+!tG>2^*t$oJr2K)}3;IMgKFOfB{#A>_A7XP>S^IM3!Rp(QgZ}wn71TX*t`~Uy|XaSz3ZbE+m00RPR zwzjeBmzDVdeyyV&jsTuq25CAyTPXrs25Oi40eJQR13&-(3ebFq0x|#q(jF&JG9V?T z<@P85IK^P=%TTbChJ8=q000937>=1TL)rpwK&6yKeAUnZ55&L+jQ{`w7(tq-^($~fr$yHHY^TN3x2rNVNs5xFmqV%c7EFC;Q5|kVA{hID7dZfGF+k#%uY9T z*rTb=g>o2D9!M}lTOGv3`iM4MXT0gt+s7Q+a-G0OaicH~1}dzlnbr|&TH-VvDEHAMGaczv~^*l?+N(V)2tl(K-jVkcCEbNUdh8? z=BQ${S`~bg&uI~5J!Ft;Vvr_6q^xHS+7FI_!oK7Z-yQuUq<$_e&9T=&Nu!fBZ_rTH zroBF#PA$TJ9)OH~oEKyD0{lv;=L0^O2iR-cE;X}h(a+JWy#-hm-PSlhhwkp~?hb)N zcQ?`ql2U?zAcqb~>Fx$;>6Vg~5J?GX0Ridw9eus`zVCPAi~s+5IA`WCGkdSzYp=Ct zZ<7!_7pIsu)wpDVyl@I}(U0qoH}K*yrb9BEDAT*O?X3rmZPd1z5YE@QQ!2 z+9Jc}f3@cw^x#?0DlnRSu=6r%qAv;GN<{8qT7QrR?F}!aeUnA-wbzjvm8!VW)f&M^ z%a_g9&HM7SFkh_o3s|Eg#)c^sgB1->ZqJ`O*5gX;>nklu`PEfaRb52!d^qPNYjL<| zz?f>8&kIy)fe2eHwim!$m~NR7ns)yb7gy*vP$!u^^k)O2FGTl#GWgpmy75Ty*M<)O z%U%HQ5K7CwhHEP>z|y0i!cxM=*v{o0g3fP| ztKD?W`}S0P?niJUssk^`d1O-xLaf(b&s$g;z{b5$_(d_+nBNAxrT~sV67bkrDfhb7 z&5u-%6fArKkgmyuuF<91HXSfTtT^wSYqX5|q9D7u^n* zu`aN*?FLZ_p-q~9CVN>E6|jdO{fG-AO&6DuMhyhr)oF|BC`kD;Y(TF#SMJ-W@OB6Z z^_+85zen6GRf0Bs&NuV|0{ddc>}shBqF`UonLQ`}AKJ7QR8UI6&d~DoC=HkcaC88Q z0{;e z{-=4a2f>mUN-D)t@@I6zB>&p{6=Wxwe)t!q1#+60E+GkM+|$K=)ESasZsF9)K|ROi z=)86w`qUH9Q~)xnfel7h+bPLmSP!w$FrxPfxNYi0FwMX;s$#!m>jW=c*7bu1GJy=Q z{ak-!8<%^m1OTh!WT_lagK+8BtL#mE+oB4;hU7`^wf1>u#B!bh-m%*kzo>!lsZ-lE z+eioT3xdwCHrt-xo67^aoWrgAg3m|?kH{^xmz^YgX+IhWw712h8 z#s1uXbOZU#l*(~=Dh*Y+k^@(J(VO(nHQbMW;@9Uy2q-pKX}coOMZKZBLtr_5K)<4~ zQ&dU)`nEozsf$CqJ-5Wr={>DEfRPiMlSh(&_>EJs<$mb(_a_PakMP8Q;L129#3}Rf zvl`$xj~byNagpq1AHrqj1HRZeQMlRr+ge`=-3} z5rVwKt#xkILWcVJRAwudIZclmFMddxr`sUFdGHA&Ic~-kudEl5pluzBJxO#eNFU8F zV~fhJt2C9Lgxh}30fLb-xR}bO&V7Y|=%QyR71?47AP@&_6JaM5diA{p+A(t3zc7uo zMb&+m!FgB7L^TOw#G~P}D{#QTxPYrW1~kD)W3rKCXytYlEb;}YB^P%ZsSFleh+BA)hJ}8I%m%5-5W-Ks`vJXt9 zX(%p;de+{&0VJ~ZEg#3Ty1|K8dHH?`w{YGjE%$kQMX>b3Cj;si)QiC-ve9b!n1y1__Q!UQ35IVyp2kOFxi#8efJr%*8{dyeo5wmA|u!bIK z+bYd$IovHhy&gwL{f5#rkF)99zBSFnHZyEA9113AiRKx8bU9C#&ncQ(fFs@_wN4fl zcc7+Oi-1MzswliS#yrl1uiHTt{p7fFICTN**|E8cGI8^XV_LYuvur7;Jb8P9E&^?z z7{`}Smzu^@YQ?K-ftPIGBXOxNl>+Uhy&v0qMttuu!hVhw{>wq+))d?L#H(7RTbXYK zA(GTa@sVlxuyU~DFt=zpO|h7E=vBeqcM2LD=rU#knFJ7{ei`1zP|Mxweee)6a)l|q z;QOibKDi<^X&Cy2S$%e72Mr$ctAL?*=={v%vt zUu0kHTHHL*PT`~5GQbQR6JdTZrPoee=p8q9+{4d~vQ#x!g9|h{ET+N=C?kj%-_jNhoHZ|o=RqRDnBEOIzkesn9-Yp{I;8B8wS>V-tl6|=l8rxbR! z;OaRpco$^A*A3acaQ2wQ)__?0-ZZFIqnWXEkz0;hv6p?dz4KsKS?P%=)o5WbGJIrc zN#$8jSXMXeZEwWaCpLCQeA+{;KR{+D307RsJWLI#HAmC$BTXbi6p=B6edo?8Pa!sS z21#5?dzAPdrmg@b%g*aiZ*oa8;!MmVV7aj6*V(&pzA82l%CymVK^WVRY{vF{i?<`;u2cJ z8e3`m3f;ZpFjdc|qmz|9e@Z1xAO59eJm z&2IPtsT8;RG&Bl1KEUTmu-@VT#Vm^Yt|q++*u%(=p{Ok}c5fiGtD|UqM^<&ngZZm^ z$WB|L0ofXbOU|A0s|!@8)Mr|PdBtTBy=BRG*01>+1?g>hZ0F>b_E|cNjbARn5t#fC zTerpz5JsHNpFL~+=nz>~%nflLdo)0p9{?&j^stdzsxpx}(R z{kE9)LE->>Y0VdWXAB4&)Aw1PZW5dE*s}$MO8~$$fO^5ok~tdxuHE@r$6GFG8;Mt;CZ-kyvMK!=kXsHQZ#^y&+zM--97ni)r zkQ<)QxR=TSZ9!yj^f~MzjQoOJIMwNG_&M5X6r+*YQ|-xM4BzJowjmRSHz=?pJSn~% zxMH#xGWhr&j8&+u3txQ_)+?|;16va9UpW8(ghW7^@SV7nW|Z)85s5t-!$mc)T;^CNxDpv@K|CZHr8ps8X|H|l4@7ZSkyNtXt!qYZlWPR-ATE=+pbHe z#QcEPcGuLrrxS@n9(7HHuIN4dNLOEVqUdYUqJA|f?5>S;15bP`%91kdqGI(qwo%CoT~K}_ z_3EYj^-LrEK2y4DGdTZlF3_Qt?!0$!GA37eQB>aBoUu}FExLnTv**UeqkhoWw4OwG z(7_bViiljD9#p{P-asQiByR^2wLjj<%B(ak0c3Q zh4j?`iClhQC`Ho8h5j$_8wh}donhXZB_ATx(F{~x5-@LvdtIAZCU!!R3#zsQ9ua_$ z!GoD#LI2px`Wi#x2Xg>G{G6-bA=l&2@NleV0wVdGK_FpR#c^St>v;y-YHo^5kB#q4 zjg?8?{Mz;N_ZFG+u1?#EIZT14tBVenUKAa11zJpZ~CvySILt#$8Jp z%%V*_eV%59n*5=li(UtF%%sU0?5`bGFev?nGD{qdmWYzB_Q;@qTUoPYHRYzc1HTZz zx{`vmIu`Vj#}9R0JF%tIA``lgG~Dw_1O8MbB8qR9S92e(dn_Q2%FGc;L-3oJi-T70 z18~=}6UwlD4)WB9>E8rCS!20fB42!cF?lsLP-@(G8nO} z%^o+AU#UM9MPo5AOvY`k4Egyu)FaY7HF$571P0)P0dxhZ^RpwF;qg~*02V0OJA+ZP zKBDb*Ajwp5iQX%1->7(zj(Z`>dT~Tx@#R-b%nCY{w|eD$`8yZKnVQ0 z1+w56`<4gOuj(aVrbYkMo5hYehi6V5Ss}b&L_aeBXX0#t>Kl=yO_P2AsTzK>*EVY- zS2wXH=JCrcOzJvbW>HX%l@4-5(IUs9k+t&~&9wyK)y*htxr@mW+!Dgns^G$?N03V0 zRM?keok--wWmsX6uH!#J0t>*+9hJR{|0Bu-4M0IR9L`Djvx)swW(flZcOM9d6vduY9kz4 zs(HOE>CvkXtuU^!yPZtZUz?Rk^S_Q1+z4$VZ3vr&$|#ha8aYc}p?pF@07p z2R4!!E&o*lfb1Iw5s;))pw_vQ&0>GhU`fpn5w!!A2+K2snX-Ma4eA4i%6(>?cZS2O zK9q>&6gv;v-@Q~pbC30-$uqAKlQ{fGO*`HBy{#nb-lJCgQ(qirD>Dg%1s>xa`#fe; ztHG8KcN;9x|2b*$&5c@$IOgH4Su7&AS9Jv_~}Yv8*g|@e_EmAExH} z9s+kiEX;$GQ}lThmy3h$%yW8}^kw<0C;X_N(0svvI^xm8jvKA;fU_FeRo49MP*%Ny zF62JY(cuORxgQ~}bwdd?ScvKD9s&H~)2{jpx-=jF@EQ66#w2q-{R{cCWL_qv9-$8k z9UZ1H45j@VfJ;wpiMst^;QuJ_SJse{rnY@BNx70o-|L zPmDB!9!=(zJ}cp)4_UWfzjgC|l|LH<^O&4n5T{yc!zORNR-z^X0sRDY!~Lb2*?9}<@~(%jZ}l=Ob#8G((@lDxzN{_J4AEp-_nZwslVp95o;cIb z_6f$gC@#J}ohJMI3>$z&-2wEvp$NSM<(&U@kP%=s5;i`?kltPoteX$x00#=mYcym= z-v)HqgDBnFm$_g$hNU0B3I6<4dpSmh^6a5wUi!-BY?bFY&yH3HJqNe3(*JXU9W_a& zA#7<5TFUUqk0##3P7wgegz0#{d#wwIzk@*IjE+6f?uS4*m;Y5KDsy_S9M*V9LM^ct zKeP(9j$kL?4zXJ)QP^y0(^V1WNq-{}y zTuOkq139bV4gGcZHAT^f+UY(LGfD%wXRW^HRQ**LoHdqm^WMKQ2*4YQh+Qm+l+=2Z z+k;W+tCOcyVtDU67Yn)U zLAA7Zdqq5Kfr3CmfkzQvft3oGQg>v+yxL^Eut*aEtaozBCTAx;J0meKryjJXkQ^hY z(CiC=0!&Q=>;vdehqf55`9+=7PR?GtYUf!a6ilc@HDh`)V(W^93#`-DY5X=NaEVO6 z&wktbN)Wk=T8VxM;i#p)*%7NPT>|cCTOandsA-96m+G3@Jw(nnPMPr@0FauY{Qe=CP5OV)pMGY}{Q@w+QEjL#J5j^-xGy1Rfj7z8>A>Gw!oH_( zH=Yn#Ye&-RY>FKWYXUR4B)!lTuCkWB3%sP>v~HvlewqqrFff= zXu3Jk`*MVE53y80C=*Pf#GKRV4L2aMJ_rap)0PM@oZOEK!CCl3llEd3S=UH_oVJ23 z+f$9=%HR!M9`b}hH{#qVmyve&@OpmE{IKxy<=z6*EYi>s8EX2`QeE@4yubhsbN4T2 z4)_Yn7Wu25@q=5E7*r}`n&*kfM^oR;eJr|qyMVWe@{F7^vQmYa!z8*)BsilL+@p+ozs`#8WfFo*?NOP zailhDak>Eg{D?|ud#++-^jR&-w@i&4)5d7D&%w+vIp+o2Pn}8g zFEL&V&kP(Cym40!W6Z-K?T!=oeB3t{z;K?_E6jRheU*22y=SKfem`p3hp)33CYXtY zH5%0b>c1V^sia4ZWwYZ^iTb>QU{uWE*z}#C2gi(DKY?m!jd~>P8JB6AhhE=Ia)wtzdlC*|03}bs=Y45<9pTMyU zY*%dK+GmlO#zi{YMXR3m$|fBWZGA`ez76G0qp(f6i7uvVo#V zPl%A@G?TtXy3tR??Hd!$z>pliUhT#CuIjek!IIA!udaskAu@bBOGf;;N@AeXPHR`g zSQf@I(Vh@|H7k4U(^?k{7F56M{$~}D(Zca(@h4A6GJp~FlSelDUx{HM9-B6IXwO(uOr!UfH3NpAATGZEm3XBP#Dyw6CMIbymebYq&H>(OW9VQMCY ztd4Kza!DUSR>DKE!el%YZW0qEcz_EAX=+>w&Mp2Ii}mXgwedCGtg8l_<#@|hdXCN( z7Lf}h!$nz&Hx8OlQ7&cF~T&;~56M z8%e9%7dw~!cO((DPET+{5L3!{Q#URFJMH6Pa`pQtcL zLte`^`f+>xev)C`ND8UOTa|(;OYnMIOmdoRIS;j-PI4*H>utD8!?%)?z$MMB8z`9Q<|x#@L4()8>HHL7}@U_o4z!lOr;gJyR-C66*LwR+QF7pn3a5n*=g zs+fs152aL#nn;F*{VoKFrKzVY0~CFV&tBz6Z=lRK^6Ed8k1SY@GpbuKnUs=LM}DD` z{}`$M3(r-Y+LAnClsR$Gx^yQMG%v{yqI}`A@i3E(1uq1QXaBJm@)9Wf)jyj?M@wwk zr%uaDqgYa!UA^_VRFqtm#JA*{ix6Cn7aK5}_^a}x44A7otvo;4e9jc3D8JYpS_aZFvo_h9(GKn>U@*3Y$${k6@D&c<^uk?MHdM@||7C$rP7zAMi% z;L(W{FMoI3cf8*YD|5o7V9boHIXrWaaQ$ZE%$Vw3d=kH7x>Iv#hls)BspMntE;Uwf zr=S)0!)z->^T(YHQW*oXmV}>lp%X5w-*BpW1Q&C;X?E&LZ7F zwgOxs02>2EB~3Ej`k!nfEPzVc&d4mNi<~T4_HKS19y`rf6aQ2Xyx0&1BF}52`O4j7 zphq3;N>Uy2rJ3D7W4dD5>zkWA1i;KPjEZgectbHW3|B636<@txUM_mQ&@8`Qoj#Ay z|9%p|xiWl`L(Sxr55)-$3~$MOxk3TRtN(@%I?$4W|h7|2r{5Fw(Dq zwW|jdrP-hfe;2?CKn}O%Fz7D7gBe9uK#Ae9Nqn7x+5NM1I4+7@=n)nLfLnsL{#G)* z>|b#Hr>_GGpvTtb3I99+FpDqFz`*0{Z!h0HF3#g8%2++}rjG|8Fa?2tLjHJ#Eu@F7 z71x2oJ@GlIZki5Otu-+Y_n1#9K&Hg-;knR|bL~6)>r~*=tW#x@PJCn9Q`R>Y3lRA1 zfRBT4*m3Q>rPaj!QUTbL;%`+BT)!ar2@p&P6ymRv*@ORM zao~(!&W{>ov%yk$9HTfyJDwS1#6bO`Z>>h0$L#FId*5ag9r%ffXISk{8)!K#5LkQs z*Wb6$E~%Zc=6NjlKlY1j$(;8V2(g5IH15l`W0 zXPmgyM6V|!9y(VqVsz`qqKpq0e)fO!R%TRV!CT}>N@wE@*HXWy8NP$bRzEfy^*FP` zuIrH;cj|lP8pR)lL>|w5TTawdl;8--fF=ki8GzA)B5DoF-umyvijhYOOd~uASNJoh z2Gj!xr9idM!D8L_^wDm6uC?-mT#NWoY^0~u$CFG}kAB{x4m@h5geN0}QWZB2z*K~G zR1eDD`CmyGlot&U3^&{PX}fulgRcu8qPsI`FAm;wKnz=hPN-ij>Dw45J9rChg=>>V zMyJsbB&-*aHlA`3s9hu}{@IqLh(wdyq-1UftdJee0wd^7o6u?J;bR8Zr?_@u{kmnW zyk6}B0zWto>G*K7{`?pJwc~YAM~rq&0l*CmSc9Qpw@Rje`?sR|Q)vJ6_soUeXb+Gm zq~&?9k|sZbP_%Q=bPJ9rf{90V>Og8jqLXl^QFz8%^oiprPIDY|6;G#;40C@q|7_Pg z3$?n`^E*<_MAJ%c7I?czerPz`1+rE{jz-Ef;gKCQKeb8K0GTbwxSH&@*LTx$!TxmO z3mjm++3$mb08_Ia-FpoTn*RwL#6~FeJ(4-7{~yJ;M@?ER{uSj5+0aUR3uh-U!^YDz zb++n(vQ7AQ;MMy}U}sjnon7KK_{eDb3v>n7)+agUjo!xE?%jwWT?d4aF(tRybPcrN zdl$sB&imXZ!jO;hI|Q&ZzU(&;6s?b#1bU(N8~pc?K6x=u8js`G{Wh3)pfshU0we+8 zG4ulrgK}8@cOnX)VF9>=Aa?|u7`g$4uqQGX>|lic!zm1tji6Ebf_XZRtCo4wwcU#@ zTBgNC?xex1WAPdH(Shg-+*xZFcjtzbp{?KsAwu?bftJkHw{d;WRG$vs;mMui>$bc} zO3MpTFR8958pJ$WMBo zo>PvDf7^Oecn22G{V5ej0B9Q8<)CB+_y1Ic9lpPM1-Krv9c|#YndIe6QheB(iutyI zT9$&td7GEeLo0MYX7+Bi2RdbE5zGS2N1DvVRH+K?O75$7_d7IQw|PG??ToZZW4!hC zR^chSO06wK_r3LDR=!tGjwPqLR}$?ETZVS$&|L-S${BY3lBc&Orh$klbZIH z5~uL^x9M2M(mx6EZv_JpLQ#Rrv->&P0@%Ov`=oqS&n~9- z^jYN{3DSv-{zGkb+SHcWNGI8O5pmVKm!nxuBQ=xq#0OQXE&YoxWL>fPk)n+l1UD$p zG}tB#9v0V@8TBuKRnD>?&rfaTUxUi-aeP8J7 zuU`nkUXC|3M*4M_>1;W=TsOAu$X-!NjRg<5t;#}VZ^+r%RPcuY0O}%u01u_xBq+z_ z|0Z=h=ruwqiA~G^-SP!>Pgh0Y;zLAdDG5LFyZGLrUXANlyXS)%CNSt3GxkCo zz&QPe&D@s}2WOktp^Yaxo?{DKcRqSyuvEu`xl!}ny$DaOe`o+JF)X_aFUmQz7!-;q zSMu-!EM&V1#;|7_>RQ1?{>+gce)wN3$pwqkse7KLncb2H$DvKU_x&jrRsg{J1&Y(j zzsOwt*&6@p99G#LkMG0#ox27gcPYig@(>Xui9@Xd_nluhCJAQJo{($fm+lWu@1IaqZHdPO;bh4dL_VWulTBbwEoc4cs@xvBPKDXLEM{- z4?DHXy`4s3Px}=To7j&lrE{8w8>hn7R}^L6RNA={s|y>Ti!gM$XScDDYdnhm$~7Tx z(VfE#NSgozQ&5x}K{<8*H+_LWh@S`X+q@ya{an-6?b{q4B0t#DBA1%>0ok*~NzAzb z%N5>lx{k?yk96?r{kMuzPZSz<)Cmh^BcCnjai7IoFTBeftL@rUrMX~&E(zFc-ddxN zp=G3pYgNN9T{d>aowvddYLe5(AE(l?dd>m8g_Srz4R2M=FKd<8=Wc&-s-dQ? z0rJb%lSx9N`BDb!`i05V!JZk8@?^EFq!clQ*-~^Ci+T#3cYxwa(z1^_g4tXX*w=xI&cb_&-V|RM8G;)W*pyfEW>~0E-!u&EkgV_UW4}a35R8D;Ufj*Ue%|4AfKTDb z&n2syC=#|$rK6SBWr=<~2Ufw?&S}?lWj&X;#iL2#4CAJz`xHv20@I(aa($tr$>iZA zkp*27nS!KxTwT?@bgyareBOX+;T7CjyysMk-hG3>9Koz8!uqn#kwB;*<0-oz8Agh- zKuK+-#J~@GHAy6chY`dHM=)vMaoW;zGK$eGT0v&`kss(Hs?y)ugHGoPDH$n4vC8fy zIt1{Qp5Cq?R_UO6Cx*(u6qgcuc2W72p2bw6HqR(3x6G9D(`D}9VmZ#e==99{ej><( zhz2*Jfk0QH{Qx?^Mm$M_^XlqAuE~GcRh9_LBuT%}Mu|9n!}&+Ryte#%1bvCRu95Kcg`IoKs4rR zN7JYj-KI|h=(G=!CD4T^zWXD7wpmIVJ?2!p>kzOV>E0foPHMCSu#2rmIL?0t6Ue4#UNPcr z;)Z-;izl8P-2r@32utf+QVnTFfg3ipwPl$aHg91Lht?~tFCW+SB;MKZBSpsTm+e(L zR@^N-ZaZEJEH{Xc?(bTzo?@~JV;QyGFj$rUQq_ClO2jwl6`6U zoM?5hXz(4D+}xDhQ~OQlrvpZzje)bxX@ol)!;bVri7~g-(jAnAga$mqN5cyI8IE88 zph-j5XaGR5?s-PN9}ib+vsoqI&DnN|n(az7okTw`?!BLAv z>P@6mx30jDqv&ibJVra)NLGLTnHg>gh2C+mRAVCjsz=3Ue@G;$Vp9cckdJ=sm|-o9 z=NpYcRB=F&>gsoNw%rjyB4gL6B;VtkE_pV$nVMdf_mNKU>~7-?`b(&aoLkzDx^HW4 zEYh~&T`a%%Q8QbIe@*0ztx4TL+|ab#mtm(PB!4F-6v&!9({-SMaQEf*g-ISIC+D); zy6l@mCls;?(ycpt#t=7!fd^~v5TbF+p%O)mc5fsNzprDHW9wzLB}qJS2wuWjRtP{6 z(@^YFgrxV6Qzyu~9UrM8q<`;qc_nQ-=T*f+9K^VgKB`VP8A>^wN^47Niu;W98Ones z9*gSU$Yu47Z~RGHp7oGwX1fue9fi6{0bFa*$kjk=86VrcBai07a=va)@pLaLr9xGL zdYBch9*OPag;y!A85P!d9AeG#L!APTYEoV_pc0`i0T>sQmUF0BFEqpfQW=_2JJ$v{fGaQI{oX|8Rop33BtiwbC#$&ob}e9$PGMDkY`E$KrB{$=oVNEHe;t<}f zSLk`iqsASmw~l_|Q0Q zosA0T?Mjn=%#4O=hjbx2i=r9hT3OIyQt!?j>e%Qn(l5e1_EsEWIgl)!?qwaE2HP^s zs)*r)V8i)Dn`8XR@pY(B+f$P8DR%3A!aH<2m`JUjZ6Tnk-5^H^r|eaiDD7q!{fdeg zvBI(kPe(DwcMHaM-@S%OeYf{SLySZP3=2%QVVEh`k^C$JR{|M#TKXPEAL6dU2GE1W z(CS}ozH=i_Kt?&${eh7_%y7_o%e59WcYmH5R;DD!KAUyqjf-pVf4-+#asgb|8b7f` zkuEZ;%p6H4B{HU2^r~U9Pw2~IV3$M|n3EN=Au-D0&sl6%cY!t4e5L1$Nr_5)U_C6C zWkE(zt^K|%^sx&;eC5mbC@|0uKWts4oml)rHV%c9IzVWIFG3WFv`N3 zT}H8<61-P(BM*!Z&)yovC0o3gQtPAKddeEC@1#gNphO+;loP$6z?@b#SXQ`Z1#!-^ z#7Yw{>~*o{@g9WAdGG69%9tNTXd=IT&ZiGvMtGq{q!afz412Hv{FjTD*0UnZA$c6h z&|TPu{WUQK9)=#cw9Y82Ut=^&5WI^g{q`#5KAuDkQ?T2<_4UiK%M)1!qKVZPuSXIa z3%+nzJVK)9BfXFgYp)+8!Ip?cjb%V)rrK|C9iG}cx_N=<0^MLEps>d56c?+gt+r7@ zn?o!0W13%+O@k>x&wb!@)-fU7=gyeujRf3!?8;3|zONS3Z&#>{nQTveE8vc{cLYn* z5snzCFXe0H^)J)z7i@j<Y7t$o+Ribi9g(o0ug*ZEV zTwg0aKhp8clqfK=$88I2MrNgJmk5@sLRYL>X-5vlgl0w6>6Z73(vHuMB~{Z9NF935 z+utZR6;@xc`bm+bTjMyf$+1AUyjXviXM30R%4d~H)U$X_ymosCpQ~(m_zf5kS>8+z zImPoY?@fPWfI%GGz)sey4nK_or^l_^uC$(28GdBQ89y%2Wd7rpcmKNP@~G$2&8HCw z*SW9rJh~F4!9z5KEX)-~*l%4!EVCdStB$F7v`5Z+!8mq{cx4V(g~NkbbgIcludCA- zUPBI|Bq36)G@aerqe&N+@vO>3pRFD~Zx)`(N4JX3I6jK5$WrL{=SDGTnBMc*TDCCYOGzp zwL3B!ey_}gu0J`xKTFmNNl`6@@s2!&wb~S2sdOppK=@>dZ5+fn-dLpeqbV{PE+Fo? zmAR0o8jP`y)1swCL2Z2CsSA80i@j+jxIk<|-9=yeK2_R~2D!^>6IVdEht4B&ACW~P~Qtbik2?Sw!BbWEMOsQ1Z= zetSMxl;D?6)dUo5zJ8zZa6l*AUl-m*3c#+KkMTYU`IM|a$TBeU=QoU!(Q<~{S7gFju}`?NT`dl)mILP?(t+&Ch6MZLrx{7RJ-+>3rfxd+pCo5j+d#hc9~o@1+h(NSTv zR_$a_LP8t>q5|gY=ozfBCikr_DV5d+Yl9KzgbG8FikUOV)O4aR@p(&+x!>tXv(Y8h zs!6t_tiW!1f&oDc067u@e*;Ez1#oi#!@o@cf5*}=@Q1(eiT3%VcR1<5+b#r##>&8o zf_{YaNl7!#5R7|z(yO&2uWP*OiThUAuQT~x`UKWPD7wOE>{C z01FGi$ORCf`DI|_Kh;D1oNucy*5QWq1~I167$#})HD8tC+ilZLe<&ZGSYIG8rq$xT zq|jYbQFKrUz9W$oydOl){KUGsHfP?DLKS)E{tPRVd@Zjhzx&2h-pi~^>wX<(r?EKt zqY&u1`^uQq$ZO{?Ive*%oHnoOSBrv(KJIRrQ*bDFZYsGM?;kbX1kvf()Bgy=E(ptz zps0(9A3E@iyO=@WThp{b;(Nxt#KCw!$Cuuz|nuIdV$miytFL?33e2g`-1&;oxARs+sTkkR1t4i(?NXVabQKw)J@VbSfKc zxmDKhV3e|+opw0wxbve_wqA@uO*Ka z+mNsGJk#18#X^VaPDk;HT^ncPR5T2&D4UCPNc7(GFrUGFY8U7WAuJGNXtEdZ_*eB& ze~UbcBd`07=^SpHiDP)dj|9r6rvwsB>Db64m&@&Bg%EdhJq5Cnc)O|H0b=*LTp#Av z;b=y&L=0`FB$l5(FVSJGr~-h~5VUgs+XenZd|{tLJMR29#Wet%F0J-PVojWT79Wyb z7|15vB1XP4>PhrnrJVA6?tJe-0;inC`+5%aYU}B*elG}{k>j0+{R>dH9&dXe819Qx z+O5KCuW#M2P|C~LZp^DEAE5K8p7wB?E(CCMpnxribg?gji$4zYx<;L6d(v5u+ z!5UCSD2R!YCj|;cdOBUn&P*+CP1;Vy8JW^a)}3zqwl)E!Lt0+JqSCTgaq#=|^9XwRnva-z)BSC8MVAVKk=ck(igpu#+wkT(q!k$TovAd zYF6(u;R-t9fJfQV#xchob=R~bC4TPT9QdETOf?xiJjZQi)-k~B7PE8*I~@VSQ~>eM zcL5CkT`9<)B><*P17Nm@(t)n90M)A=0N9flgXI7r6GCLb3Vi`Hrch)0^U7Rs@Xwf5^%4AjmJTxOHeiqR`xk5qv?Kq2Q@g=JOf8}dL9oRlNCLNT zcDN#ek!-ON*DK@<=x82?x!yH@O4hujaOu)e#^8+b#xh!U(TBnJn(j5dZ+B+iI)Xq~Vg>kfe^w3DL7*T&i*^2ERfR1$fY|K@ zsJHCKPzZ)TkO;xl00{B008v= zn^FoR^l;{9WB^WDF313_=I4_zZUC$wqJXLbT=3)WZD3v>uI4(I>erQEY%J&zGy}kR zLYubuN4W#%!+q4RhyTGR4E|Zd0xaBnYN;lrioA_Is5$zBhaArffcbtfqW1L{D+ zc`=jo{e}jxA)Z~Y67~FD@u(Hmlt;OH4$^W|hq`DPb*+7IPJBt*&JKFQH9$`2xxI-qYaK(UMmq@|c zKabdP0O`+kmHvN|;r~B!=LNLs2FVPL-0k^MQse+TPRFMwNjp*jxZ(=Kuhf4D@pW*!H*2;y?MlX?CQb z5cPY)6_<$<;LfH{Jci|H)4h>hz2*o3m?U-PT3KKje~D0U+Z!HU4mldN$Q-*(dHH$X6PbNj0&bZ>NY3NZ4B2&AZ64H?GJ6Lg(ry*UM< z9eouH`=<&NIqX$|+4irP(XgT|`I5YrD;F)6z3vpJBI*p}seZF)NLQ;D>gE9h&8iy!MQ zlYKrlJ~>*{f#%nK>c+3tbiySwTvXREk|Pqkk)Hkye;B*^Bn*CU5J1o1akI((uy{o3 zqp%hx2wiTTlT))8cQ#}LpSv949*2?w`>V)M{gbn%dL-0yVCZiH8ian~WKSwkn&ap(P_?*|iQX^kY2H zOCi{*_6x-ZzuIHUg+f;-nNbgg?!=l49v>I&&!l>3025urR4)Tv@+UW$xMHRaW+Frx z%~!nH6Ac#m8eQ_oXXyT6rhQWE;ha>9CY^O@uknd|e3il|x8}bt+E#wW`ppmkgeu%m zC0LOIJMw&i$B7Y6w>s1{0m3THv6QQlkTFX)rK<<|jUZy*!bzb}@WGzT=*}vzClvDp zdg0e#_5zgi@sENE0H{p0+a#cfuiMdH;BrUgm{TFht5Q$*FmKk1=%#7b0dV^vrg#vb zG71NRKujB3MvH9u$&>M~RpxWAAR88b_V{Re{gWyYz$m zd|p>J%8$F1&tLK?$;CVo<2+B-081E`8{Khb!lF7aSfeq;a)XtWk2_xAZ3Ghf3pm zp`!(YXCM6s=ia|C3?_;WJ%}syFaLuIjg?B|Dhe}E)Knjra^7W=jF(*{oRX6Fo^&uP z;kux(0>iSUc*>r>uA~>K6 zS36>90NhuQ?NbOy{qh5V^}fmzoZKh?RtEos8AfUkl9pJ{x^O{lK2W{7*WfL zHeV9r4^^Bq!mW457{ykv#N5cd4)7+ctu^1;{L&XL8kE_FS`=(_@eVK)fTaI*ET?JhW9xq#B~L=W&4wlbk|q9<%} zP-;mEXf{_#zg22hHFMcek7L)L1^&D_j>;f zj3MUsW@%~B^*$G9L_2qyobm}Nm}`Dn|AlG@sX1Rhl4%X=XK%<}01z!=9Ucr|J=|Xe zbn%QlktiQ_z1sF;tDJbW`N+*A;%)OE#^JYh1rUAfWqQgGL!Up__)QjFv4^!6)^Di_ zWk=rm)0;}UZj>HsN!77dv2%A|IP0?xEyaD_%kFx5Ul8gk&zlg&;aH7>H&yAGkxuX8 z_x}KDK$X8>R@Wa<;#C|l$nuC&8+i*Q_lFwn?szZe`Y#N)6LEWQF(Q}0?sRs<(Ymo*4>V)BWK*B`(?44T=HN~06}1>*0H<(Zoh|-hm^#E-y$Wpt z)Z6KFVFN3DNsiYZq-{5EDf25Cz-*NB8V}TxD@bp(HT`^!om{nJVq#69J=qGS1EROg zpp^%ZEG%4kSSwBl#g!K~V)ZxA4wDJw>OfCoCCuK7+;gBt_f#zkubHOHLV z$$x>u$*Rt|I!tB!2DzJUpKIvFZkTZ^7X-B@KZcgGq#Sm)t4a-#+TcO^#4Xx%ncVKa zZ?h&B4)C^Eh9{i)NnRTDxR^2YNttGvhn3mpwpnrcfEV-(kN^M!00UOPX`l@FU8QOu zDO4ZO15ei3x+QIfDL*j>gKz0brR1hw#g}8z2f*5G4^{1 zKh^q(pQM8yv%0wO+c^nwZ?G6xyN1F!Or>#PFVYIe0SsOmXTZ zjJ(^d(9B*tUJPflwFCo{)j$erGxKf)UV&*KHb{RPPFnA0jWb1j{3?;4e~gT z3PFY>x>cOIN+&=YLdOl9P{?xS<)m9;PmJDXB#F)8pZ}>+hLv3tbLDdz%;t?39B7|w zyGd13Q6yG=gnEq$biOU-DLiBA$*sj&r^Z)=T-2H6ols+M-^arBE28Om@ZW&dJ|v{3 z;;8862%IIQ{`{L5yNur-pr5P!o#2&*y|w9>sGjeA@ps-@zstW-cX6@9ZME$yiexB@ zc%w$XYDHePf3gfFd;X#hEa8{%(72&9v30ae@LuRC=IA(c;Av0as*U!?y%j&-J$w4cp0bIi>3RJjm&gF#5pVQpC12p0&KTA$WA#ugy@I7|1t)+20M;7Y-~n&sV!km^N>;Je<;RO>u_NyrxzR`e zc(5I0S<1B|m2+EMGMy7hT%EQ4(wX{$TU1e|Pe}9Z?z+PpRq-4hHR?EpJ+qh@5f8>X za*V3e4kE{!bKk5oUyLJGD|_&Gn{;(-fJZtZ1u|j4=I=bSjQF=%!dCkmBKt&*?vJBE zu+@v{`N)u?M$4VD{T3Ru099>f95A7q^okikq=RS;JN}AaQ6ND7>_;O%C+#<%HLj%` zhkzvAX%h&rPkq#swmi+*kgi5ej>-la*nea2JWsq0uZfrW=w(n`Jg3BBAy9}bZ88XC zETWQMgM=*vm4Xe_3F)2b_fMlzb`z639~pE$v162sF{p(w|oB{2n1 zG}}iQRgWkwDDL|X<1PL0xqf_~u(2r|{A;~!;qDYmumc4lw2<8&PYg}2xv&9R=P&!7 zBvDagqCXXP>u^K(9=3-*84ed+U4nH!l^0H_)`q&CF?0|JItRr|5Pdm{7J}1s3IzE` z0009300RM$M#z6Y-t;4)T0vOfkd07j(AGERUqLK)zUv^v5^4uTjpu(IUV%4fv1;94 zmy-F~?YUhtGOzANl42Y&?3{aBt1W|NkN}!j%E%_Gb>JW(n60b2A`HGIC%lwWASsmW zvLpbW%%@&O@|KXqF6u1T)CZ5cx|sG7XPE#Q_Z|}gDt_00g;m4VKC*eVf_4!e{0g-; zv9a|SofV+K|JL;QkulsDx(aNeL>-wBqC1IdE$S4$wL6)QFVW+6Ijh%`9175&h)f7F+1nyCNYhjC%&LgzO57-+x1O3#$(#ClvKREt{WfH~Qqoah zp55A>yOZvetpace!wN}d?{<>?hG)*?)UGC5>m+`i$~vpq-?-L!I?<0DdWw~P9|<&v z8zL{gIA^z;wy^v4;dWR}EC;Z`yWi25ZS7&6Jw1!}$`fOus07KG_Cup7k`cbo!n4&p zJ}s9q&q2CAQ*!NDsYCs=*p_|IyYAn3KB*NvP4&e;oAG36;a9r~7lkeZT~pg}x#x@= z-9d`P-bT;*9tdG7KwF4%j3GATP${<cBeUIS)9Q@TLDmg6R_^+gMxQnTUz@b z>JYC@E<0cX4Wr@>Y9G zxiNn@P1dcZZolC;g}oMo$K^0De+an`k`|-0#9pP&x2Tlm$X%Mgv>T%0uJr+)dY5Z#_j@BZ9dN80HKD9a`+_tMuA2Y7!P!pWeJF{NK^ zf>GaQpu57$0R@aObGEQj7~G13$0zM}bhOQHGgev_OMHJ(iGf9GsE; z!U3~OAOTV4M^l+yC-DQQea*w3H}o_7bQeEBpTv zml;E}$vNaeUz}{ro2sBD9_d-p-0eL#O1!9~;=H4P@*4(74Ya`VYNu^w>2CYqS@*pp6?K|{O7)LZ0T*UOWNG|>q z2!nxSZz(%MWo@zR2Mndyd!LPtK1u9f(8lm#7=PLvpV^y`V)ubB>9frSfcF~BA-ywS z-z_i3>|Uz64yx+a=5;_SwLjLX$w~V!7z0rf9p#00^l#i4K>_ipfm__{0SlY}00RI3 z2+%j4{*SM!&Vp)_Y#;yt0|PyX|2xA3yzffQmM#fig~&v5|9ei%#=ll}hP7#w=aHBg zG_gtkyq5`J$~YJc7KfuHc}Wk;iaU~^G-8=^-AMU*qHDN*o?U%DJGvXlbFaSjIb+d6 zf@PMc>Z>HytDp~ssMygyT@WiI`pcpusX8&Lj)AdALf1`9UdKqocK7m0rkR1wTIcNJ z8}K<`i3q(;^I3NEb#*D=KmwSow)yFa+a4Rf<02N@%ysE>Rntn(a64fPfZKo&Pse=f zM_@SBJoGdFe?4=RW5g2<%fPh@yN)lK@~zQTn6auR=1(9qbofR;fpeJbW-WVTkDg&L zlBTn4TO2VSo^1Zize}Tr05Y04c!81NBsCdfVpsUT0|7>f zB8UAl4F(8J^*`@-;n`UPc+p{^50Em?Hf`5AoNJvDjbWF20ixV_F+JiLI*egnsT{YM z2kh^2BXbxg$8~ZbdvwZxBg&JcyO`*Z_FmHvW)qLa4{S?~*FB*)HHo4!7VhSHGk#kq z9tPbsKVWw&x?^GbWfQLm3iEgQRis{mF6Sixv+CPZqby1qh1@2o<7X9{>4Tl0`qFgY7 ziej$nec1y8<5*HB+|k@E>t4`Y`@W@K4_(;*D_yRSRd;^WkJqQn!r1yc|F}0U3Z!p> zkxuzvS@9UZ5nJb8fw!u6Nz90%^xl4b)}O7$3CRkOCRTV&a+r-c1HT-L&-$XJI}e zwLTCRPBuh@AB)@rm1C3Z-0w5P%JtL%DWEPM!>fd%GNZ@;hecLur*0 z8GB*Vtm_yZ7dqjV^Or<1?0=ZITV8hc0^g`-%f8qIS|G ziwREhrn>`Q%#$z6Q+f0!L&8dYW}#*SsW`0);1bmU00RIib|M$}7-$5ujDo#Lcs+vZ zVY$f)PVmxIQ_(-JI7oh+#aFmGT!qb4!tX8L4;nR{(P-zJ{)r53w-j)wtO>Qq{cvZA zGo0>6VUtmjl}YJ;ayObI&;3t2yUCRmG_@HQ}dg3GqtAeI~^8rCd4hm$Fw>iu1W`%$2dBth^W6x}RgJ`GghjdXy2xNK=0Tc7}nuWsbjS&$RxX2v~XK773HO}H@S^9IhJVh z`&0jx)QDzlfXQb4{nYnwGT87Fd>7;^a0W%%*7_XH0<*fC@Qc3K^kB)xcNpj)oYh-^_VE6q_Bc*W; z(|7?_e6ctiSR90b?19qp!JPkWy{WwAQ?tMrv8|rXfNKa%2mom53F_ls!J&hH9JFvw zMQ#qrp#`pfOlD=`Ali@c1ig|5q6XJv;;l=!<4_=s!tE)0?n8S}C zt;Zx}v%&Tb|SW?88(;0)a&u-Unq`$P;tU8Y zTU{vo_qzH55%uA3A$ntEnP!r6MReCtM&C(YT)mJ>%W+@;nRouqv(0mLFN^N{P-T%o z%C5t`m$hWiXW8V^=*J+fogg`8312iqlXk*X=OoKXQ;oDGaG*|EJ2s=MxvtM>3p|x~ z1PwP?Nz~uza(RHt3dr2~oOXNEsG4fEH=*jQmm;QCf($Ye>qOO4nhagz!afj$bQv_Z z%~zBnuEl9C=QwA2jFBL6FAp?850EhUnP4vBybi4Q7`nBR-9}B5CrjO}}lB zA5MabDVzG68l{_^@?G_1mh15}gaCHjC+4y?el$)C#Ar^ijT}haqa^KoAFiRv2-bnUTVIV1w*hERq< z*L6*HY4!Fw-k9oicF!TW;{E>|rl#M4gk@w(o{mws#h5cCMgNXrJF@)K*TKYBlv*;X zLO&h)-+>`PVEgfs8dxrQLe2vXCMF~)aE4^5nuhm5E`y`_tQ`_U0QE0xhswe^BR1(; zflE`^DFAZ^7K!v*jI5n63yCrW@#|O4zziUCz zp9BvT_z5A59cs;Uoxg+?F`!@qyC+Ht)vio*=iwRAdMs9nH=%7^nu$?)M~(Jux9u0f zR{GzH|LVmsaQCVStb{jGrE7}qcOnlo?rZb@my$zzZz3Nq=%lY>2}+FXV{-NV%drpV zA-cKNi->`S5u#0%x~D}y$NyT}lenW7Yb*mD{3H1Mgeygp&JRdIbR^sz-^2qrR*gyV zX&r0RsK6}8-E-3w6A54grtI*XRAbyQetVBPNP&cwV6KAQeIm+`+0mfZdK`Nx$9+W+ z0S%u(P}lQ5et5si(AiV<-$Vj;O7k75HuHR#G7@Z7II-ca^{k43WsVztd63L_W#{?D z6$2Qiejs_33l+bXoLa<%;lr#wH~BXpuLS4wfnWKj=&OMFV^lZ~S`yO)rhKv}A^GvK z=#% z64(G42)E_-u|do9LlrI(l=8`)JDpMbF+oGPW{<3)HA3NJyCHJPw_OF;qQ`IwOuV;> zX_y|U->PW@WwsDQBOWyewQQ50%u{fHRlKTWQ{1K zNkVoac|@;1Jf9YSBruVd|ptD50wx8!#~lD3yW3<3L3H?=~NAL?|!_UO!nizi=?-s8s}r8^X-S5rJy#+w4MuUaJh z%%ky#QxdbpygcMp&GnW9O02*DiWc2DCgk&tgUjLDwcp-`R@3vE`}iRaP{IE*I8>3H zA{YOHhxwvY>X&@8-2f2q9@+_vQ1jNH3sAi~L|U)V9Xd)9=hjQqDr!6Zl^49n^z$*t znDQ6ChOh-0rUEZ;BjsSoqX26!CP*^YvVSm|LHQk0Gv(E!7M z*W;#L2Xvf41{os?)kh6?-hibRB9<94S^AOvf(yVnunWd;{ufQ6ZKHonWhdWB^dt(o zHw{D89(XP>9~eYla`<5n9J^2Gh{aA{Kuk}1NOB!*R#rRk$-pyFaFH1%eYa~U2#uBf zL2!jPk*Rk;J4m{qr}|3M+FG>!V11T-hB{RT3+i+ZWvK@3m7n{;Y~1>C-+_}jM9LWq|Ob=z@xg#2UGdR}Xa62!PYlt6S%)Mc@m zF~Z5$iqKov#ZhoMs_fbMD{p{g?9Or0$#0dyd+Mr*1~{7>*+Msy-9K7m#4G`Oo58h# zkTt!5SIwDUVqa<#EP3hJX#j_G2xROg(=ANex_*KpTKNB zmhbOHZElw+*1(CvnNUlqa}sl&2<%G^X*I8-qX)NR%YXn84_vv6%V+d>hU?Rs2kBMs zz*QPzAgA+nhti`^37g~qIk_D4a;rvGOn-f2ssbhL61Y%}n7;5p`C_0(0z68j{eg_P_CC1&i zo{9}Vh*yn@kvY)0l?BGFG|`UuC)6g2DON3-{dX^b4Qj|hS~V_n*7puCRU=ZJ6yZ@( zNBo=_cz2dO&<3CgXEgay4uW=H>D$7uEEzpvddIxP{1cxcs^=Wb*SLT_3EzZ>F*DNb z=1B{b`U|~h*^9JI<-jssR2DoDWrzL!wAP>%U4_py z4tE_~UorPHbUT4*BbxziVH3+?TzfYa(#n?+raRXou*N9%=+~ckbJaA<6~lK2zX^gX zi0Oa^TR*_%)F!Q1!Wa1vMgDl-q$&Q&jBYkS=B1wBSdSmYb@)`?{vqA={x;LD=KO~`0=u)ubM}^2OFk6yMdLTB6!J`vF$t^gAJ+O5^u?tI#_uN>d6kKVO5Ug6NTPIodmt$#R(g@ll!>C zi_3J?y_Lo-DTY|Xe`~KFm&U-+Kt<+pHL&8t=@9>DH}qA8pBTHvETQtEha{jU+Ypi(l0V&r=lYw-{bEE${rF;@C#X_$Qk^s>XBJEe0DcpH2p!ZyCuneU0cw2ZVP+9T$ z*O!SB&0aFcxea}ymR;2a+%mtJvvY=Fp=3q5rRW3*=KtYWtbITBh+2Ve=sJ(t@8$pg zS@_`S-r?RId98>@U{ZT8KKF#K@=8XG1Ruu(cgllzFGF|Y18-+s1B+F3o!ps380Jz! z+yUtVGkL2hNobL+35E||@ORtH849x3tQf`4i}0Yab=Rgcf`OX4N*{qc>7s|iVOyVS zTD~2=aY~9c=q8nlkndENoY#Fq(#vytTV=v;X(XL_Lg8pK$IBl4{%c6UoZDANzEv>y z^#oaEwbVV{N)(oRAiu==SLS%a<1_aktpvEYe=gFH;A}?FOeQ6Y>wt6B%+Tv0WTRzq zCsnIXt71#D>&lq5ON7M(YN~9i2LwD%{__bqzxd1eKEky%J3rGc2tjv~^M?PnmZO!$ z=e;2=y%ldFU?cxhmE+W$53S}hv&u-VbcPDd#Ejj`vbM4QLnK-=Subw8)i{dC;h_)` zK^XB^FkUg2ee-as1U`a!{0{&bj#E2=2`4XE$if7R|6Lci+&^a?PMyN z%A{z6KRTzvWooUSq5*$8114FeeUFz3I3_6p4p{*yzL@=lM^XVR8tWAmwkVagTW!~# z{g{3ABUdCDd6|%f&k9)RE)SE|$0B2rS&&hH(05KbU+8S`VTG3vyrmw#L;3kxA%R?hY-IN@yEK^p@wm^*LC zS%fmR#+3vpv`j|EsP_K+yg_D;a-4t7L+i5PwEU3Kr&JGMxA2`F$Wiky{s!Z%HcRd> z#R|%>w^~x!>ViHR`S?L`|DFAMi+GY5xj~mu1^buQbZJHOa&|rC^ljQPXG-c#j$$byc1tyom#AUb4@cycX%+W@ zYp#uv2qD*fL-mueD!PD5dMxY8vr1H~f3Col_=POr)TnSAFUnpyv=PgUSvJeg3uly= z>bddH=R5wNZ|$py2uRB^qq{q<7dV+&Cot|!mv52Xc5nHYo4c|+5G0STD)hng3N8yR z*VfQBQjB5R+USc$OL(Knh+ww+FOkRuAR0(qy6!iK{>V=T2!@(_DP)tP9DPChd+`SW zOYFCtvo(&Iw)s~*me4`5(!83*CPnUX#MHc=6EY1Z>=?&RX;PAgNf3e`VlhMIZa@aoh5|Y5?T#NqDR1pStw;ICUw)0IH&RGXT`pz> zs==w4@Cg8~Pc3`*6M%ph>4>8&i6qPOWPp0J`uI^|t^O(HC7=Y?kGT$~rN0(7rn&zT z)M>OIhdH(PShe~92S3_84dPpN!SSdssdC1my;8={7{nYuEr17EV2{w<))eCRv{ca8 z5+4bob60F|2T|F3mt5P9m%I6$7D)ZsJwA8SdUSU;&IV3)Q+vP+6D}`4rdv#Nio>kVwK0;9QdpyyKoRr zUVJkybxO+(cL#y0w9MN5aqz^Xh^kU`TfDxRdYAg?Dm`q7nu4pSlzg^JqDF^`b=E0vCkVD$4Lu~s%jT(3Bu=Dg0joEr@Y=Ob)*0E zJpykOGz&$$TOetfrI0@W5W%rbr#P_L*;eYu2u-)^ko*3dI}8Ncj9CxRH#cr^^+w?E zbl8>XNao*xr=95AQ!Ek(84f*#qOaF^yeGPkQdWjF$Rtze4*R2^PRez8alN zti}$t_cgNu^uFZ;kP^~6UeJcTIc0gWN&WF{q?f*sJ3k-oC^bTr*H#{tZ=w)m$PC`6 z(wgX35-`u4!G1^((*m3I?%=cJGGt`Y2`}P+!WyW+jSYuxB0lKsFh+mJZ^`fQ!%4yh z`hwQG@(v98&*c0;?ganZ=3H58Ps~K^UnF4Bg+9U(*SaDJig6V1;PV4Ljik7BD*%`2 zCrT&&RYmep(2Ihe%09quwnNsPgHhM_5a%yt8m#}Z6$Cg*ha`u~lJXaP99EP%aGdRV z*Q4w46+Wpc+<7IolIq=&=E?=>Un6~jP}qTF0r=hEbrp!=%#?TvkYO0voq(dR_mrND z8U~<-qG8_;+fNbuY>ZRO(;^QVubLoA?;Cg$a6o-++uqciH+j#O@DJv?x##CS(GI-J zB@<2&SP!YCIZw&M{S(E|{~ESKRM{?LDM>Li|B z<({*VDfSV(eNG#lZZ&fd(u$XO7p@MnHVM4e&$-6U7euK{7k&|rPcoJ@!gVB}wIahT z>ZBI}!a#52|EOJ>CZ`rch{-El{& z+R*iKV+ALifL6Mnx>eCq60%vG3L5y&bDrRc_Dn0HFjI7K%Kn6RIrfVqgx?h;Tuvsy zpEjXx?WBiU*BI}7uWUN=>-IRJtNPKJ{7HY`%l^^Fq^TlsqOdSQ)d{!YP9QDxfD2A+ zPEIi|exgtc*THZ-QH8s*Hsn|AkS8|8w;#Bn0FbEB{i*B2AD-PNHqTsFyEfViIilNY z>x~;N+#k@5SK0X#1^qMtu<5q~2?yP!^!82n02QC9OTq|bZ&Dd(^QVHy6P4W2nl+>q z9o49{rnB(HUVU4b=!p7kk^>+u)eZ7ipby}PDYUZ7POTTGcO64GPazP2FgGR16fBF;);@E7eL%kd=)~>~ za}6veW4*!Y##83MTr^pIBD~uHG>EsyO_o>+ZOOXmP zJta>_q9nT$;GDOxQFDj{NBGFyA$syPeC8lnbpSejIP4$wT5-U4?38lYR*@%p)lqiq zNwUbyrXe)^`$q={GF`#;eo;_+Der1Lt6&9*fpEh(-2nd&K|B%3#F$PgHYc>3_sx(O zW&&-&6UdNfU&I7FJ7E&ZngYS15i5hg_i_;1VV3}XM`Q!ut*LM!#`bPyjen>rAR@MF zMI9!Ppr|*|fVtdtb!U0YNgHO~J-;QwAcd%;MJN$9>7wwHU{;NU0g0mQ2;Oy=A9X?F30qNhvZvPBgqMe*8ZdY&Oz+MPNn+v3Qkcd>nU@MF01+RQ5 zSgX_Wgo_!8)Urf1YEGxAYJffR0+SXu%!ARxOm^mrV#`M#ob{pwWPLK~Xgjw&hH|%O zJYiu*6e3L3NgC-$wh4uoe=&c9H&{w<2DXuJTxcf?dFikikDL zjX@D6!Wyss!Fl*`r@7HdYsDa4cX1IBXKqK1R-Lf*cQ|`{OI@}(8Cnkh%JU{Ff+ac> zrjx^zW)C3|Es~|#y_cGi6d_(R1N%Z#Vz%%gM7i?koP@#{#P|OzgdlKwgFMM>D|3)Z`E#fo7uz3)Vu%dAT2j&jbqc<4o+m^A|ge4$%LK7Aktw` z+q|&LehFB0H0EesgY`?LnF1uA-N+$VMI18yZ%P=uhNS$0W7}XV$)))%PzibcN2+xZ z+#*Y9y|F=0I!m?lTmS+4gh_+0`s1Mgt3YHwMRNvG{l9K9L?ho*xH7VOx+i<1l@2OY(~P@(VDokQnx>QP;3p+p@=8Si=0nA-RVkBd969D0&uhcBuY zZ>}~TzX&kD@Pz{R4LSmlzQNDMR)Tn1iwA`SF<*eBn4yF`a@yw1w+II!G%}unTs&Q} z%$H&v1(axsVziDN0z~`9&=9BS$asTU^vJ`yaoW2rV055k;W$S-6ogq4Nm=hfM?P9Y z`!66dDHYZ`^`Ca=-X@V8(t8)1hgCxzE>dNMc_%U`x0f%iXIOVbc{{&u&1EG;thjBz zt@93Gp>RNuVVECg@YCu9V|$dNlsGqk0)01Y&UOTc;CRsZLJsq->LYZ-(OJ`;!0m%# z4ov1JC3UjYhAn}S?HY4Fg%y`<*E9|7Yti+Y3_)@+wDu+)oR^_{86--<;I~wjzKLQkELEZQfqJ{!F0YO!x35OrUB&G=IS*n!N z5a6F~W_M5yJh3<|vCW=DRV+-b|`4XinlSpD<1&imPd~>_8 zJZ`01smVUt?JN=_K%b+Zmvc%kV+~3J=kgN4@`Z7be&$^BNIH?=0-oOm1)zK^|doVkck*4N)+FIvJNaq~Rq3daMY~$(z9%OP3-WoTZ4l*54 z0`L*7D$a4>ILjJw?Md{YL!OJ=0dU%aab!Jh`MXk^-<{0%B-_b{)=V!X z>N~;F*=9VUCXhUc;^funG%U;}$={}6^L?zlz!Jt#6A0%=bGM@~8nsX)hltB9DkS(g z@`*e+xd{9K+_Uvcfnr4#E(JF0h@0smiL zziwa#8S!0lD>^IsegZ_32u|6%&=C`6GtYtqQh2^)IYY0n4GBbX2Qzt4S>hAh_MJhy zYE?g~VeofZc+ykrZK~&RZH{q|jU!>*m8b;XeWK+bIrKS2zUsau`M2!69(rVU*|8|E zhCdO;K;+BKbW-fi@;&Vh>hif)8X(_;03001DHINqCxcO}6`N6nB$5ymEn^gfJPJN6 z?<5oye+8aN54}RPl?}aGK=xp=LcC)Lh2^rvj_9_SB*XgmjYJZ8_s!a&Ii3fOS>+ zY~AxPkfa$q@jhCYMhYanqZj9t*PVpo#qQR9AdOg~*<5r~U{cJokI=^2$%#k#NftQ0 zQ6N-SZ0HPTF+;a1Ciz7CuORJp6R5$`eFnjZwOf(5vlXNiwVxb=7G{I?zFMKIpI1g% z;v70ni}zyp{74)B%-fZvQnnKoh32cB_P@Dbw_DuZKM-wL>d%ek4Q0PY+LYN zyXu`36h|7$Dxpi5pkPPbA07@S=Ya%4hjH5kVW}PZo-xmNJeb{?5%D;6pm{(C1DiQ=78KB1 z;`B1!!1R1=HZ~{R{b)5ZbSI|8$FDu`6BJf*X$i$QyPXDoNEV8 za-=(gKrMO$clv=)k&lgvWrlbcIbM9Ah@U#q69>kbvF~|Up5a}}&t$3pzY^E@v9N|u z=!qhMeKlm_QwSDFc}%OqZm-qjN0O+A=meO{E*_=70BlZd#%Cv=7N!qN8-m|S?hqX) zHIASmBx*BOm!z8y*+yAnqwS!L%KxVIqQI_L#OYn%#2MN=;?aztoSV1f`rKIwax|%* z^_iM={_)xHw|FT5-OFO0;cOA$m$&>bcwukroeh7#Yng{h9!-4iz>92buwclJ=N4=U zll<50T+xoq&fS###7@H^S(_&~sQE4ha@?Nz)k)r?*#+cfgcPY|k0dPfXiL+#BGTV* zPWd3HqXl-ik@PhL?c}y0X!BI;7G{K6{hTA=g;02+%k>U~In45cFTM zk#X!f2Il-~5q0P&e~)P9?rfAg9uZr_f1IM;Z<008-RhrX;=TtHSBcL1*m z-)!BLK9O7y@{K+B7Jo0>eQ?FY+D@Q;{2^!8?oiD#e;BnmQ2bOB6aKVkJ!ff*&&KbQ zMb5BmMRyF73PypSh0G9&E}Ju*9+bBxWy!({U1~Oe2L-~EOweO9#0ZO>d`Y9X4wyJ#zHfd`gSgz zidU&yLISa3A#>blJc^<*_Kd9`+vJvJd++#HX%PT*fW(4V1lm_W`?x-rbZ3}{2mZU5 z=XvrKfV2Q*2Z6z!lmD>&--zpY)}msU%LLDyowKq|+4s$E|EC#w{;>#SD@d6BN9>>KcFe~^B~xNj z)JAT_yst1$grw&15nShHKv9qOnP*K{%zxk3qhKXhqld3Rf6Z0#$Y(I0@=vmS>MMb$ z-dp~gXK+$L1AQ3sT+iPt8MYmDK?VdF=*t64wR=V

    L^l-smhg24sJ$DGA|Oo%lFY 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

    oy{4kqIQiV#jNp|8pQf06M;yt+KNGkz~ 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

    @{joHC4p^R-TyBx?A0ajW@{{d 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∋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

    rVC@3rmjnym)f7XuDhFLYeZ6 zz$j0v%P%AzE4A84Xb$os(=DH$bX5y1msz4=`YsrPpQ?r<+=8BH5B$zKpV}j~%60*! z$KenbN=D`&R4;0+aZlFTUwD^`U&xS`*WGE7Wl<+k1-IQLUrLDRz-Nh6D^0s5@_D<( zKi8=QIlCl|P9ienKjp;`DSd+Vngd-JTM4X08b?nXFds}o3Tat+0hvSZ>Gas<0=J~> zp5MZck=-b78o}tUuclQ-39_*^&n(qHq_p+DbX6pYI8LggYUxof;Rqo@Y$PvDwlxeY z?yyEA2N|SrwEIgflU;v~T#t-ZiMqI{xXBrdhXK4!eEM6Pu({C+UhbXA%wvlQZ1?vM z>y_^_`P~BKqcawIU`RFi$VWl& z{WYH6MSW?r(uXOY-5VUH^xyi{9T+>k&Rc}EYu23HHMlqU{(aOjq6W{>ArX@pCiwJlmi3jQg)% zjJigY@YKt)5fSDE&FiMx?XG5Y5nIF$(0-nt&j4iD85OhrJ0nz}wnVU&t~>3q5>%lf9BG_l>1IK~SW z?cVViWV#g~Lmh2iw9Qv>;si?!CP-A$zM>AMJHN0{Td=*gw5m!)I~2|QOVL*xp0c1| z8PJ)il}zuAi+xpnB_lA5S4<_O$xQ6Y_+J7@b{&-MemMP#FEw7I z&)l4Fr$xt62?N|tD?RQnNBvo1Aiv|ad=uOfyvy#w=~k^y?=I02#)im&5qOnyhADw- zeHhsr8crSi@6dPZT3PhXQf6V)W%pLCIZRI?i|d=2D0_07*K=KM9d-wth8CEv-=X7^ zB2FsiUY29Y9dw0Aq$)eqi^u*y*dP&5o?c7z%Jh^D5C7=Qjs8!s_5= zK4%Fymem|WNfMr!WRO1#xzVTP62yZWb|D}v7uv?d4caV=l^N^m{%zLP=?6CNx8i{D zs&3^{a@ng7g7jOs;Kkw9IbmXT1S`(a=V%{|#l}tIh~s_rwmYf#5438);SaFkuG>A^ ztDUuRes!Fid5Wy!x$PxdStr6YVVNw7t`xpOMfqmX^lZr01WkQ~A2!;ac{fPVC zXW-18B7H9ZC8{84Ve7GBQsE^1IZ;| z?XcujWL`jeec?rS;J&9qiZ|O-`~)dO zmHEi5P`6da`L6gqR#@`8&IR|vcKiaXqfD!aY0K~$?FSP#_Ri@3MR?Lz#QJ5;( z*L9H+&LV@7myeanpM zxhQWLS(Jmc;rgT3V@qfoF=Pp)?iTgTe)u6Q*!R{fh6C= zCnyQj6tLA|On^_QexZ9FbXN+#I&*oc)n1@~DnpwmLjv*Wb*T61%O06M`f3l`fqcRM+g)FO?CVvg<2c9pFW(`{wfY86s8_A zJl}|-sC-hKUnQw!GaXvs#j7;UFUx5=Tg$V1!Q2JF)V#HA(diu+VzG3}6fHFl{kZ>TE1y}!quY_VNimy%86 z!#g{ct%M(~=4EN1@y{=^-IIHkjy4gQX3a;Laf+jDoxT7I?qDMIv@#I5CZTr<)iQbTFOm8qguTk&wzsSH}bugoTWxTwPk>9k1q48fL{Ic69phZ2W-IfNq zuqpxRCsJ@!&!TrQP_#q6IYQ|tqTIU;Vc0Msn~E9!4r@}E=YQu;7~yWJ@gsR9bxam> zLFfPahCQXxqay4>LRb&|^B!VG>ANq+R>6rN<$UE1N zVHb+lAZr4299!Z0U((1?%4;g3Y%~#vrX5W{PHu^EYRXVewS3Im*dIB{I0eBKZj&Gp zZ3>5-H}1s3>xrNI{HciKJSDW1YusIhr}aHMu)FYdAojpxr7C43*akyK`u?eT^RW5t zMSvIks$QcYY#O_N0TD5I*oCO+>KKsvMPTlgON{A%o#y(x+r~;xmCi@Bv@)NFIZ*kN zPKK#<0l`7a%g2Rg&ReK~9Cf?q;WK1;J|3Q^6spNacOd=6khNu*_o586=#o}d8VWH- zt4o|=-bfc=OOGIt3ax3UK*}+qdyIj$x_AB}HH(#QhV(k8fxNGM90L9hr_c2|L>POs z4qGZ+bi%n-u|5W_Dg?XZmYV>nDQTKtBEVT zQLfGbFV8RuaXp#LIpsxxCJXVIDCN3SD71pot-aB1QC`!+j))t?&z7I+wcA-49yB+^ z#&n^84uQeqSQ!ePP#n~Ofwj?fLeOFUOv@s-nA^UWjbFB647T8Xx^G-xP8(Rbv!`XAV+$+iE zHv0NX;XNjP*7`dAV4(aF-u|6FE=tqLkrs+op-)uFnf70tsC8$jb?K2fE=|n4dB$!w z!T$1zb-Ag`-K1lk%XKgd?$R$H00Ow!(0%T3t>&#@l7m2H^^PqStervXcSFcyid97U zsp3;)Q7BlI?I&rr95M6gp+1K@(UqFCAnS>EE(7eA^i=1NJoUjfNZFuE>L@%QWy1l7 z8jx{ts%CCu1xOq&G5ga3)G%U`d_)5E_UaoZA_XGR#i?>SW~+BhQB+FYx=aicD)2N)*u2K9IXq%6F1{;gf@-@M;a zJ5zmO>Sfp5#nbV<_iK!fFJKy-Uu-n*MLXBAKBjOD+d$QwT_@i|^(w^7IDwlGYQ|qL zQ_!Uxb5a#)GOoDuv~teP@v?hpP&*hI=4&wXX&ahq%VJ*HB7eM&2mhTL`3*>;%2o&L zY&8MbNRc&b=LOQQe`nJ=0HSraAbvC7>*(EDdix0N#MRZKuUX2J4Ao#%x(AJ!cHZkc zqD=g2Y>t>`GZ;Rf<@)~16opY%|D}eOtNt_TEN##`Rn(8j?-3^Q27x7kxv;p?&uM6r z4bwsjRAi^|;z(v~A4=D`d;0jyUM!wiXaz>RaJa+D_v8=KA;rz#pVr?QPM4Oa@op^f zw3>2Xp-c>q>UuE0BZnHVqZ0Jt^Oi$xqF9iA1$Jp|6z~(bu{pcxNOpoWj3@%O*ScNO_YbLI8?RH zC)px~uc9azrrT3Ew*m!0L|Ng5J<9&ytSj0@z_wETOa7EBQ3$hKYTrD%pg;sv-yVNS4NO#T?UY2UNynFnq(SVjPnLmeHZcUSWB z1TsE&zWpT>aRbtl9ieLq!fz*lNK7|Rn$JZuzb5S*ru&QK>@7r#SG1zlCS< zlXST3FsZ-^Z$KM_;G1ijVcH89b4GVxrgPci+AK0~G%Rl8prmUX3!Rzivv-(c4^6&vT28 z>Y)1!p?`ZE8s0n$7J_Mc&eBt=Xm$ScLsn-_0B_B`6BfOKHfXt>Lfo5*K@lO-CsV**%uN#qr0#0ozK_c@i(o_6yj|~D?tl+ zXN1i#`>$BOtPf=6>zp_!$0LH(8c0Z@UN~}4A)AF;?BjoRLAq-mS!Kf_E9OI{S_-e1 zo(q$_Vd=aF7+m$PsZnwLXxM}{Nel_PXyVyetp5;p3O9!7SG}YVX$jjP-xaGiMVy&o z{Pe|)2<(3(;6bDw^pFfNi0*fcyTfudv(>5Ki60NtDZ1+6owDHPU`~ACG7JbmijX`x zdD3EUlQeW{GKGIpKYbD*XW1*4@D_+&YtBiK!O5;vuYceQ+bYXhDth$Ba6ZFLJ|;l~ zEo5J_@Uk+^O|Fyy)fhmd4tbtfINU9b*w-WOS>OvU(!;|8)J1$#)1T07n~`v3!AM9h z&t%DZ4~t>8JX!EPYfMnZP&)Otuc5+Yyp&Blz3;*Vs@_tNbME_Pi~=4fUXzmXL`C|g zT821g+uwFx(P+Qir!jX|3b0#2GIE2oF*%}m=o#XO>z2^R^|*rd@bxmXsj9)S{QWQ#Z>N>Lg~gnkFa&+RpS5;wA&_7 zH$zM`(O?Bwj!(`I3{LP`-P`pU>ux7!|3Lo5wBaFQh2a{}^X1IFJo) zR2W)T8xufYp|2}AJ7GBls;o=(o&Gy;g;HN++hEMh_^-ZtQZutTHLpkf=FITJw5CA8 z-M^Ju%a>mro-kR+=lU462v);E#P~Pgad_?q?x!^Y-@sQv05N_g7C0=q7_o*6LRuS3na1#de`iRh2(R_oyP=O(N$|6 zX*-HXAxkBQbfBrpmRTr$7GisyzQw)Gwg{p)zb+U3hw@_C$2$r*l=MK9Qcxi*1``1D z&0y7B>?q-P8~}2vtyY`6bvz6X&)Db-XOgL(;jMA&T$O>RgKrDreJ+>`!P zUH?SXD3$4j|1I5KR2uD^LNT5l&O(jY@;z3Mg1bsmffX$T0+YvB^&-OLGNLp%Z^CqY z`Pui)0UAY-zW2-B{{~H;i~_!jGQ<_7TrhbQIe*s;cz-ZIt;wZ3^h_6PWi*_#M76#H z2{rJX7XwZ>e{)u3V0_RFe0E{C82BUHC0PX^zl8oABIegO0{nY?(!WaNj*Ovuc%kfU z9yk$rWkl1%0@B^oqvrQP&0w=-s(`QZ(GnL$Oz5&D$8Bt2F-RwkWBl`0K(a zp&+PwiQ#?*(QeU{Ph21d%|i%Hc)?1sp?ADzNsP%hmc^hm5(ROKnLQzxBu;H{uUV=o zmbjp5V)pm_-j&FBBXebNu;w7q6&=RvQ%BJXw>SJ^H9aU)t3& ztjVDpjmOEZ4RjuHOk@3+@Ee*{rAqRsSX6WB#q?*RE#F-U@B_Vqy8$mBvFR02upJV- z2Sid!g{lbK9-cFJo!mTm(P6kUiA*=z$AyC?@;U*VReCFBb+r20aI=@o$DU4RB)+vKtksZKGRFh7ZHFlNfnS?h&-I48hQ%qN)_vpBL^GYre8B?kgdu#*~V z@i{#RJdGH&KBaXG*%o&w;S>&-uDxmoJz|GgQ{a-B1bBdO4-NV#MfeCTVYxJIL*%>T zv*Ra%KdMnwfr@)^AZbTIKcnv|&PbAX(oh52V!6GSKl7_5*c6g3Xu@=1B^138Rwg0i z*x`Pnsrr$-Qv;x1VyZ^xrLaq&{~YdxL{HtwI3>l2es)1rb4Q_i%@XWxPqhMZmNey6D#FYETe zk}}%vm6qttRvlIO_N3FmaVt8OU6IwH(ylEmh2bA2-Or65?_a0N14O~VewnXBfcW#V zchn>m(@@|m{nxuLD?hc29sD6AX58WF!ls;>BsAgS{1@ z&CjfsjHS4E9!43tVz*y`F6<$}IrNe$4oVhHu(H_FyOBao>yBPd=-mDy4#edozw(Ne zXt8h8UN+8XLYYIyj$7TTFR0}}V0^s&M?zr7oc^s|=jfJ-w@Bo=lf!GGAbRVDWx?E& z;#ip<(Ak^AfTHql_r<2I{at(^6iCAP(v6K#$UkA--z+pt34G%6fdlp;N_idq=KYqv zCEpPkj*VJ6W8Qq~4oCK6S7fcdv!=D*SXBieL-|r=P$UrSJ{4%DL`*UWgt z%KrmF7LjdMnnK^Q<2TJwH&QG0$j2huUJrmEg4m5tYt9^%TuUMsNFf|TQi`8cynW`_ zzHUk{V0g|oKbrsYJubDz{IuG*7Tq;)0rihBP-8hrYgk^~@GTT~VC21tJ!It=V)*FV zoYKx9QNgUsXJ2Z<;%|?^QYGc#9i^x<(>Ep7)R#d!(xOPp8L?-l5MdBl8^}Y~+6$Yv zPVUx9iuoD)M0G^@O2_)Dl58j$R_sXkw5^b2JFg^d$uK7-Z`oC^Wo?PbZ=fKqb{7oA z4}1?&L#KUQ5}?WiB>+Il7E6iH78a-5S?lrh;onk4K?XZbOR(#U(X1s^uWHPOr;Q+ZBapTTeDt~r8 zl_bHexcgG`Bo2%h+@$#TS)}mQ@{)NS#V6X)(uW7zMpX@p67ajcCxKM6-DlqltFePA4RmP-TRaNIb90Ph59}!Pk~F*!!Fr#i zOTr%@AG6ra&%rY^uaoAQU5nI1*{B#tlP@@(nueDOrdLP&F=x75%P~tXwRjK~B8Ugi z&oa3T*l^6Z{kNP`8I9U=YwY>$HcrlABU&jWm*$=Xpr`Uwa`-=7#C}7Mf_L|lA`gkQ@#@38QrMH0-{yuAJZj7TBZKi5;z(l^TY%qCJdw%t@DoM@eUlqYYH z3{qn?AREeeuRQzqp-y#%*-!=|w5z0uz z^Q{hlj!K5;*{R;pvhj&@`qXfqu6QwM2{{!8@lfLkg=rFuc%8R3OoD-1$X!isZjihg zJ`H-?+utFPh(_-_3NCCA#lkCR&a*;{2xQ7O=ud#t@kVZVT{I zFfkY%>I!+>@@lQs&@^=qY^UZ)&A~18kpY2ppp|Ghl=@_iNH)VVIkRiMi+9P|R zyD5T$eO9i+SMoFKi`y@foju$=2H#JsK<-f+c9#C&d#@sx zhN(;<3dM>utkF?prR1gd<-BlD+vx2~UuJCeR&1-U4QZ|~{(Xqu{9!ulQUTooAp!Mj zft|e)1Lq(%st>`NI0wn?z;3s@I#$$!%zriI-6hhmcuurI^MyaLf=UOkJzCD_%PQ7y zWYhNYTeUrvY3k~ck6iRjod1^_0t9$N@EjRrw}&e;W0~Ob9StRAK25IxJL!Y`5kezX z4bRDO0tLuEn1LB?_SUb?S`hHOyFU~%F)}V5U8t&OzjSd^7QTvolD8@%&O>9v8l%c~ zpc8~3d2ggV@-{JTs?aM3bb?Ih2U+%CkYn;1vB+fWu1(|lCDEZUzVx(FV%w82)a?UU zY3hUIN;=2H-In5Q-;XrN^wuh#^-4JyBN0gk9YXCoo)0nR_FG|dUbV-Hk!lYP+CEAM-aW0)+ zyH8b|?g9*Xdtq@1EE0^j$yA~6pXyo<_HQ{pt5PVAytQ`qL_G*CDFKSdwZ@1I%!8y+ zNYH{k*>_oG&GUfO0H00%^E?I`7PLPG+M;(NPwu`R1II+`)vhC@=irG;6KFA9{-i?>0Ary^n&L&#N)0lS_ zMoPpvrC92Z)z@z-VhuwRMrwRmI5(}oQZQF-IlJ6FAjr2*x%ar*EhyzElu`g6Loj7d z)p5ZCT%_%S!|sQw-U>>)$A15->QBa5+*~n+XnY2_`D_aXJ`pu~ghkzC{$?FVLi?{- zK{$C!E7mJ-42l6ae8Tcj$N^;S$M0~IJN@p+*h-h|JR@#rn!U2FZk&HY6Np+Go;k&N z%deO7@+LpM?vc!owE?v#AVf1dIwqkYVThi9tf z{|aQQBBCjdJ`O80^B)*KAtGAj@BgE7?#gxPr|!@~*?yQ%>1iu?v5`JfSwn5_Q-r+r zs;_{gWJBlq%|QqK31hn{x-!G~@@BW!fFOoJtzaUL86PmCBhqtCazhYhutF12aiHEb zFcouSZn<<8>l8>3r}xy#0Q#9XYE7bwVIHCabo6@!b?vw;p7?qdZEV`zyDQ16pP>r7 z*SQA_bDe6&R`(^$JU*-Fel;eS&&Ndgd~n%N6$$&%J%}7m-rOh4oc!|)LEOukrW;AG z%9o3K{diOltsW-@eH#@cXhe=KozqoZ*K>+~e0!{S`g?%mSrrC(Ym=%`;}(IjzmrEl z$NNIXw@_USet5Sh7T_d|oU1!HdlT%h#s(T64TCc|?j;+EM_pQyOI+K?*;O+Cg%R|?%;BH-wmF#?@8#fD)=h#d(65bSrcX-;SLzPZ9B*Q ztbfmIeUOPyY8+fQvql5*B7UoXPSTgvbQtF;Nx6YGOTVD0;V5Ps2Ai@O(=?n0pb3a9 zJGOv!Q#!pVPEE*}pDbOx!5s8xC=jzXd^3>NFe7&mKG!4NdpTFmPUgX$6gD7W6olhH z;P&B?oT+MyDOsRBjC^ftqIzp;X};1CFYOv}J6%o0OPyP(4xk^9kcBNu2etLnBG$cYE(h!<4S;7s$pfV<}7;{m~1j z3#R5dM7kO_dD>K;ZY%?|vkVAZ>bj5wMx}X=`wwBu9ae5nKTzvaP zLy6HX#nb{(YvOK0Ldy41dly-trHq%LyXr+MD;K4GokW%a_Zhyx#Njfasl_W%d57{60$$1S*Hn^N%mQ3V|uxAZzd${b7=x-D6MAl5j`8P=si9SxtaGg#{GF!@qaMX-I;&%FttQ}pmZXG>dH zn)nb>w|FB0%5qOIAf?|^ zn07EI*2f~7jSd`$-Zl++yZ6$0kZ4yu7oJn=fgBlq$m zoB34k7D8jn&^Yn8IgkL!hjQIg?lc|-*RG@f(*2Xl;IIPBf$Ew+kSk4^26mCkd*y7_ zDRf-t{rAd`z`ib#RXG-nE52oGO6pe->b}%0iVA4NHfLEy0rv;^8Z;7CfAQxDF=L7_ zyuLE6Is^5zoUck@hwg0{(Rp&82dEPeb>$=>;XvgTv^=)S6k}n)m?n;P`#|q96!gco zguF#S72g!07Zhy0V{~Ru@Gknsnb@{% zCllM6*fuA&olI=o6Wg|Jn{UiJzjOZQuCvy?YxS4iySn$P>aM-_Q`J=!U#6^32|H)# zmmowZhkp(ng|!V1896Swu(%}VgU%QeT-`Yg4DWwwW1=8~BfG4y8(ObEFa*=5TkO8# zSZYQ%T8Rcf^f1EE8Ja|K<|+=>f{Y6R!W$jt2b3qc0Ir?}MiK1oG%Xk}uUp-H+xOmgVZm6 zRjz7=?)kA7dr1$^LEf=}EMr(t0s_Ce-&o9!nL$|B@K=^LSxesu$WQaL7&3aUEwGhJgFu${IwOfW`a=jShURBW_ zSdMS@8!`L}VNnaE*X)xrSjOD;O56u)1r|3?59$g}YpOyIEsXG=UBmff{y(3eXDnIt z2SMCjERW`tmXt^49c)HNe})U9j&wV*(`tsDrn%a(E=;x3I?TK?n6>U0xDHIs*?(OxBx z$s7J5Eo17^k%5Q=Rh>@oJW&XO0ZF}3pZg`2OWeR@dZfU4$<4`x%>VB+3Kz%NvI_hl zS&=P_#8%LD-H99PkqeQEwtQLg;l zkX}L@{Yze&Jk>29CiSq$ZVgaoXA?IZJw-USW%q;d_eo;Q*p!R`(*4REO}+?BV`Uvn z=$u8YiU#zTM=7?QkszfBA#ZhV+R=B)vdku=h<<@k+lX0{@~Or2eb{D!iI%$Yw8X>2 zf?=!dBiNE>#lYyxaqUIVR99-e$H`h1!OxftAL294D-N7Dhuwy;riwUEA=mK-b|j1N z;ew)24Gv3jf4mX4+z0icnjHn)*#&T>r%Td_&&o&S-sR|h(#wGPsI2-E)we(A#cMyj#_a>0`r8XV6KZ2cD++fWQ^w6Ncc=T$) zzaSI52Js3`1}BUJ?X!^o3J#hCA%=KA z5AZKQ7Cc`f<31ao{v3j9ISJXZr>Xd~__eQ^>)1zoSD*Lu>v%$kjWm>DO;C|-f^KtR zl5?&|YkHfDxX{soP!&?&K&o@AQmq?nOy(Lh>BYCWmsz5RC7PNezsDys;|ngVLsm+O zujmW~72$;NJs~T%(xC)mzlu>w>Sj4it>e054s>Z8uG{s_r#UF2WA6#(&z66GokYn5 zziC1CyDX6mc5={yceD;n7P&Eq`D%S0Y7{1pYXz#17_(x3W5RV=e(oxx;bqQ>tr%DB zW^~#MQJSEyAI1@>S)>|PTplHs6(VL%5Ab_tP|n=Byl5z=ny3{S#DKjn%Wce6su{td z=N?ZA#i>NvEf<1!*ze}s0yAnN@gnX^@XqztU8(9Ye^uVxe0v#)+H-eHg6z2Gd$OOK zaec2?y~O8kT|sD^DVS+f6SGrRT{h;{;ddDF{1Kd3khjX(Nr{pF0?89G=}F^7EDp$k z71IsFq#FTuctRD_zl(3hWhp*y@P3}}>lr|1)uEIJGg~xk(ow0vkbFmV@rw*UW~@V$ zb=)t(V&9d$=^lwG@9U__rbMD-yh4xO&0Q-+WET`B?=`P=rd>`eDZ9lcw0B**4{ z_d(CbC}EF!&TApY?jN3#DEc7o=i!03xT}wc2a`p|q2{1Yx>_5e&ky67%X(UZx{58jJ*|`zpkxx`s+e|~6rjrRBfc+6ral$#!rrh;nsx9%~x|StK;Gll`!O+$R=ph9oOCRfhFeP zl43#;-#qRuld)lWmOKb76hhEVT@U(GVj%y^bK z)v@TePpUx;6}6w2^5j@K`)Al23JdQ^rqO+zA{}n%(!h5?whVO?ex+myUNU*Ab!;I~ z)T{Z)PL9Y_^Pi{84?c9zAVGQ0u4dWNCQ|wMY>Hbk)x>D)H z2e9?0c*yIFmEcgdP80Kfec}_EI1!iLwN-BbPJf)-5aRtoBRnDk17<%t{6UA5Fqm*2 zb#xnk9wP{vl7I5{t1xJugIo(#0afMm#;fdXmAxjamAfdqpBB%ahEE~DmS90V2X4Z= z9ZyXpzJD*g(;_0Vp4%Em{TP-^8R7xZ+~0?-8&{-6bmB&7KgF$y zcK04Hz;Pi~I{!o0fv334HhB78oC<+Yn2k231d^=YPOs zo%{C>F*r-#LbB)+$w{q;s;E?viX5@xLS9 zW(HD*1y&44F^5Jue^t~CZBU-G>clz8BGyY5Vb%aXm#WeYim>Gc>4$wjKR4zC9OBUq zR2gw)9J{oWOZ^@TD)Xsy4C`uwkz5ydMh9~)i0s^v_TkNL>~jOkXdgi5c;ILv!Pi;gvTk_VAZ$p(|FlFV`>CUA`OZKJ>OihC4v_JQ5-PXniEooN^ATEJD zUe7|$5Fpb*cNU>ASqV9Cs2R(pCl7IEY$7bXH_4_d*J!=lS1ONHEKU=sonp5K&DorZ z)g(Sym5*?ekSUuMWkegxhr!$_UDC~iwlJV+JJ7)~O#xO3C%t^wub)mbFOC}tHW2i@ z?;CL@2TVz}qq$R$82n9CK;v8flR2~G^4>{bO~r}OPYfPlnlSynvA!~1g;vP-f=4vv zfJVxz@(M;5A^PsCphqpdE|%;rW96o51r53z)yw>*B;cF(hy93N)B! z1HH-&bIL-PB!K~kYpjVv|AgL0o@iRurqc`o(->0~G$bA**;r3U7XJRaXc^+JYWg5* z@7%jtWuyz@566z$B~+vyS_YjE?T|p|If(Xal+OA#Ik@;8JDP7YVS)JUDF-6I8>xxR z4jngh1eL#|s_-c4B=Uv@HvaUc=7}NBn$xC@Jr2sx9E8ECJqjkpQx(M2Sf7G|)aZZ% zj|hS6!F}rNo)BW`I%DIxJ>9!9qvS&SCZ@y%`Nr`#oryHAYxohOG#Cawgzuzf5{l`M zW5CFk|=MO3G#AnoRjS!o1sF2O;DcJr^Z%=Oe59UQZa-0qcGav zlnjEv>Xggh_qT9gY-=g3@+HPRgKS#gvF2Zf@}rvLUDP4AbLwY^^I_}(P~y#diAEGF z8tc=(8ObvH5R^9Ro~vk+8(i&)QEm@N>wDy~>x2#BTE>#RO#>IUXA%7?Ye92IQz5v* z_|I5d56&TmW;vbFPenlqSFEV5uyyGLV*VD6y4%xu&S!tK)QNZ;&1k`SyghHgl(hdM zq^f^DIp&K|4rN;kFnht5XLplzznfx9DFD3KJY-fAWbuiJ&=UcEiS_ zror=*H-*5%^0jix3w$Id#vI%ka82X1gMLQvQn^fjF+#eMTlz zI6V(yxlQFOp0(XWC#-jzBmA0C)F$C&iB<3RRfr+aD4gZnngxUd|IOl$3uxohKhNio z_#eb(I&KS2NEvjQx{o*LY-Ug`)JIzYAD>VU{>$M3ED_exXa?MGs)IHa^G5q;_^H*~ zMZOKhYm=o3&N#A{u8bVic$B{&g#2~auHSr|r@LNcs=oG(Zjm-D<##YCHni^EN{a#s z3}5{k9;;W9o2tn(hHRb)%hoTf+yAPE&tuwKr+zm5FhDvB+FJi6P$FB^Q`(1#`qO`g z&H;2k6|<937TW@22$Su$Rb8;sRcH}x6g;WB^KA27%6@nmYAvtKyO&#Y7``QRQ_x{Q zei9=e6|V8ee%e#qX$EsX*)-&BM3Verg+8Jdg}+c?A=@TA(Z1C~u(}z0)6x$&@w}0@ zBA=AR={fueY06MEcBPu`e?8XPuCS8BS|sQl!%z9xAHaspS8n=lqs-#Ay2@uS904Iw zkvKXi>mFDOi{r}O%{_I7={y%}Dw7BQ68xo1)^r=)xo!5IE8GMu<~BmIu-n5pFtLyN zs9G8P%EUnunDBwr->T3=1bDBkQWQU}8`k%I=Npq1Wa@Hz?YsV%TH1vXA*SJ3c9yE^ z+M}(JUJ?+eZ}|&nm5?)bK{W@t!HnwA#u=|5pR;hmj<`c013bwDSrd z#{8q0)bS{2vOksBn+Lzxm4G`GTj%CIXK^yk#{rL?G@vPk+HqGL`zSzTPb#}Kw8%GY z1Kv(x%x}{IqQO-C;ZJ6?ZX=`kBhDh-+WRVe{BLawYhf1Fdhn`~C)tfm1>ym;z4?Pr z4lWHY`s(1R>5DQJJ~;+`|}(*?LtlNKo765)TvY5o%z$jMG~-@vX0nC^Ro){s0{MY=ym-$go21cXpb=Q-5z z;mrBnN&YQ(qTv6?7GnFH<$^v;oTXkLvbpAeIy0Vc@Uu4m56S){*)&c;4dl$-0 zF-a2Dq5TE`RF&V`+^frDbN@MeGCOa{oZjAjFwNCq*V9vL(4Q)_zeV&{yCZCKv5lm{ zV1+J7t@a$Nay`UeFF)mh)A?GmJwh2@3ZPiGC==qS-4|+t`cEg(!`&A)NgNQGMF_uj zDk+d<bRmc{GMVVN#NpB(qF4&D6`TQ+hkL+i6zU001m3ZZf0@WIL z8x|KdEepr}$;OoShdehO-$DooAZ#*wrQ=+juu$VHD;aAU#b_sKRuV?Xtk_0|~iWFgUUSa}qG% zr$&NbasU1s773$jpLcIylD&_vbU;8c@oJaHetl{YX${)3fc16+JuNWkwZW{>VSwh zePg?5EjK{^;UDrq0^GZ(|fF^2NH$Ht=6PzA3M%+|_OyKhP8czF~t zsiGoB`EOpFSPGSBZG-mj%FoD(!Snn~c(lX(0{k+s`L82lE%2doi}N+kL=}J0DI~k? z$TZSe`r)Es!cecc=BzoUYptjq;OHcaiUVG$qoD3^j6nHdd;sM8WE%x0zR|)92T4qV z605N*9TU+Wu)2aLW|mQx{LrF3$DKLhf*{Rk5e=m3Sy|oOw(8l`n}Bk}g~6GJt-JfL ziaWWqLOYU>LE}#WP~xGBto>}%Q0)4(f?xQvRpX-aZM8#$CeNtpo*^z{XhZ55Sn!Wu z;yI~>No<1?SbWS=5GXh|wuKI0gYwTF-~j-;szqhNVv6D(r*3?gc68NWkx_9lb9%>2 zJU75gdV@b;QLdJ*1MU_}P<3@rQX^t+0ZU6VB_Cu!{A(I0LWksbd4LlOr{mD0p%x z75E8)bZ!MQ1{&li!aPcC2L~oHVnKct_ky0~%PoM%L@~ecjX;(pB{L_v!%u~BLb)a} zA)$$N1@gy+66Gf%o-DfM+AF@bq75ePAz!Y43BedDyExdCvC?^g>J^t~OkUg&=(9@T z|FnP6(_r>lp%I7gr9$hB?Qq#?{r1Te;mqm}AqX<|0tWNnf-^}x33Ndv6=uq!UQN!ITL^>Vqri=G}I-C)GX-q zN^2rjtzo4a1or_a>XDE5r5S`H-~_RYzSusPf!BV!o$(c_eK&X5-Q2ff}y4go?G((A(>Ti~L5{g7E&apWC+@bWVBmm5y&j@bUOVbRhpkyo#5ii^u*m zHY;=8#84+0&)=~TLfHrN`vHz4LaKmF_%cwHxzDd{-S4*{UkP{Jn|GeL`_!> z0K?588pl$rtG3(hLSq9$alK(oMGg)`WbC?c+hS%rSX6u-p?sJ_sn)zuLeX0UzSdNB zzLNCpdcg6d>WdE1{>j)LOtI*~l}K~2kUipo2DF>(sPZ1UAQOCSL*S7S>)XBVpiOyP z6rLihyGoP|-uy4g zbhIAkF-k!ey>^bSDYmK)K6wqam?NTCd;|9lR_Is{wzC{8BDZQ!@STyfewhQMQ%cAB zFG$NMK4r`qhH{_TEdsw*HKnPKTq=YZ&@BJ}0@ZfM@lo1o3I+2<#UXE|P8pAbNC&Hq zE$#*)m05c{wn?vyu#Irm;CGN+de~@0JfG+MOgk)G?UR z$XpNaq$e$0Ohn`i42aSALS0^%O@AV{gGCB#+-DS)3t^<0n3^*M)Q`bnQeJ565%}B| z<+{`lgq?VTM=xC{j_@)0H<+IwY6a8Q7 zANA0W*;!k#v-Q#LfYZN*53PMQsXk0vo5#lxeZi2Yzap`BP#_ZL8*64v`NI5lK`VUH zpxTlyLt*brpbNOaiX;lCFPAU#z54T!x4YgN?Ohr=gu>Be_w-@ok1oXr$v{L`!Xb!% z(AeY#REH4{&Ufzs{Q+!0K!=*|yGHTvrDpVhjC;ukp*RC~e?0J-SsBC_*Az@tcRBT1 z$?N398?8+lJzMA!#&|XY;rQf+sC1({WYi1fx`Okc zGd@>)2b3e|2Zlch(l~c%4W#<`WImrg$#=zXY`BzgA+s{;nT*zCBg0IjdI2I6H=`I4 zo`1F01=Y$-On$73j@6{5iQ@j6yP!Cz;;r11J$!F*uupQ>tQ=&~TE_ktqz;a9X##&= z;IHu>NP5#}Ko0#_A2dtWqw*tsTab{OVU^7a47CS**opOD+TREju}_##d{DyjBX%hM zmZbyIU3qtugI1_mot$t}?wcx6Kz@fLCWe{7ZuzMHFKNzbki2%-9alL_iSh-l2C(8C z=wE=n&9ni5{VkJgLBwo*?PsJxlmU>-wim9M9}t_!M@h@n*HF?(=j=F122@6h(`K>xApl69i%xywZCWsibva zs8I+osM>CsMB{1YDNuRXGD)6)es`D5lI1StTaVytatyVhH6-TfTJEL8mK~D)ve)i* z?T^kp#HP>+4JcR2+~C`cUX2oN{+1DwDrweBMoo#@-ua$-Fj_kh`*x08%{Esqx7@3v zj*F(kiys~w`jSUo-7W>s=O?P@xe8d1PY;L3o5UP9v!M4Tk}{-iJ8et9IUd(E;jNAZX3t|Xl z#i?R&f=!GNls~bJzV5%kxcDW~urAU{9*tGxDF#~{-FjjEfdof1TYJDh2!C2phxePa z6i2E#oPx`t9sb5Zuq9|J0F!esZ+X@~zoO8;N%^uK#B;g@VT{r`W6KrRA)lN?>% zNkXA*kp8bs^T z*e5TQ1qzwk`wu}Lz>tm$$F#oHcA~t~fDukRx&dDn+7{H`#LrSYXFyj?gq|K700aWv z`qUR?`N_fUvpIP2*JK%40IJ83dy91N zNQs9(0R5mR`${~t6)Fz^U>9F3OLovpF<)uR5yblGAhVpIT>c_4BDc+7aq0=H3s5q| z#6cMy{U>Qqm*i&G-AfsxEd%U$E~+xQpVC1AxzhP*Qv8cWUR(kTArE=1Xg~6uFgScj zJF_x>W4Q>_P!%@*$l;KV*%rfQIi5u{xhJf0VR{!(>TG^&Z+cOYcN<=9zwn)$y)GsN z1y?KlOM|2{7o+(5H8W!p>wYp`Q1Q3O76V>*3Ks$EYevFpM(i<`L=`L^&kiaA>4+x+ znKyg3jHBi`b0|nZaB!NQuySr3Vi|&lAX$1@b4-L7K-PaH)kZSaSdK3UfUtIq(Kx3_ zgy@Q?AO=-}+b#=VWe|ghoF;MfS)3##;pE}Rxk{G--v%PZqhE`gKGYVYoA3q1m>MT? zCbxi=a-a*`pZf!7*=^XHKL(0OD+W^?;!(x09N%Tpx7*HrSWCp9u#Oj*cF5I*Ef{d) zLlXfYKNf&m+Gqv(bfbhC31~Yfhl(4r0Dwu1^SWXBWSZgcG*QJRaW(b5?}8{L}Yrn;WZ{KGkCpZu{Rj(D^#gWg`Pmn;MwQw zNtr$(6G}H8vqh=ICOrSB>2)3?1;3ej4?zo+{HjCaqT8=Masuaoe4JYV0Q@9aOc3V+ zN!GfmO`POOsx(b%V$nk5KSub284^ZRC;SA|+vkW|iOi}TD}Mgh5B9HKB7HNV9uzfP zBsma`SHM<^e@qyVdKq6^JURIv1)wQU8}kJ1kL9nt)!!|Igh2vFo43Rxr9e^~`Von= za2apcf=;}DlwkV6cLpJxF|1UhDsUOC{fYVy9Gn0J7^rvo#{VWFb)Y?KWAwMBo2GsO z1uZSVtqZh%SXndI$b1NNBZSpwcR9fby*M%6Mx<~ z8>@9KSA~WibLsYyMo=_#Rz&N|lVDVVE+7{p z>Q(4wUq*yru*4E>P3hOe7ZlMyHb9B#n)M|UI`VtYGMn3Bq7x%-DM0aLw|d2h(|(FZyXKx zN<+pe069nWQtZ9fkhiz4dMkKx9L>%gwTL1{Sm;Zl|YJ|?qM3cJZ0X87w@w@D*?^J z9~Oxpd%x=2ZWXeMJq2juTUT;V;%UJU$%5ezpc*|-pJ$LG4bLf_aFhyWw|HgJnr{xe z>InU!70XRx&%avp=RyF??QXsd?L@O@0qISLn7aSFX`t*RGOgK8^ETTf69S}t(?y@Y1yw@d#qiPA{nx*k zd&(`Qh|V93f|9D#<)7LNcT^`L15pk&1QZ7RGMr<(_CJPQ;`L?%OTB8hCa{{cTopSh zZf;s!_l;Oy+O+i1dzdYgJ@J#3cp8L~85P0CyACATf+-AGX7Z&(1hklzF2@$zIbQjc zqtId6I7AHkVMWJ?fl?S+^QZ)fSKX9U-_{kUr*w!2Z87~Zh8p!z%d`*O0%_xm7s_tS zVTzbbFK4mayY@THX{P1MagC95ym(vTUf=N5U2r`0epcUQ;St|1;t+YH^*|2b`ZWxG z4$&NzW?le@<`d%e{;|W?MLBIE8(sv{>q^|^lCN8x(iJ8t z)Jvm_40zZQtYKCXd!Xs6VjIEwYG6+^5t8R|2!7!QoM0?+-I9R*2h29vpkM||_^D!A z=l0Og!vy_M4wF=8dOj+<7>HA}Wpbw7gwEp5@Ma-%>8j?;r>PvP}%A8*JAI6xvqo#j=!K`5Sm8>eGgg4PUo%@1M!p` zW?YqV0N}3Ig~+I*qNEp(9(;escPVZ&VlldTxzSFh-&AoR;e%GB4|5IkYd615?;r;{ zs?A-uH9qjwp0B&^kzk3$L{#c@FJj$6&OJBv?6-rPe1H*wgGJhf4r>}E=8LCfZku^` z5sNima35-ZO0-(v5tPp{!py0RBD(x|IR0hR&`So(f!N<@iw4ocUsB@g-(voWxB2it zFXAQE>%wv_aI+vKMAG0JLk8#-fN?Mp5;s*B{PBN%+VM1|?rk3NUmkybzh?@Y$ixb} z6hTV*1uBJ?J^E(YlTq|RF|z#@Kdbm+Oo}%U?HkFA5-p^^5dv#zDLnD>80|o)g8nuC z#H{q!Ml))M&HI9r>_a;iuZLiLgE!~O@yR5@>}SG6^7HSVtNGpzL8TI=5OwU8(|22F z2m>-#cZf$ZF%~+I2{kdw+~fXvl%rD(V=qCxQ%)3(#9TIe__F$AEW~( z(07N^V>xil=XR;#EW24hYjpd-K`UGIno&+}&KaPa!jF@vsL46l(CJ|7~n?G!I;g;>o9y*d%u7o@Ws_;3FZ+ z8H}iuqVjkq(~I{n{(|}aD690#({<|4{pKh2-52eOE!u2XNELLC zS1z_XsX9o#n57#^EITGAy_|bdIUYGjX~r62X6pe&AP);2_gHS`K~n}8Yg=CzJyq2r zS-j9GI1H8z#Geb_d$)w>wZQFD(oTAo$Kri^5TSf_K{-iFfdem-1&8}T` zoCAB{rve6~WUwhzvsYsv>aI;bY1Xp1eO#2v4;bsf#;0{;5E>Rf6@ZNTno3CIpe1@aqn=s!c6$5bdQSMOj5Dp0{ha6^TE1g?Gxm3Nhpq5(+&2yjs;2H)Q@K&)b@d ztnp%EksR)61+O}K1T_DOp;v%eMpEZmjYSa!`a%D)=`^zs3ko@d84EV{YSecqTJjNp zf*b+h4QG{VNU*I2FyeZsS#5|a43W7dlrU9>QI_>B-KGok z3pbj_DZz-ms=Jen5ff^a8#+sjbBzNVV_~~AB4$lAQ(pomqTN@HrHd1z-n*bhVT9&; zESQ||&X_Q;woz+c3?u)Q=pzjH5qb`9JWatE5I~Y_Y5)f!rxYF3#T|{HHl_6Cllm>f z;V5~N-Ey>O6+ud#m#IZ`TVm1JEu0ZILZ{eLz|8I0?OFgh?TrzWY(ALB6@9hso=?(6 zF0QAa_j7K0>0t=w*MQlkAN1n0^2$D2r~6PtqGFj6Brfnd;iz;)3mtWFH z%e{0lre!<+(rh9;jg}6cN_CvBOrw<9v8PP?(ac6nJUET$pq!KhhBJeqD6@=le(mB*3{&6uLi-H`fXequ}aT&PyN@8YYPPlp1i&N!^{yEt>*+f90AwI4@ zm9vSDpFq$2X_37MvHW}#)E{rC<;9ooUv@Easj-F;JU4#<-VDTe4uPKUihf(ClF{KR z{w;&4+XatE!Y+e`SH!9ExCKwH_wL?)!^ z7jl~W(G8xE$2~lwN!=;?HxGW6SeGABBM%Q3OEbpHt12`m&cZJQmd>7mG?PlIg6x^A zB6DlGsYh4^DFuY4-hiLtkE>#q;z}wegXf^}dGeZS zMjcjHP54_E6CGj>`n=+>qM}6$Qxm1avkK;#{L#`{v-|As*bDeWM;KV~$*hsi1^1>r z%M6)i4I|;4VUyNPd+g?$u#?Quv#^5_v&>;aNhzE#FydQmdCsa2n$oXTP4&MR(7kvg zcCb?(zm10Mvz?3%*Iqz6la~@Et6D+%H{mDRdS0r0UQMpo$6wtD=U$!!>WNrZXLMz% zDi*d04PDx0!W3+XTrqPOOpHIH5@JavN@BFPCVxPs&1U$?IMYqeEcw;}_n@%k-2mbA zdWoRO88na}YzC*bRDg;S#izyyf0;`P>viR=eX=U1Pl{VaDhaskB5;IX&}aB8%b`NN z3H0aGFdDQX30pZ)WSa<|O_K?LH&m3O^bial{e?H~9NWsm3*z!VnwgZ8_Qcp6j< zJims_FSXH}STBXQ6>ZRiWu$-^_v3fI4MCJOdSprW1&+?3{N-C1FG#qx>m~9?VI+iu zbap)JYmI~0&NWMh{5I~eN5(a)IAGXO=L;pu0MULQ3wJXI= zK2r^@HuKC2^7U|4B`X<6+WyPCzfh%PhV*XjLZ%`WrirML( zv%8KP$@y$SG5%TNxg=~87_{@DiyxNxz>uxvs63-3fkcNR zyN3n~|8mO4@Q?5OwPUgjN}2URBjixtKCfB~+%(C(o+S0Mvac7ZyE+oK0WPun>1fQr zwmhOe>6l25j|@|a)kK(GB!p4d8A_o!E~1;m1rF$jb8E#SzxaVi_VGa=A)o!;- zO)Td;1YQ08V4_YsQf_zK1BsczInjpyV3=BH{^7FlYsmB<)%OqVLtP?WrEZ zzO%7Q->(ZYX#jNm02$oEpQo>%Qvp z8_CQ6ofaSI-_OAB3dF0Dt}SP}YwFvPKl&}7Ia?X11M;3DT|7mPL1p0&ex`tU!RX2(09^>w7xs&AzWG5m$~hnWE`2 zAV-)-SI%Lg+(dLKIQQcMJ>30TPAVaaH>`SPbLwo3bH`5^G>lo>|nK+p>}-RhH!C?e5uHg>n+SAdwE;S;+Xj z#|YJuZl!7OvR7`IDlFKWnJcXZRYuP}H<$CQSxk6Js6`3Q~Ep;PZ zP>-?7U*YAupV$6bJ!pJABrv@2HlS1->++-`NdJPq_faXTOyUyOlJF|plQZo2l$5s) zzqb-35Aoy1&NI#jC^*XiqrNiA*)Wotii!Sz%o7k0(=v@Q;4AKQ1FAo>*D^kyUY*6Bukk$s-T{QFwI=KFQQ&Ksr`4R>`+ zg?)ZhR`uknY+%a5PSZ|=_aczA7s;v+C>+U(%z1SnBKQAi4p9;W0C0MRGPmURV6>G@ znLu&>7fJx6(*KI10vwGN0Dk^dAe5H(`JWK;v3<#<_wU%(^3in(T_}|$U;IkorU(eZJc`CpCYDXm zjPL@Z%^6Tg!_9{Vj*~Kk$n?qQ6tj7uQT*7E+=_PjcnQxV;m5&2kV$r(9`uL}3~}%C z+_j_FvUv_C4(fKaP?><@lte(R7V^yp&`R z@-PvZk~jel31~M|RyuVeh1#b9%P?<~eGCFlqONE6AG0N_zG1&*+3!q5L=((k3CJ}` zP?5$F978s36Asfl;it9fH`YjS9hd_OTt29Ud=<@cDhe3A!B*W>tGzE!1yZXXn%21z zK5eu&Np}*Q6hJ-JNhsCn+-Se*wCHzrZ|m5YOZ6+}NQ{#7+cuPNN8XH!;FVSRQ9}RT ztFHd-fLPSUzO`0$sFzYUD3hmULt=h@PHNre=*ore)0_wAX z;(QK4(Iq_YMmGrTCH|fnKtUrv8o)8~y&xZt^D!|zf4cUkt`Jc>Yp>H$-l7&6=-10b zZrB0iWg6U?gNnNej?w~aKZ+o_04beH7`9fu6eFY;YQLv+Si7io-{(4WLP7ZH$s*Ta z0^)DLAS)VS3`84jT2R_riQ~3+Qs2d39a(II>14A4iap{7;FR83Fux>rZUYB&)to3vF7(S z4DWQis$cs=5fM}xiYglEx@ji?_U;*Ce1^qV08=*4H+sfUW( z@5hGHNY@yvB5K`H{E!aLsFO|vc<8C;ROk6Zfw71&oygJKyc;9uG|7qxkoq_QHq%SLkS~S`LQpU z{~_MZw3-MgJ4U1Max9vn%RwWjs4dv9zzJogre*bnO#cVLp4nK5tHWZ0dcrvbKIr;@ z_{n|TI~)&;9l&`D=!5I=pn5Aurda-;rF>g|0%&jwE_GD~K6O-y=m6a@Q{r`~r5x%8 zd7yC{$#IT4?`Gjq=y_ErAN>dL1;gx5nj%%F?|Lqtv;1f*Nu8Ag?=w)9UY; z1m$8xQ83b~5v+idw%f&=6n_&>t8aMNw#1e9*5Zo~K}=&21VVKfiAbGAm59l;qzff&0S-?5bM0UyJ^m>0*g=%wxR~|#um~j!d*ZAL#`h_~5m#Xe$j7Oe@J}5w#l-djI+p3P; z1VK?fx*i_nzU3AUO5z1`ZCZ9EfHz!9rZ$^wIW@eY6p#C*p|W7z=nO zZvQB1oxtW^aFLNf@I}W9&1SBvmueW9;xsmI5nb4Aq<%?eso-+#inLEZOb3<5LY-j4 z)znA_@$7vGP@liG{8$h)wOptCgchXLCw2*^;FiT0so6dnZRzwFhDe7Uh6wQ;W=C}( za^%5Wgf8be=c+?pY7T_ID-d9SUSRhkHjy+cc6fKX?D@-G=6};^VdD`v@X7c@)&IN} zZVZ*iF}o&;N%FoO9(Bv0qQb*qh4L?W+j*wBJ>916L3vxRBM)5L98n)c=D@Z+8puG% zkA1X!QT{WqL6%xoK?ok1MnxvtOCFrn4;~WzHWeO|9B1l zbjh*oFvQWBial*X+IyXbdF)Apd;2TsZFpd;?eYHEBeWllek;(L*9AhA?jhg=GQD}^ zd#D9PuZrh)J3_WAcnqt%#XVb~o)SwH5}Q_(+?3`>=2Phlxq1HQ|6%MMgEWb{F45;H zyQ<5!jV{}^ZFiUL>atzcUAAr8wr$&-dcT=(;@%r^C+1Ja$&AP!xzEnC*V$+7wNn`3 zD$ElFtQBCMGiEy-{g!v$bay@x&z1x@+3%#iG}P2#z;s=cntSrX*WCsn*}dt1`nG`J zElLzc%GG>zmF%GtQDT1J*0V#-o6IFc*L?!EkR0BrZ)38 z0g_LhYrM6XRBPG}ABm&d!V6=J7p0s}77f}0d`I})IG8Dq(r^Qu#8xQ#@oaToP1NM; z%jP#<_R1Pl>;);x;7Khw7lGoi?G%9t^K`@dKNvNWMROKDbQ^Qovl|%>say5?5ZeoE@+Cdcz+ZskW^a?J zTmlIVb%W#g*E?*}3MI^$GiB@QIks%Q$0zm43i4fqnEb*$F|(;qfR!L68qM<^(pHjz z&U3Fwme4hMZCJwN`ckG=X>_l1`qUPSj#cWdix?!f$MTo3M?kcps0%J^%lumlN~0pJ z;S_>|8;wM;m%wRa?-1R`l=Y38Eo_+SsAgc~5HZ!M8Q;m?j zzcR1XK`1B2nd7O_YvM0oh!JPo06ibc>4>KZ|q|VEQS}}tIGzRYYHj20jzRB7Qw|Fk>W&$hsLFaKI{tI4= zOxXMYh0|oA1%BNh!dKufDZBw?H8BQCI=ckW)a;<;z`Zg_qGT;jy)1q@h$N3zl%+p{ zWq;9GCCVr_wIa`47RsbQWP08~Y<*uRsLu#NEsf0NP~m=r;l!r8{Q*)A&mts=mMh;i zSnYx3?Vd#t1x4jdLDgEeA18|zJL*SB2uxcOT0$3KFgWjNB4EM8G738s2+$;n@K03zWF;F4u9riagDE-24XRi zoemOer!uZbmS~B_;|bGfx1rauTyPxW=OGdFDTkA?*OiKGM?m$WfBBZ^4p)2F=o*Ap zr~cm1}PVOc-2XcDy! zFdCJR%^kY21z<%9y8G7>Isw@i`KACWUkk8#X)R-Z5q||nPLu>f_q!>l0A%Psyx{s1ig9}bupii=pqfN5g%Lt zr{(iKR3)iNF#seeW$AbrzKW*`v35mlta_K3Ik}pbB4y|@&xB<4N3CyXbF6~Sy%WG|KGYy^l0ozr)l14+v-mFCc&y1)+B^TT-P z`NF=gWbUc<120L6&z0>^yO2? zku!)u04dYs(WtV`m7o?ZCy)dX^@o?U;}PAi?3}R{_C^T)?0e8I$ZhD&<5FhhFM793l@AKdY;@WPnfP*R$$h;<=eoAr*&t`9?)oALU> zc=MMo3b4<@XTRnl4<7GWprsf^e;xQ~@+x9b(W)RiUg_)T`+V(OxCV2ciGWvIg|%@K z@tReqQC1zm6pnd9xt^O`G*X90)mI8R@y3bQ)BLr@x+MMZ3fYZ|;${e#7cNaMqT0?j zo3xd2f@cO1L%fG=v)AJ#%Rd~q)==dcW8%@K#K=)+Y!_3kI)Ma@GIshU0P_mQSHj7- z+bEvNIZJ9VAsz57etoQLuf-lokS8`49w&?S)jF#D(-Ks^4)o81_uI`xS*@DEn-#(Rlk; zpws>zitv2aF`>X_w_vN3@fx$KZ7lYyWuL-`wD2_5AHocW|GTquJ(LDGe5$jwqS~Ihs8-g;0#938Fr1|5lATjg>hbD$EU|J?HvIc_ zo=9VkXxw4~*-?7&q6(oYR9Vzt9{(n%JFH%ORGJOrv7j=riA&s%A0mte1cNUW4vI9r z{F(r?9bpeiLU`~zx8#7!6Zw@)cQuX*)F#;)l)fs6@cRVdraV9|SVdeF_sz{-E+aNe zPzA>;ftEe{xWJ$*C)YaTJ?p1N4I_gjq%DodLsO=dVE3H$Tg{1u*&dI|AP2W1z)uzD zSKBMX{Ns4Z92E)vBA+DFOd@UQ6Tgdgd^}uMZ7uegN~O@TybzCY{#$Dy-++mVLHQ8m zqM~LO^LYQGV{sfG5sJGJ+0J$ZM6iw*5D$p1YLeqMKzb~IK|WzvBxeY^KAurn*^u}1u zmR)_>LnTY#VxlC5H?lBDyMXpAfhw96QQw}~f>%M8WxM_-g{HKku|{Auwl}Z^s|-iw z!!yaT?wiq>Wh1EEC*2{X%!%->c#Nz4Wo+#n4~+-($V;;JwW*~MS<+l6;E!Ri(#^yS zcvh%}fnU6h2{3B4x9;%PyU1{*ltxnB<)CZG`z$cnzpNW?`Ie1b0 z=WrS~suAyTg?PJAxyd_i)x-S_X0pkUe-*F5a)UPrH}D77zAV*A3EhUgf9Dnil$frI;xgO(BO3`{{zf-gVzP6wJpk?hzV}X4} zg2k2hIXkqvIF&@lxx_m`ZJccfQ<-3+*C0{R8;Ty!-A5#1HDniI^`stB`aZ)Z47&-? zMsVGo>EC_pw#U!H&xW}!>eH%-P^=IgHpo+|A6z~Mae0c>9GGv zS}u}T9CVRS>p((AQI_C%dX)>gKpg2<#LjJ&0{9Sn*yg!GZaU=E<^5GQ9@&omX{}P* zMYEti6YTF~BI2pzgLU8nT_!Yu(WKrHXZHBsr{9C0YtIw)!pa-s_4vB?Hx2{wO8O$J zJGYEWW#tA;QmaPz|7OdAMuHIRqHG*^IT%fN*SG{WHy*6J5Dh7$#ZXD3TF$bGxHK%Kny)Qq@ zMR~z^Xb6AcZ*fhB!nM>zX6~tzNuHPFS}#CofL1^|F*4*&p!70h}wNmRM60s!3o z+P7fCKJO5BBn&S44u~a>gc}ZcT9%ma5E0+KL?1gwgpqSpqR;sS*r6#+XM`py{W=u( zM)+6d4ZMEb03}vFN?5Mb8<4a@zs6X!X-j~7Mp0V1>)uS!<(%@FbClrf;tL>=M<|RX zOcea&kjLehH*Wt=l;e$JBakoD1^ z@$OI=Bc?4Hiecskq6b7X>GShfWY0JxPS0hB3#pfplS4ELc@+v*3xGHZuH4@fVBpD( z})81)xvRzV2KpoRlTsJQkGTsI2aF4;YU*z%eiynj4J@28$cte-5PFajyQ%>f6@ z#Qv{}rz{e5SqJgu8t1^|AnYRQqRgz9ZX96_dGn*F7`DCTU6n05dFNQ6!iXdR3Y7s} zWn|q`ZuwZ4bPx^vweAIY|6{g2!7e3^e>}hQEt~lY`V^w&n}ENVufsKE`)KS;eufJs z(niU@%>V|wfZ(K0hRkkH7Ds;40;xX@U}cU0AhN8ds{|2+mnp!w;E1UjaI><7U80RRB5ftk4f;e!LnYA~_U zAy|l%5z*&m1`a6-SB>Vy-3X1cOVsxEAOQOTG+-c(zP|t{y`ar6(TyIXP4wXSalmtH ziv^|b%SZZr5237}{FoioDRsEZf!f>SonTS19)`G>)!QVI5ex3%ktQ^wX(e00AczAX z3bv=&HcT?K&UP7#8eUv+Vzsv!so)0~_+%&Z?5`kO-ej#a*A!{>Y_Dz`D%fy>r!`d6i46-v%c%LKz z$Wj<1kISte@<8Y^&luTk0I27Gs)+?tf#2Lu#sAIy{4N7=Jum*v>$>3IJPsUd^ixw| zO!wFQqh$8_F(VIM|2*H$cn`FZx;QgFM5U8ZpyVWF(kLPfKC9IUHoeT>%@+I>VB&`! zK-JrW8#Xc^UJNFs4I%R{%p{^$*!dLPP+69UNTVUxoXGEQf2$eIx_Vk+jz{qdBE^xg zQl0@{24tRO`ZKLEPS-TUE?k-v)$rT$#vIh9Zwn5rC%Y8=CzXxneQ@x0$(u_2hS0YV zCy2wMhX)1`Mhd1IvBfB=Kr}0wWB0@qZMH%i(k=-SB2(EoZ1@RWZISK<>GbFKuA<6h zOz_{Sst6!cg~|fs6+}|m2!9*IqSI;v;-ihnwey|vRt!#{bav~EBZA-Z31pT;Ymo-T-^(^ql-k()m zJ^0Xp6eWc3QY92V%YTQ8qx&Pbi=b+@G;A3W1AXh|xU#@}$JR`f>|?QcoDGfGl?j@-wkYp6AvZ9g4VKa zf|98-ffmMR<^nraezQVk-!x>$glboBndv(vnn|YjvIFh8_H-faN5nq!G@|AZL>^58c+RD zK9Y7LK{{G1&rO#tpr1};sj9awRWmGBb`|O+dx#cU!8&fsU?h5#NKn>|M%fdW5$%@O zfnXV?iP=86uZb$TAlhAiooQ|Rxlw9NtlaSUc94}bF^@7<1STE&ppI3ttlOt-h=ilZ z4|lc8<+WHl=H{*2u}cf@Av@J7tG{0Ni>o9j}{Ur$jM0ko1M7K=mZP;W4p&hB0TWG zbye)Q_tjt+S}e#j*!CP!?y5G7V{l~-a?j4H-9WMJI&=oP*xGeA5OT4hqWTQ(>(;Sh zq5rkjqXqOmdrf`%Tuif58H@?EELt?4gnSweR7+ZrYCJ+WonOq+OJJ++BF&W zBk){8f))AMAe@{xzSSo9e$HmqILl9nQ96legY1!bb3~daFtAfpr#VrgA|aHIadmC6 zVpNB4CiXa!87r(0Wu`?wtSkmYhW_)xd&=;!uAlJjO!2#9b>O>UWiMkQ^#0aFYn*^5 zv=lNTf}37;0RY=={&6X|ag{JDYxCK9C?t}MM=TP$7L(N?VBfCb9!zHW*@`+ls?g6m zQbUA(7odHc8Snwj)cY^=0ScnE=%{zWY`>j$Q5<2$_1oT}E^!%X2nti_H@~(pO`tbh zp2zfw;=t%Y#5%D*tf7Af5%A+BPF^3qY{y?Kr>uG z=Qaw~OQ+wRvBqCB<=C_lZGxf+^cn9_>Zf1!f+CuV#q2}O47GRFA{tEa#sh#H1(7t~ zILYPt+_KHPS#B1oy zw+zMg`kP12P2%CBtXwP?$#odKx_wf3ZyU1$sZlex{sZ)YbKj-3K7y&D|F5c+|A_#L zUQ&FrsX-)GJzm&FXS6}KGMyjZhoa;?0*f1|A)l)WOzs7^?bDK_VlQG)yODun6;6gF zMtzyn^WqLW=Y1$V$(62>$<56I`acovi_*N!G$&ulKV4AfMfU&t?vl!^0g1MA0xM)p zgSvzxPu9D^9g2x9(6=J3kO!>ZTb3!N$f9)a!aWyCZbjs>f66Xlm!`PT-^;QsRTBLZ zT1_=lxc0GX+8sIds6P^LLVJPTFe44~xJV?FvZ{G=wQ+8K{NVB%e9Lz7%3*=iUz;`E zQZI5geht(4$7JZfXU!Z~fRsn@3GQ_}FsoA@;N@X2!}J&=X~IrV~IW#Cby5c?ND zQz3W7C)!S^tXE3@bnuG%kLc!)4v3cQT_j(P-b`yOKM}K*zbc2>m}&~=Ey1yV{`~e~ zI-00dh&a5~4~s@QeQ(-rA=3GFBJQD4Jkz*d20*RSNLV%%)cZ=DGz>NF z{q3=k{w|(Z{zt_*XUvDG92=jcuTMuVy{i1r1L;6V?qEiFG{H~qzS0}SfU+|5?E;g; zw|-N=6jxF4$)2jIO;$7=7;N0^QS<<%bzsN)-GtkIhjyR@=gq4Y|H&Y+*cMk`en=G* z>8w7I*=L9$gk5;aE`&2Kmx8++CiXR{@{V37rXir@;0o_|LbaIyR1)-a*)00ymO-%c zi1;mT_T7Qo9H69RNqKMq=ntktxneaE9Y>8<-mT4Z7_ z=hbV*q7OG?R{fnO16-MKq#va;wNycFj&jy-Qv0r`LQ@Jz`w}Z-K6v5AC)#wsX#{Js zF1e{U)1BPZG_G7B303HwJ^B$fw!gC7py1k~nuD=kvB=e_>9=*Diqup;iAHRK^?>Br zfR-*PbJZq_>}4^4db8!F$8R-TJN6?iRzw={~L{mp?WW zZqrOc*XG_-xF00fiU-BuGPAL;$ct<0y!7z^M$ivRkQJ;5VF(!&GDGg`aY*ajOd>Jb zxWnZ%NmUh6t3}8G5x^L9=)R9E88YY5WA!nl)!EBT`SuGWs zVIZT7Ioy>RDeHdh{^1~N#gkz63A#Y4f4+jmA_5v8bkH5muyjm$Voe>{z@K()KggK>;{0teJ}97f|(xxfL!gQ5uB|Necv1%^0gvdm;PHCx-2;itM(r2|zG9 zuYZP&BLAEz^18Jl(kc13qN6~5bMmo}vh3Ng;>nv`@`*H|HFgn-9JgzSb#kvR67LF9 zL|iY~`2WNEpf#bKV9{MT@rT^N(um4EDLuoEnEx`%9;s+x;{vm#u_kgrw9s(Uv$nwS zHX<4}o3^gpFm8Cy(yf%ViMP)9GY3lt3O4Bt}_ z1I+yM{{$KMe&uoXc1(#KtbpMma6i9T6eOhNjSejnW@V!8Z3spk@DzD7XYHjvKM{SL z4V9bRI>L!?c9Kx#zWPH9=`;V1>!GjDY}|Lp50WmNv0@<9#ZmhqqLl2Kay0V>6ravm zW(*XW!1%XYlqZgD3V2L{WucNscl?m&cjC%R0Qni@GuLMO>wHzE{C5l>Ejs(9pE8+% z-~YDh^dS_AX`5*Y0xOs^_=6wg*sMZX}ZA&kKG7^D>?s+0E*2g zDnVdXo38@eg6qlEt&^aBh*YK?D!(U^7p)3>XZ?)eZ?BAheeVk*fwxuWlr9qd4+UiF z)_8Vo`fl8ugz;o%(_-Sp>GV*eo!_V$6sY<=C1JqK!2c8MftChyBTZ_MgvtRsN+vuZ zrrq3BxB&54`a%V91a(G?1qs$JE8)aPf{$TaZp*jge4%LHns#a`+j$1I6bnJ4X#@ir za$L5{;ejaRS7y#DC(6qK3mTp%2I0;-Pr`S0B}*k_*k>Io5{aY&;`S9)Adb!+NLf-; zY&LWY%thNvaxb|B-iPGWLKLQB8L-;yT_53aTaEjNP47QelQZ5krz>7OR%0WqrI#pr z(Yi9-nMz01QHh&bR$m1J0vb=eQX((ggmu}kK^HYb`zRS?IGb7cl{K-u9x*b#lIk+z zmyZLI-=SN&+)zzCM3$EZN4QiL_di2hNvQMgJOO0GF4G*c*n2VNp>_8S{QioUJnC z>m5Ot^65Z`gVY^RJGN%{35jMv(;Y#`-akF5|4as`_4h?aFg5Idfh3l%&rGE6M*t8j zX=|Xo8rmgp2F{>N%x(xYq@cX7yw8hUh^l6lh9h51)0dC|@B0cUh@mWA@=%yHVX}W= z@~=kvoxw|dLePsv%i{2Q4Z@{`Y%U=oUjYKyOs@1`set9ZwiU}B<$P?AiInTeJ}^o*h>K! zRW3gJz&1!uD3FFGeQYGEYJ|_*!eii6{NR2oNa#@M{SA?HrKB@m$7#?7QH_ma`i6Yb zjDYyhrd2TYebL5y=#Btxqj}yh<4WoNJj^9%qSJ@FFq&|xywf*os|sCW^j*S7?3m`E zuyG#fHP$ptzG>T+j;h}@DyA^5i4(2l<|v`#6oIu#?+4q_jIOP4Kmggiz#ac}hOe#&6kURJRvsv`J&R$fHS;M7i_>=h+fW+(AxqJZ_#Q1@r(!>et;!4Gp5 zVibtdYIu~(huS5aAVNPJmN`Zk3C?Z_OoLYVe9(;~j_apiy#4`AX@-fX&7NuT>9v zyd{FR3tS|^eMfWH+Ga$eL(JhEE2A8%^=8-_3>)vm72L>NuwYSxt2Pgwnp7cJ*FnY3 zjjsFZZ#CRxGKohToHALBmM7piKbay#76&{$91YARIu%BATF1{Wj1U#oosusi{lAk$ zp>1Pd&-@?(MY% zu%wugrslar>?Zsjmfx0f2r004p3l#&uP|IzTBE*gYP%)~9OU zinNWcd-k>Xa#`ZbrMd}0+piq&tC%oum4`$tOPTQ{%=A) zkO(A&JJ7G0L&mD{=gk-7V2(wOdY3wCifAnPDlJNE5^YU)EYW_lteSU$?nJ=()YB_WJG_m!5Z|^W7Y+d z6?vZU*l)5L_4Byw(fl0}qov(ueyGBw!j{K_Y857>sKkS+W$TVsOTe$R93AkRN}RDJ zWuFsS3!M=gQekMx=l>qIiZQ(@20a$;HrzL}Z#m6FCHe=*-V8zK-?2?SbmrqiD1uRj zG&BrtK1*G4ZmP)znt&2m9 z&gwU?N#j4}1}1%5TNs!*`2QQ-0TLI#6_KpZ`XQLBYm7Ppl>HP^jP}v6{L0+H-RidT z?d%iR5Uf%UIx%Jmjd&bMV6O$aHxedKBFWuuQIYQ^v$V7y9*(-xS;S3 z>-45@vS$PD+`imO=m`y?^8o{H#feh|oygz=FJ+#CW`pWbpfB0n4PWZy@)X&5P}|};dFfb^Wt897;qP%Tk+kmrLnmwZnmHq8Ob87`#)xc zd-=}9i~uu-|4$M5eqgo+b{m0MhDpC7@I#F5>+fUWx z&h*N{rgooX+`JHzdl7xp|9lLR-M5UNmSF1m|2Lw2r|_aGkauAotw6UNMLC=&0(cmX zjO2*>ehj78#4r4Kg$G|&RYNq`$p^JFhjbRLugL^1&0;4Ffy(+eh?6RkSzd6|YM6e* z=SrpVZmDcmjgI*yil7c3qi>?Z={sOX%6By-o%CA0Vy51m`)zhq&bNgk0@9qxx(phT zx6Clt?~l!@z85;k!T2#D9mXHkS^XHu_we5wD>f)VoD5aHsihhM7#9`C%~)nEzBXgFCO^4oziWckbWwar^_an7u; zFvDkg#~pnbc8?8Aw|&(Kz3NC=a{PMe=wUs90b)S+RQcX@Z4IaFt2_014*a8kR{Fj} zft{G)DcsFcg;B?{(K<3wTrP+fnfXeyX#W2Klamy(n(it&XX-%c>Vx=iy^<_>-^u)6{t7f z!2SOC?=y4cWdSli!Q58&>Y7Dah9rvg&plZv(n-Xr2IqFK=AxZ@oGEDOiV6lJ)!SS< zV#nS*R7Y3~zlIGR%Z^9*PB~)l>=z;6NroyB;Kp~P%SLjks4~nQm?qduHmJ}d#@iDY zSZy{3!5S+C77mcV`&#(m^dS}Q5TCV@oN3PEKdGLvJTu)MX-stUx^fE+J#&1z!+rxbCVzed> z&3cpEfDj>8GxFwBXqUgoKCc)AgBe>7KYle!aA5Cv>n7jKTtw_IF2_fAJtq8}IObwh z5I2tzS|9g->Yl11vpdfRC&%wmWEKrsEz}Kx+a@Ih+-`4+l^GT4nR?tYnPGO=^tPsB zpDi$!cY&9P9xK1|C~MP2eelJf*Z)p#8#~>Gdm4SZhBvCXk@T~^*e;|yFC>iJ(SAj=h9qBj8c6Tu` zg2P#(r9O#ePk}HhQP7}ly|X;HW$?xLn>5t^+Bk&=Q_j)@)u$h7@pJopST$6c`^2Ed zhH;9;NldA(9hX(}(#jjmGSdsknM8UNOb_6cz^;^~|Be)szVisNc$^E@P$>54x@Pxn z8nl;=jFN3qiPL^BtB7(tM=)(C6<*RcOnLDi=yB6a8-`E>H!5z_RbQ{X=jimj2+oN8-qBNF)dTxto+8)F#4H7@ zN@8|5!)MYkTXi`L?%0ZR6VRGG2#Y=zPCa%(Vd??5HyEl0Sq<~xvcV4Lgg*j4UQ;MG zh}E-B_;3gzQKG9qnNy$NGNQGpBTnk$MQjykkuvb1KFGzJ0_tS9p$kH(!oWH}w37zN z_TY&=Ct!{0oz65^xli^k?4hf_y@R5!iuMrj&izk($`@ugLC9R!J5GIl+LaoW>ekOb z9L)#$(a$>z2*}h%K zk7yM6s!jP+7DF56t4@YtM7~@RwhT;$p`ZR;&c0C68oUPWlYha#_whv)s34}U!(Z$n z!AQqHH?bmV0(QU8qPWTnZ~2qZx=#<@p~8!?>cM2Hm?*Y-boEkc3a*PL60B#LG^~`t ziGZdnny!`O%L{}l+x>YBy7~O+aP^>#x zG5GvjXy1 zn>l2OyrCr)J@idCqMM!zuTz0nHb&c8uE_!n;+Wl@A}E2`0DwS>4@%*77|6~8^ZuZ* zG1&nCT@zA65v>GBPjDZEf+#WB^t^dqgQ$M4RIfLHTge$rq>N>3_1#>m&Xyh10)VDq zF^mIO4&=2^K85kt>U~}R*)9U0{{9DX31*)D-{D)}JkTvV87ci%!oQu64NeBD$R6Nw zeUcA-2VUlB)oC#XHLf|r=m zN46$`^ojD*i9#E!6LcRvn!;?(Etwsn(-m)OCovw`>-cN6Q^E8;HAXQ=LJ@raq`E^_Pne)qZZJId@>yuF?RU-efA^>{j z8*yy|vta)(5Erl%d5D4Bi$INZ86#+65i96xCIUoy0 zPlE{m5_Kz_$a#9`wf3Z{ZIfF10an#-Y(AdnbP-cYm&6o}gOWl?25t-4 z%!lGn*kIP;g9EL07w4C-Js9Rop)*B%)Qs4^0BbNWB7jRX70B(l`v`#oojx*z>SYW( zE7lrzufW86Rm&Cz`E+P-aXE>IAQxg4*zXjLRO;O)=>KvRJOuy%@mw$s;eP@#7&r6( z&Mo}M0?h1nFlqp#8Lrr{(qL$3SCe0|nsmNFwr~M57^v`cbk*e369V2C=ebrCy$ra& zwW2e&Id4Jl01%to-DW(G9xEx7B+)3DIaUYyn>Qf0q`oflzAJ!Vs?>XQ>6;RrG4Dcl z^Y7%vd4vJ>kXE8|Xr`UR;;FWicVmC>N5!wbm;OGfn7~7K{eU-tVdM%?l5zC1`X@LB zbH!=ge5=Rg?m4G~tF8MBpNHO;-Z`XCRKQ7rf2xW?bx&m?7wJ3=5i-tCwPv-ksqC3B zKMMJi^_g%>xCG8&VR2I~>aq(Xy2|kV^;lu90alTDJnT*ZFgyIz{V z)J~#K`9&_o~xuHQNDozs3Y6~i0c?C!^ONDx1fCe706EnpY zy+0KjTJ~yTmio&1W?zpc zmX&5X(A|(&5{|LUQBXMH&n)LyALRSLvjP_^lnaLJ?34j42Ec~1q?#^DtYS~j{ZIrQ zm`VdU*V`a&dSYC{hr%4!mq$+10Kh$ziq{T0_TcWP`g>X0t^P?Ar{iCxv#KD$d!fVX5*BNY7` z$KS+h!qU`#$0{f=EtNlp7Fgfts*6OT_>&UZz-}a!_ULfJ-?X}XqZ;`#m3blBpYvZ+ zwUlRnj>q)dU0Ydp%fHh8bq!0jrJD2GnFRjQZprc72TT}j9gJZzm7qhdAC38nuqDoS z=)ty~J+fQ&%}@0sGx1xPu^~`JPE<4{&=`$&wk}ZRp$=7Qqg>)MN8<5n%5fmmTqJWTYO)S>E6Xg@LQlCm|yn2 z`-GhY+yW8)b#lBgNLAybDd0m4dWnm*c3p5vMsWIul}BwagZx9+c*~vE22q#V>&)<8 z-sMS*M~WjszfiTDOZ}=^4MFKVq4nQAY}ZWkvYM52H#9?A6|sUPFSAq3I?m-m$)N|* zNGL4*yA~E!F_L#G;cf0YUk|dX&idBAJyxOn4)@w_j0rRP{;VJ`qM4Hxm)O#LCfS%1 z*rAug8Qi7}THr6P)HmVNzrSbhx%?y&+WMhJvuh?xNW0NZeax*Z)s(dCT;<0${Kd`{ z(F^MfKd08J_9u~iVYuN_0V;K0P3*@0+fMgrHSi>2-IJDVMo zI6`W>nBv$YVpcz`Ck(atf6-Q$(IGcyez~MC8Mx<&>S%&aw7qld_ZhF&l>j*Wl_<;| zr*LO`8zXt3;bG-Ibl1uofHUxBP@u>++~q2_eoR8BHry^vEKNmKmGG~4l6xaW~y+rw**{$32z^$(xeo^{a0KozYumM*eX- z(?5;yO5*s+{ugf$-$E!;O@=svUmhf9W)y1VhX)+)QxPghR!PGg147W_zdk4jgpM zWY^H<%xFxEYnP=yvW?SK87#(eOy8sj%LyHW<;uZfT9)0XBh+0VI8LtL;OBLLPiO_) z_+4<=O&p-;FJ!YqgPlWc!BtTC=?}Xp2y0~ny$-&QU2ydkbDl`mww3OwdA~~39W?Nsxkj4#>6@f+?2L`AvN$Q6rYSebd{imY`nMbGBB=L zKx$m>@MC4H&q+L|*le%X*j8%gif$>D<|c6_U!tblLSj|FqSQ*GBqNlMu_Ss9Y2^Qm zS;VLe6ge>{kNiEwKs)-3Zq5@GwsF%(Q(gj#FSXYH27PF`jshTU!8`e2t}XB zhx>&}K`)-N;({~<^%)AC-b|~qf$N^ijSEX?W0x`7K!v8D2p<%85WNtl^5;K9;e&So8LS=%Xu1JHl*Fu)%cpX@^vGAzTo zf&-hkv~UyGA7jejT;NAqfw{XL`jHP0?RmXE;t9VT!Ll|n*%QdZ^uQ;YE^_ph$Yly% zJ{<@Vl|zn&Ba}bJ(+`>}Nx%8rygus@G}>av+`sWcF<5+A#-*Uzo=40D#RyKSo!G6_ zzCLitE^ed=X%q(k-f3LhAK0hC2rsU9_OyO^_Az;q8ZHYajvLQAgC=K4%um8^bf&zI z@zt`@#p0M1I#5WZI@h$wnsKkfY%~aufkeAnV9k~b!XkpArwPC4DQnGdHh*Rq(FG?Y z*O^N9*nx+w1ZESafAhnO{b#K~Pb1|gfJSl!{vMfaetS1+4rke{cn}0Fm)a6Y0VHo= znW07@sv09GixwMSxxyqzlb~(nMl5Yr>B<*XL%#)Q`@xgf@k!JfF0bLEF^RyueJ2cr zP?WbwM}|V`r>6y>{SU127a!&$aaE^i8GT6ob={r?RG@?8Z?EM#&KqxkWvn$`o)hmw zRtzqZvSc8qHce5X@Y09hGP^Vd*&m4;k$e5vtY(zPCWr}M>3N-jd~j``n`OkZ zJ#Q(Qoh=|;WU~h$_MEwoXg40US4urZ8}&xskIj%3FoIWLP=Bs8!F!Go6xdiW*uz9$ zt%+$4=j!l%53<(!>v0JuCvSuNSgicT+SzaxkgDky77LfsjM7-^D}|Sih~qeZFs-PQ zh>2!mxY0$flcTGyh0vg-Ek<1}>qkPO{WUb+JHPCCMy@Uunyy^}88mM%acG7WjbQU9 ztudBpLXRqv`S9#3W&M@5JrXv)sy#Unv3#Qt0M05Hxo79cl0+x^z}QJe@IL@?K#spi zk3Nv3HWZf3Qe9v8VBRZ5I~y`6&O`p(qVfjD(fCcFm`)a#HQuB3Fem+iQ&oF$1Mg^e ziwkFrb}5O<bLZDixFwb^$2O=-PK2`i7TI`TzrwQ(mG(6U#e<$0OvM_^-`* zzl?Pex7`a~wbSTH8}wF!xk4a5tHNdgjk8|cP?&whK;#YP@C>L>f8dN1N$728OfI3{ zgFqfI1@4oqYM(Q0xFviH(~h|n%msAd)GZ$sq?wldBc?zms4j@}DnC*Exr1A`Kcr_~ z58afP6{SDndc@Jmof!?}B|Szuc{HIW^#aUvmfbbn_yGRWUWij-f?pJ&=>e%ueh*E<@~~ z{4jS4ZnbNP*vYzmO^CwxFmdPE=swb!SJlYF5b!jm`btew8(Utw&6)RfidezZSVs0c zzC#X9@@VOQv6KRf(}pGriY%=~t`2H5UW0!NM~Aq9D3(pH42}=>Wrf#pm6sKnNJwd{ znL`?pn?Rp*9JJ%~=^Bxn{l~bH?I9?BGhDfznOII9uC zi0BDBsEBSeA1E)|9JICUDozXlhUnjb9@yu`7nvZ&OJSx?nhUn1hd(E1Re_V`|1{=L zQ9MG68*gL!S1hZSIkQttV18VRmD%6)q~U>rQttncoCu+e@?>62aId(dEqg8zNt0mp z*iEu4$l3%DVt3;PW1!%5IoI_B{dFQHiMcx3G)fb<5tG0>i8?gO>sXK)=9v^>_t~rv z|LIgh_7C)2C_lPA#kd*If?!)d&!I8smgfLZZ%e<-Y`YI_3~t$ioIYPEl^vaV8l4V# zs1Cl;7)V@vV&tIcgd{Q87RV`wqO|3Kxgn7D!SwvBo@gpxQGof?w^cdtCHJa@NdI-q z+OQq3c^2_oS@t~OxZvrT=x%jw7h6qz>`Q=yJ3|&hr zEDyH$lhPG9rVIz1+c;aG>_flB7%fyL<{9Ei?PoGgehhMOM&a^UB!M1T{C&tJS6cUy zra4Jxt%lK!>Txlo5rN*{V$Z>V z000n83i3bz01`0(00mqDpDk`ee*gdj0&Fgms@Vqa9A5#^N9t>RZE)Cn0oFo>kN~TI zya1H0CXgpB*eQa|a!2)K#GV@f2G^_&f5O%c0*^j&*%_R*|L^1QI5uxyvP!_cT}@^2 zRmkszG?wI}^a01pX#F4kO%vH)Hc=eZDQ84GZahnCjhTtRHg zj7%J!w9l+?>w3bTpCtC?q<^UDQcIzjrDK(1sX>I}P|+`!8X#XajhjlUXz1Ey!6KiJ zb26kiIX#wQevJRT`!@YOX$nxRBRIi@%gjp@X0|?igcB159EpTL#{#+`JS*`|;yL(Chy8$0@t57eFZYVtL?nbNT)nmyPBhcT zxPm1RzNx~i2DQ=0Af))s=h1<_bJGBA=n0Q2k-U~os@GrW)uLTfu`?{k0RV z>E=+|IHhgGMi`|&K@H1Xdu{=`cQQ z2w^_uTrBaTbce|w2mpe}3cdMEZ*)FiHVQEV*mGmWyl!9ftU>D5{kMY$w5tsh{A|XB z*{pTP^NXTEYFe~AfYDoBG4YEfEN3`)FGv0kR8T(Vsz2&IZ<{g_hzATGx*w7KwWw1v zyVY_AZ69wxUCFOYKVMl0x&Sz9}4!))Ng^WFfib7ohh75saJ9G>R=CoL&Y6=wI!%Soynld z3uu}G^dbnQQATlOgmsg!`yO7?wQ57T^I17+>|`To>o`c(PtJMlnf6X|%kQ`+Gls>M zic<%1eC0&9q{IX9{fL#4#x>ff&yg~ba@+nTNk`{{9+rsTdp$%-65B9?fC^<6AqZ*E zjF5e*!~pV}xN|6XNqtfA8SSRfRj18F&Nv4jCA*AxteLAVROR#ivnZ)w&UO0=4}?X! z@-^s<{L!Zk(r>ys@^ME35tH@bpY^K?S4&TrlJ6YG8o~e@2(T+R3QS)S6dIZ2z@TIu)tHyf|2F0P-U55j${h0QMMhn%8S%xmk1 zgP6cc8sr;@lw%*3>UcGmt1YFjU@%lbNvYK9*LjPlY)sjp#<=$|*=iF;A#aBaRy%NS z3&(bx7^H#}(U4|Or^5gPF9K`Qk*EQnR-g(Y&v1YM01eOJvGm5YPUe z5C8xJ04KS<^IeO(rEJ>V`pdl9Q7q5=`ZS#U(jH}a+gK39#f?}@2_Ig|f(YB>38m9I zY9aJzB*j^Tf%=7~jQSlI4qO|@)QK3$0w=p^5x$_u{z%inNTj0L@>k#$fUH;)vq7^@ z*VxL2Y!h|*S>~&U&diUvCAu!jE|nP`b`_+S3SeFI88vpIZb6H~e1nq9hSRR{y#%!B z(scFH_$B@5hrl}9?nDb{H?%vB5UH6D5>ny=Fsl?nPpOXBAIXiDaRb1gFqVwb2udp! z%RrJ9!G&9-r(AGPwoyfz{SyfW_qQNWu9%LKI}S`AmrXchzL}w zl9Y%{arvVR^pz%Pn{sjO2Rt<|>CKT}5C~{?N>2J5$B4X<^%4dGQ?J+SGJzg|ugX8Al)_;RU%8lRJD{*Sac=6iv=tR3p@c1DU zZsS$WfPR$hKXFu6wG=JZ(u#W&DjfYwDsu0SQwys-;TRbUL{+W7BT|L&zC*cqw)X<0 z{lzE^p=a~g=8eVXMfd`FopTG?PjCRV=I)dx50E%O(#@95bL67w7T8V#au2qq*5LI_ zow^B)(%ltQF6{!#t=L(f%c7X=t%(1-X4G^lLs7GLHG5HGh9}`X@)WsDfHzSS9-HgP9^}z<} zK~5gR4M=TUOf?AmIrv7WgYfBCyVRfaoK@5BFP*+lWGrM=)<+Fu=(F-y*X`63W0+qm z4GU5+!-9B;kQnSiZ8;l8LA-b{Kj?@p+?jb@-Wm|CqI{ zy!j$4r-D#yi$SVM6#~MN!Z>~;Dd3L`zn^C#4huC@JvB_FQ8V%jyM5M%21^?7-5z#V z@^uBPA8U9k0RnEdKm|Gcf@;4INCfUdgn*88t6a}|;NQ3_q>%aWw#f7jCbz}?ep-um zS@OhDn5TrKHI&rctIOG14jiXb|C`g_OWO=jX=IvRuo}f;5ybFi1HpVFYxy29XM zc8kTO{qbf6rvnU?urY)+CWR8*!^f4x1DMJ(o=}2jm|En%(E@RRnzupmhpR~4Z}{lj zz79nmRfl7Rs3)B#5L{}Xg%m4MXGEpe`hEi8eAqkW3D=hrU`f@NMCe%P_$nKM`vw6j zA+>~prLK)jnidt>Sb~%SP3KCz&i|UJEXh&t<9o_5{+3_?FbUHaPq$kI;1UVNpIGJ3 z34aeuxWBD3tM(jGg)lDiwe*o*<@(T1Ow6zgEpYCiuUg`~Yv_r*3(#erON~Mzc=xgK zoEuwx+j_Fi)a@xym`RtPC65#$yn2jE0naS2?i<&=$Nnb&x3E>r3|2Gnb9BbUdNXeT z4WI}m;X?wkAizN+_Y7;>)W!yak>*xR3u@#_)L{MO)%+71k8LN4|*2j5xMX#DU=+J)&dDx$6ZmuyCh1k;-$x4nOUrq#eT=@vsMf`iQYv<)m!;vxM}6Axo8lN;E=n;0wp#GXu+`!%AG84``#htHpOppIy&z;E0No9U@9c9xZ zG3NJPqNnR+j6+O->Frz-^!pz~OQmQ+H! z=o+469K$)rQ612X*HXlnzJD$ex#%k}a9Fb$)Bm_kXWR;q!rsfX0NwIIt|N8^^<3zC zC0e=yndLYaLgoYDk{r5xRbb$i7h^T8*%fH2$?9Iq%HL~4(;aVl-GWQYx>c*?#7G|b z9Im>Pp;`J>njqCR_Bv)-HlQf+h;~2wOny$v=VF>qyksxPdd0bY$trw}h=;BdKdf^Qs#Eo@#i+DTHy%btgO^^V%eI7PY9c*uKVl?? zn%PY^^2+{G5)x&CrrIroEMEP_B5JzCi`_!y&vV5!q7r{B3cWzOYg5$Hw!lb9bDxqB|Xcoa1ny?ys%05-w)pg)}4HN)of#2-$xxaA11Mdep1U&iz0O`jXS8K&1J2x zl6yl+Vey@ZY>7uS;CiOAR1AJ6IhwHIyty+5@Dar8E2plmcY=JEDqI)?UNU?MWHM+n zgw>o0i1&w1(o0(yOysn+Dexy%E_w7t{`{d#nq+^Ega9`HYT(|1w~>;AVo85RVJAKD zgv!}(k`68u)x-@+6gwJ6wRB8YIhgF#slC~BqK61a3DFp5oG^}9V`wUu71!X}aWOMtJP!|<-``1^hvqP)*?umdTXB2xtHPo)7>40{{R60009300RKcx_X1QEC$CD z3bG4(vF#br+GxI{QZHmTR!X2Yocl*@D^66L_hQ=2h{J2*%!tI7{$nQ|X}Z?TK83LG z(e9)&V??JUSmj5;OPhIKnH5xZGf@dEMijt@5R+|5e2`1l-5oBzO2 zz@)Yv@IU^Y)>t3Aav38a@i_Yp_3Yh4#Y)*kPi4pa@WL}BQvMe|e!n}9Yiz2RS@w(k z=`(+H3Pk{&ysG?Ob?8gc^84eL{Lq;5PAe2jr1f+sUVF?B{{6DxnYpz#Wi;g{qw(Q- ztsC($-_XE&o0WmTAPMH0Qb zbi;z=`qe-&AmkMgp&_yARp18f<8)?cvQLKM#4k1$Ot333K`5z<20G`v-9b#cNwq2! zJ))ChFmcZXn}5>?)jO2@_p1iZ*_Hus@me5;i2gbkz*O{U!W#0Ft&^t41uEK~-t=Ek zHK0NE-{WZybnoGT^oolNc&!?_0-*${+Q+n(n~r9@ndHwL7`Vf`8R$(+&bOc(bN+kX zUv2Z{IbvnIXX#-9vl&~oc0gMj7{Hu9iin$YjOy1Gw$t#oz;>wv-;mV?3Nb&*d&>Wh za;PMEGo&LjboFJlUJ?f3PMynQFW)a`ozx%mn)(E+o%#m^RJ2MyGF8p8ejbh&DE<1A zpVvc^GiqkuFfZ(v#~0BUj}4_|GI{vemM9kW-MJWhL?SfK1S&j`=HmUMx^gYLr)N;RLTcf>+TKuzB?k zPWjr$I@|u*Q(n_mvRDwxt2H*OCm+V|wn~(Y>&g6QD#T_}zVO`%1RpawN?QabWu!cE zK#Q~UiS_Gu-CtR2hm)pJa_CU|3$`0^n4TmLIX_MX)o4U@+;yFl)aDDUS!}h*f7j|z zkp?Zm!2G;ze}=xs5x=KiU8Q0^Q*Q|s*w z4F8vCOksGrxz|p~V_j~^_R{H6cHVbTU|o#085{pItH5a1T+k$)Yw69+YF~oUx=Wv; zgS$*Yea@#T89eK2Afr3o-jYGwskJn6jf3WH9FOnC$ie{IpUcnQ^AN4fU>Wt^hSoo> zW8sL;weAZqHpckj7gdk9L)aTtlAa%aZ=yT+;5!v!*$hnLLJAOwf=kfP4E$ZJ#(Izd zBZR8XP>+gk&7_=9Ict zr#lZTTL*MH>IwCv5OQIwySTM35+G}oAcS09$FMa%B!~b2Hemn&CCNdXa!uh6r6yAV zQ4w&@{+KsFt9`YfECXhyVZs0_=T%U&bp!s|4!DksHe%f=rfjH%d(e zy&(#1F!DjL9F|4;12oCtWUYjmq2tw+0+QsA*-}O|#Ywpt=oM0)^--5ooZw^A?}EbaD$_tq!}# z2WX-ICM*=2QCV1Mnmf~v^lY&m2*DiM;LZH~!yXPcYhF6#9b`eu76MVz+W4q}e*r!U z%^&BA*ew{_BUos;L$0ZPd{03qa{HLvKYp`88e*LNdlpSgcguI7^%e}=>vqiZ6%l?) z4Ia-wU9=#%B7fPd$YQ}Oj6>80yNX?bXYKc=Fvq)r8QLJ3= z#VZU8VMDEa$m6w1IFLviM^Ia3O1-|7#pc64j|Lv1XE4QSL1x_iS1|D+C z^aEc*x>4uIcC7pej4B!K_HXRFoZLyjM1;Hp9EPiPug(0_jlR`)(v|oB*7q?@`Bw#Y zcvoCt=XHf-EwG=+%A$=B7K{~8`=Wb?KtS^00WE$}&~HI>4F{qm%)-#}&nu(Px|n|) z#I%|=)F$ww3^U(=&d2&yR9zylX#Kk&=zaHN4$)w90O7U(8nCB*8{LNq zJ6q&Bd!-UjqI99~c1;&c*%E z2g$7H1Q#z!qtAm~E?3z8_b|mBNm3|S)R4PJ3#WxlhRA@Z=R?cDSS=LJv-8Ij3Mn!8 zb&hSaziGt^>jDrQSdB}U)Vl~EGEOgR&WZ)6xMS;Y&i87a^MbmTya*i#f&h%52G7Iks{CeZM4x5 z4Qd??Zsm3#4?YGpwCFQ@nYVdC%+&xDIxO0kHE`Ip{mZ7GSm_-EWjT0+!epfN8%dZ~?#x(HbDMPk zbB2VLmTU|JpT2@76wr4SHysoP&pm@UOlA0eanegv@|3Kd+NVGKU0OSc1{9K!na@}y zU?m+H_jLZ{{o*(zH3=EqH_uZ1%5eI~q znT>DP)nZS+B`77eIDpSBe-~PZ)5pA#IMTA#{_Is~X_V#D1nVk?ixv29&-4Gx;%=~? zSDzOk{Wq1ar#;NbpzkvFMap<9VPBM>q;>B!vbX4hKRa##9b#{VgWngn2jlCbxWt>ew#r zk~*YUHSJI{6#*{_RlWhi<}Hv}d<}N2E}(`~X~zvD9y#S{qN0L0uS>Sj4hILU*2(OzfU#TMIEXl&G# z<`4G9oyA*hls$Vs6>z_^=7(OlH16^=HS95y-+#X##|#kQL;m*L3lHQIwuaA^8JG{x zZk9$Cir1WA#8+sRPUAGMiCs@z<3BFRU*?|~E7)Z=#Zo(f%P)y@P;+f_Za^OQ*%l;4#kg$Zz zUZnU_qq!vj9Q$*&qw<|J4kli2PjHRYks6Rr5hDs56A^#EwfO zHb&>LEgrAjJySTW(a&22Yv1#jwYPNfO(%0N$-ael_q-r`yB(&S0%1^JK<1llkvNnRon683;| z&ab7VP8*DPr7BiCb$DP(#MfByLpwV=ByZh$ zM1%*({A!n`8zj3BQJ2A8tWQO#XZu}}H==ZO_MJ`U5QUfL=4f<9i}7qf0lH1#7sA!n z3(_#^Pp9Op<)ye&Lm~8izxZ_E&gA!-7z8WmauaGUowU9v+bALo;6k0?}r04vjik9p1hhJN;c+vFI!6jv8PY+d0JW>X|uZ zdT<`A6l`C@!Y0a;`O0j<%wS>Cq0Pe~BBvw_)*uc0Pj?PsxOOD|!XW+_#`0P$UJr`8 z#P3k#7Sh1vzOfzg{!VCHIqz>eAIz37yi91O$@)u}CBL4^6i2q=`B=%7^8-u1M_QL? z>wMa4NPj{&a$)oBK_@;UEM%YM)Ttq5EVXl|8v|)At~*Ot+MW{^V-9_wN9srKg+kNH zKAF96CptF6z*krR^rgqF_;Lw4ISv!;NsQ9yoqd}BPnv#zp02-k%+6%Q%z}s60~xQx zy*d}`C4Q_v#yqG#mwr+#G(A*!6vFz-+=dYbGvCOrflTFr2#7|1+k}%f^E_GAo3ty04x^Jja+35lLQ^ip8GN!0m-J`e zxFQYe>k4R?|7wTik`me4k{RWF;P=SMY(V2#tdq=-xizW!%F?>4Cz4> zo}R+l8+*}2{NTk_2fxW3k=A+9Xvrtvg}DLXrE6jtDAc*oR%t^J&zsc=>6A@tLdUh; zuNmk3(wh9Y_B35Dgl5FcQxf)UK_$TvQj`b61AFNQlT#0WBh5d!rxi$_Wtc9}EmT=@{0+ zF3}Q8&L8Qb>)^>BALJH<cCubPlUh2gY>KfJh6UOOkR~nVE)Q7&Fe|mH>OTXva5Dd8#)cA( zyvSnofq>jG;NQ*A({*+w-=u@u!34Sn?vsJ}_F554Okmx3@{|0dZwLS&1S}U6mLumY zA=$ad5qm*k_cjm9nNKTU`CRzaLm}T_Zg<;^kNEljmF{olc@O-blmE=~+Ht=<2QKE}sO0<+qPA0%l1<3o=pwR2grGIAu>wIXJ+xZLa4 zcnW_%hVIpWBzAQR(@Z`OD4HEr=9ORBRPhaN{F?LYF@|xbqoNCj>4i@*(_h+S?_EA_ zF`(WxQLa3(jWW_t3O{g61T39=h-TB3!Za`^V z&FnCr;~2A#v!1X!W#$sDmK@QDL$lKG01RSQ1!LnEz=F4>YDd4^QnDWh$tl*iH=|Z+$XM#vD8oPEj{sHxURH za@Vq$iQ>P}SBzmj3QFF8P``p{_kn9~=#cQi_g`D}FNnw8Hw`S5+=bxWP>2^D+HHSA zwc8l)*nQQ1r+aay?qMn=E3702_P>{=!n^&sh@LWkoynZ;g-fT0M8>g&EQ zDrMJvqXQzw^j4(ZWWwe~^CQrnTX9jpw;PjMa6-`5lx_0l%nmE^_3x!I9{PlAlBdPA zdl))VR5$|ksLNBA4+Je_OhOM+wG;H!Duen8XFJtw&YlZfFat6Vb4)pV3^#ymIY)Re z^S80Mulrj&pP5ljD4mGB8fRqKQf);=U&zpZirdD1HH(tfUxJ}F+{y~BuFe1fnnRH* z`F+W+GW;^1k)daX$Qt^>MEHmn2-%s5ck(_D+zT1}Q0;rJe~tWPLDYw;NZk)HRX!EK z=F1zXd!+W8wMj8@NeLa{bpHO-D0h%Oq5Pl~o>LP*w4Sz2rQL%a0gnE5sa%$^DV~j| zvEGga=>$jWh?l{XS?vqSd*Skn)c%nfJ>pIwR12W06zwXgnhgraIv~)e6)qr~_EZ=g84HD(bMwij0^1kQb<4W~uh~=Zk`_cHZk(pm!BY11-6V6_L zYjV|cr)j$A#Vnu z?a>?;AGVPeR#(5j_wZS2d9)2ORbmO)ry3}){XD;N_K+Zzw{Gh!)=U^cE$Yi+B!5BW zz!M3~5p_EPC)yDK^x@;l|F-UGD+g~_HD3Pjx_D~5IddgPT1p3V7*fM860O2HWZS~Y z%<)$T?+C8`+a?G|nQwvXGxWL*Guim(IWV1@gN;__$|=5@761TUgFK{{@9&E9tGn?Z z-aAF7O}+dodJ`M@bZ<3^xrfVAQA59w@Ip3$L5K(4}xWA#(+KorQ3j_Q+@u zyYaQ_&^-Xl>Sp3}J3EgKjS+{85xh<}WcI(QUYilpAVTCwQ~Jg351(CFB^&73EGpWf zfkXIwd{cC_#1$4@n^G7Q%`S z=x`BHhk=5{*dB`TLX}xfm~88e0>Im{HT!b8gI#^A++X%7?LTRJggtX>FFMwh4DG?i z&NCIK@2jF2LApv4SNz&Os;&=51oy3X(W>vY9}ho}h!#9+oPX#fCH)0t{WWH+nLteu zm>%Q@@UZu!T|SrghvaFUP?}?-@6}swQ&5BPi{>0g`_5PsF1u#rNF*LXoW7<=L@`#g zCG_OU&ANZ!y%0d&vVHrq-kh2}(pqYRO{)T}MkC#{>AwcO&1{=FwVzNijsGav`~lHp zfmIJK0g${BZK&-(yX*Gv;dI~L9x~yBd{k-ebwb!&duC+8q2pIVb1*uNLNLTdM8br7 zL`3_O7jx`)M7NK0HoFFuV5Ie~wb?a=_jla(P(2FD;~zkWn5{;+mTp+#9(-tg&pHO- z?4R!TU5rh-JonwC;WQ6MYKc~U$!~$#oT9ph?fR5*;RLrd(gBWMfjR>8%6LnITPDSg zR%QP*O0_Q)D|3@R(qu)-V_r(QA8PGxwR{~suNnUVX69t2pVPVvm} z+Zzr9a}Z$j^Q}!X_vSO!xz>r}6SfWb9$1^#6aoL)YZ&kLI?0t(?^|twfJ_{X=B`?4 zm5>;ayd1AnMbsjLkvE>CBOYcv8;yxaVkb9$wMxdsHYP?I}}zRk5t^Y<%Q z@%=z*sFK}^Zyd|>4DmigkL-Ay#&|e?#_c2Dl)z{R%Y)(ZS9P) zU*TTsES>Qdl0+YP?s&!j30~-8HB<05XpzjDb_BMSwvts9EkyK7G3lg<0V_ z+=M2i(SwXNLots33R+IUkV8spnl+r2u{(U#-Mx;}YUl%bW@*YmM)K((v;j$1udy*X z7>r6+b+|z1XQ25(M|>23OMH5a3CTfWO1&}o9JhLqXNDPP>V%tWTA$?WH(q(fmu@kG zhf)-_4ofD@UE~ZLS7HPf|Gru|VT}=;%E1}!m&b70T{FBpXZPN?NT2x_E}9^v_qSE8 zNpX62_I%NV7i2NuZXh+)nN{NTgF0e3%I>g^@kDh6^^wQ`qI-QT5+-7Jx-w%NNpVY; z{LTE>G}2{QhYg2e^$BcyIFx4r5xhpQDbZ1$VI9m&3H@dJP%#A!Nw=Yp>^ufrX&a%z zX+3=i2v+!&o|GSw6|}MFyjCbsSM&q8@v6IQA6Ta?>#q}AZO(wN4CB@#gXTTR_08EB zJ=|MmV?bbtDH8`pf(njZxi}VWZkvum#D(`N>grB|UCf^T;zjgLcBPl)D-7mr(4O14 zH(T?)^guYA5|eWgN8#WNbYsqrw5R9rJSf!CxV2#picaTTMiAFX1pjZiF{_vSHqP(Y z6KWq~?CV64O_;oOuy%6+?yR*ww(JYFVz>P6B|deP%)_n784|qq6S zll77GkP;}r`QRmDt-oqC1l2Hz^YY=l_V%7vf1}b+`^7$)KI(pB_pFQPJyxJN0VK+F zbu^kIT!`R;evmb7K2Kl%nO@X5ce|Z+jbDMe0X&L>D@%`xrgmPJINBPOmDIVdolTfB zv_pq!j2+q73MvHL@#%2+JXV*3TuHWT5`4fxtuoVsjVBXbwMO7}Cv?(vxFZ`^<*f9X z9&)bzfbFo{x@t68hA50z?drp@OvtB{gg&7=CvCcy}~{S zeQ!xd)L2TX==i;7Xa^2awEe0|J^nn%tDL#KEvi z^7^T9UHDIh-1)ilm-CWEzO)@%R+HL%g5uqnEHMh5Ev$2%VeWubLT5o_FrDSul}TM$ zSXIPOePH%Ph;b4WXZTYedJgB1*HZz+zd2W9rhG=sPL(f_hhXf;$$^s%R|C+S!4=d$uH?O9s$Ai zZ1q(35s1p^aC*)4(`^bch%wuu@a9pkpTi3j;X&fw zvOnV0kQIGsTjKEK2tz{m@Vb;y|M@1h4L)Bsp~GP8+Dlbj1YOo&#Eu>9{^|&j9ob{r zZRSMYjD4&QSaW~>w3)3-qNt+#^2_E{^{43G(xupyetjvyKvM4qH@iF=%p0tZ@xI^5 zD+>I4AHTQxkQSWf`et3wNC8> zJ_5|0C1H&g(C-ok%x&hH@K`>U!E9Mtn1Q?tEb!%O6Y~w!qko!sNjt!lls)SpsB6|? z?L&=5nn;iH+swW!5++yp+a)m7I{{)GxCcnz-%hjJ1lD|0o|VF3THR0rowCAkC}8RR zNhgertVO;ZfS zHEBVb=1OXH4*w&$?j7jb`1^DM=wX8$fRILXI~0_Ge!8J&zoMusd%}R$RUJ*Q{^Y80h4TLO zD)5{QP4E?5P=1AreJFPl+*{w#f!(fd4;ep_@=OcY)nrB>+$KH2pes$e0-WQB>BN-= zZPA$WXDjA#?C@E$kRZN2NAXb`C5hIRB8un8BF=oaC^8`Gkx9Wnv#}evfJjfqD#^aA zU7-2lVgZoH%B#7+V3d!Mo#Aj7sj^{$?-~(9vEuD+Nt#rRGr-QGc< zy}}OcN$Zb+GcmZ4nGJ=pi2b{3 zGmeAq1b3Rh^YyePw4=A_wq{V`gGnm)S(oU`WL|=BxpFV?87P;<1s9OrZ}KhASj1P1 z(9HQxny2k+91p=WXCwA~uUJhp7K8qbJTMumnSZ?e<9YL_;x+ zVqDs_IHwySbae>!Z{$nJ5{5z*r-KVsBlLz}KV-;bNk>1TMm0K-kkho#5F_{UFbKn6 zl&rUw%1()C>+wrY!%X;IKiQ{+S7vd;wifbcZB+jmFeHsbki6U0FN9dd;id=x$tZrK;PLEFnV zW*q^~ubpVbUZN3e+hVxaYlV1%xWhNQZ<$;q4*C5}TSq&%5`!mIvT&636z9))hz4Hu z_}NpQl>6RI`3ctfMUqr{n49qR5AY(`A^Oa5ZbYvm3#sbgl24x;yaM=j5%Ma2755N+ zv%!4(xxHG1XaerwzAN-buO*%zX9`*9OqP}*(t?YB(VoWM{H>zR8el4#18Y623g-X0W!R5$Y?lR)@6z&oIH6AkogU|u2>p#CmG-L!a)w4(Ou zYo>J1_h5`bpY5ZAV|B_xWP^Nu^`=?(lz|7rp|fg8mi}69jh1@G`8lv7 z$X3_KexNKHhL>k~XKL6TCsLts6R-hBtR&S+ZxWG(3_JFD{w3+OY7;|+9{adf=^Hgy z#9gbrHdeGQegfWm)C#9XgQPOIG8n>onv3dM%F32vEb<|^!_V+JUV}CnLj#F|;JY?r z&yX2Sb8U*RgG2@+@BEglBewI&EXle~OAu4VZIrkuI9}>jn)451t1Fo7#@vN->Di#c)3^+ zXb>5V@Nmv;;M&gl@3qf)x9JHT0+GWJC)ZEG*54gR=lmNZjMa=D9w5SCjX}8pseR>f zQS4f%hikHsIXxog+*%oHYLY9W$v-6|+`_?tx20`lSMl~YUlhk+^Oe_gXKbqb6$Hvl zdh3pt{{8TMD~M2zVtfF@=M&8^{XCtRX+hUBx%L7NyVLxHE@j0C&U7 zG~Ycqlw2b*=+W^WQ`$vO@VIz>4;#fsEP!ow;srcBoCo9hF-_XeE-5|N)Q_Wm$dmcc z<0lVr$^$js|jby075!Yc7 z=7XwijeyUP?R&1!kEhDl(lF&TO&zsgy5!NreK=Gp`Cai0QzEX^H;$!r&<9AAa2sj* zq>q+6r@g)7>t}=-XY?>!KDg;au6vbPUnuBxKd^vS?&$fx-ex(vVXII1NkS9Zo2&=L zyDl!rD+Yg^@4NTA?oNa6k83Q!;y%O}xM?(8NVrDp8@?v#BUccloGPS|-ztB=dMt$b z$Gf_yoc48T10D$g8w&c{b%`6JzZke<+y^5#+Q;67CG}aQx+t5VA)tuSGSz%G&^WT% z1m5fJ+wsh6miJzmsV}Dr(>0DUAc7EteGS%4)bOP24 zA=F-%P!0^vqydq9 zHjm`7jWXM)ai=$pd}6zlyAex3T1*S`$DIMWVF*O^nwE6A^Y&BT&EM@mciAY&nU~PR$%LQiAHX z4R!o`-0d5u77@fE?TltuM|(v!=r6ozL>MzIXd22jA&TR7roF>izD)f&#qk&`DM~fw zN=+AswkTN!Q{olbD!S01jmntce_73cte&imnrxAts*|UAPx7xTB%5s;25;~cF^|JF zNsE-x{4pivOZCNKOCTiJ@D%~En~8oD=iLzi*mPIdC4a-?{D}%R$m(iQPZ&>oW`M zFyoLVoecHVl}T^pT!gR=GT5BYa-Yj0h+(P!VWRo}>$m~?0_G+BZ+{r2xJYuURgd($ zGIA?Hd1-csQZ?icLmg<+3?vE}jKUoCl5}~*(o_3y*=G;}shD9q{Vd9wzaJMMX918- z$p{Re{#6j`oTL6-N~hUZK&utAdR6a_u#h#06@Ejkj(HKHB7yzvqP4dI;Xml+P5Qe! zj@u(kJ@4IzpGg}qEYgMSQMD=nVe)%7;`--<=O|bJsE{-sQ&TVG>X@vQL@vU*mGW5V z1E_R7H2tOOrh@o-gO)z$d<(kCR7qj#cwHlUOPct-VeS!aA3LBk4azVHgI-wMPb_0GRxCD<(-*T*7GZU0#!_Fwac8cpy zlJMm~V1L);%7!uuYvB;}mpnr~YOqj;Uj+k&Co2ZG;J&Y!c|nc_3}VMi31pD{K^9|% z$6v2<`fAg7gw(7UP-o#Vd=<66D@^KvG=D2fN0Hk!!_NpEdt<^Y0ERagTLqPe8K6@7 zy+Xil{|=3W@XzyWLE)3sQ7kPlrDfzcmIGU`1Y{4nhRI@2 z3cL*NzADL~26^B9u!uvaLaLny^5^C5iv^&dl+|&Ms5#lMf8w#~%hi6cIc9ok3#I`# zb!07{l5flxhPLvTR=oGo!Q2r6s(_I*A>eyhz!5~KWNRUasr!M}n`UTo5m>{IM?b6+ z7WHpOn8cqvz_jHldGgi1)RFz=X5gC-qHpO~-@g4qo7Tjec{-`l?_Rhj1VHb*rvk4H_x7ow96gNxS7X zNnB3w_H3MhRmMK?RGnb^7Pu*yaQsjGrY;k+YKU+0@zC+pzrqIa1pQ=&R_jan#i}&W znmYrkbNh*)jCoMzl8M7yv{e-?voVhR)McCSA~DEEkO(oZ}tQ!`t6p9q$xVZL4HsECa-Q zM|581TH5mD?zY&TPglL}Zj+Ut3rV_v*$9J){_*yjHe+IUm>rB~b2oO#vi%utg7-iR zxIkD}aJo(4RAcU2Dh1aIHBGhG03rRu;adr`y4UJCQAGOx11|^sr-FoY63j~CA$!g)aNhz8;9uN@nfL%+~4k= ziz~JRGuUXAR@FCl1PR z5Q)y(R>DRIZ;$78DCpgdf@vjtexh`?L2Yc`6qbyyjlcT_{?(>;MmLM2D9EmV-1YV1 zJh+vtLg0y++`G=$eJmQT8x$wGHtS@dEJswFcNyWqu`oNp$nRf4%CEO!S%hr{DU&K2 zQaN@I7QZg@Tbq&r9GN3K$$#TsbuxXoFJZ~g@Esx$lHO(sg{n1RH9LP5u(-eW7^ZeO z6B4hlS#8pE-vpEHn(vnC%yu_$g3KT?uPxy5gC zyd($F$E%I6T9_1VE2JGQ3??jHjP}S)dxkW!8*^o8CNx4k-NLzyW!*2I10J3mI>77n zJ{V?K5OjLaKyM+!>}QR}R=&@akalX?Q6ON%rxly%d;x4WZd_G@I*hLYcb6-x_dEXz zWm=5~K#PAHh@(BgtQCyf~XsI z*Ht7Do|vYN3lG-6g+;jB-0vTonF?Z@KvX=w?&4Ww6nNZB=|7J6X|L*w%`>jtid@m; z0_3GnWa)0^dJqkb5M++R4()0Uaxahx`MR95}r3hiyPOd5Y>*VwYF zLV85hhXS)d*5$07P(wW!A0#r75Mtw<0$p4|w@^^B4dJ3IbmBUEWo5T8U%6t+<~`D6Q|WHG&l zE<1X-WPTs-_g?u4KO%9i7InmIKg$#C{J&Vp!w>W$B21DJo5k3}7$LMm1UPK8#H&a` z|3m|nsec*sQ#{VM+h?D+*(uCY^I<(vtrwboOVc94UcqY^ALO z6>&1paG*K69921B2XdwUg2<;qD!EPj7h;31j&oq z=oC$9#S;@{w3>;pbs8~g1K`KLxX8`%1~|L6RK=qN$t3l%e~!P&qio~4MyCdf661dp zI==cV>z5ff2R+=Rz{`l3$kH}D%MAnv(Nm4i@t0Uw z8aNB31-DA`m}cvqk*dV=_DTZ;DVdCfWPj`_eCJ1(z^?%R*dS*UZFfFZ=G1~=m#5C+ zgoih}c*lz4>uyW+dfAL7*F#|>XcnzH%yCM|xSucj{IzExL6a88JE}gK7qe3-gF^f8&f# z%>?puA6JWYXEk1C;l`zu>Qj(v%7Z}?EsMRD|IONPpYnzh;%id-VzU?jay+_rVLjs2 z!84)c<#-4)(NhV#j=mwco1-n+daNu{!qb}&U04pK-X zzr?a`deMrv&J8IVXE>ETxy-gY*%B}%W>YR7I1u5dFVerve(7)@Lw7?BqEjtOU3`1| zGujQz>+4~qqG-Ylp%|d&93KK?sWd6LSQB}MGQn;>#sZeKAF5)EeFvTPy5f)%DqXKFS5B_4rJqR8!FEJtewM-o z;%#C_6k_@|`oo!En4Fa=z6;C&>l$pwFdT~rB#LnK(48G(w?j?Sq;>sqFyktjJ%wHj z&-8?D#oi?rK1J!c3f`n3&D^x;aDhf8AFv=|Y+Pd5aU7(HEjDcrv75Y@q5*IT`3WkV z9EG_OB!&R~`#cnY>5b6wlbo=%j;V6Oy$uH#DI7SZ@0S~(g&>T1X_q*oX7@9;tE^93 ziH}~f6f5Tr+zn`9*7}sBTx>e~O*1Gqnr;t|>woa>umI##dQU#&-D2+Ow$rW;4}m?X z;kWrGBq1mYKBtc+_id-&!M87D^4~YuLkid|KCu@axb2A!tG-WNhX9gQUg=j*^T**Cq_3dl5 z{xp9@F`Vs{{6A{*l9taBR&b0v%M)f8QX#FYI}!Hpl&@%NQSQ=IJjI^dE)&rq0m1Z4 zyMHJ5&|S}g25k%01vE)_22DrAUlM(qe}XJIlT-tNIc?H$=#VXVB>eG4Nd=gL1>W`M z5rDrf^u=Q6a;^`I=nO661a?1YC3zro45Ik!pWNK?q2u?Mxn~4O%!pD%TyXc*+Ht$I zCuxV@d$A!BE?q+;${;nMq??2Do%7?PhfE1d0?i#%bE)p@h zMZ^EjEHL*{D`Kf-hCU$t)9rzp0hc>Efrkfmn#8{(;SjCPaP3^{*~(v=!O^;Pv7KYF zcj&B%IlEmT(X3_PP6%fh6m%8#P?We)TRJaZ127b)k6WKXfhB9|1>jFPcVx^5OoA+8nCU>m}jfwlZqKiC2#QeasY;-3kAqK9oxkl2=Khnt-y*7v z_N0DDGUJI0&I{{cgSr1g$+8Q;Zomr1kJ45&8`yWowZZ#}i+gy;HZ6FJXFG{DsN!)I zw074urOgAXSG+n*;h-2KFJ;I7X!)apR9j!?qqFHMYsf=QI0T{Iz1`HfJ|v^gC81MF z0c-=`WoZ1Mslf7%oF0$zc%MX*)UEzbnkKamJ0-PsX!R8DM97-(qiy{ zVSArueGd;EQxH4SK{!GqIt2#qu03lUYLFqUE;+vz>!4w?+XdS$z^d^%bBQ!3c(1YZ zDgHf^NZ2wR+8{>H`&yQ(4e6+H`$rno!w!WIi*8z_tpj+bR8=8!^2P$SzzdA%l-%26p;VXCKBx1 zS^fUJLM{NiR{vbgJ?}w%18yELKtSvyla=a?h&6p2YF^F9f;us3NLf|mfkl?Kwh8A0 zycT}@RiIJHnZr7<+zmn)v#1F8%qSCF;e%E4B zIq138yd}f!veU@76OHSOHdn!O-R1lO;dy^~miGYPAAtA4JsVCnl+dSc6)#|xi4Qi} zp0|O-3pO5rV0rhbUzWDO$_sCaL z?5&s0SMre&*AC{#g<_#(2ZkQQIN$6ou|R03RVAsn5q$t#CbEi(`0$DXaTOg_KgkxT z%CQ`f7}8A>h5hu*6%=zX`JD+0JxTtN3j_WT9X+Ix{f$$y9sUiuW@mrp0XDch%{&CT z0!2~5L`n1dIe&3^Nyi8;Sw}9r`Ov>gF5z`xTqByJXCfGC6xw=?HWF(a0iNX71ste? zS!MDu2=)Cw%Z6=vd8OScx?eP7yZiDomBftf1Q_=2JTq71kc;ZZ0swc!vAP;fmj0f@ z%6yJty2^(ube?GqmGPxl_KdL6`<&=h1Bwx9m*yZ`&pVO<1VktJhAAdZZYd|~(r8&} z?79k-@}ay@LlYGbW(Q>27>jqB%ed?zU%@=K*<%Z`6C0#79%KjLk@N&sfje}PuBhRz zBUL~3tW^e?RA;f(XP2fJQ#3o`(0Uk;MeMse^sVg}nxQk}u)jU13qT3$wdL?&zb6*aU?wmQ9$ z1Jp>y^C=K8T7{g}h@Z0Tz8g>qXFaj}L<_*n*OU|R`+Euo!jhk?OjX>~Xc_rHN#GL8 z3~~siL*l7+gLYC)yq9fL2a6?}jLqm*QZ9~c&*IF3(BdXM?A@Fk_hG$V{1Qrm;HE_( zhSE_A2lM_h{`WUW7j$P7R$SxPyfw($Pc0PxD0uzA4oERsU@UAm*$2A^Xs1$Ft?{@p zjC_CF6OEVIIp@><%3e^klR%kg)EnY*Rsi%O(MBdtm~@%Q?LPR`WM0w46+}KmSxH{* za<{bA+E7NkjnFhjZ;MllNBnkhSOju{cmlJLl=Z>I@;34oKs7?C4@v86Tr4ul$)$_( zEzBumS_PiBIxG*6ra^xCTeBjKp}TqD>oB#G)?8Fl`M|?sXze>1`JXWbWowKwV5(O%NM9`cDjSppqxt z+#ubt(X~QCTgS$pMj~1$7@sA1KHwGQ9=+d5CO>M`HHdl)+nGIdMd(Zc7<}Ek1zIY=C z&j*Jhj{KdTx)17uvE*9C5GZ7!w;S~{;QVA#-YQPQ5jjEV21K!L#-8OYl4Dxs^H{H* zesLMx#eu2Fjt?R6MIvLpRJ*vcD#K8-xAj0bjMN7=`2c_Son(9|;cso{rCf~~n?L?c zh*{tqT47@MfL&q`S|+4Ri4M5*%6I&61BUVBR8rf&_z9^1_`#b^Ef)>xU2e4gQPthf zqEODzsziUOlEFUnn(zQ#<^dC0v&YS(aHQ6ij}YdPT>XlFmo$g@_9gV4qkjOJt;&V} zYnsICy`>nNf~khZ`!Y^7M!6G~e0s>lUE`|OVgw#m*^XeyYm~wDn+qePqQ#8o5F1=5 zzDlaXRf;yXV67?TGc}G}chESI+Ri0w%|T?Y{I-?sGJO2`EV9MOC>;QymL#I$oF$OW zwH;ZC+24vQi4^SuhTEMn_SVr*Hyy)n>sJ8{BYijVP{P}H#v(pg3)`)Jszex`gl;Y7 z92<8u1!G&xXjH0j@zL2rysz|XXIAJ5hS8lg6Wo7lVPz_eD?FlH?;xq~(d3@e6<>57 z)^?;P483&9y-wtlNG#|2J#-uIeW@jp2-busMmEg>;9c--BQe4(%yN@t1k30Sx)$Ei zpN^{PE5a@dHYhI6^z>X12KLJJ&MFJcRcAaEl%;-1TjX#lK9hFYuO_;`werE_fB5L- z)0TU%zIj$k{G09c%HM_A5LC6$$+G~X`GLB0qcMF!#z+2Rp?y3VMg%LWOSB)n$UZRZ z$XUg)wQulJLr?V$!J&*ca8fKdyfh$}3a5y@uE0Rgh`#Kd6(pkr zFcZAwaf6igY&6A95$Ess`+mR}_7dX_q!()?Zjk1xEjwd7jo9LLURLV+z5d}!n{iIb z(c1M6u{aUj=gR)Qgh3UwSFuV89t5=#oyW z*ZE1;pS&5Mp~{Cs6-~=jdV##!JirmIz_k@kYIu7jwNlY-w7gW{V6fc~U>}iv#Kg4H z?@oshTjp(;`Df`U-GVL^1z=~L`-T(ks#Q~a`C9P!*LM=rTbxO;)k7pDZukK`qxHp@ zq9Rr5EaBiqWrz0+OBRjWB7PtM@+TaKb>5J{H8lep)iQ1_g1N$W@46l2_NjVSC&<9#5 zSi4>LmUQodp?3X@{E%J(?~y|Z6&rWqvE&z>*5qr3mWPKSfz9Zr9J}O0;S^8Fi^_FI z3-VMy{vn)I9`WT=83q7w8vp<{Krn0he}C)PzdxnH|A}w^Lt6q+?D!-4=r6v?jTDAJ z7)uIts!I)^Ji9=u)5FFKsA4asdlEW3UYU7^5gcBwZ9`N{B{T%r8+1ZC%K>P-Y*(;5FG$K&X*A0sY^KQw1W{S%FURnD zHoeTIBR?Rrj(I`rl&u^Bp=IVSX3Bwt4|Ztuz~fX^(BVgtA|25H`wuPz1HJJT-H~8o z?r90}ePD_Tye#3QDZ+|eT@Huqez!B?M@rTGd3@@trS=9`3>onv{XW~myVPO3VzPte z4&_PA_eVj5&zCK}xPtIGVo+a%QZhHxEvHNx>)XJuUMlf2%b*VLNWeo65SEvzMnB8L zn6r%sot7@JM0Vwg6oQ8*H;{-to->EZ_AAol3s%l|cUI zPYoBP9HRs9t?D5nh!XQqP#@jPD%n*Xf8`ata=;HzMhPlAyPX_y@zeGPi6w* z8KOO}c;X3^yz(rs^Utv5Lq^S3uTfW~(+qs@TjvJZ==|o35cRT5v2M5~uiziV+as6d zhGlSvh1Ojz*YQiTrsbly4q@}V2h_8d-DG_bcjHmXV2~qKE?noDZfNmalZ=xTMs$zP z1zpm9ex7}1UYzGD6eyay0N-M3BAATr!K$9={fEBc*q+ZKhc?C+`r9tsY3glK=Vh>* zl~KNJnVPOS^w-RRR9&;uVB$9>IVc&DKr=&6sf~i8E&(!L3f#z+*)zMHU~-X zYuQXNg6qW;te?%&bG@u9?yn zI0^I=2U!xG>ynZ~zmwyW@=htsk_?b$L2bKCL#5nr*m zPyk@NCmDd&KG?^jl&q<@Sa4&vw>-R)xR`@)TvDFcsneL*QI$#L89sB~_zb~JW&zqD zf^{7o9C_T|k%hWl@*07f9ZRhGr276;fxLbhO*IT?1(hk@%s9Bb2c3qgTk3mI&Hg6i!%5MR(L(vUSsC+3=mbb&N~(F7xBj_mDed zl@?I&>|Ek*E{r5*9+_Cc;C}fndP#Gz){Of7q53vzErx`x9h*bpUx76=_b2TN;2mxj z?jPNYol(N!y!#5+M*7GnQ0M(&J7DD9 zI&qKMLFiu_MXScz+Op`e)|`d8HxHvCF!@?{-#P)&5SF~cBoKW0dTy)d7N4B6$7T^y z-rNBeL7*sFpYWefI04i3s!p7H@NP5~M@fLvv1=P%Rjg!4RH_7Z22iv77%Z|yO}O<;Gk*E_U; zjcHB}x{P(qcmq2`KOkklYeN-LKj#$AL*0VtOahM~j3^XSWAfW1Nh~7;pT>Gn+W(&A zOAW+?f5eXSqR9uVYMmN)EU2X#KK<6JC9%J5n^@_* zH3<>*f18fGSI;$Kjtyk_n-c=DKHn-v-`F##n_$pw|0-f^bkpB-akvpm_?y5*z+-|K zKbbJ!^kf&PhOaLaDi9u3Gk|@!n8ako#zo$$ozyxlm)Nl1Wf%S+aMpm*g&LdPNHvbA zmiGg=!&)~^UO6xxa)~S>@GY@1@?*-G;U{pzrEtU5E?M~F>tiAj(2k2wk1Mm@ardFo z9&&zrO14ttD~C)&%#sQk4p)O0;p33}4bN%x>Qk4M^{w;F0n4#VaWpy8`22X?KM)OZ zo{&QTc#QbaK7kNqc>ATY=$wOuEY^aeW(E)<#W}pWxmv27R_t|ulP&$_)S6=wcoE>t z0+slJv35me4CnC}K8uBt7jk-0Bp z{SvP<_r4H=WIJ_}B@qnTbiI@^y1wKu87SW4dWVoZFmYMp?MeIwFi(j!OR0-#xK4@R zDOX>zl7B?+r?ezj{|$c~$$*ZL!ZdRA&9HkW*3Og;c-&Ma+x4WkAY97-w9TxU@5gAQ z|28kpXaRO+aZl>j_A#bQ1(^K>QWDawH1kpWoX7=91>G%Ed*LJvLEL2i7?J@P;3PEJ zSa6o7WyXe$qARAe3!p4mP|-_$iHmgL^8x!l;n^sa$Pz@znYtovT4`F)fr3#J@-}G! zGLb2xk9c2=|DA1lf~2EOiIQMPl-Tn@lf6KC^OGN(9$CrChWwE=&hZ_ScOffRiKa9H zyz?zrH=Hm}s~P?&(ky=2nJRg4=#LQO?wbv|b%B9Xw8e*5pA`T3KJyi}_nJ?)gd)(27m(uyL4BI$@IJc2L+M0_ zqVu+X02ZOF^YZkOBZ&W*z!573pIBVmOE~{S1+`_C*QbLbG7o!o#ci$t!U6iM!Q!n+mM-Nx?@pN}H1 zEPNi#`Kc>i#!n=nyLrtc8;$aSiW5D0ok`^uWh+?K!EQ^JBQ<=Il&WH)_q_o)a&mQ^ zh+=Tk{b!8q7Cce65eD9_P9@H=++EjoO9Qk_1Hie*{fkg{zC%*K(T%Vut&~1)1wde; z%*E4>x;idY}U5q@Oa!D+ArsJZ_tnB|4AP+XMal zhUl)kvOAyOfjaEBQ{zL;i;#CZ!NqZt(nYZ6rh-vD z>3o_0+oqFPLd8Vy_p&OOPC)faQd3qBo{YdQD8+@9b%#TsCu-#>%Ec`!iQGZmp=t6T z)is~}h*?4GRokAk?WR`lbOCtIs7HQ1Da0+t3L56mskz>f?#XO_Kjmo`J==Bvpe^`XFQ5nyEy(9C4KbnGw6LX#kt0roS^;tVk45P4hW9 z`$Yq3$BqtM78Wakf(5TT%sSP&#J|?yI~&$&d514b$-3io0%uS;#Tat zQ1)F0eDQI0jXy!MwiBt-!`GfwS@Qqp(ub%;*s`UL9)I1KTwbRnP<1{_LtiNXy31cd z?lkUAS!2`(a%ZQ#lrqF90D!fFed{;D%4#Pmp$>b#E{1=z7SPK-8HAQ#*6aVwV4$eT zu>W@o>lgX}-1@VdRxRFS=RB03nD&KseIt`zu)W1`rR1|f{+h%0Y9ul|X~;O=>g?m? zPZJfuE3Sv>5)2Z+i&+KF0O!HYg1%U$h)ak`Y__2vAfz=Ah{+Rv4Frx4S@7G0mCiif zn-B|+XV`)*r9keLGboC>w2EMYqmAZGJ_moxs&~!Z`IG0HToZO+rU2bivAR)tQqu}W z>{JdO85F9M2|PbBigf`1CCkyslv_9VG+@UZvLYRChy@TjG&T$k)_G z(87KP;>6wmBTU;fIu0)23VHuGgQsx!P-OIVH%fLe^i@9S6xn$zXJ1QU6Z+kWI)e>J zNn)OgB9edzNG3l>Lgi1s5F41uq}WE-!Dxi*78q@{DBI75YC)~qPf^}5+R*D2`Y4P9 z6C*bh<)clv?imMXX{X0HN0p>%#&EcWFIP#A!?|mX{c;;UhH{nkA zC7R#1WNM$aAwsAr6MNJvpm*nqAfz6$zST}zFD#0{q1sEvqJFPC1%|&2$Q}Tz*9`m{ zXt>KodPhl)d0#RQevTCk&T6Ug0UzNHUS%g}Adb@TWpcy`BzbAdIfEOxqapKrMq`PC zf{UGkqVxq$~~Jo-~eETOG*gHqz4g_ zhibOao(kK;38Eb;;9u;xIOkWtbFx!eufDsb6yf6wacK~rr0tu4f#bw~al4J9k7zml zDxBqYTz&qw7T4420r)9gVKpS{(~rWY;H11sUE=XD zyLIMTGMwX#y&Dj3e&#h>C4QgpH8j2XnX7-q6_&3<>cThU&08_I^@m442=mXtLU@B* zop!|l^XXCC0QovEf?yXXcPv#aM+aHIQSy!TCEu12Lh1g2%rd+%>SW>l3ChXDjqIm* z!1qggBpA9YlsN2(1ELwU2L`69r3o?B-j7`NBoQla%MQ?Bp)lfcaKJsj@oCwgN=rK2 zc&4e;rM+DmTiOwAA`23XR+GC1)~*KLFc}&8%dQEIFYuO;W=g;k&9Wn*%1JZN7N?O|nv&AyZnp^pOB zYx>~Fq9g;@oYp7Nf5x*s5O-W%ngQlriV42^d}Udn*>* zU(eE5cT6mSVuWSswp$Z@CK?C=RsNHD)WZqfY+|jTnr83#eo+gmJ zl?kj78MLZf`kSe#6OwfIW=wx=h5mj}BeGkn2ckNBHiQ-)0L@K*Yi6QQ#O>F5c7WH0 z&P*5tP6{G`v~WcYR)k1=*%y|CD)*ZG*0+L)7cj;Qu`mXrH{tV%RdzhL;+JkPZx%-G z(l?MB#$>dUm)?x}&+v!FRs{}^S?VZT`^=3t%t)Wu{!}`21BQU<|& zJK@x8cLcreKjgvJpL4uWdsw2hdX`w3jJ6}Jay!gGNfO#>8OzB*as@L66thc=XpARj z4?V8^8Ooq6>`sW}B(h$%MCM4rnDKYi;8Y|_`ogcC(ax)oDF}>OvV(jDJVuO2YHB4A65oHb&^x{^6tCdglky}aixp22y z-=EfA4nr%x&4;%lPgLF|s1Bj{^z#HnK^*T!Aut3J@*F-Dxa@yVdMs&D)O)|-aae)l zFElAdze19L8@+-``6JyGh#rz-G(+)7r82@5>p^J=>Dv)kQiY=~;J?pe@-y-mD2pSn+u8 z-|s&C>S&xUU-ZrcVE613FI{HVjf!{^*)F)xLxt3g(VF> z2GDV_L`VN#4H=|fQLob7!vM|&C*%U>4XMO}LcdANq(m&SviW;f2gD3_ZX*avb z-2A=u-}ZgZ{ZVpWzYx2nd1A<6`XqULKI9Un#B*kT8267e*rVSnNFQCCW{%)l1wZKI z(P7mSoCO(TvG|px1@#!iCTb6E)A|$!`gg+FVK?)g@!{8Tr!i|j24N&%99~sC$vN{b z*tVj;W3JT4gqCTudiHm=`4r0O7&}aC<;yWZIk5;`Xr1k~@?~fi;LStIDKMdJm+Rp= zgpwQjICZh~`dciWVu#HAL14+jH!SnVUnOzM25^#t6{J?lgJnYl3#ZbVwiPQTzr75O z7o&5Yft20(oZ++*y^Og}^vW~JnftHGmpnl{O{r|bKiGnUeBg%rv{~h=y;gFA%TQjSY3Rn6Vm<$098Z`1Y$8rLqTuRxv zkI2yw?i?gDCC+zmn6=^S8jq-Ur4Eqd1xyu^ic`qvrri-GbKMJB^NMiW$56t+a{98?>e3J#lIYvEidm(mBT&fRSDj$Ilu!P1t4n!Vr< zHVj(r2yfb7I=xfdaFMC}%gF|-N;?KyTw8sx9YaJmt4?gmb5p^4_1#6Sha&Y9^Q-~u zzrwaduBkr1<5|%(@NxM(mouW5R3N#MCqsQdFq!GfjU~ZWF|b>MBai9^HigBiz+u_^ z?b|L|anKq{rrMO9 z)GC<4wC9p~tZYh*sJphltP#JWW&`b=3)<043^x?~wvoj_9}f$+mesJzcCzbQeDLaOgD4JT;N6+ZS3UFIYXTLWoww1u6<_Q@5JM+G-lYQUZjwYYY zM5Px2#5Elx3IXHPv_TC`ru^I)PX7BiFB1(@8JPIF=?*mBV~9PvjjSRFPXZ|;H8QqDUX)&Y_1z4c#+}FO-B+;9$qK!4L{&` z?m(aUULs){c(fHjiKv|Yl!VsoYTvwUI?6N>J_05{wRIX z!y^O@J$@fs$eDmh{skzvPn#<@IF-y}c~reJ~J#}JvXgpj_0bwZ_3aq zDZM~f%i;G)0ER@6GvJ-FcI}qTCz10kA+y4vsKmqPGWR%elS(Bu>8H8n#g6AAWk=|x zq%_OW5ub6Wx$M@sm{Z4)aJJ-D*&zs>7B6hKeeb){_4hDo?C>cdi8;gbT>OUNBmINX zT<>!5|kp-APCW{fEDTX+;}1 z8jRO-f_KB}heH|PB0R+X(8^)VfBsX0cJ0c-DyCzz#5n(Rwr$0=nNS1BGT5tm@SIvbEywdI!DsH%Q>vx|gQAfnb9^ zg~bYV(^3xOBSUIP+EdWQ7qj~Jd35)x>eT4>b>Dicg1{k&yZ=a_cITbrs|w==@NyaS zc3(wYfQCjAaIvUzlGQFI1XXf_WZT&(l!%=1X1pu77P{7&TWm*u1qdE07{>8zBu=g4 zFsDtI;Da1qE>@>vL*rAEI)a`{807kv?%<3bUyTdsvB>vFdTC6Rv5966QN%kW&Zmsq zt%)RF-Dq%0#W!?@vwo|8k1Pm9yI6Zbm~=qdd&_ofS^32Dg|!@4%re>C!e?Rp11zse z=>`Oty>8#CL)P5nAyr&C@3}2Lk!%5v$3v7L=uc);dO5YvW~Wu0jI&1fo{-7}4_oZ* zExH}BO_?b0sHq1~bu!)c)zzq!M>c`0%P;N(P(hoPD%&e4;HtS6BuiW7oy1&jr;`1n z4RMQDi^*Mme9dC)YXmk+lORB#=eQlxA71c6Wtkl|z#1PVyZH?l>8a|!3SxJ?tf(`~ z7J0wMjmYkQc;*UOhFf3mbCH?)rWv7)X`MCh51&h2Gn`EN>b5tx#-eivkABLgzG{>0 z7G~hfmgqnma2UMXii}rO;$7?+l0Ndr7tWYd7Z_?w;}d=zc#WoV4;YjItK;*qSu)C0 zPbxGxOHBlDCDwCzm^ISm3xeBpL5gViVy|c!WUh{wxdQp$wq%47BJnZV1aI5e3qPy#>g1JoL&L^;L8Q{8qW)BSxOk`GwH~5IRs`QBjtqwryLRP^ZHW zZq?%`WClEBab4>>EiLqiV|jB3S$SB%^ko_9#9-m;vAq}RHML^7S376=MOkV4&dG8@ zkA7rKwpzC&7XxBzv$2V$rGMO<@H~OL?-ZhP;#sS=HJ?&d$8RtEPSV*Us^eN3F-aT< zG&mFU%Gj3Fk>OTqm2Gq^J4tU~GU-gt}vQz=G)o&^eh&x=`yChg?OXR$Zo*am|M&lY?3IXTraJm@*wlnW#D2^twlF!Z= zS#C=(@51mkpi{9Cq$q**^gAp8^<@#7Jk%JKqVAu0S8p+b*zAF^=s%UD`BiQ1vp(8z zB&CB^A`7m3(@4Kn|78O&D}e#nej*tEvX*zKVMF(JBresuK4oi6OnP`1IORWa^3a0I zL=YL0hQpQ7fO3v=STL@Fq%fVFCoVSAx2TP?LAr|hui8PXgjWtRQ=eAc+lxp}Tc+`7 z@S6GsZ!#ze>Aqx6rL^1Rsk3}L6<|pIzW?yQ#!ET>+&bnkiQqRVlw84dzb={=mcyPR zXgS0nRA5p78A4cu+4IIPla;2EDZQx|Ee4)u^;63)xZ=VY;gkdTO`}H=&j?9oq{R2X zcajb(;?thYpy!Fof16^$M<1$ybkY-n_-4Fc7=gl8RfiuNjfhDJ)x?Bx9%K6Id0xM~ zyBqEv{FmNvA)#2|iQgfl2dp93Otaw*QPEI74>Jh{+7j1}=k1#{dS&(W8oc~>t|&RK zfrC=@3>{Mkf04zn_Gm#L42X1VZaavn_Z-M4<7T232a}5ij@<9l@qykI9z=?}g^Y=P;|9K9YFRTAmQuZMHMB2^LbY9G48 z1_AZ~maO*;ojMX4%QrRHnlVst2F;3+2bG5Wjy93<#|g4*#+3s09k??@hLXjPP>M{| zQ>$H2QTt^Kg!3hywP=cTq_X%;!_3H~yr5_?B=Nr(dFl#S4srE6HkZQE$ny0~vewZW zoBVov?eA3)h@}3J>9|2xU|1aK$^1};3UMVXHpt7U73?x(er9q(?F7jB8<|WG8fCVb zq{CLMJC(~V=mgfrc8R{I9#tmAG*5cfgb8jLG_}EBsA0D6t$G5I3jS=tU}gyd_T#{^ zfmk;9n2~&t)TBPV=64*+I;`h}^tZe3mq7q>v^Gdk{NP3rA4A5u;u(=sDv}W=Pojgd zkM@rv2L>d-N)g%|w6{OMH+qP}n zw!5co+qN}ro71*!O=H@&w!gdYdn0b#y|KTIsHmvQs6R4Ko;Y>zoP2~kV&H#{ZKX;s zz;@w!6olM^q%vtHa7DwnR-!7AM`vmrug4Rs^~i_Qg~O_jg^ksz$YASD)GPl?wVPzr z8P+JyETt34jyWCCarsr}(HcQ-!kfUH8b4@3+WP-zRd8(g%Ri;YbV0m$#_=#<+VZvb>MlOk=LN~}7l2bhV ztp3i%Dc$?~AtBQMBO?z`7NV3ZiH3%QSffPL8}}CYSRZB;4XPd8;N{e*RD-pDvTr31fE8q_j&>6|7lOdleMW@S8Se0&_q)V0ZhG||d=X-iM-wW- zC$*c3q6rHFl%wctbRBntl95A>hX74H&qhkH#;?l4tN(aj$_8rnqvu7>=kb6pb9baC z*nO|JRc`)l_R&*5z1D=YU>ppTWUNTu<^3=S2J{ zZDC$~7@#>y1gc~iemTCt{QvX@MYKVJ;gK15TBs|yT z!djV1QBuTt+;d=_-tD=;EW4f>Ov;p1) z!?4IbyU+|vNb!DlxsNsal980_I781a_zxCzTbqLbViN@jd_okI>b&4)#LFpfJ^R)$ zzrVA*@^!*x5iSDgRa38sz|cf&(HUY^hw4&u6LbA!mQGTvQM(jplqC zgVtOH71Qx;o`|WoM~eU5AIG&*RtQH7+8E5Wz>_MD8QK%m)H}a+MA_Tb&|`hke4Uoc6QhJ zcPIipYr-(MJrnHFBGub|@}cTo3WYh5$00Pb&mc%{i8mb-VK4M7)IZe!CyEO|kDIi`u4gci(juj z&ybeL^KJFj3(?1~M_})S8S0Ams0~6Kl>0>9zdaABZhjQd+v4`RhG&yD8}}&M{6UxQ zuLPm3Ae+v8%WkeU;qvm1BC!`2DL0#SQ_qfp(;fGgQfF_COd~C=U zUp-q^vSZ4^0x1NAef4q+*~C^h2Fs|ZvXsb6^5t7*fOdSEXuBSm*k-PE|H{^o9n~SB ziDNNW4}`Tjy)TJEFDGun*d0MnvXLp=VDQBC)r>lYQ-Vrw8C;77*QYl*n7>?Y8ajM; zoW0PngPu{xa<_LZLlO(B^r@kzYhCGVDTT|vq(7}aO8gs{OHw<^;)?LPG)uXh8MX=E zE4G(PW?jj8EEOw>j}!}|FCr>Pg2JG`$2gFu=)kyByq(IU`c;Pz6K(}-wcE3DG|Py^ zz8G=%oAK!GeTeWcE3f#y#CEMXccgeEt>YJ+l6n%($>5iJRvd2B;`VY*+hD#25)ZvO8o%KIUzF{?o3uOYa1|x`bE2&tGGwL zc$-CX=Soe4o3xGU1JvDFR@I_F9@BUYU_6+E8LJ-kRM2s zV`m1hLj9ma$qeFxVuM!tmtzCuvZwxh35c_5Cq&=-^0l8D(-2%+ma9VoEEV(~5r}1Z z+0rA-g5V?1s4FBY?r=yPil(*hSGf+9PAZ}d27-)6p`QA`;{>!TRrL3IG~OpUT)8Y4 zvyaO4aX)(4VWowbyHto)w^N(JY&c%NHEdusgnBmnuY9C1O4*K1#qyOq9^T!F_*kpM zAf-zb#*^eM&UDbAC5KBKW;FhhZHqig+KyB|Owr*XQ{*35TZ;_o<fDJ|4|0P{r!c`i7>h#(_o($cP&Y+SYpcq5c2O5CGV zWbi*>w5c*?Zv{UlLadEuBWR6RJu0>B@> zJ&Z`i$PLsnrH(C~mXF?NUlTydn=h8qc<+^mg8u|1n*<)wW?T%6yz4Ycm;=%;uRxmdN?tSHtBvX z+nYvDV3*5=v)qSmDj13bfKu~&gBkJZ7fu=!*3J7R*Z<;Hvd4eT)2rZU+UcsrHE|Wf zXIp)brLfD(`C+YUe@BsK|04C#!4pIs5*W{^q?&W6-pu16DJud0$}tPd)#^B8Q9(US zH))xhW6eM#Ni#yY<9?ky>x0JU;#eFqBI8ievWiIOnOnG6h(LkY8}O8MrS*y`RuCU$ zT$g)2IKFZ`(;VVblCIZHRnKJ{COk7tjSZWpY^OaF>zAV_Cu2|neRssFdV;8DEmrxg z8&ct{p(NHI-7Rern(Bn%xfns}f@oh<+5>Phtp^Q>Z)wNM7RT*wENPNlv3G_k^vxx1 zX^X#k{hb$|!qAg1yT&E3VcphOm|7yyYchhZcVfUP)lV*Au%7g;HR;K`M)?ysW3@RZ z1nYemP?T{e0iKYfnbcNE@5}*rYk`7ACvZ=XOwhNhKI4mYEca)Q8kdC*z743!Tod4? zO>NL(KEzpVo}gY+a;U%X+%0?OFb65Iu{i23xx!Tagjl7u2TA^DfT~gw^YnuYRG7*B zDiyzkb$Ty;UW@f!?T4sT&dD{t`KoT{W!TrF z+xd^32j)ML;A507l6um1=TE))?e;-cqzaPQ{=}L<#F}hYzWu~{>W5$`j^wV-d;cXf zD*j7myb9%UnWm`9(tQ8-UE$I|8Kqg@ZSM;2q+bYSY7z|dTo5-Z((4;GNDqdNAp@S_ z2R``t4TkFl^uE4lQw;H6z?MguL3+tUz%#%UwMk~_V0)Cd>o%4vsy?2YNTXKp+Uc+b zmg>eJjUPGZUDG=sw~E8`z4?ezhyG0#y^jPK=x^zDz|O22@h{ zvzLTGhH4_@AC3Dfv9@6HCwR5ezV8%ry3^)Rm}t40QaWO3P9e-Ny~lx8!~=4dxcLjwhmJTNDH12?*#Vw5~{@sKOnbAou z1yi1z!taa#E3FED9@p3#ge5Rd2N&B&Fc+#TjTC+{?<+K<-Cg=k4p|wzx<8Su6+9l4 zXsj8WN+s-)nDXZ6!8nhNYk%j1e;CKt+CN_l9V|8aQQeO0tz8au#Uek<0{(1NkHCf= z{aJF=JMN=pKn4%)Ne@)>F!*7$ufq%;`dBbZLFP`c;}mG}(Pk=zeqsoazMD#(RcYj= zvb2sevZ&k}m9G6mi@%RkMV9{IV`^==p5(rr-EU{JkH#+`eHw7fb#7TQx}A^o_abIh zPHZQ)L$534Pf+g&zE}%d?pUI^Y}#xI$2o!vy6=eq&e~YKoKzOYLv^}_7BoqFL&b%5i3g4bn^-rD zQnB(CjqHI(X9f0sn4hnF#aF3^kyBf`ouVH|crgP&k`yXA4S_?QauF_^{{0RHmk)8*1UWeYvxh(M z{u9M;oIW^GVw`L+Jau{6yL(9Z-=;uz004kfpgisWm0rbZOM>HSYOOf*3bJ7(68yA! z6&sii9_mW~Aa*??B0FK2M2VjPQ`7Tud9XdpD>PLXdYh^nI<{^&$)XY$khgPnyIYZ_1|yN4V#9rb{U0IGt0ekY`Jyzko$ zp;_x!mn(;%Hj&)*57RoU=fb|4Y%2%tly|eRRFxd@FFiBlADJ2dyyOk|Z?X7HKOFUo zLRorjkaVUKhLjl&|Mw|C>1{bj*kHR=(vbfp->f6fB3vc(#qsg|pNjxxTF7orQ%OVVzl zqPE)Ycm(6x8@rv<(2X1t1T<6^fnFQ@$QAl&+d*nZ7?or-eN-$ryJzC5(Y-yl=5zFq zyAdM&P*?-D#Q5e`gE&|!|G^IIjk^)bx^R$Lreu0_qzVdE2QX}o&@2TNEY+rX;g{@W zb@nB}H_^x<@-s#ijkE;B|19UUsf|tVQL+(8wrYo?v?TipGJt8Xg+K9R#H>Iry0ohr z9%f$3nU7rFWk~qO&b2Q#X-Gk`m)i|^`B#7uk*moic8myoC-oYVk2LG9^$#tV!-UYd zOi*=){0vnlO-WsO*caUf>R)7Q*7T`Lqy|SuyDe8Ig@7ML>EK?=Pon&6j2Lcl0p`j_j@d|N117`vZrBe9UKuPj3X0>;`+Ktw)P_L?t%ne+Pg!)_UmZ)+`ofUkU=lvSG9|*H)4|}o9 z+5gTKeHedu%phEO2r&yQ(|V|oXH^h)G#FRxsV`M=QYMFDfXgk~^J+TK*r!bj*#CL9c?P=ta*+9*mfq3vHS9}9_@c0G87=b8#d zDaWU=Z#y8$IvA6Khzua}!Q{2~3qx#&DkBO@fEU-aM;Nu=~*Lw~us z&}a#hO~JwQsKuU;MRcNTj;J9@nr`#+8k2*l;Xc_rn!Qmp&dL#ck`yr z+$I6lh*+ARz+JEmJ0MhF)SsZwPa;(WVg170O9#*yisHisk+F+(>OZ(lq}_B;B_r0U3T|XT;R!7RUebd^H53Rba6DBZ<~|5A!FA!9PBCq5`GCILGW); zLns?#VBl8CPsIc2a&~|Ze`ja^HTN0eg+1s>OKe+)(v)dEwQOAw$9z_}8q%Rm`U;r$ z?l}{iJ_Zi==)g^@iJy36f#d&2X8=Q0&bOV3es3+VpnO*-kRSgYbLJgCOoi2*3 z!cEBM7w@~QG5(HC6hA0oJ8LO8o6GP;n&(w5IcJ7dSzX3)6$|Bs%BlFXm%Qv9Jvk-T z2EAE9G0flwa={er5!d|3I7h^Y4uN`zf8qLDWDQ1)mzYUQj^>z|;#>C}0n*2M`FQW!x_i>&b&T!3Qg77CkYQelwL;w)n z&Yk9;7Uh{hfCEW!2GPYf(1C!*9nl$fXQE9B7M~(^Cawbf5OAy8zzMfpAZhFY}Ss%mQ zZ8~Y-%UR4o*eUCk6i5OXf5Y< za~dhLOT97G21GMmED>w}yiQo_0Uvecg9Bmz54dOBXmVq`F^R z{tCwj(bai2d2B@*Z72zx5b{LN^b~B_%GWh}EYKclB4pB$&j7%bZyZK^E?Yuv;pk3}G=7oneu1Cb^RKNE@ ztSDkBZ{#{T40z9$|N3wQ=Kas1!25A1;BADmjChG;L?;XpcmKb;um5*NF;iXfou6p= z!_JVq1h&S>&*P}Xsl91sY`nWRz(vu`>1NslB63px#y)|8wQLig8O;FM3G1H~m3N=o zjybNae~j<1N+jr(c2!KSTulwCc_Kn_`k|;CwT$?NZ*sk;=aaXuuDb%nR@UE$bQP9UzA~VdQ7p``?U&q#`92((rn}Ae5mp03ElU`kmBjA6NQpV zbe1*0I-e9;`!RKc{TJL$$*658eH_YPV=vp+C-XraLtc zQ#@PqiYEOPKJ^3WzL%6xZhkvUaojUI%*XNg4!3OxiUVnnL}*o>i8(&E8{M?$;P`+( zAjVCz_MXDqyl27;I}Kt+AhYVK&5gkLSjjQk2@*KKlY3S?TcVAuo-M_y044szTS8}7 zm3%<)lFW87foJZbvM#-wDaB$AU3-W;-mY4nu6AYF0o~OPP5i*ULBBlrKY56*8N*@W z<9dwrFDL9qi8ufbuIvX#UNGLjQp7>vQ;9tuMd&>5R<;kiAs^w#E8i%Kzc90J&0*Xt0+wC#E!c%JiTC{ z=4*4F;WbtoHamt=4WSxj%qnD+l`8i<_?jE|O?qUTd+jD+SV$Tlm!@5(Oydl9`4 z$jtv}w9%iFnlLGrGl9kSS(8p?{hNvFd4cYNS#0nt9tKI`@0Q=M#|Y4~Z8NkT%>x46 zNLs0RgmQYP>#-J7ynN9`2K1IZ*XtZc@FyT2ND z{E=_U1$2@57ZXF!S@bc?vXJ|rCHrBU{7XVFtFRQ76p!K^$r+_db57oJveiH{8Z$$!m7VtzG%z8-@qPPA;LPUIm*S#-z*@>wU^ z%zlafro((A$FnBI{}rxKofMJ|Dw{Ms4jM9)bxG%;BLSBbpJwwb6xgX5Ws8~Z(%?G- zySLXh63t~mD#Ze)%Cv`iE$r>=9W3>qsf{#LXq)|Mxtm(`QcOfx|K#q4 zr6>P<-8jpMXGLTqy~Nj)RrnM}ag}h-XHzRyvaa0%@za@T>-n4`kZ}*n0#-M5U(~&l zwwFi6Pp^DdS2>!lVA-r5|4G3j4(AUF`Ez4GY#vWJi~$TeDHm;#)1(aQD@H5U&=M`j zlQvH}&rR8I;M$$7j;Mv{fTo*ME<85CFfA|i>)IZz7{`rApz|sBh@8VeONmBWvf!wa zmQ%CscFBdzh|Avxf|Mh?>!4lL;Zpf8&#T*aT*pDFW-0Bdb^*HPKN(CZr(is2v!cW-d$3+g;zZSS6IydS7I; zz_j$v?>#JAq^vv~HR=F_pWP8N=BsK}7|2l-O)FvVnNs_RTm0Wy(JS_$9gLl~o@&{G zMR@Y=m==xMwrZewDiCQbut;*YLkpIQ^FN zvA#1dx^`!ce#0Vf&C%t44h`chm%9~(GPRgXr`0W9+D7ubAlQG(j*$%;Rv9%;R_Y@O zdu653WHR1BxvWc@hHk~y+617QSDiT#<|Ut2(GO4r@5%FN_dYF>L?56*V74B;BqM5 zu8nNW+2ZV5&GJ?ec7p79jrcK3>Kkk2CcXRUg&dIn)f*m#p6ltug>zuUG6K?AIhnu5t0Zp*S)G1gKk7BZA`UFu)(0CnM(ImGgSD zy5O@$s_$WzdZ}Z7%PPQN#j&hATW(XDbiIf7?Yvc+Y3})u9?dyWXuQSESdH{h%P6*XHLx-X@*BOaQxy3M zX0yYk6S5NQxJvE6IJh@kUP^_i-}&c!4Yj|DHI^&Cm*pfo95;%>MeIgNTcOQecWz*yYrMg>Aha84xq!`oi*{L*cNJ zms(~WLK)V6x4Vese2xA?+3OVVAE9uK+5f~#;A?v@8%4?srK~*$X)#*!N zO$X=EP0I~G5iOhl(Mjq$igDd)y~e*uF1dLn@Qii~IW)}U84@*xKKg4OU-cKzql*Ku znrvZ#rnRYHB;4K~(A?r>9-D~JwPhC+?4auFWc6GBBMixE1ak~2tTIR3=)1ob%qsx_ z&3sU~(OENp^xD}E(b2LmFjfENWp@MF;_yhv#YaO#Y-p@1Ey$n!^XU05tYl$H6G(~> zw=<#ha!4VGr`)@TTv`R6nj`IrY}g)Dr)Kwt)jPSoLUY>qGGUhX#C5{Sa)^9UjWy?m z=w@4Tu(*FB@v@M}ZXi9qV_jL??9G|9X6TG39{SiANRp123~G$w>S_2_g!Cv0nGTB_ z;s=^RaYOULtZL8L9YuYR$h>SNvG=VxcCy7?Abf0L+(L340a8zaQqID?g4?fKmU<(m z5LOd6(!zdkiNr=7rBx@4rZ@PMKh~;RNVnw-Jpm8{P0P~@BC1|kvtyc5M%CaBEnroq z>piZg-vG#a0r7QUg})o(OOs0b6-dzRVe=0}@vIfVG9GEAFn%-(&-1pKD3-0;HpF({ z^!}@=vV_r@d)GV%86ffZLP*lFBP^A&3bvh1#mCqzk9lm6s!7GT6XL76_;v zV(+5MioniQoy5))2KLGgF%R6%2oaXBX;1!eY|f!dCT|(8x8x>)`5Kj=O(n>nFA`Wx zEWqShdGvi%wsQlw&+Uns5`cCIe$sCtne@gX;-M0)9M^>{0+}V5h(FN-@vZavwHuT^8)tYYB|7 zQ04VYvbFgSD9Tr|tCp&TT;eh4=LVzME(tk@w4Uu>9s|fcLtKx*p>Y$imx<1uT^)BD>9ATwYr zo{v<_Qm*Cn#i+bfLVxlLKOt^yb72dqvDl#-itS}@!JzdqHE_pKt>gbV4qnw!Cqaqc zrh`~4nQfsz3ne%jj|Fv)7+ccZ3s_3eYs0Z_ui+FMJ_R#cR_42{7 zM%deC4#xMIoMAyKD=vAla?*ss*R#?22nDTX;Zyt#FB00OFYT=q7%>Y9=QM3GXlptt zcPw7#e=6t<&2yM$po3z;eHhX0s4uct(k$^!3w5?QCXz15)kZD>+)2l#D3W|p83q|= z8O`7;uTvA8>}&{+u4d8qVpS`mZP1_=>JIh24r%U;itn zNl>hXlHD>rHX`Q5Wt0(gR+b`f$OFfMB3C#)lKLFV@DzA5xTWlz7w5X$8E5XK%$p$L zeVFZdwOW7Jo40>&J`!#;xioJGg>b4&P$F$5p-kULYkv!f_<1z|VEFZEh+$$M$kjMO z31EX*hcvc8!e z415LUeyJOI{|n$eZ)ur*t3fN5E>IhsT4z~3A7QSL=1tQmfv0i z&l}25InxNeCS3(una(moz3(_|90%Ob~eZzbyu9{;9`Y0_FAoKNZOk0R)P^cJzFtP_QoJ82oUf9rd~|o(yg~>oEAd$^i47j8?yt z2y2yLJHg8cwT_Yj%d>bLpj?SeQ%JmsHg@;ldI8EpKRO)?lvnUSDL@JB!FJi;e>hjS zUwbl{^0;THr>l>}kbI8%u#my$h}5k-2?U_0p47(71IS|lbUbKVNl6Nj$8b*-nht)0 z*)RJ8_WAK-;CU+`es+1@>ezSd4;(D8U?#<5;3b(-y+c$!JSZ2WBc&LyRpMf=7thRpaSwU#$Ky zlWr+dqRp8j@l@)Ai7r2{kUNe?j}rm6o&~U_3NvyC$D2bgrqoAjN(c#SS|fm+aK$XU zkA0W<=g;xZ;;4=xGTE}T_xPh`2!})7d6;Z&5TIfS)6}hm)=5I*kSxUodweJr{Cm~F z4}b02eqhlOplmvn>8%W4|CUeG&7iIdX)j2&2++oy8;m_0XS3JT&C}CI`Ae}hwhcR` zx}%{yfMN(Wyq=}uG@PypFuY zf+{JWY!fl{!&U?SzRkO+4YY9!ma~8%y;>_mkPnsf&qf={C;+5T_&xa^yBA7V&EhX}dCdc4E+50+ac zVQvRKWN^wb+dDeZ45Sd-F_>x7J9`_Zq~Jy_`iI%&Fx|%{f1W^EcF2$ClXbM@hi)+R z#4y?n{8X0z7z{Q*F4S51@pnN+Bk?v?*V9?jK=XC$@uyvcWr!oMFZvoE%I(T3Ju{ex zTZM4{uy4@zZ3zSj`hc{Zac9S~tC~85hR){6Yl{;Ik)go1vzTE7eHYCTK>XiSUtoOqR*?hqur(=>+hO`nKGj24P9!JG<G zL+@7Lwb+LYn!gdoqwb0*y>=x>UHRv!r-tjs#={2Uq|(;^dT%uGNIUxS|8mj5MFu$? zM09WT51KzF3C>e%UYrR+A5&*mU6|eIACea+ALaK zJ)+LJykAld3$l)YcE7JXJePVP-WcqO!WK6okn3o`DXB$b{Hm!ihHp4=vusX$A3aOl z6GGhkA!tz|eyjRa$td79huExRYU6WJjcJ0n@LiPXW_5;-h@yx_r{Ul`D(;>5Dp-{o zE0+Dc$|BfjRwieFQ*f(1GNx56WMj=(A# zhx^NNy=Hsn)tN`3c1#R~A!p?(`$Fc!h=j0d8xwHGQHcgoITUjG`#NKDT^{XBn;XI% z#%sLV3LnVV^mZ4{;Q~VJuxM#p3bHYQomd5CbE%{SJZcWy%Jr|x%b=EH!YU=m1`x<= z=37=g5*@D%FoM0>Ip#qryws+ykSxK9#aw4vHIPlg6#15Z#M*a(w#l;h!G%XQW3Xvb z(TX#H0pWNJ-=yn3;}P$=^N(=KzUODML2WUy3(yS~5kWN|PX@;6u8Cq93T-ZBQkKso z<=L{HI0F5NK;z?_nN{%@tI=jdO6zq+HV&pkcB--sfJG>N&ixOMRS1oO<*cH%>7ION zqy_r9_0{)l(T1NXZ4Dg;hMdLjluRb8!s+J%O`0u}(|!5d6#Oa11XwPOZU3w}(Ia&> zLz#LMI6Wh((_gT5@7Rm;AB+bM&;*)KqD*lB{!zPenR<}4=j$G`6oVb5> z;Id~e0&^>{$)81wYE~>2(E2%xIxuds|E*#w+o$Q8uMGYR3dN(!B_qcZ7%8fZ-?YJK zTytLVs|}rMZSX)FQlD)RN>|%rCF|y;g0bS^GKMj^W^fMpFP7|HIwpYmt2s)gj;VH* z_XN+JRm(KSh;jdtA;;@1AR(0ysg+Mgv|P6Jo`1Pjq5*x;8bLz6!su7D_@w2|np^gp z89Ny-I)Iz8%6@wa)zaE+;xJ_PRr`CjI0ccj_?igws733{xMm&4YAsjbEb)1u9r~*=qKBf*)o@HB&0%tp{D*_AZu7V?dh0@xY z^wG(gTTLb5|_SGFsTsP|}TzFyTRQsxOs5P*Kg6-iYEoI&c2ZDFmN8;D1I1|^El z#W5LG=%l^ZgJpC}hgj+Wifeq3QoTDn8-ZipXoqS8{!h;j%-V%G2=u>akcA%~P)R6n z&@{#Lf59Su*Ox8Ev>viQghzi>eM%q~^g&1(kwX0T4=xw1tM1b^f1-)-v)wVgH8;#W zskS0@L)`GA9MrSu(4&Cj4$ndvVl@qzqFNrD8<}!?q}*GT=kDgEE-)GkuiMH&(^^`F za7KoGuB63eq@Q?z>r{p~)zbba6gJoZ!owp^Qbkr;Z?tL%OhAWA-f3~J#q(gimYsId z(}TY_!N1OUQJY982~Tcc~VKoLc{;$>;9i(?Ff{2@IQ$p{0N19ch`-}w8wToi40Ci1!>)AK0=ak z%9#Lt6af6cIRMkjjgqMxGAs@#tO*;`G%-iNzv8rkwP<_$`Q?m#;6%| z<~ms6-m;i*2oD4ayL6lrZyt5C#s64!z#k4CpC^|~F~I;(n{AznFJi+VI%4(4$w1N% zLiau16Fl1^I5w6Dx=Z%Qck#{K*?5y)*i(P2DNw(FIf?3@rK91ttuc$pL}9${!qfMZ zCiKyLsyR^7RH&O6%(<2e@tLlV>F@PRT%7gQ`!nah$;2c}epr8GqO!;rXu+K`LC)Ym zP)W$cYA(7rn-L~yZ|c>p*`$z37i9L{n#at6FEhmlwPi49dGY2VlDzc zP3vD>M$L^*D$v-lxWUdX7ZtW~cyU zn@jNy`PMMKpt4of5X@%5uo-hGRi{>Wsr%njPemF3>9<}V002k;$|wJy7-_s;W(`3i z5o5?$Y3T>0ltPB&W#K0YxM9^dCikKQbBb^`9f7v8pRk2Mjac->$E~FEZL*F&-ThuW zS}X2`03>ABT(|lw%8-2{>)i?>NAr)rbf97tyHHQk;%~|ck?Hn~hX2h8WbJ-3><9sR>Q(KnQj-A zn$=f&j@gq6S%81A#+3en1HSC(|E{4#R{cNTTcsgasfRpJf3%JYjFF{{k{Za+M}Wx+ z-5y5D*FZB!xV?rrLtMabDx8KxFeuLZv?b=G$kGE_XxZwY1gXnG}RQ(lwprACs{@Jee>;I!W?&oY0V*KMMoZW zsNnk!Fk!{6OG?UsQb(nbD>s*d&?U7-d{K&?UZVc3bU?0X#r6_ZAaWTG#<0 z|6!dH*?+1z&_mNpGKl))u<~FqzyY|PmfAcPUexOz)zuQ4msPPd85fe+@7MZoLpT`wZxu6d zrsO~??Epdqr0WDGyh#}obh=g;HF_jGFC!!$sZ?3YNd+04in4cx?^MK2I9f>{^Q%(F z#oG*t`!&w!PrmT>8`eE8CyfQZpmqZ6XHqI8DWoB@nE5S$-;;9X zJJZ*P4Gx$M@E*p3+=t;Rj2x_wjgBdXYun8D-&k8%`DJhtisRZZ3EqAVrEJiVZ{e#5 z2uR>+))gqdw=(k%Tc-O?5ZKh?F*>Bek?XXp-1?6HgR^f8uJrG=JSVnoJ007$ZJQn2 zwmY`%bexVlNyoOGbZk!k@7$U@7d3Tjs!lzh&wjAi`t7~fUNL%HwJqP6Ll1FuUJ+1c)H~O6f>xNO z_hV|0FS~A&8MRmBR5PU2EA)j`>GDSIT(y;7QuJxF zC6UjMHbJ;KaB zi<7f9@n+z!W4`T`=AWu5TEtG+l%$Q*_T%}pXv;NVit+oq{FYdfFJC7BQ+L-e$~3GI z-H*JXAQV=Ef#D}ik6FYQJfRLepZgz}xd!hpoGbiLN9HLt_R!a0HO}TZMGLgxNNN)p zx10kXb(qxg1+8wXtUu~;s^~`pT(qS7!6!1tAj3|APUm;_g=pv69d9|bcwFMiiUdjU zqMl5(C`YKRDcB~n6x2`MRStg5j){kvwBX@$Ohg+ds-Bgn4`R2d?O%h@dUEaF1>Gr$ z`JY|*nO%@kn-QO5_o_6ZhG61PP`l!YZccl|Yw|Lt${L zrYiwD_SU_lpYwIwJiDS@*3GAKm2=7nYKl)^-mCMq#(4cupUaOUs~lq%fe{nin`Nmq z8Sn&&UGG*-NeVr0g@s?hUq%(tw908GMuX*6T^bJfvXicp!uyIejoW$kw+eL;>ew$^ zt9jf52Nnv6uNNm$jW)B z&Y+4<4g#q3PG|ay;rkJ&?g6m7U^ih^EWP}s;k=6riQrq2-t>-tM#dcF;czE4=$ek~r3jx*7AS5I+(P z88`%yIs~|(LR5q9%vp9O z))V&g!L+=X0YTY1#KC|+nQtNw%80$2QxpO9I^mT}ZG2W}qHX&;5C8fBsB#u21}$t3 zcaUBtxhycEsZk&~>)*0^H!;(YpMtb&B1A?B!%>22mMq$NuO>aNB}aYx*V!^-{(FN+ zhv?xp+r><1p3Lsb%a2`4ENS^2M!p#|2+|IjaoR9BIl7LmT*K!-=e{2`DkuiIXMIw5 z>GbrJ$jZOkL#%GD>m0Z9cr#3^x|ZY&LdVX`^#s@nmtxAd;DZ$LHNWo~&FZFn>jck* z@V}{|!zO@YJuToi4{-a2ff}UN6jV{tdPt5)KcOG|`L30)53Oz=G#)g}jM{wbVOzmB zE8Ru4HI+;&FdiUsOPe{ZS0;>^+s1~up^hpYHru%rx{|8<*+u$OEUzLmL;hIruBgV~ z1`%N|1$+1Ik&N>*Wm03bqYnjF7@rm2+_l!MtGL@Gz8qe6+=8Qen`|n{c8=~zl1e${ zPiq?8X@75@o<_|Ae0VhX@q*h{bc8XT{04FF&w3Sy26E9VsFnmc3}g;1+0Gi*9Tcp? z0>vNfLFayqQvCy{Bl6Cfxx~7t$&};?VY$=012cLjE{7LC#R-#dwEA&F;>}dLC8>vPAa;79_!(25K{9h(%a#U{DI6GNYNiv8qXsrUVx*`2qR z{x(Le3l-`k(HN@md3RO>Jd7^D=8td7#&qjdJf}QTav5q~l-%ywA=>oC=Eh{8J&6T(CchWIYg%znTuNDzg&xgWWtv zqP%`{#ZL8)op0twe~^b8Ia6d(eY7E%UW00IbMFr!#fekQpOod+p1G8%qOlo7dA=kC zy9Twm?8ydw0^QjKeGdakMa}XdDAeP5ea>^)lnJo#_}Wys(QwwoxS0yR2+Qe7Cmz_i zSNg2I8`j)#doSecFnQ=_HR)d_Y`%0K$S^{zya+NZhX2q=_OB~o8JHLIZzm|Ul47ax zHhuE5&sk;t+Icy!L zNGb;@C5B4iQb_$-1~noDL5N|XVc$^_<+AyQn$*jQh=c()&T{1X&)-}=QjdLM>BY7G z&?AhQS-<|kZppSPq}*4_Em{y?!&C(rnG0>5KSN`nq^1eVqK5qIJofx0VTa5V%8KVD zzLPBli4OZu5=y0^G#rMk7ykAIC)>qNm@s^Ss(rz($rJip&VzT(aO}s2m1mggq8#X= zw(uAu0lZ_ONbrT$2JdevP$J`$yii%qi`rB?+PTCTa4^|%tUws0%EZKx+qqT+_!HkC z_z4WEsF~QmrIoAHSRMGnb}Qm=sf1q=qR-PnrI=S5Vj*#=7LEkWPI zvu+r&XafJXwef)9cC;T)4VHi|?qEU9joxZ*q3<@M;(&jyIdY9ak0R(~KQ@DcwO=H( zER$CI4Xb`tE|H{}hD;BX=Wl-E_d%rsAh=b#-wqz-G4=PKZEoT=M96el{6Ys)3XSE9 z%-*~_5(ol~XR~d&R8EDvn6$Gk*JjjAICocbH`f24e|};I7;k&1XtP!*8MP83Dh1tA z;`z-YfF%0py3L13+C0~!uptOXd9)qOBi})PZ(0sU=REC8;TDLLw4=A!9L%24y{H(w zITI4MAPT`}CdIux-EYU);6s&m7+>D=&YiLRS{67_lYX$Wid`eVZt zTG0E_BX628#GRM$k8itXtA7qEB_&|r<%9FEeQa2+w0VY{t$s)KclBBP9_x_%qP!iX z%EsNG9lz#qWq8C+eFl2|m zr1E1v!BM+%V`g$Nx6yD{$D9klIn`nUSOM(`yyc`Z4oM5L^yY{K(+{4kx*+mGdJoQD zu;B%(yTPUg&AFlAU=#2#s)&|5xbN!|7@V)tMV6B_i{Ouv9HnnSf=gU)`Z~zJfAKFa z)Is$fDMC&`^fKPJ4)IJQB@_(3LXrW4pxvzQde>;JQ@f8q{lUKb>its9;s`v1G2xP1@dIv|R zl1Tl|C2W;%V0EGHw4Mnv?h{q9N=CcG7?>UEhovIGH{)>t*QL$S z=JGJjQ=xLV*rJ#+%DAa&5K@cJfU2`z^!vT^Ezo0xs=K`$b|=)>Lj>tpxn!jaK71E7 zUR#=%zuRcn(YplCQ}m&$TVe9{13|w-P;?w8(|O_Ucd&ctmOVI*VE(L*vSFOdw)X3f zlPVf=3f!R*-@u;vwA|FBkw3ZP!EXk^e5ygQh(#vXwI}cttJLEFF#1@MfP>g%TQXd#HbLHZEsE zG7rqusBU<0^zg=LwzCAuN$bZok{VChR$!_98T|tL&S_%mn*6 zDB(SP$;Y|ow{3L=9Y^~@d&$2cu~`yiN)1a8fp^6)jf$+CISef$)*LkXIe8cQa`1%e z*<#}C7DN@m-QK&H{TwMKoT=>bHhAg6ccXf%SK&nDrr3(Qoh1)U20Tp}<1ei$_hG^j z&y0hNCbp&0{?6B%jZBr-il|25HZcy#AQE z%iQb{Q^ED_ed0P6_b8x4!Z7QweXl}$_Uli@PuU;^fewC($eml4G8Ve958}z`0m+Ph zMDx8VF9eBI$`4I>0xpDZOL!Bkzt&HiS3b zXmVcOiS}i7YU7|VF-H6pWy;U973cGVWv97KS&!K@hcsw=5*Canfi>@@-g&+EOGU;A zz}R1o3;_h?5&Jeui=LV50Mv|AB5m6xhRdzi6GXfBmscTx4z4aLP>ZMmsqP3!vlegX zO3wT%lw|UVE9LwLRq5ngD$kFGH#?!E@g`Infc$c zj9JgFij|RcAwv`Gd@91xjt_G@4Shs~o_u(3oJJ?pse!-KHfYxeGmP@}efJN)Nh0zww{;*nEw!1(4 zdljJ?O6bh9LyBIK?hEMFV<2Us;Pwn4Ci~fIGl}#ks;8sdK*|5z)SbcjHvGeyc)cV&liEkLRYAvvM}aAT(ci}_ zw?75M;w_V(3HgS^_vu$kJ5$JrE(S; zmSr3}EH;}^A4qBMD!!-_;UMrwU#IqjZlW#WrjuHO6ix_#b#w$%F%|&uZTqWEu_u(( z@UNw_Fckmh&W2EG(2$gJB;`^dRb3HBoMb2`^$Cm+YH<>K5Envh(&b5(qx)Ir z>Gen%U(BryXESmPGi>H-WTr>Q6#032k^hL7Au=}B(bN&39A#jyZ^9`-(f4ij0r6Pp z`{+3~a^rPCy&m~v#2ZL&7TmB)@|Se^Xwvac?#dh72{bu7c|5T;TttkWrb)vx>a(x^ zyCmfk+gY#w)ac=pm$HLpMn|ZX@lq-AdvIBoa>Nr$ya%wkA?hBm5HyY0(iiunj`fT< z{nw822hs*F*;|KOarkZI>A5!FaFttTP4bKbQLO7rv@WV@hL#V$%Z0zL-fLGiceIE0 zYr5~I5v1jnE)CD@vN-{l?GAYk2R;JgOag!P31tm`ZVxLGu`%S@8!a>gOQ>^zH2is~ z3Ord&aF`<{ytrX25h|rkE|3+Y4_y3!d6snByxS!TUl_`7Nw+$nL@snE3{p;TGLDVa zHsbq8;#(=DUP=2XjzDWh3CYbr}G-tk} zBYA@vwKZ&Qbr}p>SiP?8Hx~t8@sAs8b_^|-R4MZ-u)CS=R^SwQwWkE`Xt~t{TZ*-M+|Q; zmmBqlLjDMR=2&c5v}~=k)-;HOM8?aC_RWoyyB0ar^` zKP1Z#_pJBew8eG==MNG$H(Y(*&M3iHokz-E4ZlAC2$Zh81W9o@-vyMnl*ou zW$fHssTeAY*1O@ItMjE7@lq*>?C;xz&9)Vy9v}9Js6$WAH)fS{#n7u5TEz#Qgv#|- zc$3=tGiQLE6XbyO;hUD+R<3z9p4C27s2eQ;7~RNTPD%#cM90hfo{|1Ry?3Og6};0z zZxV`Rax(XVIx40QOuAxew2RuNZy6bDbHT&ctM$!thX;1#?){9W>U3`PSgY@fN(X70 z(gfpfv%=scot&p{GL}gQzm_e~(aC-BzMqS+KKQN;;p;p^kUw;}Ih{$NI@OsGye^xq z<$kSG7+KBm=~bgk5UW`Ila!7zaGnY({dz_HNRj>V{9_XL0w)~^(RNn0QucXibBU}X zBIO;ftJiW>Na1Z@-RE|8xcEdVIi?zFyGXqf9XCGb6a}Jl1_OTYu}yMkRr5xI-9rtJ zCg^_ETlo}tv0E{d$(74Uoq)g8D4Il=AIIrwF5~8k(wJu%{jC|-&LZrEX-f&hY&Fxu zn6BY*2b0SrY^n|QP0|iSg-;X7oe=Er!lYNPDe@zeL}*-B+pK4j7Akg8=sWh(eHHZU zmL?xF>`)s&n1j&uU~U$3ywn*%8F)7EW&+p4z9R5bzH1XNg1g^-h3<{JFsv|i-Pkb{ zuB9$ei8l{amYj1p>zjd$&0<-=x9@^@GWH$)a8U??YXi`{rAQ+o7R5VcZef%nW)ZDI z$1o8Z+b-|Ddb1|j@?pC5@*37*L1N12W+dCdw!c+vWMIPiEc%n2HWT~hS8m-fBIL$A zImV*s^n7hph6q!f=H|xza^16+TJqCm96in__z}Zyav*Fz0dIa%7F^QfET<`aK^R^h zSrLs!x*aoxxP6LFoV1jB>VyMuc{WHPnggK`4)ni&#+?8d95|c3@6g?$^lc5s zYE4@`rdMq}(`m@s)p;h06Rw1@@g-)6pcMNp0#W-D_RvajRAL8-$yU39O2~$nKdDWL zs_}p2Di2kz|8~C!{{{#31V4w>57haU0&oK!4!)Qo2#@}~9~l?FI^Q5}TbE2{vbs3Q zSxP}xtT?%#63hJal6x)(c2c!tivAY9zwaSe<=-ey3^csk3@38+-yd zIT$j3jzP1XTjeib{k03jQWaBcMd}YjAFq!+Ns87mfqcT1qPv_)js%%YlnqbnsW~wq z9Qu&Uw%5cqbb>MB+YpM2XO8W+ z%tL>hS-C97$GAGwYyd!cU(bwO^yHWaKjyeWC>W}Ll03ez+FJ+O_3fbSx78VjPRGq5 zuM?vDQ_=uHw0Z-dbkm$egOmM@t&@tZuhG=^4&#u2FldbYLp;>Jh({1GZ~Fft9#>kw z{7Um)V=!KGf!OEN94?GX!~OWsf0-*F-i4O$p%T3UpPmS&DtoOCQABMqm!Z-j3etxb z^}Q3w{=PnDa|GZqouVG$G(Hhm{5Se5MtIkmg?7(=Wx0c(}+z9WBe&R?yK|6q$ zO#o5;1~*-)PaqlA)Sp=$Q2vf*+vt-CjK(V?*~P?a0H81ZwANkllMV5_h32|ld*G-0 z=P3#GeO)hvvgZCH*#HGVR~QYV1=tJz>rpxhZxGu22}y;<7WZ2U880@)4PiR_w6D9` zSktk>9BV$UYERh)W*)dY-ZrxVcR-Ooosdlvp+oCzmln2OL)rKQQa5ezD4t~Q(Onv@ zwD@ifaR>#)Jklt+OD#PSn04;Q7JjzN73t=pO=zNR#pw z?JF)xqj;YX^M)-zC zkSo-6bePgT&jBEc6*b`p#3C`~#h9xz?ly?fhFYn4IRhBBY}v+Vcm?DQcQdC?M}5>f z?ENk3EK(~)+p^Gz$(AWeGZ_269v4jdrtLnT@Nkd|97bRTSO!0dOV6f*GjZ$pi z)ymC%Q-|c_2@6rO9BzsK=%K{3;mnuQ;Z~DrT$K`BS4QOk`B+2ATwjjqPnc+gz+n2I zh*jAjqtN8vOys!n&%gQTT5>}tTuBZ!-8l@})DQSJL328He>?%kpubROwm|=W4 z+dt=L!LGfPv>`kI3XkaWH?2YwpI;ux+V>2Tb#%_)ti8@!&6(BGF7%6dF2NE0Wt<3` zW^Ru|-`USAvn3GRx_{qY&P%&qoNlE#M%B5r@9tdxhRIOpSXj0H&~*v#T@_gw4_h(k z`-@;bIk;4A5v+#9Gy9DM;`U{j@O(^*vp{Mq*dIP-8ffjTA>icj0zbhQ0szrL*8gSv zbAE|PDx?G6zhF$R4eBg|qxH9wnt%z5vmKJGfw{hJNbfzUp2qDr2SCKm5-j8|5!3URAMby)`6!R*c>3qIf!+u7!#s<0dlvCCk&Ww* zG0Qd61SKzsBybzD)UJyhQ0^mlmVh+mjt|G0!#Af#&AMlN>vBfDUazT6zRKhDbu~>D zi`{TQtANwJ%UR6niBO1X7w99O_)R4?@00UAHQ<{|_VBN8$;e8OpBWiM#Oi}ktQXK{ z5!DHgV~8qcj@!?%U5I({5v>#qLE#DmyeCyAt_^+zuv0~+5*UpR3Yv$m4M zTKaIMOT|yK( ze-vK%*ew?um^k1^so^K)O{Oe$$~>D^=PiTHE)U7ky{-RXxQUXdWQZj{CU|Mv?;AXG zr?5KtCh;2I1IpWpV*(@K!;G3UXvYE#h;_!Nj)~FV!hm-vBt!*HH`&ClzDHf@q$R`g zmS=;rNTj@j|L)4a_$fi`t}4~m(nM6zXnRtC;7_3Dq%Ig#9=x*KoFGMEkBL?P$3zLu zNnfW$AP`?c#$SdH)iM!F5eH<6m|_O(SwOcrwRUp|fzTIV?|pVi_W&tGG|g*c0q-D< za@#~h0@x;s4YV5cD=)SOAadsCUG`yCM~o|FtKHbtn{40A z=0?oiSTRcSqkSI%UwhhnumEyyT2wj*@cR2Ir^NwGtcrd}5)by!aePMZ`^8$UwQ?)= ztcu&^+HkiW3(qpyoU+b-$Yu||sYmmV4kZ<2J@d>E_Px)^CqBd@E_3hrN2!@n>y_M7 z4OFNS^}6XGdGWZ!0-ayQ#$5*3Ye@-WMzy;Vnd7x%I$2HI$nNiXLrt3dU>58X5Aa<{ zDOBhdJImD&KC<*mNsFe2W?OU5ELf;zU7O(OxaT)=3xBFy(w5qxh~{eJtNkOQ@SJpzEUys zIe>_c&{f~aPXeAN)1NvG&$DrVFeanP5|G8QlX=3y6*u|%n)uN>JFDWOI?8z5-t&=V z8CmmK;H)n-$huXmc<8~eto6XsHJmS{q=r95t@aN~pW6ynsh8)m-lSS+RH{5>8vn}G z!-%7q{}k5Z}GMDKXgh&zX3k`v~1x6uHfZ!P(tk5}sVnj?m(|K%ym zbE)h49RAz`|F<%o5bBu!Ymyh3>47}m`zT9Tu+S7oRbnWjMcP9PH_BtUgO`coqQwt0 zxg&(|9Rs_oz;`X5(EyT*4NAK>dp1B?)}GFfarJ1C@N}XkpGMV1VLsCZv4-+4BWP6! zY7%?|xR4Hv9K1*xl#+=m=vPokOD$y>6?JN9o-n-}wfGVA+i;X~7@6OrwM>C5A7Ftu zXq}Unni4YkPkj(T6|?(u$Ei=ef}5o4Eq0yklrWkT#{0Oq$4=AG9vd!>t0w6sZx8EJ zUoHF1$iV8+&%zMr6}j7Q#!}8gv@lTI?I_eh7T-;L-AJNp3@_*rKh_sXt99`J1hGze zP-MWQ1&AX2M%d2Dzaurpa<$%mO^8iGW(P+ zrmqKhk7{V`d2lyG5=revL-HrTG$JI`G!2A{KhAf@%&?MY!w+7Q)C%~su85u zL1gqvCBV-A)nNHZ7ub>a`?`-!LG;}=Y-<~eFkTTvc`cdMMI3$E4sErzZw)LWz#0#KFe!*e}){0poFIq)owQ9#heMqBlMs zUjvTszdtqVKec?vj`Zwl4fu+*@^RjC^8sx;-^59xqaBxIcs$*e@JUtkfF4lL2Y&Q@ zRLhaJ6`JfPm1Vsq?}9Th|2h{`1^@tnCSWe>|CvR0ChL2Ar>}l7*!}jC!y(@g7)BW7 zPMI_v005^0>0k;L*1#AF>O+GVnZAk=R5ibBr`bQ|<-LY5i73Zc4X)rxqZW{9A%77>54pp7WaGM{zM`K#?4Y?FH3sj*-u|ixxGr zF|vfPxEMP^tWq3^!9PJsU$*1RcIKGLtSaiSR2-6@qKU=Q{nL>K&HDP=E5Ka#e`7$n zZD-jZY1mKRL0z#ETkA@EO-Cf}kZRq};4s$vsf za8Cuud(7uFg49@}j_ByX%_2V%(0*}*)Y=|{Z`TQTV?Y}=i81(i{W;Yi5brvzNKza5 z;`u1iziz}v$UJJhN=>_iLW`%(f3u2ZBG|CMhIe0n=vL_8_Y74=4D(_-W<#Py$bUoF zm3``?xUD^u`~l}0B=3$xtN6{`NcjoDULtos7x^3Y@CTEwtm|k3RjLH4U(&(-IGTrV z4)BQ)u}nrC;^oejhtF?gi6aL@pP=6!4U`dE=U`U=3@*07EjDGC>!G|Lc{ z(hx8Q3Yyl#jgaIv%rr>^f|~xJcp3@3k%@nj48HKephWP!1V8YMix57KVcKsa;hweXpZqYs#(%u!Y_6R8;vw5;}E~y~}(D zQ0OhR-o~m5Y_>h}N@9RdcB}BWmav-1nFfpKKo?j=#2u`>@RLpsD5|m_@$4}_fn04_ z*E0hz zM7H!QAY!VkL@zb0!9Q&hfgKu=y@iVZsJK#`h(IpAg_H3ABM`?HA6%^7Wh~?Zr0f0 z8J#FeA9=Y=%hoh70_y^1t66^&L6V~(-Qh8nMWF|SZafFT?YLCACu_QfI{;b5GG3v_ zgJ-drrN(!gKCx3XRceIXh#_VSrT4dMQL(lm>O_vysFPy)&~Ybez4i-E92bJ@_tv5* zL}ET3-2zMY#2?D7L9_JIH(am%4l{Zv&7vKZa`C_~QJiu`yeL{E;vHvJ+7I5ht;5u> zwpjZHyDk+8nSqRkbErKm>SWHamLh3otAcPMD~HdT-OfyS`jS~P3#}J(c_fs`^FuW9 zZ^x+SBT$@7cf)|evi8S=e-Fe%u6iDc$KM*_Cqsl6=9bsndYg*9G%|vu`I1XPAoNYi z@wgIrrBS$iLj$OyP4*EIr9fa&*AWwVq1mc@wMctsH_QB4Hk4}WeWP~a zq-SiSe-_x~=hm$`UBptf2`GwB+xO_lvJxwi4u2iIO}Ki9u%DLbqv7;EuQ$w}Ng**h z7r9%nsV?yB4--J%nUK1;m+1UR-T>}mPOo3^1PYl=D%>!X!w&o=Qx{^w09pQ5MY*5v z%>PP72wMLeS+)KhS-+$^izDox^L?T#;G7EBUPUbm2SxfMsV=49*?T>g-AS&7%W!mu~`@^ zQpg3C7-@qq9GDNsn0>DD(2@)S2)NSR;z|noxFD*1=edW0{EKQlT*IhquSc*?eW8qIx;(ifkLYXi0GWBVKWFrJ-|4>6CuS*G*DZ zRqhSFM2IEF-!as=2o5?=%1h8uYiyQwd_+NC53+5vZ}~#31$yVr66A4vK5vKt%5-_2 z3umhWv#Dk@uk4DZb0?pO*wTnYZZ&+jaKLRr$M@WYz+Lr+t#anehqvyG$3Iyd*z^Ta zx4>MF{{~qZ3zuzUkp{jsgJAyD=Sm4~1pxFx#mR|+Pz`rtjiPoG$_#>>1O7-P4$WY9 znku0|As&ei0HE0JlL;OFLjI?7{m&mlP)_duzT zW4EY3nk$V>4 zr_k)5r!jIUY}vMWD(!e?vet3CaR@eI93=!_cDrAhM@Sc8BcizMa$aH(;2j!?&^G3L z3PN3=!_`Eqc=nOtj;8(z8^qu%>|J24*Z&BagR}v@5{e97^wg2OWa6rzV1P$5#8;(R zQMzPC|f`kqzt(s3_qw1ICCskHfpX`RHRfmm9&UT)>lD3%rAQM>f`DvheUf zK?0(`Dlni6LYe;mCQ$nKeJTH7G$985I-k^yTT7FLy!I}px$Ji$!|%MhswYnKtk$~9 zr}NetiAP&=JC=keK(`rZ`B6QkL@uvPyPdTxhj@2Yf^x>!QFH*im?E_S^p^OZ+E5C` zdrYlPBy@sig%!(99cgso#n_Y0LtqX^hsYCBz0|{6$pm@%J~@Y z6yNcxZEJ56R7AaNJ;}WGYdAwMg!m|*Eld`?ZAY;qmwk?_SPF0JJ{u&b{a(ifOkbLI z-Idz|!44F+Y|Zw3AyHqm+@?Y^#AO8q_MBe=EbunrHz>w*vpcV&6R|!+V6KCZTz^Ei zMZ+y*&G*A+YjNe@1{)Q%dmAdK)>yy8m{sZaOM748KY~eZ3*YBJw^!QF7j~lc(XcNL zTI3hewG1d!$$%*WMhH^X8iQ>$TAmacAN2rG{*^8pEGsVxhiw4W8YbH=#RY0z0P0JE z+0=xF!tAWTNx&e z#h>0vq(erlPTf894p^9^H}R{X9Jo~GZm$TND^18in3&7k9m{Ws16XJ&&Qv_`D_qBF z@=NG4;nG*XHKc=ilAdq%6|*0hOm!eQ4h8zGi^-S#(Q9UUu}!sHu2##lw@QeK#pha0 zzW=m?UUeFo#}W8E`zf#tMOledcTp;O#WQUsm(|SZvJg>} zJ+WwclHMV?jsKJ(I8(Gd*nf+rWzm7~Yp9dLCUy2t79hqe&s+UvvZSojJvsloekb!W zm0Gf9x2t*1HzP)&80Z(dkue@%0&?APC*>b~^ZX<=Mh8H6gb_xx^-#Q*)uf=FyVTVr zGjtAhy7sv?O%J8!T|G(nXgMMRKKu9xn@DYdQQNh&^ylY&F4PX{R;qbrfi%Ycjo`{( zXBTxQ)GtS(Uh8BbViDN&L6hIZR!7utooLa5FJ3hMbOFnF(A)DbGxjY z=KfLlS#`N0>fZ3=eEBG(c1O2Vs*wxtIpDM(>%8B0?{~TEc!v)%`z6Zi9s~FDw@^x2 zgsGWwh0*?SRT>^fztZL>+uhXn)5FW*oZptxPN8#SSf2$cdW!Qj#v4KxUzk2Rha6~d z|BaBv72K~M8faRIA**&%`0Lfx^5!f&+2a9R?oA3?fL>>S`4`~v6np_5lu&NYf6%J_ zH-JZkoezBs`ZetFZ5w|(J^fvB7XTn&(-1X`iB}iJ@=%@KD;IeuLlv~eP3N4F4q%%J zC^#;kkx}5u%v^8=(C@X=P-0Hf6xUa|hQPB-j0PuPM6NqK9)x@gQ#F6jyR>lW@E>!o zvk^Cb0vq3_Dm1RY@Bu$Fb*xS5k~M_;y8%x*AaaV8$nDRu6zWch<^7#h;L;7WqO@^C z<6@bs@|lhI$qq&sL?$6mr1UT6_CT)Ug9P&x)0Jxn2Jag8kRCA)z89Ss2(6!(*US=7z9k z!jgvCY}WS>T?a!Dw+Rni48vfCX~+*TKgHZ4`k8^STLHBE766>M4}EE~EJy z13{ciUp@fWDFmz%<@jAo_8odp-W<0q$HI?L{vXNNa+kFrd09ir2Z@5JBEez%LW#fE z(DPrZdr<`xGVyjDQU_(}Es&i8tb8J<4+Mi>@6b=bDg&SZ$l|X+=Dzl;{f{sy0K}L? zaLYuB3Ll~D7(O2qPwRtX9IHi1>oT~E+|id#MhZamc3A|HxDPZ@n{m_pi9tpuEVsA8`Vk^s)#rl;Ly*0;m_7L;KSWr z_Oxz2tUK@!RxVyWgCt+#(|nyQrpBnSvjiPmK4PP^MVHS%LVXr}y~#??2(>nF1O5z* z659ezvp!huN4ewVXMH`Sgv+xT0kYwp>I?zV?hk}Rq`3A--}I$&NR|nWbb2);+C$l) zsTuGG=9hb$Uob1ncBtcfeSf6p)?^+=Q82eXaKR!Di}Evc-nE~DhCx{B1%fivQ`oB( z{jzH+e!e&kE$Y;x6U>MA6)%C^2)F8KUYW_!f7`Q#q5QMXKXaI6PIxVJSMP|RW5?+0 z#OJTgzD|wT2U+phZX?cDDYlne5c*KB?3^eO9WZ!u0cM)G*Je~I}T6=bL4@-~J>wZ~P*?iK`Y zc#D9wS+x`jT|jA|3XaxP08jwL|4}IU3Ka?hE*Nb&$6DQKdz<0AWHA^kV9Nd-lIG5n z`Y>@y!o(3(>b&gSj^G#5GF*?HlR4hdHMYBTy;DQ$(Z@*Gz#N5(=!3K`j#vpCf_2%8 z>h_a&8axVLR!@K~(!16tcX2VlfnwyWrD+4WQUKn#c>lC94dM%-O%*4gj8~1V#D4Ib z;Ei&q^&mal=Uah$c{blw!?TG1lR^8$oV`x@X`|0Kl$Ud3a65IkJO;8x@)0cg<8*Om zy+V6G-PalgI|-)_%TPoD4=-C1v2?Zlm4wG3h@U9*5r$f0ZQR9qcU?lnn24b!A(U0B z8DzE?uZ?B^kZ*ay&JIp=$`Jmdpl3v4mVR90do%!13j`#EVh&*sWzJ#u5-f5yk1y!J z#@xl+`=NZP|9x2)dKzl}EKwTF1hfpPQoSn!?M70zUDgEX)8B7QS01>C^<^tbRKCOY zK;+-yIlP7wfWx~x)NNyFe9mlwhT_jM(@#q2awFUGwUOW02gaE62g+IbS~ij9^{(hL zMR{3_{mHP$^a5Tt>S zW~;X{)4Gi^kVE3pfu%%Atq5;Tb%seoplrVW-ly|!J3zG>-}bZYTM0MH=!g4ZI+?TI zfmABT1rcoaEt`RkT?Gi0(cF?~`NakK`hY`>Qsl?X%bE#e?WX)5T4Yz&wbG?WKRAxS zMA7+yb`-ZMdr^6;#!LWq?dc>{^<)+1(N9rPlWB$AC8-_;Nmh1~rnQ6XLz>@&4K>h( zh2L4YGI@amRGk~zE`r(|N{nO>njD80bra_{$G<;nqw{a|O41i4y9BM=SKrNEYe8p`7W^SQn~W5Y!EsLQ zkYq}|>%O0<#6JfG`r-~&U%IG_whf%qoLqkOxbTD%7Wp&>|Hb`RzPLZ&%g^!G|9~RE ziKGLz!#v>gVUSV>yuy@wDhg^b#hNw_BLX;vZG|ChsIZVdh>e>WW)$sT^G*=xrp{lz zoGf})k`n1Sxq@WRsCPEUsV?N(4u6#M^^+*3LjwK=1G@J0j!!D#a2toX&+Zc5f_P%J z>W8|*h&#F6!AVcj$A6efGU5@8uDS9sMWzq*bJJjVXe zcbQyWJk6D0rY7LNp4UTmLvjSR7Wy3tWrnZx&U{wQWM%Inqg3x>5|kgP^C$lLSMW@R zU%?LmbGQE=oPeAYSp~lgA%LF<4y_#iS{R@eyES^=y znxP7W?H`Xh&-o+xuQ1RVzrt|-+LQGE!wA62?J-uyufT2mCd>5?E_`f8(5C@l#d`Us z8f1q0knxvl1vndJZ*u_Xh)anvp%9@Uyq6&+x&QzG=F7AP*=&?q7(YQH6 zow{z8oSQ>j`|ynLQ8I&elLeQb1S5HOZc=%S0zoz^Zo7kBOx&C?FkJrOm)S7_N$hUe2cyu>3%SZv?ZGe6TNcT(xvo3FK5H!7pt`Wri*{HX0G1lVP zZfKcqVw8c@I&*AK7sH&|XAUR=hZ@V}#vY%kD3G##G*;*b>V{*y*;U=thhH=V)1M>2 z`+)dY&?00VllBU-G3m}fwYJ1)Kow9(9I3lgWuYwy&|qUE#m+LUqu7WM_B}a`WZJhI zmlqZ5m|W}Wmpr}+1(CE^vtJw#TuU^$dq@U@ChEXv?^vgvT zbL?n9*IU^fu9ZVPBO*27^{|v_lY!hODj?Sz96|}VG@{2#pL-Xc^r~>N(j%duE+n({ zP&!xlrK)IR{HxwfZLa#>HBAf0oAhq>0IG5t*FN8s=lfH$g5{$KrGI^Dpdbog-`coP z9{B$wU$%Y5>#?+gvH;S*5W{`o4gsu7vmr`Y*ouv6DQn!>C(PQqD(&Q9C$~{5Mha zu>^$swC|Ftqj{t54Qv!ov!@g0D#RUltPgVO@>dgw7q@UYCx@2}s~=5@eox~uc=p`? z4g*pH|D0zh{9e8NZswoH)7KC9_bZ+hU>@0jN`alM*Gr8GDd(UYNQe0ZGdvGL%5aKP zVqENfBLSAcz_0q=NfuN7{VUiSQW2F_YNyQ<6RvTawFtIM`++qP}nHoLU-{$e6#XJ>Y2 zVk7dujEp?zW}cgQGtcvR06+^NcZ4X2E%CL>tGJv9psgT*7{6O!tP!Syxw}@hp7e{6 z$0wF?d;b#|uS1HZ{?vMkLy zEPZIXH=z#4)y5skm$xdQm_zUl3oYc^5<`1}_YgDYR1)!7pMs3L!rD&LV0d&n1MN zm8L)DV8>hk#-)Y?kZXulL_p$hn|sq6x_`D$JN^BD*hE}lkj751B#;U+-j?l3xWC&A z&^Q;zaCIMjd(1oD8Z!IrbPyRH-~UmM(s<4`{;7#pxP-4Mbaj5-s2q7v|HYX|!bi{j zoOiiPCYVTTw2BWHSDuG3`y>_soey`)31d=kB|AJk0+NF#XG zPeJO5o=-#ct7BZjf{Zdrd1wd!ue5CwDLe)aGjp_pEvi|w>mhyLtdSO zh`Q>0+zq>ea-%P$S}4_iYvuZd3t)I>U?z7_w>OrU~Z2iI6#0~43? zmEq~nOf43Vbfy&E=fF3Lz@vQ7HFr#66-y9^eBkM_=JE%$*|P=6GZN z0$Jo8crW}GeOOSVWj=Sxb3&>0&mYg=_$bd&G3jczGUMB1Cdi>jMZOv2l&0Z(-yf|& z47~6cf&*kdJt>6e?-+ZwgFOB-uQx6%+b;eE0`kd|)8;M+h`h zaAPFXM)(UP*;5^f3;*w8q8Z(rrAOVC&vWW~&wH-gsN4e`4 zRWJPn7MF#>uiYZUzPs{V`CbVfVV8pBsoPe!>Sa3fG{P>WWmmA6Y_27!`$YZ>&A-&1 z(9;>_2d$DB`vE`FQlR+MM7(D$RKNIr!lI4^BtGl43~-?gg7y&UFkHA(#zBrJ61x4w z$N;e0iyGK~PWRyk(gISPS+4QDB0^UWUV*~cd_4$J!6uoP!yDh+!QP}!$!R8n`)Mm0 z)q1>sp)|4u0)BG;8LFG^!tNE(a}&^U5+Z-&;!!SZ8Xa|DxawK zLdR@m0?i4bRkVHm_P$8ht(n*X@E+fwTuxA!z`jh>OC_!`JSJaoRB-SeucmObfc7s3 zZ3KxQY`WQ`fiDOm&98#D!;(Mjs@Q1F+F;Z-s`K$5-zLehG~5NdS~hmFZ3piF7)W)^ zyQDfaEGKVl!@c`u#?4jJ;|32j zCXeG%EB@pJM(;TKz>UF+_s`RJC)NA_P41%il}v3&vwF$#MMoJKzC+AiT;Gx1JT_Gs z%j=Y|lPN0zXwF?P$SyExgL zR|k%inb62t9tM!E?X5c)qW;$Q#d2{F%`VRXL653MSd+otnbSDhuqCAIb9Yh9)L0zZ z_MsekiEC-w3(Nyw=?sPM9m*8Y{m5OEPw#Ny${Ou3qM1XhnYNW*hL*%iS_;K#zA*FAe3C70P`XQ+ zyk@HQkggK~1DxHun=tm+H^AF!Q1i6Gc+85H;fL3;dL#w&ipoaU6bixWy>hIzxG8FIFp>&f|O=bw#S_uCH1G?BIsW6<7wSQ3$Fysv-0oPf!wQ8 zqMcMq1O0`*PDs|c-ESza46As*eF^Y@su+#`<t=1{;@*K53RS zf}!4?_I?g;fDI%=5k|+=T$hk}9n2n|->5O0!~{qpC8}SPItnUf13UFC(cF70JZMEU z<+1blPaqiyxe;acX&KA5sgTAn#x4w<5LX)^`Rwf>uH;nH(k#sp?ufoy%^heW@u$AZ zS^FPscY!ziTTT<#Qa{ms#7A*Rjt;VWSJVY1)N10Os?Hh_e z&E+9iQWq(s)_#%+o;)Yz4N`81UR9gsfdmqFQ~XcX^>T)H;005M%H1=xNj3M+mPHer zz)uq#_~_2$^A|&mZQ*|D#Q4HVPSQ!kI`|!?XC>s?J(}J3hVnK|C*LA|G1y)kiF!nI zZegSYwtH=CqOEk9n}uyWRP&|e%CEjeJV=yjjfe{ZG)>rf_rzmk6%|C*TaOau z%D?*$P%Z77mh_}MlR`0W$Ys>B+Pl>op~`}xk(j-COPj9|1f++Is1a3gJ=?9)U0GdZvz=%vxQ^F{vwcEi9}i&wV}N2xvcwg(cX zrx3ljGt0?y5GjbH&cWi_77tueVk}7y7SRewV_1}*6W~y@hhzfdw15mR=|u8yu)-YJ z1`#>}#I@P*Zt?4BslO0Hy%PevvW)LM-3@&xQ?M^#l+SeL49Gh0Zz+Rpvr44wP^%~f z!Z%4zT^4?}YYI#Jo{QbQ0hsGkyh-DbR5fcd`_e;vvJ;#ik5@blCw*Y-)1vxNua;_e z16|WoR{4b0C>_WdW98Q;>D+?gLOhEv9{4kvN)84jq$r?rq4q$p?OKDh?`YrmgQ{#B z-u4ykbxiPGX#_OnH0UFSs*shGg@_lsU1wN?Fs7LF-J$6@o}k>yC4?rp)r#VO%@5~P z1+&~_Sq%yw2P@yc2pshwAh`%bTDkNtRA7vYSMOYEk3QDnp{Vwq;liIfX=WpV`wn(- zi6>G$8(f(qLP2WRv-tk3TgJ$8y`5P>Rd%hdvRh8&-iMgw01{=yY|G)wwa zLX8%HX_zW|?f}SXeN(|MIWDY4!FVZq-G3wN_CfPoU^(|Q(>?*MnmE)SXs;>>E!?fx z4WyJ=aG_rZV+wUsUj8H^wfcYlTA-$D1YSUm#hW+25CgdUO%JB3FRcaX^_IZBCe30$ zngUm~^7==^SPzow=8t@*V^Un&Wny)Nu({Jvakh!sv=YiTGcDtm!pTOM2avVJ-VjVh zac|mzaNbd~c|3PPjN-FKu?O}Gu(=^Gyq;Iqe2)egzF&VAH;H_c7=kG3SWfp0jDv6n z)h7w#(TrpaTLHlK@B#9~k=zpx0_jM{Rh!#7@Hrci3##&c55yd%dfkRTXumQY zFW{2=XC{k*`v}IPV|ON%;~RT?Z=70jNFU`*#!THz#A62!;||(!G z__p4#fmNC-g5RN7NVKx3|NcZ6doPBVh??l7X+2H!c zRm^6K#$;js;!?sd@+8JU*5hU3iK<#CqrSFJ<5xGMv6xrtbMhgRN29_NS$FizUw7*n z0oa)DstUSYeVmMMGxV}1#~AMI;;Z_OxDjH1L{oe+G2~(GhOY9#jfG~FbY*REEVVLV zmREn--4=XbRA{vdQ+E7D)=1vi@KZLcETfwM34yGSVu!7vCtyRJqm4V|L($FWQY70F zYxs5*Lpg^lOU5C9f~9viIq_96)rbDh@JD7SCrJ_l+K`O?L+hTo7alE0X<}{EvB5k{ zHT+lWNQlFQZr#E9s6KX|oN;-$4;kGZtQ$0+tlc1zN&-u{10hFhzj0O-qTF{{UjBo~ zQJoK7%yW}OYQf2e)0CqzXfxccWQjvEo$0(mT?rwJ6j*0fn+r-ux7UdISHNve8eR;l zB5_dod)mBjw_kajOM8ieqUIkrX@oz&UMjUFhyxj>Is9<=Mw$_2nJHqXeN1SPW(vOO zR&XT}OYWPOX%McPD_w?x$G==|HGIAzud{q_Z*o%9qz)Ns@Zl42Fr$jbP+`?7vF@$@ z2@yGop*G3qj0{8ZO%2&P1ccb*sSc3%-B4kNX`pSrE-PSX>Oz>j#5RPIF`zI`6XUebxPTI1q|i<$GNsm3oHF z+e_$6wCL@F)d%>CX)4$|8EI@k*VZ zu|Vw+5#WM;cj9*ID2a|;H$QDYy6sI6iBdoDi16}YTsi!PlGiEG-$Q?L#XD`^B++~* z7&?Wi#l^mBYLy>YuAXVb;a?eQdG>mG%!s_<2FkR1S5cRi;EovXG4W1&S%)Meh~WP* zRwf~$pu#1LjH-gK0@;&aGpmvXBigZ(#NHiT@e*(jUdr5K5|yiQv+l?Iw*$j^3n%dG z{Vch%%`#M+pXUvtS|fz^v^?2+1@qedrbfn6-kL#I6M zZWgQwE(_zRaiiC1ePuocfnD^Mj!)MMfM$&w(XXRlbuCmwAbJ2Ql9KUkV4G4xN$a$i zioO{0%mM^tH7mH_O7#Z8<7Z4C&?^`Ia#joiuMNSgYZNdk7i^%Nswo~0!$TB#Bgfz) ztno;1G%xL9KmoZ+)2=xMDDUF8spx%j0C$Q^4F+|z3r~^L)vB`2d-BYd&arY@G3p3( z$AT|IHwgD9ff&0Si2h=D+9=WF8uZrq%>~AKjd_M@j>g5?4+B<~uRm+EGS%q<{I2Mv z|4t3O2||O7>3ZH=dpG2I#?3a^IeCK>P;QWh$#@2=BgYSuc#F3~^|XflMf0 z2VG?qk3;bY%b;48uo)aih{OzHss3aI41?x#v{&^`VrcCK`6NWh^XBBIrhnycE?=oN zX4KLyyPuInK*blI;I-6L17;+m%8Q-6(~}zQg;EVd{CPFtR&*QFp7fDc9LG?l#!919 za!aHZF7wqO25Y`;IveL3Wd*cndgvn#N@0iO+UZR^A`qKmq8+hmVv~u2HxCCb7g|R6 z3)cgw{2C^CM(oe~b;AEd#w_fLTAf(dIE^O5&zne>>PzKOQ z2q(Q8XM=+-bsw`2$oyPo>jX=DPv33k{&>{%v9JMMURPS~6L?g&C~_@-Fp|@UFXAA@ zFvo*Q0p~^|+*J*e;#&3XbC#ZclKP!M zNTFPS_=F(d_&dSBpq-DO+!M9}UBr?8f$Kh!2xkdPErTOr658 znKvzn(lmi>fndO{70h0nt8FqE6z=!AqF$$p?v&qy-zPk3+p#A{n3Om@l^TO5lKM`p zr0>t1%w^N#^*2DkyTQ~WR*r(1-Dy_{eTS)q{llZ4Hu;_?>9LPdx1`4l;VOz#gKYGme|o+MwWH+a`r?ezu6?Vkb|Z<`jT61 zJ3eb;UWJ21igz;&r!rF~@7q}Pf=NQ=vKLKA%BHGh8YdxBd9n%pi*p^6+60(B(?p$(T| z2h3GKw^i~6%leWP6pxCtkF6)ZPaGCs3a-k$GXH#B(jiCzrffTm*}rP9Y@QiAo014M zjEE6E)NNG|(OTG>gLEDt_~9eKu;;!=0^Ikv-ZwD8PMEl&7E-ZbzNx{L@BH^~Nm-50 zn%Z<;;3FFl1{B1F7=Mpi=s#Yr@d-MlD!{NEjwaqa9Dl3gp?`j?7d9MFc=}ti^+Mlk zf)t9`#C1T_rP3WWiCB8JluUr;%C49GNnpt+o=8N@SeDgF$NfNjlPk)6o-U|(hDSHi zD03vVvGc3>{@$a~FI2RBEZ-nNEqB~wyA@j?M>cKu;{139`A28*vb9D^!L{^>FC4~) z5(-ftI~9=@-U!{LXanK)%Zh$|SXKb_G)aX*#&ysm`QC%TvMC@uXl<=X=eLurpqti7 z%iT+LXCioB>n?NNqb(-&{P0@vV-QeLq-=bRUoVKs>{&nXtG68JW%{q?WikHcIO+HJ zf#&l;uywa&L4s02?yEQF3So9Xon|MF64iFAM5wAJQh)Fj#@YhOJ6n&T@6DI3k)A4V zkZ3~sl7VbOhAXA?JcgCBg&Qvejvm5Bb7;@vWvK+ym1~|RY+ZvLi(k}wI&@yhEmz!U zpkHb;hk4K9-Gi}|AcV8z$@RY9>L9`2oo?W3t?j}klQV%4>bZj#6q2Hg>9HUa>3T{#n)Avy@EF<@N8E zYaVS?4vIqG1k2VCg}^dNZZ^Icx5~4hL}>hXo%SZMd{r^$`M6KVE*xqel@J#Y;tO!J z@*Aw>lx&kVE%T&xDJMeUxO`xWhJ`fLR=W=>)JJV#A~gEXp&q-GV}s)godPYH+Ua*>u9*G!`$>k_7n! zEWiOFH)%QMu(z%|p)aAvfe`wVh_mhkqEPnK4LLMTwW(R6ewGNYTG6rRle-OC2^2trqvJN4g8QH7&AWxojNvGc`YBYh)aA1o2vS(-rU`!+pGkr1*p zR*{%E#=v!X1mMRDpf}2IdK043z!IZ-1*;#&4QdHIrTrj+cR-&hGvmxqpB~-3JFcL^ zVz#2XGPXir6w=8KtbqhtQghfkl>trDeLT5Ej=Om?Ek`keg!sO z=;!eCUw|jl>PjJtTgumm*%|>}6*q|iW{dI>)W*|S!{ZU_-tM@eJ!jy zXa{L6~eHlRD%Z)_hkHfL>s3@BvGNSH$@;sqCg0nF2b_-;!2!yT#_9?k+-}ue;p}g;G2JMbu(CjNwVz^xTQTp(Q@ajp5nTiMB#5lh^9Q z7)N_AL{9wNcfokeb<9ihXwt`e-o3<%zrwHi2tGi7cakzrVSRHGu_$ARO<-H=5K#>} z)?fC=vm?h@)b$TES>3s@RaIKW-sP=<6Ko%>9fzC*s=~$G4a3`JV6lQF_Hi2s-&frcdIG8??uniV8z!;Z#%oPV013!pl9y z{zLeS8PskKc#P67zu#TW`RIbvt;-)t>gCbUhVW;M$**TE<;pMBoJ&PKsB|&`N&YF6 zXdT~Q)^xWaQRs0ZapV_@5oTyr@o^#Vg&8}GmF-}>R*_^!A0T%Zz%8-5SPg*KSCFkrm{S2D zQzQQlobz9`(cL15qmo(aZOW}1zLXOXmF{Bxad0~3xIIdKu)wtp`bNLY?60C{?XshZ z(CK?l(d3@?{qx9r*bUXr*CAu1*zoxmrbpc=wN&qjdk`-&tfMX}bNr>gj(5AsPSUj- zR2nhtHUqg2A9jqy;h@S=x>_ zNWB;>Ki)&DVJ8;AE>1{CSP1Ha==1y63Pvbs_ZfE}0SkriDb;zzAfasfN@?Nj7*~oT z%r=NcDO(KAAL1*bfK_9MY07l(OE-(*rPoid-ZXd80&0^!@qP@$Qi*OXkhGkx*L@e~ zFEJai8j#bi3jOR9S!kYEM~v|JqOC>Mb>%O_OH3t9atx^syVE*`gi|7Bn_YeR$4J zR4(!HomWShrZc2Gv$OwDNva}atr{dY??c3~&%z6gT8$eDo9^%@^#jYjFaJRqZ=GQ0 z_Us{)V*~w*zSv03HEqtI?~*0xdXa5iD(3ub|2Da&Zti1<7b0Okl>*S{$$&C7s~Ked9{11ZJvPV^Yg@dEGKM;SD5)C@US)b z*frvy={xmixILxXsls}NG^fm#{P@-F2W!-2c23E|4*G^S4qt8w&+=ww**W9qDD@0k zk%<*vpB4$P-(?_S768NfqF#jbn+`I}+_lS*Q+1Y2?<0ej&uonxf{V-q54U`tQ$s&C!hn>m)*Soh@{t~BrA=Kcdk{qwfH9&;KnrKIMKa|td2RXId+4u%M?H+Q!!1|c%i*Cd} zKmh`=B_CUpb%M-cxy+*>F$6&2o@&%A!|0BBl8*JQUu!bRvJE6ih(zm_ z(A*FlSPFc3{{;pkc-slZ#AYEb9cWBx##g{>{Vgz_pA1&YRCq*9Zqk3;u?G^GxzK4H z!G$7Lj`dGgPUB3^un$7N$%t%$?>MlfQg9ii3W$A7-2C`Xq}MGpZQADyN=g|!!=NoN z?R_-w+JK$1Y$ZFq5-GoHf>p%_z@kZK)DET6#@y7aj|!($wS;-S6)#gye;koGdJfAp zJ7rl`eX-d2Nkv3d-ZHG|YbmD}6}=?Gdh|ZD7Zk+sG7#+p^IoXB08}k-#A!8UGl(DI ztuhuRG*KU@T^WCZA_C1tVpq?3`A?Vu%l-qCJ65ML_8p%f4`u*e~Ngb2zcl;2+w>RcyQFNfecI9A+ z#iU7;cQ)06R9G`R;rXcLB;ui<6meKx56AVX{A8fb+LnVU z>~-9c8C_lOv`M9CHj9^lgv5}k9c}+8m~At}3P~16%k}dYE^n20~wA?wL&1zX0BU0yg-kXUJ^s&Qza+Pp2ffHhYbk1AfCWp zZ%OIll&P1Q<}(b2(U+3E*$b$c&WbXhW!(0^^-^6^Kq!e>t_nR3Vj7Y*jXg-1g~chg zlE*XqAE5Wi^YDYFH;7I>9}&5>M7OtLB$HuMb0On*NWlYLyPWeg^3-&2mwDvuU@1mb zrKbW*bN*)I=~uP0t;={M|FJ~c>=`U*u(dcAPA>4S?D85x`i8^y9zJ#isps>PjlAG> z!RB%_AXyo}`_^aY{21i!R&@HiWe4|xAM~Xyut%Z(5(kn9lBP?**#<~;A2p_B z+438_BIBG~Bnl|tLNMC53sGZfNq}Oef+Xg}QL#(LQud)-!(QObaIjE0gZ>^h&P}U% zZkGR7i&l!~X2;DEk6fo|B3nL623u-fPU}WNf~1>kveU(A5mhrqkYJP$**rw$w_=E{a~ zGS-O|=dB|7&F2+wT>%<&SfJSqT7<5MeDcS@(QDdh(FEcU=(8CZiwk+pYx-n``O zl=t+1dl7Oa!%eNZDyTsxn>2xflUCG}$`#cymE*o@N)o{o`)<1#)v4+W-3zP6A*inb z_Ae2u1DKvIt%=}QdJC2n~ zbJ&QtaxeoOH9l!6|Z%R<#vKp7i6gQ_S{(ciJun8wL~s{ zy<3>-bxvUQ0QFPwFSD%qu zU@ET9%`+eK6YA;rbntIKot`0gSeX?U@iEmxRYA)Dl%fE;KS(RT6>lh?sF*OUIjuaM zGn}OK|JgnYQj(4Q;1R5@VYoVUezl$xy+^cKHk2rEVu@g^bd3iwd&gTyR%J0}AnQDL z@{_a9mX8$rLU_lp1&2H)-tQ$iN1~H3w7ztqI?$dv_&Spk=TCTEu>!A#6z;&?EL0h< zO$zCb@79*Wqd~O!qoxXHAlX0*@pJ>#cg&X4CWehgzkOJ@YdzW%{%{iX9qF{~_wiBw z#SrSaryaX;bB~2Md}`tfUr#B6$f%8oQ`qJ2xes=u0fnjtIexg{ErUN|!*7Rl%2yY( ziyLc-w&iU|cNG)aoX2#$99TZBnys5x=P^?^B2}Oxg8J!Q!=N=8{xHj)wmSb(U6uAaILMex0gw_0xgEuQe_epRaALI+plP7 z(v7?mocDX7=a@hZBqpg0H#wcq%DHgn8^3?JGDOB}{eX6J76(mwGN*PI??J^Or7fDD zsFmhl%v+$KLeV|p1DU`OtZ6Rh8y8w(O{WsHduL3XlhYp22=d`qG7Pp*$7BZXYst#$badeiW4fee#tNS z>V-GyyXRdZWGb#(zkL$O_4b)I<<@hI$Fsi(LTn2=bfI(H_TtW+LoD!{&Kz$nz`Fw+ zUp2;kb2o`g^%m@!+yZpi$0J{;AZl>Q*{%MoxgKY}S(9fLY&G6Y+T=b0ZE!21<@hTK zyuim}O_n#>RQ}U9Ka#;8rh5XUY}T@QNW1h8FIMB)YS&eXMpm;BD|IZ6zF3BPbSon* zhV&N3paU$w@tS0Ep7fXzQ3|XAn0^}fDu~_BD?b77ztblwzP9&Mnm6V=qFlga#5kre zMz{oByh*TcgQsl~ zbWO~+23$jw5s%T_&SzK&lr9k5Czo+`=FvAc8kHgHmc)&zrUws0v{a%J2oP$y!QzwdTi`Y5Ry}*JChEmC3(fH;}LB>l1ryb z5PCy$NZZFY)s|@{%{_!f@WwQfkQo(|YVD~ZArN7fS@~_I| zXhnl*=MsL|R(4MV3PrxW#9Qn(3F`<6+pC)yM9Z_C&|-|}&V7=K|CeO2RAgO^i}^uN zoSio>nintkmnF4x6WR7_mHj@3zuz$9*obIX=Sv^=Uz5(SRBQAwZKNH;BKLHY^)0hf_K^5BqfhTpzMBcWPtjbYFO6y#ulcCcy~E)a{t-++&5>dW3}mrc{p!p$VB|() z<-gT+a=~&O*dG60JC(|w(ecd4y!1`jLe=x~G|2J@Yoj+VZVvd{ zg`!=GFV_^TdH7G|JC;F|@79=}bT1G22%>)EpWzlo{9dr8F57*X=>^CP+EB&2X3kKw zBdD!{9d}Av@w4}lQwY@?dCh7^4J8S04hUh3qWnM5Isw3TXe6@pqsLvwlOlYo_o@mY z;ghBE(DN%cJNyjIC?Gpgt;I~75Ivp=JXVZr zcWDn3+GqLW zukd_K6ggaW2pp(h{5^0A9Cc>Le6}_Hr`yZ>3P5soV7$wNb#-4Y`-?Hg@JpOSrBl5q z8s^_FUbdG(8bb*5qi)1+`u4ne{f}^985z$whVxW9q))IWA;RJQ@;PCGUULoC!{`%z zsm{k)2vK`43!1Gh(={wc^>BakZh!dUA3()=fEW7+E@g!WC_&-flnN0xg`|*-cT{}G z5iNwZPn+rJK~^B-0jggUUZVB(dDyNG(cBFimsNpEkLaw=FJLRD{I#YSODtdbO|%8S zpj@&$JTExC@UjAD%oVENpw&YBQ&YLVHk35FLw;ro#hzypugMH9{4(x%A=CD9!Qi(w zUF2&JXw8k(kzWVFGa#Y{Q7d_C=3^&5s0DuvL963x9MbV%Z*9M8C#~e6-EI+672_78 z7_eb!MK=X{g~|s>2cN4ZLHOC;9ONcfn}$^99Qk@~T@pKq#$L9EfW|`G|NNM6_aF{6 zn^h@?0YygTSK!69d9HcNGTND7v86rl%fUnRP+Z8Zr3n=z>sSq&nW~$_5E+@8_^|j9 zA5b=PA;DE>HI8~{tvrwxHZWhTq@NRTJ`(&Jud;{z<$s8$h7XMZ7@fYwIIDd6cIBzo z0z5)D90(18O5-ND{aP+d`nV%L2BU22d3>w*6du>ja+@61>7NeOqo8^zHS}K?u{%>$ ze}Bnsd&ioLxNr5xdZsBr-BHLSBs-93Kv1oD&3VOW-_`k(NS+_f6tlo+27D7T z^D+BlZD?EP5^0>%V%Ba&;_mNbcWv{C!P}B%H}Snrb(ER1ZQ;2V=>3_w3E*itw5^PE zWp)>Z&wkGeP+oDc@nA2Gl%k^R{;$S>0kr>VC9kJ_>2-bg1Lu?~z)TYX zVc+!CnV@JkUr7D(CJkb^R-p%m$yxk^L^JkIQTVSa5OY~=B~|@;jS5CL5#PL@!o?+( zpqFla8U{he_xH_?!~K`5HE9&u>tl)(x_sg0v+e{IY+U$BRnwpBE_po?FML@LInOY+ zRG(JlGAFzDfPd>RvB*y=6(^t8wdg|(tW&c5=KK^sz@`D&Yy@j?7Fme>+Y+8(UJgb3>TvzALFIRs7d+7$K61cdEJ0M!h`(Z|011eBWN@A-F{1tIOT{`Dt1g+fHR;2TIN+Xv!U!ruoSPM5hZqq(apy zrhft2qR9qdAD6%=j`{-HO(f615Faffe1g)A2yQ`GP@Y4QW3Ae1G?$j+;)O}SR02c? z*T9QZhoJ;^te7Mp63boMgvPL^ejaa2vT8^r0%U4nnsz%igDDj{p~nB{|13>15&RPz zE}OhJLDj{G>#@EY``WxGZF(;)6o{Y3T|+BNuS3@rX*#B<*@L0atZ#qIo3<=nE29PD zu8Cmn>oG{*bBbZvmVbY##ncRsehzTO>Gynxl+Aafv>;$@CZF2LgVWecae>a7NAE zDGsTO7k=YGE=(Hct~yZs4OZALTyVIHu0ksV0e0?m3Y){zgLf{MH8-!sE+FwrwM$g$ z1OM;0A7l&$4cOhL2>*8%vVF8|M9D83p^2yw(~`#F_&CBKzcSO7hPn~~i7CN<(y#lI zay$^$rj_RE_UWERQbe9J)6^7&V3YqY70*m;Y6BiS(cSu`L^=@YzfgIZ*?d1HW1naN zHx_JnqZ5~6BSfe@r_K-w+P_jFpp+huKZ(83{}^-zj0N!v-0K)(^f2yVa8TuvyYCt= z^Uu1m6fQxhcK4&@^NEbQp^_HfcIGs1)1~(9bSPq%6$i^Dph}g^$PRbUvx}Dqi)9}S zc3n{Ejo8R5QQ%WUkI9@ZK~4ug_OZTlO)J6Mu4I#BJ$2X$c<6UZZVZzb-RF?3-DC|@ z09UoYJpQ8K2rk3XZ2yLFoNV^XHy6FZ5k^xxBipV#iWzDu&n5P zF;XP{=O%ZPnEyU6=hDbRyKmXuMyolS?RW@g-Gm){c>i{x1CO6#L0*2D{9`!sDCkk0 zz2Zs6UvUe*3*Zp{mcOGIFeJZw`TU(-sK0&mgMFH>HuQk7Cd}69Cvug^A)^F`iL?oU z$st&SRt}fjyW~MWrZ7NE7u5aaErVWw$^Bm@as`)g5{%2e(;`S$RoX|cRMo?Ujoad~ z5gA`p@G_Nv>dfnmbofttg}}YtD2dNDYTxXm zsOQ24P$#mLWWRS(M~{o-{S3ccG=6ve?Q0`^FB}5) z)7$8t`=zF7?uuO6T7JlSTeoH;;~^(cF6RRx#MA*~i7Ajx&@{Tk`@>Ap=WTKs>kf-T zEoPSA0|8Z&$SJt8M-`={-MK!am9U%9Sa*RdEJK*lNHBDIc#)L411|?@O*ev9E&FoJP-hv}b~=b5#2orqbNzsG z?ccJruZd-XN^QB+6qS5S_JI!H!3kA^q~Gm`M8$4C-y!GIY}@{$paXyWQPBM;`^^6z z%D(@=F#j8}OF5hd;DK_8UL=GEj!Kie3S0`Ho$}(8ftUSj--vWSj*LlpmiaHSMBOzO z0}apm{o3VG)g0I0(=ikPf?b@6!&U&|Yd1c>I@vkz{KKS?99#u7AlYa8`9*2O2Qy(l z2&UnQpIwo1Ud!qhr)t}6`1~g>%-Wy0Hi2?1|BsY?f9JfkcEREYUXx!q=VLIf37Qoe z0iv4B0sN?sX8+Qt!`nD*CNMxl!*_N=T-CFi-d61N2}rhFuoy(l+Maw zgaKzBF9-uU074wCYi-bWi?2c=$NhHwzJ&965^D2r@HY|tOAP>WwB~NB*5sxI!stKg z0kD3QqChJ`8Fv4ZmheA%O90FzgCO+P>L~!cE8>pTBil3ds&S zC%;Lbxj|?43(r(k!~g+PW`T}i#`BooBT{wz@@WfZ)XW~3)eY!_N-@07`5gM>++i=i5aoXC;Gbx9aR5cmaJ6}}1LN>U!?Apjgu1DrX8*i(VEj)8zG+v-YLB8kE zj1=-9QRq0+f%B#)&=-s&F-;@QU#dI%STCt=27V3Y7lDBl*a9B1nceHy;T*51h(Ja2 z!&C6d^6OG7t5%4jD;2PuQSLFfEY?2-zyAsV>W|zQVet}>F-z4M3Zm<<9LFX~mYgSr zDHB0s7T`Z6mdF~6YoE=eDHC*HBe7R$Bkbw`d$77}KvSu1WEF3}myvJr_-~Q*?#rgf*x=lhk zQUA;7=Klr|{Qux7DS%gjy3p(U0Z;p5!NY?rUAzC25Hlu3glYxvpMHJv)NygIhvFAS#3wo^-wsHRyJ^MQ0TAyfKfHSZ04k!N!0mx@D*qRA!T$_D0uU1N@%^MqnyFU@ zRcI%xvb}iT+9G zzY4I)!`eTlGBUpOy!d-b1eUQ_;>drVd@ZIsu9A0SWJ{;g6%EneqiE&|h&P+a4Z`tO+rA)29?~E2tOfY!K6(s(CjqFvQ~yO(A9&1-XtKQcv*f*267W z{`WB;$VXGy0s=8H+T+r8-Id_bsm>4QpEIm-slHiCee=PGEMI)5gppR#{>&ycdi=E2 z`t+GSX=M4FBpDN#;hY;7AMC((mFkaJqi+&FH0v4vfU}e9tj%I`6&fF6}+~`fkE(#{Llmo;lvZ533TJT zV=;D}1K?zbdw(WJnp~hak;7o7;Z?B&z3n~3|Ktkl^^;>OP|ofDQQfe5UCQbDnFD@H zBY8UsaZ$yeLq>PDVFPgh-cUhpdO_~wMoYC7s9|f07|neOcJHJ*YFA!&{w1>RWYObP z9Lo2T=$!)L1*NZcFBI6|D|d+D4seYZf=72G(FqiDo z149q?3&it66lt)n`LQrvpRJcoCYeVo{3rIIzdx~e{&!!E|84#K=OD1s`$))714wAe|7;+Q*%YHD;J2XX zq*smsl6iF}S*z;$QN+poDpbljAYcNJGo>_E9)pnNsav7z%O#?P;|^J8tL`W3Xc>oo zNLw-pcr?ee4+~}Wou~8G?FYWJf+?PUSM^=7<%uL$avm?6MeY)X|3dpO+omFSoPr5d ztemE@Xcui)RWQNEg#?r(s3g2u*SnR6$#05PZ~BTlTZC!c?atf&Fx$~V5nyxcav2)> z6Z$TEJ^$*?VwP!W_>x4P%K6$uA$>%DvzH%hXlzYsEU5^Hh+l9F@jIqf054r#^83pw zGOd+}o}DK)bvYJ>q={ckA#ZQkuWpi}@mBh`)cNr^HsSm~`TuN`;eN&d0GIyHQ2lWJ zevt8^+BDxkJAnSzVB7!q=aL@`Bhx;vrKw11K`#&uQX1E=1kaPS8F}2_UY%VqU9nQhdpi_Nd^9sQHR4n76r3%hrLDr zv&+&ih`Ycl-XE7Q+MnD0@PB5&H;w$QVJy0>*u@=VZ3G#PvTnnE%me^D{6M;)Ab$=k zI|pIvm|~TLG~6WDVOiKx_X8EcuZFxpbKh9hTq8Z+BL2TfdkfggmL*H{n7Pc%Y?qm_ z%*@Qp%*;$>X67<;nVH#TW@cvQ@B8NUboamgdV2nswselPrLBz2Sdoztkt=ZH>Mqo< zKVtJqLw&)m#mx~gh)ayh3ahAF)l2URR}AA!!=q?60{&2M)Akt5Z0=Ia#Y}=U-<3hZ z1B3BUnj8QvWgM+g8ii%581Q$arC94;F|D1hro1H;Ft{PI)AMRr4)kQBXPflMaX_Ry zqsmC`JOhmO_NZjWKeXj3chLj0kntifSk>D;F8IE<@*2M6eEmCV{L0C-KRBfqz^-&I z46LEDXNS4O|U8#MbXXs#gbU*KsNg!!^yNgW&B0L>Bl~s9a zWC?1!!TL$0>y-ciND!caK=D04{dgh-P`ffbXZZ8eh2nJwJp8#SLi+YaeF<3nfuB%h zf1r^lGCOI4lwFEIswrsieih96Yirz_S#Rs`^85XsW+WrgA!NvMqEhrhIx&XYPjjrm zqjAZ~RBZc8@qwPdRG#90(aM)Hrh@)EXYGG55CAoO=L^;$*w1Dl7CX63H{KfZLI^84 z{ir)ZqxS+vTlk?yNm&afa@B|V1DT)%OCgP7 zH4Ud@B7u|v6mJKsubxlm9}4s!DnFF?Btaj=FTg(>*qN5$<9mryhIaEyp}xgU^Cgsm zC+_XI_$!%jbj}Z=d_2qJ##JY|*;(KD%H z6}Z3pR$frB0yVWjTLwp43zia&iQ7n>kOFUnS3;)^)cgaH$=-ca7C@$ z%R!3qbw4qmi$rv$h$b5K^ufE@FU`MJtti`>NEqT4k9*hj-7F7+F`3||PC||datDzq z;F#HOf}wQ&=kICCV2J7FECnJk@VK5!yL*?{LE^*U<-VcJ^nD zAvQbboDaP1PCzGUQx(Kc$$KLO5S+TiuUwKG9N`CFcigzNPWSAny$&$CltN14Oob0}X%pMi%ql10ZwBM1hKj zC_Di(TH@Jb!k{LxLa#;CW~)ryo9vC_fr{~fnwX*`g@ zb#A-OvysGEqMoP1_|WN3o}6S?Y;x`E2XiI{Gxb$ta0&{!J0a2R!el3%0QRFtW=@li zyPqi2JjF2!G;b*Hf+&TK zPuMEzdpq(~bf=e0owg~>0|0TXDQUQbEP|z9T^Gw&H(CYbU0TAFO8+O|N@hU2^%wIRI@tfVPk;Tf z;Qv|==Ko(*#eS^R;u6*dxd48BeAk!T!XB*TtLbX!UY*qdQdGeqQuNYGmyQ}5nMyTL`jKPCFleKX%wvi@YyOpj}8 zt-n;HrN%(sz?Kn42J0n2FFVZ-p(6oikh1bVx4Wj0^m*HY_oKbFvu<(H0(B*Q>hz^^ z4MV(EYN*?BxfYdO824)u#7M68gI&;J{6&MosEJ+~uH5t$K2j(LENkaZmdA~j)a_K% z72S;+2ni~DPy}v!z4q`oYW+CE0LHbl25LbXG8{&?E5uTyEOgxY6hFS=As|4dU+7)? zJFW45W4{0)>;Qn!8)=6W;Tjn&I3~E!fvfs19Tx2%W^o5siugfUH(L+wAGD6`=QGMt zFO_O5Kzc5Odl=!}sHK$j8+dXxn-2U^y05>NPv#NvmO5{>%>ZkKuiGobJ#4`PoBehD9W?t zs?Kp2Q;DOLPHr8{&xQ4i(*vBa6a3u#(|#&QXs=LHC72%QDaHVi_r&B~UQEeJxuE{> z+d0ayrT0ym7$u_GZ|x@yb%&!z_ayNKFC;TzI!?Pgp}G{W3t($V1P1~fFF%YiyJ9)&ljJp?TL@$36Hl@s z;7GT$KHvz6J0mA`@d1i$Tb0Gyj3Mj2Z;kMEB)~&(4TY=hCGuFl8Ams5Do%Y_EiI_4 z0%dpqhR0G|2z|F**ncITLO?+6NS^14h3<_)XSQZFlJ))AQ28V8Lx3uWj3Ag^xSi~~ zFP2X!dMS7FEX9srLG*31wAk1t@x^|=ANX|Alxl-;SSd-4o%70!Ouc=^dG%U9GJmA0 z=e}@~DQjQ9rn{_}FECTDgqGXGUz7CD2kI+u4FvQ*BP0D6eC2`szkKbIAdIoqq&RMV zYX>Ze+f0pE`D?4;n0~@?BMb{wv{*dAO8DHxr)>^izitBvFjbV_B{vWeffN^y_)jZhzp zRHW3kmS6*)$i-BXmq2ZxE_MB<(eMUJIC&s16upA%xqXq1T+F42l$|<^B#K*3IuQ32 zXh;VqJ?lojCuYh+#Ow>m^TW??KXkUfqHcO$8bADZQqq5gXn%AFWOsj`U;UkpN*)Uy z3^xGfLe`J+(X>EW>J(C5crU3Us5Q`jO{VK%kL4(VnS*n7$WTY9ZlLn%ESC|T#){PA zM%ex;JMY>8q)~O8k2uX=79K^GlG@+GIr=;%M0mzu_9tn_#Dn4w_oe2~DZuP8WwqD{ z==z0I zodbVCJ#z}FIARhrr7iB9^l^r&*_b;%X6$FU#<`&<;tIF$z= zvtmMcRYa*pi&|MPatE8P9tE#ExYg_KaHnL7JW*|GSuE95dPf4vLPv?G{tb`+0A`{8 zm(=V3J>%s+y5{_!g9`#-dVt^KX0R2TKA)O?PKDBPX>!oILI%#uQZq2jkoZ)wM!xFl zKf8e#;aM!$+Q*}tOS7sL`vkP@gO^T&1s(sGUr@RJm{eEn{;Cre(EOorR17>l*3w`- zV*)pvTcyP?}9O>KE(4qy&H-E^y&@@Ia~^#RZ!}o%lI3*Zzib2-UUA4p{Gnp(dkeMqA83 zk3nSN%y4u1<3!%$TapLbTysIM#18idqPj3db0lpVRR!~bwN+`1Jan4qZUp|4z5b^!btf53l^+QS`s}gs+U53V8`Ig$*#; zFY;+x0l*6HldKs0(*qxtZGA3t0L-W1hXoX7X6BQuXTdzu!}a5jBBiH-4ESA>(zzpD zx-n0Y842jXyB1YR5;UV?KJ}>Wh^8f=VHnIvw$f!sq9rmq=!f5UGU>yy9?Atx9O{p- zE#t^@xc-ZFpHw-iY(+&rSYwaV&?|gezWX91g!-?jd*0KuhOJvR^bqc!*B>U@4IA6#?uez?N z1gM7S4J#*Ao(Yzi3$dOLlGwx#fqA5aSW-8S!9r2B;4F(GoIq!NO&gN`6CwcuJztC7 z{jbvA|D!zAzs39hOGxTKGbrPb0&xfQNhrxR#&so_`{aTgb{V-u22-pxxZ8$+FFk`B z#$UQouA|J1>qaQdbnNWKr!c8I8Mf&|L9nyppoc`5t8#mtwE<8igCPrw=0g)D@F<4` zSt#6221^L!zSyI`f^J`1!{5@=|5vEvoq~*_KtMpUSn>%5sr}RekSjdpo1*H&geC#4 zT~A)k*=nP9*p-Tl)kTT+yzQ_iPUYm#hI8SanPcv2vx`W5x24+nBBfZ~O{X{F%HRLi zsw_g0%5hR_J9Tj)U4#0uSXqTC25;IpL=DE0MBpckAj_9KyLZv{ebaPvn_V#}GMx64 z@2|BP^ZSw}_wPyV|2r7|gv96}TIAP>2gMohLvESf#56z0HwvOV0kz$)Q2<-*e?mJ6 zYL12ft$j&gaNE@50IQ7P2vlhD#{XL(-=B$6=`&w(=N0@VC2q^c9;8nCc*p;7kLZ93 z_a9@N|FUzCaQqoI{|uwUwwKA#k!b`BO6rx zBVO>m_*4~DG@nuPaYby)kXLq@dIIlxwN`>P{OybXaWQeU<8|B@Jsohzq5UM&M)EhA7!G z?J>Kr4&l7GkUa{S9jLItp95F#GIZ}X!OK3)F*eTfKG!6XkOLJP(iV(dp2qRaB%GGJ z@Jo>GrOol^LJhsApwfb5J>=q+uFDhY>6KR-AOFA)G!*b+VFr$I*82tze9!(5nE47# zvkKn!B@-my8b|Mg#n$>9#(iTOZFvH8#YWc7B^Ip&uZnu#Mr&5j=t)C!!O`|8@Wz`t z$ee8;ybV)-X0UT@O)Y@7d#{dQW>CE@5XN^Ct*X|FWs}hYpEL*I(W!Mc)vyHC{b$k{ z@{=tfA_pC4ZzXvikfY!%@@7@G@tV06<(2eUACM4KD(tAO{XIll*lD^w&m8qQP;5lpqN_w() zn2bf@VhfD=O8by;`i1LxdZ_1%Y%G>tRPgTvn3g|n0R~uUII1Jd$+~3d6t^GuV8wAE z=i%1Hcz_4r^?}WH;hoTl-?Z_IKbX!;7bTCk-U!O>4aYm?sA4!s~9zN%|ZG@8H zs+??dHA{;Ugmn*E8dSrSInzV0=YwYiv@kx>H3i3rodq?QW8+%{7~)}#r_39c$O*l% zLst{c*JR_f0S>uIjEnBJ5%VXfW04-cCeM^Xrpb+48yJP=&B?0x2|5+>=jBS!Fqc zE!zTlSTV%tEGOf(lqgq2HK@HrNgB&CABdZ1>dSO(y2=6LIYVh~5XPZAZtT!}YVMPt zOkT7-mc?mP4+gV8MC!P)Hx4hWrAA+)A|~k%)oFShnMy^z*GOFx5%z}SjuN5#LAC^5 zOEPEz@3fiVRBc;xSlWFTc`Pkg`-S{Qpr8%uQ%Pu}gPGfx zDu(`|nxRR9svJl(sUA8JZ&+^VQj1I@2s%y}x__~(wR|oxLoKMlI*(emzo3%miHxQ- z_44QMy4mjmp}NDr390hA2R&!46%Y~<=^v#_*gnOLFdi=r@~31RkM>grvJv{+GqS`} zEs=?5!_Xv3`ZP%O9y@hx%U3@?gNLu$rs1-D)5q{rz5N$qg!2Gg4mH2p=H^>qj?XSbobnNySevK zO{PYF_FLdj7xholLBkZ$gHcbdpf}Rn{&|EOS34F@bHeH^%0l76h$zI&ZZ1pyU zF@#O^hB$Mi{!lS8ruMC@Gb0`prm3!&EBuh{Ay6S$4}80qhXC73C3dU2RqjxKy+5mg zXobu;&Ew{)Yg028KLP{`B>`!0+e}d>&11J?I4I`ld{%;O;Y#J(DGN?I>oq$?5Pds*z{(ZbGU`SP9(19|JT@H%-Ig0xMK=2@c5O3Wh0DNDo^K~DTxBUHoc?6hreQpP)a~cj@9=@jL*;_CZ zNdU5v7Y~^A)_YOjsu>L1n}t|(v(dcuud$8{Th-J%1y{imR8M(m{0gjk4H%(fqZgCH zDfr_c2bw*v*&Rk5zAg#dKY}<|rB%E>Z3bZ#eSreG7Ct@z;CtFf4tD3zVDYj)OJ{C{p_E@!}@U=>T3A`w><8OQV0)%erE{Jrr z(sH-NV7L^JJ~e4c%gg#%=In;u(TM+0ihAi8uhO5>dI$~7`(4-bA#^b&Dal~+lEo8Y z43zRx%7pL7{eJ+Z)fTzEk_}omX;t9(fR34mNwg?&6*@7s2spRm>3VZ#?3FS8tIBOczURO=>axC1TB_syg0z5X}GK&bQqfm0!o9~TfkResb$nJ-|zq^r}7^K zkI-LTyJyuyv#KnK8z)MliKILQV84{OP zdA0xmnAXs9iCkE>v=^gt=JOYVyvKuKs>XU zw|d=m$TP8EM!j!R#vKPj^wzM|OWyFa!?~Lb0Ywcs)ciSQ(UHr+x<6n)6!RtG1W(^< zpc4ekdkb>wWK{B;I^2T93&BxI%0ahsQfgk)AvT~|%xv01P;8vF{v5MrIL;|Pi`0%K zD}bDeOhuWg3?lOY07_ry5)v5xjB4o;0R&A2NNNcB5<3KN{~!o@KVbCFpGxK8x38w4 z5(uF1EV=)|>-#$Ffu6}II2*|c<`%z}zZ38g{HM2|Zg3lyZ5C;IV7oYSYCPU%o$)1L zWB2hMLZI$ML^->VGSzsA1b%b_^subg0IOVgJ@<;y^RXSyCa7nLYOmKY(0s9)s=oet z$t4%4Ze)u;OE7cR&CM_E6u;S#82J5ode1l$m4*j)IeK`d^gs(_q6&wh3RFdL(QhO^ z2Q>4Ze!;EIMbXoV!mq0p!gf_}M=WdSo7mKJqM68sob42gp&g2)-5>ov3Jz(GL$(Hs z%*V~p7Adm#b&)HXNZk1mut%jzpxJbtXS&9vlarP4N- zmA_-{PFvn;IX8f4!ktUyJ;Nmard)}0D@$&wx)D+*Krzhbczw)X)>4?A&+Mp`l(<^a z5;B|yTHC&1SsW&%m0{Zudg=8W)N}QTS0Z#c6_+DUZkxJ}&nupn5VgTkAzD&-*!~9c zb79dQU&R*s74t=dUWX($aGcsaXIr zv#@$NM=33Bn1qkb8hn>iO>nk>L_hZ@GyWJ|mNcMutbaf2?ppm0;9mlz-Fy7F;!aoW z1yzN0tX81>gs41JmrnCta6F_|ZOGnlwobuoWUq3&nEqQmKZ`uFHf9f4Mh)*+&ORh0 z%JC}KaI8UV3g@c80LZI(S4EJb&=(`L1-I(i$sK8scz+mG4L+vV>EkKM?KTXBa3!Hiv}&3zfzoh2}AeA}w!1CS)uT(iLFM@|j*5+Wta$9Y>o_R>jDg*^$f zI3>SfCPoUUOF)_pTn`EA!6fs*zn$SBl|=E}_#)L0juAo>(Y&AVC21$?WHTQVjPDr% zFTlsCu1?ca)~MyZ+Dt*5K9BIQZhm0#Dv`Qev2U8^W<^i}h z_w$AGz&-OY2$-8lq37P#{j$4Tw$qD4GSwxL@1x-4A+p_)Y9TVS{R5Tz>DZBS^{PP> zf9047!WozOJ-Ir@zs(=1vvHDIyfu~Og~~;{r>Py6%AD*E~0b(q}M3w*wfgf zjTjB%TFdW@BOALC?XQIFyungR^mX3o?*2f z@SpC-IQ&UxFu*dSqjl8>F#oss0mybDfD{79>Bzm%8lbFEB-rE$}AC#dN-dcWJq zb9OA;fZeO(XniZAz%WZE$PM_CGNka={9S|dD*@%C*FT}KkW>m;L+ z7t@11w_l)X5U{vt!x;U2ZoJaRges(Ei_hA;mFXsBnXc;$wile4;Z0lhj;c}&n~et0 z$$Bv9=Se%sQYewt-mU17jjzQsdJxYiS?=92c-#SrGQ|+ZinbZxfnc`n35Y1@8yg zX`QMU_wsGMSMyeZPUPp?u@7|WtPr}@wMH|LR?-GCl~d%TbUHMdkjZsG0T>XGb4YpF zYZZfcC=i|U+(^aAz&+fq#aNH>wNq8i4i8MJdjB`P9e9XfUwpn?tzUf2iAX!E&?yBD zS!RL4E~+;@JVFtbDivPrGw!{yA;0& z$8o3%Bu5B4jmN5&ERnsvAv?6}k%bD0ja~jm@igJUhon%_5!+9MK5~#S>C`HJ?c0`Y zV8ir|U!4UAIMhaNO&sV4XjHen?rve1!ugd;rk+KdR-=yh)gZ|k5I<3gwVw4Xuak3vb%Hb&47_dky+9ABl72$u zaSTs_XY{OBR6?9)0-@W3??l+80nYF@jE*a%b_tkf)cCH9-Vjlbpb`sV=Mpt>^Awt( zUfb+oXJ&}hDf>s{+L7s-VwEvTZK7rX>0_e3cul#*Z>#yAl7@?@3?Zv6d2QCuE zkqL6Wh^xBZ(^jGtSMvAOV;$2Wa|q>C8p4DdxnoLd7)~PParL$~ozvXR&n_ae!S+R& z@Sqed7ppVXjwz(c%R)*(K(6fEE(c+#S9|0-s-+^lNVqIhAuY zAX5!ig;7xP000P|#Mg!WQlC}myY43xR~woL(r+eTywl)^ce!8d7qVc~ZNAuV=|3|| z#&|n=?s)P|{N2)NN?@6eEiKD8h8T?BlsyW&CH0&d*p8yyEQrzcO(>R1`$)SZ#j>X> zY@nL(w(-xzC!&4Cn{j#Y!^~J0<;GY!8``S^g+I*xF+)On?fvF79sDrG5tj`8pJ$7q z^J7O$m_-mrtEZ!Ux$>$TD$_2SD$yr2-7C8|t5~rZ3K%n-Rw7IPNfR3znw#%U{aKxu zF2vukyWSW1pMMI86*G_36$*_{SB|sZ93aFgUY9vWem{Iq0w< zCQTcPWjL7wg;X4Toi4Us7A5(_K7cZUL^jI5dG+^5FwuO{2LP^BpQY+rsE~F6nj&bx=h%vkLi5=t7no9SDf+*w8 zxbf?vH{Xc`ruwy@Qy6duv+XLXba@-~*Z>0fZsY1AX(i{6eX2jF@=|?HKIEVVY#(%~ z7t_vu4zs?CFva;;U3^K8t&EY^{ra=o{8#eW`WyuPFdEmXMT%e#0Iqn>>zo41Ya{)0aecoW)J`#XMs@d$ri3Q#^OoU~sI2wIfwX$(`y zh2+Kq)=p%UB@jPp^&j)#FpOTedp$CpLBKLRW~3*9#RjHyTQ72r!|!rX#LYX^l1X7j zRz_bKb`9BJjLjDyxtlP18ul_rB;K7sYNQ*fw?uw~{K%np$$L z2%Rx2Vlh2D>lwBRLlr5(wNN&R=Hpf*%=}akfHtUYmLzZ(0fnc01aB^J@JpUxM5Yc~ z{l;^oL1^FgjGf|*Gn19$TP@9bcnA1AN2;^98`4?bm?wdB(8h0M*pzTHeLS+icCc(J zwAAXF;UpEX%V{>ckWZ6e;2(z-QamI-hoIAo{<~^0Y8SK#V=Jb)|-(T~1dkMjLPS7wKz8Gp6){5eq#e@Suwc3|08ADvLRKv4$v;5&;b#R_92KYV&9 z1JOfux)MSb1h0{az#XVo7MwBpR*sri2Z%C;5;gypM5}`D{aW+t4?fE4&#I3R-h&?CfaDBVW<-n4Ss=Xg zw@%ztq8gMMqj~`nN7XWef)g-usLMKhVG-*R0>L}YNzBZVBAoj%)nU&SvIo2X*ZSb zbN%B`0jXRt<$owpL77~$Rd=Wa1nQ=%^!6hQ3eqy(4s1I%C5sZ!lz&<@^}B%5m>Sz$ z?Mlx9GxX1IW^i_xbyQ{QSxpR$0slt}Lq;DRvQrpv;T&xI0gT(NqW$9=1Fxvui_W8i zy&$Cl6#2B8-``I2crzqAKxhqX;X|5-`oxnS^_Rc85*p~89#W!meN%s+dQcRN*B2(NFlr)Pe_6S2il}WzpA%MY^bxjs-E~{J*U6`**AsqoPEASV z!0u9Vs7pNzmyUc{7_s&nD6am{#7~IAm;6T!gOy^8rRlkqv7S9+J7u-aVjs#zzx5TZ z>o`>M!{ag}y^2XNC;*p-M~SIcVGMZ4REA(V6O}Y_2rM)TO=m~;nrahq!|JTX91zxY)P9Ohrb#jfrlL!(Bm@by$dz_}*pF$}Kza^aT+5Oid5Awu z*(Pm00vjHv=spEyZ@2_HXGB$lT(7ZVuvWXXH1>wot#r6)v@r!8GUm9lj}Q)JCC#So z-m|zr(|vhB>0@uKi;pX2_6zV}7jc>!G{v6#2|h9Ima?{{sMiSyZH6#X(1nb8nL?pz z0$NV`S`koazH}!>VNcc`x+=R>G0dK!Z<)2003~L^qn0Da*}oq*9HGm9ts}>Vc~&BvM43BGwJs2^m?o!;50l z+Bo2ajvtTtw0cd3Y!k#UydLF;4eUPEyC`%$(n9$T47k@%Q~D6{5Cf zc_Y%yzk2j%Ewm31uU4*fg5k1j6Jq#nXruZA6GGUVa|*gpN<_DcZ5GUw>pW{+q=aQ> znFuziows_0?M){=ZO3jyxS}m284Ybzps}60hwt}}QxW+tAV#$SgiHd@@j_9jjhjD) z%l8GInh>lAg}4&X=;T6b02se3$rWWi-PRhRHr%bsG7k+_b`o$?uKvFvdqrQ6ZX~|Z$fK{ z)H{zGI?F$*=G1$ofbjcr|NV^|nwIa(C_lZ;bS7+180}h7-R5!g|LAuc^-dgXqy5$OXvyOeMO`u`Q z^Mk2#z4{?Tq1jKGWT6gY!s;B_GW3P=L1*FJI9>x%g4gce1G5W4?;Mm$Ac9cU%=<>H zAT<2Ux_&W^Aw!Lo!({ zJ$T$NN<`dV9zC-=2WZJ8D&R~Af8KCd`({Mi?%z} z>BQ0KI2J=`5gxK5rNk4NiTC#7!6gYJLefoHyOz#cOU2J>@>(tr?d5&GjU3gMA`luaL@W8?uVscbri!l8e@^EUf}1*ScxQRFzj-B z0M>W_6U2LZLa;ZZ|C&hVK6z+Y2ASkalfDtwmOIqK(B~rybT>awHgOMuZ2VLI69|v! zbt;4|$4g|eAYGTu5yQ6Oiiwev=1$&g1_OI%k2ELvOJfu+^~w>5lR1P3g~q_xA~afc zA-cLXr(|ieAH0qaK}{vz!EfEl>PEEk!y{R1Qm&v#EXX|0O>2q;BCj89Uo6V9xE-Ub zQ}Qy!C^64MG1F6xeH;Q}ql3e`ccquN~cuRmP~1ct~zUXxgthLtx&3z(MqxCp=W6Ow*y6nCNTaC*>?a#_;8u^SMu z#lh%I1U+SBbh%{K#?tqUyJatu{ytsDu*$quk?XWzLl@4R(;^+kjLsJSwp-p==x zgmj-H-*-kU!h)#irfn@Z?j5EL1Q%hGdrjKnDc!!taGhLC(|?t;o^{d_WHG_ zup@7**ZuQHN)ri&+C8WDA#bVs5083AjT6?i5`efKY~Rss*l(uLlhx}uA6#N+w61Q*d8&KesKYIv&2 zBtFkw*Iokh8wK@c3bfbLDy9|T$xphWQ4j(=6lD&DvUdjA7fxCQ^*2KW&=4XMR+p|L8$u zpj)7snZ5*N1DbteWwTs0!)zno(#jE&93;)@_LK_E>x5=%jkcqGn(kJ}Drq-lG4LVI zk6d-Hi?=*+TRl#cpn(Rdnqd>!yY#&It%ohZ3{#T#3urt?bXA?vhlWC;8@V#-Ec&Fo zqC{`QCIj9GF+2}I9uO0)9PFJB`jHAMM@mHvaiNghzg|!BYOgelhZBqVK%mB;6g1%x z?)a;zPe^#u_AK~_x+A#X2_lGBtK6r5uJ;&kV~mFw3BrJVY0tjuFor-SotGP1PvpD{AZv$J$vK! zvhFdhrzMS@9d?(kvWqlUYwVQ2F3+p5R6k>1)qSGq`qNePz#AK(m0lWy7&{bA>2Wr`Ao&jVb&8r#b@((3H zc(gJe5?MqVkJ)4-d&hHVDplLKk3uH3(x1FAoUkz^7uuWmu}-V64vxZ&$g`0PYBrhc5_5wyK5uRJ!H02{1(Il5qEM z4_)ecwWw5lOlU1Y(C;ArX_w7o*r*lMKvy+e|=SOX)*uKR)#Iv&Cp(5p< z-0~R}UcCfXcQQ_3`w@V1)DS~PQ;2L^hd&1dj=4?<7W?H@$HJabg!~4_5-Hu016ZVBA7A%*?#+)DqNu}wu|KB^ z?G4;DN*__khVt*KkspH&iEKA(g;bSENLOBX&v@%}Dm+RerwHxYyciM9%xP0vZZbHa zzyD+^DmUP0JhgcBoFijJxb14WHf2uCtI}#*!CG$M9^oHv4eDe*)i>`1TA=H%TqMc_ zN*JoE&$>7Ygi&Wfl6vW#!E)r67Y;r=pPF%Fl3}#*rq+pNVDq z&VH979f*kPMLZ{tLr*j-5cV?z4<2qjOs)ie#NRVQkx@bB3_-Yb%h)Wti|{3|GRK2K zWO`8KJEI%~_GHU)z#NZzhd8-W#qao~95iYyL7raL#z^FJ0w8;fxB$n#4#GlUrJ@+q z1r?6qwC_nu>H~${>!fPzl_7HBB~l_25A9j7>J-7^^OGB#k&7N`b`9U08M+|i1>|ws zcpwsrcolgZl#1be&`D1+Q;j2(C;@%D`Ma8SK_U?}KH`SXzcp*34=q_5VplwmWEsG!TcmQ zY}RA%dWh#=0+W(L5r&p+KT%DV>^Ck|Hw#f^YMoRpHwzZ@H(U>6PZC*ZGggTYTVG-| zO9VO)ruCRG`{OW^jBVuf{7|P{1(bpznWnSv!EB~2a1JK9wyU3uRSplZELajU)=W7<-;NNHx34YdrPit=G7C6Bm@x855rnZZyULRBnQ44csx%}FUy!NB? z@WF8AKzlR zEo9~6lyMS(ANtcF6)q;XrDibwsZR{MA4+!x#c#v%CW%uX*+DbQ?`eJo-FZ3In&ZF; zB{ZX*v@&yxBM;w)$keuFOxi$8a7cTX4&Q{yK^CCKuD<=8Yd>d;L`C9wJNf81U*Bj1 zF8Epv`8!y7>Z=gqf&zTJ2a(tof&xGyq@{qEcP}w}kr5SXbYWCG16c{jgwu)9O1fmD z$}>mZOMlX{Rxx^Txtw7;Rfg0fwkZzqNVwG3da?&MGkLqbuN@xN@68Hc=<gpT5DB^gaN+mFZoG4G$(Wvv2}gYi~05r5ZsUB7HwlO4;tlF3U{>~fQXDlL&!BRw%gL>I&^pm}i`@4}5POeVXDAIO<@jM8%4JGs z6N-p{PF&SPY!C@S#UJY>_+L#UtAF;w&~7z+T$~kwJP>hw;Gb4l*|P>@SS)|47id!~ z`YRpj%lmVDvs3w1RZ^;Za6LWxV1<;4Q=n=pE39Tnd?8FM6LYgl!81WEW zrPY-EH0U^VgND1^qa5fpQ+VlvE?5SAwTb(f?(LRQP8&HvyUe2HYQ)5y9g^}k1OJun zw(w42^J$t_0Zo+=jLi+J3oBEeR1EX-fjrwfrNy%;Ps2e44<}2hBl-qjBPx^i!eGQf#lZwa*1m9&2&TaG_n^b*>-4?;l}=0M+Rq21cmIRQkUYvbcKCEM1jtpJsu>l`GLoX!tdfmi23&dajn?Obq18F9g31svs? z-b{#t(~&8wJQH%*xfoD3rg&6TtedewpD0J<$h=3RBT09>)}?PmkqMCBpZ|?!(DHqj zr7p-1>3y$Z)D;CI+)MA`H(+zEMAG*G&Z#k^-+LAa{g+O^2mpemEi({;cLpYs3Yp+r z@@OL4Bw3IwVg2BlQ7l_W71nrPwWhOrCvAuw>Z<66C#i{=$5kt74>h)2COc(eh@dWH zoj}?=4*uJ$faljC!DVuu_|l#w?aw3>I{M-WAB6CkEV$0=3NErR_8=>Y3@7b0N*oF{ zp3J-S39C}~${5b#!G}VQfmP4B#>sQu#SJ>GwBY%{R_emaLM~G&C?(0}{ho-4uv4mV z+oF#OlE<*(`{J#o(;e*%_iD>P0$(bWxz2%o@}a8>!8|-P66A);4_lLSZ>j9@-yp|s zkWuJEwLV_l+bz%4@Ed}fLQliMxXrSA_iY=T6a|ukSRJ^J>5f>THwsTNp9;P?AXFfK zD21dZ$4~T##*Cec``6Mtw)73qm`*nnkc|GoZ$I|%%7XgxA(+vMJ_8pzPLj9iM;?J= zDq1VH(z4SSa`MH9iVnHrQO^*a3+Zx=6H%RPB#L1}xQ>5*>*36$y&SE_Wk34XJd?N$ z$3z+D!FmcxRFU}8D%^ok@>dMYrbzjP#dV8Dn~y{}GE-#HsqRsgf#xYa4i9gHUHl^S^!epI-oyyIg>?eV~Sg&z#PfddB$AuSuysjacR_PU-7BGaKg*=myYD zSbHZjSgn?SoBZ?VLmP#XuIf+Ifu6EQQTwx%ZXJsi`)B8QnX!NKxeQQ7L6MF0Vh#wB zJVibU72f+pm$3VJFAph#QsP!NkWvhbrhb-=SS3=gr#t8Iy$gNmMj4A75=iP=LhT)a zs{`X=zhu)gi^sEos67E8%YqMi>sg`eQVIrVCJ()qt-zzUN_X(AKN&($*k%|Yyn08Y z!+#E~8^~qXGJ_sFP-gG^$L&w(J0*{7M(PnB;SAStFXaxTx#K&G*$yMbdSgFG&Gm~+ zw3|YPcikBsh=s(ok3xjc^B+oE!&!om)o>b@sH; z$ge)~&5e9f*!B!rnIdjwyoMb)mP$Z=kQVeRl!8cZ7nsq;-1IT2xgBIO)x8@Uyp$ZZ z4ZE}GIsnX8o_5)p2KPdhrL~*B5EbMCedbcdm(&(ke|RuEl-2!T+t{=AQ6c5URA6=c z3k>YAHzT`b+pq(twFkGa!o*DB1y^)~AR>7P{o9{`d-ZNDVY5UyYpL2p0Y`qv|bBQqSL ziMJ3XGg3fKUP}*Cetke4m~w^D<;}%r4(sbXPg8@dn(+B&0eG^ujEL9QpcBdIS4+uNe8> zB7UpG7IzRY#@wJH0|K!HD7zv0o!YKoyw|S2ey*Kf!S_C;#KMsjwUj}py0AD%yG0vx zF3T9;0<^GIs*yJO0%R-_5V}|yKmh@%-U#vcCoraywOFF`;2HwzOU{~r0p)#F;RgkZ zJRAJV7j6baZY$4uLjV9S$RG&qBrpM{piz5;Wk}8$(x*e?iUzu98*@YnadsFt1oeg( zlF1M$P0ju)W-akx0v8?nO;s>E!9WdA@Tk9@)|aNX+m!!0D8FDZW&>1z?@N2jOBw`$ z+7V&Dl>I}vSyK8mosW9w-<#s*gHxoA{coYkDFCB@0gQd%Bs?95sd);B01E(+h9m)X zUO)ivX4(>5=Cy&M*dCNDCPu&kMx(gYXneG-PLs&^WhnGdSyw<2T7hnJY0{{S11Q%PS%3-#+00rv+EH?p%0eKdwkkG)$`J4a%0{}QcEc}uS`*W7x z<|UkZf9@4GYOr!;evXcfpXqx;#u05Mj|h65TcEU)Fl*LR{@kyO*B9z6i2Kk6T6OQC z%mTIP96$jj07l!$n<RLn*}oxH`IS2vYrQ00J|;1uZGSO95c>^TJ(h+)i39zzGiQ=)zyF z@|gewF2!Wf09AbwWZyh^_p`7K;9;ROblMkxPurK%S-;j5>s+p?S5{J8Sp3J4D}FOnIX20nQX29>EF}JH@;1 zTWmvbN85(QDVIAeh(GIv0&I$BDG98M7q|ckSZ_c(jA%cByIVs76LGU5;3!gnxB!ei zjg!x78ob8<08+(v(uV*^G<^S(2vFYL@Z zy)ZpgX}|#MxNZOr0|6g5JPmQ_^IFP*nKkPdG(}$S&s82A`Q&oTT;Z@$S8G_tr`+bq z5_JFtg_;9fqqnKlGrm|6z-mwS2;x2J_Jhn}HoXkzZv!z0o=0}NQ&k$Mquxp@)e~(x zam&>d9RsgVl|s-)@#S3C#fYTuj;BUZJxoCy;}0fEHk1oCu&YzO997%A2)I73FTwO4 zKBN=#lgWIxQ+bJB^_ll|BcAM6lAcu?Uz83FLeR4?tXo;#dP{SkxS;_!L zkWbX;Cv6WKCotRuE~WyYX(C)<5Nl3C)GhFRc$GPrtdLCR(%jC2Tez=-PzEwic76rY z5ZDk-F}OUG4pai5Y)V>00wX~@ef=tKoRo(qaD2!*vVQR+IT-(>YvOH}#n`$;8lm77 zOmt-0Vcf%&%-Z4H5}+R?O?y_4!C@*pVL39m)&&FC>m20NiS=+u?5EMk!e>CuOgicL$0vbQ%TZ*N6HpC`n+&&=bamIgph@ z8)Xb=8!HH|;Tqc}xv_0IvQ6ggYkDWxVH8JTn91S5@i#3D>WyA};29S`^zwevk&TM;J^^}= z2Cs9hvfvxW#z|EnI)n$k_w<`bo3N0Zlb`JeXr`7s)YUiK3h=1gg10st?{kMAh!m^o zh_QQxsm+mn7J6TH3pZVL$4$n=qi#5r3+vaSe^}(#3`f^JB4xywu_H1C)BeKjNY)zh zyE@)Fv-v((EzH=HTun3x{Eo#dU>`SOdlX-y?n4!5 z+}1U#H}f!xXgdV1fzhKtXq&9>d%xFb^)(8Z>J+;oNLc2RU7M}6qt3>UIOTW6?U%mw z6j_25hq~(hs%}NlkGEN(4{^9vK`SMTwp(i?cLMOraTiY`^**`KOQc8yYDpjio247Fu9}|8pHXX7T_Vqxt{= zEf7Ee^?_C_`jT&G9Cm>=v7su?_L`Mxf-~~%nrEc@=!A4gkU9QI?{+A#8y22>Z}$R8 zKT|*G73a4>FFdagqF#)-+k*LM*k=_29D zQ!wn3D}2$L8TjN&(>p<IV%w4wy;Wh2mHPzEe%!}| zVRG(6YxN6cD#?_k@VJFJSR5#j5W;~8}c#^L5NMn2V1v8lKX(3GuM6@PW#hDESq?q=2I-k zeDA#N%|9Rl_VJL#ijKf;GcHhnv5qCam+bj=t0B)VjgAHy;s}<0R9&d0%)XBMA9H5x z9+6s6;r@@D*WBULB` zKaWMdY?vIGD*I%dFx_zp7KqO*B4YNC=5o?7bjE#`ksyl?SbWh<6vzv+6$08vW!nZ| z>!5qoZknI2n$7}UY;QP;r;(6-dh}b07?ANnX3db+jQY~)2AbwB8eF?dm{e9Eay!!w^}^jWX# zG5SgPW2r#C+F)($0h9Xf=!uk2x)=L^6?7s>o*E(OG^}u9?sg68Q&jb7EAxP5x2}an z{3qgaT4i9K4)u5GjS&HQisgOF^?*z|#>t~t-cdIVLtr`G!#K;@0C)1imQF}|QjAW2 zNOFI53{o2r-YeyZ`h5AI?QTP25HQ%e9fV*AsDD^8)Xi&1Bvr~AyMmWsvE!-P?@6#5 z{Fq3UPWtnHfRB@xTIlc&ym*fyW-9}(DH_Zm&#sxxba6)xv{IYd zxTO}^jm1KbMH?KIhB{|qUiW67v*3%|*SRn8*QV=}b5ouCp{pGZOuzBsvFEK3H10NJ zV}1dCUJQGh@y$ejSv8UXUSDsoTc|%autTqg{FL^TxnZpv4OX*aAnU^6d@988^u*1RkUlZ5g7=>3#2-7OTAl zHNal+FzSdu2r?`b#pE0Qs3DI@L`8ftU;9qe_Nk7#RX8mEsdUo<+JQuprZ&o?%4(|2 z045yz4w0micCe?6pk96FoQemkw-HjQnaW;WA5%i_gx7O_WvCJ()umk! znN`dH8#3i>wYmd)ctKw=Ua8~gb~JC zfHs(4+7Xtk@Uc8r3(lu7PsbGoZ!SbOQQEW1dWFF7Y^A1q&tzQTq9oD5fote%Mk6R( zw4K`#FOPjcFuRh{@^S#?4Ao+V0AdO_8P97fad}|%=^kv{vV!M{q zw1|X7DSFaRV)bSkW)CTjqH!+d^QWICWcwMWdnqg&i{|Q(KZKt3Q6yPTD97SOnSCvs zP%k>Bhn-z_i@-cq(hyvuGApzd7NF0tGGAHwbl11kfkAT-8&d&N@ zV9DJ3fg6PLWdk+y_O!%Le5h=`sOFFl!j&!GD#{uZ_+b9c-X60h8*rDO5=!M=#x;d4 z9Z~V#;sMc8_TGjv7mf*!-y2I_t!BSF7k6;*MZw1U&bx*9rJ}u zl<{DTc`z*nv$H#FNsIdmlk{)#bs({VNugm*kbi5KGY3_u00095J_v{kGv`my{OoW6D0*&t z_{b6*l?1CB;{y~Eet}Twl*5Z5QS;W^J_99Zavnm7T{~>c`E!ZbE+UVbLZ5}9QOeBc zozoJ(8%X&r0x7EA6}fi($swyDrFbZ${+=g+VY%MQZP$~nZT-huk+oPcXub`3PI z(uRO-TwmmS!M4LGAAFky2~bpun4Te7#S#tvMx3?4)Mkb>{(8m+&xvO*KK@IP8F#$s zJH4j5@?y7?SV^uPne*J8zxXzTV%ncNRBC;8_^_eobC4eF+CKC=Sx~;(q?ZcxTQ6w(#w^}Q%s>bS-RfYI_1??S&7MY{! zFqF8T=9!J!!FeKw1j#UhMqr1!is>V0guyLTNg8qm@Pz!IvW^ciE+_w?+W2+3U=(x^ zbQ{=%I#eIqHrTuvOBGU#I*PFf%KKunETxi5gW7?Zh5Fw5 z%c8!kWrfQ><-7s!e64N7bPrk+L3^7H&M+1Y820pb^GfHy zZ1;077yl4`pKRLXer>-w!SB#~j9CZiZM)=Q_JT`RBJ7LOJB_ zth^7UX5$s95v z`@+NtzLvrj1g=&LUqN#sZJTi|o_KRan;ww!aOV(aIbE#h`*s1aB)-^zBw*t+(7O3x z{!bLN&tlS>omAzC8JS+R3JARW#`d&#u|fMQ5rz%PhO;3eL;QuXpvsju{-;t2D^rN!VfzsW6sCNl8dcvt~0O#R$|PXm^p@VcVV z7exadvJ#CsE0C2vkd9T%zc9MbVT*(pzNss_opN(99H$QbJ1sW0d&Dsh-K9Y-*jHu` z;M{O6cV59qG4y8do*Wwc$tyKXeLNMDjon&6VZH-Bw*>USp|ds$&4Qi7cDnqBoUN6C z+%)f8adt88EuQtAuZ$=F0chYEd%3JCUBeo9tsrL~^er{DRQ-@}QRIl;Luf*GwRHvp zG2**ysucy^OMhJVbqO1W!IJ|GE$JQhaJ}IEa11~KZd8`ElTTbc-BEX|W6Kaq6lAu1 zuk)Lnp%E?DP1e-;NEJU;42=P|K%{>S@eo+XoFS!jLz|8^NBH@1Rx zv=p4NS0Xh&b*-X1;EjbBQ?&LR~8Y3GzVGI2?H$q&8A3V+j@-^sL6GtfBtX>B~WV-#fbf43cx z`v@R%*y1s68;S3hgu1u-{5H{Ki#dw}K|3M!86V7+`*d%-yRkaMkN|UXVfXsQta$U! zyqRl~d-ke9J9JIK3YWa3GGn!*x*2DnCyNj< zkF4dAAWt*pd+8FWz@4?jR)WB_am772UYBdtH$;b{Ch!_I6})Gzaj9_@U98v|(g8do z(BHqK&oH54*rXnYt(t)DrX6uSVToW|D6frxFxpja+rIhyq&TOcL(Aw2qPT%?^gB?@ zUAL89EQf(*816~boO+}hr||7rY$v=T`1{9|`vHHt_voRT;eQ*^u7LS)348+?yt;D ziyIEV21LW&F zX%Rhij2RE+)4|-0jnF?Cx0x6n_#Q1F2lEKhq}(3tDX&MI%+i5y+YPrhHKX5BRrC2^ z_~zh?UdmVW_YLNT5WK$^Z|1cJkn)x2(=ogNV_plr{OkxITQ8D%c{J#R1%Eh*QQ;^` z*pj^HA%$Oc4GphA+as9qm88;@!MQ#(Fi;g)sg#`D5UKNq#~=uH7*(=cF5}gnitzP5H`JelIX)TDJ)du@2%={S+wM+InDh`C3d6DvE=r?S8wK-$Bq00W;wRQ^B! z%u=5?U?wiG$ja9vng;T?~T=G1a{=?xu8wZ#K4vRR!O$rD4f@D1Y5H1GESqG9$ydI&^&~8<5lf7ax=*(x6SQ4Zq9pd|6bZg@5UngrxYUFv#}Yt z=3@s!?tG29r09rPL~e~{8cBwqDx#j+AW034vh?(UeubK!4nH>D=tp1_;%!`jI2&BT zZ&S@htlS|C0e0ZA@wy70AiN=K9&gnjxRFm@Gu}e)`N+V#OmXEyRrZZ~7g z2Eq(v7tuJSy8T7t?{nt_XP~2vy~bzQj_`?PTI7|#90b!uhtR4vBTZ7{>_v1yFlTwv zhQ-V2v$u;jR-w@BBKJW@Yk0&C8BFwAp=K zLFT2PN)NJYue(<=V49cyaA+IFpzIhi`~7J2)0L$$74dm`n^F!2U5Gw0r2zm+%1$yb zUsO02Nw5xy5`-uUdXKB1JIlihT5SEpsSW6zF?F&3yBSwG2S(cq?^Ba z1jFy}(?&iNB(wzsm{NGHA=BmEcg8UVB)xb)Q_j3hGz`AkO6iEZel$Nw;JL*h#bHuG zv}1b)!n4?{I~}Yx+t+yIwkZFBc<_iO*3v0oC#AK44|~V#I3zuED<~vT(K1cam1?f{3GIzvr6~OZyFlN2kh4xWEbQHf8pV z*uI2j1jMR?e+Ml93wJv7`b9OXmR@`HP*T=wSFJ!80rHoL2$W~z_9Pwj)f;@fs4hECXnm1(MSFlpfpD;<{G>@MFzNopNbJG!#PO?ss_K?DIwK>kqCg) z6)2IeEQ2`V$JqdRYykriWAnlz_0Tx;UCl|Mg%7;hU9ic)i{w!_T@{-mGC+2P+w(po zh;QyRTcdq?7NrJM&~A^ecH3gAg~;v9FUttq0=-Ou_9Xk$ ze-How!@=Z5Hq*#b3t|J}EAD!R1Y&1hYtgJOm3pGs)vW7A*R!EjOy8tdktIO5T<cWQkP*Vt*S zPF4fRX zRQFKK_j`BoqR`-Sb&&nM3~12O+^oD!b=`)z!?1w!s1XW7y5kB#n`H8*ld!5eN>{VXwrnz|pjDPRBq0|MKQq9wc2 z)0}4t1V*#~pls((K=Ql!6NNstA0b*P`0nODtKy9 zr7_pbdg|ik83s~MR%o0x=fFFdaE#G|slLQOL;!Ls)u~6zWKDV7r6}KMuD`Oh09{sg z14KIo9MmUCpCPX(FO(K2rd=~LbLdF2qBJuJ%}1LX-=-ou-@gSyiTNI=dRsKRo?!Bd zi%8Q^?zrfxLi<4aL=QDEidn#r8&noqfUD1!Wk)F}MA7v*+(X?UA_GIi6S=(I7eh#o zAjgG@{+>7#;YOgPl^sJQ3_5tip8&B2CzZN8HSptr5fj9~CG2m~J{%c)eOwjtBOX3< z#s_QrzWD%RRFQ3yOBh8**Ghe7TeCYsDleIIQN(8*oJ=EMJZ->w;&JP6+Y}`}6*>I} zv%0Z}CgdXhJjUm)gXgVyh7MW!C4HCbW7CL50n%sef*qr zZ}I4(j;YevNte(CT`Y_L1H!HNH*4H^jo>wwl%!_*^T1u8xEVesh#r=%YAjR}Yr|IWMw1+uIkOT1rBL9!GOe5H49sm)Se8 zmKET*|H^s1K0uC!_a#mMa8hUEdEBerwK1DHIB;pU*4F1&6Ay<9|5$otz*zM9hV_(| zTMp$rGPr2;RSe+x3n@dvdue^{|C-(;%%+r5zB-Uem}AR^8B_i;q4xj_{pE^abP9L8;e@ z$xnKiJP*wEK~g`Vk->sBlPAyLYKoN)-~w2TT4(D(Mi7~U44M1Osm-DkuW2am&-l;% z-~h&-;H}~FLx;|p$XZ*(ZuFC{GjLA6y&{z{a-q-!PG zpD*Paq^nxDrhtFAA;U|__MP}7c7Cn*K z84plvm66IC+~_bm{*(SQOrd&}|92jTk)!S0mzNeCh2(s2ID*Y*CD`ZkCx*A)yBdSa7-zE?q&^}YETUw4p`v=S5r-5AkxU)N3O z^0mGsSvT*yHyX8o^~2eq5wr7uEMdPm6A+fl=^n9!trd7aJ8QX%JDL2&8Z@#Ulf_@r zite?tYuq1Of-7JrlzifpKJ}%OPuYl+U(hG{%G)Co= z`XFRL!(L3DOgip&mZGU07IXL3Az)@8YTz{RK9K)MUtusUCQ2inaN3;FPYg(jY*YZ^ zI1C{OR0;k}*^F^RQOInxU9)wx&0(IDSY@RxU+#aE?7=$VockVgHXHsyHna_y5YeCR zO#p|hM*#plY%EK!Wgvz}^h%IEi{TvpGDCAsvMeBkKG%7n4{2^lsSbDo)frQia#&pT(vO)nidH5 zLLO2LEB!LxlkzRR|lZ3M6g70Isp|v%1Nr zSQqUa3Ga~yeMUfC02gz}Z=spUl>dfzq?@;G zo$x5iYXsKNKF1|Tpo>t7FyAo>f3mD+7&=W zsk{BYXP~P@6>jKEHWvYU$B-S(awY`A?3DQY-er00096 zRs#Cv?LO&Ac>QIAej8CS+rV>R_i_=R3OXO8k9$ zVp1AFj^=n#06q5mCT6_GikfYJoHpMv>vkpRzJ)q+RRJG`MQ|lXJtwHq4k@O#h}XhX z+{S=K>@tU8EN}I&Z#Vm$0!%LKK2JqJRVG1jtd>*4A`;tm+VbO;5V<8VW(k^ z3kmBq#1G-e%klrGkZ^42IK|bRlYNbnGm#l8qIgd$~m@f_3)B8M9hni2CV@suT5YOEeOa1c3Otcs{?9u z^wI4oJ;?Da>M-q?TUDf<80a4s44N;h)Yf(2a!h-m3!uGVIrwj)f5~s~zg!R;Y)^qS z#$`Xx0#XSZMo*3o!%c-Aa|O4Hd9q@V+BNEK38+B51@`cj4Y96wpDL*O=CM|=FGFTN zK4Fm~oFyWdBl$aa?`mTvDE|0ahQJ~Ep{9itEcGKf*~nyZoCC-N@`H%i!b6mkObV0e zrt}cAz6e~QsJl^xtja3&DrB!>a(*D;P>%I3m(|O4#C>#09!^YQn z_VWV=)L3+c%*4`w7whl+1%{SX;{e?%-g5kAoclv4f%y%;YAkM*@DvFg0;sft9Cv^p z^dwLfFTfUSFa?P%=&HCwHgEea&P7R42A47)NO5)ITlF(n@FRo#^?IF-Mt@~Z6g%n| z!4e`>6)HH-+O80+<n<=(j*Z#3(dy`)v^l?#%yK_~&aAXSR)u>~^OcY^T`brp=E^(^Z2 zay7N{Hj{{6>DN zoV{mNpU~r(RggPEOL!hcD#L>)#gEAYpkzsW&Qf98YKek~(_?jN6NbEw2ZoM0^mUuJ z4791=>$Fu+mqLyJzL}kb51wXm7iUXt(_nj!JMO#XvyQ8?soM)bAOe zL?)8-d4Ld+0m>jXa+pvHfP|y61^8-AnQrg9Wp}2|Sp|K8@bB#Vuvk5|vGAu6!jalj z|IABkQP^mRX{dR=r++c^DuBe0p;WYP<4`mQ7FH4`3=oE35{<5ywE#aZ?CnB{W@e2! z?v*^Ck9vC;X1rKxpI5mmb|^NUXv6ZdmNUb7cs-TudEMs-P5EB$8V>A~c0!~L@;O!I zLRL5{jR_+s7G!+sAgAUk%jp%NKfYP`C>jUI72`d&pU{c*fO>RGEYV_;LP>|sPrkBZtrd4y5`B8WiftFq>e>bb)dR> z!yg(!hEMnVtSooFUYwl@Q)z5fm~2Lz8KRUSAJH1WSVA+iyyD!POjSzL^HTM3WUcM3 zh1IiHTP|QZ`8PQ^7vaVM`F+kG^cyH3Kull26&Ylh?H_La-e><8-)UBvl%Sh!!+Dwq zW={)q&gHVRrnRM$fqo9er0h$-t!zKJ4)iRFAC0uf92nNX@&2znTb0zO~Ks?-$@&Nx~huu=)>a^d}7j$I4L zIV~EJ)C<+$GQQlg)S2b2lp+WoqkOkW0sWebwV*3=%&4 zxV^%8P21{~214vxwA`fS9;#7I^*R@Troh)?6yExH6{Agi>_50i8ihlGuv<-C|B0R}NdyOKjuSMdc59*y z86~XHPdGCdr}2($V^DC-k;DTK?{F@2vz-@s(-7nZfHbLmpeTxY9}joIj2cR$8#~D- zoE1xau65lyTwzNNOUZmgLlee_Kq{J*FHrCUlLWkk7vA0sj#LwGmbii-k7Z_#-6aa~ z@P=^g#!xNsd192)rZt(vKZzB4AzRET4mfg|L8y*AYVON8<>x1zp4jjTJtN=i)-NNw z{pP_Pe0I!j4RvivYrZ~DgLaL_?bpQYF&Aadg0#0dRyh!DoZb2$!oK&Kc&WKMh98AE zWKXaAS_ds`1L@`^K_-M?Ic|gl3)!06C7$Igj8pb zP-OxvYKAkj!n|`BEi6_EGz3WG=pycp95<&x+8QLb(iIy)UAdYTYnB-hgcN_TIR%3! z#%l9rJhH@4_y}vnm(r*puXuWt==!}*o-_&XVvRR|;2}(;@h_!9876N0*s7z!hlV7Ydp$D%3cD$phfQv=&$lS!3wgt#G^C2pmzaaLg% zIRSz+TH$#8Dd$*zY7wf`a2=u+WsRTxG?Ylgx34c=y%h@4|G*4(18ohbqz0hFKMHqb zla6P(zPWQ(NI3-oKmO{KxhKO3UkCx!c+~6)7;p^rmKM`Yd+IFH~IMM(CiU1Fre2$vu-UBpA2~+^9@JZL4m<_{7>k;o)5LIG+o&Ms!dxMiY z5%p;r$iald?Fal5_1-UpZ)q;T#X4UifkL)gNp9#4=cS?J+YUu2wn&{z$e*tP9>RnI z^wad5p7aEc(SZ^HkIGV<00A_5Bf1<|AW#(HvQM+ER~M^ddiaS@a5BIFUQJfq3gKWy zm;+sRMiF72f!UzpMv1f48l)t=>|i$kH^x80Ka<&*JwTIMxwFigL!?CjHH&h4WVo2z zdEhh&lLuC6Zwj5g=;B3xyE!WsDu_DA1)j)UfK{pMXVU0ysQ^;jmlbZ^x=CI)M6bJ&J#ozmLo+unP7r2~ z$Sm7lDK2%foTBrm&50vn00Ru+FeV@X02Wxp${F>CFXZD;iBJ0{h}DXX-++^E!q6IB z(p0UcM&csMeh&g_s*2_0QTL+M&oD4_b%4%@;8F}0`?_=;Ev8Ea6u_la<841|sl{+Q zC-k43(wAuTQ8@a1bhH+=Yb63)h)8C_e^`@&u8cf7w=)UPbbM-o#ZUt5?C=>dNmQ=n zaN7LweA%#JKLJO1_uLktiz#SQ5Zm^yWl+Jz7Kb|&WU^`NEb^W%`>t#hpej2)=bdpw z4h!Wm`YgB}rvW((d}kSHpo31R>_PhAp0w%+fH`2~6b7g>Mg3H-8I`_cP!z+}V@9i| z>iu&=G68;9dJf52{@$d?4h~4rH~#00jIjHu!|7P2Xy5uodKcvE>mffSxUI9L2`zSD z$5$)4L_wgR(H<4e``-7x?|Yj>`pwDBzyJUP0009300RI30{{R60009300RI30{{R6 z00093032}u0EL-BoAFKI4wi|OzzApm{+a0*ss)t0dg*F)Eq;MZ&v{}UBrhM z=_FJ@Mc}pQKx~>E=Zc3R&%K896xupY><>?e722+OhG!PkhzIXWzB;x0A2rsowHgC{ zH`Txw%Vx)uv>JFt@cIO-?^heJN*U_(j&%5$7IEDQOuX1WLd{IwWRhtbz=aTP)H2H= zxw^2r^~3st!@PjP74+;^$}TMmX8HgC0{{m!>1g9LNvWU{@u6S<4rYTV zCWn~_*Ouw}>iB^B17i_Zxi#G$XycdKzn{+BafZk;-Tx+nj_Hyp=qaU7)aSrtpy$L} zL(^x8t!TgUe18PblU&S!8&gV8zK1sgTqeFkIU4!}f^RUE^F32^TnC%gm>s9X`*j&u zDJkcjr0D>Ax%B(YQJ%bw0eNwiU0HcdwMzjgQa67ucD*7jYveXC^41^9Z98V@*=p?| zM&1&649J?MZBFP9%7lQZvH4T1wVzOE!afCNNp6}P%M-HAeDo8t?PLf@Pv#eR4}-O9 zYkfU;OHCQe8Gu_)w7lzy=+CVMoQse}S4cOktS$gjU(F7QX{hlr#|)D1-nal9;pGU6 z;qP+&1yaEq&|aH7EP@x5Oy(ghCj;08dBkP&h4sD2&oA%i7fdt46)j(J;XjXqwPz|( zVeg$|19`}k1^#cR+7;j1F^%F9?^^lK-*~U1eK-$y%~!Si*R!fQ$vG+oEf~VaHI zZn51;o(c< zCbLbt-a=i-(+pge{T}sE>3vR2zwP8z10h=R1Z!l8@6Cd%^eVmq9P79Xx+@q@*nSD* zgaoOQGUIzS7;#)sk&1#fK-7YleVNHB|B-^i59j0ypV?eicsRq_dah0P;sLoE02F;H zCsBAy@K>DPplfOS`k*aWzXbIT2lmpq__+##Tn9k~+11dW#VH0VZsYkxYGyo8J!(#( zS~RIyUg})cf9Ww%Z^*}bIrwy^>3$NUjFOX|-8W{z91jpBjeIz&x7A!wS+@8NORKIY z7eRp}HM;kD&v*_GF-XohV>N|#!KDK1ro@u~dZ$glFcKo04adltHi&oUdWHvx>fE+;bm=F)k ze(RP`ASYZF)^zHqh2hskm*BlSLa-IxN2C@~Gs1QCdY~D>#78cyTt4Gx!YfIkXjY)J zE|&X-@di`bo@lt}S(q}Ja&pPMM1wD3NDq)+=OcSx<+8t6#X@mLW(P=~0@)`t6EEYw zLK~+J)%%VYR+<2ms9w0E7~6J+ywtsxPR2M>mRAsH2cT>~Gy`S+(Cj#QhfigQQ#$w+ zi6GEwH-;X`6?@uo)y`=a&RA7yq}$80yELV2$;tsiM~q3gLLYT)677pBQMTH+PE?TK zbviREDnjHg=pBgSTNvHci#aRmR*|KL;2cI;lG$2k;pZeP^(^7_3d0BSQzAtcV9sos z`=#vneI?8-zz%3me^Lyl%2U%u8R`KLz_{2)Me zqJ3b8Hi{BT8QnZ>x;lQCl>4VA9`6ry@I>)IomV@}s0`1SY0~{HK-#pA@QsVu z!{gidDn|W%H7$3zgc+YfP+ZMp(_7}~t%noaz^K?F;ejYAW@HnaPIhRkw|Zg5A$|Nk zuPMy*J%$S2&zD03NXs1N;GOn%qo}Mq3okbYY&1w4uhrWbtw@4d)XS=jj0lM=RE!(} zXkAx-n6{tqTSKI*C0C7%Fz=GaPM(rUZI2ACJ1>H<_N5^`uD!YFu{bH9p-ZkHwbhx_ zZmeV8WZX!^pI8X?!pwL~rA9%zs)hS0$8X7Fp+CmZ(N|#D#-!e6hJK(uJI*rQno2qj z;h@?3>*;+HH8I8Fqg}u;R$lpe&#rVMw{_?hFIUl!y4=ZBpfbOG>*NtWU49oC)GKqHy zQ}}^6f`{>{d_i_c6OD!ojgR&H*JG6R#qL|ae1xD*A#G3mp>4 zIHGc8Ros3vf{_ZKiww@;vQbM5h{AnR-Cbq!pW(B*$0L+G0=9>~u7D6R$ciX=D$J9x zh6iM-08uU}t`OFz+bTBs-vSfO*$Gb9)LFJgU>f2ZID%H<&S^f&j>drl+D{|Uavh}l z>a~j>2prC+$|P*u^pFjdFBKbj*Q6vJY@P3nuh)_l1M4wZ)XIE&$y!Zwzc3;`fez6~ zjny4c>N`dlBC~Ed)qVgC-oI_G|eE$B)z;6e^ZlT*#_7Nn0rZ zDbs|MO%P5sbZ24)=8%sx0b5=sTeJ%8HrRv=`%k25)eewFE)(v{5`h)bHxtm`(6i+A z4lL?2d&Uo#_e2?nih`jg`Z*dlkZ1MF2oQui zJHN{u7rBdcs7K@y#WAG_7YmX8!(K|PMnEbV=bI96XmClGm=#!B#>Me>Q$(vYIENp0 zVG!GyqeBe!y|w5 zD!~@1KlOP9%G&Vs6SW7Hwjp&0R=_P_SQa>G!z0&HLA9nou8YvoTU_STQRF~Ed~#wY zbZ*spdv>a15$bQb=VQkP;~W$7l9TD2Lsc4%yMN<)>9NbcNNPL+Hp6^2MeRcbEWF6( z0eMdTPv_V07pQ$zha_v2 zW-{9%1hNSndkf@4wkVwSNZ_>xL0y{m7m3%>0P3@*^w|!;bk~ljjigpgb*aup7SLD% z9(3{DPc&sg&w%>Yd5pxQw6^M*St-s$<+AjOhZ})6G06f_MM={j}@DY-@z6Qm13p&-Hd4SBSzlN>hVbJ>l3at{tu38~h zdaS+!E&RNB0tIxfDr4{$+8`!iqxcR;Ml+9;XT;eeJ(6P1xx6M2{nryduaT` z(DM2?s&18?A`v}0-KtaY5NZysk4WAr1+}wdPE1kjM#_#R+tE<{O}Bwa!^Reau=aGB zW;X*|g8@}x{Y%DEGY&cPOn)s&Z(K$1+L)J9FYEs%_<^wj8j9-vtssk!@AtXc=Lydp zgK{Dw!14q=gSlI=GwR&+L7knhJRQ=Qh8~x*d_CM^GkyR2xY6v(dAY6|m+Hobm&)%A9V0`@=jisoq z>u4-Ay7P-d-&}vGZxL_N+i`kqE1Z@hJeQEYR5>vgp8;mkQshE=a&vqm0WoFzigec8rSOEt2)h@&L2Hx zpfQ)%o)%Wdio$0w@NUEAb zIR;n&3PDa(TD-Kst<9ktrRinlN7Ikg|1EGc+kBmm$)G}9nd(i!d7SC@7;WFX;e=c{ z3f9?7q50Y$0a$1KzGr+&FuCaCaOa#@94*O2ghm@uX41aSO}_}KbjeVe8G!$TSREAy zpzep+!~5Z)LsFXeXHDpPP#zjg-Gb>|ihyi;`65Q2T-3yE9R%A{^f`b(li2)&g6p2L zr^AK;N^NNIt3SctMerW~$>y@iT_MB)#))lx&=%I4xKqh@fI-^Qp}T2+8Kzgh;#)6w zY)vLtY~26`&;BJt&Fq$UB}&cQoil$i6}ey#5^0Dy#W6EXcbLBUL_=d%U^nxm{0evp zB_oJiSjQU8&siHO1!?#EPm#WAXA%Smv7WJzxc@40Fjnx^)qLgO5)(%ib}T!aNjm!* z`J-yA2$>qJH9)EonFs;i3!h}9Af*b3Ee8g~76^B+;oa#rMX#_3yViU2MUcN?59g#gjDvDWnMv9ui*#Ye3+0XRKV|6QVR-1*NRK%lZf=>)Z`ZDB~OIP9$Ho7F@oPz zg}CP6NWh2?Zlz8mX#@4x4(4~NB={`z5bE_WCa7{=qN9{UHSFvjMn?(&nO4;JwgISv zwero>5{-EGb0|{OWlIraZgVJLW#oGp`gWa@SrlMIZX2k@j(4B`_fF2w6~{dzqM2IT z|DO`a5)@?r`{{(Twv5Vh*KhhNfC=OBpSDFTf#Y7;4@L%ZhrT~YMVy3Z)Z*g@e1-Ci z4bR88?H0HnWj39&?C*9SMDC-7r<(f^Qgan*A(Xt3y*`Oj6=p?V+_?7jY)(p z-Ww#71cPt>Js^sG^ratjGEzQ_?3^BxOLbGaW4U$3KzwDhFL!3qyK;R<#KP~X1yxiL z2kCT(&daouDR_GrR#=lnJPkoLJvf_mw?=9K{j)z#KK#ACyBgs-4ORwbS7R;S64<8x z7JaC2?&ZYpL@n!sc2{U9K7%6&s+~OIj3AzKl*z)^r%s`J4W!B5m-ZcMV1>eW+$=ot zh%{^!>`k@duyIYtjSj-=8RWxQuhNS!~K?)4*3vRQJ9*aV_Tex|Up} z&)rOk(#nyz)=4&NL3TJ`)pj~ZF75T@2*4NBFXjD46(%AvUGlBMF@d1ytRLELmf(ru zV1xiHPKpdzv!xl1=lFh=Jrp?J76{Sr4X-A#{ z9F33^%|69qyV4H}555(<6CIw_IA2V@dzT|&7nOKS()qj|3^n9qUNT1=^3xcEfM9h=%YV=3_80BP&ZN4UI@>Wr=Z&E>;WyFrIMa z&T+5s`q~0rR{S4lYoDrL{`U>>r-*_wkPgcSk`v*6KR~7$HcZ^{4+R}}DI5W#p1+04WW*vTG&)TTU=##(js@f9F9K>LCYO_n~X zvO}ARtVR*qd}u}q*PmFET)ES4kC@zD!(m8#+(%-_2Znmtxk&)&7F-kbz^s&Szp3Gm zqMj0RiN-`7x)2O+j2bwI9r`f#Fuc)kb9hK|HEC%BhEqVbbvr?l1|jgbHQ_fJr~Jvo zm1MT-Bt(?y47ZV^4BFuTuj->LBaw5IX9B8vl+@*NbtJ@$gC~L_iBm~#;bNa5z21p} z;6?A6MI~1S)Phi_jNbC!=hiT8atJH0oVv{JbBF# z7@;NTpGffO>h~+kW5KKR(;!Zp#WExRx#Kkwoe_dZ*t(#g+^BOf_~apfj^1z5wl$|+ zG)qB#I2TvlhBR9KQn&^qG_dqY*bC>;A$I3e+Tq@>s+(de)X8{X3nsy{ad+nJ!D)$^ z`1T7U8J_Ma4|oG`EfHg)I|(dO6!`7zsckYta#BT`d?krH)lNg&{~Vp8_n8tXHsW^n z_d<+Q{xGmlYLP++k`#b}H`3n^x<#wuvlSp;voR&1Flnnz*qvkCEgH3wvQAs?=%}Tb zlX(=q>yfsio7E8#Ngopjc?WzWZ1^?zqOjJbdfgn@yb;j+o#&7({Z7LjCN&CC3Ewfd*r z)SV8$vUSiyOl)uJu+kX&oBzC7%0c4Mv7dn3kdpWt^g^ei-k^p;ajujo4EH>W^X%&g z$J98|-Z_6gc?NRw!?Amb5bBPqJUHbqZcfHe24178A<#_<5*+b%_Ttow&6FPW@Qvh2Z|Cx&0#a12X-H3cZ+D?w0a<=$+z|P(u4jUH z7cZrrsI)M)o#Owua9<4_2iFUG_(H(_R2z;5tXSuO(F-5AZa|Bs^Uw|50Uebf5<-mY!m-&;K zJc6~(8)cBLcK%{IRqCB8As=XU03zc}gZ8oh2vhS}9BB`PBS;*w;r_=jpBiBj`B4n< zy0330a2iBR zbqfO=qyxQV+dQ>dyEUe7;ubxwvY4x{g`hn{B(NVFbUQIoT{M)4M6tJoTG{$tmHBhc zX(ohTDY+aRMA2cJ3Dn@+^DEW)2-F-jflE&NxAWg~c&6aD2m0mHhLYfq>8W7e7Lj%f zXUESYtX$tTnia4SiuoTa+b%%(a91kSb-sWqG7uH?~*6hw{g#l}vtbQSy6 zx4|AybNlJbpfv=0K4c=Ang{VUUw{#vU+LIKuAmUZB1QIL6iZL6>vBE-keQ)@pC1ATyF? zzJaa<+E!%q?im}B<3Hy)yW8P(0EbOhnm}tbJA-Ma-D!Sr_}-TKg#mxxv)7&9bf@_nV@|dTL$a2h# zsq`BFmoO!Pr#W8lTZ~M&V#5Szz#})+Pao93w21%yQhIR>^V#bl7QUDXqE{YFdaC3_ z|BU7V z{+ididifsR8m=QlK6j>9gLP@a-#-a-J#rFa1XPa+Qa=vBSovA{?-}Rew>IOju6)l; z8yd^{X%&qf*dyMpB8+!_HcULc9v@m^w|~>6`=(0OBgT;ZjK&3rlPL?vH3j_x&LAnFAButIE%`RlH2F?7*-l-mmg+s097T6Cdumap-;8%s+b|_6%4foTOr8@;>@)It z@s|=@^(?fBCVr$7s*knaHo_8l*6+Y+GE2B7%a>MD+o4=0LVsHyh=0Vg`-oZH3jn(I zI1=~9V4l6#Qz0`%_z*U)vV8dXy>kakj&SZSNNSpO?s~iJP`hi_a zOL>dlbL5PWE2=m(o$waB$eBTF%dJ7(Ec!+Clq|`2S3X|jUg?>>$d34m&s_S#j2B9R z=~3*>!bY+9rv!3*&aaBudw3m{Js_R>)y1;}4N^Jl?5g;HqdAy%lg3>%h%6H#`1MO+m^xYpZ45&ZF>3XrXz$3}kb{RC&?#^lK1VKR(xyZ}&`{;{@koPQWY~aj#YHYZs?tLVFuME#iruuS zvql|KPFkENJ3bB>fjYKVfeFj$+8S7P&um>u!n!EJCU~Kz!<>LL1YPUL%?O1k&i>|N zm+B0>HWtp7kl5r`94HJtVDvKxnpPXcUb0E~brcfq5SvYZ05Iyag0 zuRB1Ik}kO)T_@Wyj2YN)RC_kGG}1PWI{j<;Pks+l{$}cI9}p!fgr@jAb`FThXrL!RO>es^|5@uDr{t`Tl-8#*^CptAeXm$P>g%06 zW%AY46P#6!33_=A@m$Y5vw3@AebZh02|fBjF0jh5G7GIVbaHmLgM*pyBh@0u8;C6} z@*KX-wGy!)%I8V1(})@m{Mv9OId#faT#eEQe+jv8)NBe)nTw!q zw^7)8{^)9yUax2MC#IYfJKY$=NZ9TtkbK45jj70_>edB?Q>S>IHFhy%S$qR9hj*Qg zidv0~s(?H+VxL#((7UBxQYeP#*Jd_s)N+yWZqt|OCoC4I#)z>sDq(%VHwvG;EOTXR zM{zVXF3v)tpTGdT6Iqwi1-9AC2P0f@QwHOKS{Dvq6^C{PXAb6CFN@u7EnYvNF_W{_ zv`Nv}<{9gYchu=ic?GSb>5Q3!`^ua8tVmB;ZUzW1J7Vb6O3X z>yy$*vi`*(GOpQ7T_R%dKK?BAk?lmLN^yU~txk3BFaBn;C^y@6JUcTfE;raC6eZ26&cS(M?pO^FO3WcF4(bmzwztsH!>GU0bVEQ_eb${~;$_N7`9}|tp z@=MX_7b`H;qhtR-r*EIF(cE`Ql>E{1Rg10^ERvJoIg>$(fLa4zO3Tus$aRFa4_BJcy0c`6cl%m(g2!Uhbh`jSBtWhS^7`BP= zyFN=2*MTso6J}Du5kielN@(hIWTnR(^B+kTII*7Ui06dDKH#n$*tyM)0{ zX@Ep8#nm-AYcf9j%lBm_#(M>(2ggo&>v7N^AqJaP=LMyx)y|5_%UDE|N{Pf_^~_3u8h zF_-YF>%hMDR~1e>fN4H9JZvd`Ao35xr?ulPy+M#S5ubmWJN%YBu6z%sI?9m?ud6lW zyNbPoYW*|maRJhLScEiY6aPSZmI4PnVy(C!S--gz3eY_i} z))I0z_+mJS2=`MDW5cU!G!Q21Ol z#PzGZw}<{45SX=ckfS(pH8;UR!vR_9D<->!+#2rRyp_7R5NGU^6?# zU(BwXojqwwzRJ(%HK^{2jn45ojHREY9kn`w;UI7u<({8`|AFoH#?QgW1n2Pmry$?L z0KDS|2bv==&045&)_CkOq^UG9+xGANY5@c?HtW3GZm>{TG2H7$-}w5d8Zcg6ghQ(GzB6aH%45436*;d8*4s0si!hxJ&u?GLiu{5d2bKNOrUB+hpnfexJs3&I9J!f9s z&-^c>G{7rP@to?rMYd2dH?TFXq?F|tsq1oiNIvH8 z<+NnswUC!`Fr8pdNx`5Ez4n{g#a1J~JGc%$a-M^zMQHk|o`btliIXDe*3w&i$_nz5*7#*9*| zSwtk(!n9P{N0htREBy5HZbiFyq3rzl@pwo7wWQloLMB`o3nubz7OKq_`blCDv9HTc z;BL|W%psV{VPez7p8a!9$%qCe0>*Kp8q$b!SB}IY-j)=QV-~*Fw5DJqc=3mWGLZ@Z zKT_EkUi%LBT<{GGp@Z-qdKIpWBn5%!lOYhk19Gf-KA4=w@d7ro9XCwo?45jR7Y_;z zPf}D%054f@PW6azGXr|TZ6&0}3N5D0!U6Hid)eg!7WL4Sk~TABsP!%y9x4#9N7Q7n z*-2*mghh=O`w?p=f2lCvB#WL@!m-oZ?yNTc#BYw=^fUa_W+nYmO`xHsh;;m@sHtj?w#5iOuNm4)RTLQZm+1Rk2?Ilk$Tn9^iddebxV`8l?yp88Y&6KjQc3DKQZ3mmftcP7Mk%vHB@#aEAlR1E*M{*4`( zpPi)=jaNPe9Q2Z>xU1gKVZruR4&r+5wRPuCxgGY+*V$Qx5$~jZttcvuhOvHjQxc&} zY3b^uB%^rt0F^snu!5DOAFBuX&$PXcUJ632)`ov{lyw8?`JJjdT97ufOvAu}%mBSA zt_^Z8Z>`2_+1?S5>>(xbz?2Ulofs?;pMo>D3E!Q_Sx3%y!^3QB=_AW?l9fHgn6pmI z8wIJu&|aftaQ_%_=2(MLpXw>6O>YSra2{)jw2FvVXJFkUOp3yKf+KX9&!VxtX%CK1 z49E(j2DyJieWksG{GV7Os|P2P16w-mFjjX-sHVTKdncRVd1TEy)u>yi&zA}x`k7`F zaj8rud7;)b=HEZRzlVNN`fvGTO!|;7NvjHA67{~tr%vzC@Bl01#cW*zr zr#&z`-bze$0gZz?i*V$H!fgFIQ|fdjHTs}GMKcrwuXEm<_kODFS_FH8I#Mob<~&$# zUe1Xfk-Q779d(af@`s>pOr6?%_aKAeuZWfRQVUcCe#LA-tg~2*a~g0&oo6bN94dPx zLWH2K(Oz`P7)f@a|yCf4D7?z9DQ>MC*~CexNj-L*iP95L z^Vz-RRG{ntz3#eHeyN(+Q#<=r;?_3Ry@TR7^@fwS4{?Ij4Vwiuc500antutj1zdBD zhfO$h33_KDZzseSE8hQ*R5Z_e?(ieeHcttKTW=RILA74i}Z~%nc>=^9B)g>8;e{|QUX#nPy+;+~=!PSC z8@XQ`D`*!z8kxC!Ef;RI%C7DGp(PCT__r;A~- zSvfy;Ko2k19E1+Bkbb!;o zHH&f6C1Q@wpJCuE1b>B7d_3i8LUgG!W3l!5D`Tj8E5dCGz-5#MA=~=V%@qathsLH<|-4llJ&eQ%ae33e?mj9d5E! z$w3ovA@~aFd3=wa$D!>TSdgXWnnE`g;G2t*-(wiOI3;PfRwG>N(dT<_2XEx2U$ z{7q^PkEe*04QgVGh$EiMLJ7yy*UC--Ugcv+q3=2{!ABBafB>Eh08&6wR2zF{(|W*z z`CG*^NUOrIliTd^kJjFu0ZWr8Tj4f6vyw5q$E{T4i}zqf=`LzX1g>UZ4tUk4pU?Bo znOHR!{%kZei58l$>`Jdc76k|EyhpC1v$u33}Ked6&A=$V~YDMo(nQuQ?k^GM>^u&{zlEv zioClN>~D^3{NB8=QWVd>iGHD^oU2jW4Ex64$s7s6=G#uHXCIiR8xZYem8s29} zz-QZ5*F$WjrLIrAnoG`AVie)*ue*69_|g5RePfqu)()H*>pFT{X!n42lDJdkw_A9S zliHyr4i}j}jKP$L-Uhq?>*biDPyqETF8m)CO=F{Yz@D~_BGEbER;`Z!T{F;9!QD_~ z(7i!}!To~P4jI#eKr@!^sKXyX3Bh0igCaFvwnRKpaXE)iLI54n(79Jk~TM$ zwaf@qXRg2>E37akD|d=MLbSkUE*?R&`I41VoMy+$A}k%nq!z;56l~~1)p=J{el?Z?c zv$O%u1GuJGpEtldnMdDH%J=SZU6WX}zSJ2ZtpZdl)Wjghgm5gGAz1q#Rdi)exgKk7_$GmD*|J;VF> z*xz!i7)#HUpa>(Shs)eQZ|YuFt>?rwgiH3bHJZs^XqUAcy9n)9VK*}0w~o4J!$$@DOtx^qii+xZSy z)Pe_o0P(#)qj=^!aajZoY_3_oL$Zr4bJvW$t>rf2`swcCsfUA@zta~!N6GHEfwtyOu#Cn=V|t~;J?PUjjw4G?K^a2) z(3XgG5pfEQ(+5w(8L6t({7%B(f1jDJc?Xy^GKyB%l;iMaErnyum zlvf`kJ3X%_M`he&IMIzmlkF%r?+B!;VQM12Fc|O|AccQK z{5+#Gw|oa06SJ+B_O)uYLadC7&l(bfHIfqm-K<|*D2s0mkSWc^p`p`q3}9;uIl68| zSQ?Xq009zuMLMsuglTwp6hWFC3VO7+aPI&lqE3Tqv)HcXivL!zLx8GSZciet%@Gr+;XXP2gHn)!-IvJt=JbFWt{EKo zpqK)Im2pUykJ-)8WBRlKHsj{V*$r>@fy~#~fFgR%!=s|s`MpHmSukJ&=luO18o>Zu z2Tn~y`mvsqv%Q9Vew`~^rI7C7#uXTsskrZ{Xb;@DRJ=c0XsrXs(w}B8uBX8UN`4uW zQS!*|LA&Fxr;lFbpC;F{6`=pTWK?9ORZpUFZH1aGr4<*U=eg-}1}8J{MeD zWTGOS?bR*4d(XLBp(0*^u~M#AfD2ZBOua?E9E6^Fo7G2ZC8Kf|xz;$C78A?jbU@GM z=I_)M946GeTZUbwFm)$u@}AHU)5ScPAB4y(IlMRT)i|W}45p%UcfSYsZ=;Uk$?oqZ z3o9InA1ED;=Wp9vp>YtG9{*eOxccSADJ^B3XN`_E>|}fG54M`hSjvbS4nv=Q1{_rH z2u|52iU;kZ5dM1FJY0Q%Alf!@`YS3Z$`HJd&vKdlv>|OCl0ce6pm86bN3&Y@E&8d7 z^C~g+V;A2aTNe7bvuw{OgMW>E~J z7CbB}{2Mp4BO=(tqrIq^?Aahj#5o44ckHLOUG3+`<_?tA1kReS^^6OkN&~caFMTpM zUzPv{)zGU3@0X2hxVy>GLDJWFswnK+N#3M}Z8&C*p-Hs7}h_~L)fc$M5s#7q4@1{!T2VTX+yq%6-EDE=@prE zm5Fx>>4zEqxi;-yg_9L@?ZpJB3xXHm!0_sXnsMaKm4+t*-|`GzT`mqsq2kpJ{+J5s zaW;ale{Xil(5(HQsM27lr^U?^ZSee&<#6|@s z9#ZQW+pko}^qh8Y@xBvnjJ87rlw3ouB8ihhtXmClmoA+%Jurmw@y(Y8_1p$G$4D@P zcihl}-NgU34n}8I!@sGeQA`b6_29jaG%xyaB1(s=^?%-?2~QyQ!~N2o7-Tv<;5zrc zo|^obI^2frV+&n`m8h;TY~O&vxhdA&;l+J;x}7FM+e{A&pRq;6W?YJ?XWSb_Qt(#?L#fid$$yfc8xhav?_!4Lz* zQ>8W2=^WXImmdd~mhZL=gi1$LV{0rsjKcN*a3Ua6^#&GLgI3IP3@IF%zbYrTUFoi^ z3i(h~_{kha%#jjR;{~R@bPbMW>?Lv#ri~7t_&qn25Wt1U6wxaF$P6{C*LWhFazMVd zB`KsdA>poXaZRguw@a|Wvalr+v#LC^fR2$WLL4GGt}GK`0x>|Qa{)jVh(H!xCyPgI z?Bd`=2HmyxTquz?xULmXNkEW7KhvMAjqZDKqlqW(msWd+pV!L4Mcd$)XS8F{@C#aq z(?%xFJ^--*1`MfSQ-JF8Y^_DqBuo040G+&ugxe88iXVU9VsXQabm;2kC1-SMtbyWk z?g#?-!ud5QMtIcmvsXd_!~@^vv7#!?FSp}5G!g7(QcV#)9z92Z@iZ_7pKSNWv!;Da zXkvzwBZY@%MH~=h;f~KTZ4J%p?dvEpRE8aFAi}VeV_iYj1pr&5v)U045l(+8Un(%xJ0e?NX#%riaqx@Q)Tq^r-&6>15E;Ixh^vIl$S$pg%OpW_zvmwacDoO zwLwIxdRMJ96^>g?0U-;*Iu)ZNmI0PJbU=5@uaqZ#L`YrbDNse-l+EcPE2aJz3f4GA ziW``vg~YjdR?SG%`0b05?jwA+2nel9+vH3jTBQb<-(URJ*1t!^(XiLCY?w5y03W+H zz~|+mM|lE7h0j$V2W1mdqtTI$>P!i4>@ay4G+xX7)2*)|+}7tc9q7)D!+~fXlcY~w zn@-=w)MV!Ul2Gl4g~Mz+*wqOxf1(YMK#V|OfimMGx5HSl?R$}Rxw@lz zFch1(e-LP&*toq;7%{gMG_l{{0Em%eGeQ~GRAoyk$)KhhuSj@4xd30#wvvQXq=iUp z``|l1rfE!aMn5(;aaywk=0r#_(N1Z>$3Xv(9e#;!Ax(mQTYsqXpb0UpT+!}AKlEj@ck=LQ9i+Nwe9`VytiCUZO zeJmrv58-LOvxr8s;pPtV@JW1ptg#ozF*B-uHjIG#ADb>7ey(iZ$<>h5h$X$uutx6F zfw%8gvYz416XnX2d|mAM12ogpkT;x<&=F1iCR>hy zKZ8hrQ2m?5i(8VA7X{i7tVkBftvQwF0Bqd0RO1OP=}bNABo^BOmIdtz$ln6FtolELUcypVYtp~ z(XC?Ut%igmY@_MwiZ9W5u=(bVu#!JmyBeHfS(ix#L-dhwYzbs=@i5RqV$= zH?!6!9gkG30H)269lVI}oLl+>#_!!T$}$xeP*#Qzq?uQ>i56XF(r~PRvtiC6w|w zKaeZ(FYnO}%D*hbs*8cviE7Wki(>Xb_h?)^3MHeVy7T|eUw=|QH0TESLWrDOB>7x~KjW$J=%ot}p@{<>gEtREIEsyilbVR+ z0RitFBj>-N)dB>B@4;BpF(LaOMqxU!HXP6Q2RcE9S1yR(NDTuH!*jW|WqV>zZz$kT zP5csG9#8=8MuETK@H8~sVs(F8Ui~w`pG5(Abr4RH~ zPQl6Llgju-()d9X7v*jQhvmFms=qgiZlq+(`5=<9oI)J)q>0)!)iXdSQQK~C{aWi^|1JTHzi2A$2BB2q-=mY55AY{o*h33FBF;+RT?v#gx?&47CJ`;WX|RmU zO)&+M>v_OP6B4==1vJgf9*x7Jok1yJjoPp!KOtdIo@z9h^?IAmrpgGM0BH*_&032q`U!8C-z&mvcbD zu8}$Zn~nZi8rQXI)o&ZPm**8`XLhbVamjL5k{efy0YJv+E;K&5x!V^l_kR+F2y4|E zwaS^R1xMDFabuYq8@sa{saFN|p-Y3f#->XTg>*lpa zL6^E&fqW-p`3(Qjj;0RyX&)PPktuz_Cpxw2~D>H5P0>dr|@5IjJ*oqP>xo3p$ z@4_vrO^nRTDOc&O2`uN>jlr+Ac?BS$|Gz`gxUrzfChz`ysug(jSfAeq?k=L#Kz@UV=R`` znrQtP@~%p}+-{9;7U{LjB{=bUM)KKgtkr0J7~h(4> z*pE@82!)DquiZc!$&T&sz-aPpM_A!p%KPsEcMu$rapmsY1nwcCIAv~x!kcl}XLL<0 z&y529e%i4hemYv4&uNaFpnkQi!&V-Ld>tom@h^(GIM zFp`20%PX|2PHThmkP*M&q&!%LM5ItE#L|2e)cO@&qJZwsW5K5h0aFN($Gogrv6$R%jHumGzoW1lNAEU=o!G9AgCsc@J1AE3dJUFH0`R`06NMm%?VF2 zksp)q)9#+T9RA5&1Z`DR4+E3*u7S{tpa8o8#u+@bTJdI{);k0cw)H8iU;FxkQRiU- zK<%!lmJEc;JIpaSMYi@iV9XvO+IM#PAdl*&QvB3w_3&{|v`wXV09FQO z4nNvsxOnjzM3sn1JrEXa>BRzFs6VzRA4{eFFnV-!kpc5AiZHGgK&U7XaT#Jh2)o}N zf>%8j?biAh1c7arUZtRTFD=1-=M;a8v-w<1lgxIDYieQ|*Dz zbhX9Hks1F%Cao}e(~I?PVRVL@&s0vfkk8V%x@h@W=q zQ6v2YB_lhx62G6j$L#4FcMw1LA5RI&?!||i6=;C`aRVE{k$MteUH6tOcfulWm<0#^s6>CmNQ(lK=#mbs|0p1uKk)9Bi+qF?@i3#K}DOPx)hqagGab002IeikTb6`)G3mgy5~U5_mNWjp`u1 zG9HO&JCh75XilRPlXrZyfdTDfFJBNO@jTz~MQwgqHx^^S^c?@3u4^TRe=gqjNIaA1 zxD=$p81x1~0we|PGR;z&iigf=&Z~r%lpr=OK(dfcBRai#W74j$h3-mosR($QxLp#XNO>vP^>*V3g&^0ZiF zu+KJsDqpQ_QVkfZZJp&>`UH>Y^vENh{rBrhi+MNOpEzPP{euFFJrKf?l1wWR^Lmca!jk)_>n5Yt~iaraTnT zXgTfI>D*gGo9s|9js<>*w?U7u3Q?w@Mhetdp5Y60e+750%DN$FN7}xOomy*vZbhtp zJEI!8hB%{pH|do3_F-kO!d}!(LU!VgM(bU2&j_P!V8?ius=nm_XB7^T`=&RWoMeWB zoTxKvTnA?5$yl&#M)<- zYV7Zdn02xXvBZ0_{R*_1D7aCON`tDS+=u1a5%c_ zsPnSdiHh2iNv{}?A}42e+tDh2(DK--4|6T!d(?H2q^((shZWF0Ci0s?i`Sbkv_raz4Kz5eG&@>hl*QZB4Pb*Mg^liu! zp6%b11m>&H9D9q)q;Ehdv_%3i>G7!f>funloSexy5A^E9Y?_4qz~z*(}E$XKMX%Mn>q4O`h__+~9FuIQs3_uYXYHBgA9-$HQD zB^^PWis~%Mhy>nKuT`l5$+fUZ9+neIqp!U!D+wnTJg53?U0J_CJ3iaIy95BOPh<|d9uX(zY8 z&;tv-dzn$uGXqi|1ufkd-*Fgdr(~sENR6%H&e`n7z4udYU52}8SutOI9{Qi&7*- zyh=H+6)USj`weF|wwdDN&92=FLw>InBGdsq)JE9=l!2&sR)fPpslgfcjAeU~TP?XI zmPUw2ZJmf`KaCGaPZ~xePmUVDa{@DR2wU5buPc*kj6;{8-=xk#r0~$DwZ;xQy0yZt znkqGpzA0#n@CT_3^)v%Bnghd*u z&3vr$pGNF(SAFBt{*(46dHLUEk$+AK+5eg#QN>iuJn5chY*AG`*E#`Q_jOFzY>VAB zj(2(n0MG01R}AiS#V8%HiJnCF?4Y7?Rd%_DE+gQ|8Y&Jq`lrf!d%abhd&_z(?4Wsp zM^ewqYqah{iYLw9o!AS5Z+JQ~I!=_`l(la_1Vz1=8hDR4kiG)?5RK1~X1!|#@4>U= z0}yM(bR4XAfV4sStEXtJc?=0$Cm}8I1_Y}K*+stUNU$Mnl6n==6rj1V(V`>cH7ugI zR-GGT8Eahz|L~#nc@dkU==7){aJ~U`rt8WBSl1=YHJ;Cey}Ez`$FQ%Ie~adQqTTnJCL)vi1U4HpyK zijliC3R*Ds9>d$=ZTq%@8dY1L1yDUkaIdolh#^b2-#_deyoh%+vzc%_5>9)`aJQT& zOzb@i5x`W=W!H%lrN8bQ;YjbDy}Ji}iMiN;Kn_SCSl2ZEz)ZoktigT%S34tn2o>WH z0X;BWfi#;F0te&C?6v%liID;CBIokTq0J6;_zA42<%%nWGxmTM$8%Ix)*@&L$XwFGFe(6Xqt&vQ_Y8%1tBueStm%NIKbd4WCb@rNcf&4fdPh|lPGuCoHIsJQu92LnyD zE{}E}^Odj<3IVK1Xj34U?XC0e*>P<8jRWI!>}xjOAcWb;M9|m{?PdEMVwI>6jg>IE zI~uCF{ew6Q|G!i0wdV%E>@Wk0XB8ui4?#}9)e_suwQXXc6M{1Gn68n`HvelkRgcqe zP!KoYCdBIK%8KHB*L}Bu$YcmIMm;0CF6a8R>s}|e;CeLB6XN4AVm3(JMle&J8;1m= zESw#*;7}#gt$jAi9Dg>2?joF^h3L(bp*Xd~LXCJxf$NMyIr(LMgNKvyg503~y;5 z4lDM>kA?C^>1(*%00%Odu%a%)BQqu<))RZ)P~A!qLsSW(azO|$*`Z8JRd;~8lE66M zqsEn4(n?l%M})0?RZ-gMOYeQoF$B(!SJ2Y^;fvMAsk%ga2d2O>oldlMzGKb&qfATVCGmZxg$?V z1^yEL;iQWPkoBNy1pu-0zt|inhO3+`oSzBd#+NW`%BLpNtZmZR+>~LWk9#72y)FrA zUEB`uh54C)Z|u8XLIZewcM|Ks7X0CIKVGX*4wE&3PsZ7)wVD>V!cu$n-F{+xOytBX z&E7Aj0mNcN4s*66nJgl}C@dS=?UcTW;v zOdfM!-~Dt%&JrCdJq^b62}t0Yl)+_~46>1lgb74u@atkxlIM?`DVf94)4DcrtZJ#9 zd=^LvRR*fmtJa!>cp!GpixL)JG|d*%-7v$svh!7pUbd1V7AD$zj)3b>}fl-N9I zN{Kh=w~YVaOGyntN{lLMQ-spV^%CJ`dbBs3`bBS8lT}n5lP$XGF#o1cMm zir_=VU5juTtWLew!&VkB^%hG#zIC8898Z=c#%T>G%|oe}HUatbI)~AIMmOG%dGod= zR~~GYTjE%#;w)D;r2^m3me=mEpQ>897`?=_pJX;pVXqrA0N;aqf~e#ysw-QdkQoc< z@L}-%q(^6r8j$Sj|HD|wwWk<*1X`~-W?7D$S;aG_b#e@jM9;NU@(S-lCuHxbzR&D{ zEvGk|{q`|jHk(U=?5n9ujjV$|$e~dDi?cz}&3m;i_IugmyeaIGdzG?L4R=U8)48mw&`nVx+4O!g_Mv*!!Ts9H4Fk?mAlDHh>+09iUi(Jpn{R-Z~T z`-F%30n+1MSRQOk6duOnMX@GOM_uzOo)LjNY429h6nQzj0u+=S)F(wlJbp_EslNnO zY)$^2TIC@81y)ao>A}DDU!1|l8F%q?SEQJ~9C2qiQ67uM(cv}}#Zx)Iekm9t$8|RC z{Q+u{jOmPq%#d(7js2L-YwDg*jvQ9>mHVRr$EQ#p!6^c^Wf3(z$6Dt>lw_;@ioa#e zwV`=U3G+Gj(se)zq`ouKF)YNgSacEk9Vwj$EOA(aeYbYgV2Q;is+Fv#Lw75|W6Dmh z`WHI6>?bG`F3I5_Ik0J$+&PXpjHr6PV|O|$~t&xTFU5Dmp2w<8$pmC z3ZCZ6h1q19>B6IY7tsOAIyNu;w|9l%XoPI7FG?QJ#o7chO_~IM#{4N-a%GxzUro?l z-M0Zm2POLHcPa|r_{Xv_EUHNbhAR)r2pcva&~|nBzRvp3f}_he8+_c{SqN(z)vr!& zYi;8zthb$Ylr0}Gp@Yvr$e;cl`Zlw(*A-qENHd3EaQm4&L1@(=xb)`+n1AOEWTg@BA|mR%s~~ap&364|7>El@1`0r05G@i zrct+n(5e0~@BISbRch`YsOZ*t+R)r^gj`1a=$;Y}zjd3g6Q=nGX9I64Hq^B(Gvz@< zCe?0#xRBS*QZCnzQLPiKvt5=rwIcCM=dx!C*u-mFe>U-~ig$g#+%CCyd0dA$kzdz} z5P-qrjq1Y)QFQHH6}}nH)*K$N{X#Z|9)xjP_bsxh`Rv!;?|morZPliFCV$sJP_nik zL5?)U2BUz;#oPiIdQS)zRW7SU$0k*0cOQD9?py>7SVapwcOPxgkQ!{Wa}W^hd#O00 z)Y$!qB*XnCVgE%qMA$pfp;)P0hq0Ws|B)Uw4ntCxri*a1-q}FUIy#XZ-D9Q9*?QCh z*ZevrXZ91yo`L#$(DsurfExjUtdhwE+bKFMP?FV0{R^E4%gNM$t@&c6Pa&g-0%5cu zyP2`Hc|Y0|-cN$b*CIUuEF>3+8n&x4*$`^Hc?aM8pc_K5Cmo`3BXcW;50I`eGUQxi zFl7l1QvH^>GkZ)&NFY}B5wD0!HGlBX(gVT(5-AOXO!Dfk_g_1Rc$V$Y_%-NZcJO85 z#uLu8N(hL8fc>j{OJvJPsIf2K9b_SVwGzsYBHL6q8Ja2Yk_Z6rwuCUMN~ssZFnPWw z)4RWiI(YSb`6kLt|Gc{QG)~ZfYw$`|GFy$5xA&?z({c6#^#bkMU(k30mLI^-qzrTi z5R1lHcM45@Pc7ahEHw8laTKd%=?w!E6)M=US!fy{3!}V#{1;Mgi6SIhM-Dt@jj0D; z`kW=MJlA*@ZkP`^8|J`xoQB@XEpn!Od6tcSz8`aoKx`DsYaNU8-|@RiCqO1*EiY9gLQsQuGFkj%t?*k6g!msB^$tz2nAXsAcdj^YhdmIEf;%*FWsWif*) z*Vwxb7MO*Nb%ac%J!iU!M9r<@WIFuRd4TSMHfz;}j-<~KPy}mgEwtUab^9)yr#rUr z>P>O$&+L_4X@)=39{HAop!cSBVl`tV4mo!l{zdbuz=l90Hzyzq0=R6Z2|TYLox#2I zr#CWEx8DU)r3_rP+U00Kp2Av8{0W{VEqui*a-`+n3f(RuMUYX>GZY4g?Hvw>dn7{|EF3?j!b{vc5`i?T&K{v;^W!z&fgk^KwksCWeX`Sg8 z$2&wFqJOg#)2&cRp&+ambWzH^OyGJCBWT+fdG_i+)MH_DPW%4WvP6G{08q^z!D8qk z2-3jZ&I=meL5AKQ`U{kzz(ebKi(%rogTcr2ui@~@SR^tw(W8zU)58`J;>w(32bNl? zMmH9=5auWdvMZ=jM23)SLU?YIQlo40&KVmUCL?YrjhidA-zblx8%4i>)819LGA8)( z^mgj$?O$*oE?Kn&a`}jaZ~xuh2}Wao!C;kOe6OT6v)hUQlityv+egzU4_wP4`G`mV zmUgGS9H59UfBWWNdJIc3a{=G9zF#GDYL4K zsjj(y-W4K=#k?O_uyeFCvUdPZSn~2`GcqnQF7+W@O2<#5d3DsS?r{pD5+1w8n>4YT z*W|G{NdwO`jC*bWt0xdC&6cS7)TnP8J_O@^nn^|;POfK^sVo1-BDoJW+YfdQSy3mI ziMF$Z1&m~HYplIM(C?bg7%wD}v^+j12Nj9H=mMRTxyYHd4=?hp6)RRA?VjxmAs;yi zF@FiS0GoPbtdweyRP}r!=-e&6e&}BPUHe}x?0l)?Xn0v^LO(8{;_njpi1rp7LpL|t z(3)1s|F;XZWJy;rY695hsovSNAu7M3`3Xg%8y#<0wbj36nm8UuI9H=ZDt}}m zjK6RmRCi7F*zJ-Mr8HILR1og85hfpT@Jd9%%9Nwg%bM?Z`4Y-L_1`%j+b05we;=h+ zPhYb;nCbxzvXQHTSnL7}wMO13Fxh-vT4xzF;F*S)7lpzesIH-MbKHbrsK~0OW+g)4 z>i;JvQ^L=<1l~nTzM;u* znzxjvdKr2T$kRTGfRw5QNfCL@60{%O(|@Oiu*WVI8kYNSuf*yj7laSa4HYXGXY2FiX0o);TX{jy zr@2xs58tqe$~#Vkl6dYU5$nErAVAl;wbHz07&hLaPLS8)?R#9v$LlZ|?8D@Z7{m%X zxBJGvYk}?`JxOjTs-BPj+NNFQTCPV4NAB_+(UWy|#p)`{#(2V#=+GPA5aXV3c#Nar z(Aqa}xQh~4_(BZ!_hekKA8JU2xv(xQw-H1>+5yy}CjiaL5Ooa1!Oj|!Op>$&ddJNV zirVSJdIcDuo3dLvOTdD%2#Bn7RsMt}MQY4OMjWoj;zO%mYZH~|04s5))RZ4BqdVzX z^8In8#jeN#YBz%;Q&(c9Ib(!89%q%i3caR?hs{hQebCDgws%e`Wh^$xoy(d$hNf?- z6V_Y^T&^>gf$LO{0cTVBBL4)t#wcKuyS>3WlB*N zgnUzYy?`#lcdq8rZb@&EM%WS|BIfB=jU{6np#3ZYsfrM|iiU&{6{iHkta#!rJ~Mmp zp}B<2%crFlHLZ*+LEI7~;1A6wpDRc;M7*MK)Sr4T$&=>Hu~g9w&o5r;31Km%+qrYe zGL4db5C5J#>vS?Mu|b_Pt=F9qEE4$C?zKSYKUD4~Thf%O5Ha+)%Hu$I zX3J-esJV?O)%dH*hFlxn?9(2W;&KtZuq^I7ub>o`Cl}nIH$|QYNT!$Vl#(t;Sml!p zEV@!(kumvvBzno)geMn7!mzcHyuljV{z28Zi;~P$nw^AK!9T+wa%(l(kWo3<6;^yk zEdbx56jM#hn^P(KV^T3gM)gV6wHby{Zc%2O&@aa( z@?QtJmBLvI>c)qA)jJD0eP{x;qh+$BT;4cX(eXTUknsLYMn`^&ZFMD6yX6Yans^wW z=vmC!2tMZE83=sG(6E@kWX?k;AXYEp{%r0n|M|?|y1PtF@swn0Ld%HbV_u>X0#aLf zqL_A1Xg9=QJ z#7iz|(|7mUAbm1$=qGHmzacJnf< z;Y5+%r7YC@?~1KWE+fQZ%t{!M!6b^`fr#zt5u>r*d669=ht@azpjMz zRfGRS3bw-Cg*iBCw2a|&&d66>h*cR<=#3tYLGo~Z=oXIr+dn+t495nma#ose;Z(Zx z%5$`y5xcNQ4>i-}YXXZC>2rw3T$?QedNgwtw;^?EMGx0KxJWmm9;bKjxB|WS3Tj)m ztG1&|%P4yPB@1RHK8FQUr=&_mZfI2>e`4vMdB*h(GODYje0Cvn?GB{S!(%%YfuUMB)_*ZYP!<|Ma1fB2Am3x zN^~bF$VJ9#a_3a^%g5cziZrYaI`j6!DtqiUhowp&kC zqD9oUG~0UJ5Qv?0BVnwKen-fZ01&gaM$x?pEh8Hs3q5{cEVRixgY;upt%1*rCBn)V zRA-OIyW$@?^bR3Jo~tH0d~_zOXfTTboIuvh7Y^Nypw4YVlN{(mpOa)?A1fHjLv1FZ z0!H8bf5ieE^tqnXWm0H=oI(A6P=R@GsClXmlXA^z%D=lkoJ1F*^jvj4C*%GYj+jr2 zmpFiER;E4%+YC1bi=$%TZCkJOXQxwQ(q$^qO+^)Z^YKZTRz-6jGtC=Y-XPMTL$2mY zC5Qqiy1(rD$r=MR8V2U+bl}Wk>?Qv2K^(qKXSE4XGzx|F9t&=;z$6?}3Hy*=NBY`~ z^9MwleLxna*1IC7J0}lOwm!oyruG1<0FBjQXxuQu$elCKL?Jy9R)@;(7-rzjuWVzd z=k-IfNa)t0buT=3C6z1wlXE;i+NG(D16}|onV%b+78RscJ^=%#Un(kh& zK16+An|*GevgL!~eE--o_bW@xDVC&d=yC(C%+?v%2!DhoVHGIX5acP~pF{XxevG}- zXtvW=>P4ck*jyDwrnAWzAb_p;wdBmJRD2*F#3h=Zz;rbPxV7rlU%R%ek7bT)%GF(z zC5X4%PR>biytO7{d{Dl#8RTTS$^=^DDny~>667G~I&f32zNUn#W0g64r>%AX85WOE zlDf##ciy%YaI~?&^(mhIR^&}w)FX#&`l%N5GtuAy^=o$CMeuWP9nTOQ!CB3Es8>F#~_{gbzJ;)GYg2P*Pk%4B2&?_IR=#>8raAW!aGB~ss$|%Cx^_YL+Cvs zC!w}Cq)-sYgh$3R1Js}A0>VjrD5%R$WPCsTM#&dNcn>sQ!;=~_k5*5T zoVXYRyL_?6MtYr+W3@l3?f?}0j+TS0{v?VF1pqUr_Mp#kk~E|ndWY~)l(#+$Ng<*F z&hADFQczyAZ}4ty|3QQ+CW3;307ZjnHC@e45fTm8BG*31xnjf@-A@*(D~>4+t-iE& zV3*^p#<@xoUhyQ!2~+*hxAqPrradR?j0V!asqX`%39D3#T)1tccyFgO@#RF+4#X^? zt;-oDwHf))1uIJ=ie$-l%J58i7*k zzqTkfF3f2vtDR5v^(f+ZqscY-eIyei5x# z_?$2@E%D(vLq`!aeuRn_B5^&LHcg|mdbTxV8G&Z}BBY3FlHV;y?rZ6*>Gg9??kS>%u03f;EPH@Q=q6@aV zm@b(;Hr{Luh}`3*ctYMjU3j-EOSRsXe;Q>kzI1s>@I69gdr1XAJz3}z*@$v+T@>W{t z?$hKK;UbtFPXoy%@*KyoD5byzTmpVu^=QBz_d@-skpWYU256*hLS{rPcGBrTmHMEa zXsDD|V{JsbSyO{pkR@XX1ao&BG{mUYlTFwm0U+qeCVIIVIgl5z`-284_~~v=^+i-k zsDif}E`K;gUk;$g9Yub?{QWdh6W|GCRYHWwm-LjbhjE@zQgjz2xh6~XaFL){uRXXy z%u1m&&4&5w8WQg7E+oKEyTcuQ_0WZn&`e@H)6@&vA{)jzpA0B2l@X4|7inC?;Ay7F zP@#szqNh)!XoHw+LU7f^{7bUC^mwrWjbe%8)-E6Uw{95{K)|Y4eH$JtQ&i&zQiy51 z-s^MA^AoO+WNG04U{gEcis^ifQP^Kg@06N${`;qmu=TxLqCuE@;8LG0NKZWo;2YSF zv|sW#;kaQ!uJxP!7V1;HD#%7D5E%08!}|CDd|{TgSbf-0lHG_l?MAN4ffNOSI~?|>!hP!yD;EQVHq zst$lEJSdlre3t)&c3UrYXvV0tz$a$sh*XpTqzDe9@W zdQoCL^f*QCRmU`FLL1JyC8yp_Z?g)}+tqa>u2zqH355fo-_y&m?Np)Z3^WhxK&@$W z)gf-748W>>A#n(^?&AujH`$a#=J*Mk&e0b_SpsFvuwd7m&I3F*);AQ_jwzxt9Wzc7 zUx-ZwSZDz#ewgTrlmgm8{*JuC-r2w9a;^5Wo1qirmK{peQZ)U<0G9VA4Z!zDRi|Tt z3L!Rgz<>;zrBbJ5Y3iU|)gUD!CFuc?!^n%psKU{IvWW!Jae^J0(ymy}tKH4zJYO^} zBgI!;mCcUU8KypRoRh->0NRwg8@(NEx+S+{A)ac)eQkIW$Bp4}UjPk8WDZ^gIl|mk zFohw-#_~@I38|k`9@%L0pILhDLG=8XUgqwx?R#$0@W98fP{_<^{hwu%f=x2mYYfEY z=xtw|!VCmLl!fs(hLsBKoh!7IAG{(}x6f7fx=*D5eUY=Y6(FdnOqe0D-UqrbX~h84;=FWv z?kfzOAh&Jhlhe>$hvxD0IzqDsXe*EUfq9`XvoMcF=Y;*d1rvJKexpp;F>2f)bKg4_ z1$;}~_K5{4gQ&+<^Pd3Af~3bVH>)(%c!(!J+Z1GO(BA~xKZE`%jAHwx(Uc-FaPE$s zbpBL&>6uUo6w{!z^>CaOwQY(KmLClvMW(9EtCMBO7lNIn&J*dHv+V`w-q8PPX3=U^FsA3O% zF+8Kz)_Em&j@5wen)!IN41u?eU@kX3D6czl6)Y7SjO{67mEx8dbXRo2c8F1AmUVqp+mtwK)~@;YsRgtJCgy_^Xib_#P12pM1gXjZ+&DL~@aTbs zuzfF{0{{sFg`0|7p*S^pBSJv%szgP1BN0u8lB-T5vCrrQ@%9D!yUP`!hAha!qPaf2 z{X&5}YU>s@2O^`iG|QMvLhFPLrhKP)XLERax+R-njNz({Bq$Bu|K3VqCYX~ z&}peTvVgx0Rq2C<9G2q-iBgGz5sqTOd_*Lj$?CG4jXtLX1;DG!>WoDyytE$|>MH!C z2Nhp7op7zLK-{);nljkVEKqVW;Kj%GmeBWUrq-U>c@>PR(HbtX*)+*IuZ2X#4f?ML z=+p(kkF?bh=GUX?Dn#bc1(ZyV2;;2NsVkc1k+7sxmZD^+hAh&S`U7q5vHYnL;>4ey zo*`_L5;9MAja z*6y!~Il6eJ++nCxnBujVj|*>#p;--FvTcXJNyxX^_lbNdut(DtT>RXyJE`=?_gB%z zuv%UV$CX2>V`mJF-Ur6-iYMQAv|Ng@xZDraJ_x0t{}47LZ3S*0FNYbxY2Hj*k%s30 z96@M?rvsJ>@WF$;Vf5Jr57uWf(y8tS8=HauGzY};n{Jr)C>a^6WxkklDK>(KM}*0h z#B|IhSSoet5!Nqm&jZj%Dk6D3QEWd#cLI??7=NjauMucG1pKM)wuxI!5G0&S=Zuu_{MCVSfc3606hI}_!c9p-50muqG?hFBbMA`N; za-g&Gd%3}%Gqj#}v?1RdOGgwM(4!6S*R0S&&?sT4pjC9~cm<~J-oJ+b$@UCLI5*MZ z2FFxZi*QEwI|57;wXiS`-~7BRtV( z2fgP}@%@7a%QA6zRZfx2%SHm3LItzH#i$Wt?HOx0s>XLs#5PD2>KHBKt(26mfv*>K zx^UN)dwZZD1Z4g&6dryj-STgju?`W{-b zt1|=r&587*OvoqdR|5+=JlCufPc0^Kvb-O$GgqDg_yLH{Tap=&HhL-&ydTTLEOi%B z+n!;%jD$>M%}}?F7k@N{N?}JwHHP?a%683PY5=8qqIpuK(Zu~81hGiZs$+(e+8NL$ zE>^xm!7GvpL#ya*Bvj9ze2t|{QDaZq&!A%uX*+L!Sfnd%bEUZ2=zrG~amuah2Z_<5 z*EJa9;&K-^7>yb;f;)BWwtQ(;Wn|suTxex5W&SQ~d~3rViSoxO2^ChY8` z@Pxddu&B*um{j8}T)T;5M+&LycU33mF_R=dyg>q9&<0VFSVp70%X?x)nn(&JwqALQ zVbsUl5%urzg*8g=KTAG#G`6a;;U#%dRE_{yBsu(n2skqVm9XWEOQ0u&(EdATJ6NvL zH`bLcRbT8vf(Yvev>4jbwrF~4Zp6=5_z!}`tEBl6ziY0Z2%J?KTTbAZ_~YCYbm0b} zx2eLzE9zXVfV}i`PR0WX%u=K;63m(tpR=4QRW(d{#gVcQ#Ng?*BOB2?t6i`mjXl(A zncO}z&mC|GzHVJc4`G!Z!i(A!6y&2?0G9G2f;|#BncaGOa zBB$ESis;856asSN|AuJSIdVaMPg}2Q9y{ijXFsWVTL)$W2`*fx@#4`Ra6_A`1dns@ zxlGjG{Y{9#MHWil?Q~ z7A)It#t+j$yX#27qpL;OT^avuIbH&^3#fTxB~#hOjzQitXjt~fe3;3;rQKVQ_?H=c z!(NUVJqB`RFAqFMM~p$qo!dcwF*b*nY>c?6B1U45Hyr4HVE}>9nq=Ocbhj!lLo7?s z5+CEe1GM&`%Iootlnd__m-anZ6*%z6So)S+9C7|9)F+QXJ8PIHNAO`M^kao-;}9}B5yo4XRId58xw4f& zd^3d(aAELlg_PZ^#7!u8S+-0xTH+HrJO4ECO$ z^GQ&iu!n3`4;|I$=FR4sbX+*2k;X(ThGb$b9Tv>zl{Cxv@(S0u9+|2Ojr;JuY+3X3 zF;w5dox)dsR)?CSmu7b;d=gX2<6Ga-hkZ{d(N?Id*S2KwulZef*qo+1)v_M|T_LGM z#sY&Js?;;{%08ofJQ~z%4Lj|90I|hzXs5#ldsc8LiHV7H-#Plv1Ble&&`BmaX4i1F z0eshwr_!xD$#?~_T+Iq*ked_#*>bGx-H%`xSR!Rb0-u#jD7|aVw)OjI+pVp=uKfcg z10U1MeV#6OgKOKI2u-AAqGGFA6NW+J=^2>LFIn)Z|Hmdhbn>C4u=N)tLt$#qb|55U z&~hEsh`x@d7;I>SO`oj~8nrR3;VH$M?3QyQ9sq(@cZPsH!B!?_P;BI*dXQAh zHd6JO3@Ll+0|YH#28D_l+#cE<`=7oWgMWm5`SofFz&?acnLEAp3T|^jw?DQW@rDTM zS)^+9xbI{--gY%J*G49|Y5_7lzqje6ayl+bQjm08cc@Ys!LWnvvxUUR&@S=Uih3p` z)mRN)wzd`b$SpNgHG-wWiyIDZvv$Fv5tov<*sT&V#B1=3N4qjUMIDW5v@otOB zR<;eb|1pKU{28EtBL9!p9lf*}=yqGiM5<0u($b{ORR_utFGD&2VFuu!VA5#PGFhy3 zn`Pj&MQ`XQvD}Jg3z_oA6uhRnTzf`i3|o3BuLT522|w0{3R5e%RqC?!O}G>#UA;vm*4wNN-r+~H-;^^2jrIoj088ep9=tcvs}s+s+s&7@+JV{ z-iAe+br#i}QMmVD;I|e}-+$RZd5osH{i?w#u@b-FB4l2dLOOay9(VhcSd3$yq95zy z4`?e#oK}>u47zADd7U*)t~Xf&VQB~O-iVv~IJyPzBl&pn=fGJRGA|}48t5}11+QY{ zGH9@DYWG__X0%Q&!^BCc9YN=mhbJv6q!mcbx}#xl!8UvcEjpjHAY~c%7dSK=3h?(? zLL99z9leY@e=`dtZeZ}+YuImwIqumf6u{?*wbd}^uP0KJ{Ggh#N(M?+9w33*$v)rx zY2aF{GLle*UrM$hB?tvoOF>pIEtbgkkSWnSj>t`29b*=vc7wMC=&9~5gz0jX+^+r6 z!KwO2+7ew>#uMCzEZcTePImx~brmymvvCfxY)^1lc;Fy;U+D1kqara|dX{0g*I#nrAHrB3QO3#MbSC&n#-4mb5!oV~ zt&&_hT0PU_D_3BC*XZJfVH?aAS?Ev|rPtg1)lPHWUsk9a>XEG{HH()jnL+*_)c<#-w$q7!3^uXY0KE7d- zRC|}YT&aYsdUUshXywz3dV4b1J()+`DYo$c1Bh3k-Rf>Nv%es-4Pe3gMxKm^U7Ap# zKe;_+E3$68>2{i~T48(85)#qp5YR4ZQ@q-U>A0f6 zlU=t(=u^a_F11Lamo=){be~rA4x)*}QfvQ5Pp#Xnx!U1WDPX<~hK97vP7>*<#;(ja zxw=r`v^2f~kL#psHSb?!U;qLZI0|pqmlaL}{QXp*i7O4y1BoDq$|N2)N+{FGlqJKh zAjM!`V!PgK3{rSB0pZj(Z;PXs8qt^8q&i_+k*(gBK#zTiLFF89p;om@-5eaG0^ zb8eT2%;MGtzyhOqj>c`X_hIFXl z5ozI+$VJWg&sE;ic)&&!y66C4K%MUQkuXO{e>og|1KCnUCG^jo`{3N4Fbl)Zlas5L zZ;&S7vad<`o9tsiS8TEp%iRZ?66Z=2&P_B2)du2pks2-ik7=py`6E=nQ@abveX_|; zOcI(vR_B0J>q8LLO_ac4{>#`W95T9sZBDp%fCL#YJTuxfi6UZLj2yQl51|Bs4Fmsl zN1(`&EFq4Si@CW;fY!NPkbekLa>39t0m_WXHuXp*YoxO6{YA@DG4N_13Fe2rrC$_Lv7%dFOifyp4^%NGCqki%ki%<^s|#uKDi zxD<6#M>z3zf1)@X45X3P+LIP_JP{4mIx~?sAXz+)*0%@|tx@@rvjsEu^@@kS2Cdj^ zVkn=2(91+&?X*8M-_TOUT{2AbG8s1ZY-9GUF36BcVnt-AwKZYGB#!Q0evs*c?GZ!F zp+fWio7{0aiUI2avPUDjvpg|AD&OG9;cAG5@t8}Er(1S|O=t;-`qd3WKct(r~9k@AV44h00RI30{{R6000931b7f`>HrzC(Z9Mb zgEggHhz_4<^e-QN*tI9KjPZUl&|@l65XiP{*|TQNn>K9Ovu4ekHgBAz?xAVN-eeOo z#y_x-^EmUaZ68HhU3l+1#AXina$n~*+y6AAzT3~QpS`SbS2V-iu{CWu!40_D%J0!WCw{Bq$MbazWG$|g$qYWs^HBMVswf*%El>I z7W|s#8Z3=EOSIxhZb8Q$?z$$qG@)L6St1yA8(eo-+zkY>&H7%`nF9Utk^#%N1AG5y zfT7}W0UINF@U@94x$HgLG%QotcXnnvX-e?z8-9&WEzxg4H3-q)<*t2VW(GejJhSi( z1CI-zJ%I*ZxKudZH=Ef6>5_FtMCeJgcBBwi-Aow{ zmh7}Wsy+y1Vhh9vMO4U;uq->@MLnsCHr(YDF#jt4UsqfHI~KqiB+! zSvwkW$$JM_z2WkRr)iZ1@*82m_@?-gg>5-DP?hrjwoyAxa!j??|@A&@W zQ&e+9ao)K{IF}hmo$q%ST8f zuQqY7jpcJ!suqs@h^P62B!2-+w|tB8h!7R#?951Ej)#d1Vnk1D1rF@y;8C+Py>BgEAS3N_K(81q| zAF^WNt<78HRidH-Myj9BH~hdhb3Ek0fTWEkNoJA(DaTgf&`Rc`>A%^o?(f&B5C)5djc}{>1F}wv;Iv-bVs)(dD%)pch{+Dirq2V~sm2;-~h!pBX=MCKHq&HBQ~ zIZ9Sa9gMhaqKrqhD}3waJn%ITaGS4Nhm%7qYDVy=T@g@s-Wq+lO0Z_pc+;-{s}U4H zI3+K|05m|$zpa#n8Raq=ZonAwgBWgZ>*WUU?7wK$LEh-PbK}k9L7_p|N}o1Z7a1_vMfg?To>HKRc#>r|DYQRxo8mt*kR0dMtoMTNRaL)_d%Ba{3T7 z8zeI^YpmC*Yig)nzB1mptp|H2D#8&T7JM>a6XVHj83FkiDV>UrujC>;^FB7!;Kf|k zo_8IJeU6BAK`vKv+H=-W#x~y6OUX&zTWL2Agb~4 znl5!)q_n-ch7pR+G(P~T^+2IO*V*x{+sD&wPSgX2h`AYdUmXHF+mCS{3QNK*0zMxa zdL8?fJrJ;D8q>L=JOr(so^F(@&H}X4n%^te)ypmqib#=mrVyc&aK8{E39)X+&Y3`c z(C^Gef_3PbDB7Zy@5i`3$LMD5HHBlOxe_LnmOm;!Fm$DVIJL3btZR^734R{GXAU|5 zJU02M7}?~*7}AUXXXHteIR!drj#%waVEn|Zws98I&~tWWsyni#H@gw_v_{L6FTChu zL*`j2`fLtB#8Sz}QXJGD|7q0FmSq7%;clwh!#g1#{+G?!y3}M;Oe6i7&;Wfnq>e8e z|HR4}Ax9DpQ)*TfkL73D?V5w^20*#zV?CFQmXspt#*1pK+L+uw18vX1Sgey-kqR{c zFOuW*f=C~8n1JHgJl%#BZw=zEMSxm(!kz z@aOmnV7X>%seX;%^B>X|B8rC&;cfgpY`5jknn{Q2$(cxVJZ05zO6-3I?kGdt5lpC{ zs!0Xo-K2@KsPpe;%1=|SY&naiegvmx<{U=>Nw$>~^w(*vi(s3ii7e984g=+-ASq(S zECP!R9;FJUZ+t)~46m~DMp&Mf#%|(&GWi&k=m~$o$vd)juP{H~UxNNVpd=M*m|ZKi z2goPm_k5|`($>2!5^4Vk9DmG!?0Hgot_0?OKK<p| zW*9;6ultHDe1xKNOUS3?<;tjq4FwDX=Bv=tg2kkq7hG)dPG+Q}^!xHw23A1U?=}=# z<%QiD_jnK+x)-0dOR25(Glld}zXp$%o~gG|A6#%HI#Vvagi)7?9@MPi>DIEirV`G7 zsEZztsbGwW$Qa7vU>X94d@J3bgdDzBQk#mWiKcfC2nT&Z^JLUWF)jVM>hfzE>RYFR zHDK?u6$~+Lz)Y}?iSA-=)bs!2M34%PpZoOr)asIW#on{ID97p95Q6{SMLEqf1T@UY z)N$Kmf6y!K5gqpgvBa0Y2OT`v6Uy?oLcKS$*F0^Kfs9ww3++QpK-GC$au^>$s0L7< zs;;TSAT4l+HH>9FhBbHK(se{?hbMzB9HNbu2E7Rb$HI4=sOW8mlnE?Q5@NVN!2CA{ zub@s-gI;9$9?@?G_UQA;4%ZlZG2@7hjy1Yi1>r&mt$Q6RBEkE$Jt&Rn@4H_De=973 zhdyMlZlF$>uOZ|T(3mc>6I5+-C*mJ+!r%`2tOuVD`pdvK@8=MZm_!GcYc_tpG|RbK zg%QCi6--OlTObur)&9^MhTqJgWPcAh4%zcY~6Nkone#^cCs zx*~aAn#_MVR;z~tcfKCK=_{|yx~sN-su=kRV6N84$~N+h&oNvLHrb6d&`8psrM-2z*WeIX3?gGH109wjahz(_Da{R%4dASSIk?{8!&Hq+^}HTWF5c z^VvTLuGBjddkCZZV;$3D#opy+Xy2!9H&fqXCUYuGoeatS&_pUy=W|&z8P;CX&d|bg zvT6((TuYTIh7Ox5Kykg)Ha{ps3eOVDD%gFNmxlnMqTs7cDtha`n_L4BO>0v*wI4^{ z{7_U=0+bBC2=QR+&<$cI)uwD#M4~PeM2Q*pS;t%jxBL~GM3(84*JwtzNX|Iq4 zE2E3yWXf~3xh|#3v=3?7yMDLLJOjLzt)zYHDjUjO(yV72IBtrN@}>3_kaMKBHA^#F zbO80gbN1C+Q%RifxJCwf*k7+5Kf{uF;@s;maLk0AlCsO-lN-ErwCW#m_<1G7^%pjU zZF@-NO$Gk>cQ;-p(Tif#hTRZNZQ92$BXUde#o)~Hb-A{(?y+6|C`L}%74m>L4DAN> z2~B(G+(_WZ(XJt2gl>b;=@LEeujq7)0PX3sKq*LT6d1GHd1o5V*raHxNs;%60qAOp zN(1d--5`ifG=4aDx~Xe*9YIvbfFNiXtLUT$^WoDiy=e+8fo+(D#!N!Mg=z!t`ER2@ z2RzX`F7SSYDQP`DH9?ee7Ve4yYcc&GO1vblQNx@v-1~rOyUu2kPeNoR*sC5*d|~Q; zyG-5vy+%E1C&D(O7=7vzaGOLPllL)>`5W;j))|2NQ7$?(=;oVfJb&RFE$Zqh-*A&* z4jcl>iBnA=$r zk~MbEu$`_!|Bh9wO?0zJUabDHb;V>07v3l$0;#9zf};crl8(yz#|jkwmwyikx6H;e zhqw2#aMyc5tt4xNJP&-9iuWI+vYm}IPSmMoXSo<;@YURGG@G-qicnZx& z8d>=Eg)wbCRsfHFPv9WnjPX+gvLDT+*L zcdM4xH6MbHZD+B=cBMhlrsZc}Z3ML3VtNdPc%CrJ$KD#k@ZO@xyV%XT|Mc7Mj6r+` zNSY=C167268t~@xSIO!k-z53G0!1tf?OO>q=b z_{Cd>4Yl#1HgTEj-_*h@7!nIHnjV9l!JiUlV$~Cee{LcU@Q9*08|1F=2k%?0iLg6o zy&~#&JUG1~`z;%Kc4cz|3dDv?Fkr;Z)3`mY|x1N z<2^z%^Xw-ksq6uh-x)>6>^3#Woh$D7WcTUMU1tE0ZvLTcs%V?|s~_*ER?js-Rsf-@ z+j4&-2=~Pa9jP=m7gICcR6Fv13ULv1$I2q{_}}DEa{+ZMA!Epgl7UT0a7vNx=xnL< zu!*Pw*`evl4_k}%*X@7F>yjTeSv+eN(A+kf0XUpa!-fv4LDcOpMG)JoX=L_ui%C;} zm$`%;w*0&4HW?SVw_vit5c9dL+(BOQO2G35PE5OdSIluKrV`MjSi*aPUVD?Ru7Jen zz$V?%H0t>829!m6x&@LnYGz8$l^&n@wsJql;cR+e8uS4~6vC7s!+gzN-MJZ{IOU!1 zkengq3pmBfzIfE*-JCtuKNqM#SXq#a%ym*<6=1Y)GB2%zmDd5;Fy8CxrjP>#Tt{3( zFUhRognwBPg}VQr!h<3=Tli+`IlVSqLSK42ueeWQgz{UWFU6a;)}(&%3Kimql4Y`O z*P{vD_#)fuQoz=m7rz>eD=l$=-xm?-xpgt{kz=Cx7vyhei*VGF+Z=t=okahr4uLRw z@}|RV;AY+YtmxxZ$ijOZBZgZ;H{8P;?(H9RmpTe?a~-%7Ta7)=9w)Ptp9|iF2w)u^ zw^Arty5@VRG?G1L%zlQB3LJ}%4HO;dCC%y2ofB4L21C~%nXNarMc+YwJkF}f05+1t z@Qozas$bff;ZX3r+urkg?k~MPLoWRGsV>>Z1de*x5BJ}-eK5Rs&uq{?+u>#KlK1AL zm;G`MlrIu~)nv(M9D+raHd)Ds=z5tLJo7@nLKbX>+ zzydxih}jzlegD-w5gT1yhlMmuf85LCm@=CCIt;etm-DCVe#^34Oy}9%M56m=yjtHm z&H!l`gdf9S@S{|j%1g*d&?ia zg~p7$n&X+1zO2iu{&~l(_`|6}N|x_v69kGYy%%^Md2m-m&plZ!2b!cUhB>(}%pq9x z$liHauzm2Vpn1J6h$r>{y=5)1UMCDgUUnQ(cPc1|rHHRYqC=@m)&p*$ZhOi{7~L24 z3Bbvs)vjLdtQ`!Kx!9!0{bSCvi{*7+B7cdnu2VU48=ha~nWJIG5e&j|+5Bz{ms`v^ zAs@^%n@hJCrKiRT1 z-SFW7%U4nR{#fDce7s36e8zn-?2qkh2`c*ZjC0&bjCE<>BxRe=R2%H(i!r1sBVqTG#+r!C%8nS$W!{a`c2ZJDjhkUI$pv|6+AE7WQyrc`DwQ}M*%49Eanf*2a&pS@Q+)ac{f)(|*Zjlx&P z#9jwT=%)2tQ}aamlDy&QrVx?7N?+ud9Tq-4*s^1_Ii3?oMY~*Dbz;CDhgoWVrsXGx&Q`!7t5X&S z_Yb8c&1L(-pS}N;JJaoe*!h@cCka8h1$|3kmrf;e2WgTpdRo~@&L%AKQIlpXZ49|H z?@$6b#3T!vneSqVAYj&SA*k^?6M|DqrIPKfJ$yBQDgVFy>$=HW`^$Ivp37~!Wj6aOnS+B)hTVu zR9q^XJ(GtQz_Qc*V7u0H@-kx|{qCNJt)xxg_9o%qovG^LHW8Njwj`Gr{RxGDpcwX3 zVT~3uK@6xqstasOr3@8nn}}TXRnP6h&(BJTqkplN4Lg#gR_A4U>T`iX$9o~aVGr_u z*7L!-8zaq5c88z(ekczq&BKRXe3a2IbgS#zKu$oHT;PdPpm>wqM^-NC#;CFxVh_+o zVau}lzmk%Njz4TGeEKdcI*UIT_*GRNMc_jRYIL-xUlE0z%8kX#Z)=l?DaF~g z$h}naou?b5pa;x3s%?BjJc8@F`4j`3V{|_}tO?QYo#Vj?^inBVR!kExtC}7g-tYA6uEbMy>pvn<{ z=8o?FhjPt(_vieJW!ijgA#M?zx(w$Qs)Gg(_ro-!W%3YbI%;q-q-@6rax*i@L;Mg6 z)z7bx8t}FKK89EuYWGs=Vpc2w0a(m%wH?q7EE8DUZVvp8)4i;>hrqa_-(wMp%>a6t z>u7{4dA$)Nio>d0F!g~Zfv(kN?5+UI%6)LmIvQ8lg=5TXcqH+fW=6E#R`5>k0wyW> zd$^k|v7sa|8J~(d)EFA?kgUJne@jx_gg!E)OjCMG`I0hRF;1!!p16*bV6_@e_;W1L zvbZBZ9{a3mu0Y0c(YmK&FZ*eM$-Yn`Z>Jm66+VM0S!xZA`WmkEL}z3yFvVNP=SOIq zYHspLNWu;7S3y1Bd_Oz*Hs8{<9!v8#ayg$8OuW8C zv4=dZ^h?4B^nlHpd?C5jqBSpTDJP-zK2?y7OJ!31@oU=OpSaT1lbopW7W-}@#Uu`t zBjivYCHbUjJt8J(LP@O?0zv}1*8@k!q0=TaR0Vw*qCc{M>(1_zK;^%$f>O@d^2GV5 z=hs}%yTebKmUF<4B_`V!t8;Jd`cC8XHXu_Wi}O^$k5QBfHI#F&d5?$DM^9S;?0294 z(;A%Ca?x|oYT=5=-d8p8fWWXr5Q#Q}a5@?$#1uc^zszTTT*QLB`y6S?SpcIxl=#4= zw{CF^SJX=#xI36WYJr!Rkk19_NIciWW-Rq(W9`Nm3DO{in^iQ=_^jN+r9-4f_*AAA$W!HMiPkw@WI_MC z1dzIIvT-N0yNz&IM6GKHD?k3FNRY+xwOd>2;nAajJAY@Tc9)|4%CBpQGMR z%Vv2Z7)Db(jU}`O)vawcGdhq3x^@hX*oxyos#E#S=bUiWy-2fp=tdbt7J8&P2}v=2 z>qcq?cHNkk;B+u5vF0kJw20I1@ms$Wr$;vzQLAdu;sYnfxwX4umdxv^X|AFPM{T8v z3a~N0oHjFitjD>$yh2LqQ$l)wMZ~bK{ljZ!kX&INj>Qlhwo@B9SIVv4v+b~l@UaEr zGc7;zr{5(~t)yYN*oLQ-McM3Ic0POJ*#|t@as8Dt z+)#3-x40#kYP`j)hha3Pk&*LGml554qt=wtDx3?OJ?m`aH*6{J+gW*9*7{kL9}0dp zWpq`)ZQA8`A?NOa=7H9-eV;W)Ee$d;=oiOyg*#_9!3pr& zb=1xK$`L@d$hV}aL~QCUiYu<>T`0}Cw*ce5BCyS3i`snhJ2jYchFBRoJWGI^P~^Tz zzUu(Zf}qa@#Z#AwXLve>rOa=|V97Xoxoh6Fk{Yp<{hjs9wS9wfRV)Ze+^mKMk5~yqQfDczC>Au00!&3$EC#x)xawy6IS$9u-Z=IB zk7r-C@m0=GNvXBG!7fri_hAx=Hjd_8{|ARaK%tt1K8WPV&4C6Qx=a?Tv&_ z8vKV74q|hC7P1Hrq_|o*{E}Nx)Wk;z=?}w_cKj(CA4>r&&G+l)ltStxg*<#xvDLV> zkey&BG=j60N}{;tP3tEPicw9l{bPdouK7dh?=$y``4Q3khR6eL>~pQGR@@i=26E#I zMa?>=ixVo;AE2Arzwd&`Nvb)FH%hLOVn(T}k8*|IfB|xvH<$L#o~;6)%rr^7i*u#_ zDXWBO+@bC&uoQH8rhpOuD?tL8T$Vsul2GFuvp$uALFM^C&WfY?av`8M;9w)5_W0Dblvuh0y># zxOGXh@%rB64k@*3F@y^P&GBH_RR}N_9G$T6wir5BvkB~2OW3>zw4fo`HeaD^N7=@g z&y2yJ*Vx67Hm!RGw-peW8RWr{;Iwc>*HF>6i}A0 zZ>U{_E%JRJEI|~}^;aioEzYM`8y*`d^;HMJ0&?mEMrmL*4EWrTrh?6M*B--eEaY1` zSSD~u+P!~$4JVG?4QsuR}QUA#Q?P;Q?*F(q_B+i;SmI6YXN{9*}h3-nqMx6%ahs;J*M0KV@d&wx9ZlIDowS?^Mdfb2twf**hzPT-r6 z3{qj$?VC_S_4P`wC@>>iE~7`7mzxnXCSgdK(6S^E@nWegTaQ+N$;KE%7} zs`woEgwzoijIsp{YJ}yIf2lZP6ILh@s*-$4{URDofAfyyJ*3cZt%4wx4;ef73N}vb z#B-9}P+V>-TB6r2!0*F)*9ZiK&E){BbW3Z4!pcHs>A|tc)U;5!YDH$6iaAQv?__Je zEGai`;v)702?Y|2s7e-pk2_$z+0_CIV|I6sr!1l&RRn{(5k2Un4?#&00ZqNE>Dqcn5-9Wz7b2SwK)rV#3IV*Sbm{XfBdWYi^mLy=KzM*Us_p_6^U9Es6+ ztdki7ni=G2E_-u8k(V}Q8mYrZ@E_~*Df~{@*3`_<`CyF3J^-K%I9l4H;sr7vENmb2 zJ{cQ;6<6@_JnK)iz6@|{Dxb=q$anNC7OA$?ZG_4D##oDmtf-dKOm?YV5T&87`4%(G zmMo(Z$sp9dLAdM&t}IaakvrXU)u!xR1GY3EIsJWGw=D?gk;BiX1sC2SK=SdwT@I|S zhqCq_WH!TKBi*hfwW#ZYja3?|XP~KaF&B7}T4G%lkB}e~Xy^8L-5o*CHvydDzF5ej zYG#si+}Kk`oirvyF>4VkEgb*`A$w>e^I&VUc736t)(qpZrQu`L%6Pp-sz6w_#oihgJwo8%vV!-BbZhDwB zubI_&2^7q^^r!8Jj1zk{{+M8=j3$X~!h zC)~mxOkAE?>P>JE%nlnZyLsX#bF4`_vPZe#__M4X9=(rVXly>a4$Vfn)JpEG-taXtgC@7Y20Vu7gU$8x{=q>eH)))ZNb>64Hh0!s;i?CRcPq zHd?W13$A<#py7if=paAu_>0UM5IhTp2P!cIXeFX|+9XwMd3 ztkN}g9u0i3UWz0jYf_S~(| zb7JQZMYv`7Et7|)+t1{ftlV<(Afn}!oF(2X*4Qa1RqEAbef^-(Va8FDuW2Fi$&G2+ z$EI3!#=%xZPSOD7M<_4|MQ%?xYza95ouMeLkwrqFL<;@!sl)-M1=K@DV$4Nu~>3i3T7BIBgVT1yQ3)ObWaYd1xyh{|hnm`cx-%-QBhmpYF z$_+aw_8-j-r`F`7g&>8?tVT<`aHLK16hZwl_u@%+)7B!_uE{BTwVt3QuZxz*jW}^s z9>91H&lweCz^LckM9qC|uRO??sd z@*yLj+)XCb3EJ?SS8><^>nOUUNZ;ywy~`O}Rh3T4V$m`aRb)XwVHD#T-Vn?1u>T(n z-UifUNS%AwNzaSOq%11NrE%3cRIaNM001_!LAuU%I3qWo;Uz2X-KyWC)$wHEc{62o zbk8AP*;`FtXp()`I8od1gf1|a1M_dZLLr^e{F_&V1vbD!$x!o z+CKFhN>Y`iU-C2XPZtZTW5W0tqD^I@blX_H9qsP)QeM6Sy5B{^c=E7}7T1SgAuTk>$74~0wW`Q;ehvr67l(KeWm7VrT!GvK@CAejG z6AE-1SnpD751DYL}2V)D=j9n@f*gSWQyy@EU2jk2J+9+Wzv-^x_Q?oHPh;1 z)1$Q){JKuXx9}+SzOKwTgXT3LGpj|QE%}o}h(%)+W|^}Axu?rdjlX0l#<2iyq3bPo zT3M+e6ryVYU{L&eRJ^1G#o_;tJN}n#({Te#$6#3xpr(_F!eJ%Ro;=*umbT`wrOf{$ z&ePs#jz!o^rg~J~K0{%*f33$#U4rwhI$4DkxBzX-T+AQc>Cg-6251?VgNnspv#jpp-`PGF4Fq z7QeTvNYXINMF*V7QcL#yBhuueyZFSk72VY}g)IGs);nX)m2CWlfV%OCvxEm5y2#?t zsV>ybHmapXu<5l1o^l4sjW8mGr4jp$-v%k?jIs7q>M69r+-<*X`Sa zxo$?mL%2!C-FrWgMfwqAT#t*CS&fJADs#%0NE%vEr&-;PZl-laUN;oI@Te)!oXJLc zC{}l%5ox!!%<&2f14$@}l8P?A`MdqiYdm3x3bF?1uy-OR04A3u0?w<2sF`IJYM8qL zc*ej#zfKfB=ETwMeG{NI8G`8O=IW5ZADUl7kQygoM;c6it#HLYgx`Oo1zKarmQvyz znddDBpkF46MP%HY6!3~KK7GtMFL}gP`M5ik?*)8~u)yxO4*^>_N#n&H_v!e-ikIqW!lEK!kY@&Hq(HW(w{H!0ofpX?IpH2lXY}Y!%*aB3h`gtUgLG3vv{nf+&f#a2JygvTxuy4Jd|`IVH;hdH*nU{C?C* zJ2-v5=I%*9qOdtq7PdM%ta0xVPnnzY6lCF#4_~$0ak{F0gG;?8?T9O|qFoVQT$=aG z-hLg|#`@=YPSbc&7}$xF*M$@qN>U1~938phZ54<7O|-+2E_8Y6j$~>v{rj z$kYnXPe>@4PKCfv0UThZb|tXE$%fnQ>3aw&456tOK>MphkwMf~8@NklwVf;3CMZ0o zv)!3;vj$u)AqEATjR7iB7rE$#_yy&MK0WGn$&}yHq1u`dP&p??3y1Mk=aGCKTaN8b zS(6P1fOy}(Us5mc1*x;Pk2vl8LWyv>70_6>3qP8{iR@&VlF#}i2GBQh`j+PGydM^i zXIEVMwiy*-#dmWM{M>}w@z?-tkhz2n(erpR^Sj|s31yf^7Dn#yp?b(Y${XWQ_7Fnq zKQkvjXK9c2oITZHXNHSFyW)|TW!QcSXVah*4|$|g_c2Azu*IM^9Rhus=JkKAK_(xC z!BK9!6hU>9$HXuaA48J+7ky-juSM##HUat-7C25XvhM*OvT>sg^woNa?NZxr*H}4p zbCztA++^Fu3LWJEQtunBeiZGJu6_PbPI<7L%8T~79S4h~32g!t^pP-~F{+`DUh9Jh zdJ!hsIDxhgVPjXu(gsCY<=!!~b<%WJy1oFnV)dl1wnv^p#1)<-8wu0)H7!8#>9wxgp0y z`-ZL0n}rQFE`R2p#KYVCOoy$REJbv(Q7d3 zVX+vS?F;@!R(^6B=O}`g6|?2$z?XonMnP$Kqet3bTau4Mue%l53da6Fneon#XBy@j zLx4-?N2##1BUePXSfAktc@DQBDoOt7c%+@a77pwh#UAPN{6km;NATyx3-iVRLukJa zLF&HAce~de9CUT0bLp4yJGrlv;A*MrB<<9`;q2b8*XZH$T0#eAiOehV99SOMC%)Zp zwiIj~R)3L!Q4TO#R&DHcCi(&v3`=Y?cv=@<9$+2LT*cYN;uv%Cz?EsoW;b$O{?zny zm1}8Y`z^7#)`-RpD5*AL_DM!>6ek!&qn0*CJ*xajuY!Zc?t1{4U??rR@|?JoKj z(f#nGE#;OM_0q(X!CIB1w9Fr<_cv<%k=KF?j1>saDQ^Qc#*(LEwuw1E5j385cXXh@ zMyH*gy~%?&=hG%|$ofwuom!>D0c6pPg1JP3pkX%d7XdMQu)?n(a7|9qo_fLP!djov zG<>82Ywj#J7G8L5*yLDHRY1crg?Qg8IN$H6YT(q-M~CY5DcLsSp5vcWJ&4>evpWb( z=sp%pzjNtmDIdQXCT{r~5d~@f^g`xpwE@`8h=^C*1!O|H+CM8%DX0o}sSZOmbO#Z4 z=D!E);X!av_;78BP`NwvRFT9oQ!*XuiLe?4PTDU2$p6KJ&UO#_0Cx%1$k>~&g5ShY zbc=L^XGHT2OHX7vO8N$4G?b^pOVB8kxhkVLBtPoUTL4C5q~5b4Xrrr4Jru0!ImVlu z;|gln-d?lbE8@ERZ;b*|-{NS?OAoN169S#<2l`}8$o){DHzWj{ho%n& zbqN)ZShhy;)qSMfL|=&)lx~*y&|ptV?l?^eovL{ZUbgZft~HD2F}sU(FvSM@3tl{5X15ET91f)(tyk*IZxzS5|^{PbM+m3Y!+RgtMo)J(m46i zvcc5m#*&J$sw-iWmAKuHRyrfc4hrrt?iql1F0D?>`^WTBX^tG-f#J z`7}Qs57*}fTy~|C?ZlEeJ(4OHCXx(=;^?Mt02yB&`V~rqR^^*VUj%u5A;l| zEd0`vv(-;z6n<8-ahT`wyio7aj(*Urkyt*8_<{s1+)xt2vz++19UL)s1_>&bsqA8k zR*d2{Y@*6ZQ`F3o_*QQboq#OCeIWSY9P9F7HX%{y%15iMfN_x<+;u7z$@>b~D0P5r z#s*6IATIWsn-2%ye$((~=Z2IxY{s`S)K~Y>y;BwzASzZq zO;AYFM09JVJ-6jviqbDW`zZX|Fd6?&W8S^(V@wxPGAP7eurONtCY$0cwhURW;1qx9 z-{AL}F*Kcm@9&kxlV@BzYdo^4)!?wvCK%+eW|5#=D2nz_;&QQ8XQygdt7~SqQ{)l@ zGTc8R5Qu7uAr)<+0OzPtc3Amg7ojKCwII~}PjRpdQ3#5r zN!t>COU#CD8Q`?1v*Yl*=fc0u9{Gw2ko~0IG)*n_G}Q{qN3~AbuZvv&UE#p=X`9;N!}1hNy46r)twLJnggg^ucdK+CMO+`rd;=v`ykQ7pKfqEI2l zpf~5O6l&AvEehI)7}L%kkIghhR^y+W&{W#7CyQ7bHM0IDXQH#JV8+rIADNyQ^^o~i z7Z-H*RN5_N%?S(Lr8h8)-9jS(AJPM88=Swpr9F%3k=yf}bHVUS@Xqijmo!3|oi*$t z;*;rSJ+$9%6e$QVmNE1FDYCqhCTeUQJN=xCT%GzteZcBIc7V8M77mbNq`I&UnlVDG zaa>6~;#?KRkH+rTAFrbsIyY(2?mZ?~$d=}{F+ zw5Xb;**!xDx~`^<%q9yA#vxAT)G_NQ;Yy~IWPeN;r}(N3cjjJ=OBynz?$qfxSEk-+ zF#qw?zk+(y>$y1!C0K^nfI9eqV!=9)nbBbYy@&O3|J+F6a|vIJ;ZnMsqqRtq?_dX& zBTpgwG|I;pJY9wMg#ubkD|NRj7zGT_t2(q3NQ(epGC{o@4t*tBzL>sYbh0(F3@RVq zObcXd@DD@O(0LA_b#9U@!2h~ykyj8!-R6(K=pQ`7!`3hQYYL6o?NQNyf3SDV$-S4> zoPp^FOr89aM%s=KVd6_k2)BuSc}ERHULyx&b9abOkLHw;uJvEyXo`BG5h$X)nTmEhGj&W+`(px-RKK;g`jp5wrHELv|0s7gwKiYGZ*%gYVufifuSY`zm3Lc z4@aLsMDKa=+U_lo)`zPfQ&ZY20w!6FlTQ)GBRlW=uQ{rXQY`2)L8%6n7I?91UJuDd zRc_?B-`yoo=!doe0u+0-F{Vm5!P#Q+?)^bY(f(HRlUy`LOQ~f)aJ2+1e<9EsUv5#v zMfe}gZ~nNiy@66jw;wa_W|Zq=FZf=!r)?56mYrWF#Wz^w)PY4A*DfeL-O+s!#uMQi zTMh)ujT$p4wpJp@?7clXtt>NlpZEx2?$DX?`vo~~o(MZHHmf8@l`8OEEh*cHIKkGz z^sx+Wmm0>Ea54`f-E)r%)!HoO^8$odexCfmKpygN;P|MYx3;9)J4};@S(ei32A)*Q z_rn2+lK4EY(;}UojQH|vp|5mN%i{% zn`JVnO3D(?Q$%zfbSY62>CE@2*luh9%d-g5W( zzhw<6iJru7{WoCg#Z|VOp<6$uqeF6_nOK600#mK+^LX>%v4?-RlO_qWKFZ1~fpJ_Q zjpYzcH#I|}&Rjz{QVDFWN&TfBEmB&Z&qVK1!# zO4#o5I=ND7@e9N(Uq}RY5+Q)xuV2!nys?r@k-=0xPjsRzz2$qtDbtrgBRM8~;{RyI z9sPMO4U^seT;B7`9x2n64%@>RKrN9mUKQjQN%Jd9FXdBqVY zCYfuE? zI*hhqksDu(jDBdpF?l!hu3(-{&SR4p*m7aWsd<&a3V!v#qa{@7NNWwk!%HS58)rU# zR){}BBk(JJCFOMeB`W_}x#2Ja!s?`Ee>1rqw4W$qIqG4@S?Mpl?aa-Q6L_yFKy?_` zQobk9rE!qju|Evbn2y|`F?u1S#0wwz#No{wWINjC+3;F@nGf445z{Pj$(Q`u zQ*i?rq`k>Y?N$s0$bT7{m?Bc@EV)o}ZB4b#%@#+Vx!}Wa5X6y~HOKm}zsor-gDMld zhJ>z{^!oHWxe8J?LPC%r-L%{b>+d2p&;zgsJqM z=x8F&x}$~C;viW|DgjcpU>8xcuYm=6rv=0cl#71ZBQ32li4IpZEE2(;% zcgcGaE>aG`gk3*i$;4>q0qGUz0BC=DZL20p{oj=B;7i_J*)~ZrOa#Rk1FIcvoJ%q= zAECW#>@CVI18Kivk|Hfjw+n!%L53LlOUT+#61z(o+~?ef@c0#N?~CRNp}xv-u_2cr zbY8m{85Cc)O3xD`bG%^B)9`K2bVimv-489&mjCM9!_plEdnbcySo%yz@K&hmX=Ymb zmLu?6P6F2fgXH*GrLz4=ikvLz4*@{uxrj@nnwfTb44_RZR)0>z0!4pC%h}8~>dtiN zjHVX7ednAN+EqLaVk{G@MigZ z*}E_JT4#8qWY|L-*Lrgr(24ASzKL0oAVnZz13L?Q;6X?M9^Nlw-}$-Uk$-`e}2?y z<^unL#AfX~R6vDdQvFj{WA05jr(k7mR>&PJ!Gxmw?UEw&Oq;QV*c;lDPm)8soWRTh z>=s2KB1T+Cocr$AP<;ViP8f1;;KgfVRxesf{MD!JTFlyIb<3laA2#4)MN&Z*4+n6% ze=5XaS+*Y6RpZl4_zMa8y&e*O)=ViPT1KGholQ)%M3%@8K)@BfKTPBasPiKC(9gYg z>hzaG4malA+q_jE+Pi7lHV>=~4lxE`^Yix?d0~KhjjE&#)^_@{+M@$-@6Y2SBv_GT z)r$zlMn2}keG)nq0f*#^2UG0}%-MHGxi*?PI$6Re(K3EMU6-=TX!p-yrc_~hlNYxU zY}Hej7wQ6ufTua|5-PRem=kGZ!yOUR}T3|TK9P`=#0R*V)V0i3Jy&0b-Wx&tTk_t6)55Zn21jl&qbO>MQEMz#$|pm5o8TJhnT#4hXj}WKlk`JgOC`3dJc_#2K%4w(+cN!w zCbPDU2L#n4XL{P#_HSu7TIBw&l~KD?+-D-pP`k2EvT+V@eM65iS>M0o5Pky2F&NJB zz}Kb0O_uGO3526FNGxojgD^n1K{^eF+*r$J2gkGPS3x@c@mp&}O9**{k}T;&6WF=H z_?xu+-f+bdLWAAEyiYrcGc4QV%`S%;$hj1+2XCxe%65Z$NOz_`y@Q#uB)6|6H(;Vj zLmDlIk&o!c`Jn3DEMtU)xgq-B{>Eat{ur`a@8a~1t;-|3YQ^9PV)+9~r^JG)rm@#}35!OMo%&9w zoz?rc4lKj%twA=v1H@Twm7%gdk%S6;eX6Q=91wQAg6 z`lvON^^F=JC@ncZEDNo~R;(5Mv@T+%9B^SIe#X$FAOet+bIrZ{D!h8JL*!`q+!lv3 z$n7dTrX)#Un)IWmeiyMcA4a)t`IW{bbQlh$j*ot>6Di%Vr-wW+>Sg(3h~;8zv?)Bg zoj`zO7Tbop0UK0r`%x~oHtmeveeF6hx=KnbiwxkJHpH06L$#Q*QD!1SfGya{7p5h= z>+B$&DAV_h#?KB<`o_$NaInFzcN`4wku)@q_IgL=Pcdo8<~M{C3PNfVA+k z*@@qg&3VWb7!A+={8Tktav1|I40Y7a``zG3;8;=uey%omvpEfe)SuTRxdKmmY822q z4)m&q^%S|!k?okEXd}Q_A68ItSLk~ZhA+#=l+iyLaE0L&`W$92ITiNP(UmAku@jJB5%^@n2VfGU{?xGYj zw>_6IpW{)r!F)OaWOEHict#XU&=q=WV$jsQo`rLhX#$8#q8yn!OFD={;?pXug*QCs z%`5b&eV&giwIrVYX-R%AhJM!8qxqYRu#rRcDQOuZ2CEExOtaThvg1tFSF-o6ocy$s z^{SO*N9!ug{^&ji0RS;T&cBs+CQm8}WbepM%N~ygFvq5_?6q7avZfYV)wnjSZ^S`% zn=vK_SmT81D`U%|SMXTriyG}ddMxI8?Dk{4^i37XD{5p0_8#wfIQGuN zi&Nm^AHp9q^`Tfv88DJoSwAlg< zDlKI}PKQzX`}u?01UMll>3lspKQUsJ0@vl}6z(GtVd{@XbN-s5XFcwBGGep%*52nT{^fb!=K0Omt__D!^6Lk=2(wz@MhUPjgcmzQLR1i|i zfO-x%Cku4I++F=?!Jaztuk-`4L{Iox6IdwMyDz(n`w2!uh6sSj9W2Y~&Z?l%o{1!bg$n5=F~;Ko2AmF6_+W>{4?2CUpk{v8#V~&;h>a)1$adpT0E%|)0Ne{<(Ramg-$Zb0>@qz%I9~;*EX%U%q8`eu- zt|X4=S!J~v+F(SqeO$Tq&B1@!7K{wG^?<1TM!x(TNU9dQyV~>Y3Z`BH*Y(gAY(W|~ z*2^ZBo4cR6PU}>z-8;Ab4ENA-Jxqtap3q1~A}!BJT~Pa~lah1FxK#`okzP+|R&-qU z#ZG6Enq1cuP>CBfP@^+aYUUwU5#;EpAqM4GBw?rrq~cJ9^$qBxDcF=da`2X-}`;?2n+j0lFd zpE<^)XzmP&DF00V_3Qkn2aGssf9doa!U;_|{%I?SXIWK@apNoyw^Txeob@`fIZr`V ze0O7gV0h=@;vX`i`xz+aSNyF20fU<0Sun#wEx3S|ps%K#(#gSKb8thBhkewT#;%r- ze=4~_OJQ+*$R^cgX}>e(%FHJ3Q}zj3)IJy^aQKy_Rz4vCjfszy?TSwaqv zYhz%mv9eE%ame-8aJsG${%ZVA8ljHIM%=4%q|pganVH~}2Gq_gs>m(qDT3_9h+W9a zaQi)&r#%=@(lTavfAz~%MX&9C_y&}tcRpT(`O(G*L4nV#DWkQPJhD_j)Y^~ek3HV!oBv03kcL`?_y7c_l7q4+##P0bN%#=*Z^ zNglq{h!y`wlVknS@J-zS)s2%S(LnLGjE2sA{pG|v-Q;MY zc2^WW<&mOJoUQ-o>?e9!p$bAPx1(;LowzWCOKFGbBBDJWuKR;u*yzsN>;Z zqa}~@cOzmF1jT%&p6+ZW`yJ-Pw807ElfODxa7H?H;^7jZh$_f>dgypac|^(Xxd~Ka zq#7TYmm;u9QAiB@l3(txC`IaGWE1yb%!YGVEi&~q!$-XJ0dJEDCI|5qP90QyHI2(u zp?H5n?{Pa;p-w$z=lB5X*A*o}2Ea{ra%Ed!7rr`v#0!)SnhkD=B-y08)a2UXPb+Ic zkl{+QLtEDOql7v>C~)j-g0pqC*HBn%zgY(^VqCQ=CHB8}x6R(2t&x+x9Oce*kZY7*1AEoQ z$2s>^`b4=M2}gKGIn*|KzeJ03rVrn@B5OI*cDi7zte0V@84|%6%TAG;dQN=_OjieCplP8JVqLi%tO?Golb6?43_4e(e>f6ULLy;8bnnIqWA7BYROU-R>aP~Kk z;*rk~Y@f=B-&BWVa)8WMy$x`<2bGA}DM+00*;&i2cf*-9rCQ<~C^N8ucD|G!vn5B2 zAkLo=#@1T3o&wrOBWmdBb>l+~#Mgbwna5t|`aP7C=IUbIKM{e`D}CwoHMXXZbFpxK zBb2Eq{RN;+X`;6O8OKs5Bm&dU9}v)!`|&Ica1P5=QO11P6w4vEg}be7#k5S8!rCY* zg!Q#);338(VET&FaHk~P` z*=d=2JpC)RUdel+L;nPa%e7?ok$#WwwP^wa%+9ZdoN>1cW&lbHEZD~$UbrfAYoSe5h)vN`i>00n2ql%e1EtH+#WWXWL6#k z6r0VZ(aW)J($^A(!Y_Mav!n-nr%^RK-^J}%T!phhr{4b?-x@e0V5|>6UDiIvqMQ_2 zU-9o{;&P7g-kqp3ZUuDhh1~E31*f$AgH(B^3au&@^u#?5x^bIOVE+ojJC}fqR-)Q?x zvxU9Ce;<=w$6y?d9%z?d*bhQ*`m~bCy}1M$PuI@EP379w&{2?~UorkUo70pvAQ>N_ zxAHYiw96{^7aOXae@j3%JO;-X)M%CgvXxQdiB@=)9F(}oVYwjULs~T^=~JPb4|<6j z=F@B!!o`N87VerUC+RZL4iwwJd!+79n|AVOR>M-4A2eP0%|a}EZ|kv`3p_ptaD1BO zfk(b0cCaLOt^M9gqw9Qe?OxTvbf_jF&(@Fho@3`EumEgIPU_d|gZ5k0^rMLlMt+PF zTiqe_v<{jcxOYsCttl7(apRbSdKMeRseRI%#{^kdH05;_vw_*mcbli`)F5-XF3^5P zE6izH20>CS_U%aoI2=tX4Cbeq9goq7J6&#Gi)@IYv9oZ{ekS}p=U>l~YuiB9qd_@J zIdo0b4mD43;=6+bqATJ8=sT!o{w6k-Zy@*LPFhGUYnytgFpbS(XQ7Au%uV1_7`s<( z0^8p+{4W4K7F%3P0jcg$$sv7)bLlT#wRpxSs|P+dN?^aqRENp3o=stn;*=7q&aBw7 z7|0A&nBfP?IHm70FLup~U-gd_!0`J{C}V=o!L1JuekVPaF$Q;x4tr5WrdSx z*g@D-OUHf4g=!#mOL!gU)yA?&lj)VMv7nrJF7a3U9A!=|<(}JvO;1v)&#Zx!V%`=| z*9K#CLJ41m5hi2SH{FhlYZ16PmUpT$YbQMf-ImaJ2`RDnX5xMMCx4)>t$luT&ku z@}QL*1TPZupYR#oS0z?=u70cpg*Luqg)Tk&vEA$*bV0<$^f7g|KUUW;%2)X=1fFdK z*yoCE0}1qS(*-pxs$&5ioVy9=oMpWB3lCEq3K2J3(Mx<>VOJIQpzmrYN9MaTS4gwBbPu4p4K_aBVPk2es<`e z0m!28``b;U#->IDD{=YnT!I=*0$BSu$hA@oIuAJ7ojjn{v610Whwo04|LF##$1$%t zVWV{fBOX5ZOP%~rW&|8lW_P!;!FKN!2}kz_$D0i!wfX?_*q-U{<^^_k?ls2en z{Nx$)>Ql1>71{*KQnat&xI}qRTF9+mN+rBvVzVMRmzYf9d^>QPH&;7kue9#C|Fcdq z{qMEcbRIZF?48Yx9?X@Z7$O4=lRs=B@V~jLB2a7g^|_T1_~eTTEAo=D=MFB#-agpq zy`XiLxGbvMYJb>k> z1hwh-m$}@Eec6+c5xu0PK(FpJM0WewroLi^&b?(` zzOf&#D+_sPn9q4b5~~1h{;u6;02Czw+%u+CxWc7y!Iv(29}2nZmy)*q2bOI8!+@pg z4v=2?=^S9hMkQdmqs;mzv^rt+s`QbY;yANTJ7F!~Q&Vw~m}k38<@NR# z6D+IxpL64l?*1k9RIaQ{zxVfUPMgq0&3SBR1-Q5nCS8<}@;F2F_|%{UkNc*X%~lsG zsVJC+>zSNrcenP8YE1u)Yxak-oS?Ce0?LhtSY))Eqm+M5(7O?l3++mgButlzW8NcI z%j!g?X~ltj&X&)-r6{*NRfg{!Rg(dc-E^!np5E~ySlzi8GS<>beE?#mn1ae?v0jjE zn?`T@=kb5?y}blN)6c{J=;_Xm!Zs`C1K#y(y4%3|vQ9ByWmCA^=8{Ld;oA}nPRP^VEaGmqzIe}mz<^S z@$2&QeOicTmTpJ(ao4evQG7ua53*lGFYR@SO#O@BsTEbW70mgY60X#Ud+>OE4QHO@ zIa@r!4;_l;GNm27A9x`&Z?Ii^qkS$YxT!d^HY$3~g26fqgJGRx=yk1zS_c#9GiuQH8h5~d(MXHXb(Z)pc$1KM?|w0MKy>1RWmBx8sEIy?n==XeSx zX+45rqFxqRO6}+dB|Pc|5(s^jhA3NIe(A4TT>=N4D!2ciQl840>bkjN7(7tZVH}s4 zeDY4LKog+Vb_|H;3>|%br?wMjTXK3*qIaBIOCH-lh4zNyF?-q>a)_CLJMLc^gfE2? zX#n8BLV3=pHUU(nbgW93>Oik7n^)sft-7*~jZ#8tMe1&-AkSkOcY7LR-^*iH^}lQ) z7#)3uOaVsxR8ZbE5w^_7bq!A=1k_OC^DF{j_ReC4ad?)f5BId??>ou!#0`+0<;Y^u z(RWttLW9VF(mTd9Ib{*`g)wiErXBVW-0>9#(Mu88XPTWRI=E2}${8)&LGoC}G1TDgJbQ~_8a$k|MVS=kq>gHbB13){ME9$};P$R5>OVy7jLy`H}=!O+3 z=?47KbT-I(e>f_&V3?;m9@*RHgcRr$9H1XCQ2R$~4kHNP_*aGyT5Noj?JSNAcr=BK9~O)S`@KrOJoYik)K7ReLyG%N>>B?=6fWKJZR zah*By+el)cH2V8H(f?N&Kvcc;W}sQjjb^r|N-OgQTcMs09Y6XI{1&1DsATeGw73&E zr!GUK4_F|j&U90Q{05FXu7pzrGk&R!YE#OsRWZKK~|A&!0Q@ z@N&taiU9(B!FTn_GSC@K3xZk>X$4z|<~iRWF?)l+1nG-j@)?r`tf1X;s?i1lA(TKT z?CVo^h7Q%7nYq@y6|z;pF9YppnBBg`so|Z&_c!d%pzLiu3H0BXVv~K%q{$zske@}Z zHuELIt^8c8o>W^*Pr16zf-z2sh3aCPK&Q*w{|NH64?m*3$KV10B2wI7+;6PI^+xd` zh-mSM%6;<~0abz3)&pNqBZ%q9aCA!0s(~A0gv-s$4>mQXgn?N>~zuao5s-=hNZ0V?vQZNS}m(Pv1&6JP^WrPOUj z-a5~3&jwF!sc<{o1V4Ib*FO5&-Epn`bW@Jo^R?|(^6McN?<+XXcuQ_OF)hje!1F3B zjsF|92^2zH*fJgC((o;H;!J;OPZ8rv^*!{NuMzlCWeQxB1DO56P>_LprT@sANGKh0 zeZcR4v%<8`IA{nK7vBOHq?J-b0m~g%EzcYcX_pii^bT$m`FZKH8p)_q?+zkyBHf3e zje12x(-xx0hbG4t^Y>Jk@4b0d`VvjDb6olVFTl#VTA25L0FgBa6e3Lq7y&x}pfsbn ziXns1Q@_VL_Q#sU;N;espnyU3v1gh%(+)Unv>u;stRg)k2xN=9lUd>;v;ua>9qEz_>lXjP4~u9p9>zf7QN`J(0&U0Y@4negO-nGSQ0BE1^{6 zKPWvUOSm_j@$;KJT?H*NqjbKcLkdyau3N;|YWO4cHz!9;6uPsxJ@?DSzZ_Idy+zu8 z??rJ4ygLitrMthw3v^=S0W2B?IqAyEE+@n>P#+|f*+j%#3VqF-tkUnu$lM|>pkh3U zPl9oO0TP3R1lQ4BV#p>WH&{7u}cvv&&nv6%jK|D%|0+IsRc&Ef- zHM@ih0Y#?8a9eQ8u0)de5Ne>sjGX$au5cGWwq(sQ9 zAkOd{iTn)6GXi(p1%h`Z74mb;&?U+rv4Uh!xgokJcIh84oI#?mu{@c5N_}uTQV&OoX9IxC0RyUmRU!bF3onzCUvPn7K5e6^ZZ0&w2PN*lh%HTr z#S+u8tzPiSi+3LtBXAkB#V-@Sdj`diOHAtU1D>(HP(YC;lp`L%-)?bvg`giDuw`)UI#k4Kp+{Tf$s^;SQnm^;RJVW8 zaf#R=ATUwqqAgZrdl`x~mP9|ovoVEQO+9~Q!bfRr@A4M7XiOq z4#i7sb_C^a-N3z~?E|8o9;d(>m(97gb+oEt8J~%B)d^Bn61y(Qjj(O^vwjlyTe+%M z$srmhe^Wm&nPj5g(Q!1VD^(-=kR z-3*8o*&sH0Jh)x04pZ}|<|xH@-Se$`Z?aJL+#RD_cB8hQmf~SwSr6Km;gIH;ovdSk zn0IIWGBsD{ev2uMn+6IN1q2hO9LSrH_`q?YSFTWt4`=z%@QM~LflyFWsU?nDKFk5S zV{yUod$H)blo)xZ^Eh-6)i2A#%pL$bZ#PZ~noKv+ zpMX|k&W|EdqcrINsVG{(#*k@JJlR)6?}vqa*#mK=`mI^v{EW4}Xo#9zJ15D z!KI+d+p){Q^E>vsc8fdrI(VejNlCu{OQxhy-adstsBV31l#iq?@O2v;&m;8P3uL1t z-~ue4{~gw43tU@x{%$`oFTH#(BS0?w?0@M#zDP4!S`0K%1oMlIFtR3gYf%t4+O+ch z`*hVz^m+>3R7~k$s8~mOQ|J)869-v$x=pV((c+w}#V*g-sm9xhga!pA$#vJ)nULS? zhrpeRVAhfi{<29^0()C+#=@D|Ue#qatY;WXYSL^w0H%-By)O45D0uY|BF-^O1<6@}4eHvqZW3T-WJs3+-%ZbMbs^b@a;zYfHlCy%9(@aB%|w zdtXqy#`ejRAvv+a22o|3!pSYPMw|te^hKpeU|m|iOjkz4)ep|+VO7uL)l9^Ic_Llr zGaxP{9dC9B7?EH)svyOH5rzT{0tMZDnMRZF zxYMaAtT7XAu*SFcd)$j{wZ2oMdPgfmxCB>RtGFF{ZLg?!l*d*0?E@$z@cyk1M|PYo z_8&-Y<{s#P1I~WS6qz0C1ec;Uvf1ws0G0IO+SvG}+ZIi6&Xdgh6H_fmBvY8P$F-<` z6~}eaH)l(bY$?zPG>}f-%yG0m%T4uysHh*LdV+-c#Tb=I%6$+XJ3amWxEw~7oL zTBCFXioQ?rD|EuVLloQ-Vjj-t6xeRjS{Ml$$y1D5u+-;7Q+oVfb>J8QLB$tw9|DLh zZ$uP4gFtta*Pv*=Az+Jk_?SnzpV!cMjTtVUrtKLtw`(bR+wI)NHi z`coEjK``M=RdYn|Re}wIIJ};-33d=*Q0wYLzNWV{#q(nLvTgfO9}x0jfM7*Is5#+olm`!{WMYaTwv67S_tbuxio+4AZ96oYD`s5%?W5(!DZZJFr}I2f|4ylC}b%SeR9 zCH1W*@un0Cm=YjSvaERJh1mu!k;mSE%<>NjR7RE4Ns$ytdL!%)x^3eRa@bUWSnAS= z0OA1-`PK#tcsFel#}UkvY2Kgq$x>bXSO%J4otVZiqOba}mT1wbEroij7-b>tv&r>d zs+xU;wc?R|0y>9ca4{u^)yFw;9+sE^2?~>FVjTP({&1e5{1!L9^Y2h_**E^o6Yu@t z7h?-&v)|ciW0x`D2uV7;JlBK1tK*rvs*Fzv|_T%k_#RBRARf6`BT>eSkUPysqchj1C9N2++(5E50xy}Vaq zEMn$`OlHN)S~Fku!8_LbFGpJuvUh!uI&dM`KdcCfk9NStG>NW&g><=wujVE-njbCjY@fBRN*ofV= zPA(Q4|Dm<6+xL^TvV~wg06D%+mWSZ7sFJ=$M}$*o}S>QggU7>0h4pB%&B7X-KBPXWV6lp%cGLlP(? z-mSf`Yo+C0AI6ZDxRW#N;4HUwpb@F5`W5YN9LaHsD@YBOw40KFIs zgfkwhqQc5qCWaD_*6ycchlzeMR;efl$kZcz z9xoqcGAi317#?qEmW#KT@KK9rmysEF8zD1L9_7f?s=_0zwfl(d*x;*>Xl6r<+n5vx zS~^q`kT=G_e={oLS4Jv!CT4DV3i|&wXjji-o6@Wx3nn|$ZY-@SojASEhvDsgCHz&Q z{lNNzNTO=G;1}|kn$M1Nj(SO^3nrr#0@K_xqk&VA0G+?_^E$C;zwAZ!HNpanC`EPb z^bq?gkwx9#q%EdMA%EZ0?wHP|soKn#eZ}#l6r^LCw6rj-DI>;m10ZR!i@x!k;nFQV z8#P2YzO{nMANJln|1$@S*;DO0f91;?{{OYwhq>RYF>{^+$OtsjTEuc6`*@rcDxQ-R%^&)Dn zPECzk)=n2wmX(x}J_)ww=9q$u68XHYH+J^@>uh?rmud-+G$MGwirett?nk-1ANwC@ z2`|T-y@yG71~@xzMv7@wNDO)fIN5B50(j{6W8|(NzHLgx270&khQa=2;?hHAAu@&W zwy*E%=Ff|wRN9M0e1HHMObK!sfy2xLT#3ZX(WFD*%k<8TqOML^wBDkM>bMRA!r{x=lsYQjKJ5zL!V>9A8V8$`%&k+-=Ye3H2N4_e|59-RYLhwq*BQB&u((N$L{dIP-bf z;<8q_;^dS8=V6>KVHZ->yUvKoT!SZqnj`&4}FQK3^xut z;==(UIJ(CuZl+a1T7XcDY$8VoTrzx|7`hS4e3|{#G0Lsez zuJxhHiHR%gZ=SI*m|U+7KxD|c*(Ab|CWhDXfXi>nFYseANVm}Cm*SMF$`{6;1Gk~P z9@oVZx1YEU3rUET-iSZNIen=T{W$HY*C^ZX2Rn?<@p3{wpzGMAEaK3<=(O4yO!Y`& z9~sV$BAt4Q(S-_3fC5da?MI#PB;<~rGg%YaULUUSw|gH>tt=GegOWvGTBrNV50Ub* zS{}~t2_b<_{qh8g;tZ-N5YfyR;hW>)D-GP^NVbpnOPvh~NYghK71gOlZ5%c@tyr0+jr=SjXY*3R`L=bZ4gBYurO*9@9plyg~V=!#`9bntFKFe@6%Ki>3u9 zzYtd!mZ(a{NPYyJs>vIoMM>DrOILi0TP-QoutJ*9EO1LMau*D4LmS0d-A~KfE2tjf5l*fiUqjfNb z&z`6qD*Y#wz4t$uKlFmALNzf*#K>VJHWnJ0<7BBZgf2tQdJnkA-?cF0G|9NT-EN0! zx&O^QiGF+yz5A3kJzPI?cRRpY$$s{RZ$UC_vh3x-h3Y+0$-^(HLkQ}<(+tJ+Wudf?l)v3lf&+6rxf|VB zu*-b?Y z#IwN5F*4tn1joLTn+Eq{aPWV+8Qyu(gjn$@Or0z6(|`W#@@#|nO2P4wmru5xl7hsm z?K8T0qfBynk(HCC$Fjq~64L8O7y4?f+8`919#5UTCY__mwzsdW$EDmg=zFqo&&;k| zu}AUYI~0Y-0mP;2nd5fpR~g|IQDk$AQ3mWBfDZ?W z9o|c3+7<3^4A5>6L~FJO{R)+2usZwI7GDdNww)k|yZ{@X-+{xn&>AV4AAWcR^3kh6Uiw2?FCC&9{a%EGb}L z`?YIA|AZ#OxGmk}aXxJ@ZK;jD2Q`OOMA&L@O=#Z&P{jFY0`O7$oOFbVSPQFn;>&@- zm?dN$c>taKxuVsnMF30OKyFX|lM_4{NC&5zExjh6CCIt`G(4ysDjX4-g<%TRbdMzExkF=)7cA-jbnB+J z8}7!|2FYgiM9bl(R$R$ssNF%c6!%?vWSs`zkEfE%HsEKfdhq+wgT|6+DYSobXw2IN zdk29mtLx9QG1~w3a4E&=bfYmG`N-mP^-8Ym?Gn(tD8pPt<(7uaj-VU!OY$Jobwj~l zWS)vuL(MlO8Xq9f6*lp-z>%&1{o-2qY!7@Ra{nU%XrJYY8$Lv+EG z8r43um%8%jj)EE_yUa?)$2}!gin;0Tnw~>SFc2xr_>jt{Lq~o3&!4K2WX(SoNEfCw77$5ZtVNo&xtFd`24w zUl$fbCgps&+=W$$T#wkl|B`}+`?a?)e4!HIS=-dfH*R~oJCw z{5BykpNZRjDd21lOZjnwPmB|@t{@x2scL8ub_(FXz#d80p(|9BRgb9{WqMz%eLq9`A1J)qdiuvS3jy>n9@cr>RB$kv7K&txn-AW{xF^vyn3W~K*!m_GALeyG zooVT75D>d=d{s~&ST`a!b1Y)QId^+`Uit`6G$}y@v4Nc73!93WYjD)J;d~che8j?j{8>k$6|n@$rw(ctMmiuSC8|qzTA?CcMgBOY(C3D)EM)DyG*lU4k;tm&d1fr2g6!|9^p0e= z3M?eqe!2|sekbL+tLr~tWrT*hUo106|5QoX;IR|c7o4^dq(WU>+?sI7BfIK*4K@u} zhg9Zebr$-MHiZ@;AN`&>p`*#!xMdhaU}+3MV5SeEKb_;Gmcs0X1Rn6D>#fH5wEZQ4 zZuEoFi<(E=JxG#Zgl*1r`xWm_&*(=T|>ZOS$avU?_V zsoRG<8oZIvL&qhZPvJ#)JGUw|RSWGvc6A#PL1jAMX01`&dnq8QtBX0_?jgV6W>fig z!i|cps(ohHDUH7V%UbyPc3%HBr^~EgMKLWmR7S!eE^!k*{%T_>%KhBw112Q|wrphb z8vvXy1EISwq3+RX7uhp2A}%zK@+OBX^)=3MHOptd0bKb~&X&V>H-sxP%-?Fc?G=tm zZ$2D+6lpPWp`jNn8SlO0*5oL+MW2QIxdBy2{kTf52SIaznE>(|%r9KdEPcT~hyV1F zi%Cb%>v0n5B2&4_0}W}30M?PpBSlWXWigE~8mh#jJNCP7mqG?jTp#|qYjI1Dgex2|HB?@Y;m{o2l_Y7=d2 z2Xg#pAn#yX`0pWE-269>40J~?%P`C;2gf`;=(N`21hqLYN6mzB;G1shVXru=m206Q zKfd;tkR)s*LNQ_z8mgLw>`pp$-5_;5}-D}6{Kj3)l259!;RSEOz^RE=}Xu)HY z85%y*+iL_KI^@IS!+vmJyF7H6Lg&MTP4HRL?_qraQa*MPadKlbv;~sxB9hfAW?05c zvLT3BQ*Z2J&iV^Ztl*%DFB1g6B|nwFPWtJ3(yusu35L_<824S!1gVE4P6-4<%xJIt z(M|fQzXXG1rc`J&Uo_4+lyo;ocXO3I*f1k2td^iD5=T_q&bN($$I#fvN%24|xMxyE z3~qG^7L!t6sS-rZ#8md^1P4s>M}`L%)eT_ol1owWw~kGCK;)qJ601tE&;iM>B&JxdA;p z6ge4;?se^=A#-0{K-A-+wH?#>sVLtG{I*vT1ZIa7|FC%*uJzk%jp6C)TLgBEla3Gw z3>oj`daK0WCBI(gfCfJ|48xudP#6z=Neq=MXldXKZPCxelKE1>y@X`$#xZbz3C2>z z>Kj@9v$)jSl~&iQwAfI2gKA`8cW-x@W+haOdRuHiM6;;MKSY$lx?@=4odzevcyndI;HxR#I7bjurkRCIt*VN&)u0JXNFIzT-!}oWbFPa?_hBUzHW&K z1y5%7X@UJJQpJaU<0Ho4l3gnGe471F= z0Q3;_Dnng1=Bk3AOesRKsf+$I)YdEtI&p`}+q4QyS@s%S25M!I)d1zo0pjF*e0rRi z4fKzs(m}I;L9m#Q^y|3(4-wy9?nvTsdY$T8F|;V}Gg!gXAcY7&-?`>JD)p+lC?4 z$;Gh7Y+d(Pc!mBhP^0#k774$mZ5R5P9zonho42gnvP^nPGMlEZSR-^s zbE+Aw^^Tzfz;%;#*_pze*bX)wS9(5Al zmpg|8fhZ3?7*@jEW(=XEtpf8&^7v)HB2(7N?++|aHCViWIZyPo%EZND|I!LHJP+wl zta;`9Hp6-qf?ih? z%&`o+ZWcTRguzkSjv+oZkwVku_k=h?ymO)kYh7pWfNf5+tu}ASIV<=oP^0;82#@ex zO{&Vqid|r`T&QAV$w%%q1otS|#h*+f)Y^*L3;Ypa)t~|Pb%TrSfHH*TbH~LHE#yjg zQHZ-5IS+{u;2!B%7f7+R*M#(Q9)#Tx$(FeUc+KW$GTn>Iknf;}yNhG+vf7sWEJ)sVxSh_#9;|l(=p4WcvwkXx+4t9NFPe!IKwz>~OY~jn zTx!XNxvd5~U9zx zoCI9$y8H*J|K-_4WP9;=MStfxU-=839q6%K>oNja8T*`!G=|9unV;roGTYiUnN90km3IM zd6_kSR|e9ULK)UZSoLaf85-+MVfL8oamccN@*-i*xg7yq=ld+Dv8(&31r5ZD=OEu0Ri)a z0fdRv-7CH_JxGjcVw#lVbnv&Nz}>RlR2%e({oeyXr5LB%G=LPPAk883oN42ofS#qMKu{vBy3i& zXxBAa>%wuu!+^5^EDL%^ECUpFke26QZvCCjHz?LIv;3ntJMCx9QBr@fmXpwGehVDe z6&yOFD%2CaDRD~DS;Z!r-xdCUTTBfIkvYLoztO1QxoG1Yb8XZ2poUb6@j1{v%85lc z*bUl)^jc3?!M+F)vi>i2)GA9q(p?@tv?1++&44U5TL9^f?vyprXY-%4g$TslqCO*& zhAB36lK$b&;Xf^WUGrl0i}DRluxmX)5rfDRoJ=*_p=4sy!^w@LL^1UbSR>&OdjbsD|Ns~?lz4Ed}|5>MB-4{OO zLy*)f%)HVOy`adsg!@v<|DaTsO!*%em$QIarhC@&5Oy0%YO-5!g3q9MlC8z(3c0X^ z#?Y_YmE_zP%6(>N?{Ub3(I?z8>uLJ{)+7oSSG|E1gzc2LTjKw-Ym|hQ!$Zc2#L1>} zLYAzo7Z7!3#0VQx84@5|WOmmH9QWSF3V>~RSaDB&fyrqXEt3f{JqN_L}sW48?M930D0KC~_Ud}8vQ!wh1B_UQ3(eO0# z;Ty@qf4&Z_;V)IX_>X~y(nY*>NE`4K*!`Iqo#V5=^86N5YEB&1#SZbsun2zXn2YB} zQ5QH<dP zTIl__@!!NJ@f=`_*=IU;Cr9R~NFo}L8dxWMphnS!$YB{mRkE2i|CFc zmAE`Pi@9oMRERZ;RcjiZetPB$haZpY+slDpk9WTL9Uj%r>`i z@>ZpS)INVBg-a5J!!ke0>pv18g`kXyAv3LcRVQro&7{GIaIy)SaszdCu`jy1^SK_% zutx{vjL(BpxJ_F|nJYN)|y6rPMNu=P%Xe~Z`+o~$+Sv@=5@4X}5ANe_H z>7}K7$tY}aX~1O2o<(`Y-X{^Axmp994Nk=~4AKjbxecZbbS1Mx)CWTE57c2@u^rXe6Zi%~RSbF%nmR(xUs%!BYP`lJ?;;|^4gzsPJ$q{$Nf`)ur)?6O!Ep27V_ zBuafCC}bCsvaq>mBx9h}u7_n1duY2UCJ&I+D}{E+Ep1s4jBsW>oLDk|q3EVGJpp`l z?7c0ITbQs8Dn1hYPoF3leoiC-X#=BMa{Ppo2q***EeW!YjX|uK4hIeTgNRl3)$>_^Hh-1^hOaK@>4;ug4m8?gCnzOb5~k-Ik`XK_fSw`$CvoY1>uBH$qT z>iCE0Yrw8f?o`TuDf`Gq`#`0t=#MZ~s%gV5sGZ5`9Yp6(*%F|O%`)7qH{htiWeG>6 zTT$yudIY_e|0#=F-d7x~RKY~Ql_f{U{5Bf{C(V21L9d8sqT|wvP6R{G{~22-6EhBv zsgVN)HLWNTI%43mV5e`{D61D6GGXb&XXhvL54t$@hyV+=g#`o*9)ex4z;8AIBw022 z%5a*_KbQJ-1V1;HsbG>wb^!F~&;+a1Oy=MS3UMAb^MW)zy3$!1gLEY(`6KZCL>z)S z_zb*CSj27t40OwsB0`02hX_^$NRtcz&^O$&+UY~6_`}hipwbC#0z?g@Z{)cDTy)@z zW7ovdn>zwk!xLnvMR-A)RtE@K&QrNoNx09eTo_uc@%)_Hy4TGm zXnTJ@%DLbx{++E_ADPQL1C_)qE0jZSfaqx_bMF>bczXLZdU`$wFq1Xl-uc8@f4!Sk zCFFuy(jq)vCi7zv^i2$bTa_q`n4gs51+cd3E=ougZLax@?_1rTu|nPY*#TcPG_!GA z#o$1Y4vt_&TB~~mA0J>)_YxSL(YHF32p+uT4jZ>PHjCUQ@h^IV{2~wB0^Ma6jtyJh zWI5Ws+_?P7U{pgbE@cKyh65x;3`R$w38Uko>Htrl7+GHk9U&*3tc%MTKrLo3E31UW z2nBTE-qCVyG**}(O-)OVF6eun*sQpXWnGx}Z)o>eHwR5Y`%l3@Xaa0pf++8M&pbB7 z#9c5#T-$V-H?Mq%DSS-BZ7ni&?U1iN(CdOt_<_=O4e4^~!6B|L-7d~VCwNguh!`sEm;EkY?O zAKFRePBBi&M6F%KF4y)vOmfX`9_MG)(W}KTXm~3QtCR2ZN9tTPozz8m{e3T;jf}MT zPQUiZ@e*9NSxlnSfttMsxD2DrNwTz(8PQ&1MUfVjbP(?u;`dz))_o{~0>jl}YZzXJ(DlAX0T^^txiio7F zVYx}d94iOLu!gW9#o_R&msa}U-V+9SZ^q+jdsElCaA45Od!@*?t=+*Gd7MH@VWJFu zhI^>&?|@_K4(iq!u6dcnmd(A9mf!L<{MDmz->I4}y7BP2P+&1;D2(}(B0|V&U(94o zueh69vGL;1w}a=M`MXvJICEJJEiqpc@viod?$MbV9`XX00iti~m<(xnWirbD!UQ8c zf0Aj5UWOn9Z)C^oY9BHhS)Km_EZ58E;L*41@M*CI~y^fCSR6|Eh4a9iBl`-Ih~Pgyjk%Yr&X_uOgA zgq+2GeRD_&rd#i@OtUxsp!KW6(^NcqCfCJtUgTiOpe#-iDR(W!@`c1%pg^L_^#bUm zZnZ?rq2N-p>Yt=!xa+@G2ouB{+=gIV8$$>9zsSS8*5TV)Y*ep-ag6I| zrtYUEX@VR*H7mHi14BR0mQr6^U3|HxHnY_8GzzUR3{wD*QhSq`|BL`(nV^GKk-!ls zHs4=gxt*wr7SOfJ=UkF7R~IX@scD~^Ser{W7DG7XZ@dHD>H`af!){|k3&A4FkVC*C z-mpeB?O}5xS`-77lr|*_b{^39tYLj+w9Oa!CIRYwu9+XWD>>teuxqjh0cvvaut|B@b}_M}Ye@fQ#j-dF}U6RdsZO@zNd@@s?d<+Ap06OuQ5I z2?tNz3_1F;h2T~R zKh~59_G(jfAX|*@3+Ep;w^32{{h)zT(ok*)Il>3PPaQN2Xo_rN!sNtKAHV}O)#%U@ z36Pu9Oa9KUGNJEN_wne?@}AJkq&6vJyWPLyOr}yOZ;0SeW_$c%k-v`D0@P~1o=DEU z|3gdIR1e0Rv0M%PW^v5qWWRMGLoS8ZnZGivF8#nHI=jew36aCTMYk6$)RMx8I-n=LKMg}2wuJvDIldO_$ z=wI660JKGfH%y^{zyeznMt`;d$fop*rn`Yq$mt2UrZd4e)VMcj3AH26gV=MVzm+%{ z*2#Fc1itqrr!g`z_>g!`)~`J)KOaHsNW($fOC%rtj)V3?x{9dJw5m(^zAKGjJ*0ma z_vzT97QA))H;s^TnYo8E(IOxze^?My(Cvs z>lSdxOg&se42+J)55ZDtrBRl2+Tj(2Mf7Lpl$C||0DSkP95}){ zUx$p-ffi`LZbqw&Lcg}?B#i^t*^z=4op$(zs*DD`w+~hY#+^eB{EYxzLt*$?G$SIg zjV_elagh5DqQw@n>zaS+3e+|Cr}L-~`^`Ond_5uO9XF$({vMxZS7`<~Tw*}p1I2rF_rMaxi; zA&m?!XC{j7m7u=VGGp<-t=u-XDsAxjC@m@Qz%V%;UL&%ve3evo0a z8$jM!W@A7hK2-8LSNJyb#nRT(znSC5+jdIzkVPju{6>nT*5N(R_|0NF{b|-tyY=#) z|I7g1zLFiWkTAW=XEd^=7@AihXgh82lPIVBK)p-3n^2RyiH`+L^DH4`#= zD`~A)8Ot8kyl=+I2*yw!PR zCqYEA+Qg0FX?YYxOmhDI&)@Tu2DGZn(kxQ2R87Upu--A?uS$17L8>|Egfr*%FBby= zU)~kWHfkjsJ{fCBTMp0IvO%_sLq~N$UBL<{6@NA$_7!{R&!k^}9~*U@@^59zT*j1( z5BncNmFr3K7h~VGX5>@?fJbe1Gaawprp)!@D?l}&*NDHC07@Hf>DXI$LSaOn(9G*O z3$6=FsUYnP-JT;NfJwrB?}+Gp^4|f11wHVvJKQGX|JEb$xOy#0lheJHZ4rfPRM5`B z2mKzIw&1?sGGp_C;G*X0;J{GEpe8XM>Mht)!MnI6)e`Gw#IHviuVQ`gFGhdCG27yNNt z*=gr&ry2JeTt!J5+MlpNI9x#=nSwS;-N)UAv{mGR3SX4IDgTv`62@?q#%a(8a2g^Q zHp-IkX}!%@Zl!nWp;a}t4`s8Yu%v&H5@%~}wwYJbv&_nwKv}p-S&33Bf|U#2kHSb_ zA>}&m_L5{WKg2J>grB%h50z}=t_i4gh-`CoJ`Oel{9Es{F#H+zVMK+(r)Gdu)%WUS zu`B9E=rsj!k|OQEPf9+Obl?CDUSTn8FBNBpOZ%|$ka&O9{V0$!YvX=@sQin(Wqk);ef)68N@b74?Q5!E&){#-wU zkRb{PTB8j+ex$$}&qr>5)Q?ICC}#Y_tIJL)%tAas!r^<_CBbHIMlVnELHS-5{qxkt z6#$gpDD`|pNs{8dzVs?2nzd$_nh>e9YL3qwJP%t{eGifcdJ#_9^=0iNhc3PQKD5u4 z9gAE56A4m4-|6e_PVyeQA5b+1qHCg@*=#l+`!dgI;NE0YHHhBAs8_lKmYP)F;&p6@ ziAE)VcZTJgr+rt8UcV|k<9d)E&?GcqS+wRFG~2OgEimo*M#CFY;Rm<_Wc*1VJ*w`SSn&L z+%~sar+~_POSnG+q1Ro{Nn3(AN7cvgjC8o$!klN5Hkc&luF0HnDO_bghJwS1MdEO| zFxq-OK;-x66EyKe$H20dkiyk;ZKt`DJ%D$D*my`?MohnX5GFj+ z?1HA5;89DRWGNv2*YRB~!>}xLm`48dSYTbGBeU7b95U1nNFXq&t={BeE1>#D{C+d2 zVe{FAnE($TT>9Sc=if^fo=CmNJbb4RpZaxkM>+roR6v*vA}12Wik64dB&_^Kxb?B_#X%kaiSrQ*xlfG13c@-ImTv**>M3;e+T~B{3LWC%gBd zlejWamKW+Ne(gc|dbKp88)ED8-qe`FIw#TDi{6={Stc4s>m35{KAq;`5_~S>MIG=P z2daE-S8( z@N&H-4blv&sNDjfPTK1m&P@5G$fw~f#0JZQ7>9H%A787F8bk^m>_#*Wxlup|4EyvC z#akhWjz%n)XG$(~a}n@=Fs9GwbY*RMaMZ&pO58|2^*BSKn*>%!(GSpLtQ>co=>IwR zWRTcOK#SZ}dxe$U0(DOuoM58K_wH&&ee&BWwLc$XhoY5^(Hn1l zz=I`j>|Q8SvwI|X7G|LCe+&YVVOFl(b2lksi1psH@Jax}tA}|>2QnC)xsuz?3J=m8 zO{}*lTH4D?7F1~a)Y!v1$Ufh=_+MvGnkKT4HuA6qbZVLXFBVwkz8`wz4hFn8R}1&2zzg-CMq%vpck3K zWoU^2LHa5FK$ov7H9F4v;W7SnnShS++d2&DTFzk0LYy3be!O86o@ zYA6($a2~c};Kj9b8>NvGP9Q^o8*`=8C=)IP_jAx$dy)t=L>2 zRt-U#mbb@-m3mT458r?f;+`68>!Pzsu({)QiqlmZ{ODJ=c)ln~9>1_7)`yPU)ETpi z$4cA!<8c{;=RJYs#wBcatHddQV}jSct@VwLH6+kyHe{f^$)&WFZgDz z|E_O%zbk<5|1@+Q;;^meE-8OBqOg>-o?oxj5hpxZSnQ?8%k7`7E8y|io95mnMQ#R3 z(s`NrEOAqGS3F236@g_>TUKi?`fks~;o;DmCSS(`?*duvk1W{S1|<&{ovqf0F+T|y z=kc#)_+w)~UI@`XvxavOAUQ>V4q<_BKv$Fq@HnGHBB_bMOuE@N@n!+;2&UD4UNYY} z&JrWjn}>Atw^($}ylAB@6dYPae7oQ22A8vzyd5zzUJzddx$B9QmeT@wcl`Df%`e3% zga9>|MArm>$mDMZUF7YN)0L!9`5Y6B{W3*wU!~ej&l#^#-Q`~ELv;-u!W7mL9`XG% za&xsXj75C(ukP&QZjtuGSf0yhQ!wQ^*7Y9OLCLv6((=R~{hT2*8JRugIETnASp-`A z_xtzFDm;MPEgaRn1r?p_Yrg4ULy||z2bac3;<55Wa1$q47A@fmuQB2z#)=;eAd;`vf+`9cUt|D)cPLjHTX26=GVv$&V6qG@<9K8&GV@u<9 z07VF%zp>@5lbzU_k%VZgk~;>{D*9QxLe?_KJX!hGsaABjf)PGkWPIRzp#%eaAJHvJ zg5#GsXufIOA|88lZN>}0~B4FYetL=wjk_!n_`1}UayQYKev z-3Y7>*nT1zrlK?j{OUJtS|d1q8eply{SsYkQA()w4iUny6LA?0F|J+_<1@S<_>FoH zSgh!FE(zAe2jf)X{%uqt3KNRyIf+NA53|q+L}k*JG0}VcS!|}k!rdAl2;Mz1C~@Ey zWWwZfAC>N=GGpgK9Ff83j`J0xlQ$H?3Ck|4UEjk`Rv$mCm#cNkYYO`BCMM8WYKK+Z z;a`PeS?waN%tvxp{Cuphv5kBJs|*gXE$R%a`Mt=9HVKn)z?EmL=!IeHY&O?4uxVfe`yG!zIt|jT_-Tg&|fCqeP!XfVy+7$c^VgBt@$i+&4q< z(V`jx;`eD3thhEdi`gip=Gw$ZF!%6MKG9o&l0_-k?(4w(!Dp36qIC8lYowJcN^Dg^ z0Ih&cCCEo{dRA?;{z+Lh93r`Ke{$+$=KvJw8hl^%3CcU8*30}|w%vRtvze%lC663L+m&PfFYu=8iF|0w9rCzL>z4SCf%hwwG zZEPkC`NiL(cnU_Kiy#ze?K+-}$}pWU)A~`@L=2`qzA9)KmI6g#KqFDzyvt*vgam33 zoiyWD?W*8ISNr5f&RfmFf308dC4nLj8hR3{*laPuY=UNfHLkZG+W}c|X;Ahu$WgYN^ZqgOG@^X0Wx3-=c@FG+UV#mDK{7IGerLBHmeY2=g$rMU zcyuv`Puf1Ct85MWQitU8T>b^P>@t3KnRbT_O?|YRY7h3@0#z(N9t62rjH+`;tY`~T zX7Yc9)MW7_Hw=R^HV)6ceJ8{FeDBkfNwnD`jc$=d=m2{Zba!Vy*&D47lD7x?RTsrn zJ82K0q1c~0uOduHtJ}B4#Gv833sH#5Vu1Gw`OT`Zl_vH&m94VYjM|QnG7l(|V~+$- zek0U$1Cxp9f>SyKFo+-nxQ^o0+IHgCcer=*2NLWp-Q1kQBPguVNaKmo^$RP{6gOiU z>)ZU_a3SN$>Zg2iOp4*mG!0qZ($=qpU|eNxUql4Yp%0v}J-g_hbRi%9>k#@fq6cyX zN&ITNd^Rz)uS_k)CLCTp@z$m{+tmh{Kbv2(XB`FSPJgx_D>+N7Gsj2vs!CWJGd)$? zPJl+oi49fFt@NuIzh2b9Zzzwf;;WG6r-uPAKWWzX!t2q|v2jKt{2vk>Q5TU>X3^$X zEgLS>wX~T^Q=jQrq%j*Akn<+1@;Nfy$RU9Z@Nq+^a_3(-;IkY5Y!1>NANSN zaf#D8zaH~O$+lStRp$zV=yS~Z3`!wmqK>ab=8M|i8qfISvij7(^b5_xyMWCJK69fV zNg(BhRN5n8uqCn|}t-nAZ& zS{kgUd+8Tm(@3%}jwy$$i*a_BE>M8O*G_fh2kU>1Hsk6>5Num~Ze-oo6;E3vfB+^R z1}G~KlW(6&ya4k@=y+`6{G=}y?W`OoDmC9qp(Jx7Ysjw?8xPaSZB&-v`802%pw-9q z$Es);LrZ|i-R_rR@lEy0$~jN&;0vh3%^XcDfdK!dD)S)eU3sXt!9RG-fUUW*^J$<2dA z!js)2q;rlr_e8&^Udefnxgft?iVKA6s{=S6mi)PFTozbk*88P{lc<=_sqN`#;ePKm zJkX_!!SZJ&G z6tVBIiGR-YZaGset|h8$aV-2I*~=ZBmz@~k`{#%i74hTbrtd?O*QHNaLrw@ta3Af( zJ45w68^3(!Vd`UP4Z;sYHP@QDq2qdkZkl6|Bn!y#4WJ^Ir`z6Oyag0oElkg`q?V`8 zFe&!1D-Wc$>kl{?2N?ymzS!4WTkA)`p=0hg8aI?An8+&pQ3omdH4f!@3Gy|mpLiCX zS6^sNhwEvnX();UcdYgowLEEcO43pscF&pr2yMQR4C%hr(DhI^fflgOM*XY6;iTX3 zYw7iWG9Z#j)m;2>g(`}8a|StFWlFIz_~KM4Ur1uOo7iy{z^@3@6!$UWX*ejk z0~jK2o|OCbXLQ}j*gDMgM37AYnugEdgVpL!D0>7FDe*=5$UfNijNcSB zU#C^v2r$Ar0VE^_POXZ-om_b!Z)cxWFFgP~2u0c%U}`MIt-1@Y{u@n!^rM~b4+`ql z-@$8kd55B+UwfL}#T(E3=>jQXq~x8x5M{N%;qPF%2g>CH1XF(Z;~~8XZGNR#ZDDj;x)nf| zS$rL4V?9h0$lKhJWFRY|VJv|5&=~IUSys4Y?X=<8hwpl1#$qRzUv`ubSOpcrHaT0m z(87WPJZA9SnY2Hl7`k0PR+%rGE8i-NIN*yNh$$=fxR6&j5_G*cPlu2R;=@-M*g06` zYYvywWCI&bitKQtu*=lax$2hkdbPh&$#P~M58P$=w9vArTvK#W5sKDg#c9F+L;Y+2 zL2q9?-+avbfBewyEpr-`Lf+QPU}H<=Tx0R!k{?{NbH?dyZXo&QjwmsyYNO`l_Wy(ypB6W>p{1Q7j-i4k1>pZ{k6Uv8o%u6bdGsVkKE^@_o9=Gb#lZ@O_ z_r;09#v|)8LSL)&luc}%nrjhTH^fznvFGyYi)!uj5aP+Bw6P$&N-lhx!i{D_`NY?! z0tX`K8;oZ{)MqWzx^mdl8TZ;OOmsH4OLsaSG9ot5*b8{gJ~JO<4B1n&FE_)xuTTNb zs++E2ReOH65^s0kH_VtH+%AR@?5%bOnGZyx@PA7IE+`CY>&o?4yK5oK(AJVl9{Z-Z zk&YEN*Movkgps}Ax>uSCGy~kY5V43z#+s!od2N*_zdkA+mf$nnkf-4_LusltKl)g* zqE|HrKz5O2b~!Le0BAZwt;WIiy8;8kyZQ^Ao(IBxJ%t#pp|E*&T^ZIb|DS5wPN^{O>6=Gt;oX2B2AxR4q0sb`*Oj=Cb}nhIVmgL4E9VrS8r z;R;moW28Jo8$&}28R)|@xY}gHWT*Qur_oscp}xYSN(_-X=LcPu5<-S?bl48V41FdO zSWoUTw>Lw^1_Z&;xVNTiq#)Q{IeI=paS)F;hx%N#9+7)n+dwFx2_huacL3kW*YmHa z-it7SEte&O-a=5a(ATg*Yj$DU6rt#H6ga>tk^^U0Y7Q9GUh~0PiExTr*q~p&!9|4r>q!hrjx~zQ0 zu^O@aR;q$R!Ja%2F-W|a0`OH)oLShjR0=c#(H zf-BU5S#EH!C0mWCC#;=5HUNe{kNUf=)I?Rf5j9hzkf0%%6wJ-F|F8__^qAi$-Bh_=_h@=l<^L zFQGh9;~|ijRF$*WsI!a;mnSI#ZJ8#9KhWCb9{hTCk*n> zb~~esdwd+wNUI4DsVO0?C>2lgHWpzPG&4{S-Tb9e0L(|=6HHCj>7RLD-S;Ku#iITk0oM^i$GD{Uq-{XyBdP#%dvQYu zyUl;dKs~!I8mZ2Q#a}B`4NWmS_g8u;qUq5@Z6V;^Lxn-amgsf;G-65D0O45B2nDRw zz0&jILD5S}`b0(FUOnItZ_%|!7gM+dzllJKv4u(c3jcW837K?S6{QRKIl7!9pvQnw zNPXY(m6G@?b3clEo=g50c=12qhMKJbp{0;}>Ial#*N34nkq8PCdAB#AYxCrDtjNbU#* z99vaM2nZ`spngDy#0W?&PvUF~pkn3RSr%4Pbzt&UNjIR^?sp6tOAo@3W5VdsamG9)F zHxUw<9=l8SJkjcXqf}rOI&D=}eYFe?o2Pd*z`24{@gye4zrVD(f#Lcz-^#k^a82t) zsxx%)+!H2k-ZP>Pg0c)UZER_7lJ+%8)noK^0u8pe?&#-6$BCl~No8n4{INt3RurJEKrnmQot7m$ub=*J4s3XBm2rTLb0Nzd&zyI&Iu^ zg`NX)JM5{zx$p(xNm{)^ToMp!HwfYs*_+82u+bWwbxw2r4QnC_Q9L9)=dL4WbUH6{ z=d^lwf_lC1gyyDKdecu=z`YJp?f65Qt?A=aUEPWv4r=eEu}~MvNcrc)zy9QG2Q|nk zD#0C^p@|(yZRVKH#g!3VHb){j|G+AfG986yKK6Y4A3e6bo{@#>x1q5{HXZQJ6tZbuIWakY%96(&stHer%F1ZYat+ zJF|D55qr6Ka)j2E@HP)2_1K}IW4nE0C zQLt<>7xT^GfxR`yyMGG;fvPuLNt# zBk`V5(thq_G@PEU5DY(dRNWF=p*#{)$YN3>Rs3R5*V(VL7ps{a2n4CkO)Ne2G9a!F znn!%vsm?4zf%YB^LLXw53) zSCP)DAL^+H+tT=kg%;F)NP05e2=+`Tevy$4HKT~{?PM86jB?~09k_x|AWhEd-y{sE z3}$)Au72jGN;u-K!z6kX`s=BZXAZx(7=D7i%i^r`>27WAi25AY=&tt82H zO&C1hT}d$2P9Ef+*qu^5$3qi$n)P)9@?fFMpV^slF72K)0JJl~u~IQRgZdDAqL63i zpTSv61I?<73c0$t-W!&lV##AUp9U^*jyKt()VP#^o7tO66_dPQZ@Bn6`H%ODCBw>G z0^BHIJr~wku~jRf46Y0pyAncXYG+2F${O0&g(5_Zi5q!$jHt8k%?7BOf8)vv$EP0I zjKy|CCvpC}Jb)QK1bIcaxg{qQp zy+)2mz{Va5on_@&DFIcP?eaAojhu}my$~NhRY*Qwo|r1w{t%HfIfW)@^@KUtdhxrm zzJ<2bRufnp4Bp)G>b@YOx!aJiSg8w-ik2hm6$gQ`>O1f#EzT{Qc|2ER=QSI}J$^Ui z_mZlR6Y`Eqwy?p~%z)(b+ev{q+puFubk`AbbEpWXHo3hG_C7JZ0UBbZuNqAcHNtW2!KLNw6!Cn|7On zWS_daVP1ifb?@+BPJ|GLm*Y@XAr7BWQ*QvyxDHUgIXl_zvMs|NNcAWWL<9x+C#_8! z)2hf$f4x(yYK?|tEotn8Gm@nTTD@=>O4-TIiBT>Jdk_pW0S2um{Ex370(cPxk7EBWZ`LYP2yZn z5-dAJp8tm~^2c=kg(jc*8KrY5a;axP-^$Qs?o;I9p-p?wLy?yDi7=GDvMx>o5(GjS z=bRaaFK-ZPf!9t$R1^+ar4{#8kk%!7Jn$5F3@K_px9+A|PO}W% zxvvU9u#_CPe0!nT2;(@Ok97Md_)MaW3!rStCg|HCD~})(YNps25vH-QA!G`l$a3;5 zC0ud;PP%6VHVzQsct({Ozt6BD_4Nq=jr9Q$y}tw`*`uSu8jkK-%^bsg`&Wkp>h@XV zD$693v*FE(dd@J}**T1bdzifxf~Q$a?+tO`jJ+6`lB|#8E`)g^P3N0$z2;*P`<^ZV z+UCP6v5_*VlVXhqXDs|Csvt=*yzLD6rrJP3RZboVBDJIY$m*pRsYam+wR5>AmY|jH zA{(H)I0ycH!fCjv_b&sCM}!d8&z3_=cluP=SR#N@{7rOQ;H>5T$}-0@Nwb{QS5-)s;Bg^J+tNK`^`~3zY<$Qp@>jarWwI)xt#TLr4MbH`7`GR?C zKT{TO@0r>2&Rxw{nAJtV#JWQXJ%2F5*;Y#xny2M>sV{+zthOLf$HY#dKn&tS(TZK&jRSGn%aPE$R z1T7TIM#Ow6Tv1C`iCrbQ(A8}ZMCOg$@vkyQ2K^M=3$ft^s?ItOp;Bed6fw32J$Yp2 zCRyAKSGp@aIzR{pAxvXD*(n^qs|tzl5O$8pnX+0 zxCz9hW8hOK`s!7r5D@ICx3WD#C6RWSO|uJ(OBFHcYoPtw!Z|`U1V{^o-xQrnpsGNd zl>=D0()aIYkI2oxDR!i^-ZN#x@+pRf2Jlg7V0>QZ#%bNc^1Pb5ELt~CgilJXLwJ0a;b=m|iYFA=0B!WAcK?md-_8z`Xrs_@J2=1h5ju;T<^ zjIXzn!+H3o(Uz5+hF;FrgTNvc01VUx<+@5I}Ex57ssgoUI~+6W8-b(19`r1-cJUI1f;wo(U z6avU-ofg&dUGxvOGYl12@T$)A=U=y;3T4?t| z7oADTR3^4PGb8MyfRHuvk(m_UowVPk)p?2nWWSEI3J?Zo zp`B1nw(9TQSH)IHFL?Oy#Sj3QE}C`S;go>)6CAq-|7pPhMYUl@vLG$Ls0>%EB1(?V zsF2mRU*@Xh+dxN5K-12Wn!<*}rjtP>?LNS0BNFvI$_mPc895X41M7d#;)ww)zXWlv zrz%uf9<0hA&!DV&npnznFaNN$rtl?o@Qf>foSgUYl0;VRGZxh&>Qn76LoHZnE<5K# zRop0f)>nxl0~L-AwF%73ox&0}*W?SrpL!)T`}mY5NH^CT}9 zwl{D#W028WjZz1QST&)k+?E0DcMXakA@h`x>*UVXvPBi-C4U}ABE|@=31wfuqILa+ zXd)$UGLaG@Rkn{zkK-n8%`o6GV7br?v9L0QaBAg54ChoIp^jzj;94S|f(l9>n z9jcX9Y7iu6_OYMWT-5!D@4gK;@@icmp}Aktyp1lEe$W929?D#>sq)6Bi+_-Y%1O}& zpNY=Yth2dqNZ(oCtw@MOQSijM zg@BEc`tWs+3OO|h46oIjxw^Gg><{Ux5b0%xw6b0JWSl~Qz!p};>?uoejU6%S&YpWt zXb44Lo;Q*-c>tRuO}JlSKfpiw7{)7&5oKQuYE|4vh@X7}Q;Iea;xmD|D>YbC>&dSMqWvj0ri%7%m9mbtDQUER`Zt56)+{6A` zkxQmzWrDK5^JYr|GR^V@ObD2=|gshbp2Fl00094SN~2@ zG0KMe+2QVcwsDO6?}zk1l_rj+MM6bcqb8^YUvo{YXV(R}1Vb_VlRl0y zMU?|+gM7*Dp}2NAL=`3syZP&8HPq=r z!a0itj$%?)-3!mBN70y%E~|lEO}Lc^vp&xLhW0$Qi-CF;Rd-5LLKL%kY8A`L{UY33 z{f1=tG-0%(r|4-?Ww%C7Ql_H7RjZOApqQg?^n@pL>$6`vD+^K&1WHVFiJb7G(hq^G zi;GkR>teZ(BRg4zt!lX$VN+_$uF zoD_dMnQP^_r-U%4LOPybjZ|RZVc-fd;C{ppVDnr|E6Sv*-_tli>=UHezhEUi7j|+fl2m;&LEmFIDb8nC$3V1$A^Z)_S`OP58^b~SX)X-1xK#)a_-2-8fDogS8E9{@9 z0EH}dW(|Hf{QFHjsi2CVrF4y4Nq5@w6smu<*817?2RR55x8Tsj22n~fT-WXll)B&G zVH<@GF&yNfdYHC>Ap|XxOCw@W$bHfO+LV*1YNCaJWa;^sU!&B0MtlW-j}=ub$d>Kx z?#$yJf0Gt)wc>waLZ4$2_wGpeqo8Fx7_u$W(RV>kLnpW2+Q}6)9t2L>*ep%4$PCK1 zIB(CB^@+qOCkufAopfW!@d~enz*Nc?8f{K`ds*1by^JV;uSMw64gryA(maN=qW}W? zTVL|QHuf02#MLrVYKc!j>lmg0j-JNVOh62~P)e&#Hn>cvvz;Q88Yb2MGn2~c(lysA z32Fu{%-5toAME%7L0d2`002g?`zj|as?(j}JTV1clwzLv6J#Rtpq0rBx9!r>oOez{ zb|WY+M+kKqP}ih7rxjdQGGhVchSC05au8YFxH`TKv^+dw1y=z*)%Xl}&(qGw;lR-$ z=!m!E{T5+{Y3!UE1MX8d#dzEk)8P3){7jfN9Hj5Ml#E-Dha-@!jab5^7Z@0D6%2>1 z^^ybc@NEt$eZ(HCGqKMF)tWXdeO6@u{aBLjg<;i|HxcAPNkZz(Sr1i3QcxqtgY6DA zU};!PIbwwgHnvu_%U-}paG6JqVH}9o8;?W%TM%W3DZ0+Nay*Ma(E35m-2vzgWrRdspQtF%;0{VRK^|@>4KQp z(}klP2u#c$C{fcZ^mgPP_<){X{JlZ!+M~x>ZO~t}`$Ty0;RCH*UOTvgO}9h}BvQG5 zQJ%*+unQ!ijAQh`|FF#$@FreGWn%OiOAj>$7Je_!a>UQThkEK2l$bAzKLj-(n}+$U zV*>mQOyG-6#MFtRa;Il1Bf9@&3(8%+q?+%PhLt`&@R&;JOD1|It?!M*YH&Q(5~@f= z4nPkkGVaimI{QZ^(tWW5RlJj&zGZ!9e{wnW14u@}nbQ+{5ID$xQDr-O3qk z_2a6?X5pQn(F+~66M0+V7UOsJrp_+$Tx{^3S_jDGKEts&_;@f_;RLgNmsJQ4LJ zrLMYph3T!b1ygYuCK>`0n0Y`Wf+K=y0W`I-_N+bUOwmSM`;ql)9i2FM=>E+*E0@p! zF?nsdFqtfjba8r%yVP<$Xr&kE&fR74Uo@CX8pr0^=6x*~5i}OpfQpX?RaAW#kwOzz zE$nfOfni)4y!?kPzd>Yayx!ro^$RZ3`JZG^{fKbttZ+m^hYWOF5M$eBzFfiBIrpob zIZ(5NzZzE09n`$)PD1QY#_C-_8y9h{C;#6rNTs~f0M4Sn(Gy~OO;omy5)a|Hh>YQV zx5nE`VXQKk+SU6i7EZ4&nBFxY8i2{QpbW>{d$n(UBp+WzpO_YjO)R?ZeKj#{-bm%i z_}ebL*e`$p00RIxG(<&>a(bf8js&H8KjM>cn7nkRbxC0jL7 z9bNASRVhi%6AD_$OGw*Y`m;l^M&r9c0{0o0F*3*OE$F>iCli<_DJ`hdY*v=39Kr&1CUv(=JYn#La-3(mL zppdUujou;(3|5>r?Z+G zHOqm20{SPufnPyBl)*XxLmEyo^_=>dc3{$mRh#%Ssr=C}gzQq>(`EXdhGc@7g+xIX zRTtH&UUk3b(T;SkI70(?kuphT(|e9Evd7)OF#VMIgMY+8qKHTEt3J1ChpKwP+sk33 z2JC_M4+3%8u*WS|B<^e|qCYWN_1Q`igFS!Z&5)4QGz=Ao2~b%z;ATzIenbK;wfIjH zSySD&i0P`RX=P2Ic`q2pBdPN=KCWh9I7gas=%h@vl^ zL(^`k-+cd;xS(<|9R|cv(-#dx(Y%?=m z*xdQ1um^}-P%Pz?j6>CHSBwikgF4ei-5T&6WPk^Nz>>YC1m4a8nN0jqC)Z{~a36!C zsHtJcIIdm}X4v4jKEMgFlD=^ylcXrUEFB z?fNnAN&nraLOL2Z5|7rT;9@iAuLKCKyI*rpY-C{`T*Uk9mOon!e>Wz8Em$xx3KO2WBuf@%+9|y;g+{jwpxh?bxb6C zRBxs+H|jCKi)#Bi$FTccc`#CDGQ@T9~H<2m2uMnJ0hoaWf0rt^sqa+h!`8 zu0Noo*upB08?$<2RQXUgcyUhbegX7{5SZop5q)YK`UQDt2^P4jheeo@6mD#cMz;Rs zZTgwsrsza|*(-1A*!q6Nqq0#bxq};twiXG^nIrR|EmP+~6Y{DHQJ!PeV4TkU`>}AI zd$r4$x!Uzvy!K=_cWg&Y99g&L+!3L9f^E2aR43EBBllY0YG_q(kqIywt6|2em*5rn z4cp*W!pMsO8v|&I>i`jPzr!QBqMPErVPGZmTHq$(2ihO#>}Zo69aS+&rEAwD zd3iGaF6CfVnZc;dXci9LKE}QxG;)uK(I8&5&QgM>?(3>RM{#5%RaorhrK*;na&REx|s?YJF!sb>Tz z%bnjuI?YnbbN%a8D2Xo`^j%DnovD+I!?96J&iAa?rmW3DI1{Zv7qv-~`zug-rvueK zv*;3{8Q}W0g?cpYlK{y_RMOd7V}UBIMMr_l#@yQk4jH=9{m^X8m)tf`eW;nvg^pE&GrvEFiyU=vjAi!4E zK&Sd5Hru4+E}^o_-W7iJ(ZdPUx!FxgHVdb{PyhgV+`w=TPMzVSc0YhM2qgaef=UV4 z0ckhlqdY*b78Q_h>*S)|Y3|fimPp~YVa_UdGtMz$$vi74pc9C$&g+zd zEPPh~yIeH`5eeqf=`7Y%JRd=yq`{sM6K3{)Sc+t6SxX;DSWi;t+4Kc!Fc(K=SJFo{J(;&w}g~&8QVF@?&BJP#^pBh^~}E32U0hR^PRE zDya4W(MtqRG~ zo_7>!$PH}#D@N)_2wwKbF(HKfGM^#2(Gi1RMu+-H;=&>yrHfpT<%pJGCuyClaKl#Z zZ`~2hWImC^uRHCF4{E)U9M7s)%z)lJr&T6i$*MIjoNqBQUPZyO%uAQT6;!OR6iN085P(7(dE3zdf0fv|A1YoQG;kU|dZ9-a;TJ1yT<&kK2N@&; ziTQgxugRt>S61ZqlE(rk^NRZ;MeeC&S{GJ6T;?f@g3Mo_ll})~Uu8a+&gYMNUy9TM zpJsx9|DA{YcNAtaDN4N69U)_Ck~}(Iklq~FkeGKF)iVfODh%aCXfp_D0UrmaP#*n` zh|2h%k#c0LWE|M2uE`wp;$)3dQ~hV7kA1Dq+0dK$Rp(HG^4S@Md^J1HWuUQ=8ucH8 z2V~76*gtK=i{PLKXC{f#hVk%~%{`y=5SsiRUt&98WtEGA9M;GtA%~6bKRADi2}f&~ z;)Ut41`_vEzzhGbQTfnpM^ShG1esh(f_`3G6+bz&KH7sdS{g17&-@Hi7DM-299(W6 zT10HBvy?_L8Z{%I_Ta&gC$2^(Mu6&A-4Cy&a)7`;oy28`84`F$tAmsqTMYtyJ14U3 zrHkkBBC{2$z_p1^6JKY&3Wn~P>9`60r9z+MVeO6f$z^XX=L-9HlYDaIe+^PB%K4}O zYwF|V8;S7MvpG=^2c<@e>jRDan=ho>+bwDfqojHAt5P^h*2mhpx{uNOMm?s}53Dvu zYqCkGIAUpEtVZ>Ir4NZ9767hI*QG2V)FF)o9n$}*QXq^v!?URYBCG=(8BoUp2&GF| zMc{dn0TpRWRjLsI92uglUPv$%|K)!raRexoRG8Du9+A80%l%u}d1Q_D@KOESw^{*P z&#S`SbQJn2PKA;J0gvqSOgJ1~m&5bjK1@kjnVRxRR#oM8A?8_oc{e}%rt65so<0uT zUK*F6?knkXBR;lY=Uh#H1W_fZte}KPGrHrelALO}O3bUQDL-v``2A{>=Se~(o{CcB8gDC=eut|3m^OjCXz!YCu6YUf5 zm-L3#aU+8$HdZ$OLaS8<&!aoNVv*pP5uk_e;)6L~CI}1u+!PN-UhNYyn1`IH#5tR# zYsncw&mcRod^MJyH9+8B1}8TGCOz;K`>zyj8vH;PRx?ugW`QaG7#+p9EJ#HH&AKs+IuLlri7E-~-J_&UJSXwN0Ro5axI)xi-VySWN~$2F08Q4D17dGg8?Zh5*N&4omh)WB zTm~rH8fsqd0c>38?x^I06?6ABR+jis{viK-2Hba>Ps{%!E@R0XhPXU4Is5_ALz>F5 zjL9jx=urM7M!xc^bcj*3^_u+Wx$1DMN@2u#s-u#BV%2=wE9t4Nnb$*^ipv5kKR(KI z+M_O*$N&I1;Q#=2VL_TSP2mVb@)*z|I6e>r3ihyVZs00093WuXlq*ut>y(vuH~TviHQXPo1cWd+&SLCp)cx#&BZorP6} z=KbIR00RS5A1P)1xet5A{}o(uZ6StvWc@&FMl(JJd}-)T`_vM_)E00RMPd!E4htWagR?yLYv+YwU%ixOUFq23cm1Q4s3uT3ym|u%pcgF5{gdZKmxOW$h=*?4w0yrQlY15HBvO z(V>AyAQ6cgkoX`yeL_ z1D#ihTQx@0gzBwQTrx{W%~h3}>DLLRhOyFdeg=lbi>K1$0-gfgG)Gnx)qr*zI~ezp zV8#PRwJv5BoNLLsZv0BN3pYay+d>Namf$6^w7HN>bd$g3?_n2hlgX+>9nLluE1*QP zvvINld)CUIv*r!eY8mVZ_+Pjv&tdI^k?|yaQFIEBML>3N&z!e4+};k2ExRLC%{8&b zXETvTtTJ~!7b_1=l9}P2iLA7LRUIJwA)i>xF(88&vW^>2*2NK%1pJj;S`|Fg66))G z2gjoI7PA!aQHv)54uggm)Ml@G&vJMx8-`{Mi(W24cZfu~VvY>g643)84nG>^GUFX{ zNTrB7HnJV6FWC2TyW(B(5;&M8P_8&C+ufc%|1YFb{36qZcY>dL-e}`j#J)u|hx=w{ zQ6J@?SCwOYSxO#2GaYa&bGnj$6gf*oJ#to!QV-AHUWIvPh-4VHNbrh2S(7073ua~} zJnSDR89OYnK7P?N>YTj_H_Cn z4U)k7E>Vm7m4|)G)tvi8{JShL$u9@-14r{R(H*A%ru)(gfbP7Q0UHzO6Z5B>w=*i< zi*%^;!@Y=Xr&D@fNCQn7wE%pu6nmQHex@p|GyJds@!T4u8`DglU1E#r$p-qD z8P|=MNg1%F2MTVn$%xdM+NrAw*7V4m-|%i6;4Xeye;PYkpX_1YP)vcVZxc_Cx|RUd z9^8YJ(V0!sB)|fIw}p`Ep%qh;R(}}208_5V{<@mARLZb#1wMq*KK-O#AW#G;aH?Ol zi;C}+Qr&+a28h7{`v0Ct!Qlrn1!M3eq%5${a42+3xn_!ir(FJD0A4FW=*sB(45VpI zwrqE-LJ(3mZ8tHhWKBQ^q;r6@Tk7q4Bw~nQm{bbb=p5RTX1PZ8Dt`n`_HD>lL^^UZ zW;L)|`HI32FK2V;3VSd1%b+iFN#bS!i7YeWG(!IWwEE;!UkDFjT%6U?uJZiQ%Mvn6QeH$9BA$P_e>AU2 zXRAP=PzCKXi;%g?zeRjzTDBw3S*JNl8qlXK#u8SYy$aF-~8Yd7`p9o5~#)YmFrE^IX?|VdN~Xwi+k> zzRh(@RBh8E&qSRDLjH;t?9aQV_T(e4omu*+#^`9u-*9{uD zLxa)G-j%OjA>p!9{0k?rU%Hb~n#GaAhy%v#uI_%Hl8;SMK>){Bq3yg)g5ZM$-q*Ei zWdaKYIx=U5$5kD@M-qU^7x3!b1Vs5t3Xf|!s$dW}wOse~K(2Aut#m*&JM*oB#J@_H zytuovUcV)v+FMwpq>rzSKG207oVZdU)heGz&-j(UYHYv(z@!r)Ixo%kNdb-pwCS)> zPB92PS%6G#c;)ewl|OrtLA7X6gq>A(ZnmBDaI759CKx8a#o7@udx9D$#xmlA==`mx z<&kaO(tDe)oa!l&5MfkXj!Rbs(4WT=gTDnK%ct3+edF9n_`1|n$+PR>y|ltfm6(!C zIRvn&^ZwO9#GvhsgO|~az$W7FrN=6Cg z>(tLHDN{-vvo1bKRzTMu_U%el*cU=d8y8_7_QoEV_j4&q-E?#0tDaJBWctG>3nsVR zmS+Dg=W{?G=yBq?Zt~Zze|ql>is0c7p>VHWCmJqJp4@596Ri zF)8F-LRN;a^{8$btS||d8#brlaos5FBY1W{N2?cpz?JoYIqn9-r+>(wvUVF6|D3BH4%J zdPRXo^Nd90a@XSz3P#3J<|hf(@hs7}9+|vRsgI;GVSLlErPh-iTlt003nDX?=JWXD z#nW{*U$61)I>7PlSJ#!6On9t@zX6`b5`X?Dy_(w35O7qtvs^)4l$+s%)OEkD;tw#W zA?rqqV)$P~mm-x4x$>Q6k9&)Eh2P44xg^KZk*{HX%=`#99Qf}&SDvJLn0MZmw7-|- zL^MuFM(3_kSH>bLy^{bH`qOGD1I7>+YK=)E{;E+N}GxR6u%un@T4o&RW*_ke#E_JS8p=y?M^VziOIwBh4=CLq$5Q! z}-i0)|&q!wIB0yYeU9WIK=orgQadaz!mJyGpxeFHV z4PTi>RU@0p3j_G$;an!=CFw#n|Mno$Jfn-zj=3vrC~(j59Y?_y zicl7~MnflISg?o2L6RRGB$vYK9;^ejJ2jpN0OvRlcS-dyW{!K^NRXstpCB~`p3a7~ z{J_PI81>42ZPV8+14~?~^cmP~KD^ z_K8b?1b|IxJR&na1SKDCHnBdeEnO%HvM%5zgQz=7HYEK1@|+i=m#%~ms>XH05vG&0VFhp>u^pS-Y&3=DN% zG>eYl7Pl0_6O+mQ4C{U`_sys1w;|W$Ah|R<qV{q3CpXvAhlZx{Tk%a$c6(GegZd35N+L?W>~1xo4;HXXPlNxXi{( zkkx&ri3Qfe1^CZvc&iKmJ3c9kIzIJ^Faoa#F&O8PrSE@WFYzIQ*oIUsj3W8@z^;7; z*UaNi94os#l@zi+BR(=9SUyjp+8%ENd+=z7suIy_%)$KVf7Bf}WbRDazw(O$o0MmY zZ+kYKh#omt)oiDDAnK6?`T&Ig-1(ogjk~miAggi0EmsJkx3?4 z00Qb+V(2eeb?;(n#0}pzwvfsn9F&|kcRQ+G!J4Z{7HC&xZ;^FHiE`57B3U(s-NQ_s zOXuJ;OZZu_H2Ws~MBC2Hzr)92@)0_SbJjct#{quuLQu}P9A$`PuGyFKr?-H(g67x! zAGW*h5xJwn6c$#^Tz8m|OqJFL-QdZE`Gvul0WEj%**fxuLaHY6zur!iaSfu7JJA2r zdqzbAp&zM9)~@JrgvNGemV7ikR2bSc{dwBj($LT~5{vZ}lP8nLZF$MVu-qQHd^=zw zh{u@%#UQ3mb-g~P)uZ~*@noMUEQ-JOS{}n0u?(hp#sloBq~^}(oncK_F%mBzJ^Lg}k;KUHrSqGF@qpZX zE&+W@h%@BL9v>MYq8c>N(&_lIngesf$GXgTW>4GVO83fgLBXJfLS|ItMh9(AA^ey2 zA#np(<6L#GXvleeH6K#(68{l$X(-x^Zp`wx0ecvF@lWh5!(mN$ldP$*#V2!yscJ!t zJQh>1rARXUEJQ9kJxB|)ErQ)kRDjRIl)OOZ$b+pEs)J_+Y| zMny=+=XbFMv5+I3gJU}SZXNDM`OjUOsG-v<0qd(UL5Zb;8ka4uH5oFkAU!sBb5u0U z3(2}zPMa9?U*R{r`{mEvVevQ>K}jMrPm%S6Z5(ykC;n9FRab5%hC0!3x9698Humz3F1i2J6I-ghyf=ml z_7A!`0W4aPL>PjKK)AZVw!q9D0tT1nIWCrltbU&3?5XXbw)QbYgBM>RAQ$XK4nHAU zNZSj09e0$H%56VcQi7(uhWrjCB(rE|mM}m5NIWbN>h+_nrFZ9!EiA*eg9lj7`O5r; zLDAb|N8tToji$^X{!@yev72EX%%{^?}-vePJubS-$gI^H@1lc(AxRa5B6q6HYwT2o%=px@3$mI1=V>*V7M|LVDMvt|p$^E9jZxLfj-Wa|(7^%#*!Rc* zt3&a=5Z zMmfn2>Y)w?)d%G~C&&>t9&u)G_}3~}kjWr46?=P@WS8~qCs)3hyT|%enu%~?9G02r zv8+0TnzDE%CoPV|Qg?~2d)#Sgc%iged91D1_yvV4`9j!EA66Fr%!fC|3{!ge{Dd!v?<2Ja8{3*7i%NMPOSZ5(nkDap9kS7umrm67&$&g z3!15@QxU90-jJU|f%91+-C7z51g|VEN^FF}4bySp83?@_#tb#~wb{O%^c($xWdM|~ zQdp*y)#%uj0qMGY>bWNhZCD$mYpBP@%gms`Z|m3=Y>9lLm4pl@0+o{OaX34AmbV_4?TbSIy6Icjf6ATSdf>Dt;O!R)%|Tyn1j}5oeVV6CUncn z|DHR19jR||E2WpvJC(mnCSCZSdKGU_eH$hR5(}564}}Xn@X&{~@REMwWlV910;(Ww zpEI3;qaS1R7Yk8umEFN1P(UR8pEp7v6K#1wB8&8polU_R>x#hw5x9n#)I1H>#OOoz zf-2spM_v;Wff<4sSRiq1`JXB;qH}gNe%2QnUEkd$h^# zfLJcwY+(lh+q~1e^1R-&grZT`4cxd&L}6-e8vD8iGMJgq&YjPx*F1$-;YqwhOCDGx z4aZWJVe$I=gPfnM`)^Cxt$DDw9Y^{sg^rs%@_t9(+DSS$`u2oK0jE| zx(R6I8VvN4)g1dxMicWhsDylrykSD=$j=ZQJ+=+uxSH(X_Xih)rB+U!a^fI^U?1;R zWONNlWwk8#9%=kznjoo^)NM{xX~!;zv>Bcq7R#>71}UUDWCuACQ<}ZRa0;N#9k|$_Q&~s%fx6*ypRQ)#oH%GR!_2F&caSccVfcRNm(W3t58B+JNX*lpb zV+HdLz6TC#Y{G9zT#zyWX=y|V|Jty#9P?jk^wj6lTDS%LtHsX%fS((|%+24rE>Nd1 zf^L3;c&qM3*(2XRfgz<)9&8~J9uv-A--E6GkaShhw{xRAAQx9VQ)VE-)F6V~+18@L z!pkSydkjx~nQTBzU8Uu8MMZf8BgSGLA>WE*7|~`m4OSSvqT{C6^gyq{6UYUUOkGRW z*5S%(2BvWd*Iek-^eAQ&-4vtYHwMefqjgUTjb%mqbPDh4M$^glY|E7_;8hnUSiUya zTjfp;n_FrrHL&Mx5>fmtXsI#-YAw0B1@nprHresTTP{97ZC3j{BtZDx+8Ztg!JpRw zMWIkV=h9#=oevdDg!Ly8^r-4BWlA}0QhhO>i5TI zzgX*)@&G<%1T8I=^U|lS2H8L=2)>c|$bqj#skab!6^BZf@^c2EFYU{rRr5f(8Cpa= zsPX|Mu~TJv-S9yPZMPYqpo1_iRMGBZ+yJXXqHL7|phhZUw&^_B4`v(odI5dW{s}oL z^8?KccFAL9((drMq zWC*!bNQT-W%bHIV;P7r9`$1m7mIIyQbt}_{%Lb4zEnabVwMNdA-B(6N&lcHLv4q9 zulm245_dp2@s+goepo65!#p@g*ed=X$x(IyYPaNiV-k}04>fnDF?{W(>ifh%{Gr~V z>XJm?w61O3^MCb$LnwkJmB|=JK5fNQ4uV!dS!3t)bi`3d?O}YxljdqZ&bzxz_@{!wQ)TO))CDBr}3AQd0GT^k9*PQXVKftJ|8*9?`B#owyN6vayJ~AYOvu-JJ57ZCC z&<~UC$!IV8F*;${nRAX!y|(B1>L;`UTCPocu2>IYS`R+s+zQqWFzI<|Z6NzM!(D_G zi4H@u#C$xJG&Wg*AJ(xmFcQc#$!)d#cHH_05!P?h!%q*3I;4;9U15aMMCf0Y9i0%d z??=TE!p{G}WG^XZTnQCzjGc;eQx0Z77*n~Ve$rNEwv_)x@yw}`;QSUR7s%SZ2S8_u z1U5IAtPjzP@NP2yc4sGz`Zh4aymSL}m9Q5pir=%bgu$YW)>%(gki0WphStz7Ykos} zCsap3E$rWvi~u-WddBYZdt%_{dOjlw8S5qcgPk7gY~VJH!zMdgE((W!1v-4Y#*dgT zDQkFoDr{m_e=nc;m^CaBdfHZ@}bFKr8FYPZs2+zbuvMP4JlWXQUd*qcoU`Dj=0ij_HbwRasU z?}F$K3!pHeG323o^v9AN;Y%fFR|{OCqG5GaVRW+;k zOpjyF0jrhYX-0;Z^8vVI#g0u8`#p}rORD6a48btn_NY^%iDQ{$qiw{?yMSJ;0yBDp z{jdJb1INJL=m2dgl>^^?=%HxEKV^c{1KQ_$)fbKc`lu&}IsKTfkRgxM9Pd0ra0WrI zMR2FeP6MVB+u!e8%}EFUq!hvwmy+7i#QF-@ zE`ysdWblfa%fKhr=GRCykEC4O?a$zS6N~IF@FET&e~5)u0PD zZ_ONcv!_r-FzN9m;JX6;;nn=rbxA ztXMF2vaeuZQVQWfL^-|~JP-20;ucU9E@D#3^gyP-#PcnWSY+z_ja%JqY`|HnEO0Fq zZHG+fKc3}6tn{UJQLd&v!VQYDTpYNOUS`y!F^3v^vUHW)^1b%%0Sn=vyb;J}rx@Z4 zGBL>-XM2K;A)`~jN2&J?270Moc;?ow0b^; zwf(6d&PQvVC|PwZTkkYRE4EFe80QBnwgNj&q*QS1XrW9P9t*2KxdjpIg3Q*zESy7>>4!R?Y$511nHd`$J#XWrIi< zg`MvjrLTHg$}}AR*hZ`6@K>E>S5f_#;`Yf?LMz;CTG-*>497Tw54TArAd3kUt1g-4 zpHf0EA#Xj_Sd-bj<`Ikd2O{@w#MlG$aAVYdKKat6?Wjbz@T>?oY-GB_8~e;8Vusp1r0-*yrr(&d3jA7=lthd)A_YOG1C_|9_JQ*j~R zP+x%go+h+T|7E8L`L3{$U+PB`^F#W@6_jKcc^LJ*KJU}nikuVlQW{afis*ZxLhtp2WTsQM?D|KL8bp7l&8Lg;VohP`Q9-4OV}w?F@A z&BqF%#6RWqH}8JX35lA~y7?`Y!_I^?Up-PKHy`z$3S3bBN)I6?U_tNi%S5oa$~t+h z%JnpSi~=|O+3!YF?+3(=+dzJF8~o|$mZ)G#FWzjQ4}P#WzT^ZtD#9*IY{d-Np_4eem>PX~sbhZV!xHuXy_%Q+s805^HM!G%S(@a<15_a0M~w{E!U>hj|&93;e0u z5FRNHaJN9USvLTf6(!2ENWibOla%iPM{~e_qI1O=V8q^imp`L{DVqQ)=rs_1(F!e+ zj3v5w5mJCS{ll=0@c!gH^ZU?*Mag8HhRvP51QEHZ0BAqhPADVT(PtX z0Ua+EIDC77Ac}o6Nz)uLE+Lg3#imXA6{EhUgUJY-Q@<%Y65q(gYz8J#g%|zLrbncF zCx_G$%sq}=A{gY~kspGMiITjlAAD)H>{KfG;_ITJ+xU~n&=7mchGXdh`#+wq$pAca zkVakt3o=ar>a%VdgqlH~m>jy#7Aq&&9EWtl5z@^42A_eH4^d<1m#gftT-9dfIaL;R zaE(_{U6}__2bKB6S+cN;xfq3RE?!JC?*LL{V+B-HTh4udp~t=86hsH01#tu~ZDrA=>m?Ut$W}@Nu&*LX57@4F z)O;93RZR%~^VZUPcU+o+$(lRf!`>$bJhyt+o6~qA4L5YDl1*wYBU6n>0VM$GjDc(XWR(byiVxaEK#@V z&C*1DJ@&wG{hw{-P>yv-Zs;`7K=ptpA9c4YP!{&+?@(y3$Te!Y07RC!0mMq5{<228 zyH?ztNbCyMm&V{QvvCQ_UZh^ABw4g#)lR-qFdC@uw_zNbYAInzS~~G%Ed)2=$^m;L zqBtZ!9f?*m-nX$ZXeT>fFhWV;Ti->(`8<1jQZ>{ZX^TZXE1WzgjsWX#g-B6#Hai73B@MR;zuC3_k1PjZ>S4Q%$T$W9 zYeQuA6LU`DIs}XJm$>=2|M9^REaZ3;MOOo~CEyQz#EnE`nU0z~a|)UJupx>>z|2~2 z#Sd(T@w!FRw1N-F%X!j4u%pS)T!K)hQ?k?ppC{pmI%T$ z>QW*VC|jXyOAT@dD0fU!7|e$%*_G%IQe=uf>FMBsP({$1d_Z(m$wS^OlF_XG>J!8Q zGfyS(STkn#z(b(Ic(qZu)=bn54-(Y$z3q*G3=$>03LnNPDi{+g98!{_v|C>^zg)7s zOgdR1Icf(Hr|`m8`(R;%sMO>S@)aJGhS>+xvQvT5 zvX=E{pjt&?4QCA*)V&wqLQDhV;)F(Y{ybXeg`llMsy~42cCE);a7o41WGVdt8RGdV z(GFH@DPk+))V%QZNN-E!02F!HhSrn7+LbmbUqpRf(2cjuY@;C(CzAfla{=(?Z?dTr zN?hEOE-jKmMEHmtcM#CTGE_TPaWJ+hymWL#ot6E#%3 z703=KC9ze+msw^+p8ny&lNS>rCeR(*Yz7UE23Ls>XA0~u0{9EwgAvlRdqMpgEQE-U z5|>r(Psz(B0nPt_p@U@=?(%S=Y3I-G+L5`^Y+ms$lAF3U!3?@467MvHXY-(2tXeH( z;zVFGJB`#C;>Rn00AWJWxf&csda6hkd|J^BX_?|Gx}~(HZdjSjLFEZv7INpvB)YH| zUhgO(%ChbSj#`|3MB}rRYBN&jv%k@EFEz7|xokW1ZTQOU-#D}Kj2}^nr)JC-!xCY8 ztS|v)+fo1Dyp4DV+w@>+ucU^6g8_ckJcc_O@^p(uf=pT7Pr%2g33`Nw~Rs3dSpqn}n5$y@`QO)vCl&Qh_PQEml~x zi5#(Rsvipg8jmW`8`#bw*pj^x`T-s9Aj=k|wC63ntyT;-9i^P?N07(HR+)kcNLi+= zJjr@rI>Qzqwi#0~95Qj006r^QfOa6)FaKR6E{B?sl&zM~20~0{`Hyxds4Vr%Z%$xK z1sVvjg-0*tBu{s*_Qjh3hUH698!~|3Klc~n$^iIlwV(`T(FV(te`eEv>Dm?$QI@f9 zFV2MLSu%t4ST@aoqfk-Ne^9&<$S{4bY^A6FpgOL`+R6MMuU=fn+O4}6EZ?~O-=15( zvZzQFJX^Ns4r1>cO{8XKnx7NUcAO>He4C2rz1U1Amq6%)$4n3`<8kM3+ zTR9Tg)K0E=aDSAo`?iIutd(8(DJ>!k%wtR2+u&zP-8K5wR(iDur-bC}?JI?pXV{$_ zUXA*uQjQ&>(`Hk*Q!Gr{UwyEWDI0l-Rf>uez#q4Z$wWUBAtC#AghBblD4MhgiFfz6 ztfLm?pM*k7V#=@mL&=BF^eH~cK08`5 zL+&El=$3%!Diav;f++THti!=m>d11tDgFK^W?7V7WxIUnAdf|^XUXlMqeqG``+Hn0 z%WG=;fR3R$C<&bh=z(n8I@`8Xr=sQsj}jx+rx}IiZ)m$VQi?^eAQiJwSWj1P6wwj)@Te{&G+E5&R~|tgkm( zPCYqZzo6~D+5`Hsy}WTm2$hF*A9@0N<5Z#k7FopUQ8$T`M`%rd&hvKT! zy3Q=t{y zqLxE6GKMuQ0;hUlcQY!D^$)DW(OHS}n#iAn0WuwXoz)Bhup3OCVz5TrjHKcrahziy zK{8sEgBKDFq7USk35>g=E$}JmnxQ5{*E8Q0?T<$vzMc7-Amd~EhRyls02`^xov$3k z76ud_tqwrbKp=aZXE|*PtZEe2>aBYzs&mg2jDLN9V;Wiz%SPK(crmQ2+hFwm`kC_@RMJ3 z7~fD&?!W*0>ERg;Y74}iLOenfx?MalFbvRCb{pDMqvk6?{p5QcK}w^>4L@C?kyEbs zUvVIjSA5;`Wc;h*gG)|y*!LQa*pp2*PXT)n;Kh>)fQzyd)ht;Cn*)07WzPrYsFzDGrylbDd(= zh*n9yP$TI~h0I?XTEHwdX6nbAo*FVCk$fkb)Kc7`u2j!%5L3!i>;wj3h^zr3L7g@R zdeM6jyzq=I$+q1Osq7UQNoFti0|rOD@jrC!NgWU`tY3D_yh3vFIOZy->yE2@TH{@7grs?RA(yRCyLVPSFpOb#q#QN-?8mV7 zJg-*w$e8BPA8IWnG_`tICLr31j!?29LV#2aedT{at6$eMph0Cf z0_LzY$3xY;tFBZ|ZS$5@1QWf10|{j08-99s#&BPVo*+7cd-0v2rW)-}9>v zwItfB6*dPj)Z@ihkbt8?*neC228PS_BGP1c|D*j;!=Q1j47`Byoi(fH?oSuZ+|84H zP3b|EflXXl)4W+?Dr!!IB)pchYcxU{cpOl61<^q)Ca$>wq1~?=4DcE594PEr#pKY) zX1G6`h+=3UfL@}wZvu7yREbpS{*=&n-Xi2hTb;US+ikKF^5k!xAmocRIsJSWuE(uL zm*WJ|EqB{79G4ZNOvBDYsS*gHEmH)p7_oe1Lsklk)-~pJ`Bp#7C_OwtHkfH*wQyB# zTIMU4HAivZ^>@>#hK!rzCq;#_3!-~(+u<@)Iqe#Xa){NOBL>AFXO$5t>+ay_ydwPo zC87*_C)m^(9@7S5`IBA4paZ-@cgnY$)0d3|p~eOj{y4Rx%wjZ5c<}2!>@fKPpr_>O zS)poYG$$S3SB<1r3a=Xu-%G_klkEh$nbO-xb;vzdG=1$*LXwLCCq@O!j95gTsrWDw z%!%qmYm6dL99CX)^e3$t&7eVCo<1%Ruv2kUQgMh0rO0h@y%@b@?}`TtS!PhS%pv4<5-b zWYHX(g)Xz%jgJv+mh?hGugJs0_hc4jIM}(pK#O6WQJRfCeHh6O0{nj@4iL}qH02wT z$xGx|k4;{`Cv!Y1#(Skp*ELiQD`%viQ-`$YQU9DfT0?v01Abj>U|+|XRYfE+e1LpH zB3fro*Yy;L`x*Ffz7r|IaNFnji0=E%77nLygB#muGr+&zXO2MZ$E3#tpSBhnhB1m( z)Y`W*yg!f@C05GP(dTzICpDlf{iYouk*BsLHS>V^YCF=ZA31juWuN&mw^S<@ENQe3#vRDX=wOiwNC`)hyX7ZGira&Yehjo0|!8HLW z#j=a!n9IF3x2581bj4{KcW>Qx5;D712$G99)7fCc;DjGT4cC@K7ZqZjck1=DS^;Qe zgi@M6Ug6@nMRi|3Cl#)t$bK&oH3C3``FV3Pe5mU9A7e?D?350tLyoMhF9QQ=!k0%kATHLjeIIl$YL>*_Ss!DlhJQBv) z#ch%)4#bj@Hlkt$UI5i|$Px%_wdTPCWo;)20miG@8QrLTiI0z>w=#4pH26=Cm&7^( zm9l`loEFGtAVJN3G}G?vc~}&dX+OyjL#KNh9SX3$ii4k~bDM?lbL8O}a&n5IO#3%} zZjG(lQPvKm7}xD=fx=w)FC^awR3~hyYeGQFvUgs$NupkQy^|$^vD2KgiDyv4w_JEO zMDS)koJ=tH*NxoP0kk_8(PhiEvLVGdc=N_e76Z_tTO(*;zh0=tP z{;l+P(zO=#SikO2as^4!y_F&jiram4HTNpAU!LpU)ffWdyHH`xXiBoV;ln;AxGKQJP2-=bw4>tbQwLO0yFjwH6UN`IC#akk3a!kl(-`Fdn=HylfA4xQ+YO7e3OHyWVT4_uE#f~| zExDi<$^{2PWCVqYm^<)|OUmZ#YY)=%UXrR)p&`(JO9&3RXOJ+YTR`br$xJyS5NNPS zkvEGdft>sYs~;*)&}kFseG^6d|z-V66?(5f@9@nB}s|poE(T3crl{K z_7VujwWUsmmZe0Eace7iqZ16*ap6g0Cb`V0eRKQ^A^>(<3RL-ZpZ2nl;A9WAQdkKx zc{G=;GaP7dfJXKuYE0Ow#Q&Buaq^EIKYgX2(wsIIJTbpb)Ga~ni~1}(QNNP#_cF8_ zo5=Py-FM*Je}0~&8t!hxgX`J$pZ1HQ(*JIP6_f5(*cyx_ciEp0YWp5(ys;JIl5fD> z^k*;9v~Al@-a)mNP=REbPcsYZ>#OU4Le_+@iUVd972`*OVRt;vA}g72d+eddSWJ%E z$Wv+t+ss*6;$bSDcVe{t@%G6YJGK^$zWw`mV{a7vPtgO$-BjRnltuQWS9~JyEH6ex z`$wC+Nrg9Wm-)VS$JZ;gcLVsxgqUB@VeSclwIwr{BQQ_O)IX_ha)Gfw_(3_DsF-PI zhAIy`@ry-f6+IEBiGJ>8$i(%NY2QO}U2nIo9(407YjFu%bY~(+Erui1jno@-`=jyB zf@UTZxUNI~j%Lag<*I}G|IK*#?ff-#|JcS|r(5L*@mQVk>wuSvzhfE}s0nrOqL_jy z{}th|PlYnr*Gk5K5SJbDV1l}Dy#e}9Ep?{Ts?52=q2^X|Z(6*hR3FVPP7?L9TvpTg z#WzVyAbN`ALvcIFUcTngQc>X)tTwW`L#@P~7BG3d{E+4XVkvCjH@9!rfa(RuVr=&p zG_~vk$02I(sxvn9cCFAz=Tc%(3F$C(PH#tn>Q&y9LChUxHi_-_(XbVsVzl$Dugh^n zuuP}XPG;smoIbp^RULnO{AWPCqiEE6mEeonLT??2P`(&357pzL5R*Az;!Xx+1+2B- z==FcszZ zI&uL|J}g*Pa|aTSp1WKjx9C3*OF!UrO-iiI(uF?g=iXkJbmR1|W`e6Hoam*sSR100 zuA}f*$_|Qhg(t_LxGEp?QjbR|#AjT;tE=7BaT{xgetlmV(PhwuZD`IJElU?+VsLy< zM~t}C=9j0eD?U6(yJu)W?Gm!|-I0JL}@aM?PxUF~?LX>n{)cH`~lf=u)AgYjy$M&VO2RDBG8kq|v zm_sUY0v?5}SS^;wooDhyOymy07`!^rGmM`?7KP22L!Zcpv>YLP`wn82ALA`Y&V))| zGaqF#jMfhnF>daom@_n#={(~uhM5AA-5mS7H+LAi#0QHxs(cN~0nq2?f!x(qm)5z1 zn<A^f%x}t9x%-yr{$9G;DO=5b&@FaM_cA2ZYwLIRSc<1Y z;LJVbenp?CVel{eX9Lzb|B zd(XdYMIutDtJGwXtoRZXtT-cI18m7Hs7#2=_ekw|VGQs0GP=mY~Qt znUz|Rs$ZzSkDr5K1eumB6!*W(p)}hBcYmzc5|fI(QRp3q11EXX05FqlMd%7r$#ehT z35Zs1%CwVoNGccKxKXIkW|(n}9rchK)#eFaW0BZPP=u zmiNF6eU%3Iayt+}AX>6dpt)zI-+b+m|D5V~KTGjHXeB8YF9wQJw6$$A6|u_?$&9Bs z-dTnbCZqvw{q;fSD1Lf93jxyi4z9|)YKdaLtG6kN=@;+wLWn*82$_Pnc+OP~R6lEp zeP}=EM4ohX|L@r^m7Y*MBAG`JgR?Nx>Yi-m*T~&RiipGT_=4_B7q&ON(l=8g!y-h0 z918P@TgH7&^72F2qp4(N1k_k@fL=-dR9akb7e#>@kYf%Yl;bR1;T$Kb9Yt$ih<8^M zd;T_r;Tx>c?P?MW5d0dAUFmlOepmoqq=z=aHBlR4Yaj-mfUqxptG5&mpaXRJGv&X% z*&iIN7#E#di9_f39iFY`FP#{HHFBd8Qqg@fsjX+LFo;;ezRmW9H;vV$vsBK#+Yt`H z#MJU&Ue|Z4T-=;IrTCz4y{E>&>d(}_y&^!F@Xl**{A&g4WeLpRS%$qDz#M37nbUyH z8nO8W!}mSYrN0;6>Y(cB%|To)5Zlk*(}?gwzBDBy1hNzV4%Q$2G7Z>$5wdD0CI7(| zE4B%VF$u^Pl6cFu+HDaSO#nIctdGL_RbA~hOp2qJwR5>A{@}px%&l+~%n=KGrh@O# z>7~DHMJbnZ`#S@9h~pKhUusEpSGncxOsEO*YM{OI<7L32M_x$jm>Dw7?Q**dB; zN}>;Z@JFV}P^6oIYx^7CnNW4@Wk!GDOv3*T;B(&L{ttUh^kuwivq7kI+h6sMYiY{C z-0hXIxPJB-MHJ%f>JHl{U2%1^RcycQuaMl7t874m7W%LG=7~()jO0)P^BJx#6Mm={ zZ4k#$51T39veAZjc&i8W6MG5nuGw&cCI!=~AE$1M*YOVtprXk&Z*ffLuAv3xb!D_= zf>%)sdrZH%PK*+bxykHG2%_@nu7Wh=Q(a92)?7{IqPK(^cs=t^<^wM*BN<3zwEp5q z;Xk{?YM&QC?0PV56@=8?Bcn;5Vqxu?t!mdmO1h+|X~s{iXel|CQ%y83|ue z-cWu5F4y4g0`cx!;PVNfrwriQsfdTBlCHlQo@iB5f6rm!_}!NSQ6s4 zDrpjFIQClC(zMAlPYYW=x@yAWDOiB(`NP{G)rm$Q;BOzR`nJT$L~VCegL%}g@$DlY zHl`%&>ykG~oe0+@$8+1;z6rqB(0toyO$I@j6uG=2w4nkHv}1^a_K;Svo{5 zk9g+0wIDeChe zD)6-keyNsZ0{%fzy5Oeed6eCZ3tG%z6eDD4;QucS@Oy#y@5QtEW4x8{h|0u!9wzYN zz_nw}MJrVO9J+mq3b}~%-EZ^OGL=5CfnfI^8T4}aD(Pqnenly# zfQ3$=u59LR2uhesVv#_7vlb9VI`>JnCDT6Pqp_V1W*9 zNdCvQM#lY_(eVRiVijK%kjXBsfgA?Cz2?@UhVE0tELlh&#Wm>698u0R#U!tfS|4J< zi%8TR1)kWfDl5!gSLtam-Uk(C#Rd(0g$^V_I;WHL)3r-RB@XTAU+q7QDet(;cpzkh zjAzj2az*BJy=U6PDr`lj!?|PB?g6JJzcp?bf#-`k2J!(@S-W-}YS2X)0|ovDvE?QE z_Y3;O)vaX4=@!(sjq6#^@I)JWmwi}YzWu9PjDu8}cqQ_Sd|FttT2GT`=KffUHT9(7y%CpyYDAu`Dq8f}A; zIWWCs!cjAyXG2+px}|i)BE?ZmWLCQVb*8tmKBv$#UN51Yc-hFp2~Hp=t3?afKBnR0 zom$u1FI9>Vh2JW-?-HhIco6!8k!#TCJ6d*;6OO9oS~NBPrGNPPyp^cE2_O9hO72c? zfrQQaWGU9R`05d!fMvL1p#*h2ltq4UDyyH`vVJo`gG1Z zp|Z%#DLFN-_pEi=j7<-K2?YGpTW)mAydoKSc`)<3(BeRk@5itylKUA!FlQ7f{fD^M z$L7p2Oe*oMSY6yfWL-$7`EOftc!M93UbQiacex*DW$+hqA(h;xRTz%)QUI*`ZJ--qh%MKZyJt347B?NKMp zHgcZfFq%>xRV&35)-oCc$qX`fJ75dPzTxRvT62Li9LP<7X{Os)D0R8ZTBWI4x((S+ z&tx?|Dh{|ArhuMxmp8}y-EkJAwBoXwh*_TAkcXNjWJBf;J;X5=+29M_kc_uzhAO9) z-_tcgm-#DQF{B&b6kZD~NyhTCEaHq)(VzP54aKzK?YNTafme)LY)T@uVlKgUUeyf4 zOxeyQZLvTaXHfez<!V%BH^YLIN=4cFK5y0io15jBkG!lGN32cL`O8we^6gg2iJ5Ae_=YlrhtkuG- zk_HjzW*Tz{#8N(0!O)I?f>=z9Xq{QCsdmf?afu!`RT|V>~Hc zW=k@+)rQM>aP1zQSL=tpX(`Lir#@vU5w8M-&t}0v{(&s`+w2)e;J;p&i}M(Nq&K(= zV{YVpB9>FmI z&$nP_3)53%WPyJ(Mq(&8gpc>1)f6+5y=x*Xa_C%ur9;MF-mb&Sm;@8AA$`y~CEi>F<{+cz*7<`e3vzV$M#x(1ZC z!4(@WL}!2In>Kc_Cw%m8M7jdT?*jODPY)`vNAT?>JtGeaH|*r*?9ctiOdW26;XrJ{=X z0_MSmlLA}4FypH~PIqRJoLndn5{!}e2?Z^ud4Q92#OjX_w}l@C7i6Bv5V9%|TCZh8 zu-|tlqY=fsa6_|nL1*RFlrr~pKnEf^6GSl@gB%F@giLPaOnyVie48j8vGO-<^Y9sn z5AYAB9LYL!ByYCCGZUU66)7THJ=un9{{x0T$09iBz*MN)nFYLU9%h*qet`q#UHM`9 zF)lT(*_~fx6}5QGx}hG&9ju6v8>p*C)`7*bH#&3&4>l+S`BTCz_*cI%bWyg7o@#nv_8|2JWmzXJIJDF;${X_#O~j7(thBPwqXGIA`C6podYt{4)w0 zT>KyiL(6#Qav=2#PqAa*oQ=pGSNgwcO6HaEgBJ2LgrlZZ8xTM}{G{uQb78JXZBqAy)5gXV56*Gkg*X`0~N^_ji0*4RBERS1NuKRhnzKiYb2PS)bH(PP> znt%|IQ?Li;p-WR1f8u+0p9&&+KC(7$H{Yxy)(c_aG=OpS>7-a^{L`xa%GwXYPoZ+6 z@dAq^kF8_yS=u}PDvPBfYUHN;b~p5l)G5AR~1p&SK)|kjRlcruUn5U z$s1mNy50{_La@J=1#DI6BmaW>K%1sxuU3EmUQFS5ME|IdnQBVd0VPV`iq=`SQP&}= z_lC72PQe;hLlhdi{T_%==XdjQilRt4y%pLaDZ1ctW3;Aup`G7AX9HH{1p(^KlOP(9 ziApwiD}k;%3WvJNs+<_W0V_Y>zOlKn3}qf(l_u7s``=mzj1yzv+6C%js-UcYlCH(` z_+Ua$a zEGPCe4}ia`Ib6mOr8f+0886u2Iu1Vsy7Yq#dMUd-7Z$hv0n^ZHd{@YUybS6pI8cuo z<-**!K+C-Pnekl|E^A%3gU;0~o`DEdRR@Ypr74(Tc8PW(35Ob8o=Cg7!y;uuHY)** zu2t_yvQ_2N+@CP0gIFVxoS_UDUM)^6lPs(`@+1NIKWS20!=UR5^%$ z$7?cCg%OKJ0i91M*tgE45J_$tJzJWFF%x@nK$gLG{rh=aFxELqPEnI_Gq(hgn8bHV z;u6H`l}2jRh&_GR%{nRyhG2LDrNDU+fSHC3^&7b7;d! z5~~`dB;OXkOl+-87ODg3?VlbXThqu3fe(#DrAA*E6c-G<-dj<#&mw-#i(}RZ`Uh#p z(LsW?-*oI8zRp<)7(wm@? zB9S`aTBm7BsqHQ@;L7_LIbdET@nf8n`lY7z-^1@z7Hg|cLZ80#ESc(lSmyVcHS5)& zh=1X`#us&QN z#pgCfqPL7`!n@;myCiPynma+?UcSrjV8HSqv-GBZw4Xk4E{2&l{3oCaJ_Tp%R&*%i zO4fS6z;;r%=J@4PPFA7AtFohd>Curc7=PYXgl3nRmb-dZ(i@#_B3qX4t&8ocjsg-v zE?gQ!Xe3hR0wXp&1x1WP+D;PHpL{qxV;cwafWo8MT#lTu-)>aVXi}?+JNTZ=Eac=Qbv_v2fN6@vvp<*fJC+L z=Ls9QmcT>XJ`zQV)Xfj>|MB^d=6s4*bNX;xUyl$^^Z26;WSOVlvDs$T|3M?0LCZl4 z3~$2J9|~qu3Fox7{uS4U4X^YHadv6JJ%nmNQP)bIvZKu=&LWowW%N4~1^^$AS41#R zg9d1%0!aK`WjLLY9=4>dn754gB%Cfqn)<{)?0lVK!6A}88OP}{^_FDKUK@5tEfx;o z)a|Mcbn~k5w6i-k>~$TwOFXNzDeX@gK)cmJUKnYcdr9?8IWERM?Pq%=nB!(|EBE;1 zrsHNHxR)cQ5~GlJ@p0AdSbhv{6v47p2xd$=j+{ZXWK(ZA1=Vmpk*b6@j3H|9=3dai z@NwRNUA^!LAgd&hd=_m$j~8QGY6xcXXGgCiEf|2jKV23_PC}lm&g4UNgNK`jo<;Yk ziu6HyQ#1PYqZLM`JIo|Uq6EVKK)e9>5+&g_uR4zRTqOo>x1ya`pStI1FQW0Dpd9kP z$Pbx#!P6_)2tEI|F5rm?+>`XZZ_jaSPW-Otz?Ce!9X|=QH{|fwES3cwf4lRr<*h41 zt%D2-ZjPkKb8p{;$g;h9bpFsuB|7wQ&w3=-gM|%`YJuN7wyHF6rl&s4k-Hwdy!(IC z(4q1m1Bde2vZ2~lEM^f!c2l7D7l79~VWH_t0-R1;(JVF9NF$5E`H2;P#efxys;bHF*J#ZF#yBxVhX20%c^dR|~cs zywqBOFA6OLcr3mC1BO;}5LVq2G$`>+jz ziI3UCe8MqHVRQRYCts|(o(2T2|HH6Net@jloXP8X_SISJB8tqD#O$T5L#ztUQ5$-& zuMv4Ul;lzc4BcG~3z>TM&Wv?a_|HBIOl05`D~B*h;b|-?L>_>-41^8LO4VuS6JR}* z7}s?VE?c?|nxgs;lsK%6AHp^X2r|`tVl0Hu6KIAmuUXw3s!3ATg_UYgCH)2oGQnCD_%Y$Xcb34;Z^!DN`i_8vW|J)O>*7(cLHkz_;Jsn6} zbcziQA4YIAVI0s!qRlf^0CA?nk=C2{IJwsg<*8)(MXXSIS+j3#jzFa1TX-4JNSXOs;FvA@w?R0u%^Ng4Ebk@S7 z+W05T1C+1$L@(Bd1GLx!$k^T4ghoZM_^~bJ0l+D}ci43isSCQl46OpOYC&9;*!AQ7 zLbip<=T60ALb`Pd0c4e9~&`;kyxszu;g%=6p2!!UXntik}3^ZHq9eGek4yYE1xGE2Nc!|%zTc^d80rZ z^3tE@>Rg0~MK3;bhteaZuEXA|H^@AMlGBP7Y0p?AXxw6u$nv5yF{DhV|kZU z_d3vD(!q;=`*b-GA$CKHwXu6w`re-aAq>Dz#brFF2!I+h^hmd4mR1@-ac2W$^dG69 zXK=z<%;#i5FdzKhoTPCt$qk|;5Kmd9p5t(TVRQT8_M2Zz7vA@m6n8xam0^VSRVrB_ zFoQn!Q+*iTjGJ#1X0Js)JdTEs6+#SWAwtPjyh+;6jQe-;h$ICV-Kwl3H7e?~vJKef z$`(|#Kp%MLbG%uZX_EsVX^nb#F^5yM0)eE;oClaF z9{3-Q_csogg)F1UYMcQgP$!;a0S3+Bb=7YR9_=!r$Qrm>ROqGhic!GRN_x6JV)*Wh zYD>WrI=%xRnz&g}`fn-cGN8$?+zLh8Nk%(6E*uiyQu%4hG_ z|B#Io4U8;bUh^4M*7O!iwe}XP*XM>ds7sK8d2!J{cRh!iUdiw-5u&~%e6kJ9}U-&kSmrq+?GE+fD*Ba8X)m&&m;g5=)U)58? z=;`97(%OV4UKT1w+NYj+zRf0I9(K-G?uNq|1NUmW8SREe<#6dv6$y4|rpM9cYNdpQ z?r(uCfhj1!Z5!7a(iKPXa-P}-3UBEKpFkHb0l?6;;^Ma(Z1nDehpoUD{4?`UKcLTW zZvc4Y+z8ic>}?|MBLbW1S+@^Z3Ns%BqBTqa0u`VD8*{Z(elW>J=Du|?V-p0W(C=Wt zXiLAfE)i|DF%;hScx#cl1hj66#{b;3hZ#Cy#d52^5((|wXgz+e zmI#2aaU8f=>l$a;MW|w#{39(6{s`b(^F$1yEJ|lRl#CjkxIy4F{(i640X{~G-x1#x zXaD(UEN5h3eqst1&!A`}Ku}%%zi%;XarqD{X`7JO)O7ZivBrl7x(D7v?%uLLYsFmL z*W<)rG}6pBw?vs;S7Stz2ErNWzK%~2Ol7|7g&aRWxXX-pn{w(Xw$)>8?m~<2`E||k zI9)Hwyov>WXFtF00H`j9wHN5aL{=xv&RDV~#Ygrx zic!GVzui5ALXLCZLo#W(L0bzPz%u|kqfobW^t4JEDM7Q#f)l8#a5nTfSWcg9i)FZi zf0J@Wcmlb!!Xmm?j@_i#Tp?9R(XUsR)LEQ#ch3Sf@JuZ<)5H6HHSTN0r$4XO(A$Ri zRvs#S+h2tPB%v)KGlvFqy_{112`~prga-=_H;O!=8wS|`7;9&wtSd?1aDs}7al#;G?+((K(8}m zb>LEBs&!OoJzt*VnAt3{3njE7s##zw8%tg(??dND1#xgs>*hxINF?uxP?D6+u}Wu0 zi7*TYbeh*QM1RMi)K5Ic=ak!6sTE`m(PRq*8>J-XM-LvKIsJdFv6XjwEfvpA*MSXH z3#miqT><}}SJT8UGX<3qFZwoO$q+NHrAIstdX88B3^d)TJ8~+h24u0+T%`QKns7Y} z_);%C8{cH!AaoCrQ;36dU;k)3A#?VyqvT)27aje2Pra{f(YIOX4~h2fcq%!j6d z5osMO;Ce{D-XW4AG+&s8P(#+fhY-Vuoq=ivufxo#KB_6M2d7ZiEy^vsebQ{6K>e*4 zK>{+V_?U)%V+@5{d#y9qPen9qagUC&<#Uo4_fm`utxdAKpY?fJ^iKeNcAzKjFs3~@ z{)KqtV^J>yd$^MhcmQ72%0^ej^NY}EsFy5|^vdMQGAh=)_a!?oE2vJUSd5kEv$=Ki zw8s0h=G9ztdq+x}JqfJDmuaD9da0Y=tC)T05KxjUB>K3KR$x*rq{zGRf+!auVU%t@ zaTe=9pN2%WeZ51tMHIlxj6logNIgFg(RQncN7Ku&o__=TPl$I^-6b{gnOzU+9_qw z@!Dt$5EN7aC&?l*e~a z!AkAsv;*S1oq4E}6u(aBAEG7i+A4xWunMk*yGtCsYy@(uoMgDbp(xID;T`eQA{wNi zpt`pF-VYE*q@c=o?x}1(5Zc zT#L0o0q|2KD84}g1-@DDfkG{wXwo}8pf(<=tW+Mrk0P1VB4~&wmZ*JJ$!P_`X*!^mQ+HXPd8wa5RKJCU(j@E9@nZyQKe>l>!F~J)?zB+c5hdflHm2AEK#GuO? z-uWh=uGL1|d_`&T?lzl0l)iMW!)UEx@P@|;CDe-tq}2QAHYW;2)A}Omp?NzYt@yL< z|9zO1=T}|na#ETmbXvI914oq{Ru)gY%W63*v0sF%g182zbohNa52BIL)kz(r=arG^ zBxwNO4V7cP^nj4R?-th-Oe;2}+wF#laN& zrQ(O)>ZhoL=|R8}rF{W4&+%CC5lCa9*1EwO=+TAgeA@-O_Nzn0bkD{H$ZWAJDMiLv zhl6vzNt-o1G!H-oJTU8y^e}C1R7NN~Us`ei=BOFRCwBW#VP+iRD62~2XT4iS30<5< zM>|?q#}&~_BT+uh8JJLva%16ff~fYEuIefgjj)R zHmm)rraZf*!$2ZXaGU4)Zs|z?$-HjsuVKAt@HHNZY?+5tu>A@prTGh17+kV%F7J#l zGU(MjVLoTmI^;8Yy(jTwUeiIbPIvL}NFBHGI85N*s-~M8?Sd%(BeAd(Z=Z=PH2d`8URMGp02- zm1@XNs&KQ5Z8)WGzbz?CA|Vj)C&1uHvcJ(D;MVEp?!AZgGjfV0w3q0?Jq6z=iXEp- zfPD|{tQ=0npF}sR!y+d}o|7KyGShu~SiklA&;k5R$qCJ+Cq|}~DFmV!kDD^W1a#bY zMF99P?<-UrdCM^(5;*+xnbjYgauHf;x}WZ^GFPcpgcdzW)EryuKaYp z4ns@WUo_W7iG57-@gt!fi&@Li7eVR}R&>97JD0KEsDn&J*?(T}n}sau)^1qj!T~`} zGN`UuDunbwQzTmnY-q&BJ1k|TcOMV^_szrFpu14oamfCD3E{(RpT^|i0sQ}OC{ON9 z<)?i>dH>Md{L~D9x0Q8*Xz~NxaJ~k0lTaEwO zl&hC{(m&x?G2@~j0njN~dNm!ua80e~yf!{NR{myq0nUidZQ7;`g7zYioiA_4+Zu|I z;1<0mi{C&M%*xO`DDW&a`vbITF8WpWw2#E-^iTQ^`wfi^>^p@JOYe6^9n3Zlii3xY z7bE@$MeXe#E&>b84nrsnVw{O=g^D^bR$W~*=NvyD_G-(pR@H^OrM>4d_t_SCn zp!2w`&Lm%E2;lfn#*&kMVmQ=RMDsL0JgHiPF+-p~CB#}Hl~)XuIsB&+~B z;t;?}<5y3ey=g0L=&hx24CCAar7aM&3Aq>nGC!R`F>@*?lfX#1%5hMu;?}up{>8*F zXF(Kc610vWcQ*&hozg?nIkVllv5ij~<(`9Ci&Pc;P_GSL zcr4nALWf|VQyRhvJzhqtP7Z%o(w=1cuaI)M;)nI4)fe;IM|`AvVHksMSX29Oo??!|It}m3rv)yKGJ}8$o&K-9Fm1Oh zYT-mw23{{&P`;NM_cq%e5^oa3S*MjJIaS?9RxgUfjlC2RD+sFD=6?kTN^<| zPR{pD9)pB+1p8-evH27Pvv%1nC%;xi@KCva|E8pR>*b1SKX?RBMZg^yu1NXr!&KY> zqx%R{;iS8~s+j(`t@cslH@$y%^iA_iHr+&Q0-m#gCX(E${JliTRLK8i1=GYl3-$(x z<-2gq3*PH#a$FF#4P)27ya)9t{{8wX1RJmDemLa^NYJ5cn@7s!d#P5$ifJTbPT-!1 z@vHpAhZs^&cV2$P^-rUIN+2;+g&r160TDGscZ7JoL($L_e?}&F#$t zDswaP3_*u4EaY4gyD;3`Mu=7upGM4EuX`}LeDtG0W>l}WTM^c&;2C|OL`!25IEFE> z>y<$<)8uq4QmD!EdAtP2$&t=Y?=<-okALos=`|B6YCTK(inU7N17$M2jLW8ofO&9b zi?LOCQbS4H`v|)ro!IvBe2C6XJ{RA{o)QU15_*b~Mn+PC--CfNVhAFPLzI1=J5cRb zK$&vW8R*Bs#)?BM-b)iQ?TW8^x{$nh;3jDXf0SoXNx z7)GKjw8rKL9i)$M$61euSgsH@<=?^lG8|`SK~`#ENedz&pqv2k!$f18D< zF8Mq`_9RfLCFQ8YvOcYb%xyCz+^H|UTh7F~y6=X^)ELV#n8jn1GjK;GN|$`O+>BjSp~)248&{4ue{vANg-h-Wy~f@& zOZ(OXfnH4r$OJ@8ZA=Bhihk6a$VJj+B_i!Bkc$1@{tWIM5rcnu%6&=^}14C z)K(e_hn!#Jam$7 z+>+JoLJ<0!=S1rL0R+FQJaqUtPnCYH27!B|N^#h54wTt0m%qB?Rc9$!=o7w&DdHAb zle#$r3q%-N>!@3o;)2~`h&jP}LQc>~9H7K#Yn%5Q!(7FJHp7=2BoAFxl;n33Hw^$D z!}GaF>`U=ay-qrjuY_c##U8Yv2QG#HAso`s&^G^8U5AAT!a~lOipq^w2*2-j@Pa<# z)#sS($#{RzD|#5UrUpoM80%~bbWnAyX`Nz%lLt>qL#=ck6jVwd^u3$%@q+^_5K zRq>)Z+=P>sG#6dhy5@mc!*QTJ$y=`GYppbc&clBjbd1J`kWAq68Yi1daW{ zB|bQG8D}rxWNn0`@sTQ_zE(&p4u?Z3U387HUPF6MPQFCV`!iV{ANLHV*B^}APR9+; z_*_cQEy=XYIdZ`$rIJ9o*-N#U1{yGc56MDE{Z;|q#!dCkDnS{!Fv9k>yC8J~Z;v^C zx9afKc^2jH0sKVuDr;fh_f(|m#=hMrvC_hTuN9%ONrxE6CF}29_6lK2Xp~fO7e{7r zuy+7Fh%7F?C3(>*S%!3zIAuLdvO%1bGmh$%b9W>egg8MKPP8UlY}WKREh`wF$| zWxY|&dIKD_(8zVT|A08Ltsg}fQwn$O;hj*{S+Y!}74dFalS4En(zSS-bIeS=l zY6ULQuuakF5Tck&V0-{%FNVw5p5i>)q8TtP&!7?71JABOk|NkisplnN&gyqUCdw(W zi?h`3hZ}|d%s&Cfkv7JC2ry}3rG%BR)Wg3FC0&@oa)O{l34W8ya#r;k^&3XSI1@9n zu?PkkH2`;L#p7ltCJdKb>mB_MXt=4VS&0(nkx*Vc8DA;N?&%kcnhjMfxH+wI8pvbp zr`R?DBRiMK7Ura#pKeN3P_a-QX>Ua>Rw*g8aMwh9>50a>?!3{5@dV2d3xS%Tw%_x= znv~lW(@ozcixa7L8_Fz<%Ntq)S15yf1rpN_xEwR*-x((3%8;g}xWy2CI&od`tPpRD z&6)4MSqmD1Xe3rsqq1xefNo!vExjkt(oxXhS>D$0qte*n%!Z590JZxKs%LP99t?E0 z1*4MT`P}HpLMXFz?qTTckc#+3kHK1TSpVt!_ZB2h)iP-s|1tdUN5}myt!a0ClULRn zEjZB;#BNc`kR1pC0Bi6Nlfh2E0Ax{x^|?TWco7Yg1~;yt1dLCr7h(-)eeI`t5Sk9E z^2TAJZhfCd^*V}kPhf$>_Y{sDzwi=Mk4at6l+0 zG2LbC{hxmh44OvWph%@Y%w>r(u#tk5+a0?AN=9PJ_H*=Mp0q^w&b4^3db&DZLq#rE zI1qxn9lr+1k8V{-$nUKl*oWEdSd4CYY-pJ#IC$}4zzbrb>zK16h|*zXl)4l}+&^?5 zdxD`&JdUV#Id@!EKpJCx6zLSZeP6&Q^!bSu%Ez)o;iJOm$rAgP2U?W|06h+WopK5y zV9v;S5Qa?JgF4%D_8XP0H`!^MC#5i7i##MQ2C*2W?V$=&Gr+PO1L=<6nO=u}>$2%H z^qxxr7|!`C??iAV+pKyEH6vi%!YC+`)@d*NTGKc6r@7*3N3+R<$X579>II3Q>I}2n3*4gO%(@C&icHkoyL8)6a<2v(M`0pF1oi)XN1EOJJs7+ zAlv)ZpeffNh_qaV+UJV{C1~7%M+zeJ2^ZuhA&H1%R}_e);gft7leM!}9skTldVg$Y z6!Je@y-{AyP4+|*y60peI z2<51VsB$CD;k~JSXhAancLw--gMH%>he)H}Z!#%yF%vuQ5`jCj$jk@6l=|^5p}x+1`=X+eAQ?|Vn%<8o)%;}5J&Wfu&ca^cV^j{> zK!L$_qB8CW0T}u&g>AJH<)2<0V<219>%WcM|EAd3LsCD5xG|-O%u?Us4GK&jN0>z+ zz4uihAd}bl@*cUeU^vr_`jLChF*@?$e%p)&pX=iAEfkeu0B*L)P$ELAj^nh-hzSM)9*Q--qn;UR zrIzG|3T(cRq4zJmDOsgbPvU_wrb(2He?Ff5Tu!j&>~QPyNStrE!F0ELCK6!Z+O7g| zoDH`D5@HQ5=Urai+f6$NPTsKVlce)~C`cy;Y?NUfE`_-XL1)vPuE@XlKsRP$T77L2#+r^!AtDl zWF;-M>` zLJ#?mj@(hu%`7XDWBPo{BDEvDW3E_ghbnK+hSV-1(*$jux|D{6D?tBB9^K`!OTkZz zqg9K#fsz-8v`3>3GS#MDn+_Wnvt!;Z`3Kbp0#c|wjYaAkEWbhoBz(u1!mD&eNLE1} zi1!dbzjJbQsPsV#f9-MT`QPhmBmTK&X~ipWuih)L?gdb_yWco1U=GL5spoG#Dn)fv ztZFbm?CFE!C7Tgl&L)1*%GH0C3e3^bPpdct^Vh`yCUL*vhV&M}basEIr3;&(;S}Lb zyJ^*sD9vP|DVt>%g-?sqZonY8R}6V<_SK#PETSelj3YFBrSq7V0L`!fcr>|U-V=!5 zw_+yO6cpNBq6jAOHbn#DZssR`-^J(i9dIS3-T*JjXJJ%Q;!XJF9X1C|SB(F+0UI4X$5t z?94^vc00RJ1DI+!Z?lv#MCU9F`#$lK>b*5VVq+7;R7sRjGMQuZ? zqM?It(DD*nsL-)UCs8Te)Cl0X12t$5(Dgj9DC*-MD(|l){Hn7&$5+j#|D2m^<}c!l z?9H&VXRq1d6D$A#0{|_c002mvL7G)h;Rr+ghdcyPU?T${CV{L3QNRKh|BF z1WFJD4>h0w00RI30{{R60009300it#QgvidL!hVotNkEAAOHXZ0009300RI30{{eg zZQ*ym?W$#f6%I)w>}oZF&Hz=Rs8hlN+;kkh6`gJ3X_xWg-%k|VpK2!SJ;qxDT?8OF z2J-h6M2?NcJ0_xlZ|6XKg^9p6JUbFo9{761o!s}~3PE({fbQb~RS7^Wk`<|_Q z4}E@un*^Gk{aS=5Ocy8zK6#S*dXy8j@EKL6Nau3YzUKJeK`Oivf-c-kJ5@gNRAgP<%5IyUKA&;%4=1#{UtHqoQ>F-#gB&u;+$}W31f(dVFdk zqB>9O1+^ES@A)80k3*?Yqh;a&g=9-i+373Z7pSW)M|pOtqc|+QePTnCEY{8REsty4 zR%*rJ9k|@a(fmAFJkII=JeL7ll78d$6FMcHMs2{%?3r`;l(X!#xyM_9j5LI6sxs?l zouIjCH&seuP|Fp(0&O0aW!&gHZyT{V+V>{43LOy}+<*cuY4~b+SlmgS{EYgf&)%$U zP|sC0PyZo65?$fgHo$7V=-ygfPnXn_hi=))$U&5Je0cQ^D=pKC_=>qG$_6?5XE(%A z*@(B$v=HBmKFiiX=jK*`Rx@NQerySGhfAVr9hi)l{GY;6Y#eKg7w-I5!j8Bd#GVQ! zod_a_GHfO4elT;3LqzhnaRViiLD9xhpb=#~)J5gnWr}>27N+lBdu0ogkZvEH%Plg$ zb+HVpt!9g*X3{LW8GJ3GV;T%eUh5!JVYlXlcApq`nXftaiHNdy8talFFyy~#GQxYG zC$4ZWM1UoAIfkX8Pd@WBVoZgk@7}SE7Th?4sac5ILqb^|M-txSK241;*(QyURna_g zxMA4?_Z!$GP4>`@o4=e#YEd@8ul@Ln%5^bxw9m^WD~Q9MVy1taE9I~XJySR1N(NR0 zOu{$|5%y?~(=r#x`*!>FYD1w6Ybj8n_{7YGOd=ioj309-Xg36An!*LeW6HVM4qc)9 zU86TJxmGP6T05$X?&?%f(>sEPci`6LWT`?4W(A&+)=)ST*&5_H zd zX_<+PDaQ3fc6nEC`m$p2N#0|Ukp_qkJ6jGtb~Q#CcRlLSODQ+FB%^X>!LANheU9t7 z4Y92QE5y9suvO!QS6}@o9duzTGu`^D5Il8|rUc4t$Kywf#!29#32_N8(`5xr{4dn1 z(hD4&W&`QVFwcW&dYvTgw72!XoFg6&?AY3A+s88kH$xSnxN4e5MB9uiF5%Q$sW<}& z3)X0bxkMvy!~>~F5@6%u!pNdkYS^@n`3+$5V4_zOu2#aazG;;UEVw+J!s&#lMOEKH zrVk{Fh;A66V#f^h(RuU`RXzL$Z&=9T%N2)NKtmf!ypZ@b*({3@x9Cpimv}f=_!=77 zJ8x%*m{&DFYGq{`t=19fkE#hi{^hlhoBNV;GBcJ-l&XRKjP}cwvnv8?<0v+U05N4p z=F6s}{QN<4%j4#oNU$|4&(}(?e!$8%c7DQ^U&Yl6W3>3;%6Z>go@i}ZPVDM!!#WqX zAuK_Zk<-rV<+4N|T5F}?PQSlXpTjsgbtif=6R`yF_G8l7W5&o8JE{SPsfM@VV9t@6 z!1aLADzs5P)+K+UixZlcuBD)l3VC^wDulSeZ(1w39&i{c2(uC(ef}g?v(pqzV&<2S zZ|jw{f#nH7Ijd(C_xi-pqXJn@OdH02%i55Su7YUR4Ip+<0%zw@%lxv+I=pVk8t{V? zx~c_~CIgAp)G_PxN@{0<_lg$TQ7wJL_Uu){=t1cg#c(XQwIA_LW#(5ETFr?OGybhq z>qmJ442dFWXqSRui~g;K+=j8JC6NZslF)1Zx{y!WZcM|5kB=Ae*x|kFYG4UUjU|1V z0I+oe=qBA#sVq}8d$dvUe9|$|R`q(fsxCKVkMPcigA5V{;#|sv@+t#91yw_dpSg{0 zUbDhZ*x$RKdU$cQ@{y@dG=$oDJMZQQ4+%4)939)G=y^ZVPjaq}zLfd9D%^bkf$Z@h zL3LvMpFyW4Rz!4 z*MF^zBl4dOb7zj}_PaRrt|n@MBh}3vaZ+MmZReLT{qf*GI!|EZ(5y;0o7vt4g+JJ* zVPtX9Y1Eozm5yH}5MFVN2RMmmO8x4G8qv{o07Ys|P~j;|XKodRL-hT@ULXGa)eGv| zs}|h2)=3R}!UO?}kUj2bjtHu4o{Sf1X6;D_J=L7YA2ZuK2#u@wEMijXV zs?b$iLEEw+s;!aa&l`kSh0wI3lRk1*xBT@Pdb}OMVm8#iRiE{h!xK0byI!EW=o)*V z{%qaMm+4KXca~z|p(u6rq8LW7dizJ{Pdcmhk`5qQ-|Vc-tfqT4>JPSrymtQ3ym#}wh(G3Qz)zQS8`T)|OrHtyP@Ij*zc7^)n3 zo5%gBVzf?2V}Fzmj8DDRMCb)sqxx1=THk**pteoTLPMOmuhe?0yxE1=>9BlJX^rYn{gt2HG+>}8Yjsl}LO zP*LA6P}eD9TT?vOeZS3?UcVCEI=!K$yB7ip!~p~18%bgYa_0fA^r&nqBqaa$nWx>0 z9kum!TLc!^9&i>^Z#xUypaaD8e!nf|dTo|Sodf3O!NId=*Dk=&{{mC~?PT<>SIA^W zB_{1iCeDGA$N^AP<}0iSn4aY!D+x>KKtJHR{HB6YC6Tkp0!0`6Y{(i_srMh7qK#$p zQt$niv5^Ae*d24O2vpe*yyv_BTk!n-NcBNm2Bje}ze6Gx+ex_%X0m+Tp#43grEf+> z$A2Z>jqb_LDdP)A`zTN6_X%OnGL{U}h{hkc_$|L5Q9wRB))Bq>?;ahj6>Xeo6th>uY-MMQ{!LTm9PXxrJ|OB>Y_4V_)b!j@|; z*m^YpG7Kc3ewhK4$>2G+x}zEuoP3KRcMy6DX z(Q$(`xCh+2t(M1Rkv zy+WDSdLqF+>9Y8TdV<+Je2ph%$hmtiyj{uib11A8Ar1yErs87~p>eGOknxb`>@juC zyh`L3u&v;P=F39z9VvPNLarm=iU=6ic&LDx$Y6>6RpZ8*^*dzjSIUzQHiaT*tA9`Y z?x%@Y9mwnFV1~pVzH1Rkch@r~7B2_}7LhrR15{oUz!N>&O?H^KL83h(PZyKjP|xI- zpM$3Ius!edm z(8~!-awzl1EMXsoI%?)If7ZgFC)XC!2jxgzRLv3ux!Xdr$P8PA=??G!oSid4 zgA+RFn(TvKo?o*qr(V1b23V#5coCOL>o$HRacjpj92dS_3(hSxK{_#xVLkTiH3(j4 z&%BPrnjW8m!Engn<|bA5Kanh8owG2OK+2YaM)!s!ED@B^p4SDMpi*A>9(pQYa)2P^ zyK(0{0dy|lHhH-*YiC|CL#GPN^NL3D42+QXyE_4^@Y+eMiZXD=W2m; zmV#wM5P~`hJk9fxYSC5Ya)q4HWB0OzFGCIFeNpVvLOFC&$9`Q?9>|c3o|4!phs!c9 z22FD{-pNUrZ{Sva*rxJbf<{BbWM*mTc1@;0R!3X)-4!n>nFBU12gLs~!u~mk)+Zln zSMK6K9=6BXO_BJiSAPq$Q!MsVi|z^zD4G+zXV%$zYE$nbq{ziMO7-@&1{F?|q6fUW zfX2=(Y4j0j{<^Y`0uFDkvT$Q*!0B!^WOF^Vo`y#zwq`Xtx00dNX*mtA4Q;o27q1)Y zkhHcib7{wFe2Hn!#$Zzk<#R!3x2a*|;VGQgM*K+O&DWd1UMvk>svsh78!2(a`6R*F28WTOZ{ z8U7nY?;7ei7IahcQuf(z!0{kiyhCpCe^g=rGYk@J*iu?)WPv(utP0iNl^tz@mJ1k=)hY1yN!vlIn$RH_+h;Jbwz_nS2HAb zdR%EM0J;8!jx|4L7m;b3C--TGc{q0Wb!De3PxxYnv&AT;w{UcMvXWoC1*$dA**Ww< zcmSGg|LZ5gxf6hi+|L|ndZH34E6o5t!cL3*`6aO&o`(5`RsRnZBl32YNelV5zu(IvXvOSnQ8eBl{L66xQ3YVR7(B^L8Avx(d3^ry z$^#}4nwzJuo8y!o{IZ~de1LJeotl{&$#+B?J6Y%3wt~at1Gd?kH zGgV*_Zf0;v^xMz;zNsZg2P+j`I-uw}%+69S@)o8R4x=ksoeM+cpz0^2o(9OAz?malUeSlY>*N?XelH0!UM$FF;dLna#X@bho z12Nl#;^aMdJ=UUT%CCz0i0ui8lk>d88zxn84Qe_xb8LpM+SF=}uo&$+?j8WM8IW#v z-^-d~;p%eY>u#4Hb+Qz(aOGnHq zm28^V?7pl6TyGA?fZN`^wBei12EjzrV=6LzQdz-)1umwotG(&AaJ&zqek?CdGg%SS zP|QP6aM~jP%j!@eyo9>yNh>M-@{%6Mu4Nk@!SACOt!RqS%~0K&pLKR?bkdt?&%;zf zS!Cq4Jdcqo4vXj@;0$1~3bH%-`3f(xe+cUaAfQCqP&ZwKCd{EU=8Uj>we{?x-Prs) zZbhjT<6nR?{@Z&ZC)ZhlXEdy2ZsUGxR1kaVm;K1p7oEU#-K);Y2USRIt40&Wvl?qw z)Plp`3goKkg<|xPKB64J>2ES(uuZ&a*&p`cIi?iZtjY9n87Eh8(Y?Xvv3*QVYtU*sZ62#Hd567s&K=yNYr>9-Q#m z=OtU>>S0G$E6^XL0A`sFUx7qhN&h8m!B3q|D&~@|xznluKs+4Vn*CvRb;V||r4E|% zV~1auf%IU<(DuvsjZcJ%-8;VoO3D-FMfHi6=i6BE?!W(Fvb@p&XQ&Xm-5HdTOCHLq z1X-O}&ZtGlhx0hf)*L@1X_%7p?|-$6VC~#Z_!#YLjR4A*`6QPgNwZHV0cQsa79*4J zC(TB3Jssu^+x&A#RX}@)TtK)%FYSr^>)S^Upy@=8UcD%WmQ}DbCmb!|e7dzqJ-FKJ+1k6Ij&a$T7;EyX%6J)Z|r0<32cXD%Fn~J zH+k${v%sMQvpANtS$nZ>7HRQe&~9ehU6C)=dTQ2)bq(s|?oO$y{wJ-6&cv0vU}c!+ zHc%}APHS)5LNCP--&>^G;7^}zuId*_B}|0ZG!me{DF(~%U!v{hrsdLmLIli~$(58=>(%vy<8Md-9iz&0L3n=%c0@>TkJKKR{e-dbjzYHKRw+gjIIZyT zyk$Ej{_)qqDr-^7vNhF?F}s5U3+TFWOUC}qw8iYE;0!Rv0W(=+&`h+Ie$B)R zbNEuJ!#947;dmpX*xglk6+f*Bo6qR9sX;x`S2ye` zxNiqOmEYGyxAu;P(cD9ApG$Rhl+CF*jys_FkxUx|r`SnpFX)PWf%8r5fs-oIQ=hcp z6X+5MPF<&9JtVYBKIl&Dsv4_^e1}3L?8yq=*sY(U?{TQ%8I{15FRY?qF_A)-Kd_8(q4T-%x6`+h3hnVf5z)usL-$a1i z(k|m@tTG`O{G2X*%5Ibffh^jj;Y}*S$vBsHV$R`1;Dt(e2+5v-t{$P=O^guYNz_IY zN`pa5jeb0A_o0?Q!b$SB7(i1PL@8r)$Mt{v>JRttnt3C1(ZW|rcQueeqb;K~$y+h1 zx*&HX^mbOOZnZFB$K2OR@D@($(GYvoRa8sKnV!Q}Yj5x-kr9*JQ)rxy8JoFxRE(h_ zA!!Tgp$nBLf!^jHikTHctD#4eCQUP`vy0c6F zMrU+_?NrdpYw{a&+LSomUTF!=&m(e-D1|jnGV)tq=mSR4GMzrxCX-2s_RbEfkqgZ) zK4WhL!CbeBCFIBJrJBxD#szowcHOK14Zwc<{O{Ff6of9mxgqXw#E9hWF((Rk7yncW z3Z;!{4^#S#$}Fg2hhUZjK&BXh_-~c%-y_f!0LTv$ z_}N|=;X0$)M_ARC75tVmme`o`5AKu!o_2L#ETjpGKmk4KkBnBu!OHZ}VAmyqSw6P0{t1XmZ{Uq|?e>vXv9y3j%z%>Sy;G1-KcrLMq{R z&5TCL=csI|GY3eyp*l2pN`F`s22IJWm7a!rn(+X%2Kz=Wtsr5e*N%qqndc}9EfNTU`c)!)h+@2oe*8G3p00+}oc&iy@7JZ8sM%?@ImGHzq7-Li$Q-@=DVVcun zpknS@c<5_m+xgrrhgVyb-pP+4yW`<`*3hxzo8m`={Xl0KhoCM%;PU-0WT+3MO*3Qn zmc3&nk#L=sG{MBc)sHer9eGE{$8hlymgTJlDLW9qLKK^3XN@~4vuDee?m)>_Q2V&u z5*6RHL1TW{Ac6qXzGfss{aPU{m<-B$D+R;q>kafndD{{H^8*0Z2F5+ddyO?U1=Xo@ z3~Y`(n4`+JDPZ-I%uMi`;VAt9QQ&-dYyus}tvC{Y;K~MqgOsXASD`8qY7B16>g#rTVr=7y$nR!|UJ*i((Nc!AaL2uH|u!x;(Dk|yimm5zCV zHY-{T%p}b{a>pyfhnR``Dg!CL?1;o~iLivtu)%e@4u%eNZy4A#1Lptx3*q3&1^`)J zjRk7H8Pg&4hv1-Pbg1BP{?7bf*bDRi{x9zy`{C$EJOjVRZ)19gEHZP$)~#@>dA(dJMT)mXK2Y=%vrE&=A^tlwW3 zFLQZ)M0ND#G9q9v_s*A7H@qX^;J7=on^4TL(}FY!09eqg5-8-R^`jEdrciPo>$~#l z$#ItG8yl_F-r|M=C7C4UUe5JYzN-fnbqD+a4gCNCJeD?$V@jpR3kz@E8L7y$q$Bj9 zE0L=uJbc+)-eO5cc}Ln`PZ@prRIG6GPDYxzlfpKc9+9}EIbypmtPg?A001Q*N~r?! z1aOCE-g^uzzkBzLc!oWSZRYatE|KV=$}}TRUHDt_mG6n_0SzhJrrTWPlGa!xC%>UZN<@2 zZs_fUAE36mvr9I_)+D#;FM@EJ8@CsCTQtskVw%KGww#76$D@PjpkChcEstc;hP=La z(4UYxp0C2)|FP@&xu9%RBpA$&tl?)7{hx@+gnEyeeo60Mo3%6ncHXpN_3?wo9v5$$17$oC)H?; z_N5P7m^TA%6N!UjGziRF%^b%iY1}y}@B=n)_0Xl4XtNx-`B_ zdGt_bL+*s~rrpQZfWR>A3(^o`gl+o~6y#KnAnjlw1?3l1JCNVBTdAU-34 zv)QdP#LmsP7VjI2sM8;hu-)4S2(ezbW%}f^=24^T>W_R0b^C-4tfa4!XYf##$MJ8^DrTaPa?bVnZcW0A!Us=P;ly=tO&$|zjwcmRj81u2Qv92%6+3I7qde^*6uE= zgmVe1{0^g9(fr=bcBvO=sfBZfGW_%s05PK}sA~dVwq?Q^_x`Ss{G?ZYb^_lNv}Pef zUmogw32AeDGoD%xbSWrQH=i6f>?#URVFy@-_+y{Gm6ev`!W>O7HPRJ>_`CBAlva${ zfu(zjg9`jAkOqhOhGKf!z6OuoW+y?$NJuo@Ouf5ubW~ zLX?413i48nd;Y3*aMj4bdS^z|AJg=a;d3uRZE4`PhP{`_=R!}<7wx3^5VS{va7w!B z>e#OoTuC9Cj?%97H!`PxdfGnTbNaf(c+?C%L`G3-EgAEF077Q_ zF-J3=HD;1(9tCuhWI~}D@^2PZN~^1_2J3}EK@=ZF9g8Tz(6|c?1WtVvDPbTbk`LR1 zw6GmwBD*YHgq%gvgh~fjH@>p-0X%$z{h3t|O9cHB$Ec61dW5@LdP7hr(sQ9Op}mwW z>Sq-1as?FV{0^rnTsrxi>-`+04oB)sv_KLaq*lk*S{Sy@G6Sj2JQjGl2JJQBv;EC+ zlp_qHJOYJfQ{lFRJ7o!3X$FPgtFM%tjf%!`8q>lQ|9!u*RZYX5eM^YBfI>wWFxt@p zfBiQk#95Ti?iyD3>=i7H!7QKdcz8JHRd6`eb2W~6P9i@)im9cQ@L#uAAZM>_KY{3;CYPVrq_f<>lJen5 z{Ik*flQoM*{5sK_=Sm&+`?+KPG3kUdw`dAVcVUMM`Y9FfSdRqOl95}v+!e9&y0&c|n+ygg6IxFL6-I5 z>t6UEKYU}meXIy5U7Ttu!30R;XD4{31;L2)?buMZ-EmuM@jW2Hfx^SCTSdTJ6acoe z(TFes#>#bI>hI+u%6kpfC4PyO=(Z)`@!g(5?J2=SV($af?a+REPdnq%_<7}oiqrSo z6KE|zNcNex9>J37*OH(!q)YkSvQ?xV%{;|ew6`#%X(B$Hfp$L+mI8a$6-CnThi*bC z(tmnUnl1>C>uKj*CFX*(yS;0;JcDW!`aYf?O9xwMX>%FqCHCEV9BP0*@^tq^HB;!`^UI@36hrVip$39c;<4_%_)a!WoNYs->_RJl*z z_mS3rX0-xc0*&dED|`B-w)lAKsn5_#K^Fy^sNGMRGJNcEvdW85qkYyFa?-=11JNSx zUme0LFw$$U7mn8{M^1;<^-Sz`1{@JAWYfQ1+vg9Ia()KmDRZI>5=9DgmNL%Stq*uy zAI2EI>G=x|DC#ue)ucL>*VEPR-A|@zYlYw&Z5)Uh;mR0-%N0TD{s!D%Ye!Z!5VKhC zD_OO8lZb1Iu`N_^*iv=Q9_5S$r=kP_s}0Z@@HcWr-5St$s6y+32X_|~Nl!cI$d?tD z4Yx*sag+n?C=;DKQ5`k@8JidPdDziDYcGwn=9tzBcdw)f4V|*h3;}GE1N71D^yN+Ui;Tk)x!}H3?u2%)ymaEc%GA2ezFr#bW0g*dT)!%22I#uRB&wgc!pnQ+`_w9Nl4op^g-#5wznbHv8 z_4b8ZCp>DKD@#(*9CN;hh(=hHs@PFG$w70 z_+G!ds<0RNUZ*G}a>LjX{1Hy*1OKYx1$9fApeoQ)-~AlQh&P=Rs>y2vNK5>d{EqI+ zp+#>um(sZ%F3;)4=o{g=H(h9$4j*`eu#QJPcs!-{)>reD zQF+dT6e3r_<&9&yKV-Jr}(~Z*tFy;SyfzF z>yLnXeCO?Cqsop&(`!N;QW9FvjzsI)f94@egS{0h3c*UHG+H)PwjcbXQ-@MC885_` z-dlEyw%tO_8NY$YqAbq!wWg#b2#rvTL6?v8s}@#lvdt3#h@3mW{L*qe`lXs~=Lkb< zt{)%vNjgwDRhkOLCSV8%R{MsX?8~qfn_nF^;19 z7qT3zHpL<|yS3P6=0-Mlae<*Ol(G*_UyMFCt6z~0U#&KOPJ2WPEEV|_pp;_;x$xdC zJH-TVfX;3*JNi9m;j2$4f#cM^7GthcwgdAb47Y9y`tOYm(rLoY0ukqA8+!9M+v4#m z@b|EBze4dWRVg7v!|$ko)gmcN^qWI0ETm|gHWfkthxgzTB2yT-Us{65HFq;5nMgQ7I8{oEQh z{kqa1o2C;wkj4Yhm}mhjh5A^4uw41cqVhG)^xCa4`(epA&DNGb6N{Lz=f>&9<~xt4 zBOaNa&;+0dIpbhv92Okpd*t3;?lmFe!HZwH{-va@rZGjFK-BVzhwzoRUm&pp!xkP` zE+vF6KG~byTC`fz>B;?m9W76+A2@0Krc+f*i6oTC_B`Jirp;H{vhummajOcCyY8ZN|jC@@)v-B|+$MImz_l}=t$uU-WSNJlSRsD6z^W>+2mX%lwPVVRCg88+orwcQ-|{$>lr<*G z!^(}pij#3cPID?l^K^_IcbH(Djh9-kST$ePcqP#&P&nHru`O|=Mu$}6odmaWSVX>E zMkJQ91=zycxA`CONO-0I2Y;?7*77O3Ndz-h(m@}znw}1a|F4FXmG&yK3hC-nr5bo3 zeSQ|$dV*3p_c%wbh>}PttQWr&RxCy?u8GkhRx`O+k_Xk&MN85YqO0APWCN0QL^E7? zg^QuZ@CZ;y5RpC&ml=*=g;Qb+&IWe_KuW$E@FtuyPzRs-uW1M1hKt@g>=&SE#+UU= zB~A^RU;gMeR99~+i=g;DQrl249A|9ox(0}J@}FVDD<}(6p1smq2l3Hwpb%Bw9|Q0@ za*cqGQulB7ouRSskuMurJDm{%{bV^yUeasOxT7+~6;mI1r#QA^>^!lA^ePk0t<`8Q zu1YEnshs4w9%a{4!W{4-OO%JRHuCY~!yB%mK@CL2#efQ4rSs=sZsFUrkzt)HHwA6Z zh6(F1&abHe`A<)j3gc?u+h139QIi-&p##rPD=)-3ytqND-j+-cW$C+e{9!Pi!QwTE zz#DvcFPB45givu#Q{VmtKCbvq&(QNSrtuka6pg0c0cGe0(iR*WfwzCk;jhKEtiH_a7NpzTl=beP+pGW zw<-vXtSOmdo$)sD#3bUNlppgsBeXWmCx0?`?9ZpoEc7BiBiiEA!Mz6Lrhf8B{sUE#zWM2iYVQ(0w)UGO65cZOBrG8tX+Xpbwf1uj{v9&Q0jp%+8Q4Ai{&-b}I;qQMAb5 z(aN=v@>#1O(i)c;WMDT2&k<8xejKry*hNMr1;@2Dcctp9H8BGDo<@g1qhDixpdmG* z%*N~Y6-zP7#fX|WN_0`;*JDes?X)v$E`O!K{kn?wsFfREfsZHuh_V?n%fQnqon zhvR_$+0=-weLaNg6JI-Deg#^>$d&}Xjm+jeDJv0#8&sr6{SY#a74aS;&;yvv)PY@?UD_2ly9X@zJweX+@o$qio0~A|Esv{zl zbf3q9#mq;RWDW@_EU29)P*!jGpP5VGpm0VnlPBR`INj3o{m;7)eJo4g%(VHdM4k$& zs4h;F8xwpQnAr_`RQ&wV+s|Gdn!hiPt)O?D9}H2f=n+#`S}m#Xs9ZYNS(i4HvYbft zJk32+-qzwk_?*o@zzPMq88k`EE`+579{V3AK}e_}1lR`cDYMr~YLCRI7z_W#%4kSI zzZW;a$@W+=2?#6+%=_w-R_8~(JUWweVTbX?se^EDEm&T}#`cQSU&_#pk4rkb+`VeL z`z=#-3c-so)cVQ=6(1Vu1aSPBwVrvLyjL zBzQcEW@C#Cy9y#-%9|#TnTU-1A|KQZTR$-i3>|2o8K-c!uziKR?^$|`S@Ri<5rGnX zT_ktdMRbGWi@%PN=VFD zpElOpXT7dW7{*hO8GO@5ERK_`s`7i8aJ{F4so=+y?caGRP<_5?Hm8^){1Ns((AU-V zQJ;uj$GKbQa6N^F5s&?|{d>#iUO`FVs6Oyn_CZm%PoyL5`8D;+Z-F+RUryg|p$12; zuRTBPj&gAZSAGee_+mG?6w`x;Bn2>lp0V8Ku&Yh3fVnAsb-TZx86kIS_T?FsG65d- z6{xS66c!EKFqj~zXc(66>w_pImNeB|l)4z=Sh4$VcyZ+b9gMa}av%`DDZmg_g#1U9 zd1W%V?bDy6sFN2!kdoBwfE3?hv1%tli|jV^4J({H*pUoe3wP&h;X8C91}mlzaA8Ge(V3`Pvda6c z`-E6vQ=5b;b;*SBJ>aM=CaU$y5gcfbnuOk8z!Hv%zo>(KcO7pk*9@BjgIsn>KneOX z=i8cvIk!vx(}1hs*AT*=u@?w@0GoPW&Wk&7!v z4tXElq9ni>;9N|EAdp~NSeY;Qh%64w)y!jx)P|ftrgCVu3##r)8I)4Bb52mxAHtRQ z0kZBaxdmM=1lQ1QCgBvRlT9t0l3qPo#^c;HmVL_upHg+hz+|i}BHImnh5?P#G3ZJA zAI7y?w0H_C^;1_211jJnpWQJ^(hEvoE0s8@rEono)VQ8_$XAqUS zp%CO|a&{M_k!@Eo?TBCzdZ-QAv5LlcO(w^UBYwKoEg%z*%bc}7I)NcwZ7#Lgh5?J21EO4Kr&WCny_iog=V^>@=_sB>epA{;;yD|zWq2lD( zf+7fvM5iJ%_Ly<7EI%yt(0T6H>pFsR=T+(lbOVYWWj3-?h*;nlB*asa=pKB5c?v$i zxBm*Nd=b!cJA_8=U37S^K~ey7gm{?hEV28v7F;SgEw;snd6ts?(+@WsM26aIq(kwX zRA`?u{T`pmd#R>QF-C_em?YK>ESqI1ZQg2L6~k9|KP742clY0g0=bDl2q#}yYUqf- zRI1&Uemj;CTEZW?_E$ zBu~8+0=X^0sWCRnWNFUP!i|+dIP2baTaU@{$rB?|6PND#@~Nx&-tCJa&?Yy&@Q0846pMm)5M^toAQ+?upc zheQO>ERPe)9WNr}S~IJ^~ zo*pIO@Q`|Z`niEYIUrbt;xbY6EAiQDM(SFujOXM>B>a^6i6d`46V=qUGXq1b)tMT-3aU>7FRX#5ejA9V}lk}Q}5Cn;+Nd{WY zzc@>k3boQR>}2#VH>UySP#JeHVm48C(g@=s3TJ9Bj_{?JZn@tVKrSS|X}y5-lbIyZ zDXaAIdH2kvgS*r1LHKwh`OJNZLd#)w92rp8drJ>Wm^88u)pW#GWsyyPysEb!XxB6VtU$WhM|!VTXjhmGnI@y-{tHiz#ReN~0K zB~nS->4!zq$U_KyLn!K(GFs)|IgM4ou5qAY%40(KDk_ejRsyZ{ z>T_`r>~uz?^G2Tf=H@1U<>(N!AdW~n5n%sLvZzmoEJJNZ<9xHNdD6)u_>GXxk0y95; zk`S>J!{0x_Y{!hDf=a>PjuctBJWOuBijKT2y6$4;y3>dx+oEs7z?_}qkl=_)FsyAX0#Gp81)yDpHn^POr!v`|rO z=AG!qs*=ZFMGn7apE!hAtofZUZy%FWG&~a~?4Rm&uNvv%S|>QmvISAH4hij`-()9R z=xIYp8-l704l(fyY^gVtHWp!Fe9Us2+)p$iVWmJ z^VDyFjNEX5a1;oZjc+L%)EX-!9xM;Xz6;b;85t+Pdk|z4;^Kh?a{0y?&M@KzX%n+7?v%wqaG2GrE_+;EY~5=oVTbp)@pw`9btY)QCehEQognRevf|P90JR^kZ12gfp4nk zz4FfHH31K`EjUT9-vLz-Dy;29PGN1v=crJBoikd6p7!s8oi8o~_`D_Hu!8#nQ}DiK z)nQXeZ_kTY7Oh|9gMihfnZo+Ro(1m;@J*1|(I zM(f6iZ62Rh;#|rc{P$BsO*b1LtK#_3k)ptIj7I+^tN&CF{m03`@q^H54b4(tUR(4v(`V}VGb+Cq8wEnJ zYA&~ScW2ywnUi(73URtnB7%WWxNz@6e*PM_WrMB*OIH;Da)>jM`1w9*nPrj%viaou zGu86aDk@VW5VJ?U17%Lzv!Eg9$!?Dd@RvR}p}ZRX0P+0(JIsz?BrPT;=8KMb5z9q0 z$o{4zzoue=VcsabX=WNtVEInLZ-R@D!jOk73Z%av+JeLs-Cl>r8B@m_HogkhKHo4^ z9D)0QG`)8+Q%yIgQMwa_)X>_MYSV0kDCJX|2T^Vx&7Z4f9Cc-TqrGoUCE}j_?ma*_ z4{o=l01v|!&6g~lzUvR_qEt?P{`XHo-p7NK<-3vu;~UbUj|HN&lm`{S21%>?qe2BbK#GJtNT|1=wE=JwH~jn)v|of<68D}kLuZdA-Hu< zK7?QJx_?|{Fm0f5_5yTo{dAbVfb9*L(6T~&tnFWdilr{5KIJMVN-yED2{mhrE_J(# z@I+2<#lUP$ED%-%f(jB9ql*tcQQZg-sOJ3Ke&N}CH`>L=75`xfASwseagwPcBb9+p?lGx+>k!B=txH@=?B!QyHkB0>Y?iP zNQmGMteH}O<<QA@Q~7`h`y?gSziCF2 zfshV;8nNh9=t%}qQWt=*oJFh3{(P)6b==j)V|!SGP6SB@l|DA9gfnGQa%C;N!!1ww z0LTsFVx{|Bs{Z}l*}j{|Z=FL7+qkNVef>wDsQUAWqjfEwhsg4o0|2m+7CG2$%Q^>e z6F7q3Q`x)xg8EfmzY)05E4`G0YV*X+^`lX-nhat)imMfFL#N4VvBU}$rq8?Et%uwV z_EoZC-k!%n58zp(?bSSrw?jX%X1Yv#kAH?25VIT4or`q2K;F9u!GS6_YW$ID^eTq* zAe~W-L(^A49eX#<^K8&BT7tY=oAXSr1ubw!VOKY2R*he@0!46=;_vD<#^z zxE{}1z{<;UltN}A8{teRpjgBKKb7`xnidRc>IfGGXv#3Snw0CpuOLqG#eRsSjBFqY z&S4DLD5m&6=;KbcFq6NkinW;tjjtgqqDc{}U8(|V!Z5Jvd`?bt`_G}BiJC0|<6QI^ zjk3Droe{_K0u2&UK&QeB>5E_Yu*t(+;c0)s1`wrIZT?8ZXcA|0twR)s^F7*43%NEc zBLAd+cVzvBZsX=pB zOtTh#c1zMXPPzlyW8TH}weW%5RUi|0k{$65@#;=<7^e*3s^;K5ECwV=#LT{K>dWC0 z&Hk*TAV&XPZyz5&ukI=7&VTJtQlQl-vE3D+b(c+%CEn{&jHwCN$ zMM$q?fh{C9GX#wt-33uX?`LOvhd~qt^kt z@mY#`{^Ycr#73b_(2fyrrO1h3aHhn5_KkEmUyE(WB$dE91pMl-@{YNS9vkeXwVL&* z^O%M{L1Z1eX8#fJ&7&egd>+F6-|St}}_EC16+zu3`liB_Uj_oL|=UV}2k;*Y!= z)l6_N${n{zE}Yb_c@Q9zIVNw{6@SG$=rxw!emEK<^qDNv@91I5_+4C z4{ZsDJE zFLF2!?ZwLbkpl)oHUv@3Ke0xja0WGo$aZefA%?b+&|PY9JV-#ro_4}7=8Re6&^n@4 zOe)xPkBO*i_S{io^4pE>FF|TTz=g~mWlq^Vdlsm{jcNq;_+^e%Udye|Gj$%m9M4Q= zDzvd-+2boSKG$YRrG(|~U3I;V^0`|ElN#@g+IOKvB;%eHYv_Cuk-q+ROC)toRBLQN zgQjvi^>cs#-Qha)NUCt3M!Yo>Z9Ok0rHp}4CT)JZ2_Cm>1olfuu2>BeChc=cQQC6S z>mRx5L)v#lbWrgQ)1Ngxe-s@yJ6Te=itYrB4eNBfgrcKRV$gpG@okYw(-M-3jG%dR zo46`wJ|h&`CYFu9h_rI3`-G=IF>HE;dcjf4+7Q{)8=sVeS5XvkJ@?JQR+V`JcswDN zV3)LZ7LCkaY&;=$TU&|UJEQbk(mi3x)jIwu9E+1lBD!edh-Rht9-j3Kj z;vk44&fV5d;|6s+RzK025mO5q&?xYBQps=N@o8ZE)lERi-?!!!fJ!@?^dj6_N8AaI z%*rRD-+;7DyPsH*VIwRZzZsLPH@4fYlL%bS%5_461gR&E6SZ_0R&2lIJs+4PI|9i;$5)~$S(8^%6bbO($-}Is7S;o zGG+xQvD?!Fp^5BTjFGdP>VTy8K1or)96mzb&P_3+Ird(Ee$2v;bY<;qUp~6Q;2w6& z4dZy5oZ(g%WSxGrW@YofhHdG)m`d-BBsY`B;tKi{02g2`tv+P2yf++6RN)^!1aB|f zT^mX$>jyV7(ojMG`k7Tpp>uTMoEy%a08;!olsancS0?W}qqcKIP& z^j2;C_G1$U)QHb(DGItve1Ml#j)1k9N1<(6c()()X?3yY3GG#8pQf^QvZih&v=A}-y@DJ{z-$Yozq6PCjqp)@wD z2GXyUgUH!-*a`hjAd{DWY|s2AJ+XO31~yN??PtY}+ImC1h;?V0YE>tIR_x6aa@=Sq zNtSZm99@l|e#N>2+VQ=UCK!&&dYPmZ8~uWj!rQAPT#})Vaq3jj+KN0KzK^S*1#ize z3f4OU@qxwuzZ47}kdgm1?U%m4!)^1iIEQY}ubcmJ%BDcC90>aCX^NE9nxF;IQZ$`J zT0?IIORDBSr%aC;Jv?Nz(}~=v)peK~ZA`ssBt$kZL|ckg-$yY1H=RM`rk(-*@+Tdj zz7WhKdS_}|7HHzS0009300RI30{{R60009300RI30{{R60009300RI30{{aW000xY zL7H|=;Scg-f;Aok|=tOI?MvSeJYOBpHi(lT78Jb$&f&X|u=~B~h zL^0VpeYO{CD8Q{8vpqRa8Zr>o)wd!3w5G#yH92RL^%+)BQQKvJlb0xC3Iz zkrUmo)TNF}hoaa22e5#IBZ%+)z>6IR^5qTico~+3h~8>$AyEfdo~{zA^wjVC($7a# zCIii$mXfCk00093C;$s>t$Y9g1)~=Q1_u&mgv+yk*@7D=g`hS~8vL>v|MVR}^oxeN zo{ko@Mv&Z^|76}8o{znk=3#1?Te!Ruy1dnONUzsOfd1lp1HCk8Ea>>x98?VN4LpL- zV_p&@aFyfTsl!=e01QwR-tGwrXd`7i#TBi!LpEZlZYbr3QhVUpeVv1`)XMmcA;=Pv zV@GMQ-T;|_00KgP=Zci<#sDkzr})<(4RIE;yZ{A#zUIX-G$clwVh?*4l3PjgbQrpt z#x>K|-@Bzg>HM95`+K>_xHgcYB52x?{I(j+#<}7dFG6jyOWB+1{@Pl66ILgqsZiuw z{hPJI1St%r%(U9qfjdtWJRLd*zg!~;UUlqPnxzCH%Ym{>1OI><6$wVJpUGX-Cvth$ zyva);db7w!0Cf`#Cz?FIq7n9^HUV&iik<6FxN-QQpLp{T_ZnY_41DCLPK9sK)Itpt zBwdKTL4ksjZ=GcI;ui0oiW{pboMBZ-jXcM$b@Hm0`+f%Ux|i6>>cL$wVuVGuKGJia zCp`X7N<*>Z$lo^ka;N;j|F~e$V2$N}x%A?u9_426R2HFOn>iGP_N2SmQ_yDicu1u_ zR`f^1@;;3l=jFfrCW^``f+FVebc3AKrZJi7pV$)XQMGeJqrla+G03&#yd0h?LP%E> z8lg$|j4zJ!(@v6<)$!#mVUG4wW+*#Y__43f)CRCSH6Ucpum6Zp zVC_xSo*aOQA0ZFqt|h+Z<$khZMlI+;WV2{U$8JW2_|j~-f&f_wglMT1$icJNKH3?& z^VZ~vkWk>n>BR;}y~>#8Ty=lNtna|O00)2|0+Gelc+t|Q6H8(ztfI)aX%P?3SyvXD zPez1S;9rtqV2I2U0Li>XR8*zs-2aM;)-DWu;9M9W(~=S>7LlWJvmS+J+nKEHLYflz zzE81#>G>927-~CQXkZa|7VMF+YD~lvrc~>j1YR133<3F{dfc(Te!_p`($X^Gz3-fw zQtA^yZGn%|KLjtE%i!kbnz7H;VB_d4g?>?v&7^Aur#N_-2 zXruL?eX&Ex3*?e9rU|fY0T{}f&lsmQSC#5W*Ie0Yqp&U`Z?E7FU>!TH6N_?FfIs{B zywy}ovuQilJ^kp87#E*$%YVH|blQ?DQ%*W;CefcGn)mmQd>HO&DO|C61exV@7>caq}qjE#=DgrYkuYwcXf)Bh&<@pVU z$!{-gOSi=sBlrXJ>3ig1sX6JpA8nCYC|ZHLBc;X`It&hEVoS3;xWAVk{{mh$wB^R| z_)-)uFMhuAkle61{W#OXK3FZwVf+kmKb2a7H+|?YIS-3uZJ7}giW#kh>`eRmi=tl( z0GS9jzuuX*OK|Ft=}N1)QH*lyDem&Ag;(qX>#eM$FF5MG7HY3rt~$k0SO}8-xkBHHB~eW5M8hX^=bq(#eE6YC z2jK`5sK*}HcK`1z(qf@98Sqc!Q(!*B4C6=fxCWogF{oOLFTcD+y1*hr_snCx;=q}E z)jz!!q89B~{V4X!6L92~0#*`r;r~kRj8>57gHv?^YM_wciE0atOSMa2Ul-rPHwaa zbfA@AU=@{m%SGP7Xmiy0H$ght6%3GYe#<^K>U*A*#_#~0#HKscXXz-C{#d75Mv5gZ zPWy9V-DQTMu-g2wl8L<#dg9%+v5f$KHszrNr_3lSF;v;LEUS&-!(7IeNi;=H3lYZD zjQ=!KUd#wRxSwO3Gl<1#GYo3l1Pwa{Dc2MXo00|;p%5^PeN)RhzS_O($L=7vC30EW zNypXP9%hQ;sZX=?xp$= zY=0zyfT<$AJl^W`wc@Ez)*Ux1LB}xLEbkPyhxvvsPaoo~=ZVBO=#3VcctH^tJ>Rcd zl(sF__9LV+-0*Uc4L{cN>5n6E!rN&zbM6DAu>@NV6L@*ryIVG+f#*R|=#J$f#>vUn zPNxQXd&#Qi+YZF7)AUfl1s{M9CHT&!26;*(701TK%~SJRRS~!*8(2eA6;Bj6B+y3+ z5CI4Scw|E;eHSl0ga8)O3@F2gw@AGObIX zG0gt)v`92cu$xehNFCtYWBh$Wj zaIzx7@Ym9t3FPcTy9C!>@tVV2G+>*g`22%Aoap-{s-M!1>_K{(H_Q1tZuLVpmH*w|+9@!;T=9 z%qFCC5k_GmP0++b09`+Jx#?ucs|{ei-!8YKXAuz~Car!_;nYaSN~L|`V>>R;)!_FY z1LWBtwba`&Eg1f9FjH=!xRU2-pC4_~j>^ESTi0>mu&Z%$-vsY4(-xClW4b6e6teA% z5y{9V+lxd6H@y!#)BcQCV8&_Qad2*+`qfogUuzH^9huG$2#iNnUYaDS-eS(1P2OU4BN*>13^zx zl$u)>)yA?^3VRCok#_b~i*Z49E@=`La;85DH?SLM`FZ(-ZSf+^9xDXy+oHFXhDN|> z70=e)f~mR$$vKz2=VO5p@l^F?0J z=mWEA*Z<58NcVNmVS0hxn_LAe@28GzXJihdG{^AEqD~K=_}X?$+KeoY(FISS8#DBQ zg5+QT0JAM2VBR$OxuJyG70C&EZ-He>lxh%8Vnk0;$#x7IA*p1PyTZvn7OVJ@%vzE9 zRHTL(OR?6$u_M)?-dj@W&h+tx`odf6StREj#?``zN88!7V`nD8F|tumrtu%eN`dpkFEYRBxV zMs}cpvww{x`nrcaO?v}5vd)pFHu z+J~=Kt`$AzL6KCxmO0O+?PUTwV91c=0Rn7;hVAmh(4Lc&KHsLfL%bEob#Z>>HdEvA#aL0p&R}EHQ ziXrY1GWNFAz;cr+CFiPDE}-J%K%2v=04(j)ukLF-jBa=xhO*jra&dQQpPSv(y!gLu za_)je?-OG#T&t0K0V88&9FMRRrfKrXA{D$#p({X7p1dwS0GI5kg-p9&?HD^WZay4? zg0#ee1zY0h0D>D5pobC!E^_!yMrFjW`MpK5fY9%?C0B`XlKHIib!M_}`rsa!3sO6m z4zcw{fioi7)hw$hg5usT+2ucC1(y44-c)2Xvt_1PGs*9r5CAAMJQ+=yf3rK!kG8VQe(0lzRhG^GhgxA6GF)75bj#BhX>11W`x zVa|1VtPn!5Q`w6`iJ+L7Cw<*5!qaUzn#zyb*?$P+C;%480S9k)RN`=jmRxJTw*51E zK(4jSCQt4QjS~a2mSM+EG8}U(J*?Zxf>TV7TDhAAs3ur_;u~WA@ngaf9HuoqCEIS| zx2@KuNwd`s8I0C+%ta0o5y)wO2d>L;ZK+wI0Un~%RwLjd`ZWm z+~FCZRt#Un8>{;Er>?r)g6IF#4u)+cv?B#^hJ01ntP%Ag)}=Szml_H{FJDqJB#`i} z`UG_wsyl;=sw=mDkH*R+(!@2pT8L?J>mT<^Z1TLY$fJhZnY7%|SMc@}+0{{RkT|t_cP2msnWiSF4|Ne}y005BjzVM@cQ2?L<=rk~RR!qbk#+3H+*xP{F z@T7+R{3m%~XC^PV6hkYCD3vnSMvWLMv(1t)9JHr{6)$Y6JMj@ToX;Ds@T~^BNipLe zJKKAPn7w(+%7(x>U2gN=;7X_|I+(YX2#f)dA-m*IdE!|FXG3QsVPoX``idQg*cKk` z_q*4O*LFkLZKy+&3L*9?29Z8|F85cL&qeVSJ~Tx#_f6vmMuW6|I3jPxa>1ee_*}Gd zW(+wN7@^9C$5+e%=sW^p!uFtco)AHIr*T9>F!cOaDR}M}`ju|D>`Mn(@e!aXjnW?X zA=QZanjnP{Bubhe7?zy#j5x{k8xce;i1gxqj8#nt3UHHYx90)O%oWaIY5zsjCB%d5 zbAq7pX#X_8hvw8Lw@aCOlBc8aDESd_ZEmJ z#aH&zweF1M-^61yqo%IRyJ7~d!>*OhzDcP`@Orb`ziw2{ee`z4IQSG1Q8hQg1ioFJ z{MGk(W@K{O9fQ}!2F<1<_p35X{q-Q>d!n|moLEGSz_Z(`Zrw!V2X4$$h#ET{6o3%t zNvme)G8zwKDQ5X*L@lVIUHWD|Pk>*coOiCMMIy{;QLPD{G|;*^_^gOf7BVFI*uXB- zY;VW1L26;2ASHVXYgkuxpMgii zxBs!LNcOGaiFQQiRI;$F1L1RUJDKt=#_9#7)45tU=6ceym7Mv z1W2w4%NnStAqQdp7E_;w=z}v1{lM2TTJ~{ zk%V-toge(``Zo@wN|i~zsTE#`;Uh=sQW5uvgM_q^GJTk2#bs(|-yS);ZSB$j|FN8f zDLMaQ=%Lz0sPlF1A!gdDVrk%b-di)66ZguLIY9u6u}gZ)TdIcT)JjSZM-&sn9wKfC z5J79^mAKIH4#7ht&)=m>t%eyXk!P7WXmBnlW;y@O0ebIp{*#5Iq~GCM@E1w#WebGAd=)}$P(Mgvl_R0#{`d)2!-fFSM?Z+5u^0ts*f3iv%B+ymu;deh z1rsjH2&=DCMD4hZ?sw#|_bJj8%6Afme~D8%Vz8POtdbOaEnSM%wt4t+_wg`qtU6{* zhM+x4fCab^n2VjMdC?v>EUc%(0P@LBx8uNoD)DF(>vY^>(C#v-&y<0;(?>kqpL&1- zo{p&!4l;32#T_At61zouUPzzCkbn}@ghO^$&d%?T?+O8&zhWU)dc-4G%n z^HU(1@GoATbRlxlgJ@h*EXlqXHYh)=8bCJj{LazS)k{g?1H@q;v_?MCnBOd^D;bJ` z6hob;0LHATMB4|V6OcB4NI;|Ow-p03th^O7Jmuas@w{$!3-aZkCHjnfV?NdVreZM5JaGPiiK;B(MyDz$;lv(ur{W%CDgxlygAGx$9e>bxU}jPbJ*NiQ)9(-6-34C(Nnb0kMW#ItqeHS~^ts z;t=spqmboO?Ys?`Zkc*g;T0%APr?^k>at{eG73Q+2^<(djlpb8wJ!E;$(us50k2@Ef-qZ+hH`!TsEatD2f}gmBy9o^jfaD*m zT8!|ELUtzo)!tzQA8GE_tL5>}U6P>@Io|K}k5Q_ACeKYpLNMBhPrW2c)4=tE&yL;J z(v?smFX;RGKkZ}z^l96de13$Vc-?E`6>a*1zN=K1Y95s8u=QiO=RdMlAGR&2Gc5pB z(aq9!Xa^>^*ZrYIF|fpMbYm(>OTpV-vPh?!FQEfN`pUM{&UJdE)D_>Y3yUnXqTRDQ zc`nz|d2}s6<(r-r{HiN`O-e{Av-Dps8AaDGejHg}QbW_piM~0KzE7Ohc9dmRpQ3C1 z8!^RfHC9PAzLcq`&2;bBw>&||3pD>YM-_}jW^FAc_M=|W#cvrEJk^JzeGCj%tqhzi z*YGOq7Kkezl5r>c&SHJ`Bx0%f*BG=6qWHK0vW{_j zZG4-g26eSI<)HZ3kYv(IX!Bl!LwH4Nm$$b+1H3~W>Il5c?~H4r+>@2py210IQlGZ& zPQ(4E0z<#rOKm)^DDgO#QYC`ul(VzY+mU7eM^Oz&y2#oOLmZ9l%4|R>F_&ux6T>z% z1moVk-&JV}CnDq_|% zGo2NejZ8@~#izt-632Gm_v=G9Gwj2V5vI8(=#O77pmlZCtar^DAQKsa9~*(Dtylb5 zl$}|U+vU0GLo{sTjh2!kafFZ`PDamtF+vRk30KM>t=U(_u*>OMy`#dNR;Ixdp)L#d zVHdLW|Nh&E7glvGwuTe0`1;y)c~{M$eNP&BsiS}xvuR1SZp1;AGq}_;^bgc9=NWUg zCPgFHjH{#5PyMn%zY#|!g7YB4qGkTg3gG@umQlMW7};8{v^~VGt1gviLXr51N>Uh} z$Mvu*zVV<>l|mmr@atHq*Focsr{NKx)a2W4UK5252^wsb698GU_7k6j+W6CZ?aU`5 zg=Z9u&QS%46fFtCrny+;?5copw@CNChXDK%+Y3q=^6E(Bs(*Z$(5Id|%d&hFvxYAC z7h<*iz#FImQfE;er$?4xEeNMTzY$Y?F!qLE;;0zd|MFuIILP4cu43rgrUUBB)CbUD zk3!%S|5Tx}cxs6wjzb&IwC+F`sr`wg?=&AhV4FcPSiku#&^0!_?54v-T@k$1hl7{t z9Gg=ti^NgSTz`Fl;u+)3U`Hfv%1Gs{A#8d4vBXQ}73;KUFkureSH6>1;)aSb0Zpnw z&-PB-IgERQEB;Tlm|IKcG#vvCUgetaRNUOX5GI9)FF%*51I(brz&36EhWQE3cXfbU z4k#jYN(V{#s7eYU&i!^p3(T<#L;Eg{)q3v(d0@zFSWPhP6LfIu=x!1qja#+vqUK{E zXG>CNnJq}M!(yrQ)j?BP+f2y9h+yM&oPJP#B3REJ(ddTFE8o_c+GicB%_(g!an!SI zpn4cg8>VQN8ca>_tZ1C99C8bu)21Lq;BBra97yR1z_0GxKyul6Bbs~i``E|7qbVoM zV4F&dVlu>rM!8$>0q(E7SO_`c4xo(~qh|j}I*=(Hd>8%Drj}Lvzkw3(U=&8;aAutk zbj7Lv9zu-pzZQwyB*o7N;e5mZn9&>Cvwx{nl~v|&s`%+vPSraXT29Ox9BE3#w6>L* zA_pQUbeeuP*Z-0M?F0&1%sJz-ZTrtlm|fw_qiK6Ki1FMEROOLjhL(oOslzpv3wQp= zli4ke!{SX+l!knYh(S4|6az9Fz~ON}v-Q2K(eB6SS){qI*&2HG znJ==o`ZDVhVw|>4Q8+GNGtje{y8*H@zWh}>qxOmD5!esd%XSSOz44S_3gvI*2YL00 zV`dg$Xw5+L$>!_tdYt4_rmazu-epiENlWX3m?EFj5dRF7|NBdvAm!SzIIaZLi_*MV zurpz0l0!}giL!0amtiED%ASJrmar)c0uWu9wlPy_0PnU<5yf}yDErrehGomBZfOjaJaL$|@_H95SCQ%%kc`UV9Yz_2|<| zK~MVxCL96sDFoHVEI;5pfe&7xzUuAke-IiQ-nK#@->4Mv|A-h0B>jEp6^ttSH2s*; z)aBwf!Rq!WpG*Y=eo~6)GP&TqLM&}thBKdox)bvNZBT*9{8?*p-oQjs=jIvAJ1vIp z{XoZ&Ouipy@m;~(LpQcak{3Qm0p}ivPo7-Cr+!{i{=3rtsa(jP0YqBH9q6M*J`>s< zfzy>t364=@p{6RUV<4suVf@EOI2Gi>i#;a%Ba6Nj-f-iA&ct|zvY7rYaFZ;Rl^1F;M*9DZ`R{O8FDNw;Xe~jy^~-58ElFDTG2(Q28F4JOpJ5D^o?V zXgu>foZ1HW2u5k16@82UOMCo{W5QN`}4*fx9{$nDO7mYeTQ0 zNmpom%BH$1W$KWCu}}0)ml2l)(t@&%1Q!PUK4aa*Cnz)h#|xnw;K3N;zdBq83a`_i zWr*-QMokDgJ*Fa7a~Ej~-IBO~<>9e*VuWjW9xzp?t|js~e z0#(6l1AWe!4HN64Ye-8GE;F+!XNjh^?Z{$|D7T3Ol&KVgB93sxCHgltS1k*W3?3fr z)mQW2RA_mg@)v;?ukh5oTRX&eLNb}Xiz;s-oD(u8oCmYc&ZVm?h24N$KxUCZA#V%0nxaf9&BR2_Omd+F#5N%21(ba$#{?TEoXM*Qy0OmflCYDyBlzgH*@q+uur9_lDq7ijg%vO%>FZqP?3#B9*>vOrSQIT_g znP^Ea!ipP| zfkv&qawXo@KyV61`#VHbebwbSrNSI_n&!X`&h9%X#sC>a#c+?iJDHO#T+(U6QZ+*T zwQ9=hfx`DK>8A?{6!H)ae;>kENVxy^BwX(Wv5C+gkX5k^_C3ey2K&7_@zEn^+G`d; z4<~tc;X_czhCrPkl^qG%^j0emfk(#!>W&U%V;KHToyc^zdY znEx~(59u7#wx-mvSaZ2}KTJGb39mO{%eId3(|#0>k!OiL=INKMt+sq2;GGPxALQ?q zXQIAI`o0`yYKGUOFcrr2pvtYxaiq>~`>xrmpfkgfZI=FUE~7SWUfFI|!R*^inn&~- z4TjmZs~X|sY1Wv_)bR1PeK@?|(re(Jp@y;VMcJB$ zCbedA!Z5A_VVINI#;Uiv)4sb!dD&MQQC2Cs0z;d#b5`)}r=?>y>VwdGq06ytR^R^ zA5M{>Z&zVtMX+=S@+kzzy@3eX7|=AhV-sh$X;vyKrVgh5-(Yd*e9o-#T7bk=lwn;M zvWvLr!L3aQ^$NQY*D)h(-)Zwps%0#%J3mC)d@xT4_m(D@a$j374~2Mbc`;Q5{-nM{s#$2!f#?t z-i0Hv^mzg00aAZ@+e0uoJp)=`8d}=2^W1yl*6WhS6E9;hxZ?b zBg8FWp6~Wd6WP-Rzgom`&)uEC6+RVm%D?k1K;dGQ*KD-;w8S8zrLOh{ z1bVKi1QwB^qDuL7`?Bd$k5I=;PZQH_K8K>sfPlSa_OZ=t2pV-$nw3ri2m;_5{rfK& z!D&YqI|zclTjOx?*~fKzIn+SZa`;}@q;W71?|(vTv3``)F$ebm#YTvgbX}b3n<_4o zF__FemR5cV22@DAo5|adEv45f`bL}hr(M_GCeNh~Zv+u6_;5EDkYVk_dG-eIvv;`M zITu^PQ4ssv5!vCtT@dE+;UQAkaCY-sW5E}7I7dFI|1L>SZtlXg8k2K)mq?x5*iTD z2_OXp4f=kuQjFt{HrW;?zLh5Dq*Sl*6vxr=n09m0Rtal^PiI<}+liXa0<9Q&r`7&X zb6|CSeXuFDcb6b^ZjyfEA9VBcHavr2=lPPK0R$WAtIK!aC1znMiEW`X4+|G25=0R!6KQdiHQs_E}&0w3G=!pb+C=k z{2krfg4{~#KhMUvR8u+_8rHjMs84qWk1UQ_6f=x)RY!_4+QtyDDC?FcCQ7=y>(%Nn z0@iWeou)$j+Xe|V;& zh+qF7R)ec6*9l1QSWTr#Lg3G`ULKH)SbYignt4nOm|E95WVHIybshGXt;Gx8UCGHy z;2}ap#c}*zaO{H9W^=fT>V`VqKCaB7JGQf;E|N3-#18tO3|!v%oxq zMCJ;f$Yi#R9{bk!FwHzMpT!rp$$?X9pU!vfQ5Rlhy=b{KwVux6%Xu^85XG6w*_X-6(gUbv>j97~V16%+c^$`!9PUl;{tTH# zqn%t~JaeN>EF&ZlB&V|u)8jF5va2F&Zat$xgE3$q!|_8#@ZCz&z~#{ID~7naNp!3y zkzn)GB|!BYA5cQeJS!|IiVw_wR8tOlf#vd%$d`IbK>tvPy9#Mdz|BDl_Qegl>8iwd zV=_-o<;mggHL3e-A-b`@_W0g{`q;^Az(&Ijx9jW>M&}ItY~)h>25pS1&>V;d?C`36 z7bPzDF0Hc>T!^qT`D{4+G;cRB>xNAnPnpD~eEAoC?w=_$tPJ-Vjbee=N_qd_Z*mP* zOdffu_R45P(W5)SJNWN`5*uLAk*g>sz^1hLEkKs)OrCP-oo@ZLT<5&U;4%XHyI7MC zF9g;96%3u%tfKs)a(|LbuII^?&?Mx#j5q&wSXR5ZtjOvyegm2A-ri~NqcfPRwY|L- z(70+j{c)8Q8tgYb##ZEKKCkMU?s@TjF18Zg*kHMd$3qlUhK?o)tea_E>ox?YwVY%AcBxjDPH=F%)49Ncx+EdOfGC}r zX?}oVULY6I%8kw@8%a)3)xhur%DMe zq`I@^VjVARMT{oErW1;VL#Bf0VlWfp$oZQ24it0dXrAP~V;8^NG2$#S~J@Yv75-su3 z`X${J98eFvL@g0`Cd)9sbrTcoJRlfk!EuY3HWcA>jiEKd_e#4OM~qfwAu5)`)|)Ie6xa4Ofofau!F6IfiH`ZnBt}=OA$a=Tm&b%S8SyN;cw4x z61(Oy67N;3S6h5u*r%tks-a3;wa9q0Y=ea}UIgSiQ&TudEU+_q5~;@8iHuixT>aBjQ^x(`~oC8);WaG z8Gc2%9z*S5<^5*}p|AUH{8>m-Uxg?RoIdGD0u)o!(O#Sf+0j3QZc`+7Q&lFt4Ix{{ zCQR((za+xx)P=`V@r**OAqBQc0?oBXO=$6eJVVc&Si<^%DGBYY#D!u{B=jvzU7>X4 zl21-e$+psha_C5Xds|@r4G8Ucg&T_Avr)Ost}e7HcBocjHtdIo!ZC z)01@<;adQKV>Cq4Eb7Fp{qF^uogQO`^6vLW@RABMIw{{pIiWH)I~blTEjF{KA8{@t zcThO!EdI~Xazb@N=-ki_l55NirhRR-0*_=!U@B8 zIn2vaQ(#hBqol^M&f>nVY$_C&(`3VUKmxDv$78xV1i?N!(`ZaaYI@3KLng8gNKOb_ zN&`~NT6V##qgAl+MR~;dO*5YD2aM_Qk-t=h%);2db}cX}dDcT6anw-yPc0(w`*{yQ zMBUbbJ)KjG9Ee4NxBk~$`Wwq?BNZA|qQ1KA%%=pPdvYO!IR#8SCSl*|GGhmxBW->O z5{Xnx7@>$G4vIa9H^EV)cu>PuoYyZM%lDELY&>7NlcO8j6kwdU}7K`39FdG(a zWXO`S=HWT%a*#8tTq~v%%?4OpA6I}X#0*E#?AW0cgKb5>Ab>KoNPB6)V%{9^;xq|% z>W}OSn+tULhUa_Elf`a^K>W-l8$9LC6)KW4B=D|{#+-wCMNcaJq{{kp=4P(bZ~}!d zMvZw!j4E4mN9}Gl z?|cVYm(Prhy&pr|qfoL!!apM(N0L5x0Caa0Dc*2k4E%w_1Zr~vIIEk9d{!G z1Q0f|K12XX2)@@MQoB-*9Rh=k=bxf#s}pd@fgRTDe-EK>T;4?^C|^FYeCQHYY0Zms`u@_Qi@6u zR^c|7m588)lx{$h_b}DRVct#$kIYh9ObeHs5w|eVnbHVLEW&=y9`#FM;U!JBk=lEn zxvHoh0OmdtKici`iiZ9{qYu4xC8d!ixl*jupn58i%yR)CyIvyCH~m+RX+NpGqmomH zomOIW^_FqMWmiy6qD;jQW{BR|3J;nG#GxSG1_%?!iv5T!(ns)KIWn^Q@hcc56|+XM zD5y~bO|bXV^S*uQgwZ{e@*0ABac_RC;JokY){#Pi7&uLdRt=lV<>!{H;?`9m0$bth2BLa3>Wy@Tl9xz zbZ^m+jB<0O^27WF-{0>$H0Ze(I{kskSx9*nVq^x7l4DankRpK18+*8Xtr@Ih2OE5?B;>@@jInr^>TJR|iOE=D z$`IgcrzA$3ds{ZghTDOfkBv9B6$v8<5fOT@PEat_oOFSd)BWc!3L!cG_SHoH*5-F3 zc<$h83N>$+HJeWBT^5Tpw>s&1e|FJU z>E|ES8xlAaP_M=y_D8pOKS*?7P+P(88Clkt^BvQ=`Qc{FZA;=>0l#`&f@_`LbgJ_t z3Hm92nR5GAeq}ok|3jXBzX#C}U}V%odLvK;VGw~GEuy^m$1Ozj79i|3}GBnPc}Mhi`HsJqJsxaw%$Iek&QZ4WUpFIw}d$Gt6t0 z8Z+%P)-~#wm4lPB(vCq$)6oUY(L&@&9N^fURy6Z5*j8OmnlLC{<`iBm9AU4GIa@{z zR;=WC%4I>@oYPvqiJI(G!E8p%>mUD0%)9MfP6DHuQw%w3`l0G=lm`>aRYOZs?t@ft z9?8QdEH^3SRiY`$qXVk1isI%=Q*(u&h%9hTHkk3q;lp?9ih#<{5@?*($013rpfRYgLlqnE#$e$&Z&@6uc$cwdkWp2R(9ads5asjt| zOP|VVW&zS=vZcR-OKS72nj@N5HJeihcmQFx@WxUA00RI32R3(9ys52WmHif#h3NIZ zh4tAWWnqCeRhC!#Rkt!xr8Pu;Dl*#QuE^mriH0% z8Rf)mN_^4LLLVdniXng)crYODp=T%wAR1b&NeIsCgC9g zPzmEMfD*ACTIOwrX$Y@P7ZHj)tukHOTNEhl;#!KxlA}P`gh)U_(7Ed}ROyU)7YE19VOsG?1M2Q?p1#Q$!9l zUuX!&g3zc3*h=jYu6}n*%20F(;z$$m|1sS-`vdnz1u2ort~(^W>f;KhMN&$5lhm%n zjMcflN#lip!0BUNedsxbIf~5$eZ`2Grc1SH*tRO;R4PZ=1V8?$)2hTtbIA7+r}6?M z1726|`1fl@SOLp`hw}3 zybXLm9pb>{DU%f5*~_rf=$sIfhuk$zZQ%0yF0hx&0Heee3p|9xag)k&Nz zYI9?Kmrrbn!g4aUS~0IXQxbdRpBag=oY2 zt3Z99t#4QUFkv!iL+!alA0-)_(yPz%haVm`T#vaS)PWp6TN2Pgwg-D><-Kq1f9@l8 z7bx*Y9p=M}x>NM8PmrXU{nZC zTQ}x90(sgo)7w`c2<_GD3P3T8UIP6lzx#BkEJFXrT(# zRu;y8($H*TFm0RQJm3ONR9gJ*Y)4rCoxEdUO{-winJiXDIPBxVSLkf2rGbfy4?xe) zV+tX0aa+N5(q@|wCpLqh;eCz_P3Vy!Jq>tVrf{0^ETNcn%FBVhsVnd35Xv?>BDnuT z8)d#(0n$=2rlq)L4u&tCOd7p=v_zbOP63MUxqNu%66c{edGhSp;;W54zDEP8nKOL9Us4V8)-vKG#ZK+Jx6?KkgYe~ z3=-h*JF`GaL-wQa_UaBD=aso2ryTr;huEH#Y`#@P1Rb9-GL8g46}quVwC7jA|D7A- zZoWaW6bQ*xEMC@4nH6{8Pshf??Isvgt)}8eSM965GnQ>h0(K^XnyYkU#f?t#+PgU6 zoa-+avz!NrFSvEC(S8=^!fg*g&Z1P@@=>Ly3PE(s0DtkxadXi)%Uuc*9Z{uVgvFLD zBOa(J#X>%MG7EWP!H!q2h7=j81SS4iEk^_r!{2`5Y(?<7y!Qbtm$7V>_)eD00(8kV zZDXR*uXC1K)sS2wWKh;Jfes^CB+9l(Jp2>0SZ{7y?n=4thTJ3bZQn7V#%!SrxJqP# zmknMRh8>KHt%#7AsFfP1opYzX_5*V6;v7NO2jr*Pkwifpd4=4S22vF&kc>4z1LlX3 z-iwfc*N!)!PwZ+LUt2H=LOU*ylY*O@UeBHZ%|z4Ia&Oq(S0;V{KV8|@E1!SuBOcf; zsPzz|D^sI;lB*xd>#h=>g9%$}!yQ^KF9eM1!5;D|?2QCM-3eT1xdgeS~ z)Tal-(gRo)?3125z+P@k*!by zI1gGrYNpt(1%?m8I^v`C(M|bemd^Ciw;Jjeh5iqyhNGEGD||^1+7}IrR2Z5kL-a_*#{@CJSxUW{kkI+;a^`lm8=jjFHHIpUwW z;xb-4-S_9PQr^2FSj}5yDvDG6*|aZET9D}{%a;A_2b#NGqkrP)M^8VG5iid@v{EUx)C9vdeSvb=eXwrPQrEo+pT_-@@8xY>J%LmI6E-mM++JV zwIj_Qo4kFrpQVFgBVDEtF#MuVJP*MAfl<=?NPU6U!96cuD=z0MrdQJ-Vi%1@=Hb3- zzerXq#L!!z(4`E z_pPNU7<4k9e4$PIMFoqoB5P2?TQ9=&oo7})$nrc>&ZW)e0 z{r6Yko6?_kPm(~_Pu~rz@jK-=I`Y*dMUe-riuayixW^`!Rz?52opW@)Q>lZX+5+A|oTYL1#t{!>?UXEQ0S^6Vh zVBJ$*?RUMkYiGHbI?%DQLV9=+V@w!W-}>4|An!(FN<27VUayFW3SBL+2hUg@1etVl zc-JhwDKUj&YB_D92duk%|0yWt&9#Zq1-T0bC|RG;J_bWr8Kukq7zSe-I|hby{nrJD zu)vJyN@0B(Nys5jhj0w7Gez5{bGrLZv;9Ow-janWxua6e?XDD?%hMQUv^~DdyV?_TL0;#MS3ts1TVl`v3yq7lACCv|2PRnD|>9ONc?aV_Nr3yc5 zlNz7B`0|X=gCdQ`K36~s;JeZn37JmFh_b+xX*baeorfLu50W3j?R2Dn6cv|0W7REB zaJeF4ey6wp4TBol5U}W++renAk5GBF=#9j*(9Xl#z;o!O2D3g@ve&#=Z;}OP^3K=og45Tnj0zAUdqNH@ z`LGTqP#IC~>ZL9sfgh!IgR|6@{p*z#^uH-pS*;NK-)^2Mel4CVF+V z;?N?c$x{%UZh)r^Q-hp&6d6tkuG$d^#WyNEZ>;Y=N>`!} z&kRF`k{Mz9mWY13QnLKS6kkRo*R(NA2f&OvYRNAHLr>q*FKoa7gn%QxKxB7St?O^t zoQ#fK3L8}UM7|+UQ(k7YZd_G-MgB~NmTRAqzOR_A!u|U+YOfBQJWC6dSuXu8bwG@m zRMTjSLZoI!-J9d-+ zWMqAG*ZH?F7B6%)k`yu9{t+g-@G{MBFzkp|4DA6}ob|{M0m4MDGg$`qE)k^jx9ZyR zJbs$Ixz<;9Y;*W0Qiy7{(`Vg3wNv9Lat+>jNmf`5Z%;vT6A)ioI`1+|cSD zDbxO0{PGyKlmemVB7FGkBM??D&m;Z}*Pc4;_)dmFe z=SY>rlL4QWv!MMT3ra>1G6Kk3_^0>b000BwL7Lf3;Scg(^e0nd{STnzC0fB{cw<~cuu z<==$%i+%g-MHhmP{9k|o0H`>yD!9ss02Of^bO(#Zzi)56zc1g5Y1 zXSDx_^_Mn7IfCDhKB%uKnD0JsD#DQK_q*}EU3BH^5PMQ(S^S2)Y2RG;`u;^vqvHr^ zHH-6RCKq~;tZ9-o1dj9SGd5n(fQ{t@86K0Klz>sbV`|L&_rph2k|@i%r(>Ig5rVp# z{d_15(wth4Ma1I~!@WYv_m91=Rme*kOaH@h zzts*abEzuyv4lZELP~ynFO8n6y%d>l{d=93Y{K|F^HaQD`6rs6b)NI&AKL@vwCvZB zC1Qs$P74)+;gWN^6a6s!+18YOjm?Zlp5i{(?FJRE|Nlht!t_tvk5;|$i1mHtR|;Lb&l4*37^S{)&G zjF?9=TUi9}Mf08)Tka1=@@L9#cRu2tF0Iclh&}I9+A*sswlqIB8XN?4n&qQ_SY)jh zD-M;>3n12-#S;&*uOXb|hX4WJ3N)$`l}m?S;=Q^=++Wp$ffPdkRFp=yyJim_!1!8q zRTa$BlJ*s9dR?GFPp0%K)#zY?qnyn|HFiBB=OIi>;KR0OuX`Nvwciz{<%wwJdIAfC z%g|1&4O(2kR-e~N_o_r}ieE*(xFG!{z>yOx8su8Ph)|GRg{ z{<)VlJ?xDe6@z1z2Dw=AgxVNn(hf1BX3%^Mswm#)b@HV7GYchd*``M?d0}N73@Wj* zz{LjI8G9Lc-UrqQsU6Vks1WF>~QMLO~b|-WCE$xKFZ^m kOPnTH03|T}A>6$Ne_et@F>7ZO@h5nx%E6NDL;wH<+`OaNtN;K2 literal 0 HcmV?d00001 diff --git a/gallery/ggate-playback.png b/gallery/ggate-playback.png new file mode 100644 index 0000000000000000000000000000000000000000..db063598cb3333df0f7bfdf9b44eb3c567c12f1e GIT binary patch literal 60429 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 literal 0 HcmV?d00001 diff --git a/gallery/ggate-preferences.png b/gallery/ggate-preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..7e38b229f1a752573d71d54fe234189c70b0d69d GIT binary patch literal 92330 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%0DK!|}Yc+)RS`%j9hs;WjJd&B@~ zq7yw2RJ!G@*RlpchUF;ys!C$0?cD&_Hk2s51+rSG{PaHqcR8{a6Yb3n38E10o(M4E zeFPG7)=CY3jUGq67)vc2F7lPV40ptT{bQB}7M^-t>&Vhv5H_ zVVbC2zS!hWZtf>KBBZMtZb#Y>+mYis_ne7ty&U-2=o>j%kE+L$W8gyG(?tA3+jYRP z)IokHa{2qq14>1^fvq?qp5$@dnf-B^YdOqTO)ffo#dWOqW@CbS>1lMiq^t6;hYnWVOoe!8RNxRosuSUnx0su+!MqjpUG4IGW&w^Nnp3V~lmZXG~xr87%#%c(zi?&C4 zbO)IVKeuYmVBWh|SKHJL_&N4;FUrT?kHA*p&~965aA37B?!|w`RZJh!Cp!h3fasfS zX?(Vh2$n)p5W#D5!9k4x$r3IycI8IXa5v>2s4iB1diCo!a<-O`8|`6RBl_HJZp!Fg z&%tp3IPdqbrVO-b;^t-s2++x}|1}Hv+62cEWeKOh6T6GNRe43lUExt~UWiLeq-*%tHU)$M)}j(6WMrJc!BXNAA8IR!th*mCer9bZIy?ngHsKu~C(s)!RZGu4 z2K_lZ`cQ&KDDp*|%R;viD9%Ld5FVw$`xJNsy~_{*^`6#lyQuB%-8F<5hj6ern}+91 zy(%D3s`mRct0_xKucJeI^nF!{apBGp+2W^OpEolzo4>f~PH74Z45SU0EL51^kUNIW8*Zn zQd`?jerX#u zHDZf8mclAxasG=Vv^H3y@J;RnPpdxA@UFa7C`AQ)JLEU-`BRsHEI3vFV)C-29a~(L z<$eE}br4U8O{5Xd07*&aNK0s339g}@!!xR!4nME)Ts6wA*UY$lzN0qqkz(3+&s z<65|!Z}bX!*OVnI+HWWvY?;3C;%R28pF5$mo5S{AhS3a>t zTmxH}bn4G1a1;(5lm9{$9yOreHmF6z@TN;>mlD0-M5U0WD5d>H96?xpzHJIZI@PN6 zY3dTQjVo7qX=uF%83QQw&56q6R{yCgwyVyH`B;C_|ZKKaKR5fi^V_dS*En=PbQ>2HIkw$kI%hDM|aFk$#vVbmEvCzpHi1Lr(x%iAF&$6 z?7Y7+uI=+|d*kAXJkR~B){-K`3Z1v%@rlS{Tr}Mq?A~r6bG;AMUZK0`-{r?UE{D4*QV-D~8FF2_{#@9yTz-$!Z*zF`jRe;0xy+iq3x9Lf!IDkGRm$&Wyx!1Yh&xWy{~qM289wTFlY$ zArF}+s8pu|fByKx2p@YW0mVh2l^*8W?4qg9eDwKAmN$8L$bP&&D_1D=QV;dTY(&9G zO;ERKe05`$vB6J9l4Q$my={gl*OSGa(a}EQYEWkQaS^^X0I@`SmKZhPoXt(n3K(#i zc(yBtkB^U5*;sYlkAPEnG73hWEd_c%)VTcod5)W*c(71J3MTT36J^)3Cliwtp?oMP zc;JAbBHo=l&*u0TXlTUXYQoQD33p^!RaF2oUx?Nec%&u{tNWVggDwGGruMSyE07qZ zvEBWUHcU!@*&6R|Jt%VNBS{SUfkQYG%7vGQM{lU$paOW1T|K%*R|p?2Y}7A_&qdU8 z0-|E&veyD)^3xldL8I257yjqFy_(INx@|^8-beDp^%dKrU%6jmuUkubF{ZOE3@4tK|)Yzf_VZu(?M0-B%RJ9{Ven&Ew zlk;GI*V@~|oEY zAB;fp1Q8UE=z*_6RyrB%3ZE|B-mMb6B^p(Vv~E>>Y;nZl9dd>x_oz721W7ITO1tit zcHJ%;ELe@B8AhkC42vE0FlsGu_PS7Yh3xOI2|;ho(^4Pn{j9%m@d^nY`E)7BeWs6x zi9_;oV5uM++3xN|TrTip#&zOSXEgn5S1JqC#GdsX zJBac|W}PH6&CPkmKi|shlr}Sy(k=d%3QjP(|5CyA1F=7x@nHU2M~!&U?9zXth~1n#tMLi>E;tp1(%V6BFh_{R8eW1<&7#Ng<612C&ys^_Z~0KBLX zmjrzoq#wvTYJV6Ml&eC+*vxokT45$P%IsYQ4?m}?n}$2$txZf7Jlu9-P`As69StEA z=gAlZ?au3=!z5q^7vG@!wMRe)-$5_ufA8Lwapt0y()g4}Y|%en4LsN{h=}hB`L9E~ z;2EC^V1+PVHS%u?B0C}Fa4w8R&hpvtN`F*B#_O=<#!*jqyhUNR8FjG!$%;R}XovOI ze4lS_MCtnRGJE`=D`#%1p6P$-0P%&dUuE_Q?pb&IK6U>W5gd=Ovt<95;mi1MRL0K< z(dY^gygz>k$=eJ1(8GES|3gIyDPmydKWj-+h5lX(w=lYdD*EJttg~}*&G%0VeZcLS zC{(&CaP+4FNo2>k3HUA%4?s5&)c%Ed8)hj#D(FbX!TRy=g@TABYkFhg!PkJAHM6@a zG)`uI`0eSyY{isZN8 zG%uDKd1p-M1AxQe-~o>m2qKcfUEs4-rhSN>;3;9*Y31Wdl(fBB`T!sQX!$t5KAcT*kI(J>{rra8`6CC{cwNue z^Z9t(ANSz|>U5Xu7IPIu0fHjtJhNFoc;@LV9VyZ);kv~F0+)mb#Tonr9hfAQygkDF z1rla4`~*V$S|FIo!nR+d=?U4I;4;k2mJ$Pwd?^6`PF?xC^`ugpPXQ*-R!NLWb-`fpeVJ|;teEPMx8M>1 zLCS$k1t7Jw)L>GxCY9zPF=OFdFHUhFAU_p*cKFVkpUAbplJkA>Ax)Q4Rui9hSf)`` zP=!eUt2hv?kJr|xfk%*OWuu&<9HjsT5O$cydK-zSph20l9Pm=4r&(A}4HN?9s84JD zbO5J#nC{fY=LjE&C+Z(KuKNpgo5En}cZ0fIm5x#SJOG@5i3$nHh>rcp-CAS8k}^C>|Q?bv@0~TZR5qKt|kQ88)OmtLgX5# zf|PC%;4}q1SQ9%u)CaSBSXa=2%E~E)6$&hq0tn9m^Xx?80;#suGnCOkdv|cCP9S>} z>Qz~|PHfphTohq*Z*rMpCSO$B(=Mmv-NP(BQ*@Y+|M#k{_bsBf&K_YJd9fCPL7ucv zF0FMpE3Z*y<|+xytl(h~2a2*UY-aX6++@YnEo&sV5WH>gu3gduW#Ebl4{z%CPN5YbR(!;I3@YR1HTxhJ2c2b%C{emkn>-p5qrwhujF&S(rHDrT6U$V=bPzs#? zE#)tKjk`oz#n3iq4D_d_1beDuyiqpLP5E#r;&991?A45Yc}dtk3}qWpPh^XhCK&sM zBYFcqy*ss2(vH-3RR093roeZ~V)e*t(;tLST}G-vUWg34$F9DXADz$gb|-NT=DqKP z%Ss47w;R2^y~oCnY!Qjn+bC~N?T@vE*QME{%HfitLs1Ikev_oXIbr$d5%&jGl>DH4 z3G;&>|73v^A2~;uUvT346JvxE-(QF(H~v35ADQpz`;%W;{^8sPmXs6!)H)LI5vh5b zA}ojprjJ?Uk~`GR%)GgVgbNBjuXGYmS3P)8D)fM@b#v=qqyz4M;h4<*8>2Gm*({O9 zLy*KIxiX)9m5{B;ifMSFMAlNJQLYjB0|3TktrIYKjn&S!UU2)jW??iiA6=%MG8X{K zc-QJiQYN9IV9(s$_p|gebPAbJH;^%yI;tL2*{S2#4TC1+?5{7XSpGKMl^CI6V1{4>JJ^5{e`%^zJTK10c>7laX;a z$-==wgcy7McA=DaOgrQ1Gl;)-$U^of2LqmH)<}*BGQ75*PXAvl2m*H*I3Gem#c`-R85E;^Sv9euM7c zlhpoXE=H&cP}Bl{oOoZ<{T$vRJz&OH!N4t=zciZNk7LOlV!|Vfm<%xt_G1)-TW~rB zf}f#+lcVS3OJ$XP58GQPV`A9uV-4FoRb5VbI>SOQxNk^Ac|w z*pAg89(bg?N-NFG2%{){4ONn=Qu~~{yeZR4(AG2v92uc33)tu&!KHe%cN^RF3umw> z99kdNFBi`Rma;+DGcc8ZKE7ZPFl4DT4mTe#l2VC=TQZ zoXMQ3nwx7u#0W=NE4e}_vefVaeERJ+{MXcNdaQ3Cp-36Q$6%S#x^jskx~FEMAy+J1 z3U9NM+s=P<{9^w*CZ)DX=R=M8r;ZJ4zsEHG4I=Zm=KVdYp)8r6#SFD9Ms<>~#=gY} z1O)&05VuVlzM~5QHie<8D7#{t;GMj{2G?7u^dG&z_Oj{Hzc3d(#SXTYW>^AEByuK2 zayQB<&CW~@!&?iK;>TDy55Kk^uCefR80m@8FZMAR=@FDr^s3SYi#c&jw7a{POV-WJ z%`3*jKft7pSDX6C(=(*4jhM-b89Tx(1+6VVXJ(H+t<0wXox$bH$D4KXoMH2L3W}*w z?I2`;Y?VEwumZGr9N@A_muWDsQUk%)j7v8;_a%j1^|WvUw6V&LD!KX^z(2sSFY7phGoGG*2T{ip4P7)s-IPJjwcuU^JvL0LcQ_kS;m=eo(2blmd?K!9sDNwTKPD|-D0L}s1U=aa$~-c*5=;Lp^)Nlas!OEdm3=a? zyTV9(pKdO4K44Fxp*GS5cdI>^5y}_)@_97ab$sxJ`LH%}iC3nY_(npk<(!vSdIV&G z^?W+dfB9wpy7dWQ%It;Yxv<)(OUNg#W%M>!K;**Ir-eOz`gJ|6KQz<^liz2e>{1gG zCXa(!6fkB+m3w6%6S@_$G~V9d0Arc6gwsK|9KYROB(42AeVbs|SRN=)V75v3=ZZwh zdH^CF2#xgXKb*iCH7PX!g3^v%L%%IUNDOAzy$und|D8sIMV5lzb^VPGYEi=t=zA=) z36PjwBU=;pVbQX#DDb)vjCYDOTi6K|%l;pnT%OWg9~-?Em<@35Rpo#E?XdG)D>43UCgfR43}@t*6nz zaWiQxkOzgw8wC&ywK#XED!#0$v_j$D1+rT0)I@L($n{X3f?i|ZQ=csDZ4AS=DEQQb z6Ad3|8Ua(|@T6a9D=-w7c>4^OPTI$BHh)>ie#ZdV-qNJF|`bsQB-t0FC2(6gTcB&Ao8x_SgO%vXqupHLZF8g zG=4qJ=^&oK8$>I?9CWvL?&n|Fvr(w3yl@rNG{$*H&2lW zX84};ar>bCEVT3=j<>{<!;&|%7pax{zvJG43vuqXT+O;bV_s_w0)L)X%?TO6m zUntCtrOK%pPzBOz|3zN(Fvfm`Nl^N1SxaD{wCXv^)NG5{&iu=q$K_>i-QqEhQ+vy{ zU@XFTpC)&xN~7*{D&=`b>bcbWX7OtAlyFqa-}v#{KjKIo^i-RsPr_V;6q-0rsm`;NHBlgNx{yFNz)e**`B^NlWR zZvZ1W1dp7_*T23We9)*~Q%ig=nje_ZzqW{*GgdahDtrieK2hg*r~~KTv6=O6JF%K& z<2X8gQFiq`k9+D`Cv&5Yzfs=q<=J}p-pR0DbAv`USH18&>y9N!H=~k5c__-QX?;_@ z0gJAUIQ@upJ@~d_A@+tOde>Czx(m2m}k$97F|v%WEe9T zDXs4?1iN9%bOFCM_YR)@Bc7dSeX;H4-rp}C00t38`8EdFpl$W{5Sbh7_X}I=6`m<) z`ftE8u-i{MmA1vgTjyK|IknSU+r55(!tHmuXo%4_+qtjm%EjT*Aq^Vz1xV!;?|TQ|KEOZV!tzIPuB;X%kD%vxEeleX`EM zH*(j1EpK3(fAiK>&wj=rMK=ha6Xk8ImH?&U5s$uGLP{>><}Jx3b9I>+Dlm!xVPbn@ z_Z*fiJy>e8)xHhz-m{O*=g#>DeJ%oD>M<}rw9_S3+Vlj0SO;tntD0s%FQ2)^@ocVIEXKmiH zB|Gqv#mD-gM_drC*CgtAjhrW~Zb&-Q8|wBkOG~fVxZvvhe7rSZ-Y!*DI;fI2S!0nD zsHX6ZqRYe$zumENObMPC>YVSj?<*Du(-(k9eyH$9l_*zM+}HDP*dfrY5t!2PlHk0p zjWMKGluTs$4=oIYog^D&`0Ty6X*O482R!&-+Z_pAR~0fQ_-m?DPEb|U)uYg^DeMZg z_RpQHNsNm$u#aLq6=Q5`hI!hOTav{-HC^}i=Elf+D^!879YJ)u$m=Vnh8KDBRf4Y> z1HP>?NXdCz@Z)=4@nBP3H@r>C({o39Z3{DoD~lW13|UUEVw&^Fl+Jnk4v{Lp5oQ@uxqhb$3c#k&2;Rk;*s{#+K#<;sYnIXZs@n~)b^a2 zAb4!f*o<18wor1_C50d-ul4(4YrCUdbgH6s6F~Oto}?T0fM-NrN=#;^epF&f>0r^Y zsJn2F4B}>kvz?gws0&-aU!yy&t|t*GY0(XTxJq15@}8a*^9JzB;%4&~V;r6Sv`EP4 z^P58W+CkX6R~Gn9e^0s8$_fbRW2{OiUP1fpFyYMjG9G%O26pMXbx=qn%gcItgx_Yc zXqVBzmpctEv(u^92a>zDPxaKKYUX6Ap#t$-AwGU#A~(?_VZyz@L*hKb@4}(_SVrD* zbyE|MtY&(jw{0QdJ?%-IpX1a?TAwP?#4`N_j6w}cCR4*}y$b3^ z<=#YV?N`oY&9hgAyQZs(K~lU;sP_BLk7ukneBr5i?!?{f6k4hYy-I?^W$Gokd5PVI z5)8|z!t;1hpg7gOx#MB<_2Wx;4kXgwEZs%-Gh7cV-^d8LVBhcuiSm(7PPG0(dzs4U zvtcP0-!6jJ8+G_CpR=ro*ywTJ#GlFXTQ+|!AmG;_2TW>nkmXW`*IamcW21r%+9oG5eg;hifNAJ|n>a~~OwEip(s zmc4g;`{bZ6ABKs!K)vsiOS&U<{paOUlLbNvXEf@?m)v2EKR@vjVb_SYQO2)fa)V^} z$K4XM_7=WDurBb8e(~ZA65DQykAISSdr=-`-Q!^MfXFv*=E?^OpWr;H5@Gf6tdvxk z>+-#_eAx+c+{(G(_@TDt+qz+lA`&|~I+`1ho)Rd6<1WEo?c7Zv-d6l zR(IH>+;kV|I|q*);XpZca>c}FuB-Z%Nl}k&1E0QPm~~p3-4BNCSyz2^tjP6xr)rzF z<|A7|0M$&SUI9bwwvaDhwwDA=OKgVjkqe5F&6H_6ts2&*>)ei8!*J+I5jDct$Oy*# zTU5?gY)0OAy}3m2^jE`535IjX7V`{QX*Qd1*JYciI(cQ{j_HmcMvK#Wue|e=ajy#_z)#P0JTYO_SB6C?}VE>Qvgg zVZzITk)eHeJBAilO8m2$TP${_^^$NQ>SYa|!NIhgo$jq&RrgmN%su2csF69?${Sn= zYpETw_Vzyu3Z-B9xIY3qWNg1TO(oY3uW|b&Hf{q5WpOt3`nnY{Q9;yR7!OLiZ{asc z!3#3$-Aq(42v(`-cOEn8%^A}nX1K#mR`Hy=wF%mFeU@&=k3oDVpd~UD>~!s>LFucr zWF2PZJA!L}YNs-m1klehnr@`q8pSRFkI(tVsm{}`2uMz(h2WbVFz8QvH%5UQO4(3b zR!pFHdQuWaxW03ew{_{#rK$RIqB%}rw_WLLS|t2?gi=g%gN4Pr;fBi&LHha(>j}{Y zXj)-FbtmWP0rE*+R#ez9e0ys-c(9R#kOv9Cvp^>rA#|?FM`SOQwjbF+nnbby~@cU3e>+D9c3;8IZljTi5fhF%D#PCNC|*D4>lZD*;3yAu@C%; zbz^z6oCGt3w#Cub-%9;p&LO`b!`*A&e-jM{Cesa@4Y>{G>`qq`A{7FUF>`BP-!Q1I ze!f_=tk{;_2w+qthUBpXK>d6*h`bMEkf*Um*%@^1TK&_G)jzFUpQhv7Yag^MUq)B0 z-(F`jfKlpm^K?&7PYrcg05#U7^Nm90B1_xa)k-ulmc|vMZn8oWM2&tWefp*ydE0 zR2&@Xs!S56RlQ__u*2b~ArrfTf+wrp;vvD7;*xb4&%eL>nLs#;7~Wn0+}{ z5`*IfS|;-%m5`Pi*bX9Sg9yFCPCl$=^w)I_1xv^wD5tr*HEYkgbZymgwrnM9Ul<@I zR8LKK7?QTlTV&2u8LV>2yU(Z{K=FpRiq(g=Tl2e~ItLs=z zO-)?r#c^}WCeMBFx=n#&q<62tAIh>2_4_Sj3R1q@Pn@~4l6NboQXKbk^>9OfnOKd zE}7nrMu~NWp$PMJb=e%T?0t#h_-EJt%RC)&Jr%5usQ+-k19+B*LpTHg$0)*Tk*$Qf zB8*rDmG}$8RmcP;W|a-8bYka&G2yGmLNf5XA@*2*bGIXH*mvvV%YMt!(6HWC&$H{o zF;CQnk5kOrN+GzgYtZA9g?MhV&n~gQ_FZ7wnj(PN#7GVAu8NGTfk>#TJR;OQ?CCkr zH0|yEeE4Q1>2((6Fvw`h*##q9jE5FirL-}0vTdGuhM^Ke+vr@(=_Rv!?KR=&Lh>iC zVx;lgwmAM_I4{NWxlDvMJA4=)kiIfC&S}dyH!@^gpCwbDQ_%IcdYJRIvL4r*4(f?#%8UWVnRlX-`2&C zWVljnOzyvV=FVZowkwWObugxyL_Sw|-lK|`@wS)eBzcl%vU{^>`}rj>V&-8()g z;B;L>I5#@_s)rvxlP)9%F7;y>F5!fg^@B~1Hv0#(Pf&!M3lA>8b4(%X?Nl1Gvz_<7 zvu!EmT=Y|&Jon>M+^aWHdsX%?CM$7AX6Kanocg3z(Uz@?*UrD`MDsN zw7V+uGPj&{#7OVbweyu$jbjf-P;pEQ*j?-D6;`s8%RhYh@Kl6Sy+YVL*pjQLRQDFv z)h3(;36AL`Zu{2PXX`)%xFT0EpHZ!f+yjiRcZJGZ;B<5GW6>|Z)zBXhdRhnk@u@qNW> z(+h2w_B||VyG0@S1MFuMtPX&kozMk+3!o&pKPoPEdNNLd(HBi3AFJaGHZC+i|k!| zz0)9lmSpK}?oC(}Ag@GaW*%we#!tfkt84oG9?(e}0@RU}<&erXL76+LxoSR}&+Y$P zaHm`W#X9ED@BRp~*563I>@>-Dt>mfw(zOpe{ub=#`7%Estre~~nI9}!iSzRJuZ@ep zn(ks*cJjYn%_tN1?0t{E!?aPst}~z`Ew|vj7;OjB(%C)ZwB=tuA(pn|cb#!IVU*L{ zeJJ14U3749eOgtS#*gRr6uA}}GE18klbaoLneDsA&@c>)Nu=}+I)7kt((npzG*L%x z<h(O}SMcs<^coNwW-JT!e*m93;u1kdn%7vhK&N_kCc4Z6OWbq0 z#=b6#X8&?Umr4GI>|&>cn!YtFTymnphOBuXT=RNU)r#f|&lO9t)si)Pz8Gn(o}4clxl ziGl0qee@B2(-i-7|9CaoY5f9eyDlguwXV}Tx@!00xf8j3xPLPfL}}`xxhJZkH!zDx)WUd?%F5ngFee4FvxEcyV@q!Fqiy<6`z*)OmfvckuP2s=6#%e3LB%TMVEcw zPQ@2J($q|g<=avOwjLKX>Xm1ep4OhnN(cSgPG*8rd*+?-(Y#l$PW$Qz%R^po;hVf1 zB4d~7I-$${YU$ZSJ77L^3{*pH7s8eE*(VQRa&YqUN;_R%_TF6mh zECqZ!W*c2mnlV z&WzqTute0o-lcs}w6eP20y~P~!JCWR;dU1Q8FWJ*SICPOl6USb$ngQ>4Wx-HMy2q` zh!)`MW7`lfF)}f*JYR;x(BxpvGv&PRAa>~U4Z{&Lfg0&BWt3F{Ns#SF^%)#H`AE0z7$G-H ztju7A_*7@bt*v72hJO@l0lZx+H&LVJt=L%CHvk!$Lw}AwK1-_OZwqu)E?v5fTlyh; zCzHT@`%b6*v~&L1{QZ;GYM4(*rrEgcrtn24>XO*vZo51N2gE}Pv)3&-D;9!z@{}33)Rk|~SgEz*tTv{JWlmlk${+e9&)tW&%e;=Rq+78_*&c*P0h@!)& zR@KAcipxlxdY5nBt7KZ|RU#shVr)djiK<9SL~(|Gv2m7@7|q4S&v~j<3-{+!^I3~|lC(y+ zqZQf&Y!)#6_`R=kuhEs>=`@H2D3Y6`R2cttocbz!0U z0pwFGAm3pCM*93_C=PDpV1be;F9QCza*AT9GTy@lbyhl+%D*2*fG%cwa^ zv4PE`x51{HFJ3J%0fUIR;jS<%L8Hp!CH^BOvQ&B&O6HTyjWjM;3E6zO=gYKn4J%&O+&aQDz=9T06_65BFW8661Gt3K8 z*KPcFbH6*k8P+~`Bn-UB$eky)H@3`PJ=~PQaC-Ag>&RV+S6nfvAK_#duf7CRrCdM| zuoz&v$wQSMOMq(h?q?6P`cwwUjHhXldNQ=}f_0k@hL4PsRLJvn z@?{AU2(DDoo_+wg+ObNu9>3GU&ThoG3hpvpb$K&^7hmp#MQvY|Sv=#Zu+2Rni?W?B z!Z46pzD13y({i9tyF!BL000CQ5OUr}B7%r8Zc0T*! zD)9Q`5u0_+OXfHkMG{kNY@PACc}G!uSmFcj9UZDKbKW_f+`kB$L;$h*Gk)i3Hr5FF zdQPL50Ykshwqf0S^@OR6{N2yqzh8pk%z(nuN%z*>5)!&fCVC>9A3_GOK3+$=Q7;$( zjdovDM1;nU9gU^IwjV4Fv)+fjc(JuLO}oA@%O?1;lh_V2)b8k5pDN!M@&u9 zYZgpj5r_pZ+`#vu;$gjG9ERAw7v4T_>144bYfWuJ1%Ry7%SB4leRg@Z`1~SB?gjkM zUxn9J9Bh>1S{-lolSJ<)$HAfnWc`xGhos}BJ5oy%75~HdfWoM+BnZm4&+*M0evA($ zx~JzWiBQbRR3NErM7v(vDtjW%hMnBQZc*#GO-e;m_%vh^178elY%MTv`Qp$WAwj&e7;J%#eH*HV z8sw|+656wR(}H{K^0F1NEAEiR)>UPfYjvAo)WEDC9q`2?5>kW9%#dznVRTGP#nDA< z<3_(c!weUG(v=Z>@5V$p0;-&YIZ24ZusFDO9Ft`(E%bxVfc7za>{S@eV%QJ6{>&MB zFgHkEUaKvOd)-=7`nYaV+Y$2F@lB9(O_I0BZ3ST?1fkJDUbFUArYSspIb(FEdwgNY zK;%0?*S~NFS{8JY_(Du%s--#NA8{d;wRiIKN*8ka%i#n?d2za|%z~esK9fBbbZA>D zaecy(>V2Z7rmPE^H)TM%iNtS$T4AIE*h-||RIC8CRRWYATILha0Jraev&4ivI;+$0 z(I6Ec{p#1!w)Xb!T@n*sWdBDu0h{S~I9lZvvl3g{lHl1Z-#@Pl8&6_qf{~l>*BAMi zTn07XURhdG9iuG#K#oWV^gI&%<6#pwFlywn84K8yj@;wn=T*F2K+kpGIhL-4KbCM2vTJ-%AweSF^`f zk(D{RmN~y==T!deSa{KSC-T*aFBTc2%rFEer#j0jVYFa3nUP?AywO(msNL7+PiO`O z5BB0n4a03T$$QCxDsAT%={GRq1picYjp-ty%<^^gIC*Fm+p2b7mlNd8p}tW)d%!6@ zciB6iOYTQBA-^lK-5mIS*rC+lCY`7F{Y9q8%TwfmzyG?Mo%Z#m^ER&iUKEY})MavX zmG!w5w?WKrqxMnGtL8(@6GtryA3Rpd+m0vN zzsgdLxe;}F0Rlh1y+V(2_NWS4DI6}beErP^8a~^-MAxl5p8bKeHv9j;qPo1!>_*(; zqf-&Wro~H-1lpF2Z78%vkCeo;v~T&Hz*OWVoCpiFD>T$f=m6cOoQ?Uhqn|KnOv9Kz zIq;;&ojZ4u%y>`ZmE30Xn8>ADeCHUfwS8JITm0@`Eo=~#k@4g#AdCy;&s51K!%}Vn z%{bZtyp7dvzbJ95=hEziemA@1@55TCc9=ENlhAhdeaE#ZF4q=({ptVVQjrwFFjM8s z8M2#c_$e;oms9+3IinwLhgWuUS0#*(MQD3b)Kfgp0vuz-f5U^qgCyV&3sE zn78GFGW7lHUBXlDE{TEPy_vueipKEf9alw?ohBB6pP_>ajz)RH{Mg8^*FWZ8Fg-b$ z+JGsxb?ZZ+ueGgxd9!n1vsWqpo;fkVFWqSJ#BU`OeC6_%1&#PvjEWMcbYE0x=oj0@ z<@sHVw(n02kTMBRZP$T7-O8s&tk!u5$q^wS+&5#3`GR>HZEYQ0f;!(PHAv{!$){?i z@o0g=R~HbOs>ONZ$3t{2#lRP$J_*vU<&YW{M_}h;-whRH&Q4Brj0E6m>C#&}1M%2M zltj++&CxbII?`56ux zdCWCz`g6vBNm1xp>U&sA3HvGX%gp%a_zM#87cNYlca+=F1j3;!`Z_B<=XSIErG|f<{ojvN44_8vR6MRt z=R31X=IE#5AyM!bP_1J8&qYXdo#Zz-U(-FA<|RT^(aiFN zoK6LD#=XLfugU07^1i)UN)5-bGDLk47fliErg@YlUNfK{%S6^Se|+FKn)Ulc!)Gx@ zHLBuOGc$`P)F=nC#$d8Z(oh};xy-mAR&@=|&l-yf;v`GhGN1GJPWC?ev1&~Dc1ici zR03hx>vy{6+1-wwAV=pN#0k{!sbv;#o|8lRXr^VW!9LAlYX^jtD)zkSgM~yD(mWpP z^fPW^D-^K&^3%QJ8=HSTyMu{l zE;{t$bq<3cvUthS_R~ja<#e;oygYZh*w^KSmiE}Xb@_BocB8~({7cpY*^ zT|Lo`~M2Mul>K_g*pV&vjC=Id^hcIo;LPK<~mq_aGVCm zE3HJjMNH#wOSArOOVhlrUz|CClw4SJS!wz5<vEwec0x}!|q`yaz~-vSOrHJJG)tKAgpTvB3n4xV1_ z*0I-kBgJ-V>*DI_rqIai*qN+fJv+bMi+Q#$TyV0F{0)l(SB>o0wClqIMf)K%)*se8 zpi4!116to@$s-xro`7CoOCDzuOIXS|bNg-1rDwi;Nz48s_002-&>`D%G!17w%semV z@IX|-{6@<^mdeswA^F$-iSzWI_dRIcE{lkzoO_@v-r{&=q8Ds;dpmqde_rbQAX`G!019F;{Yu#eMA)F)6X<`Xzj_CqMl}6B6 zXRn>_oEG%`un+uBlzrvux)4+`VtmkB+lh=SE!w0j%CS{4{{$qZ+L}>>Z96_}5!8D# z5S!q93Ogw9Z;7aM%D{cyN@&t6EXq*!p@=BO6-Ood3FlH2V9C9duxt=x&j34|^=)zP zP31@FwL9N4ci`b(fy*+TLZ^eoDgInWJ=NTJ+>=Ul`6qv1Ad{oAF|$P7HkWw;U+>+= z7CAK)O=dn+L=X@M?zZXE<__xm@&4u7y+Md&)?aE|+TIJe*)(-#siF8l-jyw@| z`^z`UP-(2mDjhyQU;#hxr}Q&63#Xiun5-D9X=(~3bZgQoP96Zo^C>0+g0hvc2rQ!^peHw#L3DX##!sxg9d9ObqBh7UMy+wP}3#JPV{h6lV zSO#wrO3I)7cU=5~%VZCVPjAQsxAKPu4u|V zp>)eB3!)aSjb|L+6)12P4lN_RVl)5ReCsID?@nPN5(l}_AJT`*sg4sC zAVUHlfUoW2l3O9ohA(p0&%b$0LBaV0j)tyvN9-cWW2FEm<|+2klexcMwRmivd@xAd zqYM;(5I|8n_!mXg!RW*VnPU_M@Jyud}yu`LgO}YBHYEwFCbY2I2 z5Qw)9Qwex>;)JoWIbhPhbWwC^uIty?oU`zEvc)gmmQq+Z+<0#S(8Gh;L|wk3ay(aj zPtRM(40I>nM>MyL%`iM5hnV5kE~lYc1xgJ_et&zXw4n3U&)pwMJ$)xXj+8^xl&W6x z7GLbLV%2gx&bZ~={oonGet{T%K|c|s$T$=4Sye6N!l?JsjQynJGzk(N7_6Tl^# z-fSBO1|WK=INTBPok5NYcy0n1V~hx?a&VPZnOKyp_s%`w%aNZN2HL0zn}f3r-m(K` zEZ1clx@|+`wY76JsrA#8xuf&{cMwQqLBUDznN6cAZnhrY({p)QSwieTO*;4v?XUJo zU-a7i$v@#9K@K81+?By&*TLS20*kS>|63N0kA0dd@x)sf!=1-GajhrjAq)Ya5OM6d z0vr=A+V{-aOlXw26foi5UOZ55E93RfQ=t`%7VNTLc*l~HzkjAtZYRV3BBQ!YX)6Wx zgdjtqF6b_bu6x(lhR&!$1wlReu*XTIwDg=$d}XEHWFt)n_Q4Fh&B+j<5-C8bF#UnK z*&;5Z|F-uSW=GKOxpUFyczk+QDp8&5H)_m&yw4N!KXv5#(;o_wc;MHsm&4xpczTQ@ z!dGX~Tj7Yll0!3S(WzG|ss^XY&>F@b^G|H|(r#hiot}uz15UZlqcB<6xzLjJMA%uf zYg{O=Z!I++t&cjb9OazZoQ0^p!>yNW)0pjf`TPHYVD;kIvopaQKtQ%`8OuT=t9K)^81&F^!Mrw-~A7qt3UZcU7vy+4P>bXA2Rk7`ym;g*~d09D03GE z{Qt|kN=gnquD<&_eva4vLcVnU@Xed1|Lw>7x7O0Bs_BsZVf8<0<-E$QOgx@>g*LMM zQHkTb{Ve+lL#^!rh@6HZ->>1d^`yS`J!oQ9WBBLa`CF2I zx#X{-V>Eug9^~6AdgJI{ly&ou-fiEyxQ&qu#$jjHpp)*v_IY4#L~EF|De3A~G{R@xb4%BOB__?_bMU{^)n`?LS@9?=~*w^nYM^ z{h)80uA;Vngi8q7#hpd5JWb!#-t(&~CNhKp zRpNGWX7u9AC-|4`X1wH_0_F#$Lo4HN(nj45vT>t%w&4FOH-WYCrAwFcJnHM$flZ08 zMvuh5Z@|l>s1FopPbB#LZTtP+3m>$-US)e8iGjXH+`Y3o?U+}49^T^Dq$d*e76yWD z)jzT+Bvtgw8*l=#o>@S(q57 z8&|*bLtP%tNjkYdJ1T$l`1YemT~@06Ne2?438c%jm;RMbTDa_wwlrLct+To;Yb@89 zyThU%e#>&neL0Ewlcj?=XE**j`tH^YQA6LARt=ivnEi0XaAz^sw#&aszHyJfu{V10 zz1{1Mp5fV}5;JaQmYV9*V4Rwr8WG>@T&tN~pS4XjI(zr2)K8l8%^u6Uy<461V&Rj^ z2W2~W@+2-6EYsM!O>gHnXYCE@2RoZOMaMpPnv?>u8~P<*uco%Z&hxOs)Pf-Tp%2}S z@6y7OdZW+RiSZmEb-twC=d6-CFO2P7c5U_cDKz5-|K>(tSG4~%LumeCGO6z1a3+mS z_3(LS2niDC%8AZGj@K_XNX+pRHO-W}0_HV{{EphaI;JA@1Rs)PZ&F1koFZ@irh*dj z3`Qm&zwa=z(R({TC>9WJq!o9=B13ewwBk_1UP0^g^2pG!XM64(V^oJpuWWA{h6z

    1%_;Bh*C;u{U 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 z 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 literal 0 HcmV?d00001 diff --git a/gallery/ggate-theme-classic.png b/gallery/ggate-theme-classic.png new file mode 100644 index 0000000000000000000000000000000000000000..01330a0f30995e77ebcc2cb69b7f74c4b752c853 GIT binary patch literal 59971 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

    -xXZE-gkgW_O!vrX!281))s1NTe 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 literal 0 HcmV?d00001 diff --git a/gallery/ggate-theme-frappe-dark.png b/gallery/ggate-theme-frappe-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..839f82fca67ef57a2b369157eded818c40a0dd19 GIT binary patch literal 63188 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

  1. ur?YT0e| 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 KE0m-4r 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 z,=S`TvFFVjp_LQ@1uKqMGQ(kKO0*5~y>Cc+O;k%PPdof%tC2gSX4^Md+%|Rv8aTQCagOL$VeJnomlO2 zz$`;Tve#-}xExd3G;=FOX4g*@J<`!><{+u^CC~kXc$$M=^;0-7FRI9>0t7OXFE5dU zeJ2&R{y?vG{32y~&gYVzRG68fhxQyiX%EmJZE~bcULYx^q4u2Q7&Kd0V}ggrDdWD$ z!5SfY-3&xg5Yf#8&VZgmcGWO$^rat~X5a21X6WtPw_r$R5L2hEv-Vg`O|7($k#QG& zX2DLN2f*K7zluH^c5RT1Nee;OYCM&oG%mOyD+_D7rK+Jpht~p>lx)z~Oj+v#Zt+PE z_N;>=bn^9Fu4(HR`>rPV~rzbM= z2V65>6J)3$GB~mbqOKyaA7~S^9~9d-Gm42zO9$1D`R$8RTRaA7LF*><9KB43bs-U; zUr-EYHirsF1tle=Qp2BfPkV~2!+<0`FgQ4Ic2>P;)Ng8)d`oH!XmEkCeFA{c98=9m z&?#nPQ!xw9pawx!NFPu<=L*ZU#R`ES8l!-K8faN1I;VaAei%`n1;YmKvRcu5FSKox z^1zc^dE#i9=X`e`R6S zx&~zwL{(BG#cZy^S(>A~g*J>M6OqyDi57p`{c3p-*%7xV+UOWpx>6Sh&vStoGGMW- zFb|_ve7Tmod1V{ViUD|!1rcfxlsnQ?`{PFoq)56t(|VuhyXjZFSqAP0S=0Hcw#2F3 zb>S9%Y-&)40Vuy#wrA@$lZ-(vWKn0Ty(V%r%-R$;@fm(`J;ghdGiX}wvJ0yR$md^A z1OA#I9dWg`ysBwR1DOR7Z1F|jm4Yh0;a?jE3fu_AeB$G_5Z%*{%op!~#H8XhZ~-%* z%aAQS?Y?7n|IH@HWL)l9YUgYBT~nHr9(LP`I+z7M9tk38@)ZaSY>a|j5&?nnX9c2N z1Rss9f#+gXb%7o1^TF*FnGlORLmNPTZVhE(Ny*7KzM!2&me(eIla;g66|JpvVekz) zman@EZv=;jr&5>{NJF|Nt9NcSFOzrE0UETdHFUMLI~=2)KDAM|A8Yt3g_h}T&voHx zWAvrIg_a{DBb=7wV=uda=-PB;8Q_cKHbPM=JBh7DR-$j?HopFR zWgAb?jQy!1eq)z$smqC>pG~$%C-ph21n&x72GZ&aSFcDpYi{F?>qp51c@wU#fw(-* z!n^^Caks{uyrRyevaa!*QT(mxQp#6wwvs4?(oBZefVlmV)9-#Tl`9kP-t4Qf>3P21 z8}B5aYM&?CZPMvXozc$ECKZHr;h6NpXv1X2~sT72=sFU2!4NDlr*bmorMRM;+t&{pE@+tr$$yHDQ- zsME~d^eJly1~}r7Ts*6Dd{udXLEUKyze`VVjv|ltj2cqep=)*awyrNe3!C2xiJdck zLcOHv2$D>!VRKI`bN)dMP3;J0Qr#F@V~(wUj&;h;Q_LhvjFZ_vSxrabaftQo8)a<; z9k80o1r5o+EZm<}mex(rKhBs3tb>R1a(BF0Sl7FJJRqCcV37F*uN(O-=1Y4rE*vG7 zXpWmI12^$$Yq<7%>nwn)&vN0G|1)s?`FO@JN~-wp_8gzxLr?}BfX`$PSThy*k6@K?2qIqC=~uyu(TEDO{uzS>Cb?Cd*nKE{tqpjga4D)|86Gn zA2Innm4xsQ@tY&4SV986*wlu0I`4^5l0QcG&oCc)sk#3tr+oMiv9$lK*KZz+431fl zsUz4I{&GG3-qi*6WTcBjOoC+LBVb_*Z5{jluPwuWkKS`})5!r_y1x4T93d#OUjYK@ z#~_hM9S|OFWTk)m_0lroW0ff`BwLQZB0M^t`F2cRCHIHCCL~j3K($;^TuQ2SaBodf z>Z4g%t2P4LAlH+3(T0=MLQYCJEKV>fe^4V0*dQB2EQ{02w!}f)j4PzPs7M9+;t>~) z#$JFbM3OF~ar~=ccK1#H+V&yCp~ug)6S(XJ==0zG3ohmTBUz;qKnP^`Qc|AKba6y* zd-ku6b{~vp?Ta`=jS-H) zz~I$3#7n_#f@zBA4rLvY1A^zdfDG$dr6fowb68J57ekWOpet!*l{0`wr-7OSGw8Fq zU6b2hr*84NqMHQMKgUqjx-yu z^g(iID!+WU6mrw3bhY?^^SG`vdn<{9DT)~lbQ!(5h9x&i+)=4YNk{;V9ngjEbRA9& zNJab9jK~7PG^VZX@3Z#9hc!kfrZmq1-rrw2vDwJ#fFGQ?pvQ|g%?e>jQrHGoDLQqV zZW&Iejcz`R(RWYa6 zC)cL~lXN5P}W8v|mMz52$5Bg>lyEuTMs{@E5gfH(>ct96eb zJb=cZ4?z8sJ~^oeAJF1O*^Q_+11G*T*7NsrZ*e`3mQTdbMkOM~?ccwDb zojWmQdk$_1QrqvrrkOLcVamB(AkCcfw31Hy`EyafBAdBna8w}urv^&yRb9Vt8J$K3 zrA(sw`hq!*>n2R9YvEU~UV?RVl4HHHqGHsHCm?d*nhzGvX(vtrpd;6!Y{y%Da4_BSsg=RD3?j_~d zHIj5weU>%wfUM0F_U8eT3*OOslY@>}0po!k^Vk~QrjolLd)Ie570F~F*NdTNc8EO& z9l9CqOeJyw6Rt3jIE)8`g)OZ6%I`m07~15!I3O@lP*h}OW=?N1M{03$I}FmY$7Jr`f18R5yLz=kCWX#Q2#<b);DX> zhcpt~$asL{U1g-&GmTwFK_L){D$)zblWz+G)O3SM@PP>R0p*Y+DXQjwD!l%{b`i&; zkYwzX@uURCx=TF;h%xi$%eEDXs4|QvaijF|y|baJc}~f)u@A)k{x1glumw_IVm*`h zbtb!sJhjrz8}zF(o2W@aed+=!X|K-e?=8L{;>x{3o9nC=w*OfoWm z)TB_hAQ3E-`0e#E{eIxq6)<57$eNZ!p(+2O$E}c5OqcAPG1LYtpZ7x^EmhAdIcvx}R6wxH9 z=BEREhCqJ~4xu#q+iMvhh+xxW{d$s5T|vw$$_k1n(2AM9>ipnMeWnNU=~p>#PA6MXr^SjI=2X^ zB*b6jS{p(9l=?k6gfpH}p&YUx7b=}74^k}FUj61Zb3{#`-$JVHIM=~v{_73MtAbv4 zaXaFISFdz9<)7zcUVry;U;+TBNDwemJ%75vYDnUUedOYO518z5$97LZQ#^rIpzJhbRRj)bU zCBY&%=+*K2Sv*ON)}JIjfBpt9uQEgfqV7%GHNsR~P~O**bYuT%5fHo*fl4i?(tJGv z_P8fgD=}O;acgBNZDV7DuLe3E9|ruh24bMtYS5?ae^vJ-P)(lO+O)RX<4{kJ0}ddy zMiFIDnS=;YsbZXavBz(#De*4|~+0TC7y{+*EVm8L;`O~K+2nq#Ej%nB9 z_Uw#p=y=D2sjV+Nid{QL+}eGd^DkXH5dHZOAh%-{G9SNH)3zTA5^28kTlD6dNNLcL zwRkip9R}^q_2F5LFwEmcW@bwnSCn>)Esr5uLYvJ3yT;O|jSJ92vmMc9P6E6KjH$J6 zhRw6pvRJ=iqzQy}5XifRg};Bs-@vHa-&0 zhL!29^}5%n{126lWFebs;Oub-E|JtvV24LV;ap2!y*dE}k1FAvWt9j3N6$RAN{v>- zs@qw8>ptTAT9zk;Lecv0qP~C5E zsm`&ngE6O5bosN|o?%wOmEVO{x9(zm&y0$Q?i!wr>-p{v+1DS!p5qUh5IESQy^I0x z=}0sg9D5S@7o_9?<4^WZyllZy-6Bv9Zyx4$B_+H$5wv{mwl=33XaqOWSLPUNxo*i+ z{38!+wK{A75qq>gI-{qD0GXT)(DM(pKIU#Z6k>p@kXK?W_n7_IyM>vggHNw2SZAis! zu|12pBbV1!2x0-7RLB>)vp<4vnftQvJ_{ErQX%Tf-eI9n;fB*EJJk)m`g{!07d|Ep z{<8q^g7qBzwWR8L39lph?g$$Ze3sz4ReCFsmp^{e>9%6*^uNmf{y~~ZXbF{C=~)Ei z&;0*-SfWh(pZ|Or)D-&9f@O4rp_CPIq4QdXp?{OqU3Z5@+pURzuICY)3o{8 ze_{Y^?*1N>w@Z&IAb&3NKl&NzZ|Zkk_Osg?|6OdAl3B=y_#0o=ESAY)q)&I#!n+AK z(ql3%q$Bigy`5;|oq>q|v}qdO2a2G~lt~i{A8m|hm-GvdM_F-NJzsoG5c~&hKq)+x z8{`1<1px1)h8K2E>++|rOj~Y1z5w$2rSg3s5kSy3-?2NsL!lUb99hF_#!BAmZ_?k( z$Q-GLcNmD~v&8MI)JjoUkPsISg>+^lv;x?7(yFsP(7stc`t%3yLu6ENWy?UH0QzFq z41N6byh7k{#FIF2IzS|-&(+!Do8O7+P$gC7uAt#qLT@LOFKkFh}MWZ*zNT zho-6g`N?#+m^z%SdhwzKwD(Br0@a}hTeY!APb^pk#ks$?CSYLK4h|0PQBry&scAz6I`tQ)OPAKl>-!}& zQ)AG-3xF-u;RG(F`Iz8Uv}^t)k2;mYlVoT_f(6D3I z;F*xK2GDc4DbGO`2mll0$NFfqFWgGJSk2(Cby=mi$Zb=%o?HOY{>i<)$D@|w%9Ah{ zi&K@=ggAmoWphLYKXzw@=)3fMk?LWXXAeF$9r-sZ(;Ao%w9(`xbMvx1FV{@yGzr}K zhRvHhFMsr_&)6DXa!XIqzrb!`+ainzZGRT3{}d=l4WBUc;L4|bmKgl$^%yv#fxpDa zxs(AS>n5lgXk0!lUar36U?DmR@2DhK4-QCInlN8Ji+ zF%Ha&`kd6&7a3VHa~R*9Y0=fkiTpBIWqaPOqjtX`Q0SMe<8rxPto~C*?yUg+wc z962eQjixO8#zJAsMf0Szn>$~zVqz|&Qj>FAppXHt*Qc|MUo8czz#osGp#fdafA<>? zJaig!?Jd@HcAhQ^@$lp%;QM-e<1;fe6IjV6O7LHAZ|{oa+}LV_2?Gk{ z{x&^b__d0Picfd<+4?I%@{uG#HL2EBP_@cu7YGBd#<8epx8E57^h4$jUE`3!5y zm#aooEmfgY>_cEOuGNrtDy?6+L6j!B{K55d2i6D+3JMOruLz(HlY>pH%7)gii;2}v zrTUnDjh=dSI?mghxY){f8;youL0F94X#;3dHJrf02nIuQ+(y{Z81b6`j=JP>H^*LF zHxTc|@ovn}#CLiV@UxY&VJHRRn4%|Mq~fZxowC@b$o0usv(>r*R1WwU9`*nXY`+gq z7Hgv1G5px3FC5PjV*6%8OgX-^9U+e&!CTvwXA~=_jEOh=Tb@BCmEX1 zPDt=hHWY=uS9w)`u{qQhs2J#)jQ1TuZqIMhqQCL!u~q!i{=hX`K`HgqvI}aGTP(F+ zvSIRYBbwC+uDREKRG#IHKdUz%@9O;ka$bGK__>1mIG^vy!y)LI+Q<9X=*$$^xI+i2 zYn?glFccj_+angS`ssgBlwYmxKThqFEP(i=Ua9K~^1D@?twFvRTpaq%)DU4|*%9 zR9@Y` zcp1ISmxP{_#G6ewmR~av!_cA{7-9Vgm6nmwkQ_xU`gMckw}-E-sSOmtKOAHx;Lnni zpe^ICk~4uahezNy#HWvtlejW6S!Pz_Qhw6Eto4)K@Bbns#Dt1CvF5fs-3FET2r1;- zWOwiGkMc`?YyJAYRx+y%-M6N4eTZ;JZvW;btnFNahyOjF_HP{DIgi`nwGpbH2L^xo z@ILyj#3$f|E+35PK3GO)?={PK1l`5|^)+eM_|Yl;!>28k?EbCeyBBe(i0b1m8o{a3 zU$4c)g@l9qh0ml^=2^EWNPgY9S{qpNy**pNPIs%{@7nnM zhi8i(1V=|lmvSE3XZVpJ`+=)v!qx1nv?$3_@DF(U;@Puv`fr2#-07igDxIJYo!u3f zJ??ZL18xy-lr796yCldE$>}^th8}uM06sk4(hOE zn^3F8K-R6ETh+U;9T^swZ#5-fuHy2AL~~8FX!jG~&KS*+k&#Y)rOAwJ5UL~<7wbZ& zl)98N4OsHx;v&PUTa4NFwm5%he*O-`_N}YCySrQa`V!z~r#Zzc76nO}nJ!V21B?bR zWhO5oy#rdFfAX5&tNlEXPMUibHIf`fBxQ>UK*T&K4_JG!5~&gc+WZhCs%1~b2m zelBSuEw#0+EgW2GYDoz?BcnU#_W1s24Tq~PCDTEhHE-BL{p}H;$I-E8QMOh0H)F}w z3Z(C#Lpj#q_2cl9$+vGi(V^ivxUFKLI8pjQ6jp->6b`87TyOq0?pD<}mP`}#NpIj^ z!cb6j!rBZ?#o=dGsKeRDwzjsp$v$UiXP@`K1i97hlua%!UX0@Q#IQ)>NK3!jW1Ynw zj%P8#GAtRk`t94dQCR5O90@JnAAy%VrbpWF%B6QvLtERvHe6}hds9hzRMB_dHjs$3 zYmAEyR=pGn{}&>B`nbRwV#gBNMm?Efv2}rf4phDrZ`Y^r=`6;;^-BI zLLtaJM%;817MoVM|N58ek#;j&Lxh=i1e1bmcki7fE#lH4VOP)rU(a{n4&5q+! zZt_!YpE%#6*R1cMuhkBtY7Exul|~IGOveRbJSM`4I14kg!tNBmGiMsM#R3p;8$KaD zPA#+N>38TkG#bs$4z-Gm*h`_u_6t(lhGqUPEHs;s~$2%;6v!Xg%uOl_L5 zo6=M-f&T*!jk8@Ap!^FiPIx6*${+i0PyS9_S^)JINlv#xcK)Xb^!dct?uflsU#ylr zb0)pDr^S3+Lb>=~Nx8WD?Z-HCB)jFy{|vrA2C@Io!S`~40WBj#WyFoT1eFgTTT>kM z4%B;sF~dS8un*irAKpB3aCJ30bLPxORm;cf^h0_eqV>F2dBjXh5@h6z174{2^_1#} zg)}k!(87R0^u8;8eZrYmw}rtVfTr#+1MiMt9w&BoDIOn1exRJD=x4NyNB}~`5%ud^ z7Qy@Q%KG^MNSi=jTdICEbOYQC)UY12q@)CTXgc${X~Gh}2~$c9C?N9XhzmchydV{z ztT2Lo;b6S_x%fkrc)yv|e1l+|BBCQc8DFo5Z2eBU=*U@pUXq|4C%i`Mcw0`uzerCv zwX%von%LxCdT!6o8r5o?>tsh{TSv&7pTF6$=s}MMs0q<*@w}RW(WenHz$S=@gx#XS z6c~e114Da{s>Y*pd%2vLo8!=)7DyM6b{p%_FRg-a{{RAf z_V~m^EoXY#ywv-aUH#((5OVKXwNd$mmzP&pSJwfOs8mBsYZo@bcVb*aQ}Y^(nH!&( zIqNuCfLwOhnV7fk^q~;6mX%d65<4Q5b@qU_5RB+Cxi4w9HDrK`o&(#qNS;qn_>tx& znpm_V7swX~NjiGfL=hV|%q5A}B7t{eVggyPtWp+%g(dsF4`2>=IcCv;47a6hUBn)M z?GN{e#gfgeJ0B{D7y7`b>e*Cj%*m0a^BHc{@?Oc=+57)Fy6IwJ40eZ~m|r;jE?8}X z%B)dj6>$)t|Kfc50mqJdTpxQ_NYq+==0CtY`ME$5o1RsR6I6=FJ)8jdW63`3(Rn$G za=}DiVWDE@ehlzXw5O?w7(C}CI6PbEsp(o20y<^QHEW*XXDQT7?Pb>EhleH z7^XDiFsg_(FfizXp&SqlusIN3dr0DC4vvm>RS#l6%y>~EQ4S6c4FPNQ+uVB*kG4KI z;2l>{vY@Mv1iXCR(|=1OjK$KBzjUj+mzSTP43>^OaIEK4hqy{xq#`db4;aIwQJ?=3 zg$3ll^6rGyj49NQ-FRmCA=|7dk9JJ9w6w$^SVJ*kq2t{7^YgxGSv={9@u|>&z9x!# z>VEK@YGon49t=HR7>4KS1N~(WT&oR7)gUMw;-E2P7)E~YhV*#QVB$pDxmsvWu$a#Q zD&8G{TC(wO+h2d0)jPw11%O#QtAKmYLQft-%m&`SvCVFFCgSLu|G$|#kS2) zk6}IQYs8BT+M{(wevT89h9hTOb&GNHQn;6}`kwrvV%$y38;*|bc$S|w^utpEbQt2} z4m%ohjysrbze{*_Ek?kGfs=)9T@I-r&NN?UUH2EoxQEcZ5Dgz0hO&?M zI9@ImTDXaYYm=Tm+W}TlYtg?LnII_km~@|SXC$Sk?}fG#dh_KUYSYcZ+7f#3{rs5( znluCR7j0R;Mu_75rl=puXOX@oiI}A5C>&7-V8YHayC&GkOnyJ^5shC$qk}${9Yk7K zAuJ{l2!u$LlFNlmYmy(-GpP&jR^iLFH8hZYauScn-?(wZce)}gD~oQA;YauOv0Eu3 zTiS#K^7)sq25p;_m6d2vL8K}kA_=kttr+2{Oq!@F&ikDOq`tp7b+yH<*yjDMBO|j8 z){tGPCZZtTGQe6|(LZ-`DJ8bfvQ%Yqx>;}F0kM$Wp{1k1#$EtYp)CSCd!y4__)<`{^qaM?F$vKm*?dD19k8mRWxHNM{pkW~R|l|3kLl@D7F6HtEh--4ZB*W+@Q} zp@jSoqiNGyq`J<-l}Ns>$*^RwdEnKvF7K2q_P&Fw0nyup>LnN|5R}*Lx-T)&v1g&9 z+11;!ZktQqWc))wW+Khq3zXfIs8y;5#ZlFny)3?`hez_cJ@bo<&dz95iJV$g9mKMe zW@Zdk?pq%hBd#Q>`!7R?J8NLhJgDr(5)%n#;~SHQ`$f(^Getw0FD(jHO;gVjUURL> zd_ABY)EPKE5d%3Gp#5lsbO64EB8`gmtQuAG92BesbtH0wj##kv8VJf9TwEG63Ps;C zXXzRI91pvsJkBwbs)bM$`eGjDEZJ{1m=qT4Dmtr59eyY1V-f6V z420dZrx3JQL~e<1Nbk+p50He!Du;fE?X(RdbsT}icV{>B*WmlunUH%V(($*hJ0g_m zMpB04GgrTq+C0MJ^b2RWCg9_P)yiKn7l7t|4Dr>Eg%>9P%3qe_dFqrS2sIKDNa$*2 zJ%waj6{W!hFPhdM%h-G@Fib zJa&HdKY#lYyn?Dz+M$=_jx(ofa=WuX% zLm5Z(pmVw9++L*!-PVqd1Rgu|G`UnbojP2#l@O>;NTGUsG*L%ib12&V`8KqFL-;|)-1Voip&`{*~(I&5Gk^o8R_Gg|oHzEStp z2bqg5@S}ztUn#wK@UP1~Hwm}CZ*aAaMS)$iIdAKY$T2Z737a|aRi}@nNyRG5gYRk0 z;fTD59v`L^V%t7U!u2d3lEmca=Og=r{h=;P?x!WH=jL-rEOT?iAxj(naaCho(JdQp zjDog{rE1YYDNGms4)W3fw8 zu^;0WMpM35mjnZUgOJ99ax(t`f}QtU@`|s#{-j#)zvC5k(9(qN@>hQr5PmNyeEO#U zCFW5sJdkK_Z%+UM-TMR%r zUIpHpWTl9cK7)5<)ro?I`UE{ZZKb53?{CmdoNiKEzY!(E(QenN?EQdTAHZjXw8M~pfGy2)j5P=8iG=%x)CYn602aqQ%9E3K_Aho6 z!Z!P{bVNl_!o?$81&p+|gZ^JW)#$S|;Yy}tRIHYBEy!(R=O-Dd<>mU-+wiA1s$9ye ziy@2@ICYZoGrU{Kwhs&pR5o`zha@CeH#l>8?Ux^Uop}zX*4~LqfVsZ`7ycFG zZz_Xjk$DmG7ElWYNv-;~&9|jGV$Px*;Sal0N1;GOo3zoN>6mDZZ+z3g)^6 zcjjC>rCNH^JmqwB+~{Zn^nV{w+87*t;Mz&#VFI(cBjn(B5!d1vQ29CzDM=^gJD)?|8)gB(Cw8tV-Qae_7|-(c25|Xop)r zfol(+Z(cn275M0Ir#49Qf?WmW`+KH5emJf9NW^<6SwnJNG+gc z_YXCSsX($r(dR}MqmhEa05mcpm(FLn!tlzl-_2<4vIB1RVA)h52c2_kDCMP9i7Lo? z3t-5H5ZW}vXzUM`RcnOE77c`$c%&#U8CguHo+2ge0iqxza2~KRzN){}8b<}Ad&!^z zvE0UBF!LG2_9O+(8|TPLP(f4-Ljg~>0QE+G=tju-+a}r2IxH6gby;Q@3NmmM7GxFi zuouEl(qix+0>ji1xWboAJSlV9sy~6E6tVx$Ys5YN8gtBghx+Nl{znReffbw8QxX~8 zaX2#oFx*n6mCkt5I(Ew`wUKiE3|)^aI0#!<9q0-a+HOV>NonEm{N4Loy)M!-=TL-E zPp?cMlhp0zgohV%U^VGX6$>pzEbL(}KEBn6gd1&$?PizJ&=YkdZgda4Zwln|lMFpc z;NKLtJSh=pY8nQin?2V`9|pUaROh#xa{Qnmo_!|gGhC{CDQ|a>yq0Q1Ljw{;p(v?- z^?PRoPPMhSj{w%HN5F)8qfUvL0WGTs{1$>cgSPn|gtW09{P1I_+rrGi$u(lXbTe9b z39DQY&KmiMc(U+V7T_Y&3|$Wo4}_*aaHH)_DW|In$&Ynre=Fqprp+X1XiUAOigPKw z6i`g)LTMK^hBOSX*S~c z-n;-?*Bxe1j&#~n>Hu}ecIMi1iw$vzEkKuoPT1ho`3{9)9@A{3!IfwlqBGjyx?pcn zbn{9_7LJ146|xqo6j3>zU=QPIoPM{HfTAfZz z1?ylI5+_@LcCr8M=Wp$}Nucua7EA`?B$@6vYFc914ZaiH)cTco6WqZPrrBMf<*|pdD?Xkz87;{p z_RXz%^Cn*VDeQcD6}wTkedY{~dS{ysd(lpGI3qU;!z_Q>tuDczm&aaQG$8HXq@J>! zHg6GS_uE&wV-m}HuDnL557P|nr`~3N%%x2JBvE@a(|=G(xv$=He5T^FeSf}*;{K0t zy`Q2Yq^h}%xWF{ee%Eo^({skO92oa{b^4o@jVMtmP& zaR8jiGRy6AQfhUo8y742u&MN`i8tSSjrF_LWtf+EI+Nu~ru&}*zcbU>j&bhFi-U5? zG7~A0vHJLmvP5xvmdG8#+pBJOn6N_uHNoi+ecu{uR<0kfU5^41vge8PCkOug0rnhm z9V1OzFjC9P^pHHLBaS4xtH->MMO4D^YR%j^o%SQ9lto*pn{m7;u`b2>HdRvxaZnI3 za*R5ejKX?&%&W4wf2?E1EYZgtZ>iYo>z{zk%Suaw8AoTxNtQEuzeD-xf7wk#coxbS>4XhN)xZ#rmPX;7*Ik%Gzy>=`a{WkieIO(z+2`UpjXd-Z?)hP3kMkb;sZ&VYIfZi-<>|k%77^;g!(%{2t#) zXI>9e)nPP^w+`y zoapNA#y@!9SzfjS!EPWPtUaZc(K&fba#={TdcPJf8;>y48s6H!PzVK5+mI5@3`*{+fE-EQE4lRv zGqDm9tlQ1R-TwD`kfJc~bKho_emIHH6xO){7&9CJRmc$pXCQpAq&4yBzWK~nPbwoJ zM4DjU**CUjk*-&G04iSncF^a8mnEKG%ULk#5$<rS?&N)h z5(ao%*0T}0N&jDxC6)Tet0GS(BfK^ikY@~=PTTi!2f6opXb(dPZjisfzw8aX=Mw~BV^m&;(02F5#2%JGirz_)ci^QebPIu*F z$uJb#p7$Xg-x%-r0n7KJoKh3s1Wq{&1@N<*RSaAxr?^gm)8126jw6@;m-4c&eGN#= zmy0L_CT9f_NeFR(z?3_Cq;7n9{=M?`g^;yC8tJ@6^*)z_UygT6Vup8h(%i~Z$$V|D5J^^Oi0X8;t?^}NL9UEr=qr*N^68NmyOdi zmyV-U^f@fCj{i{H{i~Rcfd56J!m23WvvKABS(5V4(sBQL^d{26AjQ7&o<(bCC)J2| zH5;iO?tn#e_unhchktqY6q+YAHVT>*gjh&R;Ne500JA`t>3Ziv0_N_~K~SYg7Cyk> z*w#f5lbnLen`+6_5Opdil+~(<#1vJU;9g!q0X*~lD~gUv-n~f<%t9P#;nD!0Ic(~! zGX({udD9T6PL#6aUHh4Q35Ap?a%fFK>i(M+u1e6t<%g0o@Y>NI6&5Oja-iLhRR{&D zW;_8??48A6^(2aYL9A8JE%##kw}0h&4icjE!N-qC{&-nBC_4sNP2!HiOe0|P$+mTo z8Ndv!LNbeyFp40a*vpje)HPT#AU&d0H!yIv)yu}FrcP%sq*oj7i2%WCE1NejEkHs9 zAtM5<2&63ps2>C2u0VB=l6u8jm9;SB57e1mPth%5v5~>+F%1ok(!?zZ-tTIl9yRjQ zx)6GUHVIu9X@w{$x?O3KjgF*#rv+^1pj+aIlT7Aijl9F``653O_HW0Ei3JLvC49AyKn4zDp4= z2_l~OS6PuV;?alAp1C5vm`>zy*;(Snd4OXIZN9JoAE17u2E~_&cA(CtyV1TkRMxMI z-f!beL0XSPr=7z(MZN4JW8nO4r{3;2r+(mB*$oxu=i86eMwnCGu0aY?S+-3|gfAO; z0&Aa(;UA?l8P?s8;bdGKPzKt##TGGotb`pl{Oa}Bbq=ZVF%-dYc@LgN8f`P}?{s&8 zw&*^LlC#|-F?#Y#mr8!BKIeGDQ<>D|z&bR*W-9=EZtLiCteM|*gAA%#V#t21{tuP`w*G=${-Rs{p{UZj^fKz}Y@)+0f3 zNOkIFQ^^TXih^iJI6{j=Nf^=5(NSWrJyfI<_=3gfalHr`DVR&;j)0S{2Vr*0+k+(x z9!O*$+UX%k3@Pps+dmhcSB)|SwFmUvX??lvZ0(3!aY+emzi5-Rxj>>mU9yvW(?RGU z-=^9EIdCF?rz=rIkp1cKT*cF&Twfug`vb7{l#%_>qh~P?(jRg=aG-tM9}^WIK-kap zROzduV~ZkgzVf87&SqciVaAUw-O|L9&>miIzfetr;%oseA{8`*;6m7J*aI!6FmYX7 z@8y`(izi*HAOP>7O2Or@gn=YW#1@@0MxKjq^7nb}JFr{xL`l_@mpr z5?E~v_xJZb-%Iw$TX~DagWonM^&T-Gu?|Vh&NKBLFr0zGfU`j~3RU!*gP*GvBI(WL z!=QBBCj&kbws#u%x)dl4gknUt@Gr@AU6r%dG?i)vae-8%U9t6Ykp5~nu&PN04Je~g zfE1uBMs%v1fk@tElyLj7*Bt<_r7)Ah!KE(_l%&vXZVx2C$nSw?a$2#dHtjT8nD0EP z)6v%#3EbBKL;3tS?#Pl{K74)b^|u@Z8$x=T3_W@nv!MFR%gY0#;elXFM2-9z4i9nM zXNDS4^0Lf*#Uhxkx_x6Dlu(Ejj6O58VGno#=JRJ8xw_o9Hbwx8^#`80dTOvKr!6cj zpc`5=Xq{2xJi%}4jO=Ewo{{LTIFvyB)h1bG1^emxd`mL;gzRWYwxP*W1P~!kyMlrr z&m|# z0|5(2x~zx}#z32ZD^3Q8)7~!1LJ+0DFtzTBfTqQHwNxl%!?@grZw%|-+RXgC!wy+9 zDA|D10$C!0kv!tjQ5WFJ$H^=hlh(MDVA0|C&X{?5*|t9xxmvo>PB+P6h_RuJ93twlD`Wf@Ri z1sF@>C|EAO0YnqxI>&;wV_hKa;KpQRDQK?TDJ06sEI*I^{>Zr}(i7!)JFxxl5GEH& zVm$;Rl+1dEG{KuJyJT?wyooAHSe})YUs96J#N+b6{^{;2*{Rky@wSZFLnX2K7|Usg zRAFO0&+{DuQC91Df~A{)Q5aQQgF+|+O9rZQc~W3;u{;;>rXz)_Z8CZIEu(XRuj@!6 z>2cn!^OjS0puIOy^-6^;Z*-`cFS`m&Onh&9$-<(w zx0i6Z1E~)TG(APGA98&DDKLo$MIS87?fuyr`fnm84v_++7i&+ffd&9)!IuFO$9J0G z7Ixg>EY7E=dkJYduzdnd7>zh51Uvj)F=0wa1RF0UBV+oB=qa)m{(}vx37c#ImAlO~ zpW-N$xGOit>9{X{>0l+H?M8=z%4+DyP>DW}%$h3i@cni!U-W~aivD#?V4|Mem(tHl zBm-N0nn=ya^R0NFoVeEDZ4cEQxZ`j1+*vDXp*ClV6Wcu)BjmY%(KH#mxWdf^18wT>DQHakFLD?>t|H%VKMn~QFmusKTHT7{PoL#oM>^yGECZSiT1SgNF}Ow|0#vb zwDZ1SNMh`33y<^XV?f#`w-T77JyyRyY5IdBUhsfGZ8FjC4U1n(p&@);!xy;tMfoK z`pvjgj3DxVf@#J64POT>O9W-Kq`3d=-HUYYp}{)!uEea5!Rp+evU7fd+0+>fFtDWD zzkP`~e5loYOa}izr+^h8xel-?tK;Ai8W30bo&6+hyIU|6Qa4B(JVk6QJ6_u zUbbc9k)rQj2!TJrasm5KAlmVM;pN3Mh9DNMTwxO>DlGRP03!f8>H?<*9uxO=(ht^= z-Y7(LtG5b7XSA&-`)#(6Q4p^9d7MTo+TEj9q8@FemGAJjw{bSA9((}DxzB<-)kUM% z{=NACdh48!*Z)9z3+V8=kq<1fh$W<>rYlkLUQq8yfqK>yD@6B34Nh*X((%R(z~H&L z53L$;UcGC811gWPH4K}C6EAVJ#dKOdC{6JrTecieO-#H(VSrKpmuGi==VJuf)v67k z*9Sb$F$7-(yQl?_Kj@y|>s)Cs%6#!+BKk}5apo`hW$d#DdSo}E~(tE-y;ym;Ae>?yK|2RRcb>ed295Y5%G zo6~#mf;5Q=Dgx7t0-IFB=BUu7hRhVlPn(=LZ|7EjU9B&AjfF&dI*8EIs>Gwa}-Z^gNT;fH(Fu6(?K}k+Bk4f=*J;*-u*D+_u zt&(gI-uud+zJ8*(oZCND-=@X)poz^w8yIvMX*y%r^p?Fw7(@|b`PB7a@`VfJZ1MlW<|L3#D-%;*pyTE_Z( z*$c*`3;tsx3Gw6TXc&l*x#hvGYpL!BjJL9)ZY&d32l51;m!Up0QafUAf!qf6*xBzh Jk6!-q{{aTorhEVZ literal 0 HcmV?d00001 diff --git a/gallery/ggate-theme-space-dark.png b/gallery/ggate-theme-space-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..22cd5fd0c46118a84848b80308052e5d62ae9617 GIT binary patch literal 61083 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 R8UnG}!TfJn_$i_-ni&p2- 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

    y;Af8=mZ{6uuKDby*iEDdLR%he5Wrb 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 literal 0 HcmV?d00001 diff --git a/gallery/ggate-timing-diagram.png b/gallery/ggate-timing-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0489b1ee0c9ebf2ba6585a78e6551133b853e6bd GIT binary patch literal 67862 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�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 literal 0 HcmV?d00001 diff --git a/meson_options.txt b/meson_options.txt index 991df38..009b4a6 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -5,5 +5,6 @@ option( 'release', 'development', ], - value: 'development' + value: 'development', + description: 'Build profile: development uses the .Dev app id and dev resources' ) diff --git a/poetry.lock b/poetry.lock index df53963..9f054d5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,36 @@ -# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version == \"3.10\"" +files = [ + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + +[package.extras] +test = ["pytest (>=6)"] [[package]] name = "igraph" @@ -54,47 +86,17 @@ test-musl = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pyt test-win-arm64 = ["cairocffi (>=1.2.0)", "networkx (>=2.5)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] [[package]] -name = "meson" -version = "1.8.2" -description = "A high performance build system" +name = "iniconfig" +version = "2.3.0" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "meson-1.8.2-py3-none-any.whl", hash = "sha256:274b49dbe26e00c9a591442dd30f4ae9da8ce11ce53d0f4682cd10a45d50f6fd"}, - {file = "meson-1.8.2.tar.gz", hash = "sha256:c105816d8158c76b72adcb9ff60297719096da7d07f6b1f000fd8c013cd387af"}, -] - -[package.extras] -ninja = ["ninja (>=1.8.2)"] -progress = ["tqdm"] -typing = ["mypy", "typing_extensions ; python_version < \"3.8\""] - -[[package]] -name = "meson-python" -version = "0.18.0" -description = "Meson Python build backend (PEP 517)" -optional = false -python-versions = ">=3.8" -groups = ["main"] +python-versions = ">=3.10" +groups = ["dev"] files = [ - {file = "meson_python-0.18.0-py3-none-any.whl", hash = "sha256:3b0fe051551cc238f5febb873247c0949cd60ded556efa130aa57021804868e2"}, - {file = "meson_python-0.18.0.tar.gz", hash = "sha256:c56a99ec9df669a40662fe46960321af6e4b14106c14db228709c1628e23848d"}, + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, ] -[package.dependencies] -meson = [ - {version = ">=0.64.0", markers = "python_version < \"3.12\""}, - {version = ">=1.2.3", markers = "python_version >= \"3.12\""}, -] -packaging = ">=23.2" -pyproject-metadata = ">=0.9.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -docs = ["furo (>=2024.08.06)", "sphinx (>=8.1.0,<8.2.0)", "sphinx-copybutton (>=0.5.0)", "sphinx-design (>=0.1.0)", "sphinxext-opengraph (>=0.7.0)"] -test = ["build", "cython (>=3.0.3)", "pytest (>=6.0)", "pytest-cov[toml]", "pytest-mock", "typing-extensions (>=3.7.4) ; python_version < \"3.11\"", "wheel"] - [[package]] name = "mypy" version = "1.16.1" @@ -233,7 +235,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -251,6 +253,22 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + [[package]] name = "pycairo" version = "1.28.0" @@ -271,12 +289,29 @@ files = [ {file = "pycairo-1.28.0-cp313-cp313-win32.whl", hash = "sha256:d13352429d8a08a1cb3607767d23d2fb32e4c4f9faa642155383980ec1478c24"}, {file = "pycairo-1.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:082aef6b3a9dcc328fa648d38ed6b0a31c863e903ead57dd184b2e5f86790140"}, {file = "pycairo-1.28.0-cp313-cp313-win_arm64.whl", hash = "sha256:026afd53b75291917a7412d9fe46dcfbaa0c028febd46ff1132d44a53ac2c8b6"}, + {file = "pycairo-1.28.0-cp314-cp314-win32.whl", hash = "sha256:d0ab30585f536101ad6f09052fc3895e2a437ba57531ea07223d0e076248025d"}, + {file = "pycairo-1.28.0-cp314-cp314-win_amd64.whl", hash = "sha256:94f2ed204999ab95a0671a0fa948ffbb9f3d6fb8731fe787917f6d022d9c1c0f"}, {file = "pycairo-1.28.0-cp39-cp39-win32.whl", hash = "sha256:3ed16d48b8a79cc584cb1cb0ad62dfb265f2dda6d6a19ef5aab181693e19c83c"}, {file = "pycairo-1.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:da0d1e6d4842eed4d52779222c6e43d254244a486ca9fdab14e30042fd5bdf28"}, {file = "pycairo-1.28.0-cp39-cp39-win_arm64.whl", hash = "sha256:458877513eb2125513122e8aa9c938630e94bb0574f94f4fb5ab55eb23d6e9ac"}, {file = "pycairo-1.28.0.tar.gz", hash = "sha256:26ec5c6126781eb167089a123919f87baa2740da2cca9098be8b3a6b91cc5fbc"}, ] +[[package]] +name = "pygments" +version = "2.20.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + [[package]] name = "pygobject" version = "3.52.3" @@ -306,23 +341,28 @@ files = [ dev = ["PyGObject", "black (>=25.1.0)", "codespell (>=2.4.1)", "isort (>=6.0.1)", "pre-commit", "ruff (>=0.9.10)"] [[package]] -name = "pyproject-metadata" -version = "0.9.1" -description = "PEP 621 metadata parsing" +name = "pytest" +version = "8.4.2" +description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" -groups = ["main"] +python-versions = ">=3.9" +groups = ["dev"] files = [ - {file = "pyproject_metadata-0.9.1-py3-none-any.whl", hash = "sha256:ee5efde548c3ed9b75a354fc319d5afd25e9585fa918a34f62f904cc731973ad"}, - {file = "pyproject_metadata-0.9.1.tar.gz", hash = "sha256:b8b2253dd1b7062b78cf949a115f02ba7fa4114aabe63fa10528e9e1a954a816"}, + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, ] [package.dependencies] -packaging = ">=19.0" +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2023.9.10)", "myst-parser", "sphinx (>=7.0)", "sphinx-autodoc-typehints", "sphinx-autodoc-typehints (>=1.10.0)"] -test = ["exceptiongroup ; python_version < \"3.11\"", "pytest (>=6.2.4)", "pytest-cov[toml] (>=2)", "tomli (>=1.0.0) ; python_version < \"3.11\""] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "python-igraph" @@ -449,7 +489,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["dev"] markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -501,4 +541,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">= 3.10,<4.0" -content-hash = "9756805751f43763c8446b3e4bc6b3cf67fea601d8a77dc69e1ba385f9f82537" +content-hash = "0e36508251e760c60ff81cf54359d364cd2e0b4d318de16c8769009bf018fb9f" diff --git a/pyproject.toml b/pyproject.toml index 7c49874..e9caa6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,13 @@ ignore = ["E402"] pygobject-stubs = "^2.13.0" mypy = "^1.15.0" ruff = "^0.11.2" +pytest = "^8.0.0" + +[tool.pytest.ini_options] +testpaths = ["tests"] +python_files = "test_*.py" [build-system] requires = ["meson-python>=0.11.0"] build-backend = "mesonpy" + diff --git a/scripts/generate-resources-xml.py b/scripts/generate-resources-xml.py deleted file mode 100755 index e710fc8..0000000 --- a/scripts/generate-resources-xml.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python3 -import os -import glob -import sys -import argparse - -def main(): - parser = argparse.ArgumentParser(description="Generate GResource XML file dynamically") - parser.add_argument("--prefix", required=True, help="GResource prefix") - parser.add_argument("--output", required=True, help="Output XML file path") - parser.add_argument("--source-dir", required=True, help="Source data/images directory") - args = parser.parse_args() - - # Base directory is data/images - images_dir = os.path.abspath(args.source_dir) - # Project data dir is parent of images_dir (which is data/) - data_dir = os.path.dirname(images_dir) - - comp_files = sorted(glob.glob(os.path.join(images_dir, "components", "*.svg"))) - act_files = sorted(glob.glob(os.path.join(images_dir, "actions", "*.svg"))) - theme_files = sorted(glob.glob(os.path.join(data_dir, "themes", "*.json"))) - - lines = [] - lines.append('') - lines.append('') - lines.append(f' ') - - # Add components and actions (relative to images_dir) - for f in comp_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - lines.append(f' {rel}') - for f in act_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - lines.append(f' {rel}') - - # Add themes (alias is basename, path relative to images_dir) - for f in theme_files: - rel = os.path.relpath(f, images_dir).replace("\\", "/") - basename = os.path.basename(f) - lines.append(f' {rel}') - - lines.append(' ') - lines.append('') - - with open(args.output, "w", encoding="utf-8") as f: - f.write("\n".join(lines) + "\n") - -if __name__ == "__main__": - main()

  2. b1%f-n;4CCYh_{{-P% z1+>G(89jV;@}1wxM_N~Y8@;lH)HzNO(ksCfoxc6SSjypxbVsqTH~~v3Mgg}uLzuen zuzsv~sneObHq+W*>TEllYkfx?n=M)SWdPxrs-Z z)pVf6R8ebt)`c!AYk`MSptd~YFiW8`Jk^4=$w#DEiXkGutS-C{Gi8QcYx8)pwrR43 z+IC^Gs(NftQgmHYJh!v1WOPBw6uCy)5N^e>j`kCZ!g^xJucp*xzM9?tjK z=8|#uoNv6BjDP4rY-jyMe#QuBP?|!T76cDc49QXV@-GSoK#rQGFkoIZS`oZGUz%u# z#ZuyV=&Cs~c?de+TGKb(0fITCZd91m!mjxL6RtrqiUC>I?+j1F`9UTFyl3l= zJ-qR=lP8S~o|lj_l}Cr#X5XB@IafgPNoUG{j~-($m7R;P07G8E#jD#l%-80w@ue& zv_(KeYWywH#b1&OqrqvBAGG2_4$1N z)Gq@Cumsw8Uo?yb!5gT65vT^=%H-THp@2h=C9sf?KfBlA2ojv)^;~)Fx=2mD=QGrV zgl#7*Qy@rFg(x0ycqA2Yd!UApd2_P&CH&tG0ibW7z)*jwK*2^pA@=rn#2Gzrb0@>T znLWCxoYF#a!DfjKt0YM+G66XRNN~{+Hg7|bZSO~fb%9jTy*by85$zaF1)l^qY0T3y zETUTk?U)aa5fV+!Nyo+4^}C|c=bgt!!r}2F9OOT^iRKsDqJ5&kpw=4uu4ZhJ#LnTP zd|Wy1!!Ej@~wh)%! zWXRy!`DGG1q>8fVYo9DkI+%WPI(qKf7dyO60sPdj)HjK@cA$KyK92E3KI~8~`f9T8 z2bX@i;-!*9?4|LLY;S__2{$lYtG(=kFy&ORwhd_SJ}OqTBCxT`rLJNZUr((Rl2>h@ z-l<;%)1t5?FUYbK5ypaH=kPD!#r+P7iKG9T0%VSzN9;!}YLd3JIwi=G$tRvVP#gXt zf0s^RxZHLJt5jgWI+>(PjFZ=nhZC zXQ!?)cK#FoMTA7O%-6jJtc|>Da5~;qQXC7thEO3$tt!PJ<{`VEZ{^FRHF)kv5eJRN~&)DNKBL*NH=N4$P_P;0Y_$wxj6cRE)TsJZ}3Dx&hMhGXpVDLmpjL?mI z$2Ud+tYn0`)hn=mY|%!-9wcE+Zi17Wm=XcS0{FrJpbY4dmcOOMhA_9Q4*ci`? zd(OQUB;}m|Sz%cTu(Yx-pNYX#IoRGGQ`zQ+@BkaYS?50g;00h21q{YS_yd5ZIx>>(Nk`*0NW2(*?0fiT?F z7my_CC&o&`s+zZN?GsCvy0^SkX!c)1{JRiQAQz!1Spdtz8{l346qgWhKoeR1UlBEc z4vQ_;=uwLYVBq@M64>cVNjMIP9zg24@@M%2B6*~at&%cwzjG$Ci7m68fss}Yl3XyP zliii8o!(Fh9xi5&P7Wf#BwxPMvpS=uW4}ibZM1c_lBL%?m-?$XM4D~5yoat^CKe`u zw4Mu9OU88*RJ8rt8iIdMt3bM7Jm>=;p(>p(z9V6i*yTIq?MuKEicd&e`^qL`1VAXZ zR^4lSXZLCmmc?ay&`H;vuFrrSw;`A5vFtC{WRNC6oG(ccP<~*P9?rAkLb?qq9^q+0 z<4FH4eZfCslgKir?D`mhvhHepXamMid1Q0bLH2%=CHMA&+cnz6HS6 z^{%GbICfZns;Iws(I}V0Rwl{Dn<+*X-v?tB%yI^ik>1I9EKD>(Ptpf8%ega7I+v9e!OSEF)?oqJIkzT?(Lk| zr;mpQt0bCD=mJ>A$`j0Bc%I6N(vtwdRzTCS`8^rHKVmLCtGqA zAT&Wk8xkhUmyP;9#m3!nQqq-6{nO2n2?^32D@3%kKLGldT-f5bQ~-aEEv%pTw64^o zWB;Fpj6TG>e-ttRv)_>b{6EuPin+&=-WO1;%sS-}22lZENn*}A{SmL3Hkke?B)|cf z%Ai?Q|F01B{}dEhx5kwS0i05oRc(VGWP$;_DgNG{a@Rc9lnL$9K(&{Zmf$0%Z~Y{e zL(y%0QCHiq76!h=w~5tx761S%9yDZ7Lki}%YS_Oeo4+i)`aGXrGU$WEW7K=Xx4qzG z2=4@sYc8{|a&e^rmt^hJG3$l#{`{MLSR%rpV=wAo);$;QcM915d%s&o3nt*(2jvX< zPt{4d$X;39B7_an_VPYwGEQ5VUBgXY83iPWmyF%@AZa=@0RRBQ@H-6sKXOFH<0S&} z%jVocA9cvUI<5r(^2<(|t-wbVe`NJQVhF0iR7u0UO%)dnCF+`UtmV{|(o80(-LK*w zCoI4U*GJ=LFB%TxidAs?_f;zfP~`IKm*eFR_Box?ghd1wbZCwUaU2XceO&0!E4tAq zCk~Q31GFsG-kK_B1BGCqC>~6rs_$$WpEYX-S2I^V*hTA0Vv~+^73(PD-&c8KUi!+x z;t%+kPtfC%q6V}dO3XUn@}#SF>ddRJrl zt#h@Hc8XbNaCKJZp^0oC`JUGo@9Dm=0>QuXsv9Rp#`>lDR)$BmCFZPfv5)sOCfFD2 zyLF=RnZ4*!5i3Rp1#6isk00#%6wdzG#NT=2j<$;j{CU`>`qt)A7bDJBqq;p3ZOuUN zDM29#o_a)Eoj6WsklID)Wo5QZDH8AXzeb0GSL&tWxeT5}XyjyfS2nO)(qS(5)g3yIP+4y)oHP5KPRDiPgjfQU6GxUex)pLAS2tGs?`H3& zJFa-l3#B?I+j}5+aRhp{^rZ6O7^1vVip!Zc)=uqn`(E105)q7Vv53)7>4nQf zDo!tySVWNZpn2_a8@wA{p7@xq9Eu#IOF})n`D_x1r!|g zX)AG>G=74BL{j^YQ`UYwu_3;iB{R$FMzJ~HJFSXOu;a*yjRvsFzZHYExgTt7U z2jYDwhF!81vFPXQ@QK6yzK z%mfZ8ZxpE2TAQg+)BV#TiFdHEeSSl#+-|*Y+j69Onj)9DJg;qnDYI#+;75&=3=%0$ zxp@Z-J9&!)N-b&6JA??i(=Qa74Fc>8lV)IM6~-$$KnG02dL0=WUHXftH^43H=J&8|L{mWc~0cf%K56LSomZ$xHx_;O!;D6W{XU5}&a6Jvt#_6tVS zuZW{RyrP9B5*S!oP2%FSqq7hO`TcZmHrfLJ1Sa=j>X$mIaoetONIP|di>GJb73eyN ze0p=A08x!s<<@Y~?!glf^I3b&i=7vi?@euN=95zgA6~3LJ4Iw8XZeFTTCY>aQU`X| z%_vNg>_A?&Hd*r1bi>-H;ag!LChLW2x_y;+BeG8!Bd6E&@Zw+2H~j;&cLsQsbGDhJ zWvttj#T>nLtQ8(zl&<}NC|%`6j7S~2tC*`HTR@l4GYZdb%s!ylzlMjX7Y0qkcu*%VHH zg;Wk~;Nz@!J=uB&mR+LfNWg9?NCqSMFhAwcLa0(aD2^>-@o1(8}sAT%73=W|8DP7bcim;WJmzFNj)AYf`gdVb4E=t{ZgG@ zH;p+S*8+P^ED93>{=L%ng9<|GOf|4VHzkue1?V`0;*`G;EE9nDiUr6T!(c&~j^S{? z9k2g!e~RHUM;Kp_3Fj46MzZT8)GOwz;;41suyX8Pq_D21N$+(c3}*vCTf!(_Y{`Q~ zydDJSV(=)E6Wr@^C;as8swKpVH1FlDCu%Oa5vuH@w}84x{QpIAwBk)0&SJb*jHW%xg4(3DVT%k5o~!tiCyRf9^G$qmr!w^E>nq-3 znZRroLapVD4(G<2cB;SGhxo5h*>BxUp$%Ium*Y2%qix<)drxt2T1Z& zw^-yk2%m3D?6Nk~I9Pbt+CyH%P^n3zqRp@|mIx^%IT zwyy*Q5k6WaqzaQ@O|K|?*Kk!sqKCu}FVB1XYX66SJ(SmZ24R|LmV)gb@ z(%yXzXktN}00n1%q<1@gbkUIS3vNv>0nq9o;NJXM5*robpJuc}D8`fmN~*H>u;`qlkW`$b`oa{*%0Q-|WeRuT8k}@~!Hzo1Pjq z(Tgs*vs_hz%qy2K0mSb<+XiMP0^LQohuQr)1jjajYS0GxQjg-W%I=0u8zW6=&x+rC z@D40DAYa8ZJ(HR;I0d$qEMW9!26&WU#Vc3VK-L_WKB4LHef|;7SS?Txjp+76#2n%< zP!$Mk5c`=O4NS0%(hrPeen!^-EYq$aI?fbJP(#!mH1nQ6&!!_>3bn!dL;w8drYCJn z&O3J3G-X2|v6<8$R#3lRabqQ2?Jr29g0+}M3;e_-7ThW*2LP9j=gLnO9?br@vUh2} z@f?;tO?3gL3c%?t;h2n`PHKfkNg8V1{`$stj9~AOO6iBu+B6s@TH9Dm?US4zP=1}y zy1YD<;HF!2xmf8Fp8B`;6A|G$(Z_Hex)ike_iLan?3eujpz(Kj`hV29HP!f69y?&R zZyPj6eZ{c6hVuY4Qp%btDKk5|MwWP@w6avOoR);gKZwqjKU~1B0ZW6;zHYT)7QSh9 zCz@_nS8G(pS8gBDb>cKuaX|)Td+6*;6byxflSD>IO~C{?BRy(Bi>`k&FPB_39~567q1A z5;%h7=z35HI6jB1eq#W#&|r3bb^$r?fQSo-``=Lq{C#Wl5&SMSR~}1YkdOO~j@ZPD zeZGgI3b#8gq0*8Vi}6XGBXC9&^&RoW87$Rm3`w$ANsuSW2=FZFA@xxa?9>WbIg#nW zS`+boDh_Q6t;5nC0kMZ8nAt`q`v%wRK+cm^8(k8~>6b2{6rLxz;3T59fWK-!)nqsdE`^h7G1bjAN|8(HX}sHsdkn8MXF0jGB~s(~(J5#8rf=PB zy@2lem@({ktg7`S5K!sGm^E!*}dqycCu+~4ta>ITu# z1S;s*`PEX65Of@NO}1M#ik@b|!IJ1_I`8F=IIx%wfroFbs5*;C) zs<^Ov$jY<8Q^WjnzS{a$9-y!c)|9#i3p(F*MGg6!OcIZka9^bmu#PI6)7Fkb;3a>% zu}5~xc-h#(A%J=vnsg|He6x*~Rspd)vrBbn{ka}2pZFO|k%3U32I7rAMK^t(`epPr;F`=TF)AIx?OZOtxGUZ&_?Vf7%%-Q6nhBxl<$JM)I z1aW;cj~ZD0FU|=46S9>CY3>JvhG7jbM3C>}g;t}Ox~cU_pbKhY?u^hBwF$;2troP{ zlA+>i(F(xf-O^iar4h37>8a`Q4;AehOQdA#L^Zos4GplxbS79S z_MV^!06q1R=2H6KjJ1Aj!dRK9e>I(Q6z$oH0dAnOyJYe=LdiLnuZ^;F@;Wi+q}s1- zfQcLSngsegyA3Hz1Zne*p%gW}-oHiiaJ#gLNOlb1M-#Tl+u;&T*WqtR%aVDTFP$IO zh6sUR2XrFR3)VG=v28!Wgc_e9v6X+1>mf3x|MW(MOYj{d+Iq=(DgdJ}F~eu-%W`lj z=+4hFA*vfgi+ME|Wsx98&efeF1Jvy)Hj5311fvf~^)XDlGi+KdySG$?Cp>ZU#F@vekg!qe5CF z`v{3;x;#iSN>j5{5uBb$-rDh_hVqdRJowjM<6D-Jzk`}4beP0lyxkUn(A-UaSj8D; zUrCTFgSm$Ibr(k?MJcdiuhdicC!!Z}@+|?D(($kVh`E3yToMfc!i*_ka&u^rluZUy z$0C!%uU-lR0PO*wGv>&DP15pLRve9&4iM8HPzk`?G|&0i&mi=L;DITURu_}m_YTfy zT&MynL!b-inZw%3Xh?Fw;kIF3aR#~tGZL@`eE_b#Tb1x!hl(YL6%XQcNpGnZPt{1yYnQQ)Bw_7XZmtYXY`$=?7} zFe$0)lm4HES;-Q~K4W68qC9MaS+-HwZ=uQ8^=T@z@~Ki)zpG7`BZf^LX(w-;JM0WY z$<)CBE~x-``YEHl(}%EXn+r)%wU-MJqLkLfrXHw*wn-De!waI(zZZxdU5h>!{81si zF!)TBvWD2#zgUb9oLHyZ#H6vkl$y0DoO{bPNWK@E7YtLGpHZ&9m8ew$y;FFKYwc$^ z|G}Y0qEoj8?2GCS1(A>iw;;&yxE{1`cKk^xPR0-n^PbyKS)Euc&~ad4^n<`)7VEos z#sj81nxMwX3VNgu_RMkLy0l1fa*&L`Tu92%MZr8RUDSBt+cA*IaYp&;k9Odg&7 z0OLr`W$kU8l@KwF365+uGlI6gbZ2GTZ~)OH=JrbI8)7sN2AMlcH*liHP<11!EKWqk zq+9Z1uYBPm(20Hi%$B$Y)3W45pgOY%G=u3stK1Pn40j#*CPW-Sia4fhOXaWE2Hcs7T)Yg;Pku8Y5V|A!-CEC#aEJTnO|#bw3YUTvv8ZXq~}{ zts=oPaH%052gGeA_>_cs&yxydb(c=Eu)1mh+LkCjII;ltj@eaaXbRerpfPoBxU!d~ z=(DctJo6tqJ&9h_Cm`zo(&o(AcQDGUr-Jbjj4B$;AR7x^Q>dm z6evg`d}ugTrSUja?Z#POAv{L>Vjk;7IFK;Y>%a8WT`)T^5eyxucvDG3(0#}cdr#DL zmLQ>P-(uN>{=t&jKT0$G49M~txOb(7WJ?TG)qL6USq3rKZjV4 zj`@N+Nyt&wX_*@Fbe$#3W7%{PW>xE9;>2#D^kVTl7ln_}r*q^ue>-Nw$ix5o^~OGd>TyWiQOC}%K)ZL_2tAbtBb?{5uzA+*Gg*knkl|_9Ss`@^7RrLl zKzTaGFPhSf2;=m93;g`HuHfZ+(v%KU|0N->CgQgAO+K~-fpF^09s)REi>K8k#=%+k z&}~50VnRJ{naL-cH|Jow93VS~Aejr;ZvEl(@kpV{A7Ro3s8MKQl`+u4C?i1L0QR+M zJb`V~%rq@hD~Ewhqr_M5Ew8Jf*=0!x-U&aVy@tr6hN@>79WW!exA)~)hACv&i^l5G zxVG#Z@zA%A4Urhl%1^251@d~pe7`eb$Sd!(G5FGnez>_GDR`Qo{VANEkyCdO4~pGi zVwJSAVNR-$o$D>p;2frru*h2SSQ)n>(kwn{+bf7{R|3Ix4w$3=r%2E@&OL-$#eQd2 z&WRirAHo~}7UK5Ann|_ychjq#xPpN`2Kp|-rhL4HH9S+hQ0N&_- zwmSC|)CB-n1qIr;NT%rj8?k?j$p7@QeUPk+V1VIDAM_6tt*XmoiyBJN+XVT#R2Y*l z_xZjNUg21g8os-pL8TyP6Qhtq217Oq`{k;J>)fagDJ|1ZqLs;A^k_*1v3^?fz8n0n z(h^cPcA5$clI5yh6r#uld+i-AHfy{HoCFbA0uyRpC7!Bjag8Li9&SC6{@2lzBZb?_ z(p5oQ@*SdUg!ikX$l7_(DHm(Kdq3mFM5FcX$cNseXvWm7eNescsm5DGp^?~3(NqZq zJDyO?qXX|a@~*HeDFa89Ep8yR+mXQHg&@45d0FW*c>ld+&H9{1gE3(OY|JKpL#vba zah@Gpw#B*JWiqI~x$K%%W5>Yq?T{K;o`FnR~2H^^Hq0*w!=iQG;Q#s*;Ewu}F^qZrOv{_u|oAu_`ADdp7 zP<1(lZa4-g-~2UimR43DR<5EQ;ZZ=56!D>3;$r#e9FuP-4iVj=L?BE%T4MC?lKy?6 z{`!pu0!aG;xDv@R`je>xa2J&%`dhwen#bJO`l($wVDAv~{ErrL=2^LSOI7QO8;Pbi zTbuTnDJPHtWXTSCX2Fk9pfd=x>dn(t_t-1{KWMq9=GqmV=PzQ-hSj(I; z@cw|c$kG^*RpTcSi$b95-x|nOz?|GaCyU5I9Z)oj;MZxfKu<^gWP|_yr(kZ?N(x31 z(PI+a8(@nHAy-zQXbZt7q_|x-BXDa-3`xbix?D+2U5uH@_sbdl7XCmZztH!o;I6o~ z#Hv^E_66Rlyw(!3Qcpm2;4z&a<%0>j4Mbm(go{aic7@F|FpW*mk+jE<8Q{YTGrIR4 zq;`-8t&|fmC*V&d6_9uIvgHjA@Oh1ixzvQBkHQDYf$&Wkvp4Dg;_a=%;@Y-t;VKGu zcXyXS@C0{vC%6Z9E!^Fm5Zr@92<{#%Xwcv;!2;Y`Ywz=&v;XgY`{u0wtn*S2^)N>t zbF|*)7^C&pdo>C#ApjL0OQpV&=cqBYdnW^LFpPw#`yn(1i^OeE)>qt?AOVrrs41nb z4gl~Ffp|PfBrELSd;I^c#^--%L}>l4PP0qd%$ZJ4gz>P&JBJDPE|6NaLh3E=V)1L! zHiRtLgg%~`z7LOD9Vmj*CfA8SCx=J9&qtlR2>-SAgFKaQ`bWY7vHG^0z@*T+?}HHf z%)ppv;-c|_`ljZW+g@MC1Ar+8mc!>Z#4ex#2^4;JbF_v^Opi<48n6VqP=d6k?FOZR zyO8MX%HbxPX{4NP$xc#}h=c+rDx{-$Pd6fd?*^^^)}$j)jJ2HJ5qjiTcABDi{J;1~ zEclOzE|ORDx4FrmMR&t+9n%!hFy_vuN&x6ovED;f%y-uf2n-1t`;Scup$~ISAE}sf z%+*>NXP(v?X&Jz-0q+Qz6Io z^ng45Ox>@w`UzPXz<8WjJeaV15c`2t5c`vWc>}-e6~Ge(8B=;M&ZfD@LcNxd8%F3N zN=u-;jkjzB^TIr$I>MTY6||bMI!%RiOPQ(oX^Mk8J5tG`MG4}YrYAoZi-O7fB^ndd zaj+Beg%r`L;N#FR)@EMnJTH*dsN65v{)ngoQa5A?VpWbv*66?YntxZ6rqS~!+3kSl z-t8v5WPbW{z?sIy6aGW85hHh?OgkO*LoiiQd8nePSCJOPmtaHpNRgGK7+t{|L=u!=saq!HJ%}#jhjvUsXiSG z69O}kfZPsU(!pQTp_DEeGyi2NNWrd(LQKEp<4L*xKaT498f(7!|$GZV| z7f?Qj$0*`R1)6}Q4!ARBNR}w{F=R}LW((nWA^1m8|CJ)qw}7BfbOZ!~rfT6FuoOU1 z;;AcWNNpVOkgWHeWtWD8m`S+7iQS=dSH}n;(5ME+;2Z$(hJ<4Pgm6Ut_rUtM;n*KL zcRkJMN*4EcoVLt`FiaVMfb2T0ib)Q{K$l#ghr%4=83X?(RsgW$kTE}r8xd(J z+iUIeXcoi1+`cTrE8wz{xf=HuK$JI-8T=vKl>2W0f#`x35!)&x3Bc1E)N6n-O@XPN z-~bjBmXmbiMQPQ_2n?c^|7oa&|MkWjKfU~f!jgy%U&D8TRCfE5H-lgx{=b0%aL+h;+L7Y} zSW%orP|PE%<(@FX`?oPr1bImif+q2IF#tRSbrVW<{K^Bfi*$jQt(4J~0zCi~fI&31 zTEDf?&R}(glOcgAcH}}ws7p-K2FqPn0CPU*U1xGP;Lk6&tw?s-zX!p;4+U83^2AGs zy79WGn81-9VUl+M;zWPdUjTX)iV61rviu;x8*<3pAW@+4?*>4-2K}7ePn1|cbx(Nf zunFqbvSbrD@8BS{g=z!~s0p0IA8(2xS&Rst$T$h)W+mSwy!&7Wj=AhfTKe%V{+~gB z!a#og59>dJAx1+GF#ErTfIp%D1OfB^D+qwlknlJn*~|YP0sl4(_)Z<_%jzO-l4-cQ zoGtawrUs7Aj13+deZkl54|oZzaaw&ymxKXPVN17oJOe%`xZlpE-+~x5-PRBMu0dD1 zE-@FIEsmu;$e9gh_D%~tu90G@CF;^YjK28>C*>W}4uIjFyg1lNq!&-pf@Tx;-kDUw zB=2kdS|@HET#>HPF{7!;6`0&;ygs{OuVKkPHy@}2?kd}+H2DIMRNGht9Amz|0jsYri%VesbU#JxBl=xLc0K;8gT_5UC_Lt&ck-8P_RL9JGsmdDk^GI^^uQ z5&2vue6}vrQ(K%7)rpSz_UFNuCqX0k0YsBG-@C&mu}3N0sD+CoCe!redhY6_al?3t zu^xA3gv+8CNl@-?%ZbCuvRieM7G)b^CqT!eq_+ddajUjeqzn>u! zK#}8Vix@q4MkU6F8?I&;YR#|2Z`@33BnfhA^{FZ11d`tY*u^NO)Zo*y0}N8Pvu#iD zagEE9F57MZBsploGZ+_kML+9IqW1Z(ZNv_ai~ZsZy~n{?jfjs_mq{*S^nauOCDfSwL&agOF_j)!L$f&}A&|BY5LR09 zPU7Zvu@F7gD*5KViW9X2Bfh!yDZ5RWvEW#f z0xQGVBs`s}>$6vt>KE^?5$HR{ zLx_*Q9HYK?mTD&Fohwx+vJ0jx7w?aDU|}N%WxZZoC>aF50srz)r+A{)d9)*q5UGwK z!Z4R9m03LGSbJ?;$C#5sqDJ7(?$HZUkdYJcJ!b~)kV$WZQm}^E_=RE9CG=g8Ai$2&+O*wZ->;uCQKUruFe_VM$W=| zlcA7J88O6U-f8agt+p?}t2#KS-$5j;N z2{1GtY_ZYj-lbiZcr!PpfKrvu8ZjMp0_A>R=hw8N2c{|)i`85*!z@-6$PcTMrdlQE zj&ju?2qvih#zxTIptkLtrO~)l!z1Jlr-1D5{rX70b8SjW7G_K`nW2$AYog&1!EW!k zRBpBbPMqmhY)GLoW`ZylA=|HU5G95p)V;o)z6Z2HN5H^_A6%ch z$c6B+JwJ3uom!zDXh-CGdt*pRrH#b8smPE5q7WM6CN7Lk5$l`C;&W;(w1v!#D7p54iF?}Z?$h6i_%2_y_bwV z{%`^3gb4S+<(g6amqxBc4Da4gzpmzTrfE#=0L(hxXz^Wv{S+!9Lf`6wt>9cWpGf(j zkM&{SQZiQ};n~O@Jvzt{SThqbiXMa<87#1qx+j&G)Vp<$6*-qp?2%&mw0JY?sJ|a9 zOT_)MYPYRMYCms6Ks!T^AtU{W?(mA!m*raI1TW<&_2Ozd+6e~6B`cExcZJikOR7PF z^>}!3fcsb@fF2QH*BEB7A~5v*sN37Jbiq8!aWxS%7(QMBVsTiZA=BgLMxCdf>N+Sz z)V3ln-WxlG_or4{`*C=~dxKN{L(|1qNbN~6; znsVAqyaFy0cNhv9_b1iShmOUaQfg`Mh&V+)tfXneS(ytG?E~4a;0__?_m1WZw+60u zrTeS8G#97Cf*PD0&QKHikeXGm`ET}Jd`4b|Z`6?RuJ$gcKVNWMj~>Qyay^veou)H5 z@9XP2s~6MgAafTZ6%Y>_VnR^6&oMy;^u0GxTH<+(Hy;hkOo1?72(&5{fk` z!c}(+te{NT!9oUct<=l6d!OScs@h;_loe(#*!Ui_n5ClOB)2PQ}t_C9w% zI6u-jWOPUay^T^6MlI3q{F_^(-bn5_@>)6fn1l@s`9I4F+W_ z0!pLkq$eu_w}OP^-L;qVPTo+(^M*){k+cI2V!#{ykOu}M$fd#`3TV&&D>wQd3;q9U zM*+EaJx-G#SxOtfOz_x1Cvx)waB4%Y`$dH-gJJ+7UB|WtWmGdFNVMLP!vFEiKhJxk zV940bzfULr_c?)obQtrt_#wH9hZKskGsz1@Xq^5wUadwmSYw;0WjY;zP}`371B4B$ zYYl1BUgNzLQp%}26hcX!qG|3r+*j~}P02%)2aD|Nr4BudLB`s@<r_Or3<*qpTkk zUB5Uex=STgyCxb3`^np2=}sE}&oPlix|*Ta&?is|DiPHbAFholHQ%xqMKB~;?(?Uv zjB8(lDn;dB^jqm}T*Y)m0*JY^)o2&NPeQru+93=g(CM^*847B`WpaumSv$sE7M`c` zIux%X!+9lccJmOTxbdU{g&csA#WBy@g)9WGjIaNKTXG}FVod&RT-Myj!Gy+%4Kv+! zRGv=&-2l`Uj&^~PO*ap;M>a@m(-?We>~M;E*x62XS1^*Q=*ujdiOs&{1oL7N)qq0h z7M;i_0tJvj)HtQ4x>MuqZAc5Qe`IWDpP@&+RCk<;(8RG8=>VE`08g0wZmxP=vz32{pxKYckW3s5mZQWZrRt_)EJM+V@yLR1i! z(DKT~p=FIcXb$DU%n(76vfK)^mm%0i28nwt1&~4iJ46%kP#^)jZ6oEX$^wk9eD?`< z&eKeQaJooEkKG$AENq3KTOZmyqYmmc8s~_o@B1LTg)Zu*`K^ejyqFw~6)=g(mg z=c0vrWc}h51JIYiZ*yP2^573<+RoPf7B3kG_(bBb{u!Nv`CTH~>)8j4m3U-wh(r?r z^4Cu{tU3I?O+NlecSsnpO6M$VtA?_*Kwi z&W}Z!9-LkL^LI13c(gB@wDFTy zl~1%pp5LVEJLi!1dyv5{GCEIW@fZBa@3l58Pfn3JMYa(bRdv7JG5CgTM3{RtOsp5; zep~n8JDjR{U0KgTr4fwRc#Uxd2EdY=IgMQmrC`B?Z0MT~$5-RAw8HK?EaI|md?cnX zxK#i(D`yNRoc@c$0o1!8i^lM`(PHyYcL1zIivBkaz@vI7iO6#U-S~mUd{n#Q@h{Uy z5=*g>Q8jC#j?rNs`@pjAJ|24a8T`^K{p9h3iQRWb-Wkm1{|r}?QNt$hC|wG;WfR2z=Y|)ZzY4) zLN}Iv`NhN(-})PsYZRpZ+X z-MmTUhXEkyj%~RZ1m7*=CkKPv&~s<5+aGb|GLnwD9LSB`Tu6gi>cJDlfWkrIfhZ2(cJ)d36L=|^7KmC zHi_E?mxIfBE{>6Ngr^%@qEPm$HmpWlxqW%rD3n{*VjF03ii`P@{)mk8i~~xpb(2U+M%SZ+_0nd_{oEvAqZY;Il(s zLE7)KfY=2feE^hgen!tDw*!^fRvqCPEH>*abu_f8iy8Xv4Q*wQwKY@wCSdmJbp(nE z0atIb>}?bSk8w`=m2;q9*17smbUQ=O{ce|!!py?S3BCb z(mnY?*tJP{eH*Sgt$19nx;R`-{Qa=f=NL;;gOY)L2F1siTw7c8woNrlO<~z%J>=>V zjAf-t2dDvR!gm3IL0OQRd3-37-?hf-^+UvovOZ*d_d|fy7E~)|zbq;6tz9pa7_l6U zB?M$7V(qJ|k0kQt<=pSHbz=%i6j`W3msyZ8YdWv;jDM1`)S_%$HS8{Vyjtb)7%QjP?&Wdp4JMFP_;7``Ig>~Xsa`tu>YR_!ngp91sw z2}sSl(aAIL2#QR+r6y!UUbkKDCx+0>4E)(l2=iETdC*reIjo=L?21COh#kJjr>YI^ z$AkeawUzWaV_*q(f-78FD2q@&?M0F=iyehTffZ7BBJ``n8zMR5;#R^B!qlpkZ!;G9 z7Fq$oBYL5?6NYs;0BE{t0uiu3FP&`h59xn#zwcm3pc4E0*wR%m1=1ii^nGXmx_{Y` zVL_8Mi?*N_R8ceMxy}kmBais9$8!4ds!rf?W|XxnDXkzl8tdgM-f6wy7hD*i-0pU? zLdb;ad%~pgCO}*~F)V&(&O)Nc$n7#>ZhJQ*^{}nXbXlwePDR?3K$hj2Z_1u#OGAvR zvQ5WDrX-Wy#l2^h7ff=A2k!Jtps~xGZacuVms){>YU1vbP2e%SmYa$pssfhG_6w6y zxIBmZC~!k_QxfkCyx%%tAX8 zy8syTHmx}VpdfkMfUm#H-$Gp2K#|`sp2)P1>jegYRW(cW^MsT=H#juR-oroeUXW^G ztz92TttrTee^+Ow7uHs3xNVQ;|0r0>-a%!7BzYoyIY0E);I^?Q>12%czDaVpHT|AV zH{-d4CoPP5KDgf2Jv7>i$>_BRmCtRFtNEpYV;^t90mTlO@Ikq|j_I&A;UMtCqV7QI zLt;puf~X%GXmApZAmC>JVmGWWMoGZJFf1g6%MCKA{omw>;UkbD#Ji!~FV$Z^bK^Ga zy6}c{jr$6_FLGsXPuJ%_sh5!Xn!E58vXUBW7FiFNHxOJaH)p%U_ZCg72{$je6Ulc? zHZmOj8q(jpo@Wzv*l8RR4}$4EU=QOj%!|SMzUk{8EeXv+kFuMq1AAso(|5niwu3a&F#=;izfVAvx} z^gu@vG9+@y0+S7g>Ai4%x`q%_d=Ni?`b!+OU6x$T8)wW)GPe3VnNR5#n(3e4_t5|3 z*;@)#A;!&HZez;n=6PmCj1u5nAvnOEu64}NiSjJviW<%}Q6v^GG__(LeB90Dtqds` zaLcMX*%cJ)I(e>&(+TxgADbTPg1ht1B*c)A<*K(cSn%w4hb^2L2p2`0(X4bSXPayl z>-fg7RY~6mb`AHHbajhK88rJ1%3?ytK<9a@&0Bb(0DIj|VZ`%F(ld`x(Q*-P05IKc zRD44k7EeXKgst#jq5;ampW*Irqs>=?Ow3c>*&e#qWJ~puyDYI-o8ibts^U0u`&SN{ zsR}zpq_VI1{@})g9mBuJZS3y9^(EB<2jEX!{9yZvsm-_%ftd55WI^>CN@k|zG9apl zyf=QzWVZ;l|P)dca+eYWI;dlzHI>9QGqxSHGS=3?S3PyH)7HwD`Z;&*RjAR>-$UTjM2UO2b=6k zss#rzSjZQ&`Ku6e7+!{0XZM?g{GXp&XzMrg(={O}Km(*+6N!_QAh=C>dH`S=0OzCBPC6TtzNxzMe+42i6k=G@-^bps1{vCaXo6W*zF9n#?;K|oOwUs9=O#g(-%nyuoZlSi*s zP4I=rI)>(s31ULEv4PA0>JnnO)9*6)e{SUfSfkwOI_Je;?!YQ_xo~6OKrgMfYB+h& zA#@RJ*?P`QUaz-evwU+d^6A-!P-JT;{%@$Y%lJ_Bfqr(Tx(|O0`bV)mNEX>|vH0+j zL;{!kd>a73*|tK__YV}1_Ti`LIr>)^v#u~cu*@J*0O-(4U`cBuB<^Ol;i&~KXFGy6 zQ^%7-)*=Ne_FxPvLJyLs0K$cg`SO>@e7pRg=|2)xt7)=oTCK+GUk6*nPJ-s$$YqHHScv+ zFt46K|F0N@Y-2JVPAN0_&=UtySDpRRUqSD*oQLl5o zDKow|j`5VoA+&2Vv&xWq)8Q3Qg8^?&J}F-)dbLSdGz_&j9HCGE)?sgf7(}XQ+6#v= zjv>6-#htMvaLNZZb~1v_5};=kbet)XMb$UeL_>S0-={n8M~P5LjKt|8Tmjm`fhPeF zoeSU;44DI@&+u>2B#;eF82_gVt+}*gc0l+T&UYGc7R^pG{kF0TT_Cog3)7xJ(vwB* zNw#z~XBd$bvqzmaem^br=yVbWpYE)_TsvVvH*DZZCzOs%d<)7e0%uhd=0j@h4HaSd z;TC;P5Q-7oGM@=G_5C! z$pm=x`l(CHF@h_e4(xP)^+peG9)S$>Dja(9osW{%w*t+{7o6v})~L`(|zyJ?*}HTKicWx z#nj)>{#xkM&E-H3r>j-nh53DZb)zJ7`427{Lu&bvqUKeje{tNN41A{-LHJ!?v_iZSdUW+`H_#k@H^5J0rNIVTsN_A>NoZ0L zQvqblf-3VjCAE7ppUU4n&vy($g7gJD|q9iB6?>~6wbi}<^5LkldVN!bg=Pn2YL)@PU%-M}DR&%6y& zQgtggL#=Vg5;7U1jmT1!Pg>yrf;Z?Khye|M8xbVD>ZN2vIxQ<5zi>l{Xs(i9KBX)k zM5(L)(^I*~7Dgop$(Xr1FErBb<+vLlBbLxHPGGJreBj-=kPKVW6AcCFlQ&lI)mv2$ z1donafWFKIU-cRv@DOH%YFE&!l8Lg553 z)GNzs>j_!w0~8E63g{iE?;sBq2J>{UnnVQn8wPIyJir_5CGSfCYpR< zRr^i>XS~}eSCId5C!~I!@d89@I`{3D{M6HrgR6WcgrXzO z%ZgW4$-zQ-E3$ffdqeXYF?z||{0;mD6td;=??YG1mjawIKjq>9KO9=XzP-;Q{YbIMU_R%q^LGB2DYvW&NsRBE7{whC z9tAZyYO@fz{0-`tUq=c9r72It3FNHsIK#hs(rIRUGm3yJN%!sKR+MaB3)vj(eikVu zSKVw-nMliCEEAZX)h}wzK^4f9u+K~;K^Dc6#*i-udi~eTh6=^&J`6~IinS`-!v4eZ z4N-Xg7Ot2lgeGi8bQ_V?>9ceu*pU$$*P({>g@NM%6b~)rWtodLn8>Z;R~a6jfT$P1$^l*W_J2ANG)7Wh>!Qus1&L1 z+f#bS<}~$C{<-ACKpdWxd_!^OhQ0s$)i=qp#<9noiiGTNbum18Ov?=SdWdUX-mp*y zm^C7{T34ws6pqmd>V@Cpbtmbo=hoqO_k(_7_;}D1_7#KH-p?dlP|VpqAp~}~ddgS+ z%J6-s3)+yFLYKjV-W zmvil!N1=G3b%7oB8`S#Stq8~dMLXWC>S~eq0laik-V-o<2b)BKb#HJ5zn^wXMLUwf zm~Fj2UnvB*`5l!8k?+(;dK}jrgNM`Ybq>@*wTp&0W6T&SA8@)bQMQ}+T=D7Fuxe#Za0c!-fiq|a+#<=Pq0BEFyBx@KUM;<*VM5=Q1SS!xe8 zbQ27Rr|>eE|85)p{EZ+^d3sAjVUAt#!iTqDgw@@Sn{{;O0ejt2=BN8U zg#>2);I8jNL&8YXqlnB5jA<{t4YWN(Q)owBhWF&wgm)7){#59o!^uY$SnH{mbb1?c z`s#IGPPSTi>y|I{>pnOq!;2>+PmiH`>&INZ#X>k$s_-Xhnq_~D4h1)iLpI&0x`{wu zZ^Uz!qFKDrz0OY+JXUKVWxRvb`q% zSyR@&FtTSyl`L-%P{v>JKxwTiiOpN0xOOsN=YY7QYxdk!keLS)8QX_sPyWgG#qse`flGDo?$F9SG1&)fc zd@hM;N;1JPDK?K*`nZ8o=R^ac6WsCF2fxxK4`rS;T&u~#6h-EcAJWHfo2F2E*P?X& z@HT%`v9Tz!%oGf++{7fZR=agl@EQ@KH-ayep^*nYc;5b?F1r6HU=o`@nCQEUjj|jN z1F$?7n(CNlAa;t6;%2@2AWO^d?Jx3i!-M;6 zcf{5_ytnfDo%53h$+Y(e5kTQD$%Vgn6^bOtoR6z3kWdj_81(yo z4}LeZd#yx30!I)vo2qbh6cYvF%y@$-O&41Mo{tuuN^#DeGceIk-a}|3$48lhjSlrg zwGJ|Ph~OaW2+?M}&Q|K%_H@x>;LQqs*Nq<6z+DP+nG)s zu-P#Vw`M2F2bjKVl@cCVgB!QiEfwRxp|qeYvV7q^`9|Lw`$@pAKFCLMlrvUNWQb!e zam_{WZtK!k`B=?dBQyMjAm^0|9a8#;-H|m#K7oV+HkvrHIx+PS0r`1w6YfFL2?g}G z1p0C^MAXay6?bu*9^p<^rNFGsjx_O0m_^2PD_Vs)U62mTr68g%PtR(!fi zZZ7ifPKyrZBcKDJ0LCXdHcdKG_o`x9(j6s^Sa;=!+hHzoR9VzZrE!&nvvCEQ=k9FUK!E=g!b|lcbVJuK2 zAcm`}l+`eC)~d z>(BJw--_h>9{qlo&+(I?>O$GeyBFKkM`w6g`IYlB*?vWm>=kou+Zg&HCmW(vKDeNN ze--Zfp|!%5=E2Yv0V&b7reC(>JQrOFh=eyd3N}6!qfU8m5iNzY=Qu&S+W%%u3feYJ zj&Gm;Vukvq3!AP`xhQYdhiTLQtBoc@n6scw9rhJa!xrwYwpuX5_q@Hfo_+a)b`u(@ z0*798PCQtl&a)x2v?}ySf|+=%JP{p@O{KITgh_`IQgY{WKCZEkR7^bL_J&n%;cEr0 z4Y>}1)T__am?0riR_AERT>OUxZBu)jFvwr{b>1CUvz9G<5-cD1nBYuC{m|Pj`Vn5s zU2%IviEE_FR6Ax8q))G<0bj?y5Fp^oRw+0Wfy_bgdLY8-HV2{Cq8~lt8 zWr7SBL_suXyX?e~gODtqi4`M)mo!E3X=G|OxeU!*O5s`d<|K4vIJ|~<HutMePm&7eMMqhige5}R~5c6%CK(0L{k z8Rc1*BlS+KtQp9_G*`ORS?KKgiz86!McALJV2EpXJgU5fr&{)Hi_cw(^1_lKs`$o< zsEcWX5=-deE&vU{=E#Weg8$D$9S9tcvl2PyempZo>+CSH@%D1af~A@qa)JQ?-$9Ns zi+@`d66Cn2pi+k0Nu9lAyAZ${1ato71x-nj%909Om#z&cXS)Y4{Jk?g%cY7CBt!OP z{g>ai2OptOAp$uECY5ox-S$*~FBws+98C}^Ah!b{&#_7%U(dF~rDF|-+?Hi3EWs*65WhN1~CJY=lWYR`~Ns8UL>Gf0f6hHY>m+@1IiN<<_I$p z`!MGS@TeaidvE;UsK*C0{oZaxq_NHnPb2{DLZkk|<_ zYW?4rJhSR0k0mZ{7~NZ)@QL_bJ^O=R1}!atT2i>~>#FCALrV*^Iy&lupdXINIPena zR3H3owPS5v?q$s8UNeq1fxTdtgAWdL2nZj#A8sDw9Ml5cpSXK=wt^yy-!DxoVAq=l%nk!1 zRDqrN>tX-^@$P?&_*2~L2apS$KRV?8mg@a~4hI&0DX+jLz~5CYWBx0c%y@mBlKGEV;I=aW zh8l+l`4+%F6nujD7YHDhL*`ch_etI%w}|p&8>UEqPb~O7(fj`h2D<-&f!|WS|IcB- z>@U&me-G8r``;P_eoyoMKLUV% z27%wB%l}Afgj^&4|JxiCKo&++Bzx(f%6Gb#CrEPjpW>ze#xJY} zkyv1pKm%##E1gzkhLo0#R>QjXl74}@Z2&dOP)ZLM2wFGRJk+<#Ibk*|Con;XACqYc z?~_Cl0k&W5CGk}kEL9X-(mz9dIZQ{6FyTPZt_fa1)A*f|C3j@ROh> z4);;yFe)_wX`QgwrhjC#v;%-I{N@pm#tlNxw}D-+#>|8&Mx5^V{Ftkz1a}0T4I*n= zAq?t&dG~O>4dOlJaAB^l%K!XdL_5 zo0Bti3pYvEb-moy=HiO}sY-u-+|^k{hqwNqNur?;+lGnfK7^1i1kY|XYSdHFkTok? zHIG~QcrAa74K>>S$1Gw!?JY0xAH%^hoe&22;KSiCizIPN1~a=}%{M&!DvEvHnX#7- z^Dzq(JqmuvAgD=0o?YVRSuK4AHJ8LC1~Lp z@e=puzavs{u)urYjKMm4cTgrs2NSY&iIT5l#acLeF;k^E%4W2)nMXLszl!jwaTwU- zlj{_18h^I)$^Wh>%pWR!e&#Z-t3&Gciy2wcpUai9IcuTo;FOmFMuNvP^NGX64IgeL zEzNwL$D1^I5h0_sv-k$fjkYKq(V-Bdd=7u&q*m-xHXbgsM`U*1q^B zww7UQc9hUhO$1;g>A``4k)8|{w)D5WA51{y?WmAlTMgo3tHl=kICm{kVE2`b%(r;2 zF`A7+3)Ep%hgvq#8_n9Ws(36+d=11m&Idxflhb*OXmJgDj#TV7M`c%Sv${UsK`s18 z%Yp>SDyvaP;*o-8G?%(JUjj9%KGGCTrEyaJVlogU+2t0l6foFI}(~>zMDtlpe3q*$=@+8%O#&UiDH}J$FTi8&V%eir$2k-TTa|15PAyX_gF6EU6xIN*$nKzLog#NLw zDIBva+u?eaVl)4KK&xX6+i$5E_Y-L6M{qOp?qbn>BLdow0hVFRs11=lci-otG}oqD zBrMoB`?v*SaUJ4TerBm7G|=z-=LHy4bhKjdEtk;{o42`auE*#~wa2r=~;2g)h zK7NAdapihnh`{sI5A>h)(>zRZZn!fx?T!i&|fy(S4*#k`^Eti!9jD%bX+`!KL| zE8!pH&?i$luux1?ES2J$JsX|a4yK|Lp5|8abWO+8W8W#mj!nGBWPqEbR@GVZJUqdd z?vIPe?N{=HUEH10sY<-cnW3?p#_d$lQFjk`8%Qy^79)VGI+y@6m)IbG7w)UEn4r5S z2TftpbTz-LM@?@+Y(eK8*!d^>tkQaU!49l?b4b%`~*>Ih-7BGVh%4 z(q+|v%b7**GKyv2>o~bYs~jfiiOeA-gaRjb)}w*6A0Fw)eXC$j`r!!Ny7yI;uTqyLkm_*>(=AQQTSRpHRzJE0O+-p!gdRctF#cvz+$%BHtM)qqL+aKH z^H5fpWh2JVx~}qM!eEZv>e}!xXID|lS-2?pbEyZBu~43ieMplisi*V_gsn3fp}Sq@ zLI+MRL+GN&v6m%TzKVp62$VdQ8)#L|euv>PQtkdEO_p?m*-9wRW8({6*G8n8xeF}Fxipx!op;d|UGlA&zM%k!$4=*yn-T1a2$W9xXFsgmZ?{f zLt&{{U6)>36CIh^X;LeqLf~8D*sbS};S?ZTs6{6q7&^Q`&t zwrISN+pX#6K}hp2Q8SR3p#2tS*jLRVld96!6|ZK#I*nhnP$@sdzm}uzbN9UnL*}tB zQ#arGiV!aw86dlhwwUTt`1R^VgvFSQOp{6tyLZADi*4!2HvoKQ!V;XF5%)PG69IIl zh180VrEp6V)y>WEQA#cQfLGjce%q(xb9^2X{b+e&@(_0Tr;@RPg&z}6PEHk-b%lxd zUAO%6S0iFAUbncuh~K6qy3!l_t{6GPoiT5j85cH|8|=%N$Xe@HOyX62;ISj+$7)20 z;Yyq`MHlfb-g~?L&}#m52cm09!J1*#!E|E2+H0IH>Z>3-r%Jo?YNBJ_6um3gVW{B5 zX6EN(&c}wv6HLR-m*>Rf8^CXHScaZ}-X@tsjs=*M&sl^@*G!oa|70B>pjMxLCAV%j z`}#rpXF{OCkarM!`UFw3C!go3^r+2e9!*C~x2cjY(6>@swTO}8(Nd{=L43P*$4)1O zE1CNU1**47Pxf8wk~!fo@+X(_k2z#cEB>LS+dBAATcgqETJ|wjwpKMn+cmYzZxP7R zis^|}zdq-G|K6fZedDiJ|2e`34>O+=_g&gyh5bRh7#oCA0Da?b@SuUMhzi_U{)Hf; z3YTYjG`XX+$gxAxlJsL4T!VIoa%x>V!qovf{(4|23xl6fWJ`&@NzOyGW zd#y<9aUKh~Vib_RUlJJ_jY12Ghy^Lr9Jm2{*szA|Fb+DsvQ7npHyi$bJV6_$)|w zWGpIV@L}w=x$?R`DwFt^pH3#TFGUaAb~?qu&(i$=~O~0Hz8yfB{NK> z;5#$ABT~cmNJK5Cg0#l;o8xNv>J^h0Q-QrY4C##AVirKAXh*e!EyOM9bFab>)(kLyFBod6NhGVf0gMbeOi0$b3KBp=ydF$*V@@HPeb;==hHP`CdXApeVQd(!BE!bOs%b z9F1_964R*?WHxdfy`UIcPAj_W;9DBe8cO1MV44@IxH*tliws+#5i_DEcA0U1eRb_( z&0z7tGax}xr{_|zlMnG5Y6$oL0VzP%zqW>h5n_)(&2pd+_joz}`StJYSh}aam{ug+ z#@c7r2Pb%l(NW69H{G6^X-e!0d=Jq{G8b$=h!wW@_l+^aV1}Z=$Q}|aG4#K#^$xozEFPQ}qP1J1kYbC0M)BVcZIQ{hq zv<&5WKnpaRaiq%ZLFzgnGdchqYy1v(PFqHwqAc8EJrSsecViAkK43>E9r@PC4k7sYD%FI2qM7Cvhmp^))lW^E2?QhpahI3@Bq41+J9ZyI;bZnfyXKdsje0V`7v;cv(`pAfc~J_D}Lq!@w-Up?SX z-QVAyeLmxR8_2AN2e@NhpN4LLg*qK{@{*p4_jpr)Yt?$2o=v%+C-xboZzd!Rp7*l$ zsg2Zvz9|;|V*F%LOZnmg`1uCSN6xduW;>ih=I1#rYeJcH@Hi>0ZP=?913PYZC3c)g z?eupP+Y>vzRe4CeCbAm^!KV>~q5L5s@q&m`ALln&VB)3F(pBjGeczjPjf$I2s{Yg# z%$}X4@=X;MZ5k41{waGf^ev1wJ(bf|%TlHn!YR@vQ$ zB?nWTSjJjf5JH9x=Q~_W5;K)2i7!ZyiY(p?XVbQG%`0cHOQpMH$H!+8bvoZZ%8<)eQMQepqDQM&By@Qo&K`-PA0XC)xMI2 zECGnP&C6pH$LD3w7%sV3{v=Y}#cpdbwr2pJ5hQ;dB`fYLoJQocyv$CvO!b0~T_JBr zMHGV@MwtPfs;AFt+vJfpAn1(vJ|6 zlN*9Qw<*nqcW$7rr07H(ZM!)m%og}1HjeldiVk0INg(2~=G#|kcIb_@279gRwg45( zIrHtxhP<>)I4HtRfgzaw9-ymU<*2Zpu5c~I387{7Z((osLIlJ^ZD7p-_v^|`R#~?t z4g2we5A3`%im9Q`U9PET8h!Aim7X1enz5CTO{IWO?XoE6j(Q(#c@ga@Ah9?IkpbCy;w5i0NKawS9|x`E5>R`;m57E-fg$*es&DWhQM@P@PaN z6)D_}wgMr@O70PiGX*ul5K-)oE#)Y~z1k?2v0F>~{LdjTbh@yAelve5Z^${x+>+p6 zr>4!nTrvEo900xH0Wl_ujT(3L1x^^2|&A&9!jZ?!x9XJwdpc~l|R2%u`WRh85d@R5{3wm`o3NImZT1e z{G#J0=^`;rB%G(wa$EzJqU@T1CfDhg={%(t4FZiG4XJ62w1G)9`V>{k*Do8H|F;sg zqr*aR3~281A9N+`#sn$n^@ryYGW-^DLV~VrMgLG!{NyqF5zPA3`aC64BbrTu%FRzi z0AHn^=xQ&h!7>EeficcgYYFp~T|t-6jGacSs(SxQj~(QN108k-l-M%4<&NR0fu8~! zyoM0)DfQjS6CB7&`spc5L$=hpS7tF2;3NH1h{6SMzbvE#x-h6?OmzKD;Hc=s`{zj5 zgcLR6V07-RuBOniWwxngTK+*5PLb*h69hyt&aD{Kg8JfcOB7|twKFDgqPt8Z$|PV( zc{~QCUtfwOw(_i;?9DT1j8ME2h`I_}shFi?n26=cWFfZa>*#mS{T6@*BbMTNB?m)# z@Kr)F^M)>*b`s;)9U;G2a0`r^tAv?X|gOWk7XgJZ~?7g@U5`3*_G>km%vxk zW_;x^u3=zAQTNXNTyIxgn|f)+bhmF6(xXyP?_laUIa?3qiPFcDcPw1dZ69M07q+}& zePMEp#L%>5t+?b-|FJZEq+2}a`bPH}hPu%T8C4gb@Vikm;-@H97}fAwios|WAMeAI z;JahRwX1H+&UCY&ReiR52>JEhjYQ4+HpL>MsJ+gSE>2o*W?DLtQCAIK1vx5$^v-5L zBnIMB9yDPcmG?jcw9c!B)<#&gYreO$##LBW)HR$bYCrS zUc2Z{qK6KwmA|Aq87I|;=L6K|nQZ(Q;mq|yC&fdT($7aMu{$~Uu&e;egt>gH%_14+ zi-(VP5u$#pOqvQn69Cp|EuzJ333nS7l074O(C63CbZq40f;br|7vd><@(G6$OEQB} zb`K~2TgLj1r-zX6aCDp0gn?@u;2rxPqVIe;Od}fw-$(7bh#U!Wel-C3P_H{C(f_{!anDc6}+TwXvDv43R; zzS)8tB20_n8`hQdfGn{9Wx(uDZP1U1I=#{MeZi5}s=G;l3aYg*;T`|`^6fCzSDS*a zzZMrsUk073gC}D6mk(!NDjNO|x$fXVV?HknA5Bg`4cy+Oi7`(UeX8}HC2_x2il)ZL zvR4=p>kZLh&X!17{?P%%I$S0yl9vK%0)tjYXBj0D(YT|p1^1dh0?^e^z_Q4KSJ`;A zH)7K$k0fBYAYX2b+;L}jA3Lzi^xiKV*ndkR0P2<8nd_}P95aou{Fj2X`k~VF4zHGx z=~`XaFN|nW!$_-s==9koH^rW;eJ;H$JZySS1TB@UgY7@T&uk(r6WdJbuLT_PhRl9k z*7t{TH0a?NYom$)heTn3hd|dONpJ#9u!?Cw+Fpxw(XxcIKkoi5%u|=pf8o=1MGQ54 zD0E*FOBgxJ%(&w!m+@7@*alB~Vjem+auLOjbn8^GF1BWlK=AaG@m^S(zGL3-o&vw2 z+4PP7uYpsNi;!x)?OD@TnNMtcWZJ>t$*4ZvaQjU?X2qYNaCG02;Pk|^S0Qy5>$tyK z^Mt#&f;Ms^ul)7y4mpr5QPbW!aMZSE$X*vi3>ZPK5=d0zZS*zx)<7rZc@kpG{gdD2q zaYqY|N>P&yJW_&kX$(}>*G5+{obG*13?paXa{5s+DFNhQ=8M;I=o27j2&D>)cs~TY zy|S?jhoEWW=oLRa(O7Rp#|r8|WIqKG#1!#`z;}gN!SfdDT-l^grS*ul4@4r-`_tky zdZ3;Z>042m%iaD|hV8D-pOXVHI|e$A9ng{xomd7e`R-x@R6^3`2qVmw;q<< zZp0l#$LbtB1BMxMC?Z^?15$Z^q<8fT(9cJ`^XI?XDZlmC;(a(HVJYN=EilW(mhq}( z>}#>K@*ngJ{xbLh*684V*T*_3;_OB7lMfz5v;(?4i9{)~X;{jpuZ85Il9mJt9ee*$ zg};!(S-|Muu5jY4KU21d>^u}JpcU{9(>Q|GFUJHN^ zJX^>SJVz~H8%;u^-E;dubRyK4Q-TzDxNreGen2z)py>(^)8n|*X!fEb)q8OZjVqiVq7`X)!s<+osjqv?T(u;yMxNe z_kYgGIZtJV(&gQYCJLU{X51zZn1$$H$Yt%LWTQ=t?u{)9qG`9jw8#Y(t;_hCz#;L& zE+fb*u06HTL>yv>^&MB1^VICQ(tlRgk-m<#dT(r1DAq}?6f&iT7+2^C;VP_K#z7J> z7I5xVH%S@asf^CT*?C46EE|20P@OoySxDX|{T#>AL%qN_PTBFxff2*QO<{vI4LwC& z=i}DFs0dK69gr%&mv!WC>>|%ya@t%!gtVGM$dcLq=LYJB;Jp^oGBrUaQIB+0NVlZLYd(X8L_S7es-zuE? z(MPXb;)n3pX=jMPf?%!&_WaTx_phzHE5<1g2~L7a+ZZGZLc?)y+ z_qf9pRP-w(7~7UxoQ09vU;xFONo^N0%dR^tTj-|rXt3_fH^P1AeiB-b^j^jfc9Nip zjWkcDMr;r=Ailo*=y!hDEO=r!>IPt|pXty0gxh@qn;mk^Ke16!4&cwSO1A|_f)T|^ zCf=7xD>_zP;9ORT^tjYbT`8CK(aEV684s<>9bhADY^*;j12|ECJfs?kBD}S8>9`_r* zR?MkWOGXl1Qis;G0|*{191Xo>_s8So!TTg{9MsB=wAe~XF;HU}&ES`-U|HEIbnuUO zq~pTkmTqt9VAONu$A-(3kaBQY56cY@D)xF5l?9$Ply9398J?J^a zK{~zP8B+d?DCuH#ju~rggF*e;aW3#&Ghppd<5^iMsdTwj%l~DQvYe=N_(2w7^atw2 zs6&ejP4#&v=BJ@Yt_j@fpj`032~cf4Gy0U*o$y}r>hapck8{baPy~~>bTpvW2F*-` zad)FWT&=r~NA?DhCW~r1TApn5a}r22Nf4nYWsO zSo+8NIeiL31Y|YhwmaJM^3^SE7x)cZagE{bMQUa%nk!9*d#J@0()gI!KFU+$ZhZe- z?atz_ZNP0jmUe@j7QwhI_kIwlOEoIl4=e^FVZ262n5V$HY8b_pCVxUT$&*5h^MchC`ZN4qBdM_nZ;dT$v+?a`9IqJa%luH$-uK)ELj*W+k}SspTP=i|f51XPSO( zhL$frqp&uVM&bm)-MRoA%4RBw%oHT8nG^k02DwJIB&I;{JD_jt^^~SF0uULF(IJil z^9d~7-y=~u^hRAe8I1xuS9V1S!^DH(HRRpZ=# z5DglS&#BjrDOnGXTYFX2Gx8dLA9@%g{{oXH1|>Pt-X<_pbHUaC`6Rq5t7)RNjo-BC z=FAuSi!G|!dFQN9hbtVa418~zKVq=8eLnluO&QV;1NyLjglJc2$ABp0kj=$h~hp&U&yeQ=83E-gLR0$J&3}TKuW+sGrHo>i- zmj}r*yhCHl={vPQw&8rUb|I!^mUcGIL-Dljqpz6aUz2NKV#fjN!Y!-ppU~n8ztJPV ze>F~AUJo(#Z~s`_!pD&X(!C-d)eut$qU@ZlC-X3#H7>1;9#;PfL*?rlLi)Ku39%_f zY6u2XH!Q<%Y5?mLI%jvp!fX_CX5$1c=zu2@FtIOoy0b^Sy_Hl^;QfLQW1mv7;q`$l z)I4C$=sB;u01Qr?l`>Yq6Xn6T1M+qX%3pDuVh#mETcDkRicb{e+%kWwbhBN+>Ma7A z#EOnD0)Rk}rH>^T*t&T~!cE9rnjBW_N)W--ryHe7sbqi6^7kY)#0@1Y9rK(9ShsQ3hp!<-Kt+ynWdPts`JeVP-z;1wjcx+OQZj~1O3RY&C{TP)%{kO0<*i&ADF zDWdS}c!A0q5?qzo7JdSs7>U8en*rF`?Bj+<_#>#g|M)n&2+rlc26kF=jyL~}NPlyO zFqTQl5O{z2ZPEI?$c{gL?IS!|B0JKW(ZEYsMflIZK5ShdA5#JuudNn&?Gc|cRDH8# zu~1@9>-H4{dcS_PjEkDW6OP?z#yfYsYZJ2Oi<*5HTJxCbVZh)s9#@XC;JD55S_KEZ zYR(nr-u(G7``~K1@6V2Vb#P%69*Ct$m6l_YyjzV!b)9ivBMo2U9 zv4z_-yqTj~Jkdyq`UPiOF20Qd0a6U3jWKC zdt(J*+~2EX?5W?CdI~Ez{Zl>ls3^~&3ln_;2?JxVN(7D!Q>MD?U4|9E%3ibSbqo13 z8VK-f%u3I)02NqW)zDxa6IH8}R-~D`#`C-`oQgVH$$q)CsF!U|9jw(BAV|95{x6$E zVQjPq!ZLY|B|gZN&TtER6^|fm0xe`XQZfReZs#xn%21?7@EM5Sg|)-BU=UurHNebg z3pVT-NNNkOl|cd;nl~3CO-3QW;P_i(4{7ieT(n9KaOyvVrD9lUvLLFduYwTOps<}d zCNr}nY!rjC8FVMrd#+bSgetYj_~-QQ$F>8Y&1;*I9(z2O9gk2JC#(*}&IX^2-v8)o z0J51`E#?k}-t5QN#2=?#MdLktmDs*iUr;!pcFL;OnElLmv;Fw7lvo4scI2#`&e?pR zJRw>^L~Zv5q%a_NRrd1!anEIn^NWh4u}hi?(#A#E=c6c*h9~=%$3yI!&1DB@BKld{ zH_=c^xTn1r2+$%e=>g&Sr-kCo8!yCVGeHI3lqojlWFV?HD zawDGBmH~E4F0mETdHIWDUxmkV7RL_zl;|_c`dP>ODwc_NmHIfb3=A&2jVk-|wq(tc zhhNJ-!#I2@JCbAtSKelUSSH4My4M@ zv#J++YBIrQ|i#>d!v`cx=D?H31n7n5h_YYQqQ{q-T#eTYVP zhMKd~&w^ABg`^Z76nZ@aC?f)KWd$lZ7%LPALwUopFzaS?cx<$^Y?QrKl{eM)F=$BT zvH{15gEAx5K(eSOQ^%;38daf0RT(o)BEZh=u=UY)vT_r<>q4l|hiCB*l_ACjVYR)l zMLp}IqeL^!rVTU&8m<5zax*=ri(&Y2W4%7|7Qi92It)2eQ(})e6n%|4WbG^lyo6>a ze^@`IOIwcDaW%|~9)oV0v^BR6jwI$FmdYk>*_dx_hpR~cqccjfNhp%uReza7S8y8h z=0$$yH%nLu;jDIat3rJhwqVn16aK`}yc=#a>oXV$k8w@~JkwgLfGX>JVq_xa zTXs7`8=~gbiRm29K&4y!0`VE%gWjkJ$Rm$lhuKGDp^&3+Ie~`JO zAhgjLX1y#Hei_WAt;iWIDfznd(oFhLCV<2}@SHg6s80|M+FXP)V6*j$Z?o=^ksXx! z@Lqd75`J2vLcVGayx{3<6$}q{{<>|{VOdp4*Qt*>2`v8(r(Gd|e+b$(EA^~SO6WXu z>%_o6ZSu=lZ?|_T6q-eZ#ag)TnhjD{_zIN{Z*Fyu0T^j>Ui!9kWOwbDEl8gwh4|j; z2Bx)=ubIH|Aw60vIe=Pkx?duk8V&Av=ZVo)XnNL8vUtUoU;LoU6)Nn`4I?wpVkw7c zvgbjIti4g-VF}OlLz|fwoHrpZ9H7sSPwCARF|}qCpn((Y+Y(o}7UyY5C2t50+=Lnn zHEtU&bAssw32mfwn0<2iCikK8(R6iZ7lcMKxAAeVqoXIj!k)?PczI~l`w8Q%8Pf+i z@mw9N7<>1Ng8<5w?=M^!jx_hV6~PRh(sUdR{geDXOBmE)Ba5%$GMJByW~Q#r3;muI zqg&?wPjWOk0)`_-4$3vK<9^=q=07yIojHc@36S7~01Rip{1323&{!xE9RaGBDaS?F z%{Cz!uu>O7%5p@HH7nd-uaOrE2cx}_k62N;1O!nb(hoGchlPhwWQoTVB4CgN^qHj_ z#eXAK`AE+I8$&SJ-?6X~w3EE0osP4%W=K)f4t+ZRHGjFC{Bwz$_e2lV^>6-YM@j*e z8N{h-xtvCZmV!@P|Fkl#Lv!YT;U7ItWQ>YT(GqTGeq~n~Jh+b_Qb0LWlsznpTEycpZ}HKzUinHJ1%Kh5_lc z+6L+I0JkrbO98V0${~B_peIKw{PB@TlMoo6umRi#TYpntvXkp8pZ>0Vwx}C!`}J&St;Vz2Q0y@1f57VC%fS!cgBWVpR6-GeuV!-%*f^6tJfNx-OoF5R{) zkVafk{18=+AVlq+e@#F*;#pg@h*hmR>1dxBQ_ooT4wJBGaAZi(fCJ)~-CTvE_@eYY z0aZ&_M7E&@;?M0Zy%kxWA=29$!Hz^;VnA*8G=g^93=CVw55V4Mu6Izc2WD}Iv}OrB zR^8vHpeMGW75K1l)H z3T_2LUaGmW^Q7}(UrG{R5*3secw;aA&7G?fR!;%N{nhCQPj+# zbKfoVxy$?uTIM$Y7mvLnAgIFY5os214J`GD$x})G=A*{xE$1*9`Wc^TbPgzLJ^=^3 zDm}>iEX%p}$bN0%WQeY9sXa1Awr1`_&w8xIZu2Du`3|KolH48)h+U`rs!%?zzH< zqoa53YdY~Ct1pF|XqY70#A@Rmlb_LL`iMQ|q#k(mJ@>voxW;p;I?sTxf0GX~=P-W|layeI;f!ntdgPcA^kdZ^= zFj--*;OC6f`;)cTfUrED=OPZ9+;kM(j;}c}N5tUnXf=-m&ijsh+ur79sD$f@TXl+o zGm&9D-<9gHIGW6F_B_~PH}h}u;-`<9sRvz0`w;;mKdZg`uCFM5aMSWK_=z-JbSgEi z>;sKh4nS=>!hZ0231&O;BvTh;RVl8S%3N44W3x}&uWcsNTxo`#D|w@eK8?A0?kaJY z`9WVP6*c{a(UXDMIpsX_8s2Z@*x1Sd0~`=z#YN5;`MJI6^lAw(&ZwL3CeyY{+8{W( zb;ZXN{AJDfjm|Q4D*da9Y_Lt@sH~Y*ri`DWOXf0so&GV(VA4kF~bInwfa3R*~i_a9ak7eqPyz2lM&I&Rd@-&HWWc6*3$_O`w4 z#0~jWq?Dx*n!TcF1o5i@Cb5Z?O6_wPO^Qz#93|)omp*p9v_h-HI_>mE1bql9aMUp;uI2 z$r#__vqW$k8q;T)FI%-6U>}|J&Ire6L+tXsR%F#IL+}dud$ks$F8(KHM~Noqrk6K~ zPV!39Kd7(jE3B>hHbY=HJiO(NY*qSJD@{=DzY)l#**H1c8+(@8dewk|cLEUzmO2NW z9@t_yq^AJER5v8+?FF$`}O+cRUU>?X$lJX=<>D2H6&e-idV!BB7IYSM;pc zB7XJ-ONgWh6CAhNiWe{Yhm(>gtwBk+rDIw1Ui+MSJ${|7RpV3@(r*6 z(J$`~KB{n4r&~*Yw^1dWLH?#n>U(T?4yX=)v<8KSY)H%eajeN$ws{K?Y?^z{f`^s7;GEEj;_P|U@(0m|Eb8bj{Bui zMd!a593-ltXBi=$_DdS{uTdQE#h^Lh@pUg{#?{l`Zk# zWvxDPuDZqv3pcw_=3kQ*Sxkx?Q?g|6(-7_bm7>IILzfcIrwEE;o)m0+U!cu&uU4tO zn)+@Id>Np$iT@~PQe{VWv}}Z%>D^&%Ky+?mcV?d-uzga))@Xc5&-c*rD}(>>`ds}3 zk1S~=;*3v+j#WG~aJdCu?X8x{nAZ;HUvw&JyE$)&opCa6-Y1Zs#qw4kt%<<8nUQ?~ z+#P>a8B?9TZ%TKaP896OhKqD%xd?QX+>fzpwH``dIc5tY<1~eK1F;MJ$SuWD2%^D} zOsy)+b@ZOH7KR~45`dQ{E>ozb4=SPGlpEdPFH^SB{>#DyB+PfbE+9-j&>atk67QRD zjGNM0RIb#59rUeR_a*z9S9}R=&Y>r)%YLRgI0G|ALOMfMlXiEoaJ>JJ-U2lUK$Gzg zV_`9UbaWw>`miSlc*q~%zQuDdIdnUJGDoLtb%(fyEdy0I)SLbpcW*>GuS7F}J?wx# z1tFL*9;x@o+nR<{bmc*GY9D|Fdr%1jg9~GX8Op0w>3N?5GJ{j+bm!l_C?` z$dtG-Lwvf6o(4Lft~TJ>{5QGiT(DU<@|0A(5K%AZ9=tlUH5`94noxoK&qb7=IDG3g zn}oMZg94{oyD2$cD;R9~G0`K2gi+7dH(AU-i}Nhr^W=ppHrmS5Qo2xe0<~ZWzE!T= zo;;n~E>nuvja$r~z|Qjtb}5Q9fVvYM#h>TazZ~1!ulF-V=63hJQeBJ%12>}3gY~od zag${0L^P5-gT)kx)^YzVrGdj~ka2L`dxmuLlShuA3x*o0UJvuOzckeMTm+VTz~m;` zwMK-ib`r+2J%I=2d}Z7^Zn95ZXm~Kzho4@*=r@vMBUi1{f(2obMZ3H~kHaaK_2B=h zdw~*e(Xpn4nsH(w7=7^X+6(KZqh;pA3r<^y$G9wimDhc;_tuf{O=w=#jT@_FP&3hW z)zxO0-zIdCQsoitKEjnAF^cDFY>;-Esj0+x9P37{GeAo(bZvvyu*7iez%uiWCraM3 zNKA~aL;$w#ZleW%(YH11{EDip~` zpSsm5=Uf!3m(xFrsccmverebz3oNN&I2b*Xua=lBnJIp~4^90@3c=4|#2o{-kqQkr z5J65%<;de5uE@9retiT@km3k8nO~6lyeW6W|9wczkdm@|p_JHfviqq6%YE;pt0WL4 z8k-Pj$W%M$#3)?c7|K^XydCE$f09?V6c!wHMT8<`K7+#dgCm>TLOAo|5Nb63I%j5cM z3L=YKqgpu8Vict+`+POIw^2Hocq22;`fYr4(q8SrPUMWj)0AwKLP>LqlKG$oc8qR$9lHq*85H&&~D3Mxf3aHCo@I7p;y6a5-g& zVId)j5rMxwe0Dm0IazMSipPb@l76tj9?)Mv_1D5_4_Wlasy!dtP*HY zZCyb?Aiz>b(!Q=2cQ(pb455*Y2JknlBN-H{UCjhH1QA z*}r)Awy=x9E48w&tFs`jfrg!-H}2MaYzD#dxAHcDDKKKE+M6gPMFbo;m27pq+^0y(F-U)c zw5P^1r*fB;-{*Ho_KBhur!7L0v~QT}jxXyCPDrD@zp=r^Fw>D`fP&Vt2$BwF;>UGl$l{9X`VCQ}FOtAITO%lJvn zB(%WGsVk~A_s6KQ;xD;A6vrD$kVxc_T1;wat~f@5*NDljdwSP&+n6fov|zA&OU?I_ zRC`q}!)%v%59!6d?`yuoS2$2=y5-vSX?EKF zQ7~N%C6`^@U2|e}LlVR}nnH-<=Ua-y?`<1(bH=|aRGH4@cQe|w1STz}(`sfMl}^Ye z^9UkONewy5eV$n)3%TWTmWIsRkK}!h&k%v_yd!R_jPSB2^bl7hgop|DX*(vZics5U zDFcQs+o@nSD&zJnrtoOhSm5~zYz6Ju6vbWJ(FuRrnH5=bv9qk^XMi7LM zzeIIH{*1y|vg0Ti(sk2c5ADV9V&?&8sNm#gwuLM2+nOUBw}hL_kR1fSvx5*Q;28Vm z>-7K#>~3ter@CT^+EJtZ7GK}z*Z`>KJT7qM`VxC=i^OWt%jX^Mq zT~X{aas|*}WAg{SE5SDbuUIBUIjE}1>g2THF2}Me5en5#_Xm71d3aa?q00i*vLsJ8 zXVoh2T>;pk(H`wAy-8|N)RK~IPLcE?IRHH|G&4?fQuuOUa8MCaO3#+H+U7qA8;}8RSG0WVLSE$aS6e{ovj~%)Qa6uWL0&io{n0Os_i`EHh^fi(*25_Y6z*1$ zTrXxTlc(FfwH%m4ukfBf0mcP_PP@UXH{#q=)`wB!5_F{RN86gx|JM7S*kINOsa<3! zO=Qzie4Q(s^O%i9S7Ro|pMwc{6#kb=K>~61;N4z!xNR_fc+mtdNIg)tXN#NMs z&`k_4`KJHhWDMt4X%lCn1!WeYoV$Vx$nA9`sYfLq@r7s){vy(Ny8(#|X zPvKhidLrbel)qKE#!&U`Uepy|!X%NEFe0#B<{J%JP|m~`I^R&5 zffuD`Nsb~YB3mW*iv?FL97Tjnqnw;XmI z7%h_o48x?Y$*IBzX&1+YSkGOWmY@@FZyGM9&HE&nAnAMR(%KwBjyheP<#nB7ixP%r zp1ri50)oIE3aP!CHZ)(lVGm1~7zMuFMQCz0pKDtU>f0S6Y^95nc*EH+6lMu9i6tRFqNAk;ei1c5}$km-iF^LrO&VS4Y-ziGYZo{m4-El8)b}jDJu6XJf0)JCq>2v1b;wYsPxwm8?2gSQc^i z+=ATP%nno4sN#bzg_+&@rl`mjVBhE!SC@p2Jv}bTN$;|^mrUls#xb$0TPC`rZ zMo2b(?|;l=DllJn?sw&Rq1v9?g#EcT=(7O55uux@A6;-Wp#(V_8X{~9`LCi*_Skqe zU|}w`9M_fVJ5V6!aGAc=yKLzH;&8djw?l0Tz_gm z&6f|a1hg>CN9MznsTL>LJC+BIE(nD?0VY<%bxu?gztKo86J|zW0@IuZjzKS6!I%-V z@Ue_%W3CgfFKVTHTc@ylqU?hZHAR!r07yR`Jp5P*MtY#sDx_?_4Sxzkfdoq++g&oP zC#N&d#;|f}hnpm3yn@0=CKWanc^o-zI4Uos3<8h{ex5ApEH;i|Ws`f(2~|QtT1yad z&5a^XKcUjI zBhlYEyfE3ym)_Uu3Q2V=JRo1NBah)EXDNi?^}z*=uxWDrO~1{ReeSVy%u!+MkF)2} z8(2q8e~-Yn$fxdH`71a8@^3FwX?p{dbG>e?{OPGv{yU@!N*qV>fdD%H#96si{({YQ zza&3MkZBfM-Dw}7b0rJz&Ql^6qdlT+qn)8#!sy^MLD6+DX8}eoHG^E~T0LEu8=L4j zCL?7^tK9N^TE=Nf(q*q(Lt!)UJ-cgg&}t_58_mAjO=7g_Oxp{i=Q#etGH^&W-y3a{8Nyf~}t942VOrhvoM^e=3IcUrAB^%{>9Q-0xWW2#=W88?ElsY2hi!kvCUmvr>87=Cv^B#JuQQ`0{m}di`%m70$psXV!f+qug z@{=TSq7r1u02k(Sv22(4-z{%Zk#+Vx+E7LFMCA3+hf&uhkcaiSqI$m}lUdS@7x#ffL zH6T0Uap~|8_4`aH7jWVPK3nX>gtc;`0u0Z3gu`47ngRK<$I7yW+gSu9*dcx3_3A#g zj2a?aU}}Kl3z$F|Ad{a0dJ&hU;5cJ&Chxh_3ozv~i(wjDe1s~_jlu%Mb>9&+hPN)H z?=A(eiTPk`H4i=3(P$8jYAsf2zi>ofXNlfn+_8Wi0T>ywu3#8oa1o`-B{jxI^%zM zykOp(-M(jm#wMY$_vQz5uND6aW=VMaTyT}3M#Iqc1ws}Jd;SNR6ulEG-e*!ZvxR2p zOiM1VcBwA&9LJGjHs-EQNjS!$Bf@-{xvWRQ8}>YxYDyegGmIm?qt zor|9t_;9BsPABv%b9(T{RzxC}&moC`ct@c&1h!!24O|^B_NX;52nrO`;WZu7*miZ` z{-sBPv4IIG)4(3c3m<*vhW45v3t!pMtK7gqA!&^^iud14C$|EjI};Lt{gsyKh&m#K zQ~avOjpkXTyP1){fV@6e+ctEU>po$$1LYje@~B6;lnVdt78&jN)5M2$Mi@F(%e}%u zQiO21UL{T$Dg*Y_np{jOIlWovR=oE$!B#%hU}Ox_d_yOQ!D3+wb?C31NjS3KJ zy#mB5ymUK1Ea1%Z%@+o1SPo2oWS7&?ntich_^Wz{pQtLO!dHK2BOvCx-qU)u-gFL) zm|iw|s`MdFpb&$>n8ahxe7w5>iY6#PoTH?SZ6OO@SKhsNtLUx7(SJ;Z_P7XtBhyFV@J9cBCD%%sZWDhv)_N(Ml* zjxawI9twg6(Nt&C<7b3o1{QRL9jUI1fC0li$wdh?+VN z7cExDkHEbrP$1iPpxRI(q-gAIdOg-hK{hcK`pDta#hJ&0qDO~39CHGVZA7HU6 zPLw}i5yHG$)2mlO5Gas=bqMvG-r0riiQ(=u$59RlQ%`CiE)UJm7j`#(p6akc8SNC> zGr7Y2A5`09XeBr!Zv?$ffZyU)XV(Qmgj=XkmH;n38Q>IoOZfio?YCqH8rucOk__d$ zYG({^0JnZZKDlJp#~(S6Wnz@EYy8aOmgK-;y2ia=4Y*+T_IXqwF=HT;4?xG}rur^& zt)^u)eky#+;W+bL$FAp$-S$s;F0}!`vuzB|;w{z3lyzNxZ$H9DSMeHWNFVGgHKDEfc= z5*odAuZ??x6|A28sc_I$`)LLiRrYVJzW>IRwXZo)Vd+V81HGkC&IqC%$lBsyP9$g3 zgA#~v zK=hk<96i93mdqOr3?bL+k0WioVa^2gy7kS|4q8T`{F;i^_g(qYsnKpslzj0JKGk@t>~|N}a_fBATFcscz!Vu}jd9*I!oou7T2sFTETFM(_8H?-H7iT+#Wj3(Hu` zGF!IMQlEA)vsKqa0$x8av+@8hK+wM?F3ns-qo9Y*Z4;wI2tnIQF%>h6s=t^sK%rWE zrf#3C%S~&p;#l_@(`4u_bwk}u#kzYMGts51)7M290h<2fv^INQZSKjQ8K7?vRJq{{ zHu9!A#cRTZlnIW5(8Ub(xBbQJ(PP|0KnoG1tZRAsO*WZ4qjj92~rVrw1$B$5WC(2j8SU<&xiqWF(IS(1D z@@OQLeTY#{?3s52e_s_sizU}SU@ZL!x=6})mxctB8geyUT|*x1BlK~Dsrk7c)Nh$* z>}lb$zpfRid!<(wY|Y^HM2EQL7PpS`X7upi+jhW@Bf7NHXS^E3WtPi7crdZO`%Ujq z_bquhg|ECE_poE*SG8HJ*mSWTFFdl>rSX|7=$$v34meiJTQW7+%dfW75Sx7{eDl(( zXcD(jVl?dyk+MyoBjPNR9JKV^u75q|G73VW-{=Tl;I!_xz&z9|h8L_IL`NL?DV9sX zt}%hrL|@44cq#74m=~UdBZ@}LH9aGTqX`*x+LBi1V}AYBu!KZn>#bhBQq!i@(}3v# z6sh2bB}+mzt8aD(Dv2NR(n|mAM16y_^wflD{8r7B77oXf$MB#uPk*3#)7;=E-v$DFD&j=hJ#pT^!J6ETzn>J8N|D=lE3^@>#mzVm? zLQHupggQ1K9rdu$xTFzI@`7RN2BMBZnUz7%n5H_+CLx^_o)a zx6`OJWw1zEkV{V08skm7(a6Z+@9z@S(?DM*}47Z z%im11;%1Gn=_&quUcw@3qrJr(j@ci_6`|s{0?5Ae;Z&5$JHBZdA8$5x9+S4E$2EYC zmq62z$d$x5Hp$n@E9%A0P;CC?Z5Aj$07Tw)lhebOQ`!e<$R}5q2;geTMmN(`HnR0* z*%8AbiYcQl3EMg<^*v|M;zf%gX>FU(W0NdDujJGr_!bq{RVq&V_X;;DieM_=WzHbN z6aU3XrxxJD=0qMku^SRwg(tP{{09CTKkCG5x@mrSZIPWs{IC7YYgKZcatQ+{NL0%S zcOJiIx?Z4B7nlD$%v6WjIZpU~F9OZS=Q%ZKX-*?9q4_id(TZqa_{>;IBQ}Ulf5v!~ zxv8Sz&-nE)O{X>Ly90nE?*stSzX_4}TF)G)Gh${V7S@P{2SZgxn8!dzDzFpaaE0iE zoB`r1jzd#h)sC9yqC~?Nn9e#N#f%7K`fEgfyuL9F@b4fZ_Iahu475UAt(Gvj=~F+Vfo_kE*bJooV-sZ#D}oR>Zm;)EI zoQYehB+arjc|!|Tg9vz8u8C^kzsK*wDvC2a&H3Bln}>g}Rpz`EqI_GTm4xwK!96CI z^|f8`>1sx6SbwoSD9Bc7lmC41dTvo9IngLW_Zk0ZArLv8ZytCONo0>#$m*qKz?}jG zaG7k$W`R5Z0ATBGV(k{&C|3hSEyx)nXE2Par8QmIG%YCYAB~pZXnh`ip8s4qfAzrB zd@M$2&xf&XNTEtO?&!hkOhe3s@K!jyr=$3i03TdM2$4ca{@>L)6jl5moE9SBf9&76 z2h?o?tYAD9Jy?P$NMrb=;#{BhiGTHmd=3N*~th-F-3_lV@Ah<3mz1 zGTTa!vN4CvQa$xcAn_DCS$$X9@YXg;`qrLozDBP2w)0pXgM zUVRK~H58lDMYY4Z=M3Mmp0RH>ggwn?GNQ~+hx>}(a|-0olsNUOn}ZqT<_6hJY(iZB>u45L9ja@$_;Qa1h8O=LK z+n*tUP@aNZ&hhxho6`EoCVMArPoIuXM!M?V3_RmyXO-ld6H8DvXrj?blrohGvn`@n z@~PnCq$~XSNBHzN8oU6*!7Jc4a6dX8HCx+bA>Tk zhKJwN_aEl0hh&CCY(k~b_jSVcBU9a7<=-t;;bbfOcZ~_fXUwoWS|nBkEgLeGdT&t& zavsg{Z&Nd#Bon-Z*y&@(lfDMWBSMCx8SA7MS8I!dN9tZ_L7 zJ!AO;<>!*p!?0F=Oec|3To-pz5Q4K>FVA7#-Gptv~)slp}>nibH37Uc8DF zT_f^zB8nq~rWRr|+lAvM z_1@lvr3?a;?26_+5-DwV&6(LU&-F2{hrkcmcP(wn=cZ7l`-CJtW(n5F|F28JuQ+~~ zD)4aEjf5YXOe1iUcbh;#ESP6Hk#BYObgoi8!Q}XQIT*y$`9d5ERiu^nl=z#y>Kiu4 zAKZq%J{+=<{-Uw3k=2V}b%8}y^B}?c*tRjHS_Su#+|jj1(fH)-)+S? z&xQ@8jgCa$Xt_$mPlsyw`!kG9f)FRtHpR0#K$650->j}2Xd|(!R-{fsSy%K_J5s>ItRp0 zxzO*a^IB(Dr~gcu3XNsXIx9gn>GqxYXc}eXFVuQYrBcuD)c(U`7hkni*@R;U(Q|%J zG0L0;2lk*8b2v+=2sl1_+F0CX2fnDN1yv{5Has$4NZ~c2J8aJ0Yh>O1@-I1T^Wc^( zPJ_%dN$fmb=XqaYr292#WKFJMkK|b2nilG6-pznu-_=MBm4^e$NjOh9 z1t(&DSOs$)LH1vf1BY{QhEqf1)IXnMfEn?Xt&`nfy7q`s{OnyhmYMxGZ}5U394e!c zut4E=R1KhD{$J)CwGEJ$Rg$C%K4Y>+Tp!{bEG_w?1NQ<^nz^(jIFQU7RFpAGCdZUt z*wp|ks37~5zSdrKBe9<&W5<^fYvI0QXY-&pU`2qzs&#K1N(@zh8)m+O)rxp zh+;g+?r;4bZ=D}aV$vS2q<(>u0S@+=APN9WVI2H)cPh36B z9EG6k+vbULR8|SZjSqJ&Qa&^x`r()&#A^%mu;N}tH0C6IH-ZG_i~8MAul$${Y+Zl+ z{Tg&Xyw1brtR?1duIq5>C9svED`BQENt$NH3b?=TJQ*BYi=o$d%!#1ku!EOzKj{3Y zm-0n@;2R-L)dr*?g_f&36-f_o##Oe^ac?#ToX(#KtCqn^5aGfJ_-|ozDCj#m)_ed# zt{R4-LX(Xpaz6^NX@0;noTL+L;5~_+DJPsTRyf6gKgQY~8N${lG|tP#2?T2B&kRN* z^LM_xyU#!mm9?ysl;O?T8EO>@FFVGAr+Xo7es7@dgr0a^%o81I-m+zjA-gkjx#Qm@ z%rYPD`Z&i^{(*FEi<zCyVF+wp6|_;o1CzWB5fW`7F6&g&EAyjs z9l>n5an7CJ*Jo6{l-VvZPNeJ_bX6f1Y))6S9nM!+Gi_?p67Nu*2VQV)nPs1_-1O$x_-EqOKneCc14J%D$T5FFj2kGgzDpHF{Uhlczd@3` zh+GF-)cgiN$nEE{MmO&&_n8TE%umgU|Bb9^5~#m8xlN+H@{a>+L%Be`L-K`Rr7-cB zxf)(R)ay~4iC_DJPJ3(tGMwx#`{2;)lzG;qBe-kkW@OTWCQkpBdq7O9bUzKKjIfWk zc2MZgoW5uP`Zxf_qi3dMV7yWL>Fsunw2qj(wY`})A*uQX(u4mI~ge%M&=Q_|?w~o|GH{3J%B4@A#xLG21auc5BXo6dwCGb}nXyRW9l|!WuW9 z2H2Rkz2*ivPoB?yKlhMflYX~dm5_45m&dW+m62xPBKxl>VbYS~K~4dmIxah?*H7Np z&v18F_!XEY#s=?<1P2epN|n?cauNN>DYGJg^=1Tu5=fLh9=qKYyXAI1pbO+$-#;sG zCnVY8<7Wr(QPu5NO@Fr-3zqm(E|>4;R*KQ97UX^^V1Am}lmhP#Z#&P&LxZ!)4xp4$ zH_NiigJ{j>?~&MgIX;0zvHL>8PzI{B#qhqJsS+R(Q2B&RQn>lbTfx68(EF)GL&P+* zAfD+R8N6WAJyz&@5wy+8+v|o}W1D>DKc?&h5&%hB13*fQ3C$z%vdBb{_6A}%wp2Ar zhb)_}J#lVI7Zzs|HE#tAF)H0Mn=n%32-rg~ZXX{lbv-k0@-o@d4Am`w*&h?%oZ|O`Z;EW<6G|NO$%iP zLqC}=xtJ+?Q>ag{nm+*1g%z~dEk8xw{96UXwCA07i;e{m9A;gOqi=SM~iD>{p7YC2wDjiAM2{RUdb(YZtN{k-y*`=RtTC~74 zf+pz_Z~2nNsoui7gUQr7c>BKOj2@x)T)-;!O^lw}>i7R!Z4L8|hDI^>x9*tv4_dvQ zW8w`Hn%NEOSAL%&`=A=pLBVc=IrXZ z#c~%G)S#^V)u&ZNNR>L_?D7r3!t(4|T*pMdE zA|I{Y@DeHms4iWQ21Skp8pq||{cWeT913EoIv(&*Lz?l)9ZU0N)_~dR3C2&pvx?Wm z=W&HswGg|<-*!y%th+zuWAh&mVY~v2ac1;#H!jb`!S3*4cJI85S1J5CmKV6uj|}Gy z5;R?&zrjBXj_ZFq4UC#VrM6(V=PF_8|7AvSs^%O0Z@zedbeh)pcP@4XZ@AulJ!WG^ z?cQC_akG%knAVu&-G9ia(;fp7HbhSET;eSPN_n!)0am5lZoeI5y@LIIm_Cd745>g1 z|8nJwbm&HiC9fgDz(aIoa(mKN^nWkP>euwQ5yST5>*=^!O22g4`{)=;Y86b!?QRfT z;F0eVd)gcllTWYp{mt`)F^TvaH5Yv`!S>wY>(abRItn$~w?I{}V*Q-d42?gPQJKe$lpe0Vlfw%ro z@ykg1CITgSK8F4KQg<5glbBrZqDHZ;Ev>F=-7Sf%UW7ckPolq3DnhA`Ol0KTx?eviOcc|esJ}{=EqJKE5C55enwZy*Z1lfA28;FXE1IThv zNGrRa*c(xYGl0dbv4+DY4u4|y<1ar99FiNLQ zg1(1xe_hs0Gtzc?LX>1e2Vf%3l)3Q5QFQ;h|qSj98OZp{RB*DxufUMuz zAkl*XJ&;GU!AZ%X*-%$ph>bS8D+8bxe-kGdcpLLag${GU@RLReY3j6VV7k7#gIpiC zP-7b`p6##A-;+vEtocqOzs&OEDaa^)Q_48FfBlrI9bd&?pxa37w$m>2Ezpdx3i}3b zUSvwaiTBzB!8;7T`!zWGQQE}8dfgyO;R(O8x+v|BKdx0{eL!BL&w7ms)FL05EE^kI z97D&Wt)rj-Ei}ms`4p-Sd2_mHj>Hqi_&KVExE8C2fw?-T>o@XVFK!@1n5TFxUhj8g z03!`K%5;8Gx9?EkS2Uu@tS@}K;f;~tc)p!<(T{riJ&$;7&>-9}DA7nL}ZKr3YdF>G-~NKwZ@MZ-Ed$wD))=j0$4xA^ly zls#Y_AKRn=dMSirOF@L#6s4SmRV&F=72NfV1yCW`w>Gh+!xD%=f2(@3lz5JD?P+q& zxuctEA1H|yl|8fStHU$-rDC4QDN4a2pUS6`coX95fSYwO13AK|0m)lM>%vj)rzyPx zDKBbvIkGM~4GDvJFO?aFf!Rv~7DjX$7r+Kamb>tgKL76{>T~G*->tx3_m2+Ov2i(f zJpw6!Zj3%vFgeDCKZSD^jrZ)Dj2Eovldp%IN}R4qu-8Aii0;T9e*i-+BVx~UofKQawM6xB?~`t z^GAKX<^YAse#)Xro7Bez(+6*3EO$@>ILM>eWdr}7c2QC>G+Iy&ARbk`nMMjWcB{wAfMO0t;YFy~ zjGuk|z&{(<)7>)1X~rG%NwYgqF2A|iW(vo@GIJgJP}7WMPxNL&%ZuWQQh_Blze#lb zbj%YluV%LyuV60|+BvJ6R=m(U*-@5N)rd#D6q^o#Xs+$!BGEff-8jQ|G}fVosHuN3 z^Qf(KA#W2vQt9_qQud~lFlZvRuNsBm86*sB>-wRH5{F1*d%#O{Y_mNKBYdK?+iA9G zwO-Pua54JoB3KfxgUN=?AZ7u-VM;ash*zC99v%BdRKm@PMG~$JyTff9Uxwtjf6n>p z;VzWx3>!?HN1_1N*@uSHy zmKu8iD}6fpl?t_P7&owK4VUc50R{^LjXw0<#m@Eh3K7=)jbd2N{)_XVG6Vn3XEGF^ zof`oL<*oJFuo%ABX2y3z{+~lrJ8XO}$_<;8ZvSHR1kNAh?a2@<)vlJte=#FbOh2{t zVz!=GbQZ`0o`H13fpOUGeAUyvC3B8YkMwfdxIJRIoNN6_4B)$kJ9@*-t+_v?3RaS? z<&KL;LTFPY-sj>y-3M6tYh?l9e559+$>|y^pUJk+WD@{DukmME<8L|GDaEQ6AD4Nc z`Ffkn)#-(PYW?3!`QP(cxq`)@_Q!xb>ysq+f}CVhF#NQ(8OwWjEGl~vskT9HAYR%B zYso#+o0k5zM$c%Z0h;ny>hcICsG(sqwVgk2^~r;cz<@b3dR{`A|6SnNG0NzCWxVL` z5GpEs6PSP*YW-xi1*kURZyF|+`y9ygUJY&M-N_qvi3@BMdfkxXQ_$>ZehzFsJq=H1 zx)Rkz^u8iUmPM_x6A=Tc&z(J=lRMVc9crao^4Z;1OB1TFaC>+eu4PMyG-k=vs?TSB zdzL*+QIBr?r?~G|>7}43{wRGK*$~Ns#JqrNlkpMVaw84&3jPpAk zR5bX7A!N#3U64-Bm9l`bd3(_d+9d%q5hcW;NhI0=I4R>o{il|SHDV2uAtUAbUV!;M z1ct7cR$*N`N5q$;4vpGRB8gX?yst%GDxxf`nJfCF{5nHA(`0q~4q+9`$`fwfD6OE` zDZgX$7q3RjpX{cps0+i4o*X<*jnLJIXfs3)KtE9oFde#S%E}-xG|qRkIa!51ZxUL@?aR`UY$X-$~MrvB)ghrK+#O4@6bZXT(OxRng zUf_EhcPh40uVs--IC9hzw(a>nB9FO&t6!#J71HU^C1$hnb(>lTBiveUb z^YXc!bjw&TUp`R-LT=9{F0z{RpI>G&OoZ#<0DR=e2rfnd?dZ3s?Sygv4(HzsbNuxW z>A`7VefPXd;6y}q#8xn$t1`J~09Oh8wVzY7sA-lxkB!^;FiHqoR#etZ{O)dPO?miD zUoe#!h5H6C@Il_N{yu`&FZ&S(g%#93iZlY<9xp{;iA$~jPzTKB{~}c`bhj;YE^~UU z0~bB+Q%|<(qJY#n3h#Z)E1XR4f08y4bsvFUaKuo$0$waBDL@sjhgroMtUZg zMy8r#i(Pv9@N?)sLv`vOff0W+@k5-o4E~PtnsST))#Vne0YBiM@ri|SSx#{(qS_r^ zh1%2@_|-&!%=U66we932(uhAQV>W}xf0@lSMKnFTxme#KB9KJEy0h!_1^W2<&8Zw< zeM2=ubE(*`x)62XMd6U2?)2+`+zhKxr}}e`F+34=%bkTWflN+gB~ZPdNrA1rEi!w9 z3};8T>PxNi%8=-kws!W%0&O@FtCOM#50`p-)WsK#E#3;xpX5{OT<}h8PT>Fnlra&A zz)Y334)ZXMr|p$Bvd{Y`GauTROO&jR=G66Hp9O#x$btpZ#zlsbf1$U#vMW1H@JDJ$ zdLygMoYyrBPV~UHr--CPq;J?89a!%G>#Htp>KBJ=lAHt@Zt0Csq?qDCHANci`Xagueq0ZNDA-H$?f|-^`nY-0+V}WdKydDs%?dQRl7UxyzL69Nl`hu=@G+u5{5dhO#O!m)O z1sP|yt7sbnMz+6!EOV-d7c1z=E8C2dyK=8`SU7zyAWG=$qG-BU?iS>|J|B@1t8yI& z(o@(1a*5&1x*OS|-Z%-X@Oj z`L9wJ;~0R3T<9J0eL>M2m1^3QgR-NTH=8wSr|DvIpZ{M1MdSX8vGq{q99NH`->RHw zM$>lfDvhxGH1%ZL$9J3xe`)(=pnXbM26ViE4z zsTHGW2W4bC8i7yQ6KdUD()fhuAtAuKfYJU!5lBE(cDE%$iAJN2Sjghe0nDAJq(2)` zTU)}(1=74Gsa8P}zC&L%ns`BLAb|4`;#N|gXHUflni&|9CiGK<=1UEi`Hg|5&k!I- z7g%U08;LBlLfiV7s7np`1Q9rMmtzY`+^eX;`M2O58&`wKgzuXv;7OkFws(+Wnl3~; zo2h+utk5nJ-jJa=!rwI>DDS;?#{+0A?hbxyAPYj?oPjp1ID-ya^iX(+KMJOAcnAvA zE}!-D69%jdj?6Y1l}4ZXi&SL(ZO@2|KeVnejH-^87{K}4LKlf+AfdCEXvy?rP9tpb zN02O^f|?ok(DbYu^l0n}b<$Yb9_b;$ne7C#yu+DJZj}@8A;`lnl<=t!1KWz-n4xtW z&mcnf_UA9)o+f}wHFF2}%mFbEL}#V*KixzE`4nZ5+a{3UxxvhOuUe9?)BDE{B-6(^ z&0n3$uv{*xxfNCO@e3eYi_597k1Y@;r~{JnP4JuTsOevSKblIoDeTIa0hMz-^2E^?2Y4Q?hww28b5gOEEXi-FEbVY&7fhp z9A6JcC>}3#|Crq+VjSeVL}SO_hKVJRv@k!e8zw>Z;wzQ_9_-Eq2@$Q(ihg z0oOI1PpP9WV?iM&#HJ8uiWT~9Ohe#=vGuS*U5*)&RV}_*zabImTPKR=7pq?X7`B@Q zM*cYviGk%Ma(B*i@QTh16ndAS)MJPD(?}hJL_M4`H!hOm8?E>jSg&Q*pZ~(HED|3Z zIT^~#`u|LvU7-0FhS|3H&TYImSgrdD?_vsRd435+^{= zF49w*+Ye9Yp1!8&3TOHFTD;{dz<|(`U?DK+bkiI+4KQCs_6SxPA{ra6Sg$W+qNUVb zuPsq7gN+%vW@?V1@4m_wr@$i-=h~+8n*(By7!#*{7*nG`8VLL$q4mxzS|1&ITJA}f zhAx_hm%!?Fn!HZO!^Mrr`oEHjrs?BVh42(%MH4?Ftg5eW@Gwiwe)k32Hr$Qi9$7q+ zRH1gH*&rik*|6GZIow^nyl1pw~iE=z4LiOsZ;#+$gfc-aDRqU1%79It9dIE zQPP+$+Np-lnQs4SEu9PWgDkG41TsX;w+_spcX`>=y~Yygz$zl|3UDkn!!+>lyN0o=U9* z5-&JqM$2CMm>$jTPL(j)X6rBBQ?1T6z*GBU>j+ZD{;~b+rY*~sQ~Orz$#slMH4)r0 zCkN!x2&A)7XJYEjK^N?+$5^|Nrtl`NAM;l&@loIuIZ?6rC0ptP-$wJ`E@)$9&o zY^tQ)Ab}D)eT5B>FQH)sdvNhqYexqo4LJooxo@22qiu zJe|en>iNj~DcXzj%qoPM5NDf&gQ~injZ;5Jek7v(c~7S9(0m=L zbC(>7nwkdxrJd1@ro5kZsX`oYO-_-vP%~h-6zTOPd>OgKlS`E`{8z22?sc$=MoH99g ztQupS!3GwBP`IQN&1$*l%Zk9KG()|S{JRc`X&4P_SP@@HO7A}=kJttaPqiJ^=UMBX z|9ghabG_t=F?>0!N2eDYKg=+2-s+Ib9O#s8IAta>HIT+WxWIU zT^j}GToAR-t%giQD#4Pb<_3-SR1r!A5bPH#Wmuo{0H56sYJ{2c9+|#8o38%y%?O6z zuO35m3p=P{&Hd2C;k=)Ib)Eqf^?a9*m-P{=3+G8-;tb$ctg+X!+@Hn1X55N^(doiZ zs+Y5%^8p+u*AhAVMtmS3wXV-ZFEK1FJRb}{{(M!66mVPEN@mg(&XdDmrS0ui6lGxH zVeX~umHriw)^Nq0pF=2x#+|Ns>H3y+VI+-8OIX!yjBHR4Nn5$-eHb%jh?Dh*jEKE^ z>jk#T@;^a2#W=5+DM7J4$*Av0dnRh}5y8>z`1@a(!J3Y}PO9Ga-Y#I5hSf!M@{}99 z`bGPaPEBsNiASi~p!>T2PpF9R5{TQ~cO8d|Ci1ooj7ZJz?N)wA zi#Z((se&n2tO;c25^J+1r_bR(Cg3Zn!&mQFjQ;G%|K$eT1r-2xBuv4VVO_5q6^vu! zrn1gVz`S702LJqs>NBs-r4#MZDsgc%!9}HNCfy?5@o4o^Y>I?-*VQ!_Gcc=hc{p6^7C&4;sl}73dGgJERWqVd=Kg069Q;^_EHuC#Mc% zhx{k1M^O`xiY6IM06#*AX5ep1s#f!B9j)BT!ADZ`_&4`n9E;LjMv6c*U$L>el4C+_ z=V8jdQGpAvQ}~5LlG+$ffkbY8HbXT=c6>R<$1V2-i^|e&r78y_5|>rfsWbgH^@wqMd0tf#DR-Q}_0QMI`%V?4$;UO(* zD>?!0F^yhl{;v`qPS){EzQ==nMrt|&z}k=&G3;uwmPu=C*`)$^vW>t2V=Y70d)Jq# z8p|l&m+Qqu?vUUxsMQgc{jQ^qljKO!;$a=}{mx+Zt^6FpU8)9g6&1y*9tJkzyd^9n z^`RJl`_%Ns{oaF5^pXzS9}WfOnyEMLip4=hojS6azZIPczvEv|86B#f85$l!1aI3b z_*Y9xKH>|n2KM^e{K(Z4vLNf8zK|jgni(5Jfo3}Q1<0r0)i1i0%A(w~u+ zHc2e96X6Ipnp>D=@S;JBKqj8}`_XWX(kgRnZX3Q#lZq^3RCHgd*DlNBSlASuijVE~ zg1}nv@ajt*x*J^MM|k1DOaHlez1i9pirl2WUBmg?@QHI^if5K{Qlu=M)MAwTx#wVw z;*KONcBs{IG+@^ZXUiSqDoSCz0@w=m#Z#O$0U)$dBW=N^JkQB9Mw59q`Gz1 zDE_s+)J86XVFxKGVEy0+MknnLkisJWJ~5(oV^@5=pr-=jhv+(UuPA1MXt)BNvdaNK zQ)gN))4@($y_&CvJ?zSKIjHmo3kiD1^$r%C0R|4v-op@ide;-%p6r8i6OlkAn0>s) zUS0!`r+i92Efh3tnsGyjS9|NL9c?%F)QhSQ3 ze2+PLDCFmH!N((pAK&o(Zu(>Akzv)}Kyf+NXm%LeCkS$w;ZWu(v|GX7kJHq3^{VPX ztdg;^fz)>2*f$~jec$i#S|Jbl*RzonFKZy4@VIW0OEYbMe2~PpHF0Jg+(;^gCn4v@RF;KQl+lA&k`4VaCRIz4&$FcASvRKxMVtcv0IPD4^@S-3Ue)j-fUC-N6<7pA|Bh&gm%|>U~8jWgjjZe)c0_>ze)CQ zwI?#_2w-j}=}jd7{X8iyVJqH)tjpPLgV{5pABOSP2@EJN(v|A=fw}9hxr9tZHCKA? z6Z#_(6h3$T;1US_0)}j!fAPQFuDA2|przv;P!?j0;V8{dd_8cy-SHG=1BT=kB`tpv z?KO6C%%|2Oh-!}#oSCeP{bG-p3&W)oJ)HAwvb+5+KA-;CLTyFHjX8LoNQ=li>GrSH=S@g(ho1@7r}2ImJc)XCL;P zRe!BptdHA?B7mD9@nk7;qyKVGIR4$A7qF_esU+!DHo#TRFC4*iOOyG(yrTcs$O=Win>LW&&O7e4ha`Qml@UDo71lwzPMJ| z6?;;EMubFLBcWGNqWSR7Mw7%I^FU}&=W|)a9&lkC2R?f4GOR2Zp1-V50YYb-hS;)* zNAThx=hZN`#mzpPUCE_J^KJyp&*Db z?|?MP+V}^n$;0bDc!dq{yh_~_KQh-F+Aj!`5M5G;X9u>~i;8 z@zkAT9FRf*JZc14K)i`dfWeLP(!?lCJKk7Fw2jowrC2QC1Cv--3Ie zmlRD!9oN^K&ZHI$=BJE}of4VZ`%G9(Jh$YIEj&Vha4I=YMFGCuKYG?scx%KtM|{5v{m6@c7wunuU4>(B z9PJy7Omcv9#!hw5NjAgI;+E$xke(+HKeFN^w?7X6T=?aQQ?}xDi;)6Nh*Zjf<2hEB z+I3Xl4E8te^d|#wCsdx^k40K}-N(N4m`=@9Q>14(bV!sCHwi8WlsLpFyEF#*9-fx_ z&;J3;dgxrf-rX~=xL!bm6CFG&Y@uRKQpPj$i9WxtU$lYromHDJO(i!RHYbm>jg*B& zE-!gOk<;xx#=5g)0Zoo-VSISiyP>@BQcxk72>~Rx|C0*``XV4(Gm(rDI^kemx!!_i zzyG+xP5yFM0?{WpMWOi1{n{kED!r^`{2=zS-sID+;^iFjz_*!4 zzU-?DXi#EllG*W6`XV?Z;Wunk@vKGvu3SR_4?~ev=$8yo1wG`Z=+zaDcNBGE>U)e~ ztsT{IFXVX`3BtLqw2;MgfOs24y?`_GU)Kxe9tvJt_spl>A9-qnv&0^MvU4xl8{|zY z1TOlp*m_e7m^6))n?%zPGB^XniVhmE_ny2;-ec0jFcpsy{kGs^4*JC*f>2)T7g6=L*5zNlG%F z*I-U(#77rq`~LNwHMb_vz;j&PrECw#Z48w}fhUheYR#Wh2|FIj_Vu%MMunxfa)Y{e zVc9*+*EvhdJ!s#^kkSt0?|fX*YasnKYV$x|x3*zlX-32X+tJv4h-8c-akh`@aGb0( zb&R0dTp26Li_t)Rn!hme>2+JOF`5s2nUQ8qkG?&BlAl*-C7>KGd>Q?Ek+~7gOK!}% z*L^qi4&LRj1MmPsvwdxoZTW9fZd4l|%L47Mnm5PfmG`X|b_9x&#Szy&3RoR;<;GSZ z37;T8%+|emSNf-3_(CQDO z37UP7bgFKJF;{QVs`CRllFJygF<4@dRzorF>n+GKY-upG43VaL~z6cK{MCONC z+lzU5G^@+ocf)dza{RAlWViCMj$vQs%;=m31WV`;6GNw1SH?tmM}rf#eypKR%q%??rXtD8z#Q-}1t&|HJ9qrZs8TGnHHrcclAWcbIFqIH7O*?6>#-rvjQO|+! zgUm5(;FDM1aDnpu19#*FO0+LPB5lJEr_nJ${_JymxPTO-urW!J8D%g448BLvYNA4p z4Ch0pnf7YkIT?GR9GAK)y(8N}aWKVWbZ@0V!KGMx+{!YxJ%@L9Kse)Wj&FUxMcyLg zq>KB9Ltj#x@1#UtU(^9B8B!OZAo}>=#A_bW&c5vjvtXdTYXQ8N!H{kg@(h$zVISu* z7(=XlM00m!eDmNt^1|kFIT5CHPGqmh|4K%WEHPA2>cP#pH=mttM=!+~t0aL1p8DFX zN|pGl^C$+G0OkE>bE&v>V3D~*matcC#Btpw)e2_%atfp)Cd_Tnt2{_ApbY2qX0|Qx zzwJlBKVv)h8P zdYnbG?SL*$rW`<-7hk%6x)}yQ`Nj-LE0LFO0{jKgMSZxB&d&sW2XJkpVr88&Dm@(7<_%uA|hcSy0 zRPu<~UauT5Z0()I6G0YfG46$~ix&VhK+M00`0!R+ck$rC-3uMh>;~qIfxfe$mZ?7L z$FLwh^_x%}DX(qZPzpme?h=XxTtS*AVNz(w$$#+=R4S$S&a@gtWwPaWl$aSud&YeY zrLVPb={WhwXY=SQ^MUNuulkbZu5|%|#eWH7ancyg$|K+~4oY3ZUCqv<*Cn-r#~c`7D)gm*5+wIWyU&_@LrTK>W$z z^u7$yKBKDt6eH?Yr}q)f@>aOyjTO^oD+%03 zJ;+N}w3Kk0U2~AK{cP&BW%Jj4E4t1bzXl;uy<%w-zdZ^4&5Nefb9w(W=-u88X=8ol zZ6Hj#kLMc^>$nD&uM5!iJDEF=y>VyKJ<|M>@T$q6MyD1X)+FoG$E_y?M48LbE@YPI z#&pVb*|vwMK$w*^2eX*F=ekfo626?86bm7n+eCS8F7ZBL`XF5vxjt}tW<3zbu5->V zFaRZ%&r}>kc&`?R(I(Hr-%1em1NAQbLE=m8QgOk}W}ACIn)z=-!U4To6b z0(ItPfJuhW*eiG+;8FyMP**kyZtY!&f(^uztUYXo?`SCvz6P}mMLGXS4rAWZ$=5R5 zA}M+&+ZKdA>iK=?hQV1$%G5Oxp9N;`Gu0fG)e(UOg0Ok=y^j3%XRxriUDY{lyu#TZ zH48+JT+%Bmp1$Kb^;!Fk!X})s`K*O36j}zRTS>|jS8THrJ-4O32md}Wf19kH3|$cT zKF9rI>(R7?w`wCh8gD;2KL%!=%a9yr!xcSSx&eE&!>xKGf9tH7$O3J<_V6(`;U-{g z?_BC&MSmt=Ll;GoRNG7&Fd_$~BvMz@#74Nwtv1{V9QX(MMvo}DSLI*DjI{@uF%Ga; zM&bp}*tYjJD8t>etF&?0G~sUOIQ#49XTrS5oXUj|pDEbL$pv`0ge}9F_wR=&# z*?#d|AJ)ReAy80!{Ou6^vU{Jy_e7k)o;FPpM9=ihn%*Gp4ZnYKB&_~mvaFL#W`;@ zO;STcjXtfrE+*JK4rcpZ^Y?mYLsy7-S|0qUuTqsrD&I^?&hMwCQDN~G?OgO-+^G~p z#;>AOvqEc^jxEhj)L9mqj>abOb=8f$03pQ&Iaz^=%?Zno4n>*$iF7liR@`CN03inx zLL7$1l>lBvxnp*9Xe>%!lG#Ni(n7@u*-Y`Z3cu~%eC=jLOz24l10YI@A{OvTM{8UE zL;Hu~7Y7<#H#L0h0oAA`Sd^@zW_6v#XHiqG9nj7q4;yOGYy9LcfwG_F0w!ub#<7f@ zYLhUki;1D>LQC=emwdyg66Nu38$Iq;tnCvTinKr=yi)bKt$ni3Cr~` z>KPah=-x1ul5l>(?h(+n-gqn?lSbtZcvLSXqG>!d*?#&#oA`Ur}`JvKAkel>SyxB`#p z(TQx~_|RV&y_*rZIl1W7q5`t&t=qu%*5qz&ETo($(zm+}D*Wk95W6Pjc9RMo6+I|a z#X{4Oyp! z307GJ2C|S_tj7z^raGIqZ*tRh%Ud+i@*=vYlxPiM=0o0w1Yk5&0P=>PtC$8QKke=i zrVMTtF&i|749?3C409Z2Y*52ir-PejxgGmUO)GK-@-Rln%mAzNFiEN(Z^Bf+`!0(0 zhx*fZ8@gvYRfGrVQjzZuFeYO`7e*fAi#5Ek$T|gYZ=D^Ec2;{7jnY&sXSatZu5PUN zw8TVN<4$dlZ?W5g%Dx5Zmzr?x2dkJ5O zJ`e2;q_?F*k-(~(dIEp`ekcB;rzTCd_lB4$H$3*=4qdBSmJgles^Fh#ngc>FN<2hM3tV)B|z&f`wa?;n6sUxAvmH*N}ly-xR1S1Ca0;(9z&J($ndWcx`r38}nna z;l=QmmK+k1@1LNXc5}x7`QnY9tAF8ki;GdK;`7k1OI0;)Ld1OD4`{{oBhP-I#(-}C zoIQ+2I+9{WCDUl*GZML|M_kpYHG>?=_WwTX zi4!uq5+m$Xzyfu{^{$6oq27C()oP>UQ~{r_hHv)|t2GUj9na`lwU5^_qK*nL?~+5lErxqX`1@Kk9PGFRCPw~rMO5wq^Xst~W+u#q zv3XARsJ*OJFeB8guOj=W@35zdAs79=xOD+!{torXdD75ZZQKIdj+m3=*PwUS^aQ4N z59J4qCdhul1Z)mcSvPo*c8l^3B*gV}u`()j6W^OdFPVP+`tfG5ZqbVDtja*EuD(+N z6Af*9w${Qei%+Xn#!nt$hv*X_YbP1%xf8hXgzJ`n(s49X-_y$IlhhWVWQ`uwzVZHd#2Tdfu7Z? z*TwZ?PoxG{az$J;^HG>IHH^E$EQ>%Dfa-CzND30xgxO?I?x@BOr^$myoz>IIM1qN$ zWwx1)PHLTw06vic9GkDdEJ35H8A$O~6K^;lmc}CPNP}12cddB6_)DrC*Oh>5?fe$7 z12u(NqZ3?M$m``P_$?bQqT-r;WN3f;ZFvL0ciJ@lXFoMSl5R-TNjH5XdolG{5}#^* zFO=2eJPORGNLfPW-MGb-lli|eP)T<6VP!Y3@pzMuMHw8;)Pm26ynS#S)JLm1FV4`u z9RVDO{h@ZNbMUZ|rBW&$e|Q{bYD9AY&MKJFswU2Z!)*q` z7PS3*?4}|6Axl1&9ih${3rY^ziFvoG@s&3-Rh<~N7zGNp0SA9}9};h)Vs=OByO!nT zFnZDy2h&1+bL=74{TWFa({LdWC&Y7wQie6-`1Pt`2rOgP2ySY+77@6j8q{$D(QGk? zG3^yOgg`dzPw5C8d$Jv+etcLh&iR_USA0dzVlP@~!c{CfQju07UW6OSBKj{2WoQW7 z`O`57GPEK&3wEfnUzPAZ#&Gi-5f2l(KCaAj>d2ENM^>p3i*TzNU8a%_Yf6_Eby_4V6 z-quh!LH4}FizV#(-2><}5L2QFHM{sBWG~KhnK9dLIZH%%=m=T1AXQsf+E;ue60{Ls zG|PUr^rGMR-taKk^z%Yj7O!D3+;#MW35(fPg3%sZuq)f4hW#acc?$)SLKrdN46Uik z&5ozX#zYwxH|D*>Y(^8q25bzfOh{cy|N2NPj*$G5-U#L3MelW8DAUeyYkUc9A|GIq zY=2TESd_7DvEZ=!LaA()m@c23Bltleu@opi?yK~{zj)*kN1adnSfci4?Bf89Al%VV zS_&#t#{AN5MbDN{BmG#qvrSWx3?o#2)hk$XPLs>Y1g6t=wEzOT*?G(v_AIUlN$ayP zE3^$#PrxBsWKHPzHBWZVuXXF)voshNI%ssWwT|m?9fMzQ*sa#$@W?UI)*4k7$8=`> zbm5=4F3W6>>5q5daDZQrtxvPj7gLH&@zPvllD5Emn4jUtl}jb zd;>P|SHwqQCYaSlcxAt=&86L%9j4mz0*};EYY2z+Pm*QSAk`=~Ng-6l?oTSHMXWZU}_g?g~R%&<+}MW7Ct4 z;MAD@_Q^jSp`S?L+AZ5a*Ecf&?v$*`12bx_z2>ISY>o>eEETV5m!`+~?Z`1sb5RV! z81cw$x#PskFhT^;myZ~rBl-ybbS`bWA+0s}+wQI*T%kE_Ubh=s&Y|#oR+6+3bb57# z0dTZc2aZ?zzS<2e(_LLACcvZk55QxlBk?9Em6PKn3Jx@9%=45nt87GU&~v~H*=P6# z)IyLz$*LYYHT;+Z`C<23bF~W38_s}vEdU|w^O4nfgX6#zm5<@C+70Y^VhxPhz)9-| z%F>0srAE`ZS#8NtZ5~<-EgCei2M)jFjV)8M*Nl=JgHHy)$u@K8)Yc}k9_hy&rN;!; zn2jZWkIU?rlX)=nW%=ylXl@z`AH%QY5 z%iEr^$a)Siro}N8?NyA1$Om+Z7~<>AIQDV>E^V%NIIf#ke~OMHx&!v|C?l?=J(}h^ zlhvV>Ks2I5g#d)E;W*8EQRzKt8~b%cjTeFr*jqK%@;p!#OrKBSp*L&8ik)Mjp%}T^ zhIiOTu#F{?R!Zmpw-*4IC@fOF6ebCmJ7+X3L=$SxYbvOpfu#v)M9N(vNHHp4sE|zs zzFm158uN%*t>V^mHQSlPaDI{%EZ8*yqi}qvk>ssi23<}sbL-~LwCShutbFmk*2W59 zo?wWEB#kHEdL^mgX**Dq?Mv7hu&+m|+i>&h?R#wRHf|x40h+g}Wn=@L?AK{6eCZ%dHzpqb#!TJj5A^9c>-jkaHChS~3(vW!Y6 zB#Uh44?2P&6K`x{SVy$_K#~^*WNlBFk`qB{x}*$fh_^Cq(Cj(?>#)orv2CEX_?6=L zHmFD;lRCLg)IuY*1jcPuj3+*lg^ZEQ$O%VXdLIGiob2;Keh<N_Um$jfby>!C! z`UB~x6Cnt|x#%(GFWuqr%+D}FLP!i(=~^IV?kZ_sw&Pmlka>9@tn!`)UHxG9iCE(_ z;dx&ZsN4QICtBF09D>U9+?X2z2n+QJ%rT|2sdGpE^A_b7&r2isV1R-QU$f)}d`!@n z^@xXtnw!7clEgbDMk|yKdBi7{!f`@!jR*q#;rsLxq#7xdcIL8jf-H#s*KZS9fHWNF z96-fwtD`pqx55;+Z6bvdJ@EL!(6(!mCc||LH>OnU80s>0J#yzY6HkkFAOJ<}6p~QSX+dV!&%4w1AS|I-Eo)tc|CzyEvFSUlgc)rm0bleRV>tg&1lPwlu#>~b3r z>k?GpxOyY+(MixZoeg=KmyDa;nOg?EkhC$q?f{;5ODQeXAAp`2P=6k41nRF>zW^LQ zpwKRK7)-8me?cDo=%&@_qdlYF7CAz)f$|;(`cz>cIYa&NBL|DBRh4w$lO=u(9yFwi zo_~!z-0atVhx&E#tQ3`}YPxvYKrBf{HWR>OTUj{#-<1oNLbV=+(?kU@$t)|rGydlY zQwaW!`aiINhY-54UZ#LIS{uu5JiI7C>bEH2P|RlrTP6e*oamo3`0Ao9_&IhGE#X|^ zM$tJZ=E}@>?gCI9CWDRlaYZSh(dQ@dZO#OJ$gH5{rtQOzxx?G=@`}q5FcR>S#i;CgWah*O3GErhXGXlS#MXEg; zEtABX#raQvf>Nb~a?1vKaj~mKRS$s9NM~RXsYGu^#jOVF({SLQ?<*5+nG+i-oE0&x8zNg22i%$@hMI3oj1x>Q&I|)b#*a47_j4);t8D}t0A0K0e!s?e2b-^Y z9Q%Q3$cOiz%ya#zSYm%Y27+(X{vKb(`bE(-Gf>;)gK6aKp(vh(aV3#Q!u?X{$ z`Fn7LCZnfJZs!oLurWte7F#=2s-6Kc;IM`KTjBOmzmdsi>$sYlpU&<=JL_g^@{O?_ z6SQG6k%&|F*MIT`#*2KWDAJpiE6+-iCG<%(k2na0ZsA?K-ege(p05jU?}Z~#=F;c& z4RnE2XMgKT#DDsY%1tMC9lWqNUPpRXwoM6%L18SIj#%NPrD}cHE-iWO(}ezXNIxBN zSJ;t5jM@?(QGedR+7+g8(Gk9#&m&R!#C?>0KP4pN$OYJ0asaINzw#V1BySG5h5vYe z0|uv6S`!HWmB^f$4Ok@R@kkZz$vzzcKa0k&K9roa12r7zncd|moni)eL`W8=A8wHPhx5Ad;6wSO zq;cpP$QN{O;LkjqPZ0}z$p>y1Y7M#MHT2J8JN^SHY@i659FHyJHKmQ@WUVyhQ-6k9suO8}B4Og62 zAe-f_FTB{(kvp1a;o7a98F{Wwus$5|PBlJentSEu$6d_xiQqA6+4BnggTRA7PqTBB z$!T4%V?^CGnqhZ;HAI~h8P}xAw>50Xrdy7;o0f^-5(MD$KbBsDLXQXl07Cw8&zmOu zGKSjFAqxH_Iewvg?SWE4E^Dvkc#hK(ygcGa#TH&KCL|iOL87zLEj)CBiC5}hMr_|U zn1E2W_HY^AV=c~JIgFKv)@Kw{RH+`GW{9A1mCJJV7nh3{n0yW?v6X!S#F9E<(!Un{x?7aUDm~;s+y>Ie~^6DhL@hmqNQz?T0Jh# z6%ie9_?&uwn}#e=aUSd;ic9J^$ta)Ag24xV7-~gEt00mRb$r%AA}F?RnJAO+((?EN z716V`!yA!G!#gPU;@X=ZH6G;0wq+rXu10bF@v#x{euw==DcX$rv?d4-CoVN-RAE2t zb&~MI1ouZ(##wH*&COzoz2-i;KN0T;eTJ*MckUbGX5g&#W})5KEZ!Gn3gTR z_?!3GcWB#5c%@USvr)ZJYK2LhHnQIIH-c@5y83$jX>o6EeRJ0idNuoSP^`jk^yC=^ zfEy6P-|%fSWJ$Ko76-gO@~$7DD$9rD)aR~d2R)#DqtY==ah{ED^0Nzq20@%BdyZ5( zSU>fbH`N+y+^*7!51f}5M5XYZL`NOWmfnlDXI*Dt-ngU5H^AFQ)?gZGiUtDm4y{oxOFLR zSxRv(t?t+&dYemtR2=@wG4PLw-jhtoP2QPMtfc;@L}Qi6O`gXZ;SS>-jr8@96i=wq zO(PaUXGFGZAYd_g&4`^gu1t^@XJai$fE5_6i@x-Su1HR$IJH7R)N#m}%K^JwcyIv- z(^d<+LASxVKUKQ)y`Ff4Th)`QI1~{%`&|s<@k&Jy<1KIpD)kWpo7elC91v`fW&eu* z*7ROvs!$Awd5+teDWJ;`&L%wz-SrK{!*Xb(}5dDtOd78tW$@$84uFDN z#7cq*qF-lZwsze0_CJ(+t{_LEo+?V3xtqs7&66;D?ag?Ah?2i>} zA17By-jR!Q*%?1?^yX7-i7*^g^^rXQTDW^=IrWQijxn-u%jyRU$q~kK4$8T_Q0q2~ z8ng~7B8^K!%9&#$Gb9&X5fT)F0Y9QC9K$TH2M%mUA(3|f_`WeUU`T?thw z!9(C7BvAe;*BDbplQjj)X$%zcEBIm4eRoQF*+@#@aCu(=TMJsYJOjZ74IIl+e9La4 zU(?l&4lf^dT%H+{D2%dE%Bi$rM#q&xw7p#XV_px4to{>>^yZkfp(pu6AX&DiR9mQP zY-_k&!)s(Is1s4?z|0Qy%kguS z{(a>XKK>eO{fj%>FlBurvJi)P8aBWNGf}Qf`^IotBR+oRzr-MfCS^ zm^K_FKP)ISp{L}29nC#^Y>+&X-~SGC z=hj>omd6K_p+tnL+&3RMA|nPiAH+FM z>STn4S6E+jLR0)c+4IEpLXP1 z_^rZ!wP!}6Oq_Dw&C&ozt3SJFR{~~P#w%M>W5g%`H%~Lep(A1<)dLZ@JQm(-j7=A$ z0s{n3)7i5ga(BV==bO!T6+PX4`+;dTiUihSOcEwi3ntFG#Gf>0AFkv2aABE$ukjRY ztLe4Jmo^#PQbFq|bk^i7VP0kZ`zn$~9t5j&TeF3vNtNDH3nE0r3SsNR3HwysrOBK- z)tR7X4G(Xxd+Df!HdF@3{Oz53oFNqqM*s^sm)<^8NzdVEmFMqX zfey77*GVqW2)43{G+w2mjT27~kpd7|j%AsK5rf?Rd2d{!A@T`^2PEKT8L`vmR?V*a zW?hBlQzjHZEI!$(j;^b~772RRjTV&D6a~Q|UElK1^uW(E#zuU?h?yFtCLIi|b(4=2 zHBEPgA<$P@0(hNr7kiUunmJ82BgNyAikN5t4 zUb5ib=>1>KG~H=AQJ<7X>VTfOlE+tT;cSW)YZT;x`&!n?;gmr^0OIYO{*}ScyG7oMKc;NN>s$eY4uCpo!oD#i0p3(PR9;>E_2fB@y6aI(0QTe z#;@HSQ2*KLvGmLmD}Pb|`RBfx2EVfGe*uB0NkElK?>Bq|CMR+$He5gLD?cfQk&Sc( zJr1@rrD}MG_4omPdL!PHqP_I9IVyH{Rc$(8?Hf8i-S7l?Yaq^qusKdcE7(aInuI5k;E4TX4pTW3O?Iyk(hF9zX_dC z9~XP676w|?UaNWYO@3`VJgRA|b96{lfse-EsRif_@**B;<7p)j9Y0}nW!(ZSw~YdW zZG=zf1#mV04vn6(et%TPQbaG8C0`nX{WA?b2YXQU5kbwN> zFWQn8roJ7eOKf3wzycn~I22Rum@)}`O8ZujNz?UWijxo{~VCrEs%-$qpTqn^ZTvNzLOXc%Nh+j*dTj82|;<*O+r&h&jyGEW6VC3?xztP0^Xc9IqK1Av*zY9KsGYR+h30R!8-n0P zV$IgO7M?Pl?iy^}+P(1J^NIK=>H_R+0h<*k-OF)g1`<5IScOzaVX%5*h{`_tAG5pX zrGn0=MHS>x zi`x~fAT^+r9IMaNlpcW*U7iK(4Mm*|pE0M3sJI6pvS+fFHPhn;ckh!y7{~mAFwSZ= zk%=Wu)g*>gbIB|PZmW;5Oxg67QKebSehHZaC5*}i;dR?ptT4`;>EJ(>yFA^c9ZjWX z(7wGtl!;WDv;icA1Ho{IX+k390*pJwn^6#;St*@b^mK(<|x` zfn9m#!mDn1;_m==iiVz=$S<^&uzc^JO=}3qtGfUKv48B3`)nT1KkFqH0i*=h15hY? zM+Gfpw`+C}n?GO8R9>)umqDzfQdF=y12^M?=8J?W7JyC}#LP$(q)YxAzcEAr7ua5+ zPm*@M48AsRR>#cDfhFGK_v6#Ym4{%mlqeC%;%$h~_Up}7h{1+YNqTTQ%5!fp=lcQ+CEBHAM+ z>O9HQ)f(#mtlPmvMtr#*-8LbHW-cj>uOY3pK&%-BVZyw7^mF7!*am4}qe_q$h!Nvt z>zg+GAZMD>6vkQ5AYSFj9m`icq+l$<%iNATe>-$=%GuBPNeJ%%%px+4M{Txrat@Vo zWAo4Is9!+^HDW6nOfTVb(!dOu{`Ki0&Lp`AV9|00Vj}jZWKQxWmgmIY?6b9>Cp_mF zmK`Q%5zTZ+4A4wN>3TsWu9%!AONxj|r>m5q8m8eul&B<2dQeWW(}4WkD_cMbuPh&e zt-F`PnJSxzHTXYs^#y#6S@%PVUkPcs@&hOGh56su;dbDggG6IDjdN~@$sY00Quj*- zuw3UiD-K>&#!$b8fm0l7bw>%M|JpzB{~2+W4s+p443pHy1`MDZ!`6pvXt zj#M#AMd;F4t+iCf&In4nEX=6?{}<)hucZc?`1rm60}502DLR^}LqAF9&}UneVwucC!12+N zxrtP3l09-;juglO@U)<=*vGiU){g+H?V*6lC?b;uF8PSl>H{S92o`o-A=YRWH#z$5 zg1DMNcGp%+U!W?hmxk!9`GWQz7b!QSH-t~4W#`NiVNHI~Xx9@ZvjAjk6-ClY657&r zf%<=o3uj=T&8I*;FzyaJ+;Q`5$CH;C>8p|$4;9;F@t^B$6WCt{U?slm0y;}MrTJjl z3T^Hm$UaB(B}4!o-FVhSkY?+~0-ax5FBd4#QAA=rMxkqPh0-N|+22Xmo$EoccsxMr z0_0EyIXo|0M^SFphH)1dA@?RG@gn%SKlP?RHd@Uh= zUt+<&0}f+hG$RuHTV3TnbQ!{8^4k@l8c#w*749`m&dj-OvFJx&YrP8h%DUW9%qd-F z-kGy6d-Eg`kT`F$KCK7ADnH16rFrP6A2NBhtP8?DKFEAo+9pQ-gUq?}45lqUCb@wx zGB&Tpe@t1{Ur#zzF$?2sMS0}1-a^fodwiS^Q-4C^TuUL%nOisnZ|HE+5+TxTtqe^3 z`Fr&wk1+Gu8wBdzeA~|y=Ox4Hx)~P-GLt!ONRNHbm|iGgk%bSPVuGcqPCn&MV~}+; zOzhZFoS3^!LR6G{jVA3S;rW!30v#CDx|5Uuz*aPmFKBml z5Q|i_ZbUGITRxp>)Kg?}V{=OG-nrsDB#8Ws_s9j!WFm3*29HdB%JfeYO*DHWo+EJ2 zTsA5>W&5!)P7^N}bMP7uE;ZHi`b?-`&Y=#;;s5jgta~vhUlK7TaMxux65L%y?@|Ho z^^v-z{ZF3hzc1BGot_1b-ld`yZqT4QO34SD(D^`$?l$Lkf392 zb9g(ISZB6M4q_}(K)J#??nlEA&w2luMyPWS)#n#L50hbFVn2~U+4@nD1W@ru0YA`p z6tB&nGEw^P_T7x%x0BE9haK z+mLMKBus+3+%-o$&Oq0sJ3;^BU<1&XxUmpaEKcyrMds8faqGiLg1CBX*Y7c3 zdobEwYKHT765BIWa4Pq-5}%Z54W2|ITO7?VYTW9ZlTg7pJRucA;k!C!k%q>H&?rE3 zne{=7-%AEyg75-y<8td4g^rs0TIOi1ES6p|4JP~XUuYM=$l$a-6<`z*Vo(x?JPVN} zBa}B%Gr|n`f?8uK69Ox3oEIPb$32S%6RS}-l5$2$isTnY>;aCV zd+T3hCZPhmm2l6q86>4^(vJrU znzZe1okw+$8s&I4ztmbB~^86s-DH-m`4SiYfq+?b2T zXBo*LJ>Nnx^BE3!Ka;OlKBQ7it5!!h7C`UZfkbIv^SnXuqWg z=Yq}1D*v7Q#oztSOMJ?vTRt9<`ExWk^CxV+lVPiUjsb;s+@&JEz1-<79P&sibjuco zc*t+5J>|=jf%@+X2BiI~dtnQvWE@|pePjp$NfRf7JnL<}^VkR;{~BNZXx zXlgxRwgXlLSWT(`xw^V78VwQFxp-Iem4^Qh+rr#?y_lbtmz8#+_;S>A8vAo$$M*tX z8J^?Quh(p9xKtWV&K;;e4ax?spugzPg8colVa!oS=II(z^>8*eNW4T~2sFeVWwXn> zfjdoNZ7HbB|9<1NI<+?P3}XUGwb$(mQzi{sg$h-VR!$j~Xg%`B3r)%OsO!R1{!pH|%gXmvSqx4*eh__4W#iKunzrXTCGh8;t ziny?69t1y?KW)W>k3T<6L$#f;0jhlnb-V5kOPkZQ$6USSzczz6s7>U8gAaceI~_Q> zN`dEFcB)LehclJP3ZX_?G(QY#YjrfIlM&zt{!JTZTnyuSd8<9Wy$zSY;b_Oo9E$MC z1D@9PqAwrP8-l^LW{I6Y;g=}ylfMs$_%0`V$wM z94-T6oi^d{@4?Y`rS$h6=#^MqWoNIqWKHIeIpx}AREm8Sp z!-Fd?mk$;vMl*0PGo!~uO3sF)2Mc`QzMUV|mBVySErDdbUd?qKuV$+`$yd%#;#I4=T06sLK1UuJqRq%1F?zX>dy56^LOJ2Zv z0tcv2TFc~7s$&W^F+W=0R2-8kqI5bl^1LVM$5=OTSA`Umb2C#Pk&$(# zVQb)+_mzs=WcXn^uW;VZGlf4VBvK7!uEn%h@~0po1x>kGrL&;LqZ;hK1?{u}P~q!* z++LJ^LBZ}9R;#?L5~U;h&^-JIi3l^TzZiMP)EJnsh_36lUxqpep?)B@UHBA(g zjq^+c5Ki6-gX11SlTKVSH7Az&`*C6QhunbWjV(Tgwky%lcz0m2c<<&a&OU3sv0$wdT~q$wiiE+c}~pIHTn^N}k&tm)EB2WoQie_qAFTeR!pQ;-@S~P8XB&3MFaOB$=61&}B z<}Mol$WY`%KdXBzrVhjtwph1W8>-KXtd~Yt0_&+)Y5W$E3%I55(y#(zO`7Kk`hq<*~WS840H!s3Fp zPNnd#dDRdl3L1WxPMB>ZHQDs^aH$Yq-&U?&8)N*ZM88*#?SOhe0v7S5;R#P! z3pRj&izLz|KqkIWhDp-Ux%KA;5Raxdvsf4F|7yXBj+`zW+FruM;v*iLE%Wxnt=a2c zyhEt39;4A+aB!0Y{9bt_rf->niWS2M8iv zzmrWkc!p(GY#9I%X{dxWEu@e-UOvEs>h6!3Y*A1%IW9@x=me589m2@%ypkNjmTh{B z>~#*cE{oP4nm95y|H~>a-k-4jR7g;3Zd;sK={xay#juzxF2rOU6};NqRVh=p_Qb%bbZ{tR|$ZT`%~8a8ZM!AU#gS=Cu5r{MC&>`T4jdYhKyc@lv!^n z^PDK0eEJvI+37vyT7t`{`YN4H z84bJu1rimj0Zjx#$TV>gtAttc25Hf~)%@Y(WqBQL!r*$BAa}52za)G3sYg8}4J_;zDC= zvM^+dfMI9U2PRzj7W{*kCm#q1)_-OU8YdG}La~(S4>`#`O6tAxi?a>J8Nf+8qSk7t z`v2>3N3%N>Qk6MsqI>`gOJkp2{#hHx$M8uO)o_1p76UAbckl<@PO?G02+@|@TB8Pt z2?~v(1c%-QJzYd(YRzGDacUJWBTSW!c~c0F=_Yx^rA51vmKKzAFykF@Vay^Bwe|7F zJg+uK9*CGe)&BA%=}<7SAWnuMxI_`I1rh+r7J@dcvOC}72m7)Z^%N0cAiJPsnn{}h zL!?jkOo-s=RfrbA{Um|0z{3)c%z5W)W56nZv_Y;tqr}I$w9~yF;W;!@1U;#HZ&f>C zquObV$jYu|D&us-j%1DGA2wi$*KilgywY+nPoLx)fChZR$}ebdAZVNH2Tl|1N;Y6S zV77GuYgy94x41`C9%f?3u{YeDOMi+w-=aH=lb{A9&K zKL{-Ot!J%c(J2z6RQX9?Fsa~rVh*Nj33bsYkBX^K70zReKX`DYfhAe+DM5_bR|};0 z%vL6UuOCj$-Rwh zhf(shf3TZSD-&Rv?c>D60~GhN%J+CuQkF#ux!QNb!nyMixj!F{P(9w81MK+*Ge^f2 zom>+euT?@?w_of-HnEhe*-OfTZ7?s5V*b8+9AL8jtZRXTM|i}yw9(zFLHIMn z5-MCkkLI zs#ST(=l-#OT9fdHzmKxtQ1qb&QIYtHO*mv7xZ=v4C5#B@e{_f2fg!tFXLyxc8t+V? z*BiIiUg+*`)x#++7Wbe4+Fid$X7rSKX48N+qxwaLvdVPoiYVP}iI zm~D*3k||VjEiO}3!kaZ-iDG6C(WPd6nL(~4!Rdg8q!&(UDGO3fqK_oO74&KTC?yu_<&-$h3Dy-=I_ zi&DH+mzUwLuP%;)fx%4`7u0(rW-TvWL(hHJb z5aD2-+sJgZv%m-|M62Kd_cy?D(>njnrEz60c;C0rw!h9qk~54~&=XyNV2f;L2vdeR zL=#(N%zZ>P>Bt>JE!mJkoQ@@l( zM9b)f{iCmX&>4r>nOHSx=l1>bh|9)c?*~|de)u>+Fqn#o12cpoqZJ@hKTHItKS`Zi zJ=^RruTTT5a>&}+|rJ0~fA#9_vra?m~nlb`?p|NBd`qxkaR z#hjpVHN+|qgZa>=T1kh)K2~2-!IU>QP(-a?en=nt!WI@h z3Gl`)vucc;6SX+@D(QR`q36>K24(o*v(4I#ITe|!tfP=8->rx^lG!UEa3(vtM?od! zP_B>X3g_PySnl$AQD+k}N7f7AeAy_0|3H;xZHeW%O0e-MhexzhY*)CbxO(@c%L@h< zcni( zeBQKClNyvijuu^&S9@WC^|h?8cxF{bnWp6P{H_2iK-9kmkxh_YS%mt?S$SA)X>u2r zP1=qB$9{Y5fLv09O^tr%%5&n~aA{1-7ZCrS1?}^}Lv()XnkKD=unSfRf|7~{|J9ME z54uB+?Yc;064Hre<~Gx5G@BQG5113}=BX>@~ciSK=-D197$+q4H9Dc2cC61%D$ z(~xf#4l=LM2s8@_8%+X(YA-yBsc4es+hQh4SDW~+?sCz;aaNRUqk@`fI=&FnN+Fm5 zPjIy*Z97RM+eFk*hHeMz$=NOwTA?z${=LwTKWVVSi9W~MTc4R7`oKJ3h4Owm^YyMF z+>nI^7p|nF|D5{V(6>f0FPx&TW%i-WpQ&s@X%p_Za;+YPEX&2e>}EltC3I*B{m(m7 zkEJeQKgF5ZPC&3GH^tTWZb3oGn2`bdXKie0*w5B$($9>8i9jn?BHKH%&p+$oI)1&Q zD65loM!Dli5A0>w@~9Wr7@5+da;;Q`NAQYKCH}2LMf*g`I6*(L7_aEk&(fKg<=stO z2nphNgb)0``w_fmMa>dFzx3I@11~2tMr3Q~YP&Z zPpy~;uNDEUdyJ%1oeTfN5z+*VuYMva?MA=_&e-i^*t%g$I3z)Qh~r6Mn&IM|YhjjU znl2jXhd(s`fA$R}=O059fYb3b4}hW#e@EUw0m-4~)Fc4Ln*u8H2^+Yo>d|&!lDlv0 zW`yH9vQqUJB`(AtenD}D)BpgVzreo^=Iw?% z*%FI_nsEZB80mAIu7AdMxAmG6r)8_Iln;jag&4oa^$Kz0l8Fi;+SGb;Ib~k*zyqO& zm}q`PC5M7@uBr+!kaDmDyj>h6kp2xx9Fb$EH`(}KV6BO|T`ucbIf#HAZS)%ZKM3XO zDBV0rYb}9+R@;PWY#6@HAIu~YKG;%FR=F3n3bnY#i4<{|JD$5#8!72WOK`QtJCE{% zWA8ScX$}P0Vug<6B^H}Fc!dZ|$u}6f!me;Z6cNrNh$$#lw*fdHvd`_h<#qlo3!+W- z++-AQ0qH{r`_^CUrgNFD&J39`Wbs`=7Ja^+Uhy8MfDKY^r7lR1kS!m|?na0zWv|PC zq#p2?YMVr|23&LAAUL{Sr~Luu2mk;B0C*srHvSy!$y_Kb6E1ag+;<7QQ%Y43lsU$@ zgVo1~sx<9a50|#5pkv-bHXY{PudPF;by+(Z;IVLuXBABsFH7Q3&sFm6u;zj%Ke`H_ zPx{m7fK=)6VoQd}@;O_ot_ftuvK_HwBB!K>=lM)TCWBefTM67!bef(V)~PY9pev{H zby%$G)t1htMQt~OS?4bQzg(9yt_Se>22BmGQYp{1gxr8!$5PVlWCFuYGvL3xz<9Gs&6t zoAPmx(;YH?E#UZ(9Wi;<8mhf&FD5y>?)bFo4QOPb$0rScKP zR1>aaGU&X}E%}*U;cQY)jKL`RRp882UNk}+6&->p=l)QbBF{Di^JkGV>`3>N3betF z!IW}AGB2G|oA3?`ai@;S-&m}X@i)23Wu_M-0ZRuTX$9eX{^{L$ZKb=A+}H1%S#^)_ z5E>v{yn!(?&T)lA&&C&ifRm>PJ4)41jzjF}<1(EL=ES3yfg{yPs=p+ECLIocPsb>V z$-QYT;0sDy2|zl=&d#Tnr}5~`px?mhM5+b^?S5>%$ADEbQ=1qkA^5($ys|zv8r*I7i7~{o_fIawibnKm)Z>2a4NKT(_I@*XrUaTFMuHa+RT$}_WZ#D`+Jp7t)nq%k~MZlS0oBMFehMT`JJW@@$gJ$It+gD zsUcqye^77;E$v1A>Bi!ognqgY~|0JN!%Lf7nRJ! z(%~o)IrMm7%##jrWI;FSB!vN4qpW_#tsG!Zc-iROlp2^cYpGCFa`X!)wq_#QWiH@2 zk_wzUm7ik;sG})c;qTWDuZXsA zIl{}a((mp%^~G7r2$-nEvm?r`WaA=@I~BsF`7*9xl~0jWAiPQSwp zHGXabLEoAS`2#Hh4&x7D-RRnVjA+n+Wk6+Fesa?9S^hL@*tIMdf9>p^wHYvPWW%u- zm0VXV#v|7Vw4gICv*td|WPvY;e^L#rJ87I@Gk}76>iQ93=B+u>*uv zh=fW)5x3?NY+|Nan0UQ!;NqZb-~*N4VE{<<>d>BvL0b*A%Q0b=r>$mD@C!VTInUa!LWe6A0p|6k z?O{#PkM@e8hmp6n)Ty6gHOm6850H^ZmL020)JYjaktT0k=}|kAB_)GmpkvZYc*6w83pwVx3#$l4CVc zGawFF1Y@g6)*Y%lIaS-WxzioO22U47WZrFs-^$;y_1NN2WXm7Y3LLyhoXvOtrw9M@0Qbk5}K1c zVnqvp3I_<0W|=oogtWkPp`+nlzoBYDu;I2J6l(ePQKW5{PceidUMFi)2{zve}Ucid*WbtZgttAQjt96ixJ5-JXZlxwWpj<{fLpk(Gt#PIAxAzQ>en_Jq&bsQ z^8syH@#v|E?}SXRd!Bm!abT3}T)Rv&rAbI*sqJ@vMcIx#%Su(!8b8eD8MiP{LtVu5 z*a*FcqWW!B@S{_4w#?@{t2)5VQ9!(m&j36MsmVKc?IAqaPEf<9kWBFz{;H7#zwTmg0k)KxCq7=OT$E+ zxxD)=rH69=rxEJ4KIG@8H5|uCpU&ZOv!NhGowr66O5jX;#6#Wmx9VKpwu|@D!qPk4 z;qS#aH;xK*q>oteGfFR6yxs^KZ*2fZRV>e_Yyk3z$B*2U_F7dq^4%AWIB^wF4fp_SK^nZ)85W6`^N zcXTdW%juV;!PE})d|?fA_WC4qK+cEvpVR)8MoC+!dUJF!H)a|98HBYzQ*44|l|AW<{zcUyxEj7sPfj{~ybUQD57v`f3`|Ff z{CrddI&yjkq4Bwb9t;Yk?^K?okj>yujh7}Mh95F1ub+|@E4lAgF~oVnfSD@ja>oxxM! z{h2t1QzIl0PdNp)wGo_}ai=4ncYp+4NB&c4{l?X9&p>nZJ@4LWd=oQ|pEq}s#SKy; zJ$YDvA`OyJZ!U}b@Hl_pZ6wCylyyVG1=}cc#)cRt80%RClgJY;ylOPjdj|G|J+Prt zh0;3Fb>wg5y-`E8Iq_ln$gI8m7j3VdBQjWEeJp>5pzO3)I`O6x-20y7W>@YS!n?DX z=KM)O*Ih^h+YP!6;_3L=+RXL_@ev7jht(0;VlkrnmsN$C)>4^%*CTQ@jG*!cKjEkN zj%zP>O9{?i>Zs_Z1g8KDqXC}aWwJurCoVLKbFZ@718Z4<;cK8^c44)JlJ8-skycbi0s!zd zurG>&B7355W{P&1e07o)2~CADbM?EN#{lG@Ag>aa*rnuKbla+EBWQ&AK!!CWr{>aw zwBz0nT8MGH(zeVYa~X)>4BG8x^@|<;)Y3?WUTZoam zSeI^hh3b%o%%&YWLk{-x_J#+BT>{zRaWc}ISMI-|BdU1)UukE9RS>Yu#{<=osH?}1 z_XrS13O}U`{=-D|`R>Xr-_NjTTqZ0Db!%2M7@rU7|G2m)*sG2d(>%R5V&pU{vq(P zE51*9P2e%B5Gv0pA~a5D>WHqF0x~Q{_dy@1+hZ`F$VRz(UbLWX!^?+bD*-0D-=iU8 zM|w_bEVNbQzgA9aTt3v;e-+(r1CC=wSG})+A!*khi~68d zRTWc){lnR6d<54FjhfngpG!6Y!eOP77KaGQe$Xlwg>+w2$eX z=~!o8OX2ID4!LqdACaIB=(;b&ZXt2&cuxghn=J(CM@@b+s$(o8AvIOZiSpSBc&?KA zp4H0^5lrvXDu>clGrQ*qesny?e+J)g2Q~p}T>tngB40jxVXL@psiw=vp}s&dNWT8G4O) zy~uwJ`_?wz6BGG8D%a*_7Lk;;TtqcaQ2RfyV9?aucSNXuZ4Pyhi4#(|WqidccLTM} z>gum$ugF-GtFJ4L$*fnj9nU-6RfNljSM#5K&|`#Z(id zLDsVlJ(?`p^y9?R%`Vl|p&+2=77LFgQ=2`fOmE`wEv1^ELfm~W&cWk_ z^QD_?2cRI*z6PScxQqy8UUVBZel1W5!l@%`nunf{+w6UWXkj2F)bYKVT2wjn5_eBi zB9_jRp|FXP`Cb>#F4H7nSzZvMk_VZ}|Gzb;6oKONd%J}=jx|mxF&pPJ9Ojj}aY&-w za4U`LVUu4p30F1Hoqw`cv0XN&{xF|}>D?35A)p=HzVci0%lb07&O^7x5&tC?mQ=-) zK%2|qhx!0YU~niI^7D9xE)>R^xOSVnd3S>#Er5pnU(x0W*7uj%TV*}!#Aby5-%GJy z9V58?K~5q#+EEr>!riz_s6&Cz`m&D+21{euiy}Bq-Lozi_P6#r|5ev%F1H5JR0u<5 zM5VM!(*~jX3)&%9Vs3DT6QjZ77_Oz*FrjpJ01hZA*2Th#D9~d7Ogfe%gM^PKw9$Yh zu(+K&=t6!Siz?8a|D`G)@Afc~flnR0sy;CH4npj?Qlg9?nQCV5Ke{;Ios)%^ZMm7D z%#WHh;p+9rMCS$!x6wuePk>^oc_74m#fl_G-X2ne_p|a(*AZ-uAnmm(T5DlRSb4Vk zv#YR{F8-OSXbQMFf1%bdhgiuZ1AFHfm3RYTjYivWDjWx)v`0&J7+E#6zf~-_YZ&Ku zzk|8ja^pM4!A1b4>zolu;_)3Z^_dUcsY!pKb+IUmJ|(BUh)R% zH$%Cr4YYAjvEKs67*L!m4JT@#2y)0TYD9)_Zu|X1sCaXxCn*)<;20{^6}-{w^dL3g zY_#<}^T>{}{r5CwP+W^v@C6SQO}z15H)svdKO+_f1ibAYl9do(CmTch7GUrfhL(Jj zWL-0nRIYUwC;8UqpIYayO=zH;AWm4Xg40tjL0h^KmS#Cv;hc#E1L+}dld%% zUBFk_JtSy%zjun)Er5Vh4Ws2yN$-T*OY!xxv1r zC$OO?$>%Lzci34Q6Aa1{jK$*b7Q247*{4uqoZQ&YQ1KDJh{N#n$we+jmH*=$yH4G_ ztP-V~BlY{8d@-GJALHSXR;rkwd#us&rFX*&UCtvY~ zLlCzbe6AG`n0XcC_fpngM6bLim{FM)M0*Q7HKiy+zJ()4eqN^>)ha}MUn4OVuXk5$ z$FOz{`)mw>vILAUqHI_gK#oEgrWybxw2-(g+eUui5-zx+U0M`Vy3CzJ9$$t?)EMEjTbY>tw`+3 z9?;M5CiJ4QcmCV@TrNJhv#)*?-W9wZz##PfA# zZowdKP{=`}J^%f0M#yy8zBiz*mQOju6OeQd25UFmi7@rNAfM#E<}p>R(l5*HKn$Cs1Yxo%f!?msJ@##SHZrHV zTL_cD=Kk@SDor3?A`<{8@Gt9Al8<59(@tIi+o>AWV4P6-wK;(TRtuKgK{hj$$vN*&a$djKCMP()Eu&_0+S0{_ z$kE(={0eBEy^FFroA;9&oASWnEbd)d3g~YmqiV7<=mO_9?KI)* zm4SC6`Kalsf^rZp&E)nJ-M7040`bM?3=s}J-EjJz)lYHJud_L4(uQA6khi1Hw>ukJ zhBf8CGEw}|-XeFf?PsGRzoIhpZd^lDavb>_FHvJ7jSr2!aKY2}%-xq@l@yLa%NM(| z?`Z9mg#*_<6!Lfb=Ld+PPMcDoTKF>#gW>`Qo#&_v?%fwsk&A}4Nihf6JVCfae0FQ; zx=4pjW&&mY4dpF7p@&Nyiqr8%H-+{#v$TlMvu!Tp(2JA@SVZEI=+b&8S9r@>3+14J zzN9N)dJ(Moye`6JnE_4emK@U%jl!jP+VPLIEFNq!p!*RVHSyR(WAfHdYd zWb4VhyObW)Iv<9tHiOaLJS?4C4(Olc<%t+GL&l=yp`|v$A7~valAn`QD6aMwc}cKyMrKO>sPpxhSnM{BOpSYl^N{ zTpZzJY{MJc7?rIJ*I?qTnp2N=)=`#w3Xb+P zGhnQ~5TVm%qD9E!Z^TQOdTm(iggL#>Ac|Kvda`I*_o0obIBBjzm#v9S*qD1v5%}$A zA}&5Jq<-!W%hA8`*@ds|w$|iLD==Y}V6PsSM;^R5fZqj~a>fBVhuWN07iOVnYi;xI zD9lUzmq>~ zLgFfEC83}rbxwG8MJruPfFrWR4l>`&;fco9?974XZ=W@0nD0Hn=V_zu8y&0*0nP-g`KQV{q zOk>xn*e^%9bLil}k?tegHao4`a*_JtvMd>7Shgr6(PUCU01_+1qZBE^yPX<_Mm#%A z40vVu5sX2&Nv3Ip{w@TGiCdXn!45Im-k*Kh7NbYv9g;IDaXf7M`J1H`3DPBb#>WU(0<|lcBT$HZaATwp6gyr+)pT6anUY%I;P~L@(FHu5SyJ? zGD*e!u8+!2kLF3+{&te7Fr3^zi!ndp)qRcX?UU0;=n6OOQjGc>F}7r?8fr9_u^Dys zVi9LXDXj+x)Ju?__Q~#L%g*0@?tG7kR8B4V$WlyWx9Hi&mh)3kjF!*Rr+yGp8ra40Qiq*QN9|2Psa57Pe;- zH14Wd;$0wOYJZsq{7PF+qWFO?7A#UP9KM=nE}CC+Pnw5tw%)YG*^|&j^JyD33fZKA zN;*LYXFs_W_KKzAqW_5!_JfRFpz5kUVbItcrJ+T`FDn+qI0Ma#JJj-%M^Z;li69^z z*yx`GsdYZA7rjpr-}kh$ygE~q)ug$Eex+9t7p`Wq5#$F7KBiK-Zc3O<8s6c};yD!1 z)o7QjDQxb#8CnV;_ee}uo6S+`B!e$_Sr9|WxH%4Ppw`Vtbx+S(Ihye z^e6DVHE*mpyi5-EY}uapFOK2!w)RNIkv*1Wco5qd_ZC^t$2L5JTe0YPlld|A$5#ZR z+MvI2C}KsY=TzUm%s9!oPYm)h6vOCRjf{GM(~!%S9q^II5FxnroURTuiORuPTCEiL z4+mNZU^kho^%K#Ug}QXQZ{t?XHrs1se?fFdOQF@T1GXvazmjJ06teqNGP$jLnAac) zcmquv_uy!+ql(n~Bq+oW8h3;pZm9lUu>lPToTUAyS7ONuz7L1q8# zzejS+AMzrsjitoE^=j&$?B`HFQEB9N-CEFZtd)kJ*?ekjDH!g%y724x)O5@W9cpgZ zcAM(Nyz-LmYI%z`SAvd){v+pgJOfoQi87gGe0EiH)@*WH5G9y9OLtDLda%GA4PFqs zEJD?XDfl&;&(l&LZv(dZ-1^Wb$G&!&aGsGg7KXB=FFHkVr|PI`$C+f^9zv3IoUejY zQU4>FR8%pnkG=5q7t+Ui_dTwmv}D}DZ}}x^gV@?YfkmSUP`MSgWI5Sh`=T3;Ql`0uN z5}MD)VzszXj36evOFQ$*HkD>3#noC!CHR=OEO6I+ibdhK^)XUy69Hf`}hehND0l zkz?yGn(Olf*jV}X>mAa-%v05Xk=+nv&rYX8DP-^A*DO|n#~m0mWja?|Rd)q+YhfIC zJQo++k6)RtSQ`V8HHs&FD%Oz>5y)cW;wX5xuF=Fh{KXdKd1NiyuFluEBiy6>Qzv(z zx;wSoOXsG~L@$dtcaeY>3!H+P6qnAmR}@bg1+XxocMC?YC}g&UVZ^u7rjccc%R8r^q%jjwgu4J4m79cRZ&P2ZS;Med{xLKIDD9V|$CcxX zbLvUs@b2sIANFEA>GkLMYX>i}a$9HAuTN1$d`oK{Dcj<6JGWypR`y`yomMxm`1X8; z$D^3Fn{eFsB(Riu1E@_F5Re3&@2O&E;4w1rM{mIat{uSX;!bPcmYC$p`*=ukZ~k!) zLV4xH&Y74$Ep+QZSA8x~~)`^_v~k?6yr9#TbkH|voQ?j4&MYHFHkfI(8a+rksm0GhM0=vl2-RIVsOVt*5Z&yP zAjFYP3g(aL_pqF>SMNh>L*vILBjm$r5dhJ)jU6fqDI*9&o@e?Z5Ahu=k6nbJh?Vk5 z_1xV<@1?JtJm(Tn!h;ZNG~q_sI_f&vF3}LKKH$^P?%BfldB%D3>HJTt1<_Sh0D(a* z`(Q%^1iFzrn-u!qv!YesF~ z=V9 z6$nfSe+0^MuY|Z&y_VBLF$%};RYBhU8~=|c3%cCDyCV5oF8EZEgcSR9)he(Ne>(Sl z4cSIFlIQdzOrA(2%xa(Zu_MdsD<#YciJtfX5hgo^pQONNF7PkCn0e{1wjHA4m%5VQ zcVBt)31)<}W)ZY(X$w6yHl%^z?fkSRXyaNR7%VrkQ{ANh*dKq zLFz>fvKVd%h)uXcmrFh-*@fgtJoklIJUc$&e3gsvv~0&iX}{V7jqs4MTh&nBhsqI) z-qwxTgq?g%sNL5t87xF8MB{Dr`~Za|`&YOWI!0{y@t^o-q!Lz!L}7;c-{)y>Q<0xQ z;A&@IzDx3T{{zt-QM>1P_27;f7VQW-SK+syGDiW$nV~HAgMl;x25IrBT0^ zvY=--$hnFK@K5xmeeE|I51wiEA(XXXjc`V+W1xjEk@s;W>=wm%VVR9EgqFO&D8r3c zG_=^|SG>V6Oa&;ZidKP40k7D0UGv~i^2IIPBPrBNHbe+;njAw_1z6MzEOX+4+)xmu z#j+^Jp!5?us^xFD*I~wKFcXM8B!nq?#Q82ygGd3?&KfT7^foW8{DYxRjIrlZ^z|e9 z+a}qFhgN*%4j$*O)oKr6^&3nEYo$o2us$bm44oRITUKI6D^GrXDeKZeak&2QNK48PKB zb6MFl3$xkpqot#(4lOJSXEcUDCx{QQ=M4~$4S=$_-2yqaVq}37ATCWg^%K3yOU~Ad zw2c%AGx|lMh#H^>a6e&i|B$VL9-22h)%Y!WYIWDavFlYP6Xsm--y?kB%gCqW$f4d; zJ?js(pe>Hx@WYbI_J*0rr&v{FxtozEkXbqhFz8JCn-R{Q8Av!3U6Q!Db&&+@2fog` zGIHX4Q`0Xkz%_YPqF~WU@WVgMAPhG&^C-_XbqLh|(^a{eyg9=G~M9`$1QiyD9 z10CKrk%!7U35Xra=6<)6yJ(X(hU_rbL9j0oxr?#RRCA4R(FIZDfkJP_d$$Gt;&X$d z*|E#CsQ-I6sT`qGP3yfxopNtRX#t+rLUJ)MqT~({ho=7BEp3o_nfQAsmz_Jg%neiu z6gTi8NLlb-)EXixs|CRk!j>Yb*9S_r3nwkjWRDRL4r#ZfJACBZ1MYOgV@kDVC99gM z@F6*9_>VeaZ%CWr>$23)?*|S+wp0N#OI(j!giB@v(3Vwx?(ix|z(o2aSEIc(2>&xT zLsHO}%ZI+^kybQgTXgS`GE_i@hIGiLt)-|_8w*^&b-E1W7p_L)xkFf8S$H+JXep5! zNeez?b3(mmAfc}*NxEGsfLb$Q9x^l=c__8W6S8}2z%cFXgF7lIz4r04LVnE9luo^( z#$=f})6SSLtYid`HvE8!vtO$&#n`=Y+@;L-fGQdQ>OMzb6n;*QCR=Ap<`)XQNAC-I z7xpijWc=3$G~HjKzoW!yW42H(W2HnaY1a^7sdS>qw=H1P{%$T=gIC2-K4^qC$e?%V z9>TW_ziN1cN_s9CDEAiqUdEw#tkQP>#zm>`gH!Mw2D#qkxmK8QJ<=EMltlZTFaIcb zH#XnTx)N1&8P|Mjj$0D`7N!yZ{&|f6I-&m!hxq3r8|*F;#x1^UjpfOHt@r?jmuuQ` zGU=#jAx=uy6|o(^zAYsZ{CoP4E*AFn*5ntbu&f`KIODo?wM%?9O!1&1=`QELO<<=# zjmbk{B+1KE2GIMkwo{md>brQp_W_NQ9?Ko;BH-?GXUsoKQ5v{E-l?WO4*JUB`31~X zUGEtqBvl;O4(m*v83YoDCyV1kqd*&g{p*FDU|9eYG^k5(;I*mtp_L#}?zS{K-6vky z%*9Q4k{j0hpi_d_j0kDe*$pU+H3bCq%dHna9|YP0;;d-uvF`JaBa|%C1sv)B|H^xw zfu5P~&E$X&r2A)Nrx@-PyF0lAXUt4;edmRqiTm?{dW<<0lEYwjqX@`p@RkQlYs%vd zKDF_6D#>dsxMuiHzUR;mr%ZthNasZo4s-(Po(%LV-NU|YvDclu;9gLCOqqT{^N&LN z?(Z}QG7&Y5h@P;I!MWh$z;N)))Tt!eANp1kiVW`kX+P^-U|eiXCVhM~Us%Coxc8OT zz>u(e){`n;ZjEX}@tmrcXvlH8rjXg6Lr=+S^5+dgf zSRDT!VhQ1U;2A7^6gfkGHzG>e;hR?FE=K4Dl~^qB%bCZdo9Ft~%^(ZG10h^)fmUJ{ zu2mlZ6o2Yiu})38jwGShEf;Ef1D+m=%hL!C4WVhG_^*A6B-@4g%H;^I8FWaXo?>!v`=TN%uW zI2*PA>xz0Vm5@=E&MRH!?G-2YC9Ky=q+Fu5YXO4C*C}KilI&N0`?|4H@gP3XFYFqI z0yu`m*mzsSU#4j1y8Wc^Uivk5C1lz3Bsw4kHB|;`biC-TgEUP8dmq+^Y#72vw)ZCX z`759+wC2fYv-Dr=@aMuTW@P@8A$#{vjsWz!Ab*Cqs5?pe-`goWFSX$m?&fdHGY0`| zuhiH!Xb*eo7V)2~aAhsL{~&+pL-e)mVA*(%f(oQy0MkVWs*Z9>8{^id1<-Hp5>q)v zyrHu1*dzrxmP@4>G9M{gmYCFXRRuzi|IaQ{4mPL{LXVMEZ2 z*Bb^uCU*J@ONjT_>CcG8iVVU=6`*n6dG1<%vBP3cwLHq^6Ln;)zZbsVuDU}s({+hH zN^PU8S0~MxMFgFc@`LC@H>9`KzJA_(JNn8D#5T%Jw29xgRq|q+RQj94o38R+4SW~& zKA@#?`am&}$F-(}96;WxF%4jrT+93QRyUp%GmNrMB?+W*l$<+V23REMmj|g5GPbg- z0waE#fW7f)Ok?ScnoikX>|aRxKKQ7{TVFKy4}j>rW(WUNXz{WzV-JTVTP=p2zs(-9 zUOIk#nSGp-aihT7tyEcIDDohH3x@RV-LtYX zM*_a=n!Lx2(SP%RlWYPRO@f$N7>z5;W&rg8Vt5N3?M2bx&Gp$&V(*S5b^3crUP*Ej z4z6(MttM2xQ1tZCTCIl&G{9bxE&w5+KGKnbx9S&p%&6s3H(L!FwVped%@@mt*nbXZ zdA^7iWnC1wOxfc&g(cX$#wO&n!+Qo zUKukFmr@M=MFTIBkkj~#o>F^1$O6_g+1#NwF zF^=PJ?IBcFk&!rpAUK1C&k1q|he!fjI>cEwJN^Tat-W7IiBEqvh*NLNTNXNb(;|F^ z+lMky*R_Xe0=725#&!J`e@ZbB(?@B{X~&mT(}X+lUs(?(InZjXWQK zr1eVdzMKVbHyUp1en^xYRa8p>`mIyAp{s?|ERD{F;SBO3DLKLjkL&WT$`BN?=tvk^ zn(dSO3AK;HFP16nB9L~z$ozh@Gk`J*4@P8GhW;u|tx8oX(HP~Y%p=}`2q+VqDtA;K zW@kgHC>JdS_nYy;Nb(BkhUAs~kxtUh_l%c=aD3W6SB;W?E85a8{dkSPzBt zU@2?uEEx|fm{t3}M+|{YZ=?PU|HjKihD}tW&=~@@eI*9|v9<80C|!X9;W3oKHn+0; z*|oY86CloK&ds$}F5D;tOI*FQRgi$zFvllxs+CZ#Wyj+Kn+66yWjv|Gc6Rs70cJ?f zJLT{MFG+}WFc3$Ee7g%KB=;{W1l|>6e%EyInPhlR*ud~V0zu?>^MOVVZ=0NPf&B!x z|1d7O<2#*G2e@(7^1$+8L}+)Mk&bX`F>KZ^I}NmNacq#V#=^TrJyb(yt+~XuqyNy5 zzPmritfefQxtlxruYhz-1mbFNt&*&O9N;xqf+}w>A63H#bI@0E9*+b$=ZMrP*G46I z>aw5qG6O-_8B%?A7-RV!iLtT8LeiQwc62!c(9UQ)y6>?bvZmu8VULbTsB^Vlz`%&SB05Xn^K)K5gMaGXA_&tkqF!=k>3 zq*n}ofCJC?v-keQ+RILmY@()V9ktbdq)|Lu9`RWc1Y8L~Gq04%g`V&rJ{VXv1U`8~ z`DGWSDHS=pF^qNBkbIX}$?MA-NRS~Br))(6IWx5h(5-)I_FoL6nXx7LtSSa0r)pg3 zFmOE{xebR|4gVKENjrO!dO9j-9FB6H)2O=4dU7X+?8!mS*W9VSl=-{U`nq{g=OfV! zUx@dvGiRh(KxX%K2?6_eKT0Ao8is8fq=K4JFIAH;ilMh@ADd9Njgr=1GJg&8DqzCMZ$%vHbI2{Kk zLDo(}@O}0WH7eNE-1?$qTB&iE6ID&N+ANhEgYwYaH~hsjIMXJ36jDIG&uv^`SQDYg zxsU(@MkeNlr%s=5o_#@I_M`U&hq0s@tWuK&_!Rk)GMMo?2-rPvTzyK}B&9@KINt>!m%r93WBU@8q z){B&{LzNfZ5`|Z$@ERCxWJGwpp^aUHt0teACgUQ3D9^#?H@vfJ>Ngv~JIkR zd)|81vbyl~R_}JSt)%is&fk-=szgd><(_n1W&?&=!;UjCSjkAOe^-lNFZc{MUV>4% zvszWek=MxVJo!Qy|0qr+k486kl+nVX`3QdRM6GrC49tp;4vK#a%Dtqc%K{4^ZfIOE zkovJ$q%{f@jt7K{drU30LihuVOS`OL1{Y|r0jk&drrPU<|Jb(|U3$c3+#M(Y<0LKe z*;SVLop;)m9(i!EznAzX+q7NE+qL&JH`JU4#2t!#XgaijqgRtbNLq`@H)p+R8fern z0GzhN<0|?dhHSZBxKC{mB}1s53OY=_t$XD92NQqkd_GoBf&f@`w1VU!;`r1#0<@vk zpr=~!m2cq*D*ckei{E4QP|V&CmgiHsJ*b9_MefI_IUpa0fpoJX_f~gBdU^zfzF!I= z1K0ztZrD@JtMRv=spf`}rJS7FH_J0FzyR=b&H`gFC=#caI;r3FPEEak?-#}>Zx@?mjSdtNRE z7T7{)V$zj1EUi!{o_&69BkP(pq5iA(R$Cx2gD#&6!t0h#FKQu_MzLiIL8!SvCm4&;f=4(L$|C!EnHZkAmCjN7tsQx?5Z}{P1p6TDCQMqK`}ohCXREttnzf%e^sC$Ck+SMhm@+JLkF|g+|u!=jnp# zfyK4|Nhf^Vn_@PPTjN&hhH$DEtF0Pqrb0I4F2&qRHvEl%E7g)~wd;e=5D}&q-GXET z4;lnh-|NSmeqe3>c~*xX$FMO=qpYbKSIQ`)x7_mdZ}9;~VLj~70BUvtND$}-5h76R zXOK{JP3Zq0%b_WUp>e?@VSr^k#?N+SEa``x`CwnzeKGm8${pADO69>YpVPH95Hh$z zEK-RULu;l0#mHXR{667jq53fNEvoCix2Als`x~Sa_G@Ml@E6$O=U>adOr2<+Yq_u& z7r^CB8~@wT(dM>*ql}N?R+K@G=US6fdW=;p#p^}r0K$6xv>${JQvWn<#Q|u(Tj|gI39Zgm#j!J)OOB-v66Ql>Sm#y{i9}oRW5XH zJV$Fs(Gi16+Aa7s$&3&Dqs`VNpV>dTQ{i%2BtA9&nR_*xt^P- zPX;VLZ%|m%;Cuji`s-m(*+V`Ps40;Pw+w_pRPELN@Fb`nU6)bSmyXlRXf*B!4|#pE zT$lRP4cLO(0Es-gp2GIu+_gtMs?7#Z1&;gnB+m#H3$^3ca;4ALBgMYbjDdtA<-b;0 z-`Z|;;sn?UD!t&l*F1Ra&mG6cE|+YaxkI8dKg23url=>9S!EaqfusvTy)=TdJDTmo z`Sy#}Wq)Ls;s%S5C0U9_#0xL2A1Uf};akpZY9&TdSpCS)u zuLLVRjPzWac1`>p`ToS#pAk!7&uJTw@1O9dbglq6K*zskt#ehs{{7?pf{2;ZGkSWs zUMdq9VOpb^ZDuELH}N1?f!8jSK=Nnrb7BaDTjqll)<5d&>6?9IzxsP6&dGu?+#j zF;FU<$c;xDNChu8S;w>Bh}BHhri4s|*Q~bh=ZgGD{B|h#L%WHK7xbkmhM)tcyuQOy zMpdW(z6;sY3T)KgG@kEYGz?DNd&a-rascG^b$RRqO_7lO`Ikh)_AX`T=X9s!U-2ip z9rW)81i;G@&1?awlmW0(u_m!j=t0URUUw+MAf(}MrY91ZkPP3`UE=z+K%NMBgx3gi z=%G(3huQS&s0ofMO6Q0x=p>~K8ng+-LV;zSWe|JQUd9IuDsV*AS+ut#= z{C~GQ8@_N0q!{hFHzq0z$0f{2DsQn@_>yiBZT&DvOZK1{-jutjv7oHD5aYUG=Bnht zEvyQy+|bxN#g0?`?mdcIc!2reV`&ytvn{Nu7N_FOyQekUOL4q`SE52;#jFiI?D;C5 z9=qJWW@DCG@RDLwR_KZvKRlH-LFLOn&E#G!D)|P7Ct6C zOYS>!f5{MQc?AqJsJ%I>XtE4$Xm{D9d7%1VJVDoH0QT>ot=VQKmndHpYe-&N)779` zs663;nDxs@Goa)}Z-5YtEQLn*eZ*LW2>7x@)^bhjW7OoYUPwsBJZ54ZSfSMi~iuUzs~?M$Y+Itj+|~inJ*|Vu86J*aG4XxCrqU)`WzUhK5te z=>}?@D0GO#YyAY5=|}o z*gFvkikVs|?$CBYI(Y{qdp2Ah5NF)nzC6b9jwcv7EDc=zSEIJW^NMQ01-jQ5KH9fJ+ z>s4J(8{UgCPi=z8Aw zNdSPtKEQdV>``f-0NR`+Vb{oVsd0|Vsl@#O-3?O-0uQRB1*6mm=&?U&YU1JvjP%OW zbjS3GH358}UeX15WS!KnEGC5IsimgY8?(A;ldz(%x?30^Qi&|A&(+&+6J;qhvl5Qz z9)9B5;w+zFc^aZ!*hpHyt%-z6Y7?L*cnjlC)+y#JhD+8)q$o6hbK{9BALzkW&#MV# zo~#U|U^O1zc|zk;{XDBpUwP0?s0kBsXy^Lyt8J4lD+LnDA!bMJfaPIPwpF(p>|sOq zXg$p)EnRmK`ot`>)_q$Hyv3iX{lgKDjr35Wy_dva-FmOdj5~LJNyKo z7a#&<=-|--8{zi#j?e@X(U)9Gd6iQF*Ben2+`zUflF--U9C}Z!^HM1{v zViUy5hH@%oGuPfSg3-_ajPyX6Jdm~O4;aHbvg;JtVDjhDOx2I`LwC+NszhRc;Z(e< z`NZIi!7N9h;M1@d#Q6lbP>B<1E>Vvxo3 zZ2S8}mJ~T`1W_2EFu_N2IrkywjhR%vxlp>FJ}0n^0s!`^x~f302L02>N2i#u`>xql z+X5@GHwQ?muUBA-AM6yG@baxa5eL$`@aA-tL);{#P_@`NHuCg+j+35rpZGd+o&`8d zJq_0Z@y$?5`jr72*6oFQYa#4q@wDSMhpL>_c|*(r?0#;nkbb4o`*oB23Nj^taKe`P zQ0O+Ng>{Yg)!vOYhVwxGg~|q~CzS;k#Qz)X0Ysgf77xIHqj%fF?QZF8Yi;)DukGt2 zwr4?1#DbNPR`>JfsM3S8T{Wjbk7wK^wcSEO=1{1RD?-$Ce`Q6NbC(Cmb83mN zBBmDls6=!NNpulkGA}&i6y&q%3xQH?@@(Iz)C@~ZgiqNh2+8LM3Gg)1OQ$b1v z@!J3Z0{|QThdnr6*f7F|B@%7aQRh{vNWql;pe{-v#Ys6uF>_ooEXriXFw)@-cXh}h zszys9N4WQJ32YghPDqD$nHSZLMN>V6k~Dj0><><#pM*VeA+a|(EuqSL=!J()EB|eV z;^DVn&CCg@KbK`^3k+>MByC=0BzZDV0f!<#hFRb=l0iJDr8*!J z+TSG;bn_$wu~1~Y+bB=;^x3#D;m5w+JmQ5oA!Q8cgsD(Oz)cZDNAg(XO10(b9ZzRZ z)WAOaI#*wD7QXym5;>F%7~Drv!3FtkYvS64yi7wpmY$`>WkTI%dt zA|}oXO7AD1t0G`C!`+{T&6rC?g!g^OL^yJTW&IXNU*>_ZY3}!J<(pi@) z`q6VFU@G!UHGS8&WUs`zh@9|%^SeX$k;_(dKk0PmwS`UG39GMm9N3^!tm)TIv%5=5 z+02FJ{x%u8^qVr2e1{^r@bVv?O@VzVO9D!1d#IXeCKH1TV!2^_L6>PQk@?^r-?5BihIMenukq6&&~}@58J8nc zJW#3PqL;PswpjqqZO+gwcn`-KB&iEkokn!yCK^1Q77bYqcBJD}T(?4{uzz$=limIS zG+6xQaxdT&3P!zw!<6m2f1DQbbT3&jVXUC1g}P|J3*f&TmA;RM*;*$2yftit?!wH* zdUTTsx8(&$3-GP z8@*l>^9Tq<)V75lrao<+OvsHKT*OAc1Qbx)?UXl;`wLKz(CxMM#$)@-voT62$Sf39 ztscTFdwj&os;dGzVofqQfLl`uj5A!bfC8{>C17iHvI0SxAe&wGlN8i7V1-j}6 zZgxIbTv_=P!r^;_WAv%_nsHs*JPfOw?n6>ljCBYHVcGB;fxso?Q!ASxgQ)CJ@fz_x zMfqSsh4EZ{lhUU}?aZwwTK*LK7tdT;+*GX~1W}1X)1-Z`_b9}X9xGauLV!3WOZ_9D z)ZOp7&DHG)``}P?y^%!&s8UVr*_(HD?~|$0RdVjpq&e_iZhoZWBhOmNKqlcpX^98} zO$%lL9Guw>1;*%m@62K99RF&<@KWFx2Y(V#_=l*B&v1NIrWx08u(bp*l`o`KdC|%< z&JqN0PKM(gk&Z!zUo9>-68kNb<6OgY==Y5LyaBY-7SdTxJ8QuoK*zwbN32#197pEW z#&^oRZGWh)%8Z(2j#j#z)o84d7)#q@S+J_75oxfe++)JLOpaLOU ztSb!IY#W)4!gHMb;m6Zc*$s7sJ$R|W9Mx&>{;nRpI4&u!V-S4eG_YlBJu*4t0=k@o z*=$onXp1)P!Q*b4x72%s_&0!>A3fe^#G%HyZ+$aP|Z&3*WWOW~Si}f*L`eP$>#l3W7*6iW=AwrRf(XFjQ_0te9k_6=0BU zU(0?aIRf$7(T(a92i#+nEv=RDU>5hK2{L^(05Wu#kNmf(HjlB}|L)FAND^4L8YDr3bQ6PFSE3nJ_>}tC6<|jeIe_ky-YUuO{le=K( zo)fa7tp{}K*U1oaR1HB>XeIv*P6-f`J&PXp@3u%1HqU9)99hs9R8aUQBqV;C61FF` z6R0Fzf$ZH~F|Nf^iqziTOXX>I#WXQi`li61TSL3%|4QSXs&8InHEo{pOU$GT26D=D z%Nmj*aUF6axhlJ7Taq2Vpdr~+Y<*~r(bEOD`i|z&t*(qAM~6nFCA#`xiK)d0n4roy{F9Qt{{fA(LT{b0?fB7@}(0k^~v_7Z;)QoP>tK2$8R)#2(Q7kYd2! zm3A7TKxm5<(#{e}bwkC`s+t7Nn5Wo3Xwyw(Wa4nXC3Ezk&Wc*=2Bes;x*aeOIr(5E zI*f3+L23_?#*$pd25AmY$$Nr!_GuQyeZJf51+*Lm-M-4nZA18guiP|H!CqSGD^e#a zm7sWIV%Ff;MSIjpyS0a!0-`gs=GGv4c<4*)Su1_@2LTV#Xm9wnykXqlf)M_~_!g+S z7Z9QPI(Mvh#%qEAJ|F1iM~OUj0fZTGUp6+?0Rit7dr4*@_xuA{aa}n*pc$rTDt7wd zEM4nPO%N)`wcyB`wNt1S9FN$yGMo$7i8Qdd&iuh~;gQua7*$~xh9}giy{~5krYjR+ z#+^3KX+=JLd9L;Zwb6U}e)fZjEwA?-kiFr(X$u^3w5>JB!pjNHN zkS~mKZ8E#E@+M*LmNhF)UMrb(do&Su0cpY#dX0#GM?{ zIeI$n@u3mBceYsEpw<(mdkjL51LxYCp|k~^i2d9d9!>Nf(|pN2G#M^^;G%j>>DGGyAgo(@eu?OqlzkIyn0fW!eah)wSj=StK!~OW@XjY*QrZgQjWR7 z63G>~IU}oRFw~0jD5e!*#fNIXnzo3$uAF}`P`b{!;L3W%Bmw71-ie!4j^M`NBD$d$iJQFk&A&;W-yqAw;{$rWrwxuhvdy-C$jt||nm9jHfUp0uq-(2d zxs+Iu1d_BFaOo3ujr3t`MY~ippuS6w)7B(CByWdPRsA(Pk%Q^_KXZMJ^Vdf6BAwG z0YSRB*dmad@FT-K{}&N?cM>jm_iAA|-UL|lZJLxc;h{(2@7tPFW8=<*_w>PEyw0U) z%`F{rNN7Hz_Km)rbc_WqDa2XzvK-D7oR8AOb9`*?EJ_RLlS*ui8gx;zt}AtK|B2TR zIm0nwT=lTE5JNi8JKW#*xQN^=Jg{~>gA`oJ=_T2a^uIi$Vf1h82X7N;)G11@Q<*Z? z0Ev#sD}%5L6Pnzma=QsnjgvR*P42P|qEJuY;wMz~D21p0o8{OSr&mQib?=zmebMks z4c~%>P!&1p&)MCU=e3cfh$(x3lF&}_fMLcH_WPrLB&)egJrjDd6rZ_+GRRz#nh~D{ z+z{@1t}5Z4CoU?%CSt>AQ=010w_1Ci^s@K4yz zQi(DO%tPYrByo?^*ApOnXK_uz^L5=RLn8=DSix-O+XMP|9WWF(C#6a;O^aAu3=ZuB zR3{<+vzaKF04ObcG(Gev`p88td(QQs=FlJ~v0mHS-++9qgIrdQvbqBvI`{?+OzEh# zqTN#M#(d89^FlSnyfLkY$tgD>S8R~i(&JP|XWiQ)c(9U;YTpEt(*?704ED9C-`J}T zcdnq*k93jlt?6uzf=f$VAc5d$y^g0WOtr^0viyYwjcL|pDG+v$G&QX|yWv>1^vwn- zsYOODaoR=yiBOK^!|-fyn046xxsw{)H3n3u)dHg5T)_}Daz-K4A!8N%383XToUHUk z3$Cox3v{Ka^Pcdp)l}cmIhu=>)g}kxMV4^dmHhk1WJ}cL>E}Un4HdH>Ig7Xg7k+-f zskoXv07oAG;gsvZytnga$__gy$mqzIiDIbeIW@=>tTxu7xkgZ&SN+0+kABo?#G17w zi1h6Vh-*nS&b=9?>^C;;myLVtcJEHMIpr;Pe5V%t{*?BL^1NGtN%hmbVIE$e8UU+O z*P+9dr`5#1>5SM;K0ZD25!O#Tks&?Y68JBW(H?&kRbm_(3lRFu_2SrTaVr#2#j)+S z4v0YgG~Dh>+bJnVzP$18&F8zoxzVRrVFJ2}C;4g3EHk`T)f1GbU2f|IoQ7NBTZ3+m z$xFbhk>AdsRTa#?KG_|{TfH7!E#Rx`qx4__V2{|e>$1}G(%N~YCrl+Pnqz)P)8%R< zG@IVfip%|FHm8};)|*lf_S55UfigyI%_^%lOLntBtV?0B#XKR%GxDG6Q^*88`lZ3s zsS_(F@h-iuoi3x;%+-b-wiIv4c*IbgyTrssCxTeu&3RTW@g9)0hK!^L=wpGGhjWmJ`2PF8gs98atguhx6uX0qD(ey|RTSgE1~sL=Fl)n)(%kNg{D{EMGb2c7 zKkgHL>_#7as<4o@+)`c89)rjSvWFo4pP3d(-m*2*x-!neDf%0jt{VuNW^Cn%Ey`5e z6Uh!%>hgPHMJTfAh8b&4K5{=-kErN~O;mc#fcK5{B^pcZL1@8+VK>jwaJcf-u-f)>O%nVS>gw4?LFZjfXJz}z_Q4X|4%0un1d-Lo8S zfw0O%W4fFVqv4AB%tYZuTSP>=UhTIVDJ9dY37HNfO7VGAMETe8QHcyzMr8M(MkP?v@PSiOXz5K54Il&-wJhSK~6nIKKOx5KE^1@?1jX!)Valx!wlIDMFr69JW>-<6li{h?!&>+HW5eWQf818{5=lC&;31~`B` z1#edNiy*1CM`U2?hHiJ`&4q5m+5)%Dg=&Y89j7xv(TJJ~C%oLdn*hAGZG)eg$fDNG z%A4&4`2DofIL-fy#XwB8><}9ylHX9*pk32}AECK`RL5(!9YmDF=u=Vh{r~!t=DCQF zYNG32dbvreH5)xa%X^sP148rLBDf<_8o#F0lWqfNs7Au4raG)I>-pKJUU&Jx_@vBb z?l1U1JN)^wn93Yzwyh+-66Zxevh)l#^)$9QK?5Z7ga@d|zcaj%H2GpFK*;Pb>C7U= z0|V|maz#k^qDBo@S=4eDpPOx*Q37~Dq!;j^?5zvk^Jte!RK|2FCUgmrSlF}^(VChA zvPu$}P7F?UP-(*D6pB!RQ}5{WRiP3$bbWrbTN}jJL1oAdl+* z=?ZzwInm1r3>qS(05U&a)h}SR%pN1_KbXr4LyHjVbjU+8h*;%Y({Q=ol$$-6>HVip zy!0g*OJQm6W@)v2AjKxnrpn5=t~CS@_y{ydejkqMmA) z|Brl|Om9dAm-%)Wxvh_r4KQvjdge@Ps;?ai>e}QkWk#4GJ|o^~wOi;ZoI%Z8+Kj@T zKKw25q1?@Tm-p~uOsWyf`K=9*!{So%_`$3rQA`NsPAXiIs@MgN=jM%=<;64 z^l|62FZS!3Q1V>=(<>U*fq^9yKZ(3xJa2fN0}*W?ZZn&>nRlsV`xH-HGU8r{>*G2O zrFz;bJ*hC!V2`@@CEw)Yu*j5*Y=}3(H$CkovW_T9p|VMaJx`@fLENx6S4+8#gT}(A zhmHxGg5T_BK?%;$H%5oA_ndzrFi8)^swbS;F=v$vF~zl$ulITVetgc-Q-FMZ`lDLX ziamWF>XNCY|7BZ)_MqbK?zj882RH;XAukbxgMU$M=+w5u^>8FByz~8+lAc@| zW;y(eH#`gS#z#X>Cfd0u9kV;SNfffu5>p4&EndQJ%i5_Kp@{6C=qTikrC=3?v%)Oq z<}EM0k-J80WdZtPU~WY&goY?=OgabPHf1vgi}(5kK%&vN_eyv5fV44|tlmJUsE!rd z0GMv5IQleaS<=VE39bUB=-VIM_zjA_oYrj8hmY1h^#XOV;ONQ6ZE@-Yi6raeZ-qn( z93SE+>Jsy>9p;Bi;sQv&M`52V8!WglE~hmm82r;E-ka;)Zl7=`44h@;Rte)eky1OHtk1rjs%ne> z*2Sgp9-E!sM;*b6_T}NI06Q*Uqqn;yLrAt-W@x(o$U~3Q$S+goU%uXE$@gkV2Zip^ z$N>UAFz^j=xf&ZE7rdaR{;>0ldKm#LQk+yNgsmOdXw;)gGo(g4mhYCW|4-IgaiQ>k zuE~eTL8IoZu-M|4c{iv}Ba2!vIjF5K7zi`?yFI^4MJg6NR}KvXJIaXQO+U7tp7pG! zWN3Jz;^eY1UUYYRZpY&iT1k5iFwfp-k z3l=?hdO@y}zxnyqHJsIE4|!v$rY;3y9Kw6=w`DRBLz9jbdX_qLY^xTR$z|ESUuNXedY7`|Ca|(1iWaKOFcO z3N?ssn;FE1ZRgnY?ujyT;A>H_K=%5f)osaoOx3mw`Ky4A{9l5 zyj?Ddc>@us#Rq!?xBHC8o+gy!08p;1%pbEC4ur_xr(ndTEO5iTAs6Xp%TTBV>^Q<- z6_sni1e1kU2qS*Ayv(BC&41t)x_uRpy)oT!H8@xGf^5ulklJNlb)T?8=Gv4hqH9ZC zwN4*ENYbF(+Tq=Gse~gg1($5LVz-&jLnLt2$HrKB6?e3NG8y5j5t@V;dEJdIfT1qT z-Lme)Ez3|-#{`KBaT09EPLi70=NNe7&i8c!DBh$yos%<50v0r}Wy_vzVE++}SvnOJ zmRjeScY^IkIeIGD2?5DSZTmw1VCwLmW}O#Ke+UY4lH*y+WapAaKEV~iX64om{?YoH ze=q6=PBFzZl2tw3zH07YNN=F6tN(?#z3AKL4MfthSKgK6@Hl{ZDs(i|hzGR!`p@uS zP3QZUG*sZpBfbE0)SSKb7|6&tL0TZPR8F2sGGkDa_wCz;kFLW{mT0j4=QZ z;k$QoZ4fh{Lm(q6aHTlSx+K@EfI8zQ?VEzw>QIupYHSdt)4(QAoODHQ)|Fgh@XbJB zd!TIfxhEtVBxz$~>5dTfUyQkDNK332-`PEMZVA}JXakGOzT~hnh!tg6h!WW@r^gd} zxB71cI-I|AX;-9~3_LG&STk;z_nvO$rrjSWTu6e3T()H$3VKERGS=^Opy5&lx1YX*)xvNAZt2JZkwiNs85XX$jtir58IaCBA*I`i&f3 zpAHZu<;2VN!(|re^ z`)|a5B3D|Kh_KUjJLIlxqK3U7l)=5C-f$QOOc)-#cwsS17+90!fdT{?X8c= z>hQ2okL174>AzQv(EX2Fb+Ow3SW*GX*5Olm_v05={maz|90IBFn7ahuCakb)3Zp!k zkbR*Am(-(U>ru+LngdCh^nX_!TKdN_9z#;>u;ik%&h%#vd+z!HEX|%44I+0y`noM{ z6<;@v$Kfa_!~!BfEkDJG0_qgk2>|}Kc4DvU-<3L=rBVQQ2daB_0tL$ZK;22^4&|j_ z`L$801>Mt2ezExBvcteaM{()?ji(r__&wJCoXApp(xVBGz^6+K=>7Bkn!%O3saprQ zE1$Si)eqkQM=YIAnrHockj?K2&fW!}=%N?&$e;wK1k6ZoPtXE3;ZD?()KHVLn8-dF z_nk%gekTr1cHeVsm(*NCatWVZFa)~*$Hy2>bu^s4=kx|Z zk0|nPQ@Q6Z=bIM76#ZfXdaJH3H-IH3D$j1^QHQj&IVJF9r5&O~xQ3Nk%yhQ8XW1d- zfDXBr>R^g~jF*;P zsbDD{$D!M~Xy^Q*)Lr5zFTL<}he?`t>e7Q^1kFGLG=~LFa~KJ|`<=7Q_IRwknxuC{ zs;O%r?@7ctDJ%6ZRk&F|arRK$Xc0dl(;hXEdH$9$Gbymsp&V>q%E_(?RUB{L%GUpi zH?pe{Yw-80NS1Lq2#{3FE*S<|PW^Ql38`g~$26!#Vr#P~;LLoadlPn@b4Mmd z?;<$PuG(y1%i+Pwh+K+8v6&`uc<~BX3T1&Zl&*2pUn1py->g6mXuwMUByF>7RRS78 zei;a}168&_SJesF-s>>dcXt#!1cl0e=E>=cc&pnI4Y()RR@YMf8^l7|s}n%|r&sUv$x#qgQyVR|~MqU$obA zKIuxtPFH_#$5MxO#ACY~KvYGh1|evSvCHaC_}!##?(EyhST2OROugzZ%jmC zCqw($fY&YvEDc5E@3_ChZ)8=V_+uw$%FkG9C3z0Q7!=A<=mTVRIVs|yUmd!xt>(yH z@UaufxU?EAMFa@#gXq_-Bjz(~dE5855t6Fl(7Y{5L9~ZFfSO_w_`Ac1sfZW0qJ;DE zxeScz8P#1#Im-@|c+DUc5>45TaClxJY)$QBnSxp{-DZfguksr$r5T64Q;(nnAB|^X zbLzON=OVC#7_c)5OIp>9wd3V=M5g%ac-#}&%d7B=jmvtUUcw|r@b16=2 zlU)*zdZ>|JD{^8hsAlx^4~oJCSgG^*Q_lG6aS4n-yQnKph^EZq_qR(8+kMfS)=5nK zN@~f}_u$KU5Aj=U&db6pbIL9fl{t%bP(bJw&R`|kDk+^JUVO%1S~rY-zC|N6CX$gV z%Ta{TpZS{{H;lLdKsct;81?A^;o>55)0gr?!AzbsbHNPG1!q&(4g|VC8b0Uwda!U; zw&sD+UaS%y$gCO5oyTRPmdiH>t->ITB(Tix{EavF5D}B9%0hm)!67y<{iHCH0=3mV zFBRDFdPW;VF1>Cv6sE=!BRSW$7< zT~+5d&0EbccjmFnKd#0bfhY7nYHF2mu9!uOf)+QHd5vZ>si5sKV%^Qs0v&2)6D=GA61bjNXFsS z(Wg)WLqkU!Cani8+m2C)zMpt-0ccz9>GvZh$x?&iA$*64$XTJjgiq)H{(+oK*RIk> zu$aV9>|022)aIzf4F47t#vV-Q`L>tRZ|Frr@tmg-o*!RZ9GmHYtzWRv5nuMrueiEs zp{^H)S~&^U{u+U1Gg2Nfj?b!oBjfS>Q1bGYD+3TAgGghJ_p&UtxZUe!Be}id?Q!hQ zQ?~7flL(;pZCv7_ntIJFmjl^J_RpVmb>z66(vre73a9&5pH zqgOeERUPGO)J~@psNUqy22(OzolSH(gjT2 zH8?K-LJA%pHQB{ox~6!)_13Gxy>r2s!P_#AkTz6;(@C?xILq#v@v9-4AfxKqWkxmrb@8uv+d1C;6&FQ!b~a?GEoF8J!h?Kdu|O2Gx3k&p)&D}WgddSE;K zJCg|MpW+ed2>Y=IH6WH0tCWOFD82vx$15~75e||qWg{5Zob)3JVemf^3PO~JAor|L6@*F?Dk7)Q+vj`O zsII$3+U=T5t16Uc+s0B?>pi9MzfhO^Cw@HfnTEhUxwSfh` zrn69vX1lpJRrX9-r}s+m9Xbmrl(};ldRqJ2feLv1t_W_zyi3C6mn&))DQyG4=VYP0 zRgOKBFR(67)ruGZ6I*Z+uW&hTwjht{KvhSmeLXw>E_&rhCDxc`!43}^rgkgFa&3mi zaj0uW-)jYgZ)o#n)bQkSp}5TS18!X@!(E7$oL zExO=zUo&tAmEPL6O#@M0@>7o-dB$B(ttZRWpXyb?HjG*2ZunvjG>WJK-Pk}rgsdNg zFXtGeb6}E`ktzpyeaD1@f@VgfOUx~{Oy}x&mJ{k0KzJXQu`jf`_zlEq!OAXj9vl~P zSVnGUUbnkl6RlYdC@MKWF_E(xyuM1se|&g&qko!}=H{$P$?nhLHX9a|=9Gqq9DQ&p z{kK3vM}^*!+=}b82f1pun|NsUT)5y81o(*(^6s%#XdOyKfT5!aA2j#pq`7P2cy^&n z_?QOtP5Fn^E++UOviK4o4%(k7RTy0l&m?^qGK=(^rW-kom*5BzV7o4F{2@?-(3>~Zc=-$p6E zV2I~<-PvPvb)u>m^+vw5XhJvuHNWN}UYA7xiKm(Y82BzxTlkSb&hf16l$rtE%K>%* z7rYU`1Zr(a8(w1SE0P>gxseK)=;Q?Ym#ZF?+7oN+a5x`9LB$PRCHe_j6iVUO;@d=H6G@P2}iZ2I^)dPi_=5T28Jsy_Wk7?@s@X5CWYqY#Eq`h+Eacka&6~*svwn z=}Ej!(0EC{ncF}5lq)Xa!Ox#v0W9tSCQ$;ePSce^Zc;t<98dObBREO^`5Q8GY0^eL6~3{ z%hdQ1b0VBU+4fIFT;o%E*-Fv3EM9CNr+lE>x9Mit3!6%gIVDR`D0vB-G~~Dn=ySj8 zl}v=@hQ;~OiLC!8ogEIamh8uBShK~`&I^J{MC8ptw_GMB;U=?oEttmP(u zQZxZI(+TlAdCFdmc~V82hqngSE)yj-G{Emw%2!GKmUjyg`YIJjz++Ip3>2r@`sAj~w#4_5xDD{;Trp5#q+ZkIx z2G%F`WK8;19lZ;(z_vCfjYw(sxX1Y#6pqgUD!6iSVseA~T6})nQ~TFyuaS=)NfbQa zTw9@)+E_vFw&SA!4T<`BfxUZ{OWs+AoR$iY8KTOwHpRLmh3-5lb545$$$|&)M2yo? zgy-tU0vn~nvo{9ZIBF4HTKQ1_b4$mbV%JD8!P8EM>hJ<)TVz0y<*E9vn)B91 zeA56jB2$ev43xbIMo$ZS4LRc2C%xf3SKE*pIf${Ji3p0qyrAmcvD~OUf;`Jw z5`a0kxOPksm+JBeucBn$#LOe(3TxcN_B)R1vU+)Ho3ICbq@<;HgNR}Z4}D|vY+@kY zxFeX5Ka|#iP9%8heED{k&hvOvOP{oPSR~0AAGZ(}@>;iEg%n%*tZSBI6)g?a4}cxk z6bV`^5QW0G$-xgJZ_uqpejG1!|Jj`Ux{9Tvp40VSCCs*&6TTL;#nb{p|B{DeC9NN3 zkNKOw>kcq$R^Thnd5IzL9Fu>fmqL3SVG8qb%w2}^HDwSSX&^SW-y}6Q=3OYT?W9pm zCSePEnUo3H2Rw6s>Q2Pq=RAZpK+|)=BL9nn$F%P@yNuY|8^m^C33?DyKevo!Z;%6B zfk|9ZWP?TGL?Uhe58`x5?|yntBP-E6q}h94iq*cqO?UTNe#reJzDWThIqk6TLNKzv z)Xo!ed!^pv!~>UCJg6f0W2mBJ(pf2uq7y2NF{U9ayZYwc4@>P@h4j*?(!@qdpGh=9$R*weJ01slr{#h5=zn_J=fn_KtLn-p&m+odTk$W6V^@=L=ZEQ*&(D zSE5cutc;pI{fk&>R;a7zFBQ&=1vP|^%1A>9PqqFhswBIu`cmIw&GEs?MP!?Pb2!-V zpWHd*XN*3=AUA_ij+mr8>om4$X`=~{)`>SYGW>jGv4YoCrqV&S*jw|;-J zRpY79c*o8&rX5kxlb$cEuC$!U&wojUD zh2bo~^*>&=O2WP`3L%%RTN*DeTQJ+1?hr{(7Y^^*Hic-uvKrl&HZ0=XZ~~*{UCDBy zW4nn(jk$leu7CA);Vd6NGy6$#o9DoGEO-0H%Q?>d5VAvpy>SC5g5Ue zow5!B9bb1BCD7|i53TYCkYq58Di8(a0yLMqpuyu2R86xGQkYQP68Y$Y-tdR5jBT4R zRCrr7i=s)3-(B*5&O$OzkV{Wl&~y1Se&!ES(=!KuGI7unZ+ftgf_myCt#%8CD%7~( zJRy96Fn62b&r$qCf+9A%MwBci8NA#r*BdukON;q7s0#1b#1>Ej-_oC+8-95O0sa_% zUhrbARL5}@SuC~IZsCm3%7{Jcp04-c>vuq-Zl}RK#51^_s5zCJ(_+RhDq<_erc&XL z;_QI48{U{0{0Q9f0`K?sy^e2v(DSe;hTJ>ZggPz$Y(!6~h};hPXZJukU18R{BK;HD zK!Fwu_@6C&>i5uE^}YnkdBnKd4o(${Y3A~0V8!!!bpgDD0F_q1V})1}|=dHX~1 zT0>I@Q?e%&r8w2RPuIIF006+Te-hA>#d{@Hq|itrO}NWKh40)$`+E;#!p-YxY0w7c@D=md2HR zB#=I`FI33eYgmU$h2Ir<%ydcPy^5^KAqo_qGIxKGvrr@-DY!1^$(P?%E21|`hy!EI zJW$6#do%JJ&mfv^aWPNSmgQd4wWE0wykwlN{V3^mId9I}L2`h339MG1g0UB%_~Vep zou2?oz^tQ~(3-^toL;AiAdadeC3bIDm$WnnH=O<_qfXtKWlS0ZeI-f3lZrLWsLOIC zfrYon{?RCuWcr4f7rFoDuh~B)w4%&Fd9AV`(ykCDo||Oq@glU-cgC$&s(NhACgO#E zR{6+8FyLAR3eq5Cv(dp@!8B)v54r;qsRnJV=M0>a%(9k%`YFRjx{F&rG$Vo+Td2M% zMmk@#QWer~-A?Pm)oi**L@CV2OSbZJzQ7_d><8#HdxEo|o+p|I&d=tif2#1tX>h4q zHZQ6Di&92IseU13aroo2DfamkXqLS*;V^Se0&A#ai~8)E*=brQKK)gc7jeBD(}#L9 z0HMW*s!gjs_*Gl?fc64(F;0#|Fc~qdoQUG#t|F}oimgT(pYiC4@K|Fn_9keF~tZ$ZoW7<~_|@i_7p7!f9A zQkv5l_*FsUp;UlJDOS{;|E=HZ^vY@i%&bIqBes^Q5(~B&=*csXol-0B3BSA><6LrT z+8fYUpR zayW-rkC4*Lk|8<@wHgszhMz3r?T0MZ`~TrTT)`HWMw_sJobpW1uYATHxnS<{J2}!| zdTzh|TX(O%b)mA>dA(cB!PdhfB@>#~1v|>!NH_5)e;_}cxV|eh+)7_?pzh0mDiZ>~ zNpc03CUREDk6ld#^ZkxLaRnWbNAF&v?yrHP8Q`(o?B=SNElE&4PaKd*Di(H>bO$jx z0vnjQoQbSLF%rHNz>Z=A^sI~{_orIv% z&Mz_9?Zc$~G6Qv&$|RmA=fO};C}%!FVfSyw@15~8%F3aS*&t=29Rp;Yk7&C(THHNj z&LcKSm!k6ec{5ih4<6m#h(o~IW+f@aaJlbM)7>q|j}=CB(5rkc;@*h~N6wbSKWFD- z7><4Oq!6Tu*HIp!&zEunIGn^vj%XIHVAvKI0ZP1&SPkF4&6#(kwSmz9JV3+0On6() z!@+7VF90{xqLBrQ79h|QoMbXx0X=lN3NUG=xlt@6Tm`~TSAPLQcr|k1)~t^A+>iy@ z%|C=L=~HMAs~>bmtzqPNf^So`bw2(MO>x^|Y5YNBj|i_O?>4M~&0`tu{aLdQMzZV` zyatJ0;t`5rrRS`l?fwiAiNjHwbM~=GXBX%5=?`I;X?HL*>k>?RGspd@E|ZXXztXPO zKyIyJMB1QrGh9P}Y2cGcsCkzcC2#dRgws0=#U(^n-95lxo$y4*36h$LIB>83ogh?P zJnnXF;gM(BX9iGI%L3{Ke`rD3A{$)>?ZRI{tQ7hhMsNO$GjOR7C;^Q}Dg&&X^$Sde z=EDVGEL7fZr$)g8U7m5U2_PV+^r$|NZ}vGiNAL^2iWhiS2VOc0xM_DQ_7L`RrTQRb zp~0fck-PVMk$13(p~qOM1J|lBtva|n2J#^lOvDPBQqpWB2YP+-CTo+JM0HBH3P{;T zDn~xC^JOvR7m~4e>8f7*_H($Q;wd$NU%wf9H$;asEBN6%r2TbsZz4_yVoJb`#4WCq z0!a(nmskYz9gU-P*C39F&2JVYVyqeWr+&;`?F&|^ZhzNWLCy;25t}jxfxs_9eWN3- z4f>%bx*~J}z$sof|fpZc9roZ-O9n%mtNM8Gs% zikW;_`=_!M`;AL+SN<;&dONkM!emL9Gc=GS^J6%>rw#OT*M%p)06H+V{v(y*(_YiPKgd8|1 zg2)?C5()fU4G@S#A5OT?`5Alm= zFd&upHP(H80)`Hj6cKvmv4*woWr2*T=M1W1=wOrDYd_f2;+?%ghVaEt#KlRp3=O;J zTWh;FjyimVM%6y=r@7W*qAvwQopdi7cYMP}`f8C6i~;G0EK{|jmL0ylXotJW3M8MI zN=33e6dFD;wp~LL--U_! z;HC=L#>67s?_8_t^x?Sf#1EhTpATs+#$7Lw+5{Ow?Y3t0*XFJWd!PU^K}%rTxCo}> zAgZF~!X$Ug;a}Cj+ZC#TL~{hX8w!8gLI#(~f*eV_A)zc1-29 zxPX3&^wiKeP|SJ#BK7iowRjm^)d>y)sR|K<6aFsZc5Bg5X~j45(z|ZZ^s4}IGnaf>7eCy3JM;9G{|Z)D0>VLGm=62pxy zj9wXqMgY{tEk27ic4u58{AefHHrAbQTVbfM&SI_27P3pd_ga9jKa6~RB6>G??a9jG ztJ|Ez2#v{`(TEvE$-S{|jo3#<#_YS0q2-z!)_;LY!*d~a22XOjOx$_#zb_7O&R5o=5-fuIL@Q?PD z(-J1rzkl7sh?LdahJX`7@PY;n4gEe!R5^f9Im&DYtK_H-!7_@Ng=oRacN5GhY1y6d z4G2OeY<%Yb$)Ne4vN&e@(C2xNHG3H1UbbL0FD=<@rW6&s{oMv7HmvcRo-PPyDV=VHMeV+qFGtl)pt!0lUXpBAgrnbW>^{6(zkFOcg11YD&&;!(SvykOZC(<4<_ z#;-Z5JsJ{!disRf-iipQJyf14Mg9#GN7oMr)y9~2`Ot&neqdQZyF!MJ|7im~nOM7x z45PGv0$1hU4@U@%0snwJn2K&Gz0l-ufAT&if$<*V0_;pt-kjBm%flq48OaBd;Dx(S zl-)Hp_M6VR73Ty&YmIa+_7ROebL39pl4lFdw^3MIgME zezK~cPk|8(2u^VHn?A|Es98t$1&l> zc~`aSwk|lkCNIQt+C4_Py)qXT>TyQ5J~x3Jea1Ocp5o5 zsg3a%n}5rX7M4$8j}RS+{WHTcFuOGoWWIvfP#_UVMDjrVR@$z{XSIxjsR1Kb2z;Ny5n%|AjV<0q(!7HVV zcf!D-Q)mn@d(F~GCkb!mGdm1?E|Y|HH@=r5^hf2|vYqDNY3uP@c(lzT!U&BPca_Y!=%& z6b|4)wbBA9!K!t8UL!<%ex@pM_c%wGDUf$tMgbMngn@TRXaC{jKm7F7tQK`ylLGDk zt4CHg-Rh3(=T{>S!kMVwru>Ou2blib%9HcI$SX${8-ykDQz0Yb>iShYQbO{Mpb3Kt znc*!i|J7^1NXP>cfCL`|RtlnBFMpPMo_cE%F^Q#~$MnSJ_t#}i(2J>WoIX&ts^+t# zLv$5m<{LS<9S7#U`3hD~61G^1)Q$pWmuPAseK#U)BmlybY z6{j8Pp#NMIFsFt06$9{5Ra0H|m)?|Bm;h=D(~)bevOvc`Gb8kQPVtxxi$f}NO}jB| zRZrO)%@O^}wdNIumPwy6u>mm4+OzUGmwg>s7Z~x#KtGJh{vLdU_8a`8-jb{{6k+!M zCK)AoFLkYZl$=SGk{@0APC!Hx7F*vu-T2kLkzs9?j!| zphv=AP6lp}iQCRC(&2o%iZ_egvQAfK8LzQCIe#xI8J4QQu0K7>QgH(8kYQ!KYvCOT zoN@2*PQL3s?2O_6DO`uD=&;lBV{J1j-7ak2O4OYh`%*_POwR}m*IWE#ypDE z#mBpqW=J!-3on6bnu7+L0kzE#3<6uqJhnQW)tof?rOUO!Mm8>ld~hU@W|TuT z`p?aov@-Qtq?H^Qq|l52RdhGwN>|ju2kdKwu^q8oKfI^gB+C=en&oGk)lARJuewNL zRUD7Asro@U0q+U78giySbS{_Gi@bn=WKo0$o%r<83G?zZ18Ro3XNz!3Nut9@eIWIp z=IPmGDk=!z{KLiI%w0^ zncmd5BB)6ed;M6*9O(aCs>iE#-}W+|wLLjs0B40ytdyj=DFC-^ui#~8M|!vP1Z>@{ z(UK%j(1U%0R-C-MYlji?SAuWB2k|htMwAGzENcJ$B1VrYVh0IInq)DCe*r@$#}y0C z(hVy7o9hekkG?tw+uu&7X14?@Tk8kKO18uU(W>I3`z1v3tq7We<@H++)N=m!nE@}# z+s`j^oyQ%*0|VbVQ7X?p{Ay?RJ8OxXQVLSoMn90p-($a~C}Gp$HtU6F+bNrbEm*0% zZryis71(|z0+e2j^s;H5M8!9Y z0Ewh-KK%I*twz;K-I2=#-W2E^fhP1~^7^Eof2*7&);mFEaY2JQWKzJyBM#?9P4v{B2y0U&A z;USnN;ZOULLXSdaiH~pn5B9T#DB4gd5jvq|eWG=;H0^eRkDtf{83oQEB|vxUfFnGf z)`RgpG`Ro1_fO~hUA6qYh5=>{8bF5@M%D0U=TM?gHzfJBHf`||D*-EhQMzG2{+Zup zwZTAH!H9U;RB;WJLv5K9*T?*@ptL=89>|ehLY7B0MM&pVmh3N(P;+3!x$KNJ6lyOoKRla~TUyR&DZ0LH} z5-dZXsbL@sJsp9%&UxFFN|GBO%)Wim71(5aHy2{~1sg`(-@JUHFkg z$22%V!;#O?zd8H_POWJ)o=6q*Pt-K`&0#@~N|t1QN3ZJ}LNYO5$$2q=vMOPF1ipN@Ur8lPevy;8z&U@0;SAd?b0i@&`k_Tgzq63y~X-oqw>!8G|lh0QbC5W6)?ib3iOtz-*`B=4$6P#8r|K-k6?-%PwuLtz0iq*RH34h`B zGSOCC-gU)i%;w>1gWQAtb=dF+?&Uk%cOZ90Hi?JO(6W5NZk}2`&2))gR=d49PKCSlowdSfz;W0A{LQ0T>2oaw8|Cr-)6eQ0;dzJ3{s1qrPs<@= z3hK2Rx^TW;O~U~K*#59_)s|-S%d?hRCEwCjPA#QUuw(U4@NWUr0tZI6+G~-u1>T9X z4REkT1Lf7OUVIJ4SfdGPa04+-GwcBl%27s5y2aK@FZ-!81^j0@uh1=)ThKAki=QRe zpYD&(l_)xG>hNLenP^>MFRMg;U7}Jtfjetnn3?SgU~!RpU*1YrGS`0r@(06{FsW{B zhl1-|LW;D&4SmkD-_5e>OBp^TN`S)nq+}gdHBU?yeE~)8KxFZb<;bF6YML;m5@bdv zTdm#}&y_79*5U2aDE-qBS3bP?vTPl_3szDRm@Mc)3y!Z}&DA7~=<(wPx&uI6IjV!a zRt}fKS;{)iz>-c_N5E(7(iROCIw-Pf^BrJJ_w|hihZ&z-Xj0uP|48l(dYOVCwMw@= ze@L<86sFiLD?gO+erXu-Nf;_ppzt}chAy)_&_p-o>tVQpRe~G77u>2T!7t47_dbWZ zmY~!_sj8E15mZ-nA(Fqozmv;hxCFjEA>XAj-yS2N21KT$KYT?em`e$fjK>4EyX&63 z9duC^xvv3^4P)*Twt|UagEDx%T@tUEq6-XIdxiDX-^BjKlfqo3gtf-}(^8Kb$@1}} z$2!Y4MNYH6>bZuvb+VH>kl)`h`%a=ioK?8U3^nUCwxf%?>blqdmfDhm{*9`G8j(_GMmw4g&cO2^<9+y8)Ve&}(qiZ+s$o%JK`m2Q9 zlo9u{DZ|wA!)lErx~G11_QF+RT`ks(7SYS21tKK6bOFLh;6b!jnHw6Rv6PEhaLb>6 z3aWPdO?CU>uRW(oOi?AiUw-`l$%s~rNJT2gE0m`SbBiI+sFiQhE!A6R{Ra}VNP=F9 zA!8X5u5d&sSexBhHL`XR5r}=bZh}&80WGrw8@ztM)Dz5F8VKZIgHq78mJ5U^ROM7Q ze|?h-KaFAK_{fLMsGC`)LxpA2KeGnSpm+OSlKeX(c0;^U+2h(}4-bAu0qU&Mz0g_1 zd?AqVh(XR6Ql4#{ga{w&1ac`QIpk~*vlC8$oR16T6-yB-98IXwqIZmg2)?w}K12pp zch%bDVGNgZ9BDbPh2|ip0Dit}AeV6Ow&avX`C>?BE!#uN8$M8^sx*p^?+~-CgC6H} zFnaHVys}*H?n_U{*`P&@{7%zfA;**??+9jrnk>Mc;CJoY_RR*RB;>W0+K^>Lzjxv5 zze#MgOkeKCprSn%NC<}=vpbr$8c02hd81+asKQg*SKb+f=BOACU>Qi;3|-QxovQWh z597L+i8m~$dGwiZsc1L;ftX!GSh=lN0}h`G20j}V^aBh~?*2?daoAl(`qt=&EUX<4 z?Rb}{z1~A~DmLS@yfP1FYD8POLq=SiD#fpe4HA5jh_|MS8=Wq@hw}8Dy(P?3(u;or zgWR3uRY$jrYian^_v>vLGj$2xFRJm%Y=q@q70Ujj3&(K&&lI?k@!uQ7WjkLL*M<@; z70>3QOs_?KcF%tEig49FHGkzN2s!hn_y_g;k^%+(I;OUWMO&^>ezZYw)kij0$U*D} z5Br)aFK)MA6EYOXdXhEk72!@mlg8*95B^l+_oOFe?G}IHpoFs@1l3(!lh8pT4JVE# z;r_7~H+9Bic8M~zf(3su9c>3PS~DMre8HUGX(c2hMKK0YXs0IWd!P;kR6G`;{f51M zB#ugH22S_@r#cDX8}kMi8w>M`QTdjYu2$OYB8EuFyH8LmjUv!Ja<6+~?i+6a7?;xD zvy#U2_g5$YuE{oXX<nccNm--DpifMixek+CYt3{L-3V5J7hop7M~ESk6V)R)UIu09)B z>+3eF?3@y1Uv}ESwP4X!tM%3FLXP)-Y*CU@J!KbYMrO#gZ#Sm?(pIp?Uue3*T zKLllnOGW?8n~Zk7JbEtEVzr#LQolKRD)9@Ns)JujWq_^RFs`lEd&ruyhCAgW0H zd21Gyf_(@`jBpGyP6}yc{dQltjAWlVv(D5^JTVG|<|tS#$$~%GGDloldVMEsWWE{1 zq@eGqP;)I^wu%doBP5l7m-B+`ye)s=<)v|^7m(+kt9q6V8eCx$HJ{TVr|QKdj&Vbx ztfu)Z*58?bA!7eB>Yzir1cXVxOAOv7P^Z#lDrqxh_oX2tci(>|P>=@i7=La%j#7H8 zSM+GKKNK4qXoAWzUd8|O#(FxMK01_cuDOo{w%XmhrHf03I_J?X#oY@PXkdV@&3D-L zew!P!vuq!)b*N@+;)VAJ#9Vz) zT)gFz#&)ZR53=c`9+i>~>8M_V2kS$*_5aeVZgD%dk{WALI|-SX;H&$5h;D#5T@ib8 z8##xq`}nLyMYl_I!AId`GJ-awG_8X&xL^PO^}P&5GL!%Rp9jI$?h^SG;T;e2%X>zv z=>;omXV{K2_NrEt!h5mgTTrld5g(osO>qsZNNb!OJO!bRgvX{`yaZiZSDY{h|`rLjsbsh6Nr*d?Enz1A!$122!-e(qlE#|hv z*8V~hUqTTQZqlTdU=h3elZ$%D4FKxe4Y)>M$$@m9{BR>Y#!sxq)bi?$Nf4{~4I!3Z z01peVWee{%8&1cy{oeE>fo-pgKYU?gV?aXw;k|rZQve6Vi@rm4tpdX$)=VN)!L4%V z%mKB57f`j-BbDx%77izvTH+xD{;QCTnH`0{j0^aqviuXcIyIpK_9Sp}$?0q&TI3N7 zi>aAfdF194!QSe@oIx4Jz4DlXFFzu)U|pTnK{Wqr0c<*a|7Rez{9c z?sO2<`qlr`W_%jB%hwc4lt`8-`V}o|pWS-ZB1wju+%4C1XG~O+7Sc!#uzqw&9JLj8 zAH3}EpCC_JU`?cf781^JP6kcaXZwbusoZ&9(-qbQJ+={ zN|Et&9G(M^_^!9r@n@}QXEWT0h#Q}gR|uMN?+TP?Z-3Ea`trHJ5M${&ER{**_#ac zcyk$Vyg3LS?S=9fUsqmHl^&cu&)%+Gx&l*4EL(3l9Mi#A&HaScEv?2E)amL}ZW=x} z>SjwLAqsB6!sMR>FJ%`kk>cC3 zCA0yWTba1T4r1Lv*rdlcNd&i0cw$C5LG3v=zF^ zGXiEFfA9tDVX?)<7#W}I`gHCqZ-iB&n9vb-+#K8(y;cU~VB_T2IGMxm1kTX@nQ6qn z72*>Wj?x7kEW%lH^*6&MM)#9$x6+|#M9|1xeE17qaJDbu^95(GbZkCWB<%oEjyLecZiesP6IFbpF~cWjVPKPEa(#2Gk~ z?v3RYeBITJoa+YkP1(Kl=}=T~K7Y)=w(}h^-%cHj14<00yj%GI_K$0XO#s=}LOr{ndc@ZJSt&Pb z)`>xc$qd(35^=GN3znHQrt0>RHT8eOGLnzLX2mdoJ1Cr<4Vwg@OEuohY<(Htg1LikDUyCE z7xAr#p-wR5Q@qvqJ#JgADxpy(KO z9t{Y^T~vZL$QC#VJwbZipctWiST{=O?}D(><#&BnXBYsKl)qQ#YO2u$Kn**v^@|F%z6;kIt#WwY#QOK zfK|^OoXr4@>X?GIcn(|?(c<%an#=OV7hXbnij4m^LGm_n1L_Jd(g z<09448#v}MTQj7<{$GDmvB4-$DMm5umjx*0qtaK1-_eSO)*PGq0cv&CYNpLR1Y|+% zTPIU(tym{f}{SF7&Cw0M13!4;w~Jo z8z)#uY-Uc=GoBlVqF4+HsvkC1KmW~iP_+W2%3Onu8`$FpbC5$Fma&iISBBYyh!@5x z?qS>=H%YlT8c9DkqO< z|K_kKACYBqcE6e>2_BTikOjfY8V|e~Ab>1enEE94bZ0Lr6wss=HnHEccD;I;%)V=R z@2C6;jk4x6AbgkDJ;>sg1L@M9pUpd7!^=SGC8jqN5?7!eexe9P(r~FW8xHP*aLINfR5;`Q&bg62c$po6izphWdRtFNwUm2-D6v*;ltfq2f@W+e{*$Wbz&b%&vhs5LwrwQl^CLk>*?9O(CA-@*zn%NGnYZ z$1m$2I~^apoTQRN|J3|K397_5dg2&cj7CbN_yL6+?*R^YJtUpRPe&RYjUeQyRxTHn zKtH!Y;zh5T7>Gg!KV75&Z9vcLgo9x5wXC4eZs={G=3(@gus$75%TMNHnY?1@aNL;FrksuS4rll3$#vK-)Y$(M}|A0b}Oi#B_YW_nxVGP&Z7u&xmww$AZLgqVCCERd;e}@vxRo$*jTt>lV z$|9y}!vj~xQ?)0kRASB;!eX%sRZS$R=yD4-hC>(JxVjX)9F>{>EdlFQnAK!DQL7>0?TTCw?B6+3(t>6XOd>#6%RY4jR zkG{LB3q=UW|40AA91=g3+0VRPYaioV<-fwO4>mLv6TQ8wt%9XH_TgE$v{25;d?dHs zp_ik%mvDlM5zw|_{+&;-BT6Cj<8$SyEqz4@MwdHx~Rb?Eo$|!v_?TGD1 zErlt8;H|q$Dj!Kj4gO3#ulX1#haK;%1cS3*C1+9iZ)3KQl98=Uo zhEW@bVL4BGoRS~o6peFq))j!I&m=mGOQ20fBq*9Mbbc$+Pe$z$fA=fBD|TR(ca}pS z!cf)YJn>iF*FRpD4Fq-+m(KeD^l@FXQz|-1v4XoCFdJ`TJmI;2*`fX;BqR=uhN{#G z@|n(pY+9IkDIU8hCgCTW0y#2h-PBEB^QDBjwNXzj|BkU?t=k2Nchrs!T@6_=UuLh( z{-$!?^v*PrONXasn*r>JiBSG!GNjuso7i&@%S?v1iB&3M*?6NWCf*1e)=1Sqw9$AKnTI3+OAtM`}i%*R% zB)OP3uXy(rQ@@*xggbIC(_t9Ih)gK6R4a#7QoF63R7Us4juFAPq~{S1ndO}>8`-6MXVkOCDLqnx)$AP zBge3MsKM0#{9Y|t=lo2Z5xyT(kCS8R-_QSNP`x{=?FzzCrFuFF15RGYf-E+d-;h~OWkhVo3!Gj>VD7zS)U6|Bx#?XB!maLiMK@*Q-%msJZ4uv;+>X&( z<;%vNxBv-6MCw5TBo@i=bQ-$c`T`M@wY99>?C_jIR7whCb?VZ%K6UQA-rlcJ53F;8 z!Dsri2(4tQ|J);?EtG|egu5fszwBp`Yv`sX^ny=GEWg2h4s|$M%FY~CVY{{17iF7};MnTBq>S0=~>s&Y6ze?GCI(K>Fr z9l}vUGrzeQM)X9*MX(}q)RSNv=s6>MK0#j;b~mCPr0?!|Yl}0a&s#RT1Iszbg!JIO zPa`M|`ws%J`9{P)poOBH);m2LjDJ`2e;}!>Msu7e=E@T3+bnYla{JSC28eJy$wD&- zMlyL`ifpH5s+lI%k|@DVDLxgLcsOK?8cUP)+z~3uWtNbGU&}#!#7&6&f6NY!?>0M! zsuW!d5a2t$@JqjCs1Wj0cUoydcR7I`OTt`}H00C?>5p7^Nem#S&hfh(D_|pjcH1SXT~qqN{4OPRiLvvZPcQE%E|$Uwv3-JJ z*2S78-8ZFh0@~p3-CO6F3#+M4Z2ILrMP^0L$HpoD=_kSQEUeU6(83?agi62A4@K)c z^!y@@0_u@zBK4j~%CF~MFUdT$-43)bQ<=hn4{Z5qB}r?m_Z$<2b-2*J)Dai7UT&iA zG*j);h6SZ>+#A7<0Z^V^?g%!A@-Tvt^7_jVqUqv@)DTrd!9Lwqh$eHN+AVsVU?kDAEKWq0~9R$UErR z)3l@?g{DpZ7~b*BzG}>l;n^IcKUbH&pibYnHGTAMxcD8oPDegaNQr%9Rr~j}W-zuli$_?p)B_Z|*%EiXlfmxy5vfR=7 zN;7!jsfpApiJ-+7xXDvq(LqIPrVR;kGZ{;PAjioD@_Gh6tI+eryloz(bK3YwmC?H(Q~@Iwmv2 z&DqLY+3s$kv)8Re_CR%VGktu%l(M~jllx&QjPFs-)RgGq63~*spUT*@8J9m)twNP#3-7T#cKFh=Q z=hK^6p_r|uyVvwS-7h4~J>9)LlIErj%?a7O5%xhxI#PoML+l^qNwAWNCPT@|RXdUY*|k$KvC54B53*emi}HyT{Mao%FmY9PsO99oMVj^oIT7q> zfD@#24q%mCh zPSY*wco98>SS<}dg$xG^rCc*i*v_q{Cm~T1Z8EgF{aD(^G;bM(nYfVyZf6g8IoMNq7PI*qe$7bqd5L=&>@$bF4^!e#hcr0u$hu$K0G$&zB&|q&_EJ zf;6?YJf^oP>eoHS*?bMt*5JOs?B|c#_2RXAd4VW}nMcB|#@AT)u?%Z$w`n16JqUo0 zAGmgycUT)izzE+-(J_?8ZIcGh91XD_4}OEw`fPUhlaF;Za&_CyQ}!u#BPq zCWhOHF+JE4uS!9r+fpNRQ1G)^Mqju8tDbaHqP<(t9FO z;UE7?D9=m+ zXTqMBQK_3zF5BvQkZh1*YOG!sAboG13s%D@@{zK)MQs#Ke0pn{1K-;V)AU(+1fvqE znPmK%5V>5}=oBt34?Tnf%%%e}VkmsH1r>39R||P;(XB+gKsVmmHmV2hvWog=Y6roXGE@K zUz&J<$CfJYy~um6y=$(OYgPJBWQ07K)GN}yOKZJ=TdDb#X&6>!jy0ACutU-*aObZ! zo}{?7F`N>&KP76v4qXjt_|yv`W;@kCI%qb~%A=jB@Z`rU<)=6cbZhU}c9+)Uw-cT9 zntNU_C@dX{-lCKP3b@547ZHsCp_~rQ-YtZrwfF?!!wk*R<_4BTxNYXa)nRM;pRs9$ zvE#R|y5(-$b2z{hP)kfe4?!W$)hI_$L8IsZiDQb!Qg{w%(+`PF0XA{D>K*UY6S8TrMpO-%Nu;k`UoohaBzC8@9?d?!?h&x>iP zWwjy^Uzx(~i#NPkV;!n2Ro)0)cY+H9>rt4H@!J4-hp-~lTUeq>mD9yxLgt;@=l&-m zezNe_r&1D2LKE0w0W|ReXFcx_5moQ*IVI4?GA5@Ob+(qB;y)fgt`c`2plfvuwuJMv zvj=V=hR(yG;RA9j=kM!IPi)>7u$6)w(rYl@>!$q!m<}uetg176 zOb)xRT7iELDn~eLO}ZpUAmYt*4fAt)d}Fq%=NLK~Tj@hPL=h*aU&Fy5lGIweFwXj1 z+?77}F>$aBLEcF&zlJxU6K66j*(QO~Pf!7DX^B-p%|ZG>(do2m-bX3YEctY=ImA1ANYi+5-9PT(C-W4w8&IuGlv1ATx*yU&8W@il z*p)MVUi2?8X2d)eVZ#w*_}o;M1e!I-F0WLQ-1-3AJdJ#fQgo5@VCzxL*#x;_^_eG| zp+ujEDWa5U-9=p7ShnKH-WQ~h8~6OLv~LGy$$D&oJckQyJP95gUH=xemc&IbG;4T{ zy))3jIs|hrTnvsFQjdz|#DtH>zo?`eYGokthAIdjx-gw#dwwY8d|F~}yV0%2-fiI@ zVeZi<4iqA&kV#Rn8VbOL&8+=XVL5g8+J`t@sz-_+aTY$A`f3# z!SJ_#>_eJGXYe|{^pkXc{Op~|rAY<8O}|#q`%kLhUg1u>Nh|bvU2J-=C0|UUPS|No zpZH&O(E4wZZfm=;iH}2VsEwN4?O^NHh2#ire}aLdzLi@975=;m!p;eJH4M?;|8?!jL6>!U3he3VUNCZ|1rjNc|sM1**V@mWAR z1{f+7UXEt;31!@Jlm%tu5&&uMWt%Q6COf7|Qib@DKxbyUO7F#2Z*=FMh(%Cju41*yBCG`y?xgCyjr)x;#uJdt?gCGes#zgcaAHIYIN8rf* zrwk+jXVrp42?zy-7d%V4nd+sTGf;>@4yD1zEI`!yTU#?MWW&4O1-PzU*yWij7RGp{ zlThkaVI0#p!z%aKM$a=U(-zkST1CWYi{vwncn+Ee(VN5a4mZA}LTQs}b#_v?Oc zM$B{Pu%k?CIO9m%`FCOLb_9NqBdNFP!H1o4H%;pF+p7GIxeipP!Q&s49XlhP{;Qi@ z^I`AGv!ULGgh9-HInD_=u}@mNHme3s@RbWJfYMwW4sAT$9kxCI5ToSkr%bijkz%GW zZ+r0bdu9w~Va2%ilBeoB62t*jzt)dz86VsFf)W-VFK!; z!-;_ds9@}gbM@8iH&@xn?Q4cDTJ72>1FyA=%5pTir$mh-%cMxhi@YzK8<$(O5S5~V zy@N@48aA(d)V{O+7_;$Zyc;V;sq%82g*sw=tLp8^gYm^$Y^Rs-e;gvFLK#EsxX@eT z^Yk(k@*+&QdSv64y0X%tJu~_V>+hP7h4pO1;BpA7^~UP3U9>}O z%Gs-XBk}K3%^M9;jfY?i_}r)K8qbUyw2|R6G*lcGDyM&>X^6E!^V7pKA_6o^#dQMg z07w&0KS7c3q^Ieh>K=gua_OFnGzwOS6jewV=G5sY00|+M_xn}LH@4pKlI>f|?W2jx zho-`)wP6d;P<|g${n)|GnSl8qWTL8mA$Xn?U4q8vA9P24jns?cJh+kg+wSYp!HxMR z2`g}C#7d9MIgetqY;-0kLRzUM)Stf$L)k->%v-Ez203jWKFCX->d>HKf{nIW1Bg^p zvrHrK69$X)_#u$N|%GQ&*0mEfpP#^;}$ z!QIaz3;m5Fc5TSR9U_xuAu&(WpPE5SL^#!SZkW1R19m+8AG;Dh#nX$s1KT@t4iEI7 zblTXh0)wW{M>EseRRPg4;P)053{1h07K?afQ~ZO}r-#z{6^y zP36}EPiK6k5$|)U_%olGZjd>F1@d%*kZt;RU zj#xXX1m40&P^;a;D?wbp7+!Dqjfi|$x8oET z0am1&lnUHM;7?^^eZA*xSZ_sTv)kt5OLi7;n@dQW$)zyqWwdb5&P4w`ql!szV%hgZ&52NB=8F=Q8t0~ z>fk^M{E#hdQgF8i`wz8j;>tJO6)X2q_=OvRcFVTo$@)%lDF- z_WHiykFNv<3`27(pGTIj$D$6r#G~cKNIT4o3Fc-G&VzTX;T$(tFl#w8sy%okn7HC1 zgD_!iR+ImK2a~Yr8njd6Bd;jPy(2TFla$t1TG|h$3IZ&vBrEv#$|=1hX%-a#LSNeZ zp6m_c-bm`%-;I({$#B$eFk~&K4X9r#y@F)}aAkAvscrL4*wBO$nM}oym@`d>@^XS; z5DCt6St`?P>jK2luAB0m8G>-u!ffluZ;)B8sF3_*%@A*O{}8?DH~*4l?!p{ZDW1HF!B6Q(JICY-Wx;)`~;+wVSHRR=KR1tgqlvnB)No2Io03Q z3i^;Pqr78vT5K^liQtix!x&Bvn9TFZA)fEK0fnf}7`7`b&bL5phy5&3Lu6TqSRt=sWh=f^&rXl`k{n8;E0+ZnkoOEdNrZP?d`OFyBH7Q zsK!mpz`H(@$hYPdzbPL~sS0!f3A0%$8wifMM_$SqDBGC`b&}}i7xKWvjKGV4DHJ3GeY=6UC$3w`V&$KC~Rx&Q}JW(;Q>fs&7eMS*2 zRXmxF0A_|+K1+>G)E6fo)3*@#06VntU`QQ|s2MV9Gmw|}1so+Iu0vy@CCn78q~kYF zsBIn%Q5=&S`l_~8F-N9qlQNI8TFe4A99eX`?Gu0%q>X;7QW}^QjY}kdcN7io=uaCx9|d)P)*$h9tpfM)EbpQzV_X4=UD6YHDH0R)?F^*d{kD|GKlo^FV=|P?R%k$Z$ralSbYvIf#-$_n;N3iI zJ>DxU72M?eBZvinh6cFHYOd-7kDEUE%=%KrJ~9Pr{DV`dpAHfmzh)h1#WPz$XbTgI z!T(M&45AX_vge@3pb=r(TBxFPO!^^2b4>lgtbGi!x?+>TSdZnS&C3sRG=G~o zRIWdt@_0}Szy7#vL7_&+b?uWb1kfJx=Bf<{(MjnLRTM5IYlT7#g#532&vE&JYLCDM zK*~3%an?J!M^YJc_4ZXPlW|KCfo7L9MAO>1 zbbtuT8VnG|p9+hi&S$?A(e8vS1=x8sg*joT{-lOm<1j8dmAkP7f+c;b#rqxUjv)YP z4(-o(R#V%@N*{0U7dkZLAeq86Vk*d=j-$z%K+ZWkAz9u6Il8fSC&>Z)Zb@>5%0hLz z94e_im+%S<3Kr2HH6(F8HT&lO;d_dH9;s^lvaTt62Yf&N@;`Fbn9t)tl95l`|A#Gj zz78CLWt;Y@=42H5r@xdFtv%`K*87Y!h-*7L^GHv?gvimF@9A8zT8ONc=1jPK&tKJxAGw45B0esLeKP96_d+9Z1`FkX^ z&>?_Pvy50a&Zf>#_R_yJ=U}3bcTxwa{Uf*1P6d>%tgD^ceh1j72ifW&ZVad zma)>*M_fol&J}uvYbU5hrpm3)1>D&%0XuQMWDbwn+1prQz8jc%XLZRZvWk3X$+WSk zWD~3q_$6YWXe;vvgn(vBS9mPXDtNC=lOqyyvAZ1YQ3!4XdtVbOJ(PfA6ZyKV@d^dZnbkU9anweI*pG zQ}S?sAHrdg6-twyUM=rO!=;!`|pXG|II4j&C5CW*k=H5C0j-a$6vo8F*WU zIEdPRVS|jhyg!%ptHR6{5we!ktZTiM^g@eD6>BGF_XLy9?T8_w;Az52SGvuxLux5n zyaP&sgGnb!U65aj2)Lndj~sM#lh`*X;3yPR%n{kb?5Up>5zP&vu?3IuIq+%n2?nvU zkHBXS^u)G1wqBqU{w*(_Zof+ESsd40kQywmoLT$Rmh`VgdxnIWPnef7wIeepW##-O zMnDzbOo5Z-asKQk0Vc(2e|1PUZ9Cs4mQyII-2{;H66Hmiw-@SmAl*%bR->lg%({<`-^tvLt@k@-IMmBmPc^!`3tyyL0L1f-|-6fhqx(XRSw(`?|gfnt~6Bc^s|W zwke*4&{H$(!(`Y+3>6V_z)mjFpXWHsw7NEs(lOHH^GPtB)-LkD-NfZT~NxtMC! zts=VJKe1`?ptgtVhG{+bmpk51QcFFr0Ak_Kgv#?mzCo{axqAVgAT3W~B*nKt1Y&+9 zkVHq9i9hAN`_V0$ul`EFW`?jbgH_)x1@tFV*K)Ir_pWYQ#6xJmiM$ADp(1qfA>&-B z9Az-RU6MY>L~Z@`ZCx8g?i{so;h@q|SDYi>q6_jYWTKSLLfm6NL_2>cPxD6lSep>f zrt4P(J%R=(Z4HKJCfnc@nyYQHzb?br9kaEaTha!8a9r=k?$ZvnCQhf z;=S_*-N84LfG}@vUliV=+UM6Y_zf*A7{R#;?jGJROn3Ht>)pBcisZ*`bnhDPxuaA2 zuIzw3Dhb_&ANLBME8`Z>pu}zksTF>cCoM2g4y~mPa+wZgfb{??l3-OwA|;_&wu>aO zrzH`{$|vmhTwEI-N$PO#Uu%uLdXff{MmXJ}vax9h1s}+M^jW&$l;Ao1`-p6^o8~^j z!S%@n+#cP26@RBxoxh%Q4qTmAS@wQ@{A_~Cwk|e+3JP**zV%fha zhj>*BM;5yU4wshoxPb6LKl{2HVAZNQ^y*igkF0^>UYt;82Crr|t-pV(TL&{R$ zDd%hf7>BxP>OP_#9N40SK419MDk3tE)ZJ@1rR&D;V=5Ust(SmUv0}2V*Md}9X(q-* z0l2aaFp0?3bNLuU+ia62{5Acu7`m6byk|jXDl}3FfTjV03!OP9gSsj*hQPzL0<6g7 zaX*Gl4F$ard#5m62&HC7@dR%R-AXIMMi-ESbXW0`^W ziJazFSAy@*TaY$HhzxDko@{RK(IUt=TR;vDA|ZVI3^_sy%8f<09(LX6?@THxeDt0= z3b44fK6IrlWr&c9ngChctpDTjfPyd$N+{!3Udte`Q3v>H_c-t(@2jT~muc{v7Idd| zgBeQJM^zFmLI8))O#@ml}K%ggA zJJ4Aa)K>b|cj4Jq?bgiXV*oINOHZ+_wpTl%{24^z@iqX7^C1Eokzbmr% zW}tfCI?B&aUL+}N*^gz9*I=Iv5muSTWJw+?BB)~aB^4Ish?P9CFmKI8Ito^-|pHS$_f?h;E z7H5)G%F2b*?qIO)ZOkvWMx6X9+SO4|k?=^=In?wW5OMWFzEcNX1A#gQaLGZElO~Iy;k#~1VLFnF@<+vyvnr@vc+vs5^G09sq zJCCD`&Be#PnGW@@qEfnV}RJ(4`DtL>aa+t;1!t@%?t9lB|9% z5#TJu&E0<7ymK=MWg@^swB3I~+Qf1X?b78HiYb1&yz=l0 zG*9_O7{8RxAVA2s76xe>;o|Fa=o%-Pcy=A<7>uuP)e>O#PlRdF(ljnn6k|_ddtc0k zS9(AI6ME2^7yktNNL$)zk93&yp!%31UrCydQOn0UmqM~bJ`NRMyrOTt&^ zgX1f=c^CAeKjc#V{?$)v+0k(n>e34=j3bHBv2*j1o8?Ne#g!%P3NgC>V@VIVlML1! z8Z*Ts)mr%@mi7YiR znWAf0{aODZ(eX4QKO8+r32T3G^4pj%;qu!0WF5Lm%bon_@fi6x)cnp7YuW{Vn^a*w zJrbl#29|d|;}P*T#i}h1Dxl=DY!+a4?+y0yD7?O)K0l z2x=A)C0i&!;zM`KaG9y?VYD?|u8qaR0OXlKCNmnY5;)%+sX_pR!IC+W8UPGeZh-}) z2z7R7fDAE-?q{8(u%Hw6V}Ck`W(g!#1*)0IbBg-CNyp${^4j;>#Z<(ttXwVnc9($q z!RNPYqXD|M6j^vXeM_lW;t)N)ZTF+wiQyp%>ULEhhw&qpdXGz9%WVlnlvPUaRnQ6* z`wgE8n?-Ie(Dx$BUi3TikJeJcLX?DWanE_{j~;C1WN-M1hSg*L*=t!# za_j^A|Jb<*!GLAP4~B4aOT6+!Bj0^+D_kVu0V`uhj9wFo?Iv6|-ywhw&zwiup6-9_ zw1$|+A}i%asNV}(0^b|-CG)DH)n~7*lJwh&zrbq8Mnl$&YwGLDSN-=2d$ge%blebE zT@SdHI=uzDxjLE^ zqqfH2aF<`Z4tihvsmb;cL|AC%jW}22vMH& z8tP>tJL2z#7H=mO8zrknSUS9=Jbifk&0876BJW${Pa?AR+7_hL@E96Fr3k(%E5cf!?YA!^D``G7kLvE z16_x(RQ~ktSG;gdz{Q#2Jc{r!6KSzJqqj;>jn7kJe6edRZN^#KgiAZ?*5gNMnUU0I zqLTheYTnMKi7B;LKMJ{Q^x3NsENK`c)*bXtj%esRaw%Un7uHs}hr0zy#d`LIL~upu zv2RUJ!^o<)?^Kbm{?P_;gJ5$Eemokvs^9CUD=$FVKK@YT`hJi zQXmTfYBK&GLFjtS?e+b8LzgHJaJBu-f2V^Uvohg+WU^w?`N=wx2xN_xShvBSc>W0t z5Olv6u7!eQ(^zqcQ|AI$#ZyD3-@8AyK3GQbK%OK&Z-+GjW_1vKLQAUSyOLtxnGlcL zi{*(&mLo@MbvnW!a++A)Y5#as4dLA&x09G~myuYofexhj-uZ<7^)ajwWv; zb{I>F*HH5{IOdyVHhZcvTIMJ=0NpYtrY>eF3PaeOcif`oxXyX!WaR57;QG=xS-`8h zG#IHEt1QS*_DcPDj)w+_ocs{y3Fk9=`BF2UR_~TRiXlU~|NdV9LgQ4e8d(39(b&-d zZX^P1CyX!>T9+e-_TzKr!z0IcPahZ-{CPH)05mxrWr;ks8ah0{z3!e|Vt*LBP?^OH zdJ1pY@cBNQGzVFfXN`dXyD^dTK(=GEG|o-d2sS2P6N7JYvl2DodN`SeZ8(>@z=bqQ5Wz=At!Yo(hQl-<4Y`Lk zqk`7O^)!jmW|kV4gE9tb2&gwf;a_I`JmpTW4xgrIaz$9FP*I=RW3_lNNZ;jtXLKyS zKo~Q@V>)3S`$0-=(7YZ#+yA9%B{=Byqdr*AyDQ0ocYh79m#eI5kUvi@WMV((V!#1= zErgriPQWfuav7`yDq0r-vT%M}T10M&xXhw9`vD*J+=x6Q&{xy`lGI1CTu^qT?ONnDV0wV^H+9I-L1DSQ zU;1?|X3rXv3Z;}X{^A(j^Zj&3ny;qs&6~3x>Hd54(tDiR6n&j!4&Hx2`f&FSa0~iS zuR)(!@9i4?95IJvXpFpAl_5bwX;1N(^dfG$K{8x$+H=15rF4!m608fS`865*9MFeE ztbSLu6Tq~QWr;EY`E0E?0{E#m%FNs#j0(M8;q16kTSJlecCEE?`4Yc(X3Z*wx43QF zULpYuud=ifa+%9(H4xF3VRB+rVT8DkMorj7dZrX zKS|v?<}zsHKc7e%rPogh4`?N?m*W(wAkJs38M=zC4fYz{-MQ@@vZcnRU_yjTW9IjC3gpj>NUemQ8s8%1azp1AVqpYz% z+i+X5o9KKgcgXT`kbL>;9QduLDEREK!O_6@i5xxQRYHwFDmO_`TCgNm^i;FiwlQD) zv}R%D9F8FSE6zv4-y{`f_cYhY4DoU3Wx7x^B)Z3x~HCj*MyR?~|` z>&;1p9$(~E_~Y4x_=S1v5{$Kf_-FQ`upWhXvkaz^CBQWNX_nSvuM?Uz$!YnYxdD0o z(Lw>qYz8MtMp?8XN^)fpjZ|i+*0) zF5u^Mb!jN3F)VMnh@v+qca&=jSlMgSo(?9Q*$5-!(s;(?>l&h5jQvkoE#E(9NSp=I zbOafCE{|C7Lj~M6CS{yX+H90(G=Ct^b<_0!XJ{p)M9%q&5KTqxdPEw_0-uDsVZrJ| z0aB*I!L)@heK7(RX2*L7=ZyMASc)Y`;0#KzBc0@5F;XkWzdK<#!~;|QJEtr{!^z8s zMKR@mI;Y6g#EoqTctZzX4AzU-=jO&JXyn33HFz;@K|NK;OU=oBCDnRd6%&OtdRWeH zTj(OtG2R_lEi&!y$PVj%ur^>-~9m>C1Z{7 zJk@KJQNar*h-(65Y-`L@;z6Fx@62@Hh1}oBh&k!pGGqBqbIuJup4pC9K`O>CR)N3h zsWs&x$#xG@ zobn7UNa>KB+g4UtTm@IBicN`JOQv_p<-`o~cBg|iOGawzD-S2vieRhgPEb=Flw|N9o zHY)h5Oc7?A$p)}@b|x81k~MrnRUX7Lek~49L3EgA0+-kG6mSOpx=K9P)~*2OS6f~Z z=FaLBu3vMuC-RcLpB`%@)yqwf96=dW1V`9GQywctz)1}MJqeKXE$f;>m;rKcsxA(o53>S*QB4|d(N>vgbLOKX{nC2aGI#@o;}G|v2L%S}aM9#u-`e6v z2+OcMB>=bw?d>+!B^1fK3KrRH4pq-ixZMH5>w$U1V$XigK7uEf_5R1}_#0V&fk2zM zrO9VVbRBXk(!1NIvsbs6>Xrj+&8aVOK6v7gy^1jbJj3st$ASt|Av-5<{{7>Vg*8kp zDn43353O^-l=G_5=NIy965=mqyyi=~W^Uv^{xT! zkBvOaDTu;ae5T<|BS$=@75uB3-G7w}8K$O7Zh>EGMa|-eBs`!4gX8lud1r|S(8BNS zB;)}L_<{96NUI}|7jS3cWO|hrny7Z-zAqjA6Uj7+5K0ui+e4;u zHU5-vO2tV=fovQS!ZBX}aJlaktj{dmOz+>WHweebAq1()0 zZJGb`QJaWf30SB;OoU|5)4yUW->(g%`NaW4MT4zRA#w_U=-5Gg1VzN&l8`@XR{_am z#;Vc~M+E7Yk%zJzOG$%&$7524UJ3Gxf-0a2T2~uv1S=L!!Hw;lh^Lra?6=7Df+oZ? zpYIjG&c7VXZ%Y{DgF2O)dwYJ?+q~=OisJn`sPl!x!ZWH$#~&OZsWM_M^E>8 z?@Qe2s(Si!l|djN83F|M7SCyli*G8Wc5@s-pF|A#-1gZ>NmA;Kg9m8|)A&{GchCjn zesqx|82pWq2m0kKQD=tHA!a66d3JBP?OX{r1jgR|f>BGCEF2x#a~pO(aYfvujaiC|<3gfB$azzLn7e!8c`_p)L;R%HMjbN?U(@ z^g--w$>WX)BJ~`j+s9|JGazl~t=n0to<6TBM0X*q5e`$hYVhgHyAFJ;%1V$M23!626$Ha^8dAfGT|q_1JJ}cA>Yoq7 zNDL-T0P^>i!xL|J+ibUhI#W*ac-`z}<*irt#b`PrlzvK%0UN0eDp3c)cf0)w56%?j z{(l4b@kU$A6<^!1sX;x6HSDEh*g_HGdiw%?SaZigMJr5}pS3)aj3kkXnQoa{2-fps z?}x};-7uSQ$SW!NSChmbZ;{8TkbMX9+IMb{+xVc)2@)sDeeOEaC~P`*lwN=yq%C0y zsbg#3LjQGjhq|$AkPqlItO|nqN#0)t7qJLWXyI8-?&QrDJ?pkF6@Ec;jcpc!?N`<$ zOGy!r`Xji9)aPWW=6zGUFJzJRi@{e9zs|PzIDTb>Esa1_w*yNqx*7{bDqhwsQv*$& ziWSGtrhqwMlgxatr*+?=$ATNRk;4fKGW!;RGU-4ykcYAR({4^LnjqF6J_a5E9NK{f zY8Ya`ziKk#Wu@g0;u&jqm!St_8KH~tRR3<4g=iC>Czvr%G;#7bhu}5hf>dZ7@(r4v zjJ&<+1aQmxb!GXz`46Nh?>0QoKEqZiU7%|o(;J;6d82vjNo>!E8eqjK-2A%19#3XW zaWvTTa@N?daZw6)BCCs5Fd;71(g~Ir_mzVXO1J7+lXDWa%9-|^m+hSR)WyhizM;>d zM9KU1*Gla5`2C8h9yu6!2ih>}n&cFAPLP2S6`(MPB;9TKs1x*qlD|X(@_EGQy(F>5 zQao-+)BY}Z+c@YDm>Lt*P)}3{C?SpyZmTD7d(gDk|f0l{P?n2C6y$MO?g zE8-CDdbZ3jL+9zWDw69d8xy3x4gfz!UkSW979Jo^7N*+$58}?{4Ud?utserHWui;< z2z0+(-4YPq{HLzFjw^_6i!p$801CZL&57jgmNlz)XDL-?zp|nc1-G$^U)ayqq_K8nqaTbylankARwCT z&?eMw=#naxh)r4ZJHI_PCckj@*-CoXAQbq~YIF{crqESi7Ek`tU&$g}l}T)1bGb!~ zE6^(<+iEz*90vCLUsRi^#<^+TluScMS>`}5^6P1@Bm++2s$Yz{ca%ClQvCAiD-~wV zY4yji2l~y!#-y0$pnh^BRHr>@X;*>srb_o-o1a#4xv)<5E`dcl$v2RCjytlW{DL5+ ziS+Cd^B&r!w~#0+%z~tW^XU9mKlur}DWPhhu3rBvuZHaa{4b1Q7TYZ+V|}`odVyozxC2WOr&!DzB?U6!e zIxoXm&9@{I9O$ioNteI*Z&kUE0eH`HDIqC&aq&+5me{0ziQF zX1VoJRbuGWp+vu$@^vE)z3(G!AnL|sc9J@Jl$36QLO=O0M)y@q4fF5Ei`UPPyPCIh zBtU+2PpU0SnqSoo=n{1Q>3i8Pduk(>h9V2<_y}lXZvKl!xr5Q^w%!h+)R}Y9ZyF*i2?$rG)h7TrA&f?>&ttYV6_UP_~!d z{6fK(t~Fc~6J({) zZqz!8rq8>T=e_$t--Dl#!|B#$sxs2eBi{Ny3PCd|0{Z`{UzB!Nr!mqm!L<6rZQ=<> z{|7&nxg<#h-vG<1NDP`>onCT zm>5;PUi3u2->(YBG3Eu7WqzM4;ji;x()W0)F1LKCA zOIBcY*m?nrp@!wba53x)w~MV`+qhZ>=d7NKXddxo^*S5eaOy1vBNCTDD&6J+`6}oY zn^HQd$jZygs-|kVs$-DCeJiLvsjIkEef31_F+TwD_G)5lOxzi%_bs=@s)jp{FEX?? zUWvcj;Y)NI{e*!m-q{^o>HeFlbp6v)0Ki;*r{n&!WECrN0S9^T$yzfSNP9$$4-*Dv z%Zjc%9tRWa2mFpY*ezodwboT0EPv`;|qyYd)^`&X|GWy)VLnc_569CSLhRWL$=-4 zI{Fs$lb}q2g784oJ!WcfPRJ-`$~8j*2PCbS9)6B`&8X*MMgq1~z4}O|X4toKN||aW zBc~bFtIEffX(x5OxmH8^H@X(j!j8%6;womL{pXLx_A`h+AajpYYNEqLY0Db2hI!GB zQi&fYd9~9`8|CX7ZP$3o&b8sJ9m zwP^J{_r#O@w_%Pyq6siX@_O@CJ6iH@0<_uCDd*oA>$FT*0r;|f;FhA%Cz=A~TTnY7 zF8)liSWN^x^uC6ArVTu%&{ZAr?6gG#$%hWu-0X^d)IYM`JDO#ws%05vQG*_|8i~qM zfGdksj_V?2L5nd&8%5fOG(Q3eUW~03+f#4# zih9}3$w@;{#ZV4rBpwkc-;*#va7gQm0*r@v#Y@P)>mTcB1GuIdy}bTIcBLgXT-7KL zX{oH~HecHncFxR_1(igd?TefVpn>UxlXhh{CiOq!gC5`07nXHlXxYXM*h|?Qx7qbs zUq6Lh5DzzbMCkJhKxVbc^h2Gk)@Q1M%vb29P8(tHwo*%)03wpaACH%?Laptk;CsfF zo9=^>*G2xWgSDkeJQO(Rc4CPouI{HOR@5XOZ;vf0#@8P8*!H865a`t@jzuz)_vHmg zG3#Fb>E0oO@vu<72X!p&tEf}UQSS+`?SMc| zPYjBgIS^Xi+(f{Z^UO{}#9tHsbQCUkJ4Bk5Jl-zY5+X<+Za+(06f5jSexztxL&SNO z2G4~+`hhd_Dq{w5j;0#PF*QZFWjzmaRWkNeR!8Ws)Tc-f zy*OBnvsG?+%Obb(;zx+V>H`zQ@%UmJh|LUC!-TgI92OVAqW?Zt#l7T1?Llv$_5ow< zzDLTLTf*ef42c+8K{3c8y+tTGPtN=ZPg5VGRVnooZ47Jr@?hq!Kj`Go`%<^0s%>wN zP?M*%^O89G;_if$#Od18p#+7M9a&q5;LG>geDJ2fyD^GEPj@I~Rn8)1!*y+cn|N1c zI8k_Y#(25XmYnK6g+n?XW--Q13tvQ9{V@Fo2o;BPMj>Ehp48PX8pM(B2rZ}xd+xhBq4aNyoEACyMbaf~dr)^?G>oP&rL z82lj+?hR7ypJP=wCSv`ejT3L(e)R-F7x-uiuCwsA^;VoC+lw)0T2y3mTjaj4ePkq0 zp7MT>k=T4Y%-)IN@SpbMAHX#d%HVOuni@K!%Dh)1dT2Dcd_fv$VPp22Exg76yE_kD z#vU!;wS=R~cr8L8p_xMh$3ZO6tQLNpzE*Dh~HW4T=994i`zN3FqTZz6*C(Zs&BIZcg}_AxQKhqCUX-JHZ4(8x<;|-zotF|_m7Z+`Ys4({LW4! zOa14M7;Fnlp5HqqJOzeChdfLHFVQaFsF}IfkY*#L0$IJHx+E5Qet1*a6;&mpI~{(c z3DJS6IZn86Qfez5uP=YGy=j996U%{dvo&Pxr7kC0@JnEdFQiNHNd(M6)yR6&!f zd+e2V@+AIzGZ4!ku|Vl)R*_5oNa>>3vy_G@kjAyEo}HXjBsERX0$q!meS?)5U@#yVP)?lVp3681OPR3B6FFCm#4ByP%{|l2 zyV87%SP!xdPjxI?dI%#H+6z@*Mx!j!O5tRm{(;8Tn2!HonV$Io!K*ct(@m#$E|lO* zquS#UZg-{!(%i>mp&7tVqKgX!AMJt=-XcXnIm|_Pg;UM2X)`sos%8zzXPaMzKP-y% zzj*L4^h*haY9~1vGid``hN9QfWlyprzmHKdmeeT*)<6y(a>|;io53yT<9zL7 zk)EX!3}cLeN}{rXKbL1<8Qf<$mBw&`;(?0u`*evfjUw_}Z>MHT$SJbaYTgqRhIp%r zT1l+TjP_{co_iE*V5kHdmMrwS$|cBDhi)}*BqxE1y5v-zylB=-A?L0dQ)agmO)o2T zr`bZ$Rdjb{uyqz-6fz-qd{QBx&HetuF3;RE)q}}A&4kYMV9emMx)VJNcjej`);PhL zux8#%fHylHXY`q+x|DfXPYQ3A(!!m5waQuteD1V4oEDyD&xG+_(G>wEnG~Cq^ z?f-f3KG=)s7#wi`>ix|%~ohe&8mALRi`+S zova>_0_w9#U!8AnO%G|j(7P(d=6kef{wkM~*-WzWp;pEP+J+htu`64xyA{)vNC-vtx(>I}TyZG|fc4pAr`C?kME~Z)P z*47l-{?2s(c?V|sFhr9&AwSz5i*JIN?7cUOa*aS{j`(M`Kt%H@{+;hYt8}uvlj`&9 zESY`)emA~TfoztLd)GkDj87nKmd4b7vL)OY7H=vgk{gGL~xAJycPsB*jQSD{q$Tq zQHZS$YnHN2D2Ngl7YEb!R3}3tZD)emfZ1K>4a_n9{10skiJ`ft|86ueMcJu0i#k;Q z5VA?p0kqH7r0};Jy;dH%ajK`5GhvCl^iuO)ot1b1lKcmX6$bj!sy3jFJPrWwv6`Mi z*f8V#&3X5?i9|ckv~{pg1LIFCUK{igu+Q$+T=3Cb&biP1KI;xJXMpF0e=w5~pkEnI zm!*F8bA}5Np60QwNp(eAMEcp%({)@yu?Pu=Ml}tVmJu=q{c#HF_qqn)M?9{NelP{O zQ7TdLl^lmw4SeenZ8l{84sBDUD2x4eWHCO18OQ`X%pPvy>-rjAEn1-{^{ro{o0FLS z?sY|&;$E^(e68PRHxBbGhvA$qzv2Y8kmdENMnunX!2cHtVG2GdLofCH4q*Ejp>bJuHdggV$g7|u7ov5R%7vF@P|Ln?iiPm!h zf(M}Zz6_34#y6)Kv{NK2(b@WO*t8M1mrCwv|GDFnjpqAMw8gHx(NL0=U zD#|{n=c%4*a#(B?=0>&aG{B`?uhc$-D1e%h=|Tcrf-x__aO>#ELy>dnE;4Z=IRKoB z5~KT9;+EhPfYfI~DN1|5p$bZEKCI_|DM0ANk50dqTE7&ZF%#z6KOmyLi9v+V+ts|o zLfFU(DoPd^F^L>QCVZ6Omg$#<1UR!P0slv_7yU!OLlyr(h#~ye@y@c%b@dbFIlT|^ z5m$O|rFp21T~rX93)NY&nsk=bCGfwQ@7+QEq@*l*p<4nM@+32@W$a1SHzvmZBU>dE zMfY&Ldu|`6V?>taBuW3PgvG^THQ5R;`H6jrmVdT1A+xJm7wyb@?8tuF$=GahD54d> zC1J`Ra^scem|IPJq5xy3Gf3;@W%y@#>GJR3jhRmiB%xtu!?M@Bm%QKZgN^&w}m|yF`v+95cLKkr=Toq7Y)cc=Z=Cw(C5wEV#=pQmoXOmT$B`BWkEZW#6CG*ZfSa1 z)=q)Wk1!Qkec9)6y3bs$hFcD)kuAlYZR0ukvCz4`M=EJ_$VM}pBw>Kf$Ko3izpEFp zX$*J_P%zj3v7OUzUs>9fCyOUbv;548IT^|_IP^5E^@&9P6dD1+ZZxb*4;CLprNXiR zy+m#&y`Rz{KMH@c-X^Pa+)e#}mGp8(rsXYOek#@;KLLCp%#Au_xCi#@8Asl3kNGW} zmRZZ7MCWXPjCyG2cG;H3Mttvo7RmOAA1GfA6 z?uA!zWCniqXopT!9u3;B+_*YK;At3T)l~i6H!5MF-sZp)6ifQVz2>AJ3yW^7>+1|y zVEULPCNatggK7Q%HDWa|$PZJmY*G~5E#VV9w`$Q1ye#@^&req7|M=X7a?8z4@_AR# zIlgMLUV1cN_5?T#U&c1Osc2M~%Qx&Q>2Ok9nTq&(kotgU&d}&zUcp&rq5Y9TwHFX}qVE%6=2J1-K&$ewL--69$K$o7FcNud77h)kzIIVY6p5 z{@Y0gnWj)T9+i-;6t*9CB7kpjoOOE0zfH?hrlo4c;Bag1en}ej3Tq}O&uouPSAB|u zeas(GJLsk9Z$;E*@T-NdQUh;6Nv9PZw!DPS1Rne42lHh(5ACLPEdaM#jf(zH!fhs= zZBOGn0^PzZkKx9*n4@;(G_hQLMu>&DCfh_?Nun7Ba)cM{6p83&A(IrK+pfL;F)I;) zr%e3S-Cxazd}9jvS8-dyKv{Z+}@h4=4BrzTXjBXTKuyhAcY2Q zESX3sMLL`}2yU7pCQ?8&S#N^Vi(EG@y?R9a#dlP& zondl;TJ{|&6}$5k+SqM_-*4>}i+=!mCtQGBaL*{#N+*2yTTKM_jr7D+Wt=JT4zUTE zW*W*Q#yw?z1C?ICC-`>tUf2G$A1jt*u<|(cHii4L|8d+Ug6HW0R+s6?$J~42-Godm_}l1#?SGQsMkYk^o@t)8(Gk|4w;`A>EQ67UfI5D;_ zH`v!qX&>wBwpBE8M#ac#iI?8_rOmJM6~gB!P~l(GEW6-VcaQmA5}tN~7)rc7R`jkv4stN=5fkli zx_fMz_!o=o3HC6TShaGLzkw*Clq&h*cDfIaD`lUvQD1KoMK4lZJ8Wm?n-9>L{Mo)p z@OaEo&N6~d6l}z<7(yR9%|&YUs=@S-1Q$Ho&Aw9&{#?$&I>^Cn(w44|;X>wvxv$;kr!~_6^&V_lOisXg=T`C zt7&Lp@T@)5_J+(@XK9S*Fw2;6M=iF6Wqni3GyVq3U5V(sP~+AkFd6LVZALhw!iI5_ zzQnFK`DDYz0jrr<`UB7K>k(WJs^{KBrLQ`6tVCX4?#9#1ulHQH09^_696?>#Zf`XX zIj_fap$qLC!k*YTNH6AI#AEfBs#TaXPkn^SLR^Tn{#rBJ&S!xO-8Y(xn?J1~{--<2 ztqzg#4t%aH=p45z_`Aw9?)5fGRNBj4IoqS5s63&3o(?SUoJ#ni@He%7p_l>MNUrN<3G`(d|@jtXv;(X#!h@tzVqCgvOB4{&T`W_jPCx z^|8;CW2Y@_{uDzAxaMdmbc|UVe4^BPk=+0TvT9;v1i|*vh?Q-CD0Gj0 zpMJ3F19f=siiZs5pcj(OCX!jQX2Zk-F=kR`D{+xUI&MC2#_`Mi*+7St}dr0 z#_WbmOx%Y&bMITwO46{33ek@@UcNL0hJ)wJmrIU%`|Lop@0RN51=Q-yA!J=YNe48- z=>Zk_m1q}+x|Je>T!pG`iuu(9FZgeat}=%jX($E4B&c!lb-+hUOLNeX#GZ;1;RjOw zSbU9(b3sDpXy#pksvLv&*5j+B?v;|-Mx9H-$i$&O)F_T~C$5MMgg*4QKLTC)LsUeJ zp8a-mT7{Xpr=hhHpw68N?dvmNVYh32N0RjsK&T7#b8bwn4i;;@eA{Xqa;0(3#8i5j zeS^|DZ`A9rxV~kWyocQriMDoe+z4MXLg&5^EBT&uzQ8SRWih2m3QAT+<#Gv<^u3lP zIi9pyZh?Whhei!JnheG9$w&BPKI45^{eh}C$fX9(gtLCp`}>Q5F2RzpMUwkPyp$z{ z?w-55yi!)u@#8N~m8pI&4_$r$+3KJvJEA~hVtFqR@*#s#l705tz0uh%w3QSgBunHD zOZwhu6qu^gE9mjy6~*AJ?3WaGK2Ru24%#?1@g?^lG`l(1 z!#8IHEfUQM$Je+sVdQrDJV`9$({q##WkOQ7SM$ud>;w^`E_hp!*63r7Sw=+%`xJ-x|OarYLe)IS+k-8AZ_`6qQG z#lu6j+FUOaR@8Z!)gpU@%trbBOJ%0KZaL}dzJD`Xb2m*@82n`*i_%Eok{-kUlu0tEw zXf{&mcjD0lKMJX9ColE~vsk#0tkr({N8I5%Subc+qVr0Z@ZMa?Z0u-gSgJ)ZDOhEw z5XFT_;R0O3YKhhE>Fru57D(&qz`H*fl1((aT`!pDo@G}{ZfHDoi=A{ZCwL0OjCu== zQ|39ML9t8|GC_SUZdIm#jGyUR@&@H96JyB($gnD@#xL`o%MSocfgX4 zbEDU4xbqMW6i1?MV~IND(R_M*Ewf67L~gc_>Psx}m9wL7i{spWloxN)ETd5rI!&N! zJP%(Ulzd@$+KAluCs&pvrlY=I(Mve>Zlcc4I=omSnbBxz=vB|M(e+NcNi_LU=khL+ zWx2|oa+K69Q~J_ad_Ckjr|CT{g9GZWP+=fN=*-4pl)dF@?En#I{LJO3PUYo^SsgAc zF7=3#V59mUMjaFI>%{)0VF5lMd|3@yo^Y?Z_<|dy#5-sXumfaw9P%*X$~ypmO_qiV z$-1V+%qML>5%v}TQHrl=WzF`M&6pG>W5?HxHI(|6+jw<`5*3Z!TxSJEq{KCRCfV=i zVHnTo3S@jG%qe(WLIk}QZylnrGOK`1-ggpmw*KMC#7xSv;br>3GCqQe>7aAv*fvLH zG#j300PM(q%>Q=08y`7@h^^WTOI#D7v1f>J`so2i9^rx?ttEA zMjp&+Zo1`)L`#+oUtS!vj%PGaIdHk(d@D-{ny}DUY)ESFxB7kELDM2?vzD_0cZ9ra zXZLtEE8P(4F4aMtHGKs!ILDvs93P>OvvO_b5A=X6U=Kku7~%Mp2HO?xL0O3(<(}^t zPvi%^Oq_)!9`y z=s6zB;|$!7&qRb=AO|F{Th$Gg6-*lU0*8~lU9<_Pa$+xt$LRcs2tU`L@>4&4&iDwp zqE&!Jo-J{6Ja7XcT6$;}lrrgRvyKFo%E8qAQBP^Qd0lx*U~HdlH)e zyEST@o*nBjM%mPal>cURcCU(}MK?bAQ$2fIPTbLt+s}t9I*mdcmZnxPUjM^5=X0ts z_?8S3!rWbuJ;+EnjgKIbmsa(pM1C%yBj7gWDylL=m$T z+6e>)Y@bx;tFfeKZHG=gPDERGqi7-%?SP}_?TBa#oT$(Z+gk;6r7!*9)$7fa^1u1i zXq6o3GC@U;&f*mARLblie45ehff$-l({MwhT&^&Ic&vAt zIV+9hH&AQ(i~BZfMj56Hq>jvt-EWRN9$VEYKaNS;m)Q9w)9h`8gif62>=7;F2pmB( zA9#JIaiZs>=n96bHQmM?Xl*cc<99)g56{;Ul=HmEKV)#s#;!|WcDKFi6=c+OpedK& zw92Q8^#>=D^D5|p3&T=u=jPR*3KF+{qWB?eS6>E(J|e5{2ThbmxW`&FMU9!LBkPj{ zGHjHNDHi@1NjQPJNli>Qpe=7{f|}L@NSE`HRH>AK^mx)=SKK_;K(QSa61$bkh0fa$ zX*Bl<$ag1FiCpDFZ~$DPo1@%`9xoDtl#$_5CxNPq7DQ?H$`RN^xI`ox}9?l4H%scvND z;W`;vvu4Tb?KbbAD{PI)A-u>e37HzWbdZ^4jP*?iIK}GiSlQu-Ca)NqEDNUSi#-r+^pYpIbaYDaT$=kc-3`Seu%}a815r^ z2&bs1qIM6cu}$kT=yS#60WNF>R2zDmyQZmGVD;OTlmVKg`BPcN<#x^{J7}$}i1L%D z)%bbs%lU|=MkMzZt!|1P>ro5KEDAWU{cQ~I8$=cK4>k6h_uk#rWiR((J|R^7z;99r z5c8a7$f@lDVF56Kih(?<9?Gg9Y*IJ6z=y!#5ZM4Bn{mdF=!GsCI9S{SX@et*i}K4& z+8sLGjF1a(*P4xeja_}3#eIUVUq zCQ~Oo*c1p+Ldn=jRIZfOlq>El6 zejaVT^&hv1z``)u;3^%dcpwayOf-=es7)(w>y1>FQm)1s6|aeZyAl?N6eMnV)JT?` zXnKL11w#TC61@XFfN!m!FmOlOM#~xr{z8t}MDHMhho=38GeysF9lDIRE7UZgO;If8 z$-BfI2>19J!+GTPz)8~~+De}RtsV)QWuMS~-Qbr(OguDVF)0$(pPiR>)TGd79I|j2 z1DPWZMdw6^Hx{WdeuP05fnAq$XR@(yyk1kFslJNF@nuAJZ-#>;lB`h-0;BpYjq07W zK8r4F<*OWLAIkKzi_>~n-$&~R&U7XIxp4!JA3H?nqMDB0T9pRs*$RpX+&>N&FCcZ_~Z4ld(+%J9;I;Ak3_N9NVvK z(4QjpB+q33J%Z?GyFk#f{8hQG4Qw=pNUUPLTaTLJnmji|s046Lm_V!+DafQ63w$!ADtCT`YyqFD*;?c0QW->zLPmS(vWphl| zgcbMhTaETYf;kK-(28S-Dr{N3OFxYaO8VeCqPNQaT2mlQz1;NS^V6E|W&B&Kcin&% z2F?34a;S!(hdRAGtSQA)M0UB^CiqdZlWbK{LE0sg^ewlxR5!r9&869LZnun39yZv^P2}QzUF*Ng zxZ9nE(A2>2x~CPf7$w;JT`^eWH6P#&WxPMyGUx_L_|9}UH%r)8qhuD54g zUqy@Kg3jA7x!zGMegUIazAQf${_u`KM4_C3*Cox3zPRyD9ZhyM+zfMBnGsF*Kt?7c zY7@vq>GeX-r~OD z4$UK#u~-su9_C&gNkrAp!S4@?jouw3h*TYDjk&dmCA+p(q8(ddkMmX6b#r_fS1nkoG1^ zq`@>&lK`z37ID^VY+R@dNw#;WK^|KNzMieI#Z$8Ju#sV~-z=^3%jFjYf{6ngJ`bh_ zhWd8UYkO{j8@1>(GUF$|1;y!Wao|xVvvx@{)~}^}tXvfi6~5U^n9%{-z4s?XajfFg zM|f}DubG8YDaIXVvYFi?*#GG9We1Tyh*u=NwrIku34W(VuEp#^8WPlHSt*qur&5D;ie&aHc2}S6a*ymN!?Kj$VqP* z_h;&-j^@xK;~b@!(H9xpp3muX=+hZHO^$8{SCSDf!HD~B6r0v|xG-ZE&TKUa4*lrD zhmhgRPCvvms^ScEBYh3yc39p)?453Vv|}#& zdRJ-1JzIo&2&7*B8>WW<98Mr0bsQsgOa}eP=}J`msWfHNO1e16BF=Aa&8%9*^@kGy&_2EW*i06C#Gyc6F(`YPlWney@mc|TSYT-1Y z$yZX*8&-`BT}I4EV%kZhP4To~b)GkdWhV#+^Fbevn~YtTXVX{_%-V8@9$aqd)4?28 zOJH*yuAv>G#Z<@n(DE#$J3n_r_G$+0wD=u7`dt})Sj74QE3XlOdEbbxFbvFWz1gDM z=mO6TdA=g_x1-!=zA8IIoafb=4gy_iedw$#9|9@9zDSto-xeuJXdUe#@jgIKVfE?s z+BvyS+anWKsAcvv$8fxkGxzS`&GbY#@CONWqwJox%N*Nor{x`TQyMEC>k8%b#^|au zUSd~b{=_Sx%k!f`&U;zQ6ah%+on6kv#{Pq~+SZ+nuJ1lDeLInk(z6pU!Nbh4AYU9@ zZhvkO&4ERCXaLa7VhILahpgfi$B`=WSLivw8sF4r0P)hvH2|TohyG4Wdn64)ijC$L zUW{kx5c7KLn>>ZC%^H*TcZA0Js4{n$(w1RIf83CsIsB@-lF_#b2{X#8%rBA&@}x%@ z4kndKKI{EeE=ToVm8k&~?u($Fj09Ic-QShmP0Y(Y+>EQ3(kwld4UB4E>~=n0=+A{- z3dcSwA!zNK$FT{kqOnkrzw1&)GsOoXovY%XcYMP-#KA`z&zV?Rh(m~oj+{X(-CE>| zV{YvExdK~R%dHjvJNN$WYqR-A&sKr172@~(SwUp$jJU?nj}f(XnKRQFfa#QHFeNcP z4kC$Li!ZS8<@ESpCw;_3-r9)M8--F^oy!vd?*@&k18{|X+D33<&tyOFt&+X4!!oOI z14zO9C)6AtmuzNbSE*V0WPfA7z&jdDdFG}4hW5OWRVym80mq{x|9*ZAWQ z>8ynm8~58Tl&iAfXh*NbA&_0qK4JV1=9E-A1#ADwM&J5U(BTNj`9Qiir z8steR1f7br^JGv`p>zm-Gt*wn$&J+Uzsjc%9&zmg-^kawIai&ap0wQoh$}?!@K1$^ zxN;cI%k(yc%G^}o72zDn^Ka19O_QCWM{aS}VG{*yzhEF{wzu_c!L*pG+hSM@g76SB z81RD)LdT#)rEh1Bzx4%M&IUoL^w~og8ig)bx)UjaONEQF$2OET+1kv#h%^@acp0$) zDC0m_DuWSZfbZ6=(Zv;YnU9L-;N!uxbQ4|(IW%0usLncX#Z?f~@vkWXT5~i@ABsM#S zlX_1=mygeSZCXj6FlNrc-E>P9%Hy~+kvDe(fWRcl*20RhE91&MBjLd#<_G<0_B<&x zh*Z0*!&waceO51BZO>wN-dE*TqO*1;2i+9jt4T}46$}bRdAhMD)!UnyP4nDHjYoiK zhHd6qZjp2G{60RPPzv)iIjc-Q_jNVhMBreEMrDK%`Mkc>_C_V(ct;8T()oRga?2-e z3(aL^XF+{P(n+KFyCW}$UjDOjKd)kW!LvsdQ0B5Dv9}HpYD-k`TdO+wPED6%Jzcz# zlC2}j`=8@9&2deMjaM2{^Yu!u57>iR3b-;2meF%R+RKx6K)HA#J|*>Ub76n^E92QO z#m-1d+l$3;+>SG=`0&r_{RyG~5L0g{zYuf7vSJ(tWAoI5aqehYR%&hZB$S;)ir=|gvQPdA`MDVVWmV{t7S#DmoFX>Ip!@efK>X~F3;oPli)iX{ zv&$B72rzohdlOonU5hNLfV{&n1Z3iqg?Lfuqvr$RlZ3!66Nz{bX0Pfphk|wXvvQFWXAHFM=SDNVwjWUiXbcdGO?X+jZv#58g+(hu2dbqFbKCGr`No zSutLc`@f14V~4697gNhrMKmH|pNXQ;co2klryf|K)wC17ixejItCG(TQMl!t?(Sp9 zMM7Q#^7Z9-Q2$b&pb`|L*$5E)wbF$ft>ntc4~I7nIF^H>b6{qHd6nuf$)wUWB4x|o|&vJ za$OWV#Ut&yYb2px)$_JAHU?~spIMm*IngFuHhEu~TC%Qyy*mU*lihIm>3eAqfIiHO zta(rM7+mpzErC86@rA17dmJON0D}9oEpVk>+tmD1P=|y&<1vyOvW!gbu5P{YHYluF zvT}STl?FMgIu__WF#mPpJ*>B^HCMBrOOrfc5+6IDoX7j-6ynWJgQg&*t`31ecHhLy zeZH`Hbd4!9kg+~QD@JL^G^8IPk6h8n!8=prQC#llp8Vl`{N-T#mS{D^zuM;;sHbpN zdPK&tG`tgLr-5z&UWE6d`}M+wjoq>leVIHD9@D#j-M}!TMjUdh(_Q|+8)qr+K3n+% zTpVI5i6UIC4{o)P;D_(btQ|CA+}1{DWxY;ZbH7Il4iN%4EFPMMIP`&QnwZSl$e2%A z&@>aa5319SMp3RVH`C_yDugC#9L4W%qj_Rok>JFk;4v$8k-Gs_9G$IdHbL zJ)hqn4bBj;W!ymQ;Wb9uG}o-h<;l;Xa=9wMG^|3khgqB5(!}pleO}%0+Zda$bYQsZ z?{G9;q~%xOREob?oAI_2G^c-mhMzhwZ`A_}TVvOvCGsSs_sp*0mW4ZQNy+GI8gNL{ z{CNzoJxNhc&F`88mMSXAdrGg?k!OV-T2dQCYSU|<>OaMt+1qdH=aghFe!|#mI}{=eXIQPk3Xcky5j{Dj``b_>zn7+Ga~O5d zu={9L6E>=l5>_rtHr-2v?~+yvf>@Q~mxT+(-y{8RMP^zv=uXE9p||z9kZ)xYjUnr2 z8jP=F>-7)sexN;YGAD%IJ|`=9wn{bOt3uv#DS5j0)qJssNBQnON88EX^8rkQ=BO&= zZzIXAWM#3p9)JE2r9lk%V-aDy3iMH_aP^N!yvmw?qwXoM&~L-c>Gg4-fs)7VeK1 zIl~{7G^I2loz=1h=gBs6+T$9*^L8{>N)4^Z*2y7=o+)i@-*)_dpbikxtvV7tuOAo0 z?SU7wF`}R7*~hTr`E>MJH^+MXbcpCg-q?F32yi?SMnP@|@|BDxF9rq}_ zo4cZ>qol;-Sutukc9A$}DS;E;vC)DnDyMm?m}^QX#xz_r9&GS+-k*8AD)Xp8$QLuo z-tuA)Bjqc2G_{p8R9qISD_y%zbk-&hUhS-wpP!7;-qyb}fCN8u~GSi{xY)%%A)4*mGPIle@>PA+`L;;Y*nr*N;+Wc1g>q<*pWTHSJI#a%wHny(%Ppog^gLOc!2o5Woso zbV{5{b7WizZ2!nf`*aMY)nsnMGZ2PrL@DMH+EGRU>9^>D6}E@Mkmm^bhcg)KT;IUf zFLI@@%fOPsaG9Ql@1^!#)gjUj$z}c8)WL_ zyzUdC%iyLQ+FOo53=LF;ePoBU@<>}oRil!I#I8!)ed(#`B3$#2ThmYgtLpja<7;Bs zjk%V*q|QA|oZ@vfc{G4k4~<}qMYu zWk1}w&*jwxW0AO^GmXM7hNz*EqH+w%Yg8-@?S`*cc}ne5j`qagFdZ-3ggpd?WAhZ; z?#M@Sy9NfK3t)Yxi+9;~Q|NpQ(^kBlCKOGIB|xmk&5icIW60~8%duB7zc|BuaS8WY z_nXx}l!!6-&Tp49~?E@l+D*IDGz5eSO*ZV{+>f4a`?P*l)pp0Ig!B@r=K06Es`JTCSTu-sTY;A4ql$DyZk z9nrRqeqj`e9^C8aciRjLyp$347ePbG3Fsy+!?Oi$?)Hmk?oP-E0>kxMOA^J|Og?Eo zGzJ=cU}v9N!DZV6rd8&1O{O8elcM$v-3`YsXz-Cu&rV`h#viLYPjSb(iOG^;!9hf8 z!%?k7Qjr7hu!?y4tUsQiUw)NAf`YE4ZQ4FwLMI5{z+vXWa{W-Ord&i2;vU^#Mku_0 zw8F9CBzbNE>n7nBF9n=a=9Ei0B!vZ_`fs+&= znT*cU!?vAP8RE01v0lMst zS5)EsUdG&AK*UOwu&~8O1ra&+X9PRq3RN$fpo5-fO%yZuR!ZY5mA7?0Vy5=Q8@vWn zi{=FUkd0RLWU>BoAc1};U$m@RW+fO0avRbi;?|VpHr3pqPoNwL!*$J{em$dw%qbE0 z*X2x_B_#V@0`cP6NiXk7t>~y3vMH+geyIrXpO>=*vH3|+54>m_3)5IQ2iTScmiLZK zgFjSrrM3Joj?!t3JKgjfjAX6(3z^^q-WFEqQdT$|)08=2y*yMWfAA}I(!3|nyS@2C z8og>-0j9qc5t(U!L;Ko8hb6Rb2m=~VuQgFW?(F#u*9Pp||>JIpxp zlb~({y3_RClP|%w9`{0q_1HJ?`bkEc7y$>_^Dbblo05BnKs-PS1d_TpFnP_$*s_l| z#-Tl>LO~gGO~?7P1hTnDfQVr&yyU4`?W}p(o5YCkeo!eDmLlvarv;6ejA-)bFWR6H zy59-x8S?&HrO_-<1e`E$y?y~m{of1Opa+$ozO+^FdIk9K*NKoK#X(}FfUPui;+kEF zV8;`FIV+Rp`B_fO+)OclA4;iku{WFCKL{+&MFEMUsaz%TxF zp23QA#LH7o;`*_l0_Hf)aypN;_I9t^3X>hDu2Sr3j#!cq@2cH8Vpe5EvU9%K=Gqbi zHv!DHf(vo(=mTN}s*bou^X`vphk(bf7u2t(EDR$KC@YxhLajd)SAzJsyu+_&_AMu% z2Vu0+$tnO@l!BkF`i0z*F0DH=EoxSPOQ_(VcOo+`?5Osb+|+%|1cupOo&49v>NP(c z6@Rhjd5^A8(ehC5G55Ei!QipeOpb0ha72kNI9yEPnM-{xhai@e`D14Z@vLjo?2X$5 zFr?pReO9b4G%+c($x9=+#4qiuO%g7pi*sP*s}LG#fg1}}FIT%5SObO)zt&28zvYHq zVX=#1gikn;N4e)5(t=_nfp~*(EMJU!DI0zEMMkd|lw2H*g8E)NHsn&OP z-;`~}N)ewc0%a}e>!Va7Sw}HKAMfO#a)4%I0F2}^D~QmYs^n)qMj-JhQ+VLsVVOeT zuutcJF_ZuNn`V|mSp@ubnhf!?soJ9+cI_l*yavA`Yt4r8G|zYPdFycn=CK$Zro-l# z1UaSw>3&`{2xm<$ALj3zYfj^_NZ8L|T3nZxoZJ-!@^Br#qC58nNVP4PTgaYrFPmW| zMRWt?d>`1~d}7rqOZ7yiZ;Jfc{CImwS?R-1{a7j8pu31{C)OL0J$uLEa$pD{I*GN3 zX)3NXY|reTBLYkH0e;jqqTAlY`{W7r7){kMWSxRPN`0=cPu)*ccDQ*kK5oJS=f;Q5 z3)TB#o1YKpUCryjp0rxLqv6Fs=~ytDbX1j%?wJy*Cmy6AM~QtGUsma|~a zy&MiNpG&$4fy|-R=cS(#X&auHZS5NPqjihiBAjD7Y7~IS?AeLx_0j2-jl#5hc80NGk7*%%gQp&0Pkz3GzMMxA`i#iRccfm1@! z&+>MWPI&#qi3nxpdnY479&HIhd`66jlQ!O^{h();i2$_*!;j<5bkZJ0NwXDsv#QsJ z3~)JyS*=;I@`dw&2OPjH3vaAR(AaJ6)}G*6caO;nZDu?ic`hGogfA8D<{ z>g#d@0UrPW^zRL#gu?T~yWgCtZlDAHEGWZd)|?tr>*v))&@o{#3QW&n>=V)(zn278 zFPo4PGoM6ry+P8!nF?K{O+m%A%5^VvVJ`GS(0fAkTb@`f>L{7J;du&S66voGxHLcW zcb}yq?YZ3J$hlNnC)9C?#7P3=U@0tgeP}jFlJdZMvb!3)X*M-&@i>$P9?MEFo%&k% z)U=UZ`DDcsub&A?5B|=m4qkTzRpgsAX9^nco{+-_A_9v8u`7@t;|$(kjc!5lzV}Us zBc|i6z$>*)XKxwB&6Sx6d&A&=KxrB6GCBOIi@Q7AeJzC88h=={wF3gAl4z1}6+wZl zuV_+ymn;Z$wT|Lx$h2!;-Vli7tBo${F52F?z9=c2js+FaowL`JZ9d^s|Q00M%f(qm4|-*NcLaKK3mP%5;(5O7D*s_o(OF`nQD9%0 zf7$vgc))m}D^3lzLjL^1P)^AeGC*n{i`bv!EizH_UW@8u@Xn?A_^^)oSET(T-u|CG z#6AE3xD!kxwGj4xFADhkYOhw_K>>i1J7n5lNznVv%5AcGBTsa3a#$tj)1Yn}&gfKn z)y`)QCIvEX`)khSV_aXVN2A%A8#Q^5A`0az-urXo9MvR7xIt*SmM&8$HjQ70TNA{> zXv)%~9oxp8iAOK?8hTG{T181eCR_Yw(a%Z8*~ zdwDyT%)%*~4N3uksPT}$yr@o0SYs1zdnRu#R+U(C1pvTFKOJ`#%o1`5^!_JDhIbtN zG#-C*ZE*v$^v(W{E$YH7fxk|!^Wyw{<>%pl+JH9z08mOW%|xPD&?HqF%KGD9 zLGbToSZk!@!8K9HdDta;E6+bL+i?ZjLK^5AId;=2!-y=80|}FIbzyGzy*f$1XAh@~ z1x7GR1#OTGMG#8rUXiAbKNAtJ z{jQw1;mV zPt*?9HTG}e$&L}5xG^)@XP$erZDF&~X3Za5FE4QsN4PR`DRS#+HogTMMBG|H@Gnmh zd}?Cj%B-M14L_ovbBliddMIu(#Rz~kFQ?0Po0Ob$sJ-+mU>#NrGXIjLSpP$t6aFvq zaH?HuME;T_*+|C7-goTF1p4{!D#srqe-r(`*@d_T000ewSwU6`j8*?6-I$gkv^ge- zyn1z_X;9k6l>%<`tk#0XVtSz=wDQ*#p=Ke31tTsQoA`xB?LZfVouz0MOq;e4vK_ zfOOwa;8nn^0#n57f8vIwHiql^>)6VfG6ksna1fV9Mk^0uc79lcDNo#q`1mEWpn74W;|#}h?B3qx65kZgVkB#|+Pot3|Z?exE>WdnABP<=;1#QGZz z04gxT<}X-K9G{SX0<(&&{zK%0L>@98`vHE~r`nV*!X#Gar!XNA-yHgXK7@)jESz8X z{KHX@gMA+Wj}?RD-)R^Zfxogrj6d52KrpSG4T`RWIR%XUKeP(~WVeqhd*Pi=*Fd2? zQJBm7j1)l38wkL44`+;1mx&yPio~+0M~6UT{9>QR!)m0gQi!4Pig1Fv_~a0iU`}R$ z3^{*#gN?wYegv-^TFD%(*T_Y0vKk=4&#sqvki76>P_j?Dmf-x;hPN<~_A+E%%0RUy zItwCy_rQ3e@Qjwc(6K>VBcaC?!AL48p4$DNJ^=utF{$qkMKOo zi_z(@_P8DFLQjU2e-QGoy=)f%0B8}+8Zk%^(V+SG zXZC*?&TO(eRTeG)?J(b1cIA7uk0O^cOb6#7B@Z0BMGeG&gk_fA%tr)5ky$B9C?6sp zol;x=c-Hn2J8Tcj1=eIY=hm(Yn8qS8e;R}WReU-=NfM~WaWz+14i1y<7LGn_uB-}m z5V1$;`W;7HKqSz&vD&X}5jnh|96*+1-z zLfE(^G@$%H_Ws#9piC6}Z45s3)7US;w5$IvvOocx+kv{{0GQ_UBUh;kcP?a$_Cy7r z2Ctp(=1_2r1Zi5Z_`8+*(-dD0o09lQqPq!P{#7Zs1ksErmJ3}sbj$spM!DB&+X7qK zH{!~$?`;O1>D=UEu}G4m^E5i@$$JT~8c!As57h^iCI2e@kDmW;oCbo~2>&DXQTfub z7i+mJb?;?k@aad=`0)h*5XP&7i~?fPz_yT60Fv|^aD*QK@NnaYaRvS*RP!evLcnag z|0onFF!;SSfn{`m5uN{U3jfLI-#CGI;KN-20L#{=6<%OA!+(?r6r|2jS)29Wo%}Qb zbB4hDnF(V3Y2deDI_v)rS+@KWLVf{p!x&z-)QL=RUn^t^Hi@M?7^SB%zU|vUb!ybj z02FjOe%f6XGu&`Sf%TB)F8+#_J%+oA`!zx76x0Ov0a3EM>FeV2Pc*;@p#`wBzA+n^ zLz2n*3G0}Vt@AA@u~V6E`w?r7-NiFXcJAf;3PP!e04Ss*v_jWXb8?SCa(-O$SxFvLag@B7IAts1yoG8q6SiT5uDz&t|dWi-1%c`bnwj8JJ1PAUvO2_v(TmP&SlshRgVd`Mp|egH_L7XTplE(>lAK>|QlJ}cq_ zW;gs-+Ds_y#FlscUjX5Pf(-!7P(S|4!jJj1zz@uB`Y&XumCg8kckll)018l?v(o{B z+X(!X=_dGT!c#E4{lC`)irRnN2D%c);@7{dK_o0)TvUDKxuDTUd0-om_=OwAyA-ng zn?gIQK6ICd%|5|N}D871bi40|0q|!C&1Hg&R-C1OuQ`e2%X8bL+i+006=#TL2zl_S1i6`rko) zLWBJ>vjTwA^mF(;1G4&Ao*S6`@}GJBf6Ak1Ql9|O(m)dc05G`EJ2+{<^sWDfW1eTq z_Aep;b|}hG{X}IJvVk)-g$Edy_V zVe$Qdxj&ymdt-MrPWxGM*9+8d2MqeyhB((sP1K1S%bvr_&2-;^d6EGfNL(R81DI=m zo(u!qYEsEuCpL6JRH+$VGRrzK+2Tydg3d%8wyt+2#q(JQLkiv~bV$%|lg`a|C*7;P1?Don~I&S@@i$J(rs3 z08W&d97>|daveU?r}E(d^aCTeAi1O{BWM#cO*+p0r{thKfH|U6%;iw}vJINx*Y?+A zG%Cc($j?vsDW$>1JX1(JCHkEcIT``>J@Jm|E%%r__h-L-{UQ!biP(uTpCUqXzv$g) zJO#uH2s9YJPJch;iwU!VLx;pc~qlNwNIVJBe@%eRy|nf3$`mhLd`P zhC=3RN3UhDRhWJ?h@+wWZW-{XIigxR%FI#Px`wpI2@>#18tfZ^!+!ok&xXJ zA_LB{wi1pbv@Y^d278cLS5X8(QmV??T)XfyTk;u3DyWrRO(L`D`}M6nR{Zp8^SXWg zGqf~G-f(ha5iN0pttN%Q;Jk33+%)(3QlR=BGD*g#vwhvCx00w` z15Qk%RPuN&THD=eT?OSJ_twj9KLCV<-E(3 zo2IhU%$9X%q4GCy-%DOuQ-?&d1cy0zg1<1k!GRTQd z!X^z4;{@~}Zz;@F>*#x$?0n1oPC_c4%LeKaAsKD%j8Wmo#Fr-&-$G5s;)5fO@$piJ4!0zw74M$MD6tdWDI7bvlqT#F`U?P-tM?htla_pFyg zJD;c+S-QWlM?eSc>I{nEs#?Ybv_MSjYeq01ld0;L8OgGe1~Y3=&9 zk+DN{%%{6fXh5g4~MuwFpx8hEOD3IQ*1QKl%-*}Cxl$E3Y4SoPlhL-~}lNC^AZOr@k*o~W5# zRT$gP@n+O0iYK0ywH*%zU+(8_2#`VM#!|&EsuiniS~gEj>aybW&~7ve98jaE6<;ak zx#_SdAzme^SJxxsJ+ev?)BN#0`Z-VIgplANeHgmx%auBXA!fi#)p(|g@mGI{sBB}R z<~Oa6-ZHB&Zdsp|=h3MiTiW+>jY^+Ro4KwV0)Q9e1X+Wlo8B57DWu{+{P?AFGVGtT zxcSReTNHM-zMV_w6Q|ZhP6kU->y#KsIW5HT&g2}taymi0g2GevgQ0T#1RE|-Ynt!rZS4ArdpgL!7-hnmn&}9))BI9yfUb=uXw&a}U)?J&l7_LY2Wjee`#ZB6ceIv3uql%fI; zKW~RMpAI|M9ksJ_p#u%_BrI<}1YyQX5WW*gB`xXkNds3T&i}>PTR_#(WNV;}ySo$I zEx1E)4-niXxCeLF;O-VYcyRY%!97@Tcb9jPnYnl7uJ^y0d297*Ij3vauCI1i*Zy`_ z)f0gwdAoKq0UiaFpSJ@kPpCz4HN(<(Mvm7j3EDQe@VAqfOV6|W`6xTZ36O=G7@gBP zAa8jk8;IJ?6wA~9j%A>Y{Dx8ry4vHxR}wS-ElD$hM&M`(65-cAdHwKLElW0@Z+RmJ z0Dyb)que*-T|En!(L6)tmOp(UQ&7m_2XGmtMd({MBDf0+Ff|qiWF-7m=7CKv2w`|U ztJbl0?8jbl=1E??h^wd3`{JQyu?)}eiG~2st*!RLqj1AoD<&S1dBATjbUd3Nqp(n+ z$KvVFcunLZN2r`K1z}cv%JR}n#n<5!=w+Q&GHvJkMe5n=aM!7CNcy@RuiXGS@U#9AW8bCh#$ z+s(A1c}6-^W=H=b-TU0z72Fk5-Tl>-nU=;&)Jpt9u+9E52efk1(1Q4$u4qH|Ya$cg z=G!1kD0-hyXSu-@-`3|)!;Y*I5{_T9B3Sce8DJ1~chwS?YM(-B1WKDr=O&orc%Dwd zDz%$rjf-glPDsuMx%!na9MIH-1{Ml;A3yk%p|t|6z zs@Bf#16<<%Yr9=U1?JnvYwa64okNC9*^~>#jL6(_Q*iUiz z=WKi8=NIwp^F5$@*4i<);~L*9yFZ+!?a)O7JsRJ1)NHHSv?j_>(ad*zH)dTH^3)SG z7XYAl%D%3PPohZZe^&fl%`>AjL=YFN`h!E@D+JR-p-$Biq%00m!AC5MpoOMisMqxG zP$Bio_X4;O4&<1iX>UR#sPwX!0U*FSuj{uU zmtddG;ROA_+)k{nJ}qVoH%=j|2;X_#ZEC;ni72^*cY9!&lA;dB?Gh`f|Dq5Wh&Kle zLA?KeUdN*ZrOI6&>1CI+7{7Ky%MYp>U-1i8W93;0@q_DhQ(;FK0AKuoN5os6kJvF+G)&p6YB-ZS> ze0i+8;Ov4R+5eOV%^sAM0f_bf?;%|TtyWeUQNi^c);NZgZp~5R5mKu~LWegM2=n{B z0Rkc&0GcoWWc_|PKzRHmLH!Rz!6K^_K#rEk{|v0U|A^(} z6}&WA%+VHVHns;;MP>NLl&#zQh-J#B-DBdp@1yWsCc(SN!61_>38;9aC%=9%YlgS* zxBbqm(&KFq=2w60I(Yc0nB~?c>Eu9|B~|j_tnz{5+MB7Z0GOld53ytS|-LfR}FAJ zfNuYrQKDJ-0bm%Jzc0ZRK{CGnM}#Lt^C`!Plyc``9P5wRKcYkyt49IzZxuE)k8w=N z>A9AwoiZt+6sYbR<)16ONVtZ4r_cuxgr=VdY733k?~G{}m?(Q1pds7QzlS2kr0a6{ zm(BCP;^pFhjD9;U5AzI%XuBVH9e#n4hj?1>0nKIF)oGo`3B(Nl)3XHj4Ww}Ae?@Tq z$FQkNz} zHf* zD|qn$7<}@6F9l}n31&;WCETX;T8ByuRj>Bc!?5NB5MY(Q!IDhuyl>C(&!o>3M~?x) zMgMcnNklhzmrpeWr{j!dn+@TxhcPI-$H#jvxIejW*%xba&B5ZlDpcrz?_ka+VxU(9 zCt#s$su27M{^aTp-WF6Kg+bxv-%UW)Uo*3Rng9syGek+iokBfU@p$Pau$)LZ6s8B>hpKBMKM6scE=ik znoxVzL#a9viEqt&JJYm554Hf)I+$yg6IsGuJ;iH$O$LGWC}O8JDQV*0?5mgj$N1h8 zVE#U0)qpar`Hx8M|FH!C0>a5(e>EInEF{UZ_lq9n0k>*qH1Si>M(naJ zyR|-6Vfll@4-X+17-bX&NY^e7-egPwQ1YOxKt9P|xtISJ_J4Zyx`V)5YT_W1|fh0P(ug?_V4^ZTSE^pYPK!x!~OYV$H0$eXpb=Y zjP8>+rTBluLH{syp=eOsDz@!D;x`sACVwaV?V;FelFOGQiXDtQD2h96*hh3S-!e#- z8ti-K+fz>2bkcYq$Ht*~d&h+?B>DH9E0Tqe_`4zWI#kuO+V70!MsHz7+t67{lah5o z%P!dUwhKVr=5Q}S7_A(VUS&Helc~XejwMUq4=^rm7&X;w?a{(w?-Ifwhfg#P!%}#0 z1V{YIf3j~Ywk|h-Mx31X2Bq1VKeQJcH*Yy{{)7KE`oC7XD+tH3|9>v13~K}AKo@pM z{{V~FyAA-{5!A&{kF#&>f*d%~^geeNLCxMW8lh^Y_Z$?L12h6&dzKt;Oh1#IWLPd# zjxtmsj&@Z@i7j3_WpG+YR0<5Ft81QJ#h6Uyi^Ju}f1`#Kp@9N`pUt3d;)g(F02&q) zTHgR^Yy59~+5c_&fvdFdei+IK@fv5VsxyOL6&ZwRg{(4srPZY5tc0&H9Ik>aANQdV zqm>8$JfZ*>WAX1={qu-{vibjXcpU>gyFveVc;% zW7w?&jGHWir@Kv;##uRW%>zl?1Kkb-k9>4ami@v@y$s=vd^U3GOOj9f2`X((VH!q;=<@{xxpxpVo@^QSz& z%l3Qw(~#Kx|MbCq*5{e=-!_C->zIQ~Y86llg=jn!zogmZp_NcY0*e;NFE?**ws;vx*1~y6tQB4Dp$^kZN z0FL(>{?rC-4Tx`*vx;?;H2p(~e}JcSI)`L;!+?mAIhiqWkNdBGQ__z={`@9a4Zga7 znfr)}@|vP>ie|7$>OMfs98Vz4OGB;d8o$(IE!+W{xe-u@DPMb-%~*$SbSeE#a7U9x zictmtr`*6y&7@NuA;hGCEYVVU-n-K=v9`cCnG^R|$JtPq2nMa-mpq)Gf?(d-HK$Qh zuB3vKFcy4^QmAWZf4G5WY0CcI#_Av!0Lx+fW&|KH-b!S7L2whjHx)hJv`NXFrA<;U z0m@J(+OU?dj1SG{<)@L^pglt=gnwZYxk9)#*_uz`nwJrJ!}cJ$U;nzuAd0q@?w$GW z2ktoUbVa~`NX9=1{xJ>|J36k$>x@Ta!zfLwNGrz7rI=iIEG*2|7|6?5HI7UpCg9a> zAi2f+^opomdgD8%EDfHCWm7588qJliS9{zs_xgrI^nP->xiJH zUi|$je3{{l$5K-a9`51mO#g5QnDm(>N=olwoQ5zM#`Z_{ZBl5iH7t~P6XoaYdgJuO z(bZhqb3<)no+-YG$EAP)sI`@91<2=Es2)VBczqkLl$g~|E!jU_+og$8G*BV@xy9+4 zA5Z{j2aR98kVit%!eJSZ(s9-~oH&8`1Nmpr;4k*a1h3=ZOojqQpEf-q2Iq~Y36KR^S(F4zfld+Uu7O?2{{k zu){Y7=@NW%Y+)L``(Yj~EF!a=n*e|iF?gHOGbgy>K!U_T0^1#Q!$2F0ds!T(=k|02 zK|=j5YezNQKWcU#8IzqdVVJ$erp`g^P|FS+S@VPFVZ7owBp7%55}Zv33fxoY8qJxA z1E!P)`+{OmnluGE!PN_@`^3&8eM4s!$37jcYpQN_=HMP*R@OM{XDEF%(>iI*`p_+S z9ugh2qEqG-vXIvBx#F*8bK z?w^y*ve2vDs2k(D+ON0kq`pVQ5s=JpavmC$iw49_Qc=i9;VZyUi*s!ro6UO>DHWakFU?fYu~Rf20Bm38D0nk$((v!!>{n z^4Si};IY+>@6=&ED`*Z>jiQi&3yg^k#i46I0;{^KFJYuIyZrD?VwKmA2uhH4{v^n| zlXmqTaNkUwN)nMyxM9%+1RxB8I~O)`W5zC;q{*eK(L1yE9E?KZd!;9C)^MRC4NP%A-% zNG$*CEtj3AEQxQt7+EY*peIglS56ypJQLV3|6}!z5i#{=XwiwnzxqFpase0qDy>l#rb@HG%Lc?F@=au&h02t z70@9xSt-Lp(;9$d?1cxAdoP(Ojz^PtukBtMGwpJOa$A;Z7hbAWV@WrzBfqka95!?@ zN-u%EVzh_Lo`hV}Ubb8G-a2AG)gakg-$8$y8Mc3BjVKv z)Lc3T;(c9me8o4nVc&h`EAEI$Z3}b+FwdGQSsBkxQc6E1VW#6RY@jN~_o`f4=YeBu zV!REqXnVpsAj)rBZ9pA{CpP$zYh>47bBS-PeRZm!Z^I|vQ8)4hgP5j|M(D#}7edBy zD7q~R36iIX5-gvGTu#<}3`c>#(G4XABhe@T_?6C2tDu0sH1x2H>$P+p^hy}>5z>*Sh&sY6KFv!RIdj;Z# zZ49;ZAxHT#kPz0wcR%oghZeg}M-5d|TZ`z5)sB0;2c#l6DKhIG;)yT%Y zm7b#qK;FDrFi4ge^T>IPQXA7y%3AB_st9@%p$_?)lnOW*AwmR3hsd-k7YEEf`v4!S zMklK3-9L}vogak5dn9fJl?r7J8?q3xPMrC`6QpF)P64!gGYi$C^QuuONN?n*2qZ1l zKbT+1x3omlrHC^dYg7KdjftY3H&s=oTj_})qJP(sSR;So_bl}ukIhWB|X ztDBK~Xc*1UoIE*(<(_B!diHxQb^3eM$T(}*E0JbB`O{lqMhAnZ8qU=bDKlSa-ZbBs z+}$dlWziMVltlmZB9u{80D7BP3z*al0Nnfea2W|Y;6Z{x6k`7!zFI!} zj}Iys6(p+fWgiwn3CP~2A^a8A{t=B>xFM~T^zc}gnfYGZ*-VNG*O+{n zuUe0@P(@9uE#RIBOz&;EEDZffdw1ua^Vy`5U8tiK@U7b68&aFF{2@UP$B zZrxd0q>7NFw5<&$X+@i>O2T$oxLuHjf9r5Di@X;|LS-q*+N1#&@9;%hG$tJje_4cl z4}e2g5Ac-=-3;|$+-8knxW-|ZKN7yx!6#Tp`<63%0y~QQ5+N?0w72H)B>=bOmKaUk zcR0;mF$^|srtyqaleYz%?M~zuQCy4lEsP1jyQTfiYhNYY%^@N^$@9*q6O+tnGBHk` zs=eb34GR)AdGEJFWi`3O0Qf0*3lsk!E(Pk6@n}YXAZW-oY*Q8s*mX8o`ww;0V&$5K z(5AIz*9?9REM`JOQ4M_UR?YOqRkR!*vXRcFHW^3Nl}f!*{%B7TUHsuJWJ+y=ef zQJ>ks8r&AqC-O#hI6fLrh#nKiNMeB&mggiXzw`;M*otoD7YOsO{uRz-@mbf@ZiOmP zh3O4Ida z6k^vg^KA-P8yA)To%gQh^flfbWro&r&?mw==#Ug!_#6jAl3 zZPy{|ksBBUH{nlOqih+C5@v3=cq_$@o1cOn*++whWH?YG4G^J=QZONF`+4F%!@jw!{uEsE2<{Hizb-`F+HYAtI%#%@h;19! z{cD$fJrt!l7x~Q!+Iva@^SnMkS0gGi<3(k#HP6IM<(j9w$^?w&eYT>hbtFG93?mn+ z+!Is-9{Fe;VF-EKTaqbp*!1AHP;T($4i~ss#&6+VQ2O+qcQX9DL6bAyMB7uN?^c$IBmxz{_$UgrGQ1X&M_J)Z+5Exms9-!Uolm|I-p`x-q(Q+B z2q}3?yYHidrt%B~gbYcLvtKyz`NI2g-zF{xxpG5Id({v##QA-ACA6%Ed`dLUepiDp z!-(;u)(Qx!8hcL5$`;`3EgQWiZn*m0j;_CEY1L<3D&ZQ<6)s~<3D*$_*whorgmrll zJ-_kPe2efh#~r+${(P|@qefB@gz7hdeaEpCpC0P79MT7mF+KmtSb~BP*8^J8uRn|A z>5Y`JEf{NHew{OF%+mBi3arFDL>n=eH{I-Lq^&Ug;!mDLf8C3do)J8;*h?Y56QT37 zH%xn2tb7?~9$kIxB5=%~f*ohoZ!~s{aXOR_dCl;9X8JIXxfeOum+hMe=Gto`sU`4a ze9pK^l=;C!`>!1_=Y<;yU6Z)$%3HD^7= z3uEfZoJku}2d3CuTYZTgC%+0da?ekOxke0ubElbZ*qFn4->8)XJ7GEgnqrp)(N}IO zTcwcY$hXvAL=IBCu_EpIkLF;(QVc(GM3WCywd-qpt>3c%fU2J z9iPt{2*FB-S`1m*SZFM)nV{vA7wMlDJ3GJR;#>~f zk}X@255a@kAJUBWuP4;}ax2v(Yzd&@lfkimEV#ie@(bdq9&qWinLmZWoV zU#M!`^>;51{@lH;=$BsOnPf{aGlBI(Hw8OxA?sHJ$lCElt?x4ThA?Wg!N|tolOL$C z2g^A|fJ0VRsaz)B)%}kSW1?gnciw;_PBL7>-2&lC?0 zM4|k{&9uBKP4wCOpX>j7LTdmb$N2s?Gz?YQJ{)C?QAH$p_RqJ1&9ZAZlqLh(dDEA4 zwFSz&vL+?wbd40U=3lv_JvViiccHcqnQQnee7%sWmD$^*Jvc~v7J5zHbei3Zv>{Rq zm<3h7A3p`LxiTFx&8aAXBy! z`RntUA)M0P0L2eskJ~&-9ImHme?|9w)z3Wq(foCoR^vVk+J*bf;{zve`dB`6!_L23 zr{j^T;SZ)~g)tG}b<8ut(PF%8>J4uH<{+9=mJq)GQG>4Vy*M2kX=jLREQGSlqOPVJ zT0EK;Z1{0=f`2dRqsB)#JUv-V{l@PWI6WL>!sP5X?#;pMVEk;V)cBbzf9g;01FrM& zH#$Ew?Fj(pcYsjhUxxhr9eHTGF<1b$OiBfSmgI3N55{>{7sz1#4@_}Q>Z_$c)`BQ6 z1Dd^w-@ih{fF$|-eZUWl$U2qdVMC^e>7N|`E)ptL)OM*z1I*TR1n+aRPL6ngJS6r{ zFsMdhrJ*3&^-SazUr8xxM#R7up-Hbd(mpLCF7>Y5DCxV%wLklbf@o#+t2m!M7$iSU zmF7vTYI&wf+4Ah7gzUoiTV|$(&;URZh$($XEs}oxcS57f4pG<+9(dFF`Pncp)92_K zIWZ=DzxyAB_`8V#5bu%z?Cri1bz1$JiB(?HfBm1t&(IfO(ju-2Q9s}`#i*+CWcCcnp;~E)p+{vO3dJZ9}x{geHM;n0Rl5Fq=>-g%nva#gokJ!yt z{R(UtAxNT}V;i~Akf6`~_n^_5W)%QN151p}OPEu5(8k>Xg`)6Gi{v$A?%u%~ zidB1<=ncPUPsKE{4I2_&7VC#d99{P@QytxRw>h19XArzIiL#G@kp=3l6U7W;HLwJ= z5SPn2SjaI^HRr#XzvhM;*BHmTs}A*~2^5hIvCoew7Ac$LgD*R~k6)&I&|vX~HAhYC z8|tL+Onro(zpEr~36dZou@HG#3^%^;YII}?fY-4taaia|^Guh6IHOiQ(Zrk9_M; z4L#rW(%iDFO9Ge=n_6DyhNN`u5J7Ju)7yS9fkB z;sZo+0>j+}2FD|goieK1L(K=+`yQJic$8^Xkcou>GMT9n!GAvvEs%Z+D`x#ygF5`psig zHJn2ns(F)l_fCF#&I_Qx;KjsYi^aQtzM-rp7tXKCv#Qa$n;}A{2aO+})+dq-jhfwB zI4$wvOUW8ZIl5H+Wenb`cLTWvsW5PO^fIKWg6#O172> z;3W^0&S_B%LY#y9o@{^kT&VAsvwoZTv0oqE)3(7MoE5^hkm2-w)+7H&k8}+oxKx)n zhRystu%=3Mc2BAHt<)AV@<&n5{P(`)=_XHTooOPvfgxq#>7cKb!RugLL}X}bD$#l+ zQuU`Cm~$Hu4`mjFi&4;JLtErL4P?wSXi9J%giraRbTXEg2Tm3ednD7@Colt<)Nw4( zX=-`ADb$+p0aze8r!ZCUV2CH`;`l<-T8QtaB2-`!j@xnjb% zRyB^R_utT+pehO4_5{YoBiL-8ff!g2(so3? zR5(E3H(5MbQ|IAXe#lFU^f8GcF$VeqKQJ0D`B@Ry;V<7ChPd(LZsg_lNa@^K>4 z7)=-e3{dgj)W;F_;$;-*y!-P)gOE^zGJa+UVY3#gSttEwZw50Cu>;7tkJV<77R`5p(QSsh}y2}*vXTh}@jJ3^y zpB&Uj@Yx{Z4;injG=xShDUuR#LiUV4CE-eX+<>8lHwP9=1F-!3u#xn1I#W^tcWcj} zFX|KgOF8qIZ<*qryJOng3|foFsT(J7%+I!2d|KNun=}$kU-Zh%JxhQ5V0CDzfWyQA z?`XI}Ng~A6bp^ATshLHU3nFYOx*4ModBq;3_{jgZ!u__6ZkF?migIVcB>UG>cUyZG zKv&P06KAktP03*L4*6U6QqV2F9f_v!A}_;Iq6D|YO$$!8X!@7aVV+){SXE@WT)Jpx zxpX|g`-~YxzxXL?Nm3}KU^*&{5KJpLjKzi0q^B4BZt9hQi&6&=6DI9CzdW|8Wy|s0 zt8X7R;%^N!x3#3vL`C!2YHtY05qN*jY&d0zFp}(iTO0K`Jq`Bpot4fCHN;|b_VWb%-; z4bd8G*m42-BSQ&!eS+E31-!7pM#q{FtTUCDj$-Pnz7QYn?VeJC`#98wl}I!>s4_gx zjsCOO#rkG4C4fw38S>Mvm2hor^ZSsra2TWf#P3>pa>t!(8M6hyWaiAU&iC@Q2;3f} zUGIxxuv5Vgc+tRA%AGoAHgoEe&x9;yJ^3~rLwR}%ESzMJ2;^?DKcZVN6Zqc|3iwF< zP=cfmM1H3~OJggyyGEvm^$=>sR%%{Inm5iZ_2itJyS})6-u>&$+p0V6z<^dug47}j z*)4_){ln+3np|(lPzj^ZJj5k`JTR#ib-w^}xm{HFDon-8lasU~9Mj&=`R(ep*{hex zs*ESoLg=+L4RHVV`VR-RjD2_ zp`71v#ps0Cr#hHAzVAk^Q9j03wAFBmp}$zE>(gt%9R&}$U-|h1YPEDLa?vMI1r*|V zAyUj3@#}0RzVcDW*C5XM(KnPo@}155$1UoL+C@>xH*U_~&Uoj(;#}*NIv_yC{)8r8 zxX&^B*oh9W20M;ZQHGWooIV5gRA+v&p#i-P(XpD|*4oX3S3r}+>~WBGf!>nO(&R#y zFwvS}H15W(d4Tt$7(wu(#-{hiC=D2I&t!MJAkE#GZD%*>kwvC5cOn16(h4(EAI3(g zow;_8k=i27vfENWe3lop*9g(a$ctOsXS3a7e~Lj;2$!gq{m{ z7|WR9SPRaYm3O$p@6O^B`pBUTo%5+Y-dQx>w>@hOWnp4d*|k>c)x3+gu2Vutgq^+1 z;G+7TnqN6o)t2yy5j{>4evERzF4ckq2rC9}3JyDe;Rdzsn4EEV^e%lK(Y!_)^_<)A z0RhuaVU##gAr`flIuK10m~PK9JQcO3DvBgS9ieU<6!C6fKJ7T^z;zVzy|ea1U8J)V znj)UVI*|dKHd{P=fbAOfHY{z1)fKcNWO7qYL#%GC`{ivDZ@2*!8w)6v?9=RVi+Wq| znIbUtmr<3p0nVN4VW&cT8J;P@@;3JoW3exnm^S|MGA^IW=sv(`PC`^)akR1sV6O0I zX-?mkis5qK5@PQXHom3y{Ux|~=;kkCzH~?E>9UTuKv(a0e4Bjvezht_I&y2(on_o< zkIigsrZYk9bKhGlKehuRAE|APD?{`tdR z6Pbeq%z*!9PkY4r;>RwCz;c%+AOKnE`xWE+ZRUW;6_jBTNSv~DGg`TrkSf@Ng8g-= zOLr;3UI6{jH0qrqw#uzU^Pcn8#GRvc?Qm6HfWXw`0R%zEkNwCPZZ<6x@E(VEpQf_~ zR)_HJzr0f{LfaPIB7D=&HyN%Z#5o0JW3G2i%z}93lPuktS6nsk(wv_+Q4+}cS@ii! zSuM(}*yn;^jgp+4mO)N%H2Mj5{LFa$Rwg{b*PFb0q^1GI%}X(3p&5U>5_ zh6{R!5lj$AReoqiybb^_2pFBiwzvKlIiPFh++t$+;J|iv2>w$e! zT0v`ifMyzJq5uF{5%^et4avu*jzY;V)+NGfm{prY1GyD+1uR)DTwVU{Nww8T9XyPh8!#Q=-Jwo##);cZ)R4HT}z1I?vxR=Ok>Z$H{lZ62bctBZGSS~f+ z?PtoI4e0HR-%sB8@UZ++nMi>k%O3RpSb{^yuwa8^$FR&n9w%l9!Idc`c`U@_vw3^| zS+rgjv8(%eSi_zvN7k(Mc&A$O60wsV7cV)06E|Zt=m*P6Z8ghU;@dLNbk&Lu*_uSO zhtKs!+vKWhh7(}vm6MExf^zcP51zub&Ua%gb5qNyc)esYqHV~yQPmD4DU{jMS5ADq z2j7KRDa>Y~cv4l-C>U8T1D6>gs32eAY`wIjg%+#ps^s?^wKtNHmZlsSrrX~$usJiO z@eI-PfHy*xAri%yd}R|TC+V?7J{U<$zAzd>5VM@bOE);U5JKwWWdN#Q-mmUhej*Zq z=;JySTQ#w?#^dD+ANymBxyr4;#fYYbOJ>6U6j`)}Mc!tC*Pu=Pzi?$LKv+ z%fl#9+Me3cl7TRsSaL@;fS%aPct>8x8}8;`$Fy!s<6gbGT~z3mHrp^Brs&2cf_&B~ zIokd@(EXj@aMiLy!El&c+0-;l>Y%uEk>}ynku;rSF&!=-)I_|+1xqx>N?y@*$W);+ zBGd>)1t{7;Cb?QQk zmlK*)%Y2n*K7?+piigEk8IpWVcH-~6nYXb^`DKW4Dx1HNR`2I}CW#gR9QS*fHwEFn zADzFNLf*a!8S4(qMwsRzx8pmNWGA`A=!RbvGC22%{7{y}ifb5J!L?M^3SH$v`ss@4 zkO-$OsijsTg#7UE+~}TAmrB0 zqhMm6fm{@&N~g1N7mb*?)Ihb^ctb{9V;!(dtT;k2;|vviW5e*bZ_H%1Gn>4LlXE?` zU80G#T5XJ^IS;tjQ3ByNAiKR5r;scZ0I;XKlw4fEwVnNk(v~G9gL-K#sfx$r>9Ltt z+Ebq6SJWd6Q_u)5btFC2jBMlBP%fr09n3K;<9XPdP zeNcYsP@++E_7UYY;$T3(iBK(NbTmw}v4^^RjQ{3>Y?}Dt=Cf&E7y0(X{K6yJEmp_Q zPvjAKrj2;yFjhZuBohh%yxebebjA(*>m6cQfuNa?>sUw zUM=0hKWU){V8~J&bSu!;2DSI~oLxPe>D)2JI!l-mDG-o3XB(MgM10nttN4PiUHL^j zrm(;xXx2RX*hLZG%-(lZLfzb9Y;jREV^xFo8^juy3OXg$VpWyN9mChjBQ5Uab`r%Xba@3}h&n&6ZakrPd&3BA?XrB;y`8 z->g}pay<$Dh!c3bIGO=xShK$^GbgTWSZl0X!`4-E&yQf@BOuNjH;K$8m`0)vPS#5< zS<4bpK_bl{kzL?darK?RxVz}l<_fWluS>#weXls7DuA*iSsw1EeFNNfCtG_|2IZWE zLoKZBF#G)*-*@`fAKP0j)-hLGOix>X>_xz!L+wE!FHVrWd~KT1CO4>3m;4xNUpC;7 zN-lc0?~nEMK2G;%@)zRt%{mbu4sNvhz;R&$TvYy%3~2*L&d$R(dt%tAT;pD2F0%pG z-qH?)6p8kl67go*`JSAd8A(ZvD2eIY6)rE|qhj*>r4-AlPuj?Ib4iAO4ZnV|niLGS z(RLfES4YK7A}-vC)melsq^HNq8|$pvuZvUHDDP})2Q?r z^P@A(zt4QZ!Bm@(XfZjmtTYzMskc78X=Aop8OV~Qv*tnEun&pbQn}YCu2hXJL=ISr z#jyI4*9U#ohdG^)c-X<|cu{n0Nt<*u!P6345;2<^5>?k7z+UNmm@}-WQC>v2E?1&$ zkXd|fxY<|DA>f$RZ4%GUBH)a7-jLO>A3n1s7*sj;SxhIYuCjg%*|-$EsRlJswdtL* z#n_%Z3MDedB>%BVBX@2_hf+Gppb{?1PnX>;d&3XedD-?xT&(!KoT=1Z+4^G zWysg3m-8X>Zf5L-c!~fs^n|IK_$zh4oy|&X2F!hy2377&!&Zt`w}^(vvb;%kE+MiG zAMDucmoE%$Hcrk-rczI6QyS@(p|(BjiC*@8rn9-j0xa9<3R~T8UDb%72!vkmkT9^? z>WGX!X%Kgh`Q1Q43rzJt|WxLh)oj z`{i?0Zku5hU*1!bO`axbz6`d*Nb14rvjl#fh;6@byF<-ovw2?^r}h2oIWA=bKr2zV zAoIQ-cFL2G5Z>yJQJvMCG64mBCMR<*7u#8A?4piop3Q`2Z;r-*y3AJ&iv(-~Vd;hg zmVwCO2%Iv)g-;j3ty+gZWK+{V9Pa8(_eM8aUEbF{XR@sNpmrs%>0@CUYqLkR`)x?po9Edq+ z^44gHV#$RANxz}}fWF$9E~fcrYi=*b*G~g;rJ`Xg+tRjuI!8|_pN^mpp{+A*k4RKW z0*&?l1Zy_%Rd8gvXvbL&PygGR*7BrHtcA7ouffkp60hngM_+0>=94Db_>g_^=b}4W zT1n~muZX}iI&V*KA1HbP>K~O=gb%en*&Rh!z0z@=e-$PrZ&M2U%O+2Qs5B6Ke%yR|UNPcd3^H^@^Q=U50ggdV_?*pxv%h=yiaS{8eRjyr;gO$DQffobLpFA>CVbLR%LCF63`{zqZDapNk=qcMUdPZa`8H z6#u{t#UV^cS4qRcH28>uS($l~Wqn+F(;Xgq6HUyQ7W_?cq;tK8{ZKm#Q_0^f_y@K< zXEOFO33Fhg=UB(n57Kh<#3jUM=Yp08!A#P}4PLpr2m5p!50NwL2$p$m+mPZxQJX{7 z*7VB!fp78$4H9e#h|rCOexC1~RF@?Zk(|NZb7oR(KOPkoiXt}l`+ayb&Wt^M@4hld zxC>j=1o6?-72Z{)e!=$h&93Yq=U@Jl4uO8aaa{8vgLNPg>sJ$Q;BT zu%K$j22nYbi+TeeMH`*fqm7xUWX0T)3eVMMy|cXD-hABHR^>@RIt_AQmQmBCUky zk*lPA!qQZC3`ME=F#27LUL=pC(bOt8I7Of?r2F+qZS|U0C6#q<=T$PQN=$=>JVb7< zEprFO@%;ytE^qep?_Etuo2@v)GIDrBCLQX^IAT203gHUJ0elH9fViDpaC5Z;1k`&{@=1e6Q5! zD6e;nyv@+`2NX71rI9DqZ4g;>;VYNj`U}ayGqY(zJ9{_%!wch{b()RoEYC}|=1AgP zy*@z7#STIwdXxzJlmD__FLA4$itMqZv=L9{-%6~~ISjVAHH{-+g~+ABa&+j$gh7K$4x}a`%b;j%EqpcDZKf?Jvo~s|A#(CDZK5q$RwrSg6*o43^m+1Dr)D z!=XO6DYFW{1kzC^3ay9&E?j7p;G}eV@8B^NU2wRK(ze!pW9crL?lpQRe||tqr42wW zC*paLavzWC8>zXUyP5jANr9SK*#AR~L(2PSKggEo!v!)GgGd`*?raJISB>+!2D zlReE}I4Nx6$R7L{U3Zz&3p2C|kyTURsgwF0amegqZHaw3n-J_t+4mAfQ36SsNtT=8 zI?Ur=d7l`6&fa()nXJy^2M`8|A_(Z5Q4XFohkDHfawLQ22cT`Qb{y-jIq;cF1Mk-- zAZOi<8(vEIgIKf75pbd?S3{;%CDgNpRZvZ%`$@1*XW7QNT3C;9hl6@3yAM;Hg3oLO zhTNAz70S-u8FYMf%j8Er%*ED{)?Pu{cjOT09lCE4%@Iag1ds3VGF5i@UVoV#z!}9T zQGgFVHh|aWH54b1#O%*c;PRds6T*b_SGrQtwX0NZ#@wLvGQKm+C)1?HAOq4}m~Tw} zrobWDh#j0XwPXF@N48PT(2*o?M_p971m$ftT!mTg#y`>9GMh}`84Q6A4?&%zhA4Ts zynqtDARqsYFCqTLuVt{*9w+TeI-|>PTiHLTq1=;2o7uiBQE}4`57*2(=dceb`~Y)a zm~1Az8v9Z2&(@0Og&EmIVHVft%>o(Mqs-?jfH3-ffS|>RLR3QytL)A4TNxqc=LPg_xqU}+v3JoM04Q0W$%0|X`($bsYm)-ce*LV=c9z>?H+vC#mDuvf zuFCpCQY@$k;L~UUey7u{*|IrlF~I$XZfh7Kq%B-QM8Q$lgpdTA_$V_KQf4~PIqF2_ ztBn0JN`z4TYy$)4k`s)-w}z+xz$K5NS1;wxl^oMf<@n?pVj+y2@QLZ9ery8LF`CTz zXXw__vjp3h#L%htCc&uNnO2Yko^M;6h14U2;+{WzCjv;P4@=Mm4n*#D%q19%t~#PD zHFFX=iHh>}YY#ymIM_flJHi*X$1-0d`Uyk7Vbo3wXk@muyd@apM?0F`6hb`EUlZK? z$Y}P|xs%O>LW1aheO8~B+Vj@;KJM&>il>k3{m=GZD`m+neX21+`O@&v4hi|9(O}jG z{YDup_B7(7ie|#R&&gM0cy-x_Ll)23MYyWTT?`^yIUewpNW7g<7>k((cc` zpo{OUfX%Aspba)R@)9xNjo%xTCod|X@yhI0cn!@O$w&G}`W$Tj+h{=)HZlL zxLvywdR@^-Kb23bKb|O+DE&*n)AbvO^)jox>PD6LtLOXx50nGUw+knnx`dRDbG8IO zin!;_9TaA2#2`cB(6^W%LF8V%a3Z~#8n$VkzR34r0ae9cXGYymyLjr{W$0_cY)_M+ z^TtS78?B-peqz)GJinTBdzxntG+TjRdsnv?BX&=NJ-ei|WfUF@0lPRpjZLjx(ecw0 zo3)9^JqHg3&BQJvOM299& zQ7Z_>eh2g70g@-EdH$j~pLB)Hb4CRrFj;XPjs;9yU7p@lq||H-*lCp2Rwxt3=?-Oyqf zzrK}treKFN+4a3TF?&t`g{8Lp!*E;0<(8Q?7F6+9IW1E`BoCzZH|?dbyX=VYRa^Zs z+h=x>+^MaU!(6E_#l_OF-&L5!&ON}E*;s<(V|=q7A+kPY!eRH&J!9?uLq} zdgKyL{8)K#cxocna2mtsY^Re;cI(nWs^|5bPs4;wur<1pE`Ez<36DfMC)Q;kj4V^& zv0}M5QW?1@BJ-S`QRdB~>?sdJ|Nj7hK!3lI2sjl+>~3?kK6Fx=p?m-{;z3f?i-r8+ z7L;V@ML|h?9w-oMh`?=jt6ng=<&_P2Yf4+QVSf1o(I!6m@NBg_JSdzQ@BQFGGK@#G z%oeO|X99V=59l|C4m5>c(l6TU8Bl0_6=^MW;*nPD8nVF90}CZEs1pA{VBuSgzlv!( z%a)RD-~|?XGDEJ~CHr4^Ts{fGE7x^ra~-|#Wx0cs4{SOo|EPG6yjfNl=fG}xLa0HH zBYC(ZM#YDy?JWSPLfx))qE2LO^tnOZt5u(beN>sZW-tX$Xp5O;aDvkVA=;n@R3L04 z@E37OpDH#I4>eJc)u#AH2WN_dCraVAEmZBQvl)1?_vt5M>47au?d;01rsQTeUr~Y% zwOBg?p}@ccLS{wViMz0;y@Ac%+Oi$OotuAN5`5gG`{Eb&;-g%5OneSEjP9rw`B$>C zb@gca$*cdj)M28(FZy23kHzD0cQGbrNMCpJ^4)8g&oDq*{m*Th(#W0YNr3oj2~KFf(&A4h3AJP?&oFswid$*w5TP@CTX}$UYk}Ge^8Y6)$BE|0ig$nC zs}bb_mJi`O_N$^eudyi1QUaTgR8X0aYE_HLx+a$8lt6wUoOXXsO7*SBT&3T@7DP9( zi(5`7x-n%QT5CRVaJi#~MRoCENKU+}m;;$>ycfNCB;Qc-l6UMS*%R8O%E+3*HpOU! ziJ9R+Wsn*@ssBn`G5R{$EHSWWr%ljxI2@#Eh{I9_9dYyglcikrZa6_2CNMYf`bTlF z@D9Q=zGeLEPBixU#gYE`^6QJK(xSrE%3?PEpScb|2^8c20QJ&KNkPdC6~O>elR~kQ z%9%IZz8lR0_Ot!)-&*zM8!DWV$K)(d9cmUYDjU>us4DX6B-=^b8d(G0G{06q>D?&Y zJ)534wl@oG_hM1HRv^7PNKhI$3>NsgiN_SoX+o(5an)9_)T@IYv%iydrAcU}*PE@1 z7F%GzP)!Z3%nT{medX*w50QRpx|ze2Od1|rxjDSVUylwN=~t2l6Bg^;X7SEBiN`>Q z^KMx})h&>5FvXuU~gEI9Z z)e3(cxt?@UH!9!{NXb(wW^g)#N_B%Fq>O!XTDb|e{WeMBzJ?K^D>WmjYo23AWuB&b ze^3TcMDpI5S^j>V!NR{PyjT!WOyMIW)&gS=-OkkY!MZmN=C4L-^xqw0T-5+c{jh&l z1ed`8L8n~Xa3Kwc?M!w<#mEbjHK@f#kUDr`z z9%34gA%oXLE2`gohOc(BJ_DA~XP0S3jU= zt7^lf{sy|rD2=W7X4k)PcgDwwt?=mDR z2wPw?xzr(@NMt3}4oR^Ch8q>=V^E5-0#RE7I%a~gt4T${>)rBepWL2ek|}qpuQGLL zU(O<;uG}t5JuE%c3!(}5kq1p%9oJwM2V8&ykO87WKc3MS$=Ay?fN8Rqiy3sWCG6n+ z?N9w5*ZC@imGbTU&r{Q>bO&sWA`JJ%sPj1UtRkx~J=p&S?xSq2ny}#jn(^RhKe?ng z5sQhSgvT33)$|Br6Yi1aP%_qdfo~pB&+uwy@sdkP)`WeL7@n;@rzoQDaO<$dwKaaS zsUn3gAH}dL_3+C1*9nV~?ts1Ue*4Gp&=_8qPsYX^1YS~PUY2(Zk=HUUH55TMrsxG! zzv=iIvIY{Q2&Z|e)EP>(Y6tBbFn?T3;BUQ8Pfd8{j_kwuGy3V5`kf))$bMlT zu(j%9y>&2iV1rn-rB*J^3{>zG3{ww9Y33JZ1V9305h0{30tusCtcanwb#OAxiNNxV|772nqmv*fIybJUj4?~ju z)RY4Ffp(*KQ8-z*+bU@0X*X>NcQyqerfkcXS&g!16t93#=<%>E_boTA<-cj+ps6p~ zls$wByul_w+$v}M_BK_SL;$?$y&bx1`)lH*x|9f1$r!ve%MNS)0SB&(Djg+O54nDO zbk9{TXF(nW-yN|J--*c%5g~N4c6XRM)Z8=L^^qNWk@8=U;^OhmTte{gRmv|DL3-!pB`ywNmJ zYJAdZXvt!baM4eZ(eVT7Y#r6*!cts*!o*eRh4;(J0`xlt&2(U^00sD#mF6HR#-Jlg zk2fDdehsJ7j_>3ib|BCyTj4bN%oYvnrs98+q%aJg@SgFFrqn6n=(N-fWD^un992@) z!hep1XHCnT?6Ux$xG@1K*n~fAdx>rLCdh(@O9c2NVud`1^mZ)dV{J;0D|QGqJ&Tz@ zk$YYGiNQwF_7>$#D5-@8Z^vjCtY&yO^(lh#SH#bJEy1PrqU+3>YX)b-f*Rl==1=rs z@$cjt)6Kqz#0+@W4@@FbnjY-8)5F2*37;pIdO>ln!KRIwA7e{)tcwe<(XvuhsagNV>e8!0GN09qksWCClt1EEEOa#7P7e9$I30qI*%2#ej zCnfIfnqg06sD)b$$bFU?Qk!w(ALhY()e-)V0h5WZs}MO(7O%Wi@eb<9hsor>OWnjSCFc4 z;cQE`Ssv_FQ@nPl>1c4T=}h}5#Z*~kQ0FY2Ssg4^6z+r7q4cqG@az9#APDbH5-vV_ z+4`OEcz%}{7ovAHf2=(l#zBzP)D+{*9!1)fUO*eU#keTQg`=Osb_h~O#rk&+)}lr z>T!Jz);c!7ID9ABVQ(&p1Pl`I&_c9rRYT0yaa}DxsJtb{=OSiY6I)B5 z_)jV!hZ^14Jk(^}_aLKRg^3~{NDgbWD?@3t_Pu`Qc-r$) z3ut-GXik*-L)f~JXvy}qH6yzvxScD=pbIp-_Ba$Wf8IfBngF-KTl<@wGOeyUb-ndTK6&kwER)$N9Zr>AZ;xBW+5;g4sA8LYiP# zUMSMoe5x_kw`Do@%cOZvX0kru`%4k^U7&-NL7&+wz@P=xSS|#G<#v5rDqJEhei(W? zCjJN#McM*POHXK>dIA^e06u2@%0r&XO|8!uu#H_7#fJ|2!b>eFJR%iVO3k!I&0K&Z znWt@9CMQLaiS-k4UY8V^>7Y(r$f8BCc=F+uqE%ia@3ThOmf;2g3>04p096NY^`x^}i->l>Dw}?$m@Aj37sTlvpz?T}1)ZI&^ zkqed>(#!afA(!TBn2QBe}>DRwTQole$Zt8fyKNsC&p{90@ z+~D|PlsXl{(Cj+r`RAyQFPYSg6_Ma=d(awdafFFAmG>4K%6QRZ^~v8UY5=)u zt=44^;kaR!t{*W$xr*gh4VhJa7a7Bx=Oer2WB+Dn3?kS>U(>^FW!usFV!V1!q)FY5 z$#sROA|1oWMd}XsoE;Bw3OjB@AubSJksB;a7sRHd!9mVqaYny3;he_$qkUgXO2>59 zrT!Aqlkpw=K~L=3Vp;^^$Dri>;-SmcIB**9^x{laNtm(|pC^X?Bvl^RZn7tj5NAMj zpq^GKs7jkc;*=CJf$wH)eqDDxa7s%}1>~zW-R-!BIXR6|5KMe>YDYmta{l#DBa4`| zXH8bFi1Z2hXd0yPT%oJ-cF{l}w+0llW!}IOOKm)o#WI$KWh2zHTVC-Q#w4Zga%52C z$T=IS!xD2{w6XU`RMij)dg#IL^mrs#4wXf)dF0!v*TG!=B%09hPI27QXLHQl)*G}w zSadZc{j08myM2Q@YW0b{q8i zs^s*74Y$503T>J477sj=*R&?C6NrE4AwMvSBnNmG>=4!G=66i+mSOR?+Uxad>5lnE zyc0D%L2#n(aDYtNOK5%dRgLs#bo55KO`O{j{#eHnCQ^|6`xe%AQ}33J@r5B+Lb7jL zU|55Y%@&92o79mY&FV;s=@GE$OiW=Q814@12FZRFN+lw&)ZJ@7d^!zmXq4J@e(&o zx4@PaKWK350}>xm(!N6Rc=nc+4#zuVfBcTImYXrh>L%o5UIX5{;@C$vhhxjB6UUf{~Jikr}V8ATCGl;3_gUn=Q&J6Zi zk6KZCM#H>@ij9B2K!&>N?m@com!iZ?w>0+w&hvn=c!?X!iJI~Yz3jCcO3V`U*@vK~ zt^Tu^6@@?>Fi9l3F#{4Oz9ERPD)F*F$X5BQiqqfwr?0I=^}e&Ezk`#8e61}@p?mim z*rOxn&!#R=-n9M7Ou!jxU7&Buksn)Gl=OATY5`AD_lM@V|Ukij+!Mfi0@qtJ7s0H6j@+C%s?Av_{e&5_eI) zCMv{{jtP-(B9qmyoNhB${{0o~$ zG{b0Ac8+uP<&n;O*+vP5)>QsXj1VhxH(|eKby;QdD0bV)%x^Yt&fFtjw_*7Nmc8g8 zSc07{n#tfT1Jcr37c9->F2Hj zrKY6x74*gOzrIXiO$xg-O>Fv+%hI;T1hE6)1^CMae+j-x>)?AftXt|71TVMSPExrU zj&Y&V6inD%lGIa+psk6hh*g;0%!T}D)o+Pk^Z(%8vQ)S4*Md%9NK1qNK_?ntg&M3>mF7c4rsy_28c@s8CVsFC(i8-Yv5|Fr&#-`*!x!pCR$-`xApK|wnjv{|y zqh|%d+d2TEWZs?n*Q9ez+!OUYh9c~Q)mR%W zOnF_PAmxwYdf#VOD;*;c%crZfgIezd$_l5^!&=&X#=xIKX%~uVBJOGuiFE;jKF2l@ z{GdrT!4;aQ-rf_CBOIwYxO;rZS~7FTp!-nZ#+e;Jy;DD&tXD^9>>fe=oTwwX9pCp) zc6n7ytO>gx&wX>d^^e957{(mxV2+5gL0|_N4dK)#Zy$+q=6KQAi)kB5T_EZA_cU6@ zi?V=B84A^v4odD!X%iH$11FCn$01WDVQO#QgK#F5{w=N&sy40&#M>yWtdGca8}|}PRf@KP z&)6XC&W?&fAmeEqS?HPpvQWx?pgpU!?0foGTN0XqwrA(p=yWFn1=1bKS)u< zvP=m_YWaL-0WD)|Ye$-5ecRvzYvyXLtYwhjjEaW=xKL%5(T{+snvk5An$;R%=^U0TwppU(7j5PfMs~pi2TJeFT_zR%kqYf@bTA; zYmwTjtp=oO3~XX z#5PyrAM8oxWRo+nS?VPdPZsKs$&PpfAOg50g=RNyh%(Z{>^A=DUpf=D6p_8uwnit~ zY_|~V2pUIYrZPM=#z`|8&m zAtP&4ABgM#)*$1DoCrkVt2IhqqmrPvy8-8gc0yC_z zF=(u(qX-a|mKp%@n@(i*99^zJlheH}RxcN$zmBt1BexkLGIAMl+#S`DkG=VF}pFHR@X7VT!r6s)RON7>)YP`jX zucJOdH_zv(Gsx#A#3ol?qyPXZD}9j1_X4FtGL^!R`cp>55tVa>^DZ3KXArHLb)%%anc4#^Xqmp`hj=Z@yi5X?ugmCw{O_ zpR&R25|s1h|Mjxpy~`G|_03~!fXp&=;m;qOU?%+)TiEqwrq#=KU)_m`Nn3&IZ%X`w zG#pbnSVYGDIpopNsBJ*Hk)a zcT3?`wbjrXOP^I|+YX|WX@-MVT~R_ir6NK_ZP||;KKTu`BrTEi6x^mT17!fN-SY_N zzb0M3Zc*OI*}%cX5HlwQM^MnVxiOP>(Qk+d?$vbIJl0O$R{#`w!U9zTggthS6+i$0 z0{{RF%eftN`%Z>v0P3ux6aijvJI8iyg?M!e8cC~7*PvgbK;dma9gF|uvRu_gK^dmn zy$>u*TJ3;gxL#^505I0u54c82o*A?4RUZWx!s_!5gj#NWQHhqNNvgFr|*vSd?}-BWup(`zcg15G&U@Mj3em5+5U&^*9G?&`be zUGHC7x!5p$4?VD4dMC#{ZsxKu4o+}Ehe`ovnM3+WgM&ec5RV}7hKkB8inIZ;5^9}* z1VL=MdwGKoQD$Tr95Q~`s&FBy#SiOF`VJRiW`d}GrxDPQmR$ax!a7&3lpM-1;@!F* zB;!a?;y}Q2i0lAl>{{x{VXkO=p3@?5k9cXV@hGZY$W8RoKjc zvBBop4Ry{o?|+v;m6mcMGY0%5pUPohdzbd|*Lv0BIVu9%p)@{=L1v6wull;-F4No) z!8u*&699+$CP}4a!LhFRMgtn^pcEuT1=iZZCQ9`)Z&;#5??l zLzttpybVkOIv|vG6&F^G7SK-i>Gm3MmCuD6fj9n?)RHXRD2QNA5w z4ePE#5tI0l0yH!N;{kD-OJ-llGE(7{MUB@MLLc|V(&rN6j&pPojaz37vIWzM_LFh7 z(&gSrSW0w?YF$do9XU$&oN>4F*d1O_wQX1d)*X>Kj2l2{=9tgvI&Mg@*GYM#?u8Nu zkS`4$&>&LZVjgP<#4852%k@?3q4sA*4AoHVt5(sWxrIu2iZQYi9|)7;OKrISG6g_s zCxN{uJ30*+wo8BnLu*g5sSP41SP{?10W$;A3mWKuu78!vMq_st(o{Qn0IfPNQ41RE}YkxkmtRYJ17Ec`Hr*A5%nWzq~D89cMQ=i$I7T)MRs0 z2}u8x%DiRG*_~>dJ3CZ1B<{)kLZinRbx3qpkhvu;kzG3o&Q|~d_5&CI00RI30|0OU zRX_j$0{{R605epu0009300RO1fB+QLpa1|4hzW54h#0iD3m8Q2-rB})=XD528a>4S zi?i-1o_`*N5U11IC#WoSFmoji(KuJL)(3t(1C28S`d?84Cg%Rim%G7Js<9@ZYYHKa zn~xhz1_&tt_g4iA836-zN&o-@0009304l~2o|;Jz{eP&5!qqng(%gA`*bSNLpI<05M|q9UXPwt@pwk;!|r ztjRGV0aW@U!nyBz-uJ!lcyyXiV~e!!oB#j=0009300RI30{{R60009300RI30{{R6 z0009300RI3BcT8R>D)n^5l!I=TT*2(0vrGSr-T3pJb_pO9ytWpr75y+MKkgjuWrEq z3VKsovhNL7^c8@9-BBhV5ein(HYpP63XBM!2rGhGDf#&EKFbjWzu9`oCxOo0F8c;X zSV|=liA3yQ3UjH?Dul;zH<^S6{$l6~__#ZF;Ln|=KD&{1c8Yd&AO|}v{jcP$T9PbW zV!OI{*rL{Uhj65#Ajpe*#jM7=flHiDFS+5!n7<^u$VwE7uM!&4VdP?Zm~TChv!i zd=;OQfqMe!^>E!z4HU?6?Tyf}i7@ET^%MbJckP4QT60p=rU#amGn?P0K2LnYll;)v zM&R-dXQrGB+V=w!J6#7A$SD{ONEl49yLRast6QVqEDfeBuvHhH~YAdv8)&Gagp1wJh|e=a@IOW&`V{A4Xhj?|Wt zU^sKZXGnht^pi}|^D#n2^}U7LZJ5#WnnXc&=-<2XkCgj}pm30|##Pj^nUDgoPk?Nj z;*W|k_1k(OS*xTB{W!XXOk3++xGi|J!x10j0;%~v+Xwd9pLfmZ9Vo`s8N(sei75iD zOT@p?yensFA6)$$w{#Q0;=LlcR>N?bkmGlE@WjDFcD$*+A!t z?v%|CORB7s=6)RYF}24f#7l4Hgatu%9@Q8>?L~JDp^$DNu_fWy4t2?6t=B^+jVzE6 znPa7Q@ZQa`@5ef1o2uaGo1L@f9V{eks$uJx-EHI1NN^TJ!3R<(ZPRZetNyBnAu<66Y`6 zb<%$%VSomGtSr-@ia4BXNXw;M!hH>x;hVpBNK4f2Rw017h-a>p_Jy8Vujf6{WFdBL zI%W-|mTF)FaS?M3#d z0l&*`85BK3`nM0sqWGZdL@B!hJ8C#7fYs5d1nPb~kvbj5(a59vcj0!U1pbe;P0u*D zM5Cot6g;2}%N76mA+xHdf$>fcyc@-&Bpu8;@6&l=QXX{IJr!f=5BGjTK zzo?KV`OWG6jDX-GSx(A5{R&{@9|f=*@h=41#kG2W@vTtWVUru&#~cBi_O(>+AKkO9 z0$Q>m36n)-Sxg=~;Aeqc;j1W*`5bR&!ni5>T#d>uTSbXXnj=f{i`OMo@tl!Im>kiv z=(BG%tB{rv*$gkq8@17evyE%qI@e@>`Y${U75f?s9TF(KN0i*InZ%}|8c{6YXu7ee zLUP4*4{)@xFA$Lz;P{ZvEa@A+*0AMMg4Q<8G0l$H$Df=$w;LLR!sYcz?c{(!Av=AY zTiOq>OXS^>pUu3$95wyAxL`Asgai-PSPgnA7%g`NG%ftK6x_uSWkH-@R_ z86sQUh5XSMgF=YnA;HepcpnwH2j+*!V%RTJF`KAZx%C?!MNNAwzZYzOByX%wQY@A0+2g>V*5pBl>?;XiigV4Xx3 zz)Y;?T%BfQK%@2G3-+w`4#xlt51~0;G@wm?q}>Rph+d>1m3P$LNO(T~y&=WyJu+|N z2aCE4)CTCB2^!Rlsmnnvh6M3D=b^Y`G-fANnEL%7g~mPl)yI3`3(x6Ua)t7;sx9M7 zK!RI)?2YP(X@=gfHzN+BC-wMKQ{?oes+QsE=^y;F>5G>5Zvs57hLt=#$P5VTHb=$_ zPn`Dja<%VhMlT`gm@Rre4rTRgi^B{q&<12@d4*lbc--fI6SfeU6j%O!99so|M&K;GWO#^C7FLB!PQ7&PSuG|5eH~W3&q*ehrA09iA$rglDz&R z(_S_#sYHWQ`?Cv{X5G6?drT_#=kqZO=d4GGdu`ocAc5rE(5{kDQ(bSD`Yk^ zBAmEuvV5!7rS2C?S4ZjD8@0^}nSxRY!wZd#cuYz13Vs;2z>||d3?TT0hXkKsn?gX% zd@HGB+a}ZvZLSHTcPOA{MZo2eSoK~J#tgaI1#26KB4CB}$FvVUif_l* zA-gRhIwnXeLJ_Ld#WS|JbSFofJFJ@q7!nAK(yM)6ELiDWS^r(9`+M}CG_{JT%E~;M zH>^&Ldu9_vZ~b=S#afqmnQNaSmI}eyZ>#EU#&T(&Hpx8I5$56864~)t_lv6@>`RGJ z;~*A;os;(}T@WeE-GLB{1G)QX{l}p2c6=p-=7By?Lg+%vFLpH9eHbO&c4`qjFR`?# z1gJhl7^4}ba&hjQ7|cs!d&CTG1o9N?I(T9eD|0zU6y@h%OMEgv+zy^YJZN|aArr>L zg!8ouvibM#V0iJ+!@0Qux_y*`!R)=4zjnxA^_Ol;X0DjW>}p?sMi3C+cnA~S)5SJ-)v&D z-afQXkDCLfC{E7|@K33Tk;HsES9gld#Y3 ziW?CN_8?mbdc-5lLf87xtN-SI@#ZI|MFO+6l<_{kX-O~Z(NurerD^vkKTIjf@8e?{ zzE_}}6=jVmuYi7e{)EW|jB-$B8SlDd>9QdxHc%-#Olq*}dy;#sl$?&-vrxN1XeXc! zp;RpT7N&kSn^&liWfCBjfSi>l0SnZQzDGXAFjH#nxrkEYQ}9NZpB(ROwajUmUpo( zHSd6*xxsZqhRCOFao%&9n}c6!OEs91CZhOdDISuo*pxWHO6a|u*IDw@Ksy?k6{uH= zb#TTg#fRB$*p;`$T4+J}wo5qe|8d-1=iOXzbIB+NKN;9qB(j$LEiSb-Y_ zN!b7LeUE^{P+opMFDIway?~2Idx%R}kvPyU)Q(A81b2rm>A?pX2V{po^j0nMiw!pK z!JW>r{^)&WR6pn4XX!^gnP2@YFxDK)wgrQ zYdnN!+(~|(+_E)4$oxICbMA4~yR!XuuO`SB+gcO<;LRQ}FJKGrX_klSZ!l=xg!0)J zwx3-i4Q#@q{`f-Tb`Z!DTFgkfx7Xg{>myRk>TmEd6*M9{tO$r;D!rP!C zphv4w_!yEzUD?yb;iKQ-^+MvG>_+(t?_KnMRwOyN&HD+!_YAr>&TJlkiOJXI9+bkO zVX%cZS}_=B!k+4nsSVpkR&4NIyY~uZ^x`&**B$3GN#Fxr$E6=k9gk%xw1!q~oHKC+ zlP$-OiXTl4zf28;PTa8Rx0!_?KgBgSMuWKkj#Xb9f?07hjWI^UH@sT-+sg|^%{bv_ ztek{wqv70?rQ4%7L2s@(WJk)2RjX9(TM{tF>9Wy5Gzt13fYqQ|)~R^ZY7LOujS=7O z>F`t+vx-0q(-otitsdiU=b+yYae6jlnd_E_!y$ZNf}9MJ-+koprbf%I0GgOUgTg#! zrvS)}TxbbpXV(y--D}bI;LllgUh{ajnbyJ|GxxfL4X`~nx7}bx=$laKK2Zgo4d>@Q00XC zL+V==f*kEEa!uJH<~o~i>U<_WC7Ci_o|q~XUO`A0I6!lEZZ{se{heE#G%{O;bN9nl zELhq&WR&*)2Vx(W-!DxMTPd?T92wzC(X^Gs|=)}2+`K(+TJp6ga+a`1|rjvy!8digW{ zA_<|4A5YgA!Nm-d%vz?Fqs-gl1dldjdmuj2FRq3ySGIp0&-Ke2YkJxD5Ct^Ntsp!1 zvWgT!hS(R{GT&h~(?dg$wd+UkY?ayCW|#5<0u+1bwK*}}16w^s2#37&@P!Diu62K} zk(GdHbNk0$2ts4r9r=DoGf8obI0xvbW6>W0l7M0wt%nY?x&5Mym-NJ5mFaF$0(k`5 zMnoM~#$uMhvXRx(vtBg=7LEPQM+d8*eXl^m*yR<9S6ApUfYYe<9ae@H+2#lm?l6+j zuXA&5V23t~+;|Rf`wz)rDhfDyB>*{|RnkE`6Ef!5f&baVsyMES{TlIAd_DbU^rhs` z$N&%Z0*h`0{fEiUboYX-@MMh?zNM05Jm-D(%@m=zoLVBfsQRocS+k#H2PHlJLb@os zR<+L0j?Us08hPYzJu@q^I(Za4{XrZ*i*EL#Bw;sF=|h?dN!Q7`I8Jj+Qx}(O(wutr zQAnkU@idR4CfFPN>i@{?a8He$@zs8^IlNsc810Xi;L$|S+vuRl#P@uPS)T*r>q|## z>P30|&!{|C6^-F@73Wdipu?Cr`LFd-v{=f!=l{Ki9i-Ha;Va%i z7$OOtat&^y-C}1uE!pqpvPn)ROkcoU!b6+j{c{-J%nzTp(RTBW0U{Aar%$~EDHy4z zj-oGE-I+e2`fujoX(-bqOh$7jQkXZ+yJF~dFX-|FalnEGGooe>Yf%{P+8Ezp^~AL< zPj{LOo_B3_euq^- z#_W_bXB;W-@3$56t4q-W;w}hXvZ`a|z^<*aKL&d#`^`P&ye=s&Qef^ns42Ga!sG9N zGisgG5XPKfPO=ei+$g2GXgJIoiA0YK!qOkwTNkUNUFL*E@U9Tx9(nq};jEatG40Sc z;i`a7{8*dww9{Sg?0Xl-TIMyVBdd3C0&By-koM}2V(Ix z#RU&;HC)_r{ZFHQM449AF{5i>>l4pyrLpF|+iMGOxx^6yxhE0KYci1>Hk@JXcOk@A zF9)ymmPZ~nqA@9~CTs!_Q`MGm#i9M}bNvcO6gRAy1kZS6YgkEB$f-oEAgjgfKe zCFP{0vL(fBN2nXw17;F}tDsc1zALh+OZ}y46JNE$pQ9FEZwRK7{s&$r@w!oal|NDp znRA;ljzOrrx>6ftxO9UL2A5#Qc&d8&h{{ufv*^+I_`pbPW;d-E==4rY)f;t)G#g<~ zjIgT($n}L#x_w;{yg0X`PP9RQGZ(!tV($hHpKc6S)c9c?o5vGoAPyM$ zabxX9J?X?uiF>X_ZsRtsUa7Yco6!=Y#o_bQ!w@Qsi_9>nJpOI?T9PNB8 z34KubNm7j`K6K$;8dK#PxB2#NNnr6(a4Q!5MkrYd_d!YaVA&uqP^rN_`WMe(I4tYF zR6J=_D4?&JoF~oQ;raXmH`!(-4wlPKZ_O!;j%3W4Q1p=+uL`wPiT|#b!HxjTRw3wl zrDuFg<)-tUm+NljO>XF4?0*Y{S{DL} zf7KCfM+cjg(W=4aeT}e70NFqhA1{1m&U4|9_%4VR9GFDEJ)Pl`tSb(09e?*Cc(ddL zKETnWvaCU!>|tMm@Nuca7PAG|pXJ{ed4D2|nVQ6`7<6Vf|Ezo@k_(y4#imzw=qfrA zh!j6SEJQ$&Oa(E7`n!vf^d{ zm@xlkTBz00V6B%Gv-(V1g@O{{3C`i(VMUsqC9`&29}LaTgc zidol^B!#j_`MoIV+=5wD55yOyfjz{M>11Rmxh2_0mPRM2hyCnK)DL$kqVYD8c@>Lg zU}Jl-Xi_mH;M#+62THXM)!p$?mXQ0639G7z0TOhKqX)f!*)OZ4(n=z)(M0nYuy&!Y zL<-ti5{7bIbln{@w?l8`}H*>IDCUZI_8tAt^w|RZBh0pYn8qNBBO~V zW+E$PK%hUXuEJ>67NY@*l*wh|{Ik4bX&ZSf<`?YGl{#*J?9+mTW@lt>))cdVz9Dxf zaZ0Fowg^lG)>VBP@2!9L^cxu2xD4-a3pgf-aW5?X*`g@;vdf-UN~VrSUd_@l}Z;c+iJ2s$ME;})Is5 zsOpCy_g9aZgE^h{dYS~rOS}}f8SGWHy@5h@sOnI&!v>+r9eh|3emq@d>r-Qk_yL;| z)r`XOsLXz;4 z&+xmwJMW%M4p!4yd8<41bx~$kMI5ewU&b}(*P2UY$OtCTI1Kk3f+815rbXzja~2Lo zQPh|XDut39z$DYEDqD5ZFU+98aB7-Xu@V64j1s%jZIGptFm?0rXQKw{w0W8oB?6+$ zbGvp^QYgMrq%wQ~ly*uAQy%Cheip?f?REq}G8Oj-9v(e%M+guA29ueHAUsrt7lCeG zGuJ2R-JiTwAKnriB~Ty`^82z+P|~UQ0-{a@=ED)~%7w{n;eshf%+Kx;kxPU&F^0IzaKcJnMXy6X~{IzHZE(^hWXNyj}`3#8yIQl zZ5h16kwZb5;luUp6??O%a=0Nlt2woKHvi07KCh$Dvz6~<&7MCpi@g>pF)J!3dW${# z9O(`$?sMyByNIRW&$loaNGlm`m>(#QgYvA;+L=ND0!c6wnb_Nyydt#P#1T~wonf^@ z6MvRKsl;?FK*JIYt)KYVEcCr*KK0p(Y`OPDNt%5W!sB@4;vvOx_%F4<4n8X9>cw(? zLQlbr8c&YGj!@SBece+i0;pwcw`Y791-7|p^3`)wJD4O0$B!#!eECu9y?;SqO$!LY zn-1cb14Dh&)-AA7+C^VL6Q)V;!Y$0xfkLh5;W$fo083W*P!RPjJTDqYBr@uj7-FCM zkzFN4-dM~%K7~ZvI%`&>2Y2LqEY9u=%XJ4C8nzoJ4bqp^IX?g&PD1$Jks`Z6YBT`_ z--XBME>`0nJDm6%y%!>WMP|(6p=8`v3|bagU#rVTMplnx^rfKk*q3V4v|Vq5M!W$^ zN$haqrOrG?`c){|km&@vt1ss~LxwX?-mAay**1`?+57I}#!m=f0AAZ2qD}-yG8|cf zG0BYD_?x@mm=fRiS!b2X7Kim4vJW3%5O;4^f!iKE^8nq_KGAbR9tJ~JeMrN^^CSFl zjhC{jy(4^J%U(Ho9S7$Tyl|d?1yo{(j}B*J194?9QY=+O=eZrgcf*3u`)uYQ`ov`X?a44stDIFo^n!ohgLfK7%y_+!bC3Ev;kQCnfha%0 zyZ1rq>}EA{y|{EG^j&^)hG$JjpJ?j<@A zTJtDMbSInKI}HN5Ti<)!%9smyNBKfldCu1=LyB0e_=8z&Tj|M}_C*PQwKikXO#lbm z>>7wLp#uXrRaEV-#g9z;P?LPY-=Y^MhXeW=!@YaNV^mSL;hyo$_+Yl%B)FH|2`!mV z07`Gc5fJ@Z-$yzNk~&1um$n}7_`!(56(NDgY22NZMcMCKDDHsG>`n7f{o55@2Ac4) zw6t>pRv*km$s$xSYq`EYHvb;x3mV$q=DR2rNQm&-P|1hO0Y|$LWNDf-bB9@DuNqZt?&0Zv}4C@?D6A3 z6s>rd7W{dJR(iG=@>m>W17K;F&D~-WM3hqb6E7T;?iC#tQpd3kDSH_Q-uEUs!PZnr zYiiXip&8@kIKX#!XPKE@iBmrYQAdLyHW%eH_66uzXAZ3?;^}z*C^BC`6%2QFhKWZp zEJ8z*g?h~zkq$D|sbZI`oUGE(h$8dQr;NHvB{{}@#mg5vyT{Vqi&QlFrQl&^ef(0h z*jiYGem^!ov&zI=uA%*pXhB|HdjsN3VwQ=ElKDlioKPu17qdS1j)&2Pg0335AS;sb zivcq}Ym6_z493df?J!lGUl>P|8JNQt%BVpHVX2xub(H{ylgU3G5__CNT@a!OAUV#3 znrp1bpq-3z8O^L>qVQB3e zsW1C*RV`8;xC1L;brvHh1dTp*J|cy{e6WB2s6p-c85JxG8)5`4kuYHg^I2@~#+;D$ z&EBg3KS030u*52e=9KG!k{P5?p~xyuwmPMhIEjX}p5op;gs>^gc36nS4)6jHb3 z6XWyMphC! z68kylFMB)JSaE7i2t;NN$H{W$yJiY;rctVtH_6V$3-Mdn9;v z(G^hJdSCG4UUD_wD=0i$AN^g^1O7#bLxeEG%>{z*u68%_+ffPG_8z>Y0X{^TF?Pe76bDeKb0yGk-GQ7p|-1I2*rsOSh0gTbN{^VpR{;4`xPJOtnk+^D+ICvvV zE7J2urmF^Ems@7h4gFaC)t1Log@YMy`U5bk5~Bg2P2I|J%E@wWJ?_!r8DN0Ro3e%= z!TT@$r_dc(ts1v9bg>=y@wU*N!UJGp@;D_&AQRL?>Co6^VmpB=WAdyC$qII%V{zp_ zx%RF$xeyU8FOS(+BTu}?df~{mC4h_D?t2aRnX}cW5Oe(SpRjOG6d*?@iVa7!b99xP znD5dnFjW0V#DhK!wT9!F5sY`uSSm2&4U$-=m^rhC=duhIk==Mi^8EraheBIBQ)O*k zTYMkn=_NWk#nD^Kb*jT;aWN4+a960R(Dls?i@`GFmS<~lk5u=DP~ zWf^HOVNF?CRf4Yl0iBrdX|*cO(*pu824F)=K^ZgBlEG#*R>E15SAFr@)}r{Ur1Ew{ zB#puDIdU#LWDQgZ0JCz$i8+s(0pI-PFrU;HqIn(+u}-TRI`tiX`> zi?CR)Q+4k6zpVhoaG8&MF)01aI54ET zQ)ufu+?M~SLWaSkz0r8Ss%CdvBKZLfG)^YxHhr&{ex$McVCcW1aFRl>M`vf#N!J90 zefjQ_gYvZpR@~fg@!b#Hyp`ngT93>XGB#8}p#M09ui@J+nkxFK>-7aR%kWkIw3Iyx&PtE+B=XVj`c-VMWiu*;(>Nm9ozFG_$x}}o4iP4QJ{c1=v{qu$4O(|1DFlCssbk@`Y@>C zM@lUcxOm5L%im098u?(pE{mG|<%hTm+lLVWux1vfexJ|H#LLKjYp6ZBrol{_q3XS~ zIMRuRn;LvEYb6Dc)B$ju0@t~BZY?GQenZUqM94bBv0GTnA?Zm(uBGG;kT;?S(0p(OJ5P_Wu$!^)G;H%x@9_s=3BaQ*VAH zNZpHdkr#j!DStbys}vC$+Sq%3g6L>cre|+AbzU&erl>qjL13@w^%8Fmr9p;(K02PDejM8i(=r48 zMkqU1B#JlJ8Ob`PNf9MpCg{>;-2k5jY8zmfBwL@PSjmop{uJa{%BjjYM`TiQyBg|} zDdXiCx_Vz9IP(u$^pndMbl@^50#WNO$0XvFEvh;nxeq{C6Aq~Zrfav`kTLp&^z0o@ zeRvBx4--c$RG{HS%Ey8QEf}Dvs0hYqJC9pn9CSKl8~1fwH?*x>jQ*Y#t1&r+RFL`? zD^QP$UJ>eI1DxPJCMptez;{YEA;r%Z)mL zV$ZqfKmqs1V1^?uY<50uQy2}U8#+vq&VcMu+I<*%$Z6Jv)dSxUA)3vqv~Qrer*1;w ztIl6ag~NsEF{(4&YGrm&3RGLAO|>?@{YKvCm}ju`t`tlQA!b+j#e-v5@xHVTOK5*h z+cAomE!Umg4#0uYRryuq&l}lW@tr2q!Okshk;$biXzXx4NHgXc;1B7lr zQ>ysK-PW-ZRN+bVjJQ)B%d6qPh|WdBZ#@#TU{ico0h^YOLl8(daHHW$ad!EpaV{jY z`8j}Z{!4>V${(_wu_Oy;Au)#(0vV{~lOEV+zNT2;;HcEY|E5in%8I+qNNvkQpR2x< z+_OiRN{p*MVI%SQREfHT4-gl`f73O*DETz5os=- zuJ-3`SCJP?zsg!jceW_b)B8%v1^=JqWEOE%Sd;DDD6$0ILt{fn2PmX_H)eft4lxOX z4gpd4Ga+6v`qyY$W}X&JHrO-b`+I`%MNAD>e>=6;-Nr13{-FLzzksbL9UoH{Wu3A`^IEZ*R{pk)%s7B%8I2nHFq@7WaUq0VC9MTyw>70XfC&j@phDesM z(K7p_Av790t+sMdVDpY`EDTT`d{Jc;)`}a5C*y1+7V^QLTJ?;0SPclVJ>LCwX3&zq z%S@!GNz^1>LGVkI9P{^J%#x<)h_@W3$(U^^6Z(hDlOi%=P&bP<6Qe}f;-P?K$G^wy ztJ3?<>h|uAS1Rpd5^+~`Uwg{wb0(qik=QNN#czI~Lnj3l{HG)~2fWTD5qS`7_!~%V z%En7EHFc)yU{XPty z=#48>gh8Dk^wOt+VnVcrRvJKG51J~=>Z-dDr|a5ON_aS3^*9c+Wj0QvN&?Uh))4 zwtArhcWE-QS&tj{wvz&-(}Y_N>OlYLq4?M3-5Tu#!PbO(oAbKM6VP#qFMHEVap2RG zbs6e_t*aCgIK_=#Rd4~sA+C>2sYYgRqIh0$+GVLJMn;mGog(h6>1?o3`@uLXC!5tj z>LFxO8E7hm$!mg)%j~sRrAt@2vjvkSq>Q|U4{O>ISLp)l`pHkWeUw=i@3CDURf}af zg7N<-?2-VR4JxG0XqAp(kCnf63vQpqM>FBlv;7{o+iM9>kp3UqkQ=6bDPfI0HNs(t zh$s#tZ@BVNa*hNL&|-H$xRS!b>F{_grRt8hLP|tQdhYE2fvZ7kOl&I00BhTDU9#0d z5{J6X7w(_W(R+OQe3c0jw);~5q%ZZgVZEd-|MN7H5GKBTno!%-IG|@^F--=^Be1rbKi}Bq|bt@YGJ`n`Y5^? z!$4>U{7DKH{i`g8Y!VX9WFqEHlog?hh54M9wPq0Zl)$0Qg?4O^S{!6YTKwG7)FOY!WknHBR z!y_=mngY{hUNVTZAFdMpa2sV$BGGmO=+!?0^A%%$-MdD~d{R@+Ea9K@Xul^zq3L`@ zrO6p2P?0w{H!ri@yH9Q@qSfwqYycq;edfl-uHrk2Y51G+e^vTQOjxJ zc%*hCx-Sww4Oh6CP^)8T&$?6;vw#6b^?Pk!lGFD)1x{ZxjEpYp4lan2S?)qa`ZIc< zlyee2bSp+;pX2uG-O=s%ob$lxXW`|fpCfpLw?8KHrIL`Av?WJ4gE;TdU*?mcGkAUA zbcKSqYH_SdAg+7x*Q-?S)dgsl8>zw@!^QvZ$>e=BXM$NM3Dxij)pegxg!Omh){ z__VirP@Big@{{ce6XbR#gXAv?KXM=mE`1zbvF8D_Kz=y0(~K3E-mDCJpBCEy*|iCe z_t(J~#DCje`AlYhDT1S37MV5<8}<*%>I$0ha=>k|m?TQ&jGSVr1Te#Oek6g^URuic zOSC0@ZYdwZtvV_!jBcwhNEP?XEyU9b!EumS$EZRt+9 zZY1u*({e{Lvz^t7uB3w$Fji9+T0qY>{_Jkaam~uA0>ZTO?(n}FPdT=kHvm8CW0s05 zY$h)^0K>l32CAK)IR5490*s_eLdGeAJ6eD&H~=;hAy?*c0BYVu@>G|ZuDam|-bO&x z_>XxxR^zw$HWP_2&!ixHh-lwD!ySi`+2@&yXT=PJvjf#5$$+>-7XG0@hP|e+A-Hf&z zS23CDlv>j5;W^{B8H(f_7LtjFyOEP25Lb#HLr|jjREE z%5YJYOAV&`Q{ou?vH0GIu*z08iX98tjE5Zhy~{Lek{3WkFU18pG-@;WIv1_p2Vd*m zHY!QQ^N4wmoq&=soTCwPcTv-5HMl=AT_^&0o*wYhJW@3PzqgA-(g13LYv9s4U6g`; z{F1(D2)WAG9al`xD*zwxbWM)zjyNVGK34{4$X8tDLt;G?f;OKG zII(FMxA5O_r~|k}(K$jw2&BEslSSP1e8Y9kHd5mcskhuPkGIo<$;J6 z2@46NGMMdvaQIUc+f0pT^J}qAQh#jq^zS553HRBew}Dw^@#AW2Z`42D_ccCPrC3wr zp0@g283hhgIQD4Y-iUQTb^q0%N|vVpU!ZER8O#4}@P{)eGE(cW;#) z90vl8yt8na4l!X8ALkoEBy;U?!kurNz{`GcQ!|fAS;C|ZKd z;l>b(n4VPl#83HpxWJosmVk`-R}WmfFbOdOYW@;!X!gk1{(5yz`FG!N+nAJEW$t$d zU>R$lOHE%+v|XC#!Y}`+OqU6V?u0Gj z@HIklA(#GBQAMfP%N)_WadzGtG2VX?{N8c&@uTYBsp+R6{LmxLd0iag=!*0Vf6&a% z;%B1YVMP?SS=%*Z_c1GKVMTq}YiB_}BgEhd3&xTDoYGs%6*DxNt5?s?8T2hGGI_oz z?*ufl$w5%yb1|>^K6;;={>J4KLZr@>>z_rtw>$>E@{Q9V)Z+neN{1jSI9ATVu>JDi zd<_XXKcWfPr0y6j35G%I?a6s$L5@wO<7{nM2j|JFUrPhE>T_8aAj)Xpx*4eBHp$Yh zw#oqB@(9LJ&RUJ<86rwTT0C=buj-8|DvbQK+5BZpskZNQmrLN?CE_lWBk3_%plT*W zgWeILBu;f~JpFt+(pu;s0NE%zX)vu&^xJpivX%+TxTV{(ewtk!$59a7Jv53iS8ax# zgCd8zd^S7o9j>B2{mLhTx2ttSND^CgWWmLIr8))g!QKGH**oryPkq9u}%zVQZ?-@3_lS)iG&b?xqMZlmLk$N33r&>Z5??W3xc)Q0niiO9n)OO}xXX!2Hj|_L zM`%UOn2r4^A%DCj#GQ*4!vpn0gJvNnObo|#)TDnE|N=-P7(&5QL*8Pz<~a&(z-45Axl2M$%$<#dI{YK%(%E5 z(o=N}`;fq};JkfiFn`)3G}glktWtQ+_4YNYHT!uxPDA!`%n^YGfOjZz=VoWzx1jwy zbu%XIMXF%ea@abHFf}kWCbD>Eu5PDAomM|w4FJY=?l1a~4ckgHZQxn=setD_Vjq^^r z;-SQ7wGR-C8xf?O?({#4YaC=MPIX25DHKzCri{rg8?zlS2;PpdS>%R-PgzOMfG|Qz zr6Tz(*AY~Pcr@RkzxJUafx`J(;yIhiI7h{#Z@z`*MSthFMm7&Fvd1fr`;YjQcV{Q5 zG-`6(=`jYpVjj^sy(4>;C;Kt^ZmCazP*h-R1Et#Bfg`BECAi-O$Kx^q2Z9D|S;bRy6=W4xPm#fEIo50$C-s8>DIzf|0ur`!6Tqj=dFBx)b!;@S zkWQ5+%J5id1H=cQc4(wDKfZL#QT>N#4*Qe0OP0&<@A!Pj9d^;+~!v|t(fKpuXh6qMxx=9u$+#7gAAsTncQ zr_8G2!fB*6G|JQpEN^)-9f}mJJ)fZ}1PXOMoVP@j-aeg=a_}|ol|4C7uZwKKgEcrH z=VRQg*TA!f;D_D$Xit9MinI-Pt_|pM!qBDI!s3;uG+;|+C*^QcPrdgwe&rkTfylyxPX8fK&_eUn4tTs)~yQN72z+^ zxVbdB!RuikLlg1Q%81Gk*vzxmI@~r*3_6XMfxCfj0U}fbjR`D$oEQFoV?)v$@ao&6 z-KX?)wx1!gRvog<17tV2;qPK+mH9`PeQeWM+Uff~%Ggk{EyqrC1Y-Jb00dluA?|X_ zaDz#{)bw0a`c1;pE$Iq5CX{~r7?Xh?D6wJ$%~$3@;|g|g0BLjLf>pms5)CERjUwz4XjJk5f0?mOdu{*TMKJ4r={Wy3;0AC3eHZSyUsQs1YXw>?|%1g^OI zij2TTQwT!_A!+hGl4B8+)vLX?Vp!+%>a4$LQ zs>Bs2sX#wbzl%0}&60~FZR#1B-4AG!_m-igiV|I|$C7?Xe5Cj`Z!SD2@Y^AZy^&OM zaT~v6%ws0nx0~qd0O$$A+^n+>nGy3s98=OlAXsMq9yB1EB&FtkAj0aLE#O{)ei;L0 zI=x~}IFlt7A5`cm94jd&qtm3jZ&pp%9a&c9LX853-&$P2U70}ZaIE*OEtL0}^U8UE zO$3R4(YX185wf{O8S^|r5i;2qG9e>yxLa^YayicN)U88v+mC!OtR!G(j)%|Ntm(Jb zBT(~1BNC(`6yLs;Po1L-78m#{vSk6sZeX%`pex3I^6UTYs)n~9;y^0+l)W5mE ztX^X9?XR$zZay=dKj^)14TZswQglJbh^3a}=WeQ0$Z>yVNhMxeGIBwi*TJ^9nNbHC z%b&-DGUc&D&xVqhYd==j4<^3_uZ!_yR!CfL1H5SA|7-iuU&DD`48As~@P(qiP9 zqN!q)!rQq~;VW6k>R3b6M6{7}Y!vYV-gy;C8Iv8)DZ#JQNj1jTc=SioSpp5p*vSmi z@vkvxjmEVl8OX%vME&X$R)1*h^qg`CAzB5rl|NaGO}P7TX(@I};4~?zy3}`smxykN zOoQ~WSe309x=O4*oZmTEa4iF(IsL1q1>!q`0RKorid+FB@G`y^bk;0DL= z8Ge2n-0ojD+Qf8bTa7k!EH6V9a?jZR4&auHlA0Qp+r3jBLppg0ZJm`mWXCummWYn?tb85D9J#5tSe z22A^A`lL+BFpruiWt9g6aI00bum7oRqP`Zd=T!(d$h74fgfy5pL#!VM-lO={rB!KW zF7JFSD&(bn!{!v1Ty|fdwIPwp+RK3Ls6;@dW4l6leqN%0tu3S?64>`^*R>XXh_xj# zIUndcNz0Im+sF2UG4T6oH5pJXd%A033qKe{|m#q%RirzgzrKFzh zm#a!cj=p);u+6aoU%7tgEgexTX^timqdyXg2P+7N?I{Mxi-y;E|B{3b-pH2ro9Q_; zI9eQn00&4leBEiMfo*iIhZ^G@{^NeV21|sWGfmCAhi-lZ+q|709GFDvbHCER9H!K6 zv=R(q&mD8e8gWvCRP|A0khe!22=+;id8P@Rl;(|*)-pDD47}>oFFTKY%s`s7&7wk; z*MAdX%Le{UdwyWW?zfi?A|!Vh4Kjpt>(R4*55|`TNN9$XiNFI%b?o5uiapq7VK0h3 zJ&BY|pVC=(bnd2~o2J!h-8A4(*gw+~yy7}gz9AN03w|FR^}sqWT*>EG>vVFKqa_3m zS(f1{lAd3?m7ww9!2^BEgx^7a+6r$0)S;;4NYoyBOzPocPm@{x*B4MLf94?P5qVU3?9JT>}T_^0Tj$XUe+kxd9dJv&J}xUY%m3YERJKK zja;=SKvWiLU9P||9brql-G0LdfV4KOzv^n}p!ccE1rv;4V;FO1&uc3CT|t}5u@tUU zg~Li@$vDU3rgNc(yZ4Nx^CE*08nhN&v(x6oeUi^J(niX2N6Mv3*B8)!tDya+)hx9q z8(M7B_jSWcRWk`^?h#4e#T#%KBagFs70h}0i6MbyinlT^K`?lch;vW<%0?*a?gB21 zU6`jRVEL!z48y}T6h)wbe$K9l>~1f%4d=|%QrFj?`QL7Mrzbhf{Br_oPWOCS>hH~x z{56Lf5BzHuGU;B4M44mBLVy4VB&8g}gdviBKUPB{X3-I(YPm}h0}I=IW*dS#Re|&K zLFaWNGlh1a*t5~rCUZLpc)IO5HCuWh_OiM)g3d|XCqlM#qR78;awSgJ zis$429(qHVg3R1KDQgV7SLo|$rBAd|8)3#&?NIi(EH5)DTI3s-NWW)7`V-X;{GK8E z(4WM{9=zUAjW|?JHFMd2sR@og2x%s6(?-jsE{wnyk0P%Y>=PMKH`Dk5g&ki-V1!9c z0^a1zRU!YMp%e_nN4?V?SA6Ceu(2XvWHkTDuShN|##Km?BNzv9^r{Old|D&5lb^qf z&aot3E@q!cp(9@%%2o^-CG8~A7!gG!{2L<|_`qmeYeACh8U;+oVC^$MJqk#Pgh#}; z&OI{dNTA53wS2>N7Y1va+mrN3w8BD?&MGGeUUyZD*}sJ~ZQVyV!A+@cpbSwsF=~h%>+fR{H-L{(JTpMY zTOyM#ZP1HjCdR&rQNAu(9*}uAl3E0-YNZA=LjqO<1eGUHVK|`rFsI7Prtgv7LZV0h zQQ#oBJUSlfN3Se^4o}Pvyp-VWIaTTj6stsi(RTnqJyN%+LK3G$@JD3LV3wtDQIy&* zh-=8j@fQ}cQ}ku&Rwd&k*}Hf*xl}>K>oHhDpPd(Ga=zg8se*M+!aAo9 z#2jvUpOEA)Iy8z4lQ%qZY(PBpo$YG~+ot;&P&pnPs8$S-!gX-q!<7PEpnyg&<3qGO z_89F`$_x#hRh<^ISDE5Et~%K3=iGcg$Pn#)5)0T8$}h5C1(4#%=|QE)y#95zK^XKH zGdIp(|CT>q!NWJqoZhaY35WH*=jO2Zg|-dlWleWIT}x*}omw3g1um-D$zsMo0jUp* zO5#NPb}w+2UZ6rfQ_rY+nG8Xp@=w~qVJy=0)O`l;Xt**wd8;~(=)hEdY-Ns~A}ROx ztI+4+v5XobDT|I~R0iN99dHS@B%~t^mP48K(&a`3X(v@%v4$H*`fS;*hi@YEaJovh z0M3Mr5`GGn=OO(4hxmO^+7XEy^B$fbgeCP`R7u#AmLbavQ7v{C9#G8c3x} z!tcM|qcqqGtKGYz>Gl0}@7r7FTf&XUo!_M1;&Tq?Mte$@`}d5I|LD4gSi*n;+=F19_}dFoA8P+muKND{ zrAdJ*eVHmV!lbadJJJK~27Z0zb>J=DuS11o)>EoIIvpg!H~uidKAH?DlHQKJ*IQvo zSlxMFFqp5*M4OJ8SPKfLt}c3oSjF9Yw+MIpMfRU8S$+6Lc3``r;+}>L=qgIr08FNX zDjN0r&N|7hsj+38JHo6=af!6RS`HYOiWbPaPvJU!WL-oS}OABCcCqX$U$Wlysi6)#2o zGI7;|x|LU&MGCocSju6Z-L#Oa@|sH+7v(UaMWA*|b!*(0mLp!2XifQv5y>scZHxn#?g??Gs#J(~B6H8&&BIksoitWkWz88N|dz7oSTc>_2#XQq{vh(e%?_Yl|gr*DT%Sr%z<31lv50)lKr;p2smI zLIrQ+WI@aEUc(?EaBL`F_Gw(l5tMY6OeWK(%Yk4eddO+Sc!86n4Vq&aJcIP@hRqjK z&uyQY6hOS_nvMkd`2U20^@c3VDUbeHm>)NM2-N+LMlNmB7OR0g%F*}Yf4ligl zpgogMu_QGUqbrON5lU$i8}+LcS#U^|6H8Op209}RQ!JS#3RyUh^^2mC`w&JUf*2C+&wYKuqU z6N@$o{xfLs$+LPib09?ZL0D_#_{{a9dj%v%E27bu5)C9?ot^IX?9P zb@eehrS`U+4Nv>SRGme_pP>0Pze=-vNFq$IaCi3tYc%)P799@bqL8St?X0TpD1P@4 zUXf^l3N!7=lV|mX@Qr6d*a4?@z-!h-HCe;cYo>#Pn@4!76*yWf58Qk8+GO{B$0T&> z;5Z*Viw9(ti?@fpRM=>%YF7d&n>guIq;js5dV>j_ZT?@J-N*(hOIqqO`4MlX8TV|V zRaO|Z;zgJe)Q#zN6)&sgzbGQRx=q)*?S$2qQbBfdag~~8+I5yOXy6gyd89}t>QgDo zjNKz-A6Cc@v^!~}5GppTH2p#poe>#@Ff~eEk7=ssz1DIt_%F^O4uu@t^+XP5Nm`Q7ysGV8Bkcvw1JZan zEmOdR`{>Pqpz9ue?X;j0)L@^X&pZn1Ru3_59$?4B)EN=Hrug1}V)p%X(`cz>aY#IR z@YU!R)cF6iVq>15Y0&nIBL0T}BT2_I^Fj-=eI*>#{$19N6-newgddxu=jQH z^ZC>)F&t!8yatkP!5Bw@N>h_L*7jh+^;4%Jll|DkD$QNyW8y~E0>uOTX<3wju0ruH zYyTuQZYG45I9Gu$Mf7$5pafD3h@bS3twV+-x~IAP)e!r^#A0|ylsr8bkeAy;ka*ZK zZN-x%e5Dn~VkJ;^Re3TWYjvDbUkIl)cfbyl;NKm8#Ej9C11=`%mhk$FuPB!hC>K*2#Bq(<3wkY{P-aQ(0Le$1qeRDjhw|5koDX3%N+6A+30+VZp!#&Fcc; zN_nGFtpgZsU%CsXW;NF1e`XbW84rZ)?crBlw=&wAZ;E>QTqUDJ$CBWi+e(`I9HjXceT%0Bv6rs^E5BZU8m_>nr(N_D9AX zGAU!+`@$3xwg>o8M-R{JB6Z!+8w1Z0vNX633<3po3)<)AhhuMYEQ#B2{Ng{q%Nf(F zlHNjGC08i{B2b;u7d~p-h@8C?&X`UW6N)6ffBi3PopaPmxb#EXEj>E@Wm!xH^)IV!-O1CjT7K|o~G^Hb19!zIt=;;-N`Yq!v#>{l1 zP*Uomy^-BPA%TDh$A0tn*UkHjU_0BFRo|dnZr5^`yrDMqr>uPTPp=Z3R z{>vU(41I}6XEn2Yz8(G*7Rlo7E>~|Y)Y;Vn@nqorE$&XN0}bzcZSwF_@Ry8xqMMS1 z{*sD~_@ebjJys+~2Q0Hb=h#vrq^H2j=#H|K<;$FW`=~0|H?1qNq#GYpX6tURWsSsI9yL zx4^#K93y@P3o#N)u}q`QN&M!Ja!rRPgc=0kLRW;9us>SlMz5Ecavr(jEM@MxJetJ? z@}O~J>$A4YVv>nXOUqhg%cT$c*JP18|N839=2|Vv`l^yeb{gk(9;T*-fr*3NYYSor$PUOJz|I6c(fhM?nSY&Ta=vnnJ`s?d0N}#9}LyjswreX|v^Xolku5|cf;NS4=zEj;_>aHKc}5krV9xCg z8i?+5$^6{gY#{+3sU{&qUtT>8&T+U)D&Zt^g^)q4wZ^Bb-@55oSjN@fz%nm|gc?eU zoy!SUsk*HZz|TzzHvDXCm*S9FAruEtx#-wfDH)02JnEf@H#|jfI6)oN6Z!Cqc`&b| zSU>&3RKO4eIV^$@0mK*@5DMuuT}?A5X{KK6IdG?USNEKFC=+c=J=g*7&i+uGse9Mpvxzi>&FZ=8r>KcaS*BD8`3c+1qw9s+ zFTtnyKj0AuTYQgEyh+b%$f?1vZs|a*wH@1Dv)9Qc+Z)0^1V|IAzJH9NX5ZH90XsA4 zlzF@(03KXP@8pv|B#11DSQ%nd0GDSS5scF0?~pRx9PBEI09;xNfQ40RY>8OUyAgLk zQux;GV5?D}2jSTOM!q?fs&sIg@zfpP$2U1y-o%Z)8BR`6O8hAVKpCY0&?u3XJoCs{ zmg)?0N*SH=QrbL~5qODoty1(#5#v5nbLot5#=)^Re1(UmU*|!B6r2BTiRNxa)+c=_ zOxPTnKD(60(Yzba*_5NjIQ#18nx@jvpvjc*WFE;HGVxn8)*~Zvg05g8AbM^ZIZ&7? zx2Wz?wVHo3%wdfeG(x92aG5bI)~>tf|d5A zo&0XB35x6|O06z0AJvHLcgR>Q!tqN&ePAN~LQh3TmHi0rC7^pu^0}yCpK%2Y)cgP* zyOgvT&KulNfafI&B_mg*BgysJc8lj*WYLkD+Z{{4II$wE&(N*d_x@3}kna2{!^~%- z#3GX*{uQj?d-k$0WbDyFyJpLY-ui&K=Wjy%?W5y^!xGTi+<8sC$pGG6X}b}~{l0mw zA_hdiRM2N$L5=A-$B5k`Dwjo^qC*B83KoXO6rKc15Lsug)xFP)AdYTxPu6Hd5IQ|Y^5-iN7Y;)rXP;}*zu4y?~GItx*<|zU|lRsEX`d}i|xdfG-Eh?I@^nvYy?nYN&vN76h4iR6IV(B3F;F|GW$;n$D9upjQi{jx%x8GNI1+fU@__7QUh* zUZofj9qa)7G>%S@mYV4@eiqZ2LVCc%r@Zh%Q=9egR2^L+&~$3Vr~cEJC^i<2?GxTa z_Nt8Z!_?X=k>YeRdoQ=q{m>svqZw#+J=EHahew?VxA0ihUWB->5L{9U-8$PDaUFiw zldlHSCot%ia2@ntNi?Qe~8^LuRz z0SrTB9<3cmyZ2ONc=TP)(Ff@lgeoi+b$?KxHLM<4)Z7eiM%DFNDj_k!B`a*1Pa^8K zD7^Fcq!PhWi1(Uv^HZ@!+8H^5ffKkq;0S9^5(3B-Z!0l&j za4rDK|87e29nzv;DlgpOi2qpe6$BwEb;KG@wOHAe3_Vf&(9~DiiFpFM3Xmpkf2KHf z2%&NZeh^9}hfi`kB5k$PelC6Bo_7LvQye>}s0&$%kYyV4`R?)p)+j?>s{~L;jUDAy zo$HWzD4jtzlLo*p1=Xz9h*vQRvx=2#m1_M969h@kEO6LyQz6b2rshw+8Nr85}#E2=K+QZE75#DRERlF2@x}^w}TwZm?d!GK)PIc3#@Vis!v*ggA?R$Vzf)x0}qf@E^&NRf3y>AZ&Q(v9ewN;$l zI0mlP*g^7RD}j3CTNH@&NL#p0`VNLxcIFhNLFC7$l0dZcP`kqqSMl?$U9?9w5y+cV{$gTxsR8GT z`EO)Ha4E~S;$jZnfu%is5w|t_{CP(z1f&q4L>NuZ3O2-X%w-$DT1}055}lXaceNgB zgIta()=yx39vJFbhX2F7hwrDss|lDL;mPMp41*8lCdFY6iAi{N=a9-0;24L(%FDZw z`j4dr!GiL4AXpkqRf7o@e{!gXW6dj0j6`$F3T?MM=F*~Ms)iF|5|N%>NoB4zQ;qn^ z)d7MEnEC{0D|FCEom8bJ91304gIcN+%30`)Z00AwYTD-~Xx%tz^W8{Dj8X7jCb zt|td}cm2GSx^^L}oJ5nuR*&8;lYA{lPtq3q7Dw$#vO$y0ss~UX+qj|eM2Kk(k4Kn2 z@IdmmEO`kw1xk?UtA#NfrsAw-r~=zFXj-8-rJiauj1XIJa|Daaz+G!Iah6sN86MN@ zW-}kMC419s=?5vw&DqSWps!Mk+vCYAaL3Qhe04N7FHpi5lu`!WPbffDycC6X0a(j_ zbwa_;h7rnCKH`!Px>xwW$uf|mVIOu80Aoe6=ZAV;8-&xwThkSL7j*)j^=Qv_TZh7&E^JUkS~iG@2u^jDN0Z|b!m2ctyf&ctx&I^XH#$Vp z8j<8cU=jX_?^W15_#7Kd8J=!KVVkqqu^O9p0pAl#^|C9J4o?YN9P#0a4%?=3JQ{6O z+U--$j0Zd@su6rxWmq>>Q!h@f+Ac=4H3f+az684%bUba(w-iXvz}z$&!<1k+=&K__ zrGy~(M;PWq&Ssv!DT2yyHRE=Jil|wh$eD6D2WS2Jts^4VvOIG*A|2XUds=|EpB$t(m1!q(G6Olh(5W(`t$Gl8Uqh3_W%UsAw z-rjUkAh#6vz6iY#9O!oBahg4pUu2SIcbVux{zDe=3lh#Tg{j&VJ<5uBR*8&EPLK`Nm|v(1x+FdtM^rK6tD2W`OKXGS(hATB zSF6blZyX^g+RzGi6aUWG=;^8RfEB_3IzYw0oq!~sWA;*9@4O5!6E=)bj%RA+ud*&2gK?fc7_>u|wPYs8y^t`GXvvRnCv@TRKQeOk(+KBq@j!G*v zY{{&BF7m5}y`C~=&CabZbWjxg#OkHgv}tnle*waet48y3u)F2nc8v&bdBr{2&iIe! zZtMBEX;1DGX$XgUA&4IFkG- z1#usn^QKz`8Sh(5@ine~9Z)5ekAM&j>v;Pt+6=hH`-df0T6OdWTU);&7&QvE$C`4A z!RLoj709j_nwptj3RC{P%}Be07EmjVc>;@j<-@yOo1)q|%u)AUOJ2J^N7edn9jaLx=F<&2=xBDRvZ|0dg4*2rCdM-_vgN&<6X zwt7a3Mflu7y910TpPk?`3BIsDTa@-m9=m3hz&E}|@H`&}=?M6Rz?Hwyc-^sC*vfRbaVH`{h@%4lsoLe6ARqd#w)nM_ zKsgOyKh9=p&-GINjdZ0)!dG|l%T@5Q-9693%9 z;z|AdB(USU`aj5s;BwdU<4VjUj;9`;{ehcC8rTVXTU9{AZZqaSR&It9yRV^?8C|#u ziKW@6fv0_6(fActy6~&l!=6ugy7Q-pb_zmM8^rSdqg5PHhfA1V(YxkfH})g+K)M;; zwk}=2QDNA3YR}#J8;&@2x55Sn7s)t5+0ukj?4K3Qj7$CG(PUYGhtkOjA0a$-4DE4%ZdhYQMMyIfMPc~_HcX+5Sey@gx zbq>J4Y03n5^9Ip0%pp*5wHq>~qBR-fAbZLi1^4!lKha4Vktu4IzQJ$f2)+%-6Sbt_ zXng*PoV5Zp#U7;LjWZHVBzh_>_|xD$jiY2tn}~ScwS@o0YJ}{+Aer zcE%^XpRKL`Z&IWZ$WH0xr^e&1^(qEjJ4p;ZQW+y@z8(A*NsUVY0*)Y+3xa0i*vn|m zVIk3S@d}pLo286(1d6H~t3hXm(FDQ0_e{Dc>mL)wFH(+w%@A4v)!hRn?scy^_!}0QI>uRAGKOX-1+ykpj#&;*qhRo$$PtZ*+lP2{IlML4h_ylS)6NtCq1M$*N@P$-P~CMNCqO%{zR6-qgu#uIn`C70j1o!8JU_`h zRqOVBJv>2r&~yksl>wA6YS#h5tYe%G73C;Fj26nV-C>Vc3*5mq+xh(EUE4e8yW%sZ zBue@{SQfBFs=&E zsJJTR_v{R&4|@C42~7e`QKU^$xagZw1FM$YJZD{^J&d~k1eXQ{hR#-e`|Nbu%R&lw zpKodGDIvzvpDB(@vE5>Rs?ET%(Ylksso#qY$dzd zalXiRLz`;)LY{HKy$+x|1W4h%LNZqecedDxSs2WY;zGCR{Su~Cjops2Tjmb}c}Pwa zfBpKwuKIr!x5$$t-DmSv@^~!D^i}s}YZT=dzt;y4u0h%S@6WUykr|11(XyoAEb`@< zgD*S%5$iS1c~P#^f+!#iSx@G+h~YI%!ii78XSm82zb>wVnLz@vaAXS1i7|K(aR`g_ zvgA=~B9h(XGZdH5!(DIrnHxEUGFMexA%MMDGCxwQr1H2Vq(9Vm35Nlv3p3T3YhAwP zvRl!QWH5l6j})!OxCBLC%?Vk<`9GVI=w?uW8Q=0Z2B(2<%DarC_l|=CUZ~y;(AvvA zP&E1m0-*5finTq|qfu_5uH3x zc^zIGxOc`3Tu7{|UBEC=p99GsU?pc5%!0c_e&PiQR7=*a>G#8;ya@|s8ECjmU1#wP ztk};a-mRXDE&}ZnGWP9&Rfbcw`^y8TtVb9L6+w5dTQ#fJBI&CQN$_r(gi?O&32)>C z8(1PTOK7mv>!o+w5hv`?@ziABMrtK9@Hh72Utkjmpp8Em408u=D2P;xav$;VdH?E~ z^%8NID|Jzmu4bDc9s|3TctsfGJO6&_4Th5oJQc!~|f#AqHSh-)a=%*FaBg#aotyX%)!?KcG`$R$Z zvnNuZ7?-NX-@CLEM5UK*oX8!_*L`X{-0inJY<((b7MnylLByJJFh@oA3!hmi8nFu4005Ng!I7!)mR%(e_4ez8eJM zMjEZ+eI_ep&&4#sUCaU4gz!AOra2)8*iNr%tpA}idK+#@2*RT$qr>xmo^#5a+}lWC z6EEBQEYI+>fWV!YZAiMsEw$|SoA8r;BY{iS`P*m6e$&l#HWR3$a>0XS+bNRY8|c9` zsvlQ3h4~9mq)O8j-NKUMQ`q18-t({w%m@%K$s5?hL$6(UB3;C&16P~w5%ZM9bL(ee#pYxw=Y!czu#!{pKjrd6#!`3G*efjN z-1T-|9!n;?q(l#Wu)sig5S`Z^aWM@fUt{m{yYCgEG05Jsb)z?DGkzB=)zAWFWrr{N zfAzmLVjF!Gk$7!V5h0BOCVMoQ5ZB0Pmzb~xsa9r6+>V0cPA4OlrGyY~8gvrqjemXM*v6Sr zZF#iB5y8!hShPGu1GNprZ7KmJZM4~SembK=SwrP)+clS_1%f7ArJ-|I3B%i&lG_Vs z4<-4=ZHrrBfJ1Cktf6<{TNBwgW){Zd{072y?cG16;SlYH?X(q_G_4L7;u$CNUjS!) zmoxq}2Mcnf&~)b`7@X;ELM@Pxnj1T72wNvjC`UU&EPU|eJ$r3MUR zHW;dhDqMXs3XPF$(7J|g6Vtxvff+t%APtPD^7sPRW`8zL7#hC1kVNB%6To&6D~OvWe*Kd3aMqnifFf2jxiDT1mE9nq=&|Xa?6p-=Vt9%+%ei`elX$fhZ=NsHd{FwfBZ+%zi+;pYa%$w*3Kg zQc&<{UfLz7-P7Lwlt#?SIfy$Gw{sO9f8o|39Qn*yWiS!<-}Hgv4}lsiOt zu)5*Z48>V?2LMoO^Qq5{1!Qm9(;U|-;(;6Nul z=pce-X)d56WmoJu2@dO!D7|P)NL8S3`{WrcH&x9vSWw>^T*tTgjqPmM*uY_9cbrt? z=Qm@C+oBh@+hV|(>MI)9esNMeUOJKK?%4yu7;Idq+tb2k7z$xD+JJ9tLP|Q+Wty7k zmAFReMKDakz%Za1gv}YSgul*c+n7th_;olowy=@Pnw}8ZvLc%H#gkHYw2B@;H}ic0 z-k+jCZVyH7Vs3aAOJ)d{*|s!wb(%9~i+r4eDi9H3(}Z~0932}Mrg`eBPpNfGO#bO4A| zpxB`h!af61yZZVKyw(~+3|?6+xy4>4nu&%xDM|`2E%yWQJTKAFVMpD0mAaVJRU=$E z7TEX(*5WN_HS(5k^i%DvAf(|3cpBtXY<9(-#AbefU(*$neDY;^<^f^z@eV~x>UQV^ zcyEV2;dXOuuIMIJbn>toN)7#y1^Uy?hiyBnaVi=k5ty&|6UmzBYMp2Yl=8d_fgM_v zwabR`Crf=8hJ1nw*z=fh6lVksh`cGqE=_=$ae16M(=wLALZ9Eat}Gs#KJZDkn=r6V zOfqps^4&g6XYRm?Uk=mYJ*T`gnM{N_(6(q8ax9@?9`Xt_KbBP9cGhA*B; zZUdaBIvs}P2%C@cs!+-uh;YjuIz0e2iVKquf;|Rrr5hu{MsS)F^cCp8g zZOZoP&(An|`0m?O=V+qVbN}VqUMz%QCorKFt~za+$KUPV*J%BwvspscC)aY1-T~qj zcjuc%v25Biy6~Q`Cs}ZC36SFl+Q^1v*QCjMqNJOIVC?$S!G z%urS_asC}rJ;`Uo56I%Mq5Hdn0y4|m=!I6#%^{BJ4bByCkE%@(DET7xvk~epcwiX? z!Cf{t?iQBrYtFxOFpE|X_f|}Lv3OD2wOgWyF#6F2Su*M@28=X=0pG90m`!#lJ}y;r z8K|bn`q9}Pb!Yw_%g zfTO;&bg|c8BChlCB>29h>hY_1HDkm^upq;CS9OrDZu~P|>VVYiH@iC4#er~Y;))W` z=ygbtqF!1)=`i4E3eGce+V5*_(>}9=w@5*L;>HKPANoD*qHTo6Z!Mm}svn1ipLRaK z=B- zx*H(y%NG+IHK22x?-tX%4dJfkD6tn-9`H}l`oc=1F?Iv(@(xI0iTAB$qNlpK{zNb_ zNtZZ?`=!)9jqp$QuL(5X%kl&;&YzO{au7ctYJzqKFwo?4gEU6*=f9kyB=EkP51Y2x z$1VPaCjQ8=T>NKqC6}`p^R5c+;ACsNP*a9ul6jc0j~s2uQK$GqxAYBq+tY)ATCi%{ z$xmXUx8Fp*JdJ#x?+Wg-pW!g^A4^{GK@rITR{7r6-&iEs=u+Jlx%vp9!nT#BP#j?>H*wR~e;Ow0 zPB^XIRQJ%ylfRxFhO~sYy@m6`aA+(%pv3o06_?ZGP52r1h3)<5PsN88OFh~NH1lRXzIlios|D_h#P9-i7pWTUmnF$j$I`m$mE z2?hcE8r$2;q*UBjR}{FlR8Bvsq#5y9+G4E~tIJozl{?>5xP0d*af15RDJ=Es(%ux9qG4)SZKMyKxe*lY3q)e71Ffm zfpm|f#mX~3>o*xcQuGqo;8`ygro^<6%fQ}C z83y9F9X{~58Fcuz%Fk&QTu6_ib4VP~CR1CF|GL5|kardf(U$sfQ}ai({KDPY*vP~v zP<`TzEqt6oFXe#>ymZYL0sVZBbDn`WblEIbh4|9~T5NDnlj|$S{Wv0SWF4Kx| zParu+JpzgWFNi1cA$GI*O3kUCpM{h<;at9@gQOQ?Qo49${jrDG>pU4l@QCww!26JV z&Uol??Kftz>kCP~7qqFQ=y`4@y$^g|f9~$9)#51Mr4#A@M2bYWxJ^5hF8o)$2v6Np zNvK7`EBp1azRiL^+b`9!;H&CWD*3)%$Yl=AnJNN}75UBo>l8W~pwXUi= zVKdy@23a;8=}_^kB)zO<56*f>f{7#Tt4?Pm%&+zYf4Q2Gg6S-Fzttf)3SNrf9J{2f z$?$?I9D7K$Jgn@&Y#s_T#Xy$S?Z>A;~nCkdqiN3P@^Up^?8%qDK@)2?(gne;A;Xb&TD@lPB zus6DWZpVMX>W_H742!_D{yHPzKay72TseXRoA%p5V^+omhHvNpKFrzmm;CL3+QJ5) zn+WDNnVNC&tyuig%MS>f=4Np{SU#Uhrj#=LML}sr-i0v|vgFHH@k+~) zoj-|r0NIm$cd|+U;90g^&F+|pR;x^t1hZz4Te^<2f-9AlC{^#o6eN2TeX?^Wi~&U) zH&vzhyCejDkYj`}pY{MmDWk=RC6SCMORB&ty)EXT)>Y6-D8~=exF~0|^(tf$aww)N zH!>-6>V*`l!dm@k>EmWc-Pr__#L*|Rx{!+CTaiWHB$*bnU^rwNHLt(xs9Rlke!u%( zv3zHmNaB_5fmp~EyTXNuIbfrUTQgnIN3q zA8ro4HQJI5ZP4Pg&M6Ct92v`lu!pD$D==nGF_*u>Y=#QwJ3`|P->LjL03o@EA#vX! z+ID0c0p((XbN^QxHVWo+jR8NgbcLv5v#{TNkD7WXA_PJGxS1eEA4+*rRIWe#xBODY zZg~9TPo6P(#2;BAXq(oWna5AI&yMc)KKdB*<1)=3yI)jlSq=#Zs!;AgMwTrc98q*` zS|xxfU^6f)X=Jc=!7hd5C>qqRgaK?L8JFApA73SPqob=gunu;evjOancluby)w4^( zPWY+c(j{Lbo=UcV*sZ$h@HOA}A&VZ)-JPXT+=?C1$sN(t&!}sAcuSc(Kj_vN1WyCm zG__H(!M950roLc;{u@DBEx7}Cl)MAv0~Tp6?((WvC{p*p^82+PL24@Q#F2wHb!P=}ckLLfah`Kd{njuR?lYHXB`~6)U82 z!~yrWppf87TS@Z38}Ddv3<{o?APzxFR4boDa=!hxq&4i(kSuNScCPoop~-xvosE^O z$Mz_CNvO2Rog1QIf4VWE9|X6j0Yv0Xrm1@UC|rjMX@kFOnJ|R>N1D=ro;W$XvAxL} zYigJ9ptq81!i&xa1F(bg3*2}`t~a#kbO||}zdhD|Jg72RDcar$O;lB)_Ya9q8RqP5MAcBal)Gc8BsFKwt(h%NZp~ zO6yay@>@px31g<-w$kBxv#iZ0apXsZrr^)W&x%(oFSYV*$-Xfuu%eU8NkLRY^yy-S z*v1V}-IifhW-n8gZ-0(=quJ#)!_DX^Ze-Wt)qA0LK2&U0B{TrI(Lcx7NX2g0sB;I_|i&I}WHMO{0N>^p6%^V-|A6wCY|%D!R( z|6dQQ)$nO^UuX=sr>I5&-NMlpeYr={Kytpa* z6q{s|h~&eXdg6!w`OGnCk$jJ%@vh#~2qHAQp>|9uXB|o{o6}z-Q$X)Hpgdnv6yf!GH;Lz#%Aw!%B9_QSOS4_dsOoPa~1&3U2+GBuX4D2_|SU>y? zp~YtUR>)`&q}f^2D|4*rh)r9AXru#I!W>NI5}2=aOWw`3q^cbnF}p9B+Mk2HyD1sx ztUPX3M1O^X@=R`KkM89(7BRSFl3;HgG>-4=Y2*h50v>Q+g{=>o_6j^4FZELTX=y*G zF@4A(a4!%VEv2)EW{pwQ>SzHKy3mw2%y>I_luDl0#iT{1bq5}rE`YDG^SO{7vdyqf z2L0Lsta3>^XwNW+@m)fj^rb0qsPU~$QcDeTWJ7h&vzlfgh$dQ$$hFo;UiLBLul_-4 z%l7&XY)L6H+je%g#X41QRXK&dreuz${-XpSM?lQSDl_;>jrLD-cn4`cUnepY^S9xy z^_XxxlIrzZyj`lH(m|FyovrNY@5>lqUl{w=TG(PUovTgj8-&J87(JcO*TKDzRx;}~SP|aa#@5yZO z&xud#5*yxPaY~G{y{xWrT-=`|szdcCOYxOKme<<{M~fr)7q;$)futFY^%Vxldze`! zjl4$>sqMofD`hE5Kay;JXpcrJ{@ZCA^oS)ZMj#k0qL2kO=t;4wtL(C=nhVY1H{=av z7Drmr%vK=C`?dd7ei#Vq_Ih&>X32&LR`62`$*&WU+e!p61oE9cc(f`*EEOy&XcIAS7b;;=(#Hjb zT%~;UwKDcw!`)qc5KF5&hElSKKpk3^4`#v8F#}g`*{>lrux}ypl6cevMJ`bc1Jw$} zbOg!YUd-Wabhc}>GW^he{y%vxv`$9#UDpydD9iRi9d;LQV42u8FtV{d?2`+e>s|I3 z5LBQt>t@8tx09o-q-`Ky#vmG*9+Ep^i=l{%JO2de14HYfhE#e5_pp=p~G~2b`%r`H{+C_;kla73Zv3|H>1bKy?UK3N(*Z0dBYst#K=mXq6dc8P^`!o+@af6gi0IoH^874Is&h) z9ogLJYbd32v^Yiliru5!|0}iKnJN$_!m?{>sGTs@+{9Q2(rqlp?dy6_2eJLGsKIJ0 z<}A~jhT^&Btt0aEt_cb%#tADdTi))4r)AN{?P`SoCkCW!1~?(gSXK2YJ>zJzl#2nxinG!o|%7eh@+n4LL7@fN8t;nCnOg@s`@wOg=C<9gQzi=8fN(;!LCTdf$J3K;>*y0<)~e(pMm$Jl zH8&9_t(aalz@{v$Ca=p34-qK~(6e3A>kPl=?>vu-a@?t?DA{Hk=+1 zT*{(J+_060@IEz3(wKL^uje|C6y<5C4sO$HnLKe5M`LGf+8op|weU`KNEEj`JZ5Wl zA_aBrSZ(%kqJFQOIWVCuCU!x#>l0<)uSj)8Z~y}h+75m|KS1;4N0;Rmb1@WCjc4mo z&PDV|Bo5sEExCsTJa8wtfF%OrG0x1_{#%bX=_)=~+E(rl?f-4*!QkMN$*0=fY3j`k zj=+do@*}B+2lkxcBS{-^n6o+2k&IssFv%_ke&qR(ZzPDxD8m~@p~cbV_aYO1GnOnZ z%?*woYHn`++vy%M7(X>Bz7%@@Cehli*>bkM$#`YW!nowrccM&pv@zqu_?7H9w_cN? zt46UWdFUVt)CBi&n^_rzX?rrvOVt9CR$3JmlX61AQnOf%Qu4|Y2{?`pwVnpYLsB{*)kp?9CXUYrwgsvO8(Wj3S47?2sX2Laj!@JTG7m?#=V_buNL|eTF`+ z-$_zm>@Z5H-c`K}uDE66<0p|KXcuE6T6uVH$QQUmqS39Lq0T~a9Zt-jkrZeS!}?K#8^h6&*mv7@E1oTsWF{q4uAjr0TG!t+j#y#5nNa+9I>TtQwZ+g zw0MX&aoklSLd<1@q~IXGwMmUuKd;E38(+wKJxHx9QRSEKac0zX1Js6T{C-WXgk>}* z(kOjno?W%h-UiB;vioTbOJh$yf97RWSGUV5C<{}b+MRSmtS5rNK!Rd!e=VQX>Fz^M zdd7NGI6iWn58>#V2Ron+o=f9H)7gl(<9^}f-?T_SD|-l_yz>*i7rg<3vY(IaaXe9? zF@w>BBJ66WcD~7+t3;hB2VU?d%sw4~~m>Ry*UoO#%h&U%e7`K^UYYN^7q1s7oarc88 z&Oal&XPMvlk5V98<48lJv5+|c=Nd!u1?8`P#HUx(7i3|J(Ikyr@$I?AcGBS;Ob7hV z;|fZuBLM)pr&FH;Yt2~Jwq*X3GP--cH~K;b=ElTIZadl1+~K+Lza{7K4zPrS0OJQ% zL2I{Z&d6sCz_(cQg<=SsIzRSmxzI^Pxf|LST26aLy#vzDN|IljW=|=P0LVJ^e&IdB z|1L_a0x3}VBG-)fCpgFvSzk$%`A_5R_+hC`5ip?4!!Da7Vh`==AJX~<^xz-9plO~w za0)Uwu-4lhM-XSlf*N-+e#(JCoKX+=>Ex<;Ki>Me%F`ImA*M5cpXqZZy#qo9FADVZC8Vr$#K)0Z4i2i10J5dH_2KO+#^2XWSIC2M4@V}Jc@h%pt2zc{u@9y|$47w3wGUT^2z2AU~ zOe@&O5f|gSUD!Wh!G`m_%QjVhrna*=wKJ_s5l43W9{-;qRV!AJ=SeSBJLEkLzyM;3 z53a(38^7_?5Dj2{UH1+PiK@_^^FzTF2eb2Wnz?3>V2>fX#+7`yQc7Kr1ic#hCpG3z zRBJt>uJo-V4&eMM@@|0mylD>-_hHWf}Vc zzH^7CZ_+Sal8mR&DPT5Noiu9z6I=TkOn3wJ9B3RIDi{i$NjkfATT_daDfCd}Gd0`i z?Qfbs{Z4nH8bbs`BK_3x{pGP7Www#F#SsgPs0zHf1~o=0it?0QRdAjA%%9B{z%xFU zJ1}0-a8a2chau8|KDR$S(e4|B#K`3b7Xt!Rs)bA9M`4&tsq3Op61a5c#~t^RhoL9Z z=cW)Qgqt;3R9|U`f`u{?=QDOSjZnrT{(Xx;cqz$TjU+FS3 z^3YqG&Gy=7i*o{^cRB5@_;$x|2GjChGM{ZdQ=Im1%9HvKGLI{UUJdg>1 zqaOacuudq(Or@l=QUT}E^eX~?ANu{PcbnsfqC&CLRO5k;rMp$Tu5Y^!4MA78+d731rbHL-y0q&-}C*v^6@=&`=$+O>W zA9OmugJtOObo$9BYY)EUY4))r z!&wN|YH3v2QHU{9M?x2)6si`AiSE>%A^^PzcA8;FHKmGHuDSEHgvDBtGr+=-tg!|c zYT{wa2SLyIk_yq5_JHHPiPNQ~ix3F=uc5MUKfD(c1ma&aedsTK+c2FE1#7(UimK}s zs>clu;^>F8B5~(NO1dH~Xu1_Pe>x#__E`ZL30QqJ&cD|&?Rc(~FdapvO?)@L9l=8P z!-0sq4=~OJ7ykf$>quvaUNt_`k&37ryei;2nVGw_W%r4Nax56+1*W^|xpdL!C!I+c z+)jJFrv-<%kShx&n^BE4wFsK@K=68|5X8|T;8p8^m^P;%?I_!SzoVB*l;bj+0JR-X z8(u6ld|wW}Jy(f;{<%5d@lxkNR-ie1rzjJ!%I0^M4>t?|8em+*Qw}T34F*jnBDgn` zd_ceN44f6zwQNEkA!#hB@3QvD8oiG?f&2W`({Ih3*+I0g*MRv-D0q{hcgQ;6?6A{& zHr`u~#$UDn0q&87u3j?EGw`>ZczI<|*)rQT*h#6yHD5fX^qVK1b5D5U|7?ueLv1Q_ z31a=Sw$lheAVT`F?5RT&Bfin@w%TK}O|N`XjI@#j5i9f&|5HG34)uM$TzaakCpE~h zB6u4WA$|(ZizOaic_b#q!-)f~b_ttG#_ass>9qLcZcsw1x^!cWsQr}zn3~M zHm2}8!s<4;Oo&vQ&p#~?6lF>*y|1mqk|=i3%G=t2sY%;{R(AE_kWdRx<>{v>y(X%M zyQ_bOSnq&&j5b8ahI$9t$e>}^-o66Xd0NIQihcop^@!lm=f*(8gvo&)B{U*VqOvK) z%IX!$Ld^kbR=QqdJPb8eO0i?pgvX}cf5=_^n8B8a{a0cjcDWAFqrGx9ClIId%r6Cl zA_E+uZ>Uj*O`byYYw8o?Qo$8EUm6t_=r=DxPqi}%WKo(kO(GQZ^_}EsYrkYAOu7z| ze2yr!g~W|sGdVquf>xyFC~zQR#p7Nkd{97;3I9x>h*N&7yD>}kGiI-ErqI^W!sve0 zZc8NsINacNuAsL&To`!1r|F@+XY)2e7pWf=+N?`5+qaQ!5|cvwKp78*1J-tTb=(-*P$`jSp)y>(^U+WG?IE29t2bjUzeuM=JBZ83KpitG>62)t9b+lxL=Q}_boKtNXUPFG$bhiK9 zES=Nl;E+bCvyF?e=^ktbX9taH8mb% zl8X2`{krWjrm010PN9BxiPUoFM@oEu*y0&}E@bwn`W>tI9lmc>wRi%7q0l84 zSqPVgCzD6h6g+qq``9XdC6eExZUdJIV$3Ox75MR-lz<$HxuYkiO!b)Lyrwtd*3r6fcoO1f1d(w`BU zkNxDvu{%8%ah;N9Co9#y-duKs#qHND)O&WmK_CdAb}f) zqk0wpjlQSZ%ZMmTw_rJCagG_91sS~yb-c>w6?I`=YNAxo@1?Uenw)(}iC-E3sYQKi zgQcTsgB5*YuGo1kF|8d9@_T^HdM#EF{OAI0nE*j&0fBoXn`#cLI=!xp_1^J&t{$*4 zMjyN1*R zqu1p|DfmT;K&hpAnGRzj4N?hd5Qh_eT_U;&h?%a}9@%Ku#@Cs@H~!a{@l9Z$GX>d;!3NbfC_2*~z5 zSzF9Re{im}yzTF5xgXzDKJrLILWd=mZWs>cQ-+nAO>HrP18Jod>W+0iFRoIy{!=9l zM07wy&-6-m6I*j~N8O$b`R=2Hy1$k8`|1Glp^4rcBV&bj!Lnbs?*oorDTFU>fhI;$ zch|cez6SZ6ygXAvV1V?Z+wKb4be>EVO?Fw}P7u69yGDw@yq-6`lvMw!^uhJKLz z zbbzWb04~!1qvM2t0-);>NTG`oSqS_SKe#;2)Bw{=(>-FCPb=9o0l5SMgUhFZyID z87X^aZF$=6=rMy=qWbDN6u--R-1(kwH`s?_rg?ud9Iy%v_L*E|+IG!sSNRlM>G->x z{oRpMz83ELbuGU63D zxgl;QBc2RSnMBChYA`?BnrsQLBv82Y_nZSy>k|5;`JKa&dCe)$->CkUZ7mrdm7}Z? z_?R6JIXdEC_(>0`zP3%0M3X8zd~GAUPZDLUli9Y_yRn;nl2CymJc!)!2*Ff^W=0R9 z+w>1Ef-AG>4g9Nk=?B@)!6g5<`=z^Mjo677qeYCY6hFn8RF z?d^`5US{?~{$xMn&if$x!O&dcw<{JgZKUM_;5oL!8*;Bs1`lvf#7wR z`j-0@P0!mlHWIlyDy@eXQb^vC*l=Q6Fu|pxc-Brc?m7Kp1ruN-illu9RLjnaitV2n z(c|sRf0d@&UbvY|AFSBD&Yc*kt~ei6{HdCR{S5xaK;01!N$fP?lOqWgfz)9#wKoyN z^L^aGEn%CVZU`&w0pZQ?&}@|ZZPXu5V53;Acj!ERFLHbsg? z{NrC^GVE@lKU<>lrLmeTF|>U5t4-7;E`K@7KgA*g=02{iz0t~(-2o_`hBo^_(hp{x&0E(_X-n~g7o09jOd$wp|-pCzth=^ z|D!wKJ1J5BFc?<+4y7unL0}(*c-Pkoxnf+DW1*W_k}d*R0P%%YOz7I zJsx=vXT2;$ahjq=7+--WafOf|%kFkqudg?9({R5SQ=sOBBMYsUh996subHSIByMLYTOtqAI^VNxL zyM}B4RR~c_bQGC8qI`!LdW>8AT#%TT?vd=Bri~sHu}W4ECa7PH_iBOapS7}wQA$3R zMrdRu-TF^fB>7)md*9GA20G+Z=VR(66~c=8pY%jm_C33`rz3NDQ?FYDZs#m&*mNfK zWnsgrPD%g2jhZxeXPNaL!|wfkRgKwFKaTGTUBiWzWD{qqswA@LA~u{P$3{c z`oW{FQ4#fior-%r;BE0AmyIeUx6V&m5vQU&4my(KHm#{QZVf6>F($)OG+2LVBxLz< z5zci3N1tbq&Uf`nM0jrWr3bUJ@9w@)C_fy9^uXH@w9eYCiaVRZK1D=T!9=U6S39|I zd|H#lk1&STJzwCMkzKTSv#UJSg4AeQnm45wgC8r1lc8sK_d!v(^ayksR#fk3m=Fp^ zdu&H=)79hmu99Tmn?naS5)-`QDQb}X=E*3~s=bTftX35Pq%wj!;mq;<=g#jRxTGL9 z^R@3E`NFyZNa46xJ<~L|ek~k;n~G_wnni(pwosp<9jtcD8oZAj4oqC42c=1rHEH$} zng-h@D==IQ1^cmkID8^Q?+T)m!9&p#69kkqFibY?`lw+?7LKWZDnqHQJQ(y&D%Z^-e|Vl~|X%riG^bN|HE z^wT%g`~QJBJvN!bk(zQ-`6~}ElcR4f*~+*`ALsT0H0|B){Z*U7wp{)6W2@!i=#_|2 z8o_C<&k3<604R$UmZ{sMr;CIVDA#`>lc%p4#&C6meB&29yd^8Vx2vv!WIu1Q%Zfo1 zHH$1w9b~D}aQB1?LT>OVT~9v?jRe|sh1&l4lQWw3neH14c({_P3@Dt#dqL!E3=*SJ zKtyD{aAr64(&#fCl8Xkj)vK@;LSBzx?unJOz`r}IKLYs>O2x0sdA7us$N0(1_y!`3 z2xREVFu~3S9jA6EKZAo z5|Kj8T;}7~w9P6YF;DCF700`N;4M+>b9-d}a?e7M@gB(D9JlmzXy0m~ zxu0O<_8^wt{GRMYd~8Ma+p1U^{LRUv<3I9ZTSZwsUxQyB4MXJ6bF5pzV#-N1V{MO< z<&7roBh?XwOwvK0B;AETp!qB&G*&qj%d05ti_(xU%&Y>IhxYzN6P3mrD`i|CAcLDD z0~w&_xPo-TP7lMsXv;PyKtP=~SORAWA~PQ(Q89S?w(53&e|{$8&!}D%&&FkRJrq+# zQ^x7q%37q^O=e#J&BPRja<%fb)^S*9s5h6(o&L1(Atsmx;iDloI@Kb$c4q~iCV zIHp%^)kJKy7(0b@!wT~c8no65#2YH?7@fYR)ZTL%KtNEA0>x?mb9&HBDI@{u61Hm+ z^ZAbY4QDk^#5mpXu1+T)7zdz#x7Z)C+M(Su0eF#5lO6 zml4Qgv4@GT-!2+Ui8vp%I2C-ccCY@u20lM?DQM^QLL<-&D@I&%hTwIuS6BQOrFFZT zbdZ&_5lEVhtq3nIV6}EmVg2H*0Rhro_~eJH$y@}1B^FrIj*Z;Ywcy@$Kc08q^_=b@ z>3^uuv58&Y_X0T>Ze>*z$H(W@lfhFJ&Gk;$I2+ST_s*?<_$Z8RQ1)(4oCl$@dVg$?42gKejL zjXk*d-_^~~qCo;TE`1zDALurl!Y{usIp{}8p`jl5o&38?%6Kqe;aU1T2|G@?#yJPc zPpj*PFc0rx0BOIZiw3f7jnoOfR}!mZZ;jombV`h z>G~6hwGS!Or-ci!6##jFR>I;{Zlx9(z|Y4MDRD8GYujvJ8+H$}e&n8(CB6>zH5v`r zC#xKwA-A=c+uBZQb z`*Im9R4?}qK?@XO!q*(wXsGz}W}`#)VU*8BEY6N+DgX=D+E_j$3{PZQ|6EjyWw^9w z=56ksy2%7o}p~H;;NB6Id@1 z3>kf4KjO}j%l?jwM!7aol{wC_O1a+s1fKo0Ls`8_EAFB#AW+cw04jEl;Tn9cYnI_ox@c$7^QI0fP;$9rxQy*mC$R_3~&C2_=OM6(ASu2^1S zUq&xwgHS?UAk|(ESKKWlNT}1wS88N^1*5t1pR&?gl0qY`Lr&V}TK2HcU_#Z@3xMc4f{c&K#yAan@|wM}q+ zti_`tqvPeigep%xJV;YW9el++O5i%FMKNjR>EZQ3%F> z_64y!VPUc+zsEu`!Wjb`g$EE3$Ngu9l0QOqy_9L4m?f4a$DCfmHJI)^;#agr?9CXU zG`o$i8Q7znG}K(LOA#(L=~G2szXx8>b`w%#N|kA&7QyB3{ILxN$_)n+5gq?wWM@N+ z|5U5L<|g45DnL8O;wnP)rBGOik);OC&Mke^Aw+V`6eZ5m1qlc$7H(mimXB?sv&Y~8 zb=i>WV3Wwf_Xh5YTv^#i;jt<8yQhQM+wN?8A7BBW)!hymVd&sLTI?OunSC)h>KdWL zr;vaGP~)V6%<1&T9SFp>f-67KfDmaEfUo&3_?R5(iIgf3Cus}Z6SVTTjs}KL+ z6MWNvcS}@1M{R;O)1LF>b3_O^fwB8W6X8M^>HK*PUWw^S3b`aZ~6 zO_57^6xeGz>doL1)rH%pCCb11Pw)VoF-Zr#x?)Yz*gAdg{9jwZJ`CXbchT##0DlC5 zpKKAOmIl;@WgSnK>NA^qExOW-ZQd_EAJ=#nMS+k?{wH9@$>ZmJJor~sWd@ZD^x}QH zn$YVJswz=x+RLQ5hxi3(hvv!HX@LDV%*u~Wb#PKDZx8(mD2!BFwnb&f*hs ziZpz7@fAEj|I7Ss2!mI8GKnKl6LvElcR1omK(~604qdg?(}3o1zieYjlW{Z5Dskc~ z;n!?Vpha4cD9%mNKmV6KqrpG5&UbKIU`D?@Q#dzG3`v!v?=tH28m(nn45LqP^n7HsMI+j%8{DB0@f`9-VQef9gE z{!YoUV$f(S{uewfUgXJQupCQm8)H%WhyZBy`S($0{gfLcG3AZ&3cFz{PLa@z$cd(m zRDZp_g`JFY!meuoKF(G&cla|Ebea1z{)f1N8|I0ciq~l*9vRhRC;}H>+W5ClPQU(` zl1X^t9bOcfbBznRU%Uflv5XZ7wmae>7sXy?<)Zzxod@>-g#mnAoJUg6hJ-gS`M3z>Dnef#AKPyk>VhE~) zd72lz>YqaYn~Jz1ezSvqj zQ(|wz+SlL5AH@NJIc9yt^Cs>>?yOv-SqGnmZUqUzunV@bt~Adr$IaGU1q%pFg2k_zo0<#;337&^IGSeDoNWJBLw*Hmi6IVSwh z$lRkEtvGhSdP9IFz9>6fUiM2UftsX0zw!GI_x#lNErB>8yeSbFKGRoT_G>H0wOVtr z=DSSxr3fbWe}cjlE!?wf%rRRRUa;B~U(cxeLT)XK6gWVtS1C{6A>?`;PO*-3Z}kQ& z&d9l1o^6g9E*bI6pfEmu0XmuICbCal89R0HYU=;FCOBPUm*m#^UvV`*Ehd`9M5p|I zqF`WW`4Jju-U>ni%c0kZQ>@*%{&WNVYNn*+e!G$}D`@zHj@c#ANO3Yri!|pI@-b~{ zNB9wvy9wmRnqr`FSSq!Qk6cw9F1vkGXo?EM3bPAxCOCTP=d<->{dJkI%c<7(BIM=j z87_;7DgA17Myq=cV@Vs425{BuXvufDbc^0TNybn|;ytZjExohT#1b0Ft=6bPw9STR zO8q;>TS`<+*Iu6DypIQ6XCCljuiOG;u@fhF4D60-*9DPa2nCynKtUiRpyH{q2S9|| zd`3a3tND!8+4cVtxuLryY3Y<@xt-rAD^DS=K~=Ex4cxE4*xv)afE#vsRFfdyFy&5qj)ENwWu#J?>eI6qx9 znB9)6W09e~TrG8g{?qGTt9nEKeT>Y|J}!Q^{E)f78~^!<^3jb^hI)vc8d|ldP`xx* z-*NG))n8ewUCBcyll?g;P&1xAYtFiuG^E1Z;^b8f16pa|spNu*+*WM55iK^~6s*Hb z7UQYJMPU_tWm6$+waa@#7O0n1z$FsEs?$9Bt3WP^ThNQ7J4vSuKi%Gg4}pvj@TD}4wNys!~SkGz_-A4t0C z*Ed61@El&V1(IXLrmTgA1d5}Pw_?Xb^FbVR4WlV#(?3mBg*48PK;#8(wr%5vcr+fSFU6H-nl;QIG6ubjmvx}@UXx@ry$@{3;SRzM&Xz-vUzWM zJ51LLl6%PJ#P8+bE&3D0rav8)*+RMwS2<)6x=0_a=87>y%l%cet@!}u7k2(aQ zkWC@;3f)V`58y>w%6uS;3%LZc*`Qp*fYaLbBy9R^shbY&8JrnSz-v;3MZV_>LizCA zddFlcrwNASO`?5Kr{ry-RgN)WK(`7ZdO_hZ%{5HQzR@%!=iZ4) z6sKJZqCBi!xrh!e8GDj#YvnAo`PgAP>+}|hI|5y}5dHk$oRW^?&;@S)KSLMxs{b>x z2{d1X7Q~AzQe$4JM(*N5NkUX$VtDs)K@fQY0p%*++u7PN1+|4WBmHKMf3^MhO7(RV z3Kz%V(kk&nq>k!hG8EKEM=DG>X%KeBcq2^v&7swnB_R%HqFnt}S#9`A>0@>YGFvG( zQ03SC(Sx_;6(AcBTw2eG1i7+IV%LBnt8+ZMG8L*%yo&@6qerZN@zTBU1CGKXk|4PX zGmSJXWIO*tSk{#0p$ii_8>4oXu!Vh+MUz@z|~hxFwRk3-nI%T zC0x2($P^*3a7&s9*t`>Ts1xykK8!|7@ZcebqYZPUpeV(`B)uJ>eE!)8p4>fAwn)H& z--OJiaDf?cJR7OT!KJkhS8NU*_R8`Ts%j)qZ_Ke53c)AjIK{`ZSaKycwdmGlmXwHGvi9rmc4|yzhg@`_Hq7|aW>6-e z(ifN=**q&}i}&B@jtg1CeSv56%O>LN=qHf`mGN5@IS4^fXw8Ew(PeYN4!gLVV!!`= z#J5eC9>AxSu12l0;c^KNXcI7>W84SU2tb6Au6*b~xtAG*PXv5)f9vj>N@#JcP140+ zpARQdzOFa$z zE|XFv`lM;C@4r^STyH1n>1d}CV^&=bl}?RE4@&*opPuxThfDxr2jEC9jCzG|shWsT z6xNZ5dzY`N%7O4L>`K|u`DVLA&UVY6qW&pOkm_Hky8(c1LumodOyoonc#!^MUT&>M zn%9%B7$s$R-#JCfdX7Q|*{p37f_lhzHP`o({fc3?>x>d@QgM5JLzHS^>|w_{B!aE` zknm$5ADoYsvT>xjK~!*VS6R(cHZ4z>BTY;=p0SXKB5JFIBYl7&J=F*n`6y zHC49Yo=(PdA9Ue_?PLiMAEXIdN{Na8|1&I@zd-LrO6lEzG(?X(tK?i7jAtnb+JX{iD%Kf;E) zKpJTmraAR)a+UK;zKy7BvC>}OETp#K&*Fglr`}sG7!TGKmJ+@xiD;S`ul$I*YGj>wN%M=ZjoH@#nOLkJRPwJtHzI7sro#ri9# zS$ta;cH!X{*t0w}-nftdiJ4Vnt~@F-ihxEgV@dU#e&llJsWwp?8s~536n&#YjVM)bnhF_5z(g3uOrU4-*|4|dYwrb%;2DJ!Kl{2gU%4y}iR1~q z^JZ`rm%e!g0+_dMiBWVlPfFwCU0f}MCc@3GaNa@vbA+(Q`nIs%Z40z%boXWh5B@t} zE!+d2&zOFMEyPN_EdM~|P9VD;hi2qLOXYzNru5-hrF#=@@PZgybc{oGnUY|V#fK@) z@3PRsra**-gPIrh1*uYUgWM(EqmPPrhUnmYyVjL8VI-|o=E<%IRQ z80uK&m9@<-Cn;a6(n;Qq0*6i4fn3YL8YrkU33Z2;!Do2^)xj0C4<7V`e!stwN~GJ? z7luk{LnO#U+Y-N2gVNWd*s~Ps&~`P}=8h3u7L zge-=80-(&Yap&48r_Z&egp4uj{}?`Zr?K7%r`S+wbS$IUXhYnFd3%M+cUh}_tkU?eEG>|RdpA&`A`Byu z%zDU8#O5VQR#RV`S_>8L6KsOqgQp6NVE+V7W%m=f+HOv`uBQ&EfUSU4gk1qNMUO&c z;_~y+vjx_qy$M<~6cgZsNH|19)WQ74Ig>E zLGrY7Tfa@{k;qVS1GXbYbSPZ&M{n#72;Es1U%QR12m@j%FMt1Z-s^g^u9>#r?o}5% zKoH!B+ZJ+g+v@wfnXep{A4e!=Ux)IhF+>6@kCj1SIC+l=6>%|HDye}CH}i)g$^SEs zpV@7<5^UQV2!#M;ABB>daX^Z&RT&(0rM$gizQdqwDsG~AZBgzjWEC3?LJuJtqL{l4 z%GZBsItW5*S6UTSCWY|a6jB*I zU!b+T;$Gh-tFM9|Z$w~htMsD5QE)>9ASunl+&6IjouveI)dRXNv3CVK6U;v8Jdley z8mZD67n6?H+-;WqF;}Y7C2?<8tMdR$qLnXKchX-u*L=J7x%iuTkV)P0Cj^cno5@Dr zUOq255{B?*r>xbM>C4sd;c58bOzsa{G3{|TWSK|YcgTZYk}+sANWPXCp6P^YK@eMF zfO`;|!}G@}O)>hDrnNVcJ!^Fz$b4xZT=Eg`*@llcr+1N*X;1gA!op$;kPA+*9)q<~ zckI~T1xl7!B56KFy1DRHtp*g92OR0(0&_< zRRY+R>UbS?_3%R<$c_P}VuOqyBxAd^5KT#=y_&W0G;y^bHB?@W$CP8)mImOz3(vu3 zmvu!yXyx1g?@huwKnwpQ$S4~EP3CPJj~>vNYH)2pO+eR4Af}U={k&H5oWq*J^<=tN zVaz3R0NOV&1Cyj^LSEu19N;5! zI0B}^mYkQqX07YSGz|~{Yx&J2vC-OzzZFi98_NoPiS6OLa(Dk3|JPh^zx*!#ViUIv zMDW3hnMk1s7kdtmJM6pz(J7riHjdMJUzDGYlVnI=`1435e%gY=4Do#7F&jrWmXkLpEfV4n}kP2kzl~Ri$UnN%B^}m&Yc(WMqKUrc}Y7+o5`YqJs}UXu)rB7 z1N*p~l)7SZ0l3GyHV+ zHs}7+3?qlTgDK7BB%M$Qz+PMgCk}}&So@P=nSQ{l$6z&*nl4p5%Gpi?c;hx6_KtV( z$oS!H%Skt+!+#_MI53cA?HN=|FwwC{I=MCVTnk{>?rW`fU#Y};k03pc%et*a9c>^_{~}*26VI5MS;a>@a`)YWJVmQI=ZbkB%!q zW%1uJaothR)@>XO=_sEpe4FgCZ5d7z+`WRbNYQU^Mn zJRO^!jfJy&UfuU{KvM!(EcY=!&e|=;70>1Io+Mz3elOIkywAPL2%knHw(?8CSu;M_XD0S3(f)$uS>3 z7NsYJA5{GzJ*d_=K^F5$`LA@#8lmn_zD5BeARf;b6Ags!5>8U1#~-%SNAdIN`rNWq zm2y@db1?FUij3*OS_KbW`JH%Hf-jYF4maHCHZN_Xjf5{xEup4TmhP)hp$GQqafZQu zg8N;v=V4jNgx&-vT;e@h#BEuOC3`D1uaRR4*N0MsAkw}gN!~(`1zj@s*c!p3A(X+n z^!NZs$+rQx7!?--aGPx-S}o{hGu~Si0P6L4Je9Hd4|#m#uW}dmbb2*3Fq>!|fa==! zr(QPGD##M&Y^T7cb^G+B^A4?}*n%S7r|hZmtzH!C4$eI0Z4&nY=M6)1?y=R*4#z`o zBL2C`5IdyMrU*dBxZWbBqV4bURl-Tz%e1~iMjE83ZyX};?nu1~V+fN(ML-aWx7Ty% zeX>`mpLIT|a3j-bH>HgAg;9F%qviwkhDtsXzQ`7camrNZkG(k>!8aMP4Poh<>(Q6q zN;~4s=}?|pBh3B-Csg)mBfJd>nu=uWqNK7^t`{ZFgJ@(2XS?99Ie+N+qV0COZdxsB zy=REMy|hL@f_1pd2hMJ1i-VN+1pO2h8t`uE!K!A~it1=i*nGI3KN(NX6X4{zvVK}5= zQ&KL1rP^(zuw#_$G;5S`Ld#XL4(C(2OjQa;2bwhk0GlD4u!KN8@uuy?850VZ$y4wf z&s7&uYo9cXL|c7DL4)2)mCgODmB~ae*8@gcdewz(ZLJ~)BAJUYl&?nTPJ)K*0v7JC zNs|;vX}@QgjTH|ZDm--`rpaPYRr%`-ufO#*Ox6S}uMAzU8#{gr9;?!~{)Q{VCUZr? zWF#=MS2rSHas)+fHvdJp^_x|%2Q-Sm3`rYiCeAebo55bI-<fE_D>(~Zua_+Z0Y=+@3Hc)c5oHT7%-sAckt%Ufu;4>K0}pF(_Vrd9jay|H2i)))`FcQ>5e7nKn_))@Q*i=NrvFi=?)G2+k{7rVQ z^|M99or|=fpE?q2<>CeoTy|e@*x*j{^)6(Ahdgqulu%a9XO)AGpPfc`!&5A$+doRrQ4Df03GW{YPt`7Ws9AZl8I#!iHSTcgGMa_kg=5o^`}s`iLr zicRQtlLlz3B8ZWUkkeYD0fH|E*sWj#9lop>C-@yK{JQ}Ye3_B42_;(`^`1hAp3wRac~c`@I0$b+^eZfFRPXCfnxto@ zEqogP^h%6wKv++A{x*?3*-;r%#J^Q)Xt_D6eRQHSoZl4R1~$Rf>3+d9xJ|v`0DN~1 z9VV56;qPoGe`HJ48T7m&Y61x46EQ^Uaaz9gAYgG=tAAs#+jx~gXwMQpq(;aVXwr&q zjTxU_ED9HgJ32`GT6Jv@{43=kb>$D^)XN;6rKxnA$`boLrShQ~j#}=mrVAX^JR58v z-aO2Oe<0)O?o+nv_`Hi+m^^5D8XA%vsCPY%(eD;uex2wu46o3DD{IbJ*~WIn|E;bb zsEEXnaGp%r3Zi2^SLv zgtLYLevfN(;cNuf4D@h!v)*!!4>KU~=w_xlpZ4GufTd zbIpZL*~m_p6ZEWrei0tVhkd7ZQ>z1OlczAtCSA;hUicOSQn*8oWw>juXK8ljGq^t) zx=@y@Vdq+o&Y(Vqksq5^sxBlf6@cpQ!JCX7l~;1VfnN&8gOxDE@z@z#Pfxm1`BmQ& zNz3r`yfd3)Q$;$tbEr;A2*dAd)rU64Ez%c)SNWuz)=ULB5s=e+Np5Ww+`J!FzVFf( z;&hin|4jc576}nKYc|{o2C1_*V%8}=ALi0{>CmdZ7{@eHp@I}O{&k}Z%fep_0vR># zv0WI`Tq{x9L&ASbXv+FY|IU-#?3Uh<5#~c?X;z6FXVy1=(^o3TRYZSQ`5U(!{<9J5 zP5(|N?pYD_hGAovM1;V})F;kEdE!(QQx(7R#!~L=YTm0N<8sGSnI*ybFjg$1C5_^^ zn*2LdwjB?S0Cq~wPw7zvq4KV(#1VtHz&i3FZg{H9Sr%huk>1|}P^pY2Kdah&SM#k6U)rt(Cy=foEn`$zYGq>k`HPPe#Omb%J*8EcckA9NiddZx+LKfZ*wITv%vZQr_8of3O5(300BWd2) zX)G$q=bw1+6?+OCk`mDBN0SQMJJ%yN|i4X zoKpXvC_HK$y(08=%P&j(bHRh!+?;-@CRvS8na(h{o)B!FGmtONK>frUe=A8uiXRXJ zXs(|0o%o%F!vLrjLoZc0QW=gQR1lVY!^yj89-Y&pGD@=PYZF_@m4CX|Slj!VG+~ov zpT>$U^h7X_WcQViJS3}l5_$Iw4hw=ORS0jr%I&g2Pg7eaVn4XU8wDTn;hzlDvn-~D z!2zf!oWP(fNdHE*)kr4){S+)#ppI$@B2CG*UT|w4>e@h-hW5$WLw|UF`x}bO5-aso z^pW3210;8NvBJsgEQr;;8x+2Iumxz4%(_QlKJ<#!h~{#s9>f6- zCY`T2mz@k+vE(W>cu@(;jayUliTuAGuYs@~t_d_}E@v44a9uV5?gC$uOCl-IBEYXr z_P)Fbv+(Ge1SvjrU+$KhOUWA;M-dfuPJ}ipt0oD)7;f-$+)E_vWt-zD>KZ;O)7^cb zjbqow_v`hMu)kQRZm#RgA4rS2#Yv4||19ob;Za7FrG~fgMkZK3cjScmDJKY~M=$*M zJ?B|@qjb0}|9}ZxL{Jf#lXgfv7-ZGpGTh`Lj>3Qb`?ev$Dd?oVpVgKn@)Y*t!{hc( zcpjiI%z{KCLOfPH}zT{U9}rg(`eA95o_m7Vtnp%#gCEI8WW!o z>%>)CW0cz;Q@v^6h5)ku7aQ>+(8FW{O=?jFCwgc3QkT5i)sMqoAA<56qWWcfu7pLq z%72Y$k_+U(MPLWzG-OftEx~iMFcpO3*Ts-LxBTKI-FmBKv<0gX`~auRU%L|>UY=_Y_!3S-hYo-{Er_HHvMpE3&^;E z?24+uSlw>y>aLA5d31#cN1Rx3Ol2**4~PmU9Wr3Y>*Xr4+$F$M83kX{fB0Owgc`Ce zczXm9E8(2xGY+_q-gkY*nzN^>z-wONPHiFv^JT_gf2sk_vMch#Tk>1p4LXY2;|lX?rq*DMwFVyY#GO%cdyEWUaOEHAxg}wI zlzang+A=pdB${EdK{hYV3j?uV4G^j4q~92Dtbw&GE}nZHEeXKr8#A2n=y_+k3%1!1 zw6nGqB96U~8}h&m&MeQt8MA^RIEQ9ZTbS`2eM8y`)liuh2c;0=>hqEW0&!2b#ul$v zpAg1(h%s_dBa1P!LSw#L1A!LaLyMS99Wqckx$2w{xIy3Le5dASa*J2lOKGGZXVD!; z!CdOWfD3N}$6{b)Hon1pCfGj0q;Et)LSN^I`r!dsyM!At&QeG9C3aWos|vZpE^yoX z2;ti`&KSt+5We`e|V>h~BLjSkMWxF&r+s##MDD|~iT>l!)kiyPbFrRWz&`KZ0jTkvjN;^5i zssAzvAnCF$IOd~ngCImAvC++~`dWgRd}%-c6qB$3xI{%Go7L}93gtm=4Yb7UL_uH~ zc`Sj5NL2&h{xUs-jDPbofI20(D>S}2F2EO{D=}cdk1AS&ROP?*q|a4+Q5-=&wvYmI zD|!3pfNr$-KL2lJ-0fg`&GG?9YiR}CI5lj^tiyi*lQ0y73NI3BQ>qezJ5z^?{cts# z|GqsAIRJqkW?@r7k}VO7&=9X>%u?D0b_4H`UIe)Vy*o*OMtotdX!i-zXnpy5(I{fQ z44EfG)~=OA{^wk#d;n~V z*>}&gA5612RlA{I6L=>kEuaUBv&lKANavCaDm%@|V7O6QWw%rHarz6Vq2N54is)iJ zn97cX=Er#tnbrgL*@I0nXIiOHtaw?bqDXx17o`O;co(Dnt|r!Q$?YQBoGU0+$nKiB zWDxHPpYswF7z^OhAmtvF2pbpI#G|XJdl~R4)p6S-DMY^!_vL2u(E-$Lz;zs1LRiNWN0m}D%gHW%XOP(!%Uw2wO=QDe~ z3$=#^ILNvk>I8XnHhpsl?P7rnum#ycts@PNPxUeZ`r93ue>RhNtpqm(P9RebeTH2bND_&#lfKTauW+$>RT&`mfs8KE@#Q zf=RaxK6Q~wkHa~q#*Li@KNNl6qaXw+R^&;nz}W!J);|w1ObRFh_y!=dL|N6F=*#+HC73TvcR~Bwz_zo&$MyY}U^4TGv*R!qta2-#K$KHGc%mc!F`qC0zu&TYAlkfXR?|^9I$pRL{6*nyBLg~xZRkG_Wvztsx-zQu@jro7 z4Rw>I+!f9U1>R%KT-mCtE>94xS%&)_w}WYlb~6QGGKG6&o>eoQF~}$-Co*LX{NwW% zu;-R~(j=bVATFz#I8?MWzI2 zJp6rt_{<>Y1ia8)xsBvWmCqP^)b7hDd*JUVDUm8BU_Q|CWKPv-6vQc$nK##<)e;}tqr%XNN)Mx{_AGP-ZTO%j0c$+< z9L}|{88lg3b&%dx!uKRGzpleMW=k|ymT00b&gQub|6!3s5$G6k3c}73aK`+ulxe0!EkXK;*S?NlX>SZ()squ-}S+-fvOQpjxF2>@{#x-;wE5jGK(jeF=b87JPp z06e6x=i5#V#l+-aSMu9(8n>Yc_UW>~Iu%KDVd>4X6#$dkI9g9miQGz-ROTDB=7*aO z=mBpZ0={+O{|RfRrJ!<4!SsGH#j{MVXVPO_@+8zlSYmES zbt8^TVRkjxo9P$MO;#671O{bABmD<*KkHeQdXMvL-#Tg7U_^J&nN0+D+?iA~u0h)Q zD3fp##Jz$Etupk^a{MV?j|lC{&1n=;#?z-5LN=;meT@`R(Xhj-jwq>mFz zCuiLzry~ixP{KkUxo_%5n+V)= z8JeI{8viIaxAN){pc%Z-fY0M#d4*P|t%6;J(pjc^v_^T;cEVz@Q5ZSM0M=F|dDEJ_ z#IX`lP0{_l9>DVwsWZlR&Q%9nRx%1qhFI-uhkuVc@Am$T};5G57~mbCK8;@jIB)n#(*L z%p9}f0z7?_U=Ad+IKUvVAo+IA9YFi`vx79*$@P8tLq*OoK`;ny7}O7`LVKj2Qn7gp zrb;ve7sD@(s4TsgBzoR+?UxRG=2#}yS;^uwqLlSdR8Q` z6gq?lTlyDd(Y-dhP{b8ct^rF*K50Pn&S zjiZPD%*#h(AuJqSMcOikh@0KOfPk1S$34ScB$XPekWH3zIu>{~D@e&^y@)&=E4Re! zfu;k9ywt1tX38!k%n8xNvd>R@7oaT~Nuh`^_?_o_k(^_};MOXdswFP^O=abP*X3?S z7wB%%pdRNG!0L`;k|M2{G2XL*1R!O`qX(_SHnu^@!DiJj|E43MeFpPJz9O>z@CPS) z75x)mqK?XCH@f};%$}Sum_>4!F2m%|VcT3XoeX=O#Weq%D=eoyWErTNd@yEMA=3S} zXZR^6r{4s<7NB@cb&J?p3y=Jv$9HiSaUYM1P1fvGXawLP^cer4)$Uorot^!Nk_e@J z;Nn94<*ZVa5KPQ?zd=l#1ro-VC9^)pe}{h34XwP3!U`HhZ?c8p5%z=s-of!%oLz^o zf@u|^SCf2SsJ^K3ME_T|2>DS?y(GND$5j^}Q73mBd9z~cS!rvN&Pw@!N9yR~EPUlI zKPb8E2XnIRq?$p1XUku&KZoU`eGSg;RsUS2D4J$&ZPX8Yu9pO~a<(JbfYCfzuVyssn=L}0Q znEHJBFETU~Yu#qWPRZlk60lkWvyW(hygs|BXaN18QsWHUHR}&)9wV{S1+m-&fZdu4 z;1oaQq5?FfKm#Sf1oohF2n!C<5!$~ncqGpOLnnm(BkMe{ehLQvsC4buQkDs(j zuk#|*=KylOYx-(J%Lsti=WvqT`87RObcI#`>}STnNi#i%%Gi-0MD zxe5}wF$Bk5U2eD<;p+gSH<~9yQ*1ij(T5$70AMV8$`mUNOqepZ`j?s=rfB6%RLR@b zfRKX@C{oB=d@{vk_t z&?x>@>Go%Y*4XRRiRn|@zfWCb^OcAkOvOmAnkZc6t1*c5;vB&_vUy*TlZbN#|gmIfR{$68Khn;0W}Kg|Pmw(DyiRE^*zn^XLD6{^e51k}ln`Nv81kc*?@y0ecmBg7sa zs)e}m*oy<$|$Wc`Z=OK7aI+|F{fw{r;dHdD z6v}>kAQ&TCSs~DS9Uu|iIKrQgJEftYiE_q0Z~pHDa+mhMdtg>KmwnXdMUX8y9!-Co z%%dJg(a$J3CjuG1hU=2i(Nc~_(Kh1IFUErFi>qT1|8jg#YM*^Xg)5G~OeCexX!xm1 za^xakr*Q2Eh_CM?adnu4g$U2Vgf=A&f{2`QXbvk8t&^=<+KSC&flP6V8Qh- z=|>{iQie~}_Q8F$fX#rK%pTQ^$VDLjS-OO)`Y_Y5M;RD95iWu*+p zG<@c~?3Y}b@6;R9MC5o^Ndcvs5*Plrcd9QI;EOK4n2mK4>bY~DwIznG_rZby8kAEm z!J4-RW?~MEo6!yDFWGC0)aaaq8>80l2>?)(Uu;0iCDbs63_2(ad5?3m(K~mMFS4bO z0*|=ZEVyXIlXafPngA@^gY^@`ulvu3Vxv!Q_}Sx9Q4`&l0>!>F3AJ&vWhSvUSUi3$ zpRHawXgiLGZ_K*vlHcL@6D3SD4*I#?Dksb^z{`miq`yRuj;_XE|E*)1%s+Uqo``J6 z=b$HqHF^Bli|ciA~a%e~X!FHwueCm4UT4qbzP{G2C|U3znkp92KWbW#G8Pe(n9 zaA3;q7O>-_JO<2j8y2&%nxno?%6FL@E6n5WmfNruP-)9IYD)S=C3PYrk$wXu7SJ>K zgYyfVenZ}2o9Wd9I@B)X59JM)2DozLI6W%((rll!5arEYOd)pB)AbVsCyi`4t6P zyPX`3&*~XFsel4Zt3*6mkjOG_g0fWTS|}>i#i1B}=N^Xq@8;@di#(kX&#ZdrInEaQ zaIH&QYY>omiFXHKltZ4|+?DVN4f#`QOy|sUlc}9H6jsh)%AjqngF|ped{Nilqyg>9cTb~)frm5s>VkxoSZatQEI9F+A!@N0M8}kXORYmR`JbE`AMad z!p4OMxUv$_ZvWJFA-9UU1pROMMc4Qd(UL8wR$r+mNO(HM*CI9BQ|FU>M62A||^2Bxk`#m%06IA^^rEjnT ze*Ok)w&u-kTNk6l$YB%FtwthNb9uvnYIb5)DGd`c--$ZyfE35x4~-@M02L|yeFjc2 zr-T2q@cclgkIj!0VYti7jQSjmr$(g6@#ecybsHms`&7enoS`1Y_v%Pm*dH@N5m5&p zj_3>;^t?MGWZB81zZ=LV(a|@n7GmOUB~xfwRW|uWoa*^r z(3Hb+eBZ=pEf6Dhc0u7OBYby3Mk`sXC?}V0Ht{Y9x8e4eBnHZrr(r_gh!k zU9>e5&3s)nM{V)_hv_SI9af^%Bby>x=D*FLQFaAc*tH5uL^E#_5} ze0~|e)4J>TXO=)eQaa{IW;|j&&B%j8WyJX_1zzv_pH>PlVokv;)^?>v&y&6G-F>AU zQ|FUDP(ZK02N#ultY1iv6^%w%j;@11Nl03c<;H1>3uP7)7!%hgTx?)e!~g1;oi}p zAo1vW)R&i~uyjdXNaU3l0^D#XO%RM&xCla0q|Wo^Wx}q7=nN`$T70j^MloN0`;6-d zvm`kGhzg#~3{ef(I!ne+7PqTc)MneWMA>P(YJwbN*+ z+)n&6Tei#3JoU!-A61b$Df%X#vY+#O1D&oeRx6PO8xYldf*<&gi-v-BpUGOuLE*`Rd4%F^NS60dilfGc_*6UZV2O(YfM#|R_Up5hl1kCOu z?+$oCf>V3(<)b@`y~+dk^iGo5KFHEP$>}Ex0DPO1gCyka+@ONfw_42MO^rm9DaA#x z867=XG3e*`5r&fCKW#jEO4;qI;;%HgVgOD;6RE~0kBDQAhpq(#4*O0N^9SyTPNMIY52B17I_|UQeBYVO)@5zB7^JbY5u(`) zhnF!l&gMjkXf*u1`U76P54*|})i?&ZTA_At)xP?~?v$GIXrcH4Hou;R*x1V-=1Q_} zfVKQPj5(cTarnFKot=Rila^6&IQzUFPt!oO^0#CmHg(kntvV;}=39+I%V04KhVr_w zsa49)R%sb2{rn&tiS&tK6DK_;`!=d_;+g0Szcc1Tl-ef8D;%t69<-|8UU!XPcRVJQ&y&90cQ?`Db3jzN>FXWy!?%Kp3#ezfm5q> zPl#=YD9pmc8Vy}bZ&SH#`q01As73S`2Ov@PjH%HlkA^C6gpJ{I5nJsb?SN(2zz|-& zC~_&^u5$lDIZUBkfDFOlXLh_U1YnQK?q%|5HSeEp7XWoL_^-Z(E0MgPwLli{_sj16 zll$L=qoPGamFoKiv>m#< zTgENc$3+ic)xD+(-a}B|9Vq)OYS#|OeegnXpH2Ed-zrqUQC4QBezRGZgmB~EP1Eyi zXS4z#@(nGJm|^M&ja3PO@z@YKtzCbjjA{qGtLhm)!_sz<(54l-H;yi>N#n{$@V=u!TM`AwQUEu7T*s$)2Q}-qU%<`FjMbEABvU1h zF%H&OC)*C)f62k>zyY_8Uys0tO8YBTM-Wg_OF!Rcha+au5oR15@QF+Gtc0}7)pTfpWFSaI7gfNF}7B&Z^mdWjq-}Z zkvT0BewbO`>o*b5IECBI>Anq?lcOiX|MOE?z!tyyG%qc|o?&Qb@RY;?VjwQe4{(G< zKI@Hqb37H6+Yo)#Xg+eehi|-}qX)uK-s5*#Si&3K-kR8}#dgybg${-!_lmKtA$)YP z$lcUGD2co`uvC?6O?uVrwuQe6Ou@8t?#|y(&l9-pvKWg4mB5MnK19$R?(e6z3nfyV zm^zBtkDlY6`YIMQ+DV`<3>L}>g`86*HZDJIElwk42v83RPJDiRiy+_?nY z9w8#0j$;2%W($*duh4T^nnU1uUY}oB`qWei9Ed%F?sfxM5;g!4(2NJh4@pwA0HIb; z+yJ1#^8s7!uD#5Ixwr8Qplf9+VF!!XA60EihoQ%-XG@PMs0Pmc4WL1DJ)w z7(bd7nonYrO`Xf$p7%3mDRe8(LJZsM;FJZ;(8OO&juu70f?%bb#<8<87TK2}vYLaD zsg5H!=b*#z+cS|k&5Pvh$htPbRW;c>Xd3}rRJn(NEz^IDp5sCrt7*~F19-mRI0r_= z3rC|;l<9iUP_|Qy*SJHj6mbg)27D+q3Qjc9HX){f&o@qSg$s4G;WY!=G3}!piHXGk z^V~CGBJxXIN?{80Vu{O_BCx(#XDf-1d^2rpQIGoWbq%Tdz60WBCty9Y#C|;UPNO@_ zae$-O-I;+M{As25ZNFK*>xW_plv4SKzR4Q`p)0gMAT2L;##3(VI?`Soak`{tS3!n6 z@mQA5o1_pipW9{df|6{N!DTs?90{8qvBb0}_!!SlCj&CP^VgC_a=R7(7T}L8vHwp^ za^&Y}gt0rE3B_}L=D=V#T$IT5n&C*^5X(QM8bj}Xv`Bb)>Mu7z*z6o`%#gD!0*9gC zJ0v=B5(_HC=388d6Wj%Sheo-}Z=CKMYME*UfbtxRCR?>>x4f5nbYWJ+>|h`PRP7f- zfyj4Iu*T8ka9a5ON}V)z4G217kgCC8BfWo$VyenKQ-+3lTgSOSBc-dBIS{V28o>0W z)sGh-Sx&`6u<()I7HMsACk|Dqr~QARb1DU(41Bm%r}uyW00RI30|2|EMj7H9fS4Xw zVhJAG-fu9mIGoy@tJH-CIxqOpWbrf$lzJy3W0_WXl6gTEpZNNh%kjSsD6WnK*NpEE zS*+Uw<5EX?QFND(v}Qp>(mt(fdzVit3g#9CEq2ws$d7BteNJ)YcGmfU2giWJn9|7* zn8yx&bCD8EX}On^6~NyN>rJ9s-vz;EPt-)4$#$as6BAvTBzIN*5UyX+Cpfo60U%tx z4|~n~P;^daGq6Y|MGDM|Zv&^lef41&I-`6i30e67^;|t$kr|83wFB;nm3(Kxp2%^M zk~gEJkWTy8gq~S=3rYS~Zf%l0iQR!sfrpA=cPs_!v$u&ky9iMP8*Lrzh`# zl7P#=f}&*dW;RRLpXNnlL?cfj^LZ|?;W-HxY}7r*fe7jTL1nHPD5w#WXZp1Q{cBpp zw(pq_Kc~*uQ%gT6J)OBth5v2Emmha3h;e}WioS83k!OaNA~E@>=L8*I&BwsK1NqE4 zK=;u));}u1XRvb2L6m+e{KiOdVomG#0}phu10#L_O|Rg@lBfcj86HeMc+6Fq4HD(= zOWXn`up0$wrhz5LKc^>^-LsI*T@k`ZBcQgt+lUbHl$;pbV5fQ=V+J=I%neE+ z{pDZtcB07g2X^dnA%mlTS6$UG0H|@s9ziUHrsJ8T*YhqvJTA-(Ps{TrLO}v(rQhz# zE_6w^#izy@!{>!{>@taRS#Th2m^Tm(nxHLq^*`TTyNYa#Fg9fti-kaOI?=~Lv%W$D z_0uv2FO*AJ)<)u)bQT4cYcZb<(VDHl(Pa1Z&1bu z8&XNQFGk>!#l2@nx&=|VsYJUnah%LkHggX@zfnNUog{YcH{)qgjgw#SF1hZ*E=PtM z|Gr>scpwCh9{(I}_4KRIdBe1)U-fIdiPRyjBagbz-Mkb-n=nl0^x(s1#lgFo^rt`W z`vsxt0dCmSM;TXPXecBiHF}y@wYed+twVi-$+-V`n&~DD=qZ}#)G@GEIQN#8m|spE ze{B(Gx^4KnxXk9!w(70{D}q9(9XCSa^D1hHK)l-r>IZp1QEW?NIHML}sSLs8{^^^= zl{gW`B0*1h>)Jc#X@N{~1X+0d?q?D%$>|$sAHIGES}k{bwiaKAcgfZI>Gz}lrtd+7 zmM44U09|FUjzN9guEncj+K_y9(c8Gin3+efQLlm6_~vc0*cO&-H`;_KTVcyM2!6-9M+gNoB5S zWrHV(>7hfZx{9dE=N0K2)4k#=(DV7wZKpr?Z5eC~*FYJ88k1XIowv7xA5*K7;aJ&5 zCw)S(SUF5r5JLBn6{YU;aJSrG!;p*-PpuYF=w>J;_7idQZDToHb6(>YJ?=GOW>gX( zKKXij8j!N-7FV${ZZj_79Zj+J)T@O3Qos7@V6@Z5@{D4<>VVENB_pH`HHD5_i81Ap zI(7ozCwlxr)HVPcy0wi|LRf==kaMbzmEh3$7@i^VmRqFB;%D_8U#;+jQ_m&xRvkzt^xl+>W5yi z?o$pxfxL14YM);hc=7xz^MXN}!uk;)N)~P*uj*QA>=5-ce>@?*5MSEGBC>cF5gtbi zsYRdV-6)CTyBG_QS#ZhplN?Y!KleoIS1GSu#rG%yOM+CkzL((B^&JdB)K|&U^K@Eh zOvKFx%l?_Z>+eW=M3l2$j0!9;UZhE5F~fvRWNLX$)E5)j=hS3*Pxofy!)~6y2n`Mn zmLj=HCtv-aHec0mY{yFU$vXkK?P|^^A=^QN;W2VJt8?%B(Lg)t{lj3`{>-ouNYl5- zK#1s@2FWJxk?E<9^7k5Bc-3dA0$D>&e`oN3Dgl&4oI>X*-fxdKr$(hN{jK@3rEv6T zVg3F%F@YqiN=A`bc5sZtEZM4}Hk%K0X5kJhf`Edu;Mmu~s-?I_RLKP%A~lS(bvO$TH3uXo|IaD@_4Daf8UZFM-)%}@srNos(0HM;=_rN zg9^H`nm<#y17}|U9~33^8>C+$C?>ygGThk&39f-`L2F*WGOs>fH&Nt?WJtgf(^pa! z8!1t*`6nkjpCLw;{n|@RFWAHXlFl$~O6r0vU)@>Y21B48^(K)L4O9eYFbeuW4vRoT z(l`qA<7TFsGR`{*b~6>u)5uy1;)Vd;kDcS*Ex-H_d+}$MY)E7+KY|9p8wB1uAXR5? z%3%^fw<+u%v)HH1&-5xq+Vev2B@LCqc5yur$clUEw4Z}~dz^1No|HX~-Fd@1 zaehvdU`fdAs0yC#sEUP?Og%rDrdL&A%E_6iSb8W9`-q2Bx~`V5BAP|yST6sGd#@50 zppG!sI7k;@^8#;v2iSsDDvlRh7QO~tpcA9&>9wSk(5d-!8dqk?#?)8&j)xhxL6{h@ z1U-|C5T3M)ru(4W4Uwq}QDkj%`!F&tcJNH^*E{jhbV%Q6|pT<_ZgF+nhob{*4PRU?c6^ai4} zGCA4$cCH$pb4mIWr2x1WuMLRlm0eA+5&T;;?_rbo6Fx%hhaNyy3_u!@3$hlA@(~}7 zF)fT(uO`g{m3B?>DQFrj15+=n4!^@RaMlll_GqzKAB_t)C4<9dmZ&!Iuj%f3JPmhF zg!D0hcj`5NkMSbq&W+S2VU>f>dUgVvZA4aYQ)1joMx(lx(6aT(U zwnV!N6W-%~)9J5czl8#S-fGGIw`ALk-I!EbQ;|h%xjArrEwR6v*`Z|RoIt`@fKqkE z8h7u^@u=8LlGPB+mmdbmdUpE~c68M0&KW@OW$mk}nF;sFwrf)352}FF(TM%c&S$W9 z@p4m~Y*>aOrI`Be(l1XV4el?!3ESo-`+$$Gh?bP?MaTNl8jnL&GVGstmJeZ%-54lv z{Cu(1U|5&@4FnxQ%k$ZBa-885r&fQ*&4)ON3r*cLc_A#3am;^d%AnEbGE2tO?Zb!_ zTwyD*g~2dUo%{3-sID%BB|bkUs()^HjwNEsK=LGr?-c?yAa<)fdK%uL*|iQ`rKFhs_(MO z$0kn4eda;J#OYE4aB3Ku=3qF%L6e$(UdJZOSRXX9HFlN(pQ8SzP^m0tS!3kKHyjsr zw!hRo3mej({ zMT{gu;L|aup=()MP^Um*Y#%+K3ZIjvfcise$JEEeoweTkyBLII(HrTmCI#w?#v=Zz zxQx{iR+*KhG7jB-9w-l)g3y<_HTlrwiG&q{+pjh zGaD2o{;!a$t8}}YV$RTZ3=wboBWYR=jyR2jI~Fe>Zr%;SbEZ$U^Ko zTtF0qGYuOnuzZQ}F!xX`oHAr#+Pn{ArCL&*^_7w)YD(h7SKJ(LcA+yY&kjc}w9LT? zNhUFAXv9%Et^;+b2{dPxxlN=Bemqe9k&SXJk#PXo=9{2Ou=KSZ;^lT`tl#(R`uGW0 zJC{*9^1;#kfO7kD+>_}xVRL>?9YJy5x?B(g!xB>GS6svP8kI=U$*Kx?7Hm5Fj%ml9r<>XQA|sfZw*NiN z+J^(W!KqZWHZeFrt`h>g6g} z^~NbhJXKh;$$&r~ufAmjq26~itn`?lxTqdjkSvgvDwRa1oTFVHn(x&$NeZqFjWGtAm^TK?FoiW@Ulz`4R3`6q44sm} zCfvXIzjaQsL@d1)cmyEL9MbHbjC_SE<8Hqnrhb88Q)p&nRIxW0FiE_7hxy zK^LRJFIW%+u1zoW>^&R_#4da_6@y2aL$BEu zn!GfE9a={u2ac@6>Z~*2wZ52CGaZ9hk%5YO=IO&nVb)JnQfFj?1-g^bh;W*Fun7MhjWPqtR9B zymVUb-IL80WzbVK&JP=Z`-k8sQ4}qPo+2@ub_eU|O?3VWGi5>kGTk-%@to3)m0vI% z01VC|X1exOE+4mtI-09ft!MAiVjcT*(f5lKyeKxNO(gRKS6=dzuI}rqz}J8p)Dc#7 ze4?G(7CU%En*P_8=)Xp!p8_6`;?PP}Y(2mSA# zSESk1Nt=|HIbs&)u~Vj;8htc)R8R|_g)>e&^Ken{9!%fmfD+V+A0mxYgH8nd4TK|4 ztKjc;wg)zJ>jR~SNI3haC{jZA{^&^t|8>66EQhsd;+RMV&MmG000RI33Gt)8=Xy5^ElX>|SJ?>o-nSA$3X*{4#-~QOJ8y;!guKUh9@jLf+B~_wu6%6SPx1XteXY z`uBz}HG}f6v2qHU7NGQUB;}oUdOP5XOi#75W~|lp+8O#bRm`n}W65?&sHrfj-EhoD z-^E`E8sK)WRW!JAQ!911nQ4uw*g77N;1sdlad~AaU)@nIT)T7gXuy(gX~w++2K<>5^Cp#L~tJtjUrI z!eXFHH52$o3;+VH_l@T&gh;R|xKXG612GJRZWAecu(~8>-Ccbrft8`&Qrrqt#>ypv z|J(FA#em#N)E7Q5mkUNX>NAwfaI;y4DI7*CiiN1HHc&L-_nJi8IsnxZ<{GVW#l!B} zegWw=DF*`rWoy0g5Ii_bU?Yv|NV&!Vc!pKvE)?Fyn&anhgSrY0BuBa1GNBF38%n3q zz6MiKsWknMca>ky~Nkpi*y zKD@}ADKVylZ3sDZ_FID1rh0yHJKd+-{`Fo%*T3~ z6P^T%MVRtN`Qn^~J&eJ8$qp55Lo)OuJy)N>Mdx1x%(W@|DC6)sqj{qkd(HoFw$<8a>{TA z`~6$)*ygqldD5r9mm8Szx+u_k`N@fBfT-zs5xxC1o>}^Bw9?>>8%LMV3z9Fgam9Fa zuj;t#c)EI3?^3M%tloPSGnpX^c~Pda`co?XxWdC(p;p(oyqp3ti?YvlegH?I$H@BP zcTS-q%OWP}uLrGTbZq2Kp2XPe#r`2H_|;+zDfr&=_-xT*4(U#4B~lSavc6P;a98@o zuk!~dVYyrf&Cx%rw3PeOBXLbkqlkZy5WIL%C?Bl$B){8H+pH26ZslEkc_{HxK|0=b zzl*ILw$PXHAR1TY2KF7Q?&@@s)X7q1EI~?Ws6i>6;ft=pp3Ga6hWOz_G>r|%Z1-$l z^$JZt8o8(B4*0DaqwefFSR!8d?<@MdfTkqZZqO4%6XJo&dBx9gg2W8eV7F+w@`I~l?i-m86LX<|t_F^@K`FO`;whw%ZTHYrW>pya~E*XeI z6jj(<9lv62^{~pCkQ$i@#=`qZ!ssmQ%oO`>xZ`a|X;zK$9z{DJh15a$*Dqcv8QK_n zDv2cy9wBI~;>kFJrug6>x$)b;9kDHY4`OppXeOq^j0E_;-d?FGnXT;|M)Z#3L?1;) z+5~6u77)!m-er-;R{~qWfer;9U+!h>O}mZJyGvA4PbgU?t5Bv<2R6RcyBuX-bnF~v zj5I6OF(WtXsgAZ%3BF>KYdguj*q+PDOlB1Ro6Rg5ldNgT51+#jwqQiDzcepiK4eX- zDCFe}`JZ%h$hU8#vW^L+?Tb(%P%M}{o)btd>IAD)bRN~(QT!N9<1FJoZe>fQL@4nA zao>iRhLaahRZwN3!t!ggK=*MaFb-3B+AgBxr(E<)OEdT9WXop|1J-xlVZYXi%)rz$ z&qtOaXp0ipCe)gPvB4=`cmSo9qsa*hmHx-Zcx?zI{a2%Yfw^8(p(pLHfjTx&|6TS2 zSLs#P@N%jwH2S1Y7wD9)0*Zn^^qZ3K(~izX$`Ek=tP8p#^(Lv_kaHI?Hf! z8;$y)sL%L{&=!rCSpsL3V*Z~XUL5Ca1m%9q?}GlZH7`~r$k5i`^z11R8xlt4vGk?w zkDR$uBIdsq@V!Le)cND+@Z0oS$X;DlAHaLoljT3$x`kF_yd9u|2qBJ8UH^ zG8~xf(}g=1i-C9GrsY^#hjIaqc*jJJV8^@AK*?XJt`p=~#ftE!lO)>XhM4LmMn&zx z=5@! zS3SCz_Pd$GF~_j)%wi-z1nysN1nQu~A-xwv>1ZCtQ$wQ?{oog=GnBK(Odwg`!ueR8 zXCj~~2mZS_Ur^u`b);BAKVab2n>m@+zczyQJ}l-xoXmjdp3gG*mgR4pV2PIr4|7AA z3~}^p2ax~WNG?9Dt6K+Fuwu#}OIdlV6gA&h5mUuS5GnQB4r>nep}jK90}N3@un5|K z-V1_dt8q(TD5P12X7lD&l>^Qe{q0ey?5vyKkO7!h-MMg(%ZhT&=z#W|6tz7lr~^Qp zE;ai9jy~^*U%>7sEMN!?<2zQM|2b7onu=Ps^`9_J2`;P5J6}=5 z%e$CIwo&aiRvsjZ?R`GeWBokli+verV}T3U-KYwjhc;gz@AFOOXYIbcG$TQjHp=t> z5<%}Ml!(=TU)_I7!}8d!)k^@JIpOhDzEb`ovNigwt946NH`VYLJZfd) z*{6yKixEQmO3N9(>ja!=VH+)9PDQ^2@Yg^hF;!_7TbNc6=DKD#xUU-Sh73J{W6U$F zkh0#+Wu1uvAbUIKxm(oq=?bV1pB+@6Z9t^pz-RZi8o&y{K+d`^Z!+N3AT!(M1r~nB z1v&f(Ej#YN+V?0vT#$>0-)chl=tBHgP~;7G-gNJ*U)}3|BEY;kYCg@)J;vy-)MI&N zzNKZ~%4qf%XVNn=UUge-zs5hzX_&Nc)i+dN60AS|;MC|#fTz#aeJaT2TZA3{7S>{?S)3TJcN}}v zbkDKMp5icpS zFMgjEt_9|2>?6S2!y*c~w*t;wW+t`Ayku_91wX}*@18O%xs0kN!csR>Qk|I;lJilE zECg1cx}5GZ`;+Lr&@g!cwp_T_wkQXcNL)v4~P_S)2HPynGhV!X4?0`q2+Wt+eKI1{DzElOb3Y1Q z?XpH=4-j}WRi=G+#Rm$e!*@o)g~YMcAeVRn?PKOHFn{7*IQ)SOkWoEv8CwIzE}1CJ}a|8P1zLZ zj^%?(6e~ax4JyyOOnYLU9Zx3j#o8VG@~#L398|)iWBz$y3O70>%&$dp#UOx$|^*b;3P+6+3&#HukKEP1f#&;Ei1 zL?Uk9x3ws&=hyBGAj-4re4%eGPrHF?<`x3h|C zq{c2A3&_tL$an2MR7_aIDsHSQDlS!Bd`!Lr^_cn6BxM2Wi!T^cA!OWoYEag8BgjF; zzVlSUZ^*4%;xlPip$UkPH;|>uSGuc#E8*ujs*+Z{-{}3eHliyG#+CGoI4rZ51tN?t zjcyd#@|Au?(aW4{#(~TV=?d_egWI77rQOioJQpGLS2Jjk--v~-^1U`#+J|V4K1`>{ z*Lb8F;Z%-a@a$9cL*X_~*Z?j6e*eI|kG*-O|{17Q4V)}6C9VHrBx6|$H zz(BrP;HAGMZ7+;zhj)FK6<0EebzVXIR*D~#5^VzRw$ey3rL+c!Tk)YAGrHOAj>E+itwfC7oG`{@actuv9M#IbgRao3;*Rb>67CTjGNOl^f20kX*Zi7HXm98`|fgw zr&P43bGS%N1Kl65r_P9`?&1%_VVfT9tmlnRH$|u9$!bK*OYnZe|7n5E$-I`PDiM75 zpIY4LuzZYmhYd)>vA=WIh_|)_D`*P>&jRcE-Ss*7F*YG&Eaf)o%Yo^4##_Ucn9k#kfAg4_VCBSe- zN5p71eQ+w;FnH;$`P{bKr(OJ6VSdYq02(nLY|&$e?o{V?ef8cRcDDt&De>>vu}1PR zx-w@mr!X9Wsm~uKlp6pZ8|ResSCm~T!aYWSqyJqB52;Gk5h3`pv_vtTEI4*1%r-J? zD+VIcNx%)axyByY9e7i@TVZQSH)XiMIw@29B`M~Qr|DSQGAD+0;1GxX^t1mY@>!tC z=wVr&x`!O!E@YI9&8CS`t;nA#{tnwHf8Srd{8`O(kXii-&xy}-6gbD+k!1n2k}sCf zn;@kJ9eI>eC2QJzy5m&y4fdwACI1ONExhqCAyhf+C)TE@>#GgPzh8RpML;3KgeC44 z9Q9P2z(wS+ttb2vy&Rb|9z+xh-!mkh2o(g68wVa4?&B_nF(*GPvv zaXnut18U-Tj7>Xg3~;EFmkZvEJ&Otk;q8w0lz!mXP53GI)mwSu_h=M+;&sl?=q*xS zNwlrf%*n~jdIQ<(46|w_VYhF=T;b2=1_oOLBehp5!`P+NYZ5lJ5}hewQ@o)sEo5xx zu*c|AE(uFLLx}TTA{TsSrXP9LZG!Syzg+x*(Op9AAmHND2zf2(9kC95fGx9SSA(M?RsKaxs_|Ix?#f{#VIZAy1s zogeM9pvTYNEAE05&&;YxZ+TkP4@5VKORXc0jM{1;Jf2Zk!RilZFW=f#^nI2SJv%N= z&S!s;`y#R#Fc12%D8ns~si8u7!_XGss*e-C6ks5xKnL;O3t=7lMO^VEA(a>u7Nn^X z{QV$;hdD8NI_cPULjI%G$W|+5mJjqtihRuIaHA;p8GKHDM%7g*#ljT=LacSb>GGW+hna z8wdx5Nw==n@!V$@2wg3v8k{N!qJ*ddPra3fgt2R;DpQviKQ6ma|I!%Jhk*PC%o4p0 znB1t;(txLcVU^|}72ftVH+xI>>A~GKh=zyw@3%$?w;Px+Xya{Q4Cek%h_7^+( zyUYB?F!YY>zbxU?k;n78vkN=Q(fCoe0T;`x<6IET(gQf-L*?k*x%@|=4_QuhyRG^| zyJh7nA%6EK{_v!6C>elodaN(m0po7^FTvAg?601;#9D|Zmoc8 z=OzUM^*su6N2S_NhZold8mZnH{RXvp>+11CoV2|aVh_64IH_FaKu~F|H#GizXDJVDD54>SoYqN?XUDGXoD&!6DjK?uS;G@|{Hx+amNCS&}tIAoU zg93n@-&C0W+;Qnisow5lK?rXD++5b<&+*4+bwb;{8NSU^Mn5?`W-sr%cEdSrMwVa| z!BcWoaB1nvpE#@H=)WbTt@MnPU$t94JV&fCB=e8Lmh0mb!sZ<&^vBx&uWLgY%M=E< zsEsW*0cwSVMU=?(`jW~vZu@7>LxP~DLlJF6Y-__6pA}FT?-2atm+N1gWAc;a<01G_ z$7r&Q&Z`j1;!~=Gv5FAflMHljqq)I=iu7px}@$(0{g%I)xfqQOt*r^Dl3Ba?bD) ziHs3_;weJ5_&cUzDpTO+1>2SO&Bp8A=m4{3{p}$IK9n#cW5YG0?1ta&AmEiL8g#=f zfz4~6H__a3dPEDEl!>il2&mZBg-05b0S7VF0$dOA1me!E83MpX`qv;=;=C?xtOhRB zQx^Un?!*Al%^C9}xdD0;15Z!>Dnsw7+I^_`Loa28l*m@Dw$r|AQf}`7#>vDM;NMWe z)UDE)$Kr>qrS9vP1y$k>1&kC0LMiTI1KY`a|>GiDQNh1E{?1J&}M{y~Gh zWfac80C}Ii!=i(UX%7!}6c-+8uC4r77-y=8bAX0m4Bq4Qf+k9xj0JUuE}@(za^vpE zlk`(b+9hG>7f{SC1itP4w^X514jx%96zuGr{Z#}7uD?4I#A;+9Rf?dUq1dVZ9DOpX zBK4VHQ?{m*<+f=HCVe){jLgAoT>>+IAKImUUum6Q+$-xy;_bDzyBlT`ewMrqYZ=LU z*-xK~CerviXnwwbl_Bc2lLF@icg7e67mAz$yq=sU9F?qXefGIG+S2QP`l4GKSMhRi zyqbU$*nVXwUK3mo_7lTh3(SGaIGpUXjfrT*ykF!rMIf+`HFXcq+%d-{_J`0@Q7jxg zA~8|YxutIl?UjrW?QBzp+t}lQ-y5bmBHkiVf*Vw6+`m3e>SlaLVNme?$ax>3wxduQ zSDdl+x}o79mYdf3FTwjbRqroK#LGKIj|^t>2&latu{S7EY@{IQnAngXZ%wx%p5;nD;_B)v#I0D;dh1mOoSmQ=NV zb1^Q$V4r&NMcY9rvor2+;b78W@MK37i_kmp0ZJ^xKJu7 z$w!jr4$;H&sg4}{*Fh-~6G=Tf6mX|OIkC` z1pNGBasH}~;;eb^beq}{w=;-0L4rU?GWo|dcf%W7AT9sjOBqF&a!0aELe@@*ojmcu zBBveZV%9}Cly+#=%(sDHK5dJW<@e%XXW~SNl^~6OE#G_gL5HtRS$?qc7|Nzab!;_T z8jaFMxTDi?H$qS30A_H4$H-5S5EJ?%lJ1LxXD$;{{qmWB&@rwY)k4}CZTvPM<*(qn z555f?(ZRCmIS^vbX4;VMXCjEHa#*&W{}m$9Z`*Jan;flKr#0(^WB)#qg9z&~&udxF zs#t^@HV`X|^511~zS2b?z$=RWQzdK%x`n~y;UCWeACd@p7-=|j4p;O2_t)mbmQ<9- zWeQ|%wv^ztU*D4GC(ry(*S2q0d92Kja3_#hb_W#bKa zX%f0$U~VA1O!5i06x&9O+;+WFb0zwl&n(#sDYj|DADZF8|Ar{EM9A}}NDFDOxac}_ z9 z8TL;WpWhfDKo$9JYePGSYqt)KJ0;IC>e4zSaFDPY=UW6h3;cJ)K-~8NUN(9B2oW?4 zigR`sS>;hFCZnCVLk((zRg9w zycx0h5&kg!TI9gUA)(ddK&pbqMnkf|5yJWK1}ue-Nn|QBp>8LYr_nTx8mat2jg23S zNw*CU@Wp3ldWMba??AQ*$IlK7PjV~KlC<>hbW~6M7PsTu3i3F+-F=-{OWPcX4iGE2 zOARC)ozXkb>rH{|?kWhEgMf93Llg*rID&*tO;J{$(0=g^dgR7s5r!tdlu5lo)ZjU}1>A1aesS zU5#fkXj77I#Qr-lr{WZgT|;&uZnKeTuHMHtgdeaSr0uH$e}%u_tLN?qf|+SiTZ(Hb z(7X|Q&^ykMe<@-r!-9ey6h=F=`2oi-JcGOb;Cl@W2d*&>o-RoNw3*>W*pB~rNP1+3En@V3P~=a+ z_IPd3AiM$ZMS_zQw(%dulIgUYea;)h_ubN_N*pH1XUqGTaR(X#&@Sepa=*AE)Jv98 zR}wHo#1!H#o$?WpjjVAy+o*;%nyNrEIs(2GBL(jnxKU*NyZ}Lxy4r$J9+7XE>&RAc z0TwwhL&CI9#IO7@*#F^5MLtUWp_2usm#_(v7z@6BcDvyvA`K z$L;4-V=s z=>jnBwkZ~pn3)BRJN3+;WT#Y#xqYMEy9M!%)uMXX zoiIxT-{(@(G0Ri?qEPq?+N_svjY5>_a@);uNjZTXD5m58a^7N{Eu%J<(w=Atn^&ajyAV4lPF&1N#VJ0?TuHrj?b)NghrP*B z`Ce@2DAd?3XE28B+Jf<9&<{T{`#Y1dNUsl0+wfX!&-z`>_Ej2d|DJF^%*S4E^BDIp6k;>=l+blOZtu&c5XHuj7zT9ddUqMcnhEk}wKW|RU$p6u2 zwV`&kh1I!m-)0RnIW+N!XKpsbLFn_`nr&p|rA(mEgC? zG^PRt|4G?+`NGPn!+nQN736J`pKCl|qeX=i}E& zjDg=k7_&Fk2$o4gB)8XjiUj87t7g*3W#11(o_~7&__M+-8&az zqnqt2XS}}}|2ngk!DQIl-P40-dI@npJe+&3N!^57-Uz@Z^UFnO7?;d1xu6Ua`!Rz# zN-(L>5zMnKtKE1AXuKPxceac9MEP4fY>UZcoQ4&U&mC6u<*=4~3J{ zU1>|JzwtBDZ8V?&NcDha7f-XQ?f3*zZK>rO5fmcfV0Rz@R`y@qUL0r7(at*koCrVL zSi@tFXy5~yexz^uZM&b~s1%y2V^Lmv9QXBSE3y#C;j|me`=98RU}`YU%{nJ_$X#af z{pi&dpu`fv6R-w*|B<&ONh*UG=Fo;@Hi3s0@xc3qnYFoPnt>vffswn#afuj==yWUM zPCPs5rnXS~IM`Vrc_hTXe$NnKQT74pv80^t4~~`0Kk1^mo?fd;07gK$zp7a|fIO^< zxk;+a)N(z^bJ2y+KV+equUlPhwqnW(`+;f~H6T&|@#j=u=R6V#R-eE3OYTJ?2{16L zWX%pZ>6^tsk>A>Mc7fmN5 zu+_z*y#sNwoKvo-QrA!fA0Wj<^;e3qjLgz_qITt4sN6Qwxqhu=%7Vwcn=!EQg9Om) zu%ecF1*f*^l|%+#?+1ANuKz-3uc;CdEI7O{Pvdqm)>;=VDcuFjWHpSfXQNpG{p~U6b0>40 zcGY1-7p^A-t$EgS(N#Ab(vQv@^MLG62p?HpeX;I>4!KY;>OQjVHEclq<4g8EBWfu) z2)T3*b3chn@wnXg=upVynB)%RYF^yO`&uYyEX!pyOtR+KxyPo~QK+@KPgyAKCkY6@ zcO~k62g1mS>N&fcAGJ>SqpbHQP@Rp`5_q*cAbho24zz!ucYaWKJpAr?U^uk&kO z_6b2nbmO_^yh7&?T4KumDmF6&avb`&dVx5wqTzef&-H9;E{>VyY1{LW@jgNL5wo9G z2ijz`uiKft*^qdNEKAhaYoI{^GKwxV_$`R6&6)cFhsjr;Sq4>*flI7Mu9@o|muq2Q zo6JE53(l#qbIY-xMo`PZ8p@S@hYN!mg*=ZQXPO!V`dCln9-1>|c&J=`W$0Pfo#9Y_ zMJEP+=8b!)>Qkmbk5e75l0mg5i+VEBmI!DmnOh-LKo$oWdKcYrv`=(q8?T@1@Eelm|sGS;y^m(@oJ&gM+ z%W3VWp5Ss9Hkn{g7xCbzB?Zd-R&*Ae28P8Op=UbSywB#`{T)l8pkN!<)V0sxH=%t!sgJ^+nIXw4 zUdY`)sP&$0Ur#uh9$)3_ikJ+?+Dovi6lo=G5dIJY$~aIa3AN0xuCfzA^THAJ?roTX zvB#CMvv?ARGBx`rIUe>HXa< z{V2)g+^UpMO9S~%M;|aeKZo@IW5QHfAU&O0$Mf}^KBIToQ?8xZd$`kQj4>5=r&s!; zx2ul40yT)y+UY*UXm_2(xr*Z?DS({HJ`9V#2nHmHg-;`P88-5-fO_NH3ddH!$mqR^9LXgV^AoX#zaZRP41+wu)G4SK)&BkirS3mrfaa1 z&D?O!b&C7(J8%EvoHhSxTZ`)!%z<>C#Qp!dnVdDxUO&P>k~mO93IiqVEk+t@rea6G zyw|L)+aPnVP`YqgaxEX4lEBFTO{by$G#&^Df?0ITwnk>`yv$acF1)qG%JafR1HR;u z+8Re#8#%e4__{$=OMFlwgC3N1rmNCupUu-+e~m)18@5g$Wi>fE&0pJMWp8%&95XqZtB^X=3RF2LYf3QH92nWKzVrBWH0P(A4s%1RQ)G;3-5<`d zR83%Qo5^BwIyL}#XbXqNq2b+JN&R=EoZ%nTNu`RYB0p227fwwUF+)noduw`TOj7K$ z;8Zl!#e4+23ZN#vPGIwjhy$=l6CX{wz^RzVEts7yXsjJ>34=N!U%rjdIqcK?O|jK2 zY>Sm>iH;Ix36?E^i%R8JO3sq_GUSSm^bgL>C*<4Y08Rpp$w@6PujX4h%=SKwN#wfZ z=Pfc90%j3M^7$Z~1C@06q{vPLVE>fjsi4!)JtB-xVhp}v02~cQC>XW4_&+liPEvdN z>!GSBUHAtwm0(71r?{8#36Pv~p8nAa>+c;u=BTZ0NTXo@app1n zf74T8ZEv&!Ns&(|3jOr=C8mpsZ6hE*s{%VWFY*qNTUF8e2yeuhs@K97KorIgxKWN5 z$sH-*^#L&q<$O*vzFPJdT>c0dW6zFk7BFfaV=pYdC!cNUG24|xd!H`071_PQlO^|w zF;R_*0BriN%v0N(?_cnk2i^)%M1w;Fj7 zLE00=scMt4W9y4Pwu|%ExKCUR*4(zhuot(4lz=Z}o}EI5IuSF7pGriB*p`?W9ckO- z$&Wij9p&%##z;_L5X_H+HTzZP<6z?*>@7(|i91r6XMqaCkD@v>{gnBEe|Q4lSac&? zg3o|Ap?v=unvW_#TWoxZx9#V=3K8wDH=vMaefuMOD^6_0aZNVb+GV3~&C;j$8mnqf z_sEvme(R%1g=EcaG#5OWBO8~_2jB~@cO?+T$$omP2#3g#-f>sLiR$R*rz|cSsn`E~>YQvr>H$l~p4o1kxlLwZ33Yk%`BN^maP@Pd+Mb zcQhZ#(fsIK{)27;{1)KC!3YRsVJrvs8Gd3{*l_~qtnt$t!lwuSO#B5rCK(jDRd>)$ zP6^R{_Q`xqA3n?Q%op($FO7e4D~D_Oa2#&FnzfC>P)h^jAxpo)J& z(+xz#X7#ZXo^S>$SIhOcy<8ZZ7Z8TKyQo#|gh_@D*)x6*zsAK{ zDH(27b(XJAtI6Bda1;X^n1}ANJ17!|;@;x~KsPL>g^_k!W+97zDwH5pP%h7)n zUrN(uG%Z?ZWq+EHbp|^TO=|sI)2U^}3OI%ofBSWtq{INCD?1%n9|CSHNnB%s@mb`W zcrDnMxo1i@atwsKq3ayjbA3vaT!3bL_QEB5E7v)_snDoeW1pUlo>So`@-N z-Q!yYsHL-Yv@S^v46Au2{xx|FuO{UE?WSjzO>g+`JgxufN{&s|W#&||o&V|0b7}dM z$3CvYuo=R1-y?v3e$zn-A&lub!YY;A>id4gq~Ta8r`*|&P=5-iY0kL@aQznpv!S1E z)o?MJeZH4x7T}g~LW)v|q22dzLq^);Hs^pM_+}dTYWi~ca*Q6i_1wq{D4)yr7iF9h zFZ6kRE!zj4DDsc3D!fBdQdW+%cXV@ZN8Q(3QS)7AI#ya+=0L8;*^}ZRvqy6vaEq_m z$(|XRvp4NR|5Xz@zP;#l2Cc11kp9{#2SeAK^ILUbV$OTUFoLk`Fml}T?g}%k59`8Y zQ@m2xlyn)xGLpbamNf&jxW1n;P-S2MMtGMJ+tZ%I2m4~tfGpS4`}1--M|^#T(<1o+K>^PrGNlJJU|*) zfMt=cN~(@CGas4@1N&8bom>z1flSua)y<4rlvj6{yf2fYz^K2G0(<~59goNhtGFq* zLlQ8J#ChhT6uJBx0K1-h+_Ndr5f4%lGY|9BD2 ze=x}f4jNfx&maoc;PI^U65xZ*6Izi4A_cfxl+wOfrwbBNFT;W1NKbZtsw6R$UdhNoYIjE(@ zkoppic7(p-K)w0Xnn5e(1O8D{bx;U%&w_}rO_ z;+x?2zs0)$3lBH9PD5XaK&~AKM~zl@|Dqh|5fz`?R1ji zSgx`Kn>DJTsYqBF-xRL<$MtHMI)NGG$`p4wtk3ld`CZzMpJi z^|1d=On)5@UQ=&8x97)2ujPNH+Vo?f+9{;FzM}rmI|F&_5+v-p`vu7Qfev-+Kf2~{ zx<@o;;-tg=eV^0KyAZ?a5km$m=Z7x1K215j?Wq!FhL?B=Q#H*UA(S+s|=V(F#<+?A4b2boM+C-U%? z>Z_EwAlP)?^BYY{sKawO3d_MPryI=I*E4i5>)BKYD1On#y z%ZEP+=;jq`T65cxJwzTfI-Xgr0Vgu$_Q0pC{e`I4kUdEY3Z5I64UkRBw$83?vP6(- z2aOI!!t7Hysq&JUZ|y7(u%K=0LuQNsuk2(NY>QmAILB2f^40cRDPpZ!=OL%Mr4*Vqp>yF zo2OM6iC58BSmRd2?6F;4PHDgsa>u^(x&UWU6?{^6y8Tho{%kIzGK`b+eNk@Aw;fJo zbFA|*6;gCSCN?e@EIWZXo7mSXkGHAKvlUXjk~(HK7?_hlxJ2xL&U;jU{;-N@9;%~7 zVJrxfc~=~5ACMIZ5QMt<$3v7Kl}~i1-{k@aWX5NE)!EgKk&w2%F)E(CxB%ioDf;5973G4qaZ|MJS$HP3?Gx&SBy@HH*Idb^dwgLAR*h09mzH!aRE zqZV(%2=bGeu&-GuQC+9E%X!V8uk-nvZQE;jUEE72=uoCWFtx)~GS{J=&jr<6iuZN$ zXOFx4{J(E0@kynd57G3=gFUcV?-`q^BeQS3aCrm8C*w+U7ehaSDX%N=Rpq?UAI{}K761~i&Nv8sY-3Y z2O(+5lOl_;ZS88`PaV&>MtKPwPI5M3e0{YfsGXMurOI^QKHi;fL|L6#TBXTOv z$f3Q6fL@?!n)npL++-Ev1cRp)=rCi0r5M{Jom-RSFb}{jR|~#XwzFOl0HXUinerO4 z`&V%V&epREl8}$^U`7}$zpK;JB{=EwVtn5z**G~>{fPBI%R?waqSkoLD8J!9T;Ag! zu{Tq?>2Kp5e-kV0-s;*9t>Om7JpY>gmJeuLT|c$=Dw`GIuh;f*j2MFB3*-0kRGZjg|qsY^O{2pjiVsIM+=cRx*z_SS}ImJ{Slf_YLRom&k0 zivXd7nC5kay@NMi;LhQXa@(5Q>)DYGm8bmO1EnC9&p4KKjkQ@Yh!YViCA>2O`A#ek z)>8P8d5j5PqFE<5jrOJ$;VE?;2OFCa-1=0(4E6fs0b~C6b+IY9sA6T)r^%*|r6uC}CYZEY0fEiYbRU zs0vVL`EYN)c|CSPNT;2r+hdhq^%xixp1hAuk^K~uU^Iw0nSIWNV@+agrGK}O0h-|M zP&uwE_ag`JD}&pj0N|C^E$1(IiYXe0CQ%-ZXy^bcP8;nU>-VA=EtC+F(dnB;}Gg&ha)(cTJwGHg|)Y z@mNAuONArrbYE@vBf@bv>E+iH!v`E`C87TSz?frPWy}q9{#Yv&Bc{4cQ%)F8HJ2cA z!!~F+?muBA#iD%U#96hIw0yf*FVjc*vu3IPGd_RjSjGH1wxtC%FmBUR%TvZl(*VMP zImkW>qSIK|Y95gLwlM@*$%AO?A~MT%f=V0!6$&#!s~hF+2O!`|Ch0BL;7{=_Tj_SJ z33-8+@gvDkBxM1RHosS8f!<8 z>8&56ep*vdHisxQl%0FnQFhCHgEPFG)1r^>M?FgV6H~+c)1fKWJ%+dV2X~b<33h7L z!14)ghksr~>l5rNX;~4KQ92K#C`j^vYz_>MOh@*Gc7=ATPiqeI>cp21xMk4zawd7z z0ywaF{?z_}<_{%|mA_4>2KAkZw)gj0?ujVk5)(0B8Olce#{yrydxBv|H-RUWII_Y& z^E2AwvJ!;6lfi~xCKng*6?=$Nz$XffUQK&WLs*6$q4>3;ls}RpU+)pdFb|=)#ie>A zVGmYQ1&_|3^m=aMxHr)1;0N}be2fQfIg}aqlLPFz=!lYff|09^p=3k%Ol?|6aX!lE z*gK@4#18|$-gAWNe~p)*+Ii)|*wU;DC+pdcgFGJ9>loHQ!HgIo?SyoXMS-j9ro7;+ zfx|=*QqF+@E?^L}CQ({wHfV!d5Bt?_13p@SReysg5>^>D?ghA%gd>t{tiNeS^&O~Y z;;HN&W?*fasS_7+ryE&5cS6e@$Y}N{VC+J7$LE%m*-1+P&vLJ%U-)t}Rhg}Q^>%4q zIDHqWE9`LBMEv})_bv=>JjiNc8JnJ?UuHy@`Rv(Tgb1{AS5UJU=<X+Q{+CYxHoMD^O5&h*86V)+eOzMX&2>eK?b_ ztTnhuoc3o;>M~&{Ljt*?YAX{hPVXpvcrN#w#X8Af1I95pFyK?*nu7h16aRz^IPQMQL#7C*&qM`!qym8iK}NlR{ld%@P!3t9V8)9SBkHqcW}MG& z%TLl*k?g^u;)n9a&>Wm+6+eXT8L91FB1;_)l--A&yQGEIi&yM(tQh)qnlS-?nW-0# zWq;v8rs;>I5@IC~>ifcWemD#iOzPVtz?7oy!>o;u`ZCOPL6io;?$(6`734-W@Ime< zV>R8S$9hZD-k!F1I=?(UI-LNN^YoiC{fg#=XpH7ejjQtpi=RCeD5VI`SOkdvnvT*z z+dKp-UIKl!E?{zlxpuZ0N_%^%tuI-bFP-f29CJ!(-Z@H2U8OD`z#Xik!&M~dK+DR| zy1m<4jy`WnZz|B(>UYG~(zPLl33$|$6gr$w1YA2gS;QNoNe4doC>l_ICs$&M{)Cw0 z15lZdBVEAfdFZF)hb1a`vC@6?+U-TluLWS^KvrneN8`XrI0NbaLo22))t8++l~lR6 ze_n+fY#LJzvS8w8G{{ANbdfC!kp&MX_Rx_8*)eAzMI-HA^{ONXwc*_PkbrA5E}C5f0qo z^i&b@_%-9ED?-3Ch!lS%=vPE=y+(9o6O&DI$WZO0VGS*lloZzG1X&0#RX|Ia{@O2( z`nYe$(Y+qt(xs(r%21FHQ(ECbhlP(&96XP6I6ph(z>_ez!Gb7Xp2wGd_QSJa|Db__ z%X7tu>SWHmRT``bW(7KJrle!>4AswG+tUkVhaAe3B z0i*0^9hvQYf#v&6?ev{`xS--J6Ad4R8>MXbToD6jZd!im!@MZKwfZ;xya`UN7U4TX z6u+e?#Tjo2cZV5mtm`9w12LIUglA<=fBpY|n!b+wc{WB5lPbsT?Dp^F$lf)ERS|x7 z>$HMY=ucU5;-aYeZfE9Oe?s6y!NyX-nfLkx#Kqf8whz)Pv}RjuT80Az$3h_A5OZD< z%)D9h2IKI4FWwQm_|62Lbij1MWU*`DT;Wh&=?qf>Y;1F(0GuA%^~yKj#UWi$ssIHZ z(_+SscLC=W`ihMo{G<<{HvciZxKx*8jB%G2v&aA=?gRX1_NLU54>0opp!$0pVS<2T zH$J8Ig-&uFGG2TyA8xSWb@}F zRE9vQRc#6Pf#~}GI!M~CZ=iZR=?I`&xJ`a6;{x;QRfYX5$RNf#)iRMO)u>ToqW zNSPX*IP<17~LAVj}HbJcvWig`-_OQPy2`}G#HY( zL{MAP<$3OUybXJMm6dcI>Kb+hYaW6W7Y7WR_TJ68hs%Pn)lnn&NK38s@@e0mln!_0 z`8bJ(Ycc&qrq{iUa?n&wP~q3{`LnaT(0QW_IN4KKJF6EP?2S@=$Zn#P#8RIb>o-Tm zEXIa2$5rf??czYJ4$U3VP8N7(^3HzD1tsWPQCK67TfaG5r6lYQeu_b@`KXjfvHj~%$4@-jCRKCcUA?2k1$r|oHf`WIY!lAHq9iF?UlD4UKx-{pk z6lV>JY{qDDJYv#>t?kThiy4B%9J{zl`g3Xin~Btx7`2$}VVHMV@+vkkp}pab;CL7? zuN>TL^kRiTPyb(?5FJAbR@|{gE81`Djsd+@!>b(#rjyZDRin+sRm-2C5JMs~N{*xX zUgA&JJl#)tG8@mUf6(LHni=%hh`SaXMy?xm>OUd3l(e<4I|jW+!!gqL;dSmaT1mVh zw|?ed=`;H4&WL{}z{J@P;H6_j95&NQt33{T)n-P&>T?`)fgAC0P2ZMVNhEB@aC<3i zpFLA0DGYu4I2&lTUrQr*t}ha#eydxayhh z6lQAR3MR`dWZSv=$9u%5x_+u7h?p)xg`^1xULupi$YW1vf0E_H$uZ-q|D3gpuyWkYHh(9g zv2+O$?LJno;Y?lAbnYAc0_!Sau2e1tFSzc%-f>(Vh1OH` zT0}N!1q;v)TKXmR`CsApFj2@Q+9?1B*h}uv>z}iD68Gi`OjpKDWRxewYs4+=!)*{~ zO25k1aRYN2(fT~ZvfqYn4Khy;N%p2eaIxEkWSJ)n)>|Vo;KS4iG@k=i>7RwyqrxZh zl!%^;Q&=-B{z`$rx;3Pc_7?^(C}81-^A+8>E9|L*pRMf#k$&^60@c-O0`CoV9Mf9W z(|dixXr8%ktcohvv%C>_(Dc`JdepaZS^g(ed%LoU&u}2dv36{_HA5mH3ke$F8SA|p ze{ZX-UqjhRF34og%_1IogWBcV=F$uvFqYCT5|G3lLYU-lS^kY`QC~H0yGm#n_5f(u z--6tihoV)Ns?X57$_DjK%ye05*T7 zkh|k3ZV}631jd@MLVkTJni-Y^1CNKstK*x)vdUQX@@*ITGxBn|9g$toj60P)O+pnM zV9$Bfh3C(t^Us%i?k|k*&Psu~x3G|YRNg;-mUI)MnGuiwsb<~0dB!YAd(n_EN$W_m zCdspm-uyXRbX&rm0`1He_tyF4YvNmCxN$*-)W|#tuXU2D=R9_kTk|ZACSWI*BQaOM zFaO%$g=zBHxbbbnsxs-#Z_D9OBeS$5RWT=t5qplPj>pe`bhN;!W0+-8(nU^!dxk@N?n&LVT$^X( zd7}?kAa#y{pw&y+;9BQgMV&7Fr62#WpCGsxbo~@hW!mfS z#Cy*F=M7`X_cyYmwWzlnZc#B9dZ7jdZ}ai+f*$|Cp<73yNs2TU5sbFBsIO@WrRFjU zr~?)33T|cHCE3-e43^*MH`hC}5Q@MY9F7H&4v;wxL~$v3ga%4XG?|NV@L3RMVHZWp zyNwQ3XGLVZ7)rWBQ?e=G?9mC;h)pp7JP?UFW0&`0h|&{3IsH3B;L!~re!{A~wrfWb z;s3@kJ5#yz#x)5o(ROnPN&q1cG`~~sc}(O(Bss#ZxoDq>VvWBte~3U3Vvz)WbwP5h z26fMaf~JM&*-(|@15L!=^TOLw2^sK~8IKF-^M(es`h`!ma9imz4a6W3#+@z04^}wn z-a((K4e#YloNvgCQN>n=6pu!=igHbtGXM6HMJ>&q*%u5Lp~lATh(#!`aD#wNl?MSL{BXXAT*^69N1PQC@5I$SEYzPlPDEdd#Au88aEq~sd z!oRfpl0Huu_aclzS=TIYj$J@Om}!sWAQSaX9L0O;Pcs5mX>O-TjaUOja!JiOS(nW3 zilcWWWl5OQ3~rCso&&YD!RG}1rgq-a#e7iF&Q{>=5LYUknIip%1HQ}@>>-XSLkWpMu4mHZ6^Kw$H zye{ternBLCq{3s}<&8+gjZZm2pfRP9LW65rSBHd0j3mtS2l^`26lj|W(dUxHOUm=; ze%++&TrIVY%BJ{izPUav8+lD|uA_jjQ4gnaOLkb9IQ;Nd#&DTB2NFtFC|D`$g3X>` zdIuZuJUk^uH#=>)_05DHK<-JxGu~qmzk2F7_AY+x!E36B?|A@XdjLtx_B`Hi)tZMYd4b!398P*kUwgjbElc2BqBnitFd1h?>-QcZ|8UagMF+--B0 zr#lKB)%T=9f=hrkrq4NKRuTYY-_R-kzNli_j?% z%Jivus18b&0{LDf8HsOZE7--v9k-%YiRbfF98^1@Z*d1{gD@*Lg2}r6rgDH|!`&zy zD+*50SL;f_W&e->1dR05JdS`R-hO`L<#F^Iy%`@seDD`aRFF3A)@Ot?(`yo;53I1t zx!%=(IJV;%7KidROsWwh5P2;%x5bld+QD_CE#cj%rosudIt03=@buMLbndw^Qms|iWbhUvFx;7d^23a#hl-^M=Dr3 zb=CI|Yi7we-Sam15&xn`j-Ag(8G5F$%lhnxH32ElS@79m1)6dB@#df8pStd|t{T-KN!cGzE74MPZaN}XAVg5Etd16&65WBY_vhh)u z9flKhS6_*|I;;rLCQRXE0{$XK|PZL$6>qwU1i<)h)^$q?h0zY@=3T<_Rnv8urZP^LUPalk9F|16K8a)DxLjhXlVc8D+E$-e<{S|NZ{LhL70he3Wd> z{RjSvJdzg4Vf7y5#NK$9ZVPc?OI~Z-y)HdDOEAf>ca2eqkyq>a4GRCh`yZ9~iMK%3 zO7G&q6>g+tF|1%?UxwY+?(hjTX)p5qKqDHZ8VR*&{Xupal>T4BPj5fOxmmYGw<0Q0bGsiFK6iL+-Vaf zko#>8ZSN|OiN7|ra}7FAlY2i&VxX8Hm&!%RsPoIZV_5?S|4S`E9_(}csX+|@7espZ zb6$A%;a&TiI=Y8_vN@4Xv~rb@SQK<;3OM-i!WiBi^^*x-$868*;~0tld)AEMsu_b0 z-9KrN@bhQ(n!rjZ5*?IeRDLDHp7)yWu9$u%Ee~Rud@3NSmn9=~5{I^hGmwvB`&qlm zVrhDCWQfw*lEP_erIv#s62O0)I}FyAPTT^Z$jT-g=3^3anvh^!hvBGjxT7;Iem=7f zHipL0nEBgt7<+fP>*Wzo$YSH9GP@pt0NazT(1!tU;-jM&(COU)#(`D_ zqpn~uyQe~~FpO?Y$?AwugAIO3d#sT17X0j=H&^^W7oYw1);v)md3+LSWCF`v)wxQe z8*nDuolXpgX$yOQ_Ff!KV}%xV4Dv4VeL=GVufPu>_!gEM$gK>!B*YQaZ*lyfu zf=zzM;`)Pb2mpdaa||eX%=DOtU<25RD2h3I^By(D)^L|5eF$uh#s!KPf#c+sNOTH; z=wA~qa*cZvN_O zV7>2DVH)<=8=yGTlmmyF4khdG5Fiqt7ltB?JSNV@_XO>B9ae{xkElJ@)>XXhKR%;- z{5!b-_CBast-n;ckJbS4I0u2%@X$3NfbMoQL53r}xBn>OZ4n57upPdzIue$_OQ3Cu zj*~FMGCZs4Xe$+Xo)Iv&Tz4u|0ln zei@mj+yQazyXMa`?WZy)RZBxL3i$V{CDxvILXe+n@^et(^s*NIeS3uTgxgM;yI4LJ zU;oNrb;zKU$<5eG&;HyZ52F$ENTzSZJ!m=zttyfg@D%m=u3?$21C5nz0g|;;P&o!? zP3AAdN}vtanPZvW$kfK90pz!|O~XNMhUt$J)_nR^`%|HY9V_0fFt6CxTwI!dAmB#|4s2}=bRv_j@lCFl1&Tg8hQh-RUF)T<2YmAIr6(tLWiMLDl{m-0V}Eq z1{?ztJs~p+CMS}>m6R*vh}^8Qiwk=H6y{QjKT#m(XDJ^f@vq0ehbA7mxm7O&%fyW{ z;SPToPf@A0ciyxZk0r3$i*u-p+umIq!P=l$e79~buNTL7IW z4^IXXkE&6 za_90jX>Qrq=#FkNJ=&0J4ELvd!rR*+TgH+(b%8t_c)$$bW7fGg9j~+s6j<{$>p}>x zm^L48wp1UXs#M$v?&t>`*S_Q$UYk9`U>JX=z8&s%ZeBjjHR%($Q%b zAH%X*A77y#EkakSPa?g697BAOF4bk z71)J~cPopFu!- zX4Sm(E~f9v!gt?4gWeMNN1YyqWxgnHq&Zs^{^nAoNa7tmWFi2Vb~2dUJBq_&kcSDs z+0G{jK1UF?Xt)hKxTjT-0s!Z?4yzx5p_$8SGI|83b0Hu%+etxPw*Od@@|ZS)XhwAg z%xE~4`RJ*{pDLf?vV=6WdBBF=O@0stG!huDUl-cWUp3R+dnQf^$eSNAN#km+J^s7e zZaF&`Nz|_vZ%qVvnX{OP7V0=_CYPv9;7K(&77<)uAIPYo&vlw>iN#cJmkVZ~76D%M zZFz?my0f^>mbTmCMeRe$P;>g;^ZINVf?05^e^a=;Dxnv0BP*bYl(s$jS7PMBEY@}z zgfMySdfw)V*N{U}aeat|Jgk9&s;G&=-p;2qUX0!pjht;nN>fXP+ox`@w)9uX42Ci!SInjAg z2+v+Cgaom6oeq1hTb8Ktd+iGz~f^^Ddc4E^NtB7RkpdnGs3WY@}9rOUlcI7IKz zxW8lW5WxU^fLS<*)AU`#p6eI;I4H!hX@n~3$;J`*EZ*jDH>j!>+F=^{=Q<5Dk{&Z1 zCt_0)M4Qd%p5wC-$Bmh`zFwIaTED6TTh`zQ))k_7+$VmLG9Wj>D#0gK$VjFp5OuU= zWZ?!--dH3eM`Eq4``IE$R05JOvw~I6n=3Lr6*S|esd0yg*x?e*aj_kZh|K=~`kFBjW33*{9}R1so%{gLA18C6UW{>%oi_+!(mbZ?9Qu0%c&%{Eh8pVc1! znPf03uwjl4f5Sa+mnGf$v&JM7YdVYX^U}TzpWA`5<}!9aBC_rwhfrnSTy-Ah-=_b* zDF#Yd#)u`~WtAR)b63*TLZt_X8hz#)O+i7oTKb5&voTNNaZWvfAkYFIpZf5)AUkwf zq$E4b*!AT1SivEow1ouw zmz|+Pui3o(VE8NuGCC+UXZldSFs_JcaLe61v*XnfENWZ+GM;%n!K%1!5M?Bf( zzMQ&@Ec{4oEnF>878P#*B1Zps2VqvVP~%Xkx_~WE0ZX3Tdz5mxJ*gT zga#CkS>HmdY2mnuPTT-mw8Lo_ZL>wl5QKQmSJ!z$Oe`H%>!e)=gXtq+J1?%x z_3R`DWov{2Fq}m+UuI!)*oETlx9))hwJN;g7tzI3K_kbV3x?71phHgJWKr^uAV7bjNx**2I{D+ z0wTMwl!m(Il{XRBO=Ut9`}+5M;j$r#;GuMi`(J0q=Jd1%_p^m;{ZPaX;4P4&S-$V^n9@Tu8dk@ReHPz5<%P3O#$9$=k z#*_Or!W6b()*AYrV$Gu_@MMu>Y4>sYmsbJrsMsFORqq+TP~KyZh?*)PFE2vs&|+l~ z=AqXshsIl|YsgxzRQL40Bd8OT$vp*pQ!+<4#UC}89)v4=`A{4J!2nYfgU+faXNeY& z{664LP}yYtN5*OWoVhhbpZ3|RWQp(*e29(P5(GT$Gv;_$0(jdA?qns+3eGsK%Yjw) zBgDoEtJMi4x)jMlDlma(-AZq{Eas+vXEtx%L2yh_s$}0PrBA6FH?NG}Z|e z?f&i(88(;k<#~rOP6B&8q3v#r&>E&($Jzj{SMu()Pr0ll1Ie2me=F1&Wet0JM{Rc{ z?V?t<2^OxU{^A8Ac52>ggJaA@OlTMxdTttYyz(gBhJS6D7AcNi2oH(-_lV>Z>h2{% zViC)-8EuUC8gU!@KNrijrc|4ZD&u6@-Qb04Dm+9ibwEN%oTuySs6JWPTJe> zCXs6-o{LE!{$l1V<8l%)J}Z+K5d=rwT_P2!cTfZxMZl6_)>xzn)f!l3UHm^(=QyY2 z9H>nEI4)Cf%=!9dz#LuX$u09PzVPdb1Ju|Zj%AvI^ z5BI*4w$FPbonbK*6?ZeQ+$oB|z-mt+AZn<;#iU`9+a{ncY9 zoEr1vv9B`Al(m1aJ34o1xF{R$JEUs>ks!=I>q(3Y!lBUeo@CH%z42m`1VFfW@N?tR z;2H#W?v6ozyaR`ObKfOrp0y>8W5ajuC)yG-=pBPzl`PpC*?`e*2C|d27p|}wXcD~k zB*XtKQ7Ug%e(@GOTFId2D(8O~JLuoJr*BXlq?M9gWwMV1YcV99o~yX>SL0NbeJY7D z)^Kb#Ej%axzTk`t9BXj^Q$Vc0cQA1dpi>m@YH-rfC4+!5^yGWVh#v#bYG4mt$tR|U zrWV&iZJalkDRrX+uH!DN#39RQ)-qb_8RdPIyW;eq)JVqQVio(5%2Q;?6+@NL_4loj z>HimRAB2#+Pb*@nzKgIXLO;wRnRJP_U$d)HmOz*>oPy(6oI7KQY`OB1Dm&~S|J`X2 zL3+%k=yf5ge+RPZNA-WuC)bZ^OrMMQoyK&^{jFlFLkWf&iLCI~F>+Aslm9(Um^caL zYY=kx5@~)Sc9{%Z^l8BnnH}BQ&PbW<_NdVAhF@hz+|?Eq|FN9-^FLfaFPxf|9v_s` zMByLgCFr+iLFe{YvSBykVXPl4aR}_MZM+IHs;s~Nc%37_>ZEb?F)WGE(sQ@J(~a%M zZ~4WH{>9Gfjj5XUZEQkZZemK=;?I*!n^AlJKi&IS*5)53H6&YNP`iL4OM#1<(kzV& zSvAn>qG*@FB0l4r;4P`7LX@oXj7eQCuA;9h!N*yGg{(lDsKwP!3% zT4hDl>NR{ci&9{ap}kV0s&K!Pgbriv)yr zc4YESXjj>Z>-u#zjZzHZ#bwyX%kLPG2ux~aSL`y*B_t`Yu)|4%%LF5w?rOAvqJ`d! zl)8@d#Rnew66oO%**RYWo&|0j@LayphyU~eS-S1HBBOgZbQiJC`?XvUuH%*b+G`pm zvgjlO>+`AcNInjE0epm~gDN)J_ahs1G@wyLRF24YG@3%UDbZiFn@*S3(em~JZ%A%# zQ@9(Q+Htdd-ZtC~GUJ1eZWRA2d`d8`(PA4;6Fc}9!it&4t)7Nm@VtZ*GP1o9R$dPDeO{9>2HSoCaSvF1S0*UvL;_`RRBUSf{|644jHBW@o+g zy!ll&Cb_Zni^&PLaNi7cyg_+Vk6eQTmeR45e6N;hIZFFh4FlHEQrxDA&YKHrOI=8| zK&BmU6K3~A6IMuv2dX;;RHJGj?QP33IdXK269x5oe>#8?8l%3)OL(|O%VGXr!iT_0 z=zj6URF0|UC;5qO32|H?bqkFfEFV28&Ox?mN@@aTE^ndxTSRLB&8A+qY(i8}) z)D9ZTUkJaOV2L=0F9TT?HS1v#ot?g=eUuH~8RzzJf?pxk(VVd;hIz9NWhWMa{ik*d z4jR1ofw9xW=gC-7F}SsXjGdlMz8jai439^aMft!$_46$D-t!t}32`Pe58Q+^PWWc| zbEV^)`Q{__6sys}R%i$5EH+s)dBT?1C)HdDK6rVpj*(pHzZw3XH^+NxdvrfWr*F!MsW#`5HN<>jSb>{!>6YGJt^cq1!?4vEo>_Mln0*9Xqu2lLZUJUq;yuY}=BI%eDYS%me&C;BC27;)HTAX_6$_ zOU~^(lsFj$`Z!03G*g=p8`$tp)~NKBn2d?u>9#oosTho9by}HA3rxcuG$m!Bi&ZQ2 zQ1z%PX~j`@JrA6yUu;wPG|WF1JrgLk%Kp}Ddbbm6wHI2UI<&X@2K5}s*(uZ(huLEI zZ%75%iahFPO1M26DJz*G^p>cG(syE?c1o0U+t-iiKI#2f(-%_Hgx86(`+@1_^$oyj zL5X5I8wf7Yd{3vt(;CFhW-g2^$x(hGfCm#NjkV>IVD~)V3+grDv@bTIQibYJgEHjq z_uyGm4IuBZh-|tLlA2Usdq5%B=1uA9_M&l!4qrLac zDDs+R2(*+SckrQzzxf&W8)4aUicfe`#NEf*QlAoIEuW_gJW&al4`uOpSD!KE_b;6K73rwd7o(-SWly=0z>;IB1L-{2|!Qn2l4%D`gB ze~R6)Dm4yR{m-@Iw2 z-NI!ydnT43f4Q_Y+*Y(KdlK0y5wQbV9nCA6WsM{4r& zhYxF!BHeqKqnd49WSNor3MJZM4>mKZ$)(w-K5qH!HhC3GoCf_Q;DNj!#c^`bau{U_ z_^rDRDIfba%|9on5J7qcq{d%UBzT{1h+w--nl?!yWV(j4*R}WT8UF9h$p|;WJhQo6 z!2AbY>DsR%Vy*LR*bJ4+clg-jgxUL)G zW|nc_|*Zs;fW@oKprkVl2%%1z5Uly1Q0%9pc z(mxW84%V#Nl)5+e2qeNBF<77BD{r{uP_ zXvpsJw~H($T_#vBU+XJVf%>0^U2oGg#SwDF?IZucV$gP|IGVe;btf7k=@Wa z_oYLGTC3e1jW^?2mT)6`}VRSrEvV23hSnvf$9|j`QO#4H(;y)@#L%RfiX#q&%|Cz1?BW1r zJYTAZ4Mj6U?+{1~<8)1%JlYn4VXS2~Rf-Osh9 zjOu)y4~6j4+y?)(O2g0I6WaRsH3aYV3(Z-~4r!3qgNg%1h;6@Q*%mzwT9^sWnt!QM zghzt>qMcMAB%w$110171kbclcvQ$qA^nhX)Qdp@TVQ{|h>Gx}a80jA=poOJQ~>3z>ZzIaR|-AmzN3Ox!7rZa%g8@N znX4bitL%h1jANAHqhi z6*yE=aR}!e7<>rglZkG@MKx6NKbGNB&7%`H1AUKhw@BsPJBAjB>{0?Av`sWdr| zackiZ7YTXPGET~r#gAvz3Xj;o`MqQo8Yo&jw`O6}rUG$}BPN#XM0@~J750&{x$sdJ z2xPD!hDg{Zmv5z`?2FC~5KDV*(@&JpIV>Zc2$3!_{k#FxoNsRuSP{1(E_kcY)l#zv zpCgF$%_XXIRDo9yPQO+Gr@RyXL&gqHf+HKfW-xX$1hhc-dvmsbpb!tumlqcTH_rsP zyi)OJ+M->?0?6?N=nVDsn4VDtxU%(W0&n2fqn3E7L>6EPpbOSU8QSN!$6L^5eU2x$ zEkVrO9_uJ|v-)Z(VPM{FtVj_i4$hCk@`n&i-Fb&RH43}O-+@c#Lp*24kp=pabmpPF z@JpP#;&o`jTmv+`NmzBlyPxG|R)fW#p+o-kp|SrukSn(L+}$A3H74l-TdZVv6HhGU zx600P0<%O`0{ct+4-Zo0HY(OQlek-;X8KEFmO%d#9I?M-;DyJgP%cITn=YGp5bzLa zGSk>(0tP+(BG*TtPr_-9L+6um6Q2n=6f7VVy%i`CzG&0&p_23&4C^uYlLs|<$=}n` z;L*HGbPW6*CX1)Q$eSEO8AQFl8beWJ5+#+gGJT5J5pOtG>ms1qT^LeZ^(%xalC!*v z^7+4>BrEbo|8x+Kg-mb6eq!>`X2_45w)UFLh2p_4A^zIp7+dZW_SA!XmFvJ5Fk!3f zP4#d3!)l8Ahpoqvl2uiUcRSn-7CX__A>PJY-vSE-`{_HAAz%f6OoYJq`N-?BAaRl_GIF`=-+^q zgq;_WtamAR5mR?nK6t|IfgCD)$s+{@nA#{?!wf01K?maDxm&wsS=~vt5xuH+9JJc6 z!BMmZWdAN)p~c^7-$)-Asp=6n%ulNe4D~nslKqy}0NH@n`OXb2!X7=Q z#-$X{@9Du9pEvrJmS)Ih`7$C`$h44}F-RBh2S3SlvbH<+GAWzox#kft(tTT5 zp-&bY)yWx-Iird_?P9y}=tmwWrV9_@g$)O^MdskM<7xi(t6MWa&}ELQk(tg8dmx$8<@n)?{dlv4lma5;M{EWjjEo`!O@q4nupx4;%^k_d=)y zIFb!@1>iVdyRRL$@X_#xdbhZAWAdF1#7R)*6AZBUpep&|iy=t#GVFE0Kt`r6le@o6 zkSzEO(dU{g1CfyetP1}gU1+#abX}?m-WS#ixj#3q_A7hV0(T2%Qvg~n2p>Ip_dY{^ z82Z$;9qFX3$t%QpD8cw+&&df3C(c?0c<#md_wr z7Y4~5#Z39fU+tAD&uK^Gfoda=uyd~titKviBMJP7DaC_v>nC9L7Y`)5fM)*2*AG_z!1hN|sb=^-mI~p^j!2UZ6HtE{IdfNc2fc0ZtE#Fj1`{{gtm_JW^2%}vFk*Gifr(py_UU#) zQo|!)zF-ZsKvBimsvB(T1`)>Ym)aP1&Jw&i6~F&tb$evWf`I!CH|IeW`GTaw=wP?Q z5bg}jRMEF-LO(0MaO(w0Imu&;L8`QyCx(jIS9FZVW!Y+t{IHqHb+ILk8mEu!{K-nV z-ml@~G!I)v?04MXiV@Uq0??M059^NP`}!%fmLo1xCZ&eF$HX&P;ok9C>_@PVa=-5I z4FEIi+B?;y!av8vX5O&5;GX#ei!Q^em9NJzf~vz2F`{bNBE}6+>Ysxt;<;s83}#Ye z%2cdIHpH?x;l z9DFW<9n+&~m6O&4!9Xax?(ZBHojGTr+I2(kZ^>A8no^0rv72Fw4t`5h;L6cnE zLaQCAPfGD700ZL(RE&2uW>6%EI|1muPCPiV z$y(#`0zf;0(xk}B(5|?VX-RU=@<{3P$W{dV+Z);^!6*&VM&NrCsbDLllIj2DDch`Ot!l1=DwesMan;OYw@ zQJuj!fvX%HlLgm2x;ti9=xaSP(m_3C+=SQVdNFpEZ{AX0kyJ!Z%g~Y>$ziU4dMC~> zH3{NEqFxZ9d&k!`O|$J8J#c$UU280T%x3|d-G(l@?OS{IY-b)4CC>}0&hqy0%wHYw zkZ%7UI3-i|GIUlvJ9uu#Pf8`TH-NrYWqYMRU;ht9dl!j?dc=`w&xxpJXZ!;C6H`f;_ z7J#_2UHjSiEXrlnlQVe(^kL(+kQV8X$7Eo$e`+DkLK$*n#1?MD?wd>pr3Y)KPLrp- zQimC-@%BS9eBBwgBmYIA82Yi(7Pk**@j z4zvopip4KDbFB_}xiNeeteRgam5hlGM%RRk`$__*{9?lXy$&@H+>RE~49iGeShH3Q z7>4i9HDU4ku_sS?v#mvLRKK`?2ANVO>xqGpCQjV@6Gyo@*m6#;QSLs$;_4BkBNYO? zXvb%(bnA(RCi;Q(xfO~eYjTLJ8QI!7DwXi@W#NS}c6JL%!edQEvbeX{htv;1r&iu! z)aQB_GSbD^_od>5&nYL))sZfS{b?>9VR`hiV8Dp3?O*(n3)x=(Q85*j4R(aUHnvDu z_%QQqMSdKp{^7c7?~SQKF1)^}Q>^fd2((_RjEXyY5e0B!UJMV4qO(+#`2-V2TBO+- zIhgvXZ<0iJ?9P#PsC`lfRxI=6!-IrOjoAosXNYUH+Rk}ujLk!7eEJL7|9`HXIev92 zA%n4Q;uJBaPZHqYRH>p33%+6$i&4*)Y%?~S8M(X*R?vd{@^--D(L=ov)>-k;`uq$& z-h?V}H{2Dl6if}%Sim8(X8%!0KRU3wxpxu91#k&!4SdeF;<>|&1+jW9?(TNGaBTS< z=yEp7rCn2nqs3PRO3uA1Unk3PtRHEbcgnC_*r$jrv_&_N*j;Uj zX&m`5E~D-Xv-C>h-ir>rdUB#Xy^0+1b9S*4VCx7t1056%2&jcvm$5496bv}4JN{zr zCG5Msyx!d9HduM@=*bE<>}9aCeqT>@+?D_wuaMUwF6Vw0z)^e7k1bRZFmCn825Ik# z;qgyo|N5QjB9-v32d-x2tgJm%@#6*WasJQK49Ch!%1jo&b?2++8dOQ zGb|1CtL5s0w;PJ9BY=qzGpFPFH8+0<<<)mtBt|W8@P7<8&I(5^z^mM*1Ks zQ@P)nQx0vUP*U+bPaTiRMn?FY@k?;g+V%&+1fU@(Z6-BW$JfeKNMqs-EGwJwN%(|@ z%I7}q*oTOFe>Ki1$+qt^?ch7x4cJmDM^i#bvg^qZF-C8Nj&I+qsch5W*6drpV2_+G z;@%!R>|E15RF`)`(Z-{4yV?+{Odp0L!x;Zb4xktJK-B#{^D;>%P*#3L@e5WHNVFbQ zkG3C;EP27_&N+=}8Lse38U+r9Sz5lGuEM=F)i`hxlbI?F3dILc4KTYe5_WXO9L1P#{6(14$OvcYOo z6VQjZMYr-83vspCL|0R}kO<@lWEcCz@_WLKCJyWO+5s4BK%^iw>_yF-HS#5{oOFQNwAM)l!KoEk59}@kW4g$ky&DGTXU z5pjr$axTy4I@0!jzyJ_aOj{mf_5jaDksms4*Wmuo+u*)@Vu`EJnx6w+h7bBpBA_=(<8Z{a3LPrEdzq~kAZ-0i}0sR)kxXz%qpqt7WT zzi?4palOfU#Uh@u_Tzlg9f3RmP~3A`8)`a`=8&KFs_IWUt$G9nbLG(s!Kqws0&Er2 z*;)Vhqv^LiN9&{iq4OG{9#uerv!OH&1F756PxDzbg)|G2l4r-MC((-OW|raHHP4-o zYsWr0J2C-Z&yM1J8hxJm0#90MRa=)hu%0Cb0v_A|H@#{Ouhoq0GxuI1>Zc)qdDn3sc_2b1c~T z1F+(`ix#IA!U71mXs~u$hpY(d6e|F2KQi#7Zx6+n2Pe(b68K1pBCViPBEU>wD+eBp^R~+8;Es4!gXxnb4HE_q2TKXw`f!Pb#=6ncV5}B_K*K9X?+HD7v)CMn* z*Pm)zX>SM`xlUbjF1!~6VaT(haeA?wSQLsBsHFtW7E!EINHYUt)SK5bmanEBRTPnt z0@Yv2u@3G15Ei9sL%88-BbtVIxGvpBl&VVn9#mE1nIR-^9ZIIu?FF^VrW9Wyx~lpP zk@lIUM(c=fH`kZ5QF*?Y_UVdic-%%a+Ev9!?nE}GnrvSUg@u&yi0B*CD-DE?Q-XN{ za&#|FSyk>vtbO`kU@yJHMwgTA`MI0;{TfI$X20B&^0TC}iVi|fErCo3NY2oac9K~CD!RvvK#x}97P{$usiG}8B&SC5jytQp|{>3M(~B-pcpJ8d1m z>| z24;iBrZ0+x1BthYI7XSI`vu=lfJuxSvvCx|E;ewgG+S0I?8!avTsM0bN4gL@WE)Or z)V~8+4pNDWB&R;{k_tpW1mT(ruaAvP%n|k86Hs@D^7Ue8Khz@U!?nVV+4VA-Ll&o}Yy=XkNQ-AS z?0>w`$E|~m`HDozn6_{%k`BQM2z$D5A9JkFXj&w38Uh0sttM)+nRS_}UBN!~PNgU5ylTjaQ=k9A+i zfy45#K~NdctF9ia%r3(jW6&cmO!xX!_eIUPSB1&${QX1~Ny)(b3StGXfaq zTpTcszFpLt_Hz2t!}J;zm*}_lkEM6cT&rSj2D_FqBVYxhEz9rDmA$$8I4{g*0Np?%#w^!3J&Eh7QbwpG>Xn50W>i7D7@TfGOZ0Wsn!1 z^^6Nm#d_UrXK)fK(xiTFVd*>;rQmIjY3A04G<68BQ|!?t+M>}iBo4V^&Uw<)BrK$k z0!gN|pqB89fT8hClCpQ7I5udbtCjG5O6*gT%Aj9i_`*R1m4iC%jUG$NpWL%Cvg>7r zUcvH{^>pC!nB*I196iUZ@~^wIJ(M%|-6kVjpC0tO#r>^l7+2z&mWGs99I7rO)pLT` ztG8SEd}k8z1CAS7ot!9gZ9*(U8o}O(hV2;#o&whNUC2S zIBFO&%|dTbzrZp{;9lOA93wFcuHB;}8z@~B`@(?4Yqk>0B|%ejoa~NUJD|x9p~e7k zvssr7nU!DEeP87r4m?d_RR>L}$Az>8F!GWTK#)jGFH=I}fJkZu!`%Gl(|8D7MoaQI z(mC0PEys^X&>iXhe?Lpc6tt89__3J{0$e|!=PUWPOWn%CSrp<)b1x7Qg?#isBqwu~ zUL536_8E0Vp1PY=a7<;|)=0nx=zyXF?#>pnaLmi8&G+8YirVa%8`r}eF)AVvXH=KX zh?s2erU#dGN1z8!I_%Y(DK7e9*~6Kc0eZG?l(0UJVF$3_@rYxcpZ_1!7*>$Tt=DF# zJ4}Mz(nN-NUbfzKO<16T(e*3MfSKiUi0vC^}Vjv}j5TlD7V(MflPrcmeALYo3S z6CF~P5#9jM8!WI{v|JF%Q+>=6Ct8=M#y`8UED=EM*~(zfG@e0FM6j%mpm<`==S&R- zdeem(U98-fj2Kj&hboAAnja&#i~xmZv7E&tG2`ec*7|LJrA=KivN)>!9qt;|BAm%* zD`V*@cRj=>Gm38j1|H=kM0=!65woCe&prJ{_AmJd+C=m(VZmslBqICr|otfGf06s?+w3>IgQIPfm-?SD4+3Z&PfRVLY9T7zpGP@ zr|-_=p&z_Oe}`9P?iTpnlAhD==-1xk@}Wi)iBj^8%CE7&!gT@&DqLdA?p}t~2lFf< zf_8O2FDFqU&8BT|VnTKD5hkKPm_8)B3<)rkEvgSb6xqwgC<|3wQu9e&o$;=SxSje? z%Hr0D8*b*0u33-r;a%c!2rQ(4!oPIW#PAgZdZ848V ze2$G|#yn2UqNL&3C(el%Uj%~IH?8;`Bk$2#VrQbrBC8_pIpK6_F%v->25&FN>-xgR z+J~WoL#q0ZfGEa^1Xy^{D9}8?J$GEm^?{Qj3FnU+NaQp1xHUBUg?Zt7N@)jY6c>hGCbNJM5ATT zs1~C0ha1k(l&;?<0lVQD>I626P~{NyuZOKLr4DrJ4GOzx<;P!woAji5f>*azcp={D zJJMb$ek`|cw zeZ580>o2W%vtre~DO*HiL6Ionz7t_TVd(QQp)5>t4kY%z0np)4;NPJz_AsBwe;_83 zQ!KxR0w~l!E~Yhk2psVual~aTHuNhQg|ygprL! zq`;lCdiA;6;RM&a9B%!-@Gb6Y5xR9Y6VM*=DD%h%T}y3mLOOL#Ues^Z0Df!Qz@b zv$W(L9g{&0kRft=V<=>i$1=1j(%2Vj_AcFjVbN77w0KRftFy-OFYv7V**?W*{e``z zn19b>u$1ASAj>v-<>5NL_81iR?*%%^dh1RCs%%SJZ|^yE{JsS8`|ZHht!JgED#G0< z06|{Rrmsj4T@**Ws>y5Zy)a%TP2e8;J%R$KDwA6m!7F6lXh@pTS<6J`E(ntaW^pNR zi-U8s#3~8PWR#m;{Qlg(PRMBUVavjqI#9jrM5)#M`rFE~xM}5W;xaiRHeD)X-X_jc zeB1+X$bg`Sp^rWHC2Ck{G3-q)Z*9=4%n~?`VjOBSh)uQOx?=Jfw@6rCNlD{nA_7jF?lK}A_$}#s^ z;oi)h0JF*F%Y}+$)UiF1JAo4GxMbPt$^$4GD*-Gt#s6BPtU_EgX#15z+H9t%2A`Tb zKiO8U;X9-~V>23^n%Zs&GM_*y^^JxbPJWA-6KylKhqC}wuH~B^Py+%Fb|N>t7zkNbaDNH*#Lf z{jbRzMH+Rabe4qa{#^>b#$Xs?la>AYJjZl%tLDhUIbCT@bd)seer(rK$V{RazN*$chC@7KrSs!vPcw3A9rnEvw~fj<6(ma6oHV4S5C1-HW*A z{1Ak10Y11z_{{{Y7i}}UVg+K`Wak}2Vz@deQZmnbB`@yZM>$dp*0-X>N=qDhVWJ_%`haz{II}2Z6di zRk!`kY$`l9Psg_gsQ8ucA{8&s6Pu;pjdH<)8(Os<~}t$mej1 zdjY9}1A~TAppm=rTDC!gcS!t(E_o!``7 ztab083U@gr0#Pg7t3m@I;RxU%VGhODr)rj5sZbT3 zJU6RIk37J-Jww@aV4y~c%L?~5MqS&+pYWF0e3Pupryzg>L4t>45S6rC1?ld5Re16v52*&TohlKgIs{N)dOI#cDeeJfPwOQyJ5{rAbB)ZOQ{{E|%Gj zBgT#yZUEO+)A=F>Du5%E@RhiSafEuOdU9}7$1hq44Is}S;sQx&68~szT2wdy1PEyz z?kcnU$q*{%(5fXeuN_XphgeRE= z)p@U^JC%9e^U-zgP)&UA4{T=aFpWo{TY<)h@PicxEwgP*d0!}f+fZzNaV1ZkMUAXQ z?l3X&_82d3po)7CrFM)w!)lJuAh|8+NH7e{_%#}P>6Hd8Esw!9-z);F+RdI`n9liF z3C%?76WB<>3ia*I_IC=>LnH7C5!in85|*i4+@lzS+|uW=B`f|!RO~yG(W_ROzP4IZ5Q`ElOOJ|w{vE+7N+#w0AS7y424?xN3`4$XDY!+igE7P4-TGJm8zFkd zqEJ{*Y}NrqNPhP19PcH-lWYSpliUWn&Xq#_4b$ilwQE{6xc5so;zJS8&sC}Sg+ zCy%v*`7TMhVeFZpNxPr@p8l}Dtsi{nC0(^oJ3XhFH^hneANV zWVuTD@j?H{c75l~3-n9nL1Rx&FeB;k36nOa=cGk=CsZ$NR<8 z14pvuMKPupDBz=KIWLM1LX z91G*5#^4+yq>fv98!>8}*e6BrEiMw}Z|=eNHf~GP)s9OiV~9xFJIE77;-Ar8S3B$F0e!b7IB8}o^V;ecfJjjHd1E2z0he2>uAXTG8qI$DVF`$ z@rYMinJ-0s{J^x6CZM>VXw%H1FjG5Aj!%pd10cXWLuw-hnvYr^oVyZ6-xqJ|lj~3M zx4MmFOG48)4|h9Mgq)gPvsy=FagSqSQuvY(pUWv6YT&btduI}l<&SDRvW;m9LnbWr zeEjVjGRas^Ce@PUEej3nY*h<|_Dj|z0%gDKl@5NE*=?TnZ;9C^F}uHOR=7}u7|zsi z-b8~%`Z``A@%>7?+&R?tus2Lq6nv{4mhWo_{7oPc10-po4;m2~fUf0Y7U%uX>&Ycc z7#qubddcA><%!ho`z#-sF71E^=)8)1jAN7&C3N%(ibie?!J79e&iap55e89@fsJP*C=<0GqqsTyT$9bjvc_~ z>=QyWw6HS~%;o=$1k~Y66L~W1OL$LoDRk~ z+taAv1^x)E}hz0gjs#9lGuF@@}2Nl z0A}>B%Us=$o8u8mGl~qsE*`IVp@>sRsQ>_+#pxPd;d17S6%rmAx!}Bp3UJ&pPYO6T z6?+Rc+?It33DkyW*Mn@AO52al3?lvrxZW*0hnVbQl>4*&&#S`!C;ZpF=YB|k-qUj> z!;!;8&V|h|5>n71ag%>zknQ~_%$Y5n4Sa$te`0U< zA^r0;%+Do2Nb@mpwO&CuZ^Qi0vY7B8iT`deB(^4FxgYG4xcJ?&_sd>~P6T%auX86b zY18ZZarr5`5*Y<+gjSFOdqG>0y1=+|Oc)bfEg9zL6hTWcMOi8Sg5CghmpVo}IyAwZ zV1g97afSk^BvHL1`L~vM*if=VtF47`h+~sg^J`Op08}8uXlL@>IhL_y$yj(RsJ;P1 z%Qv&cJA3P#pJ$gJN*3wgMaJO#`|qqHWIel&x-(wYP;o5f;M1HtkI*cgY3<3y(fs}E zrG^%}naN{`U(Q@28)o0fQ%GY9WCXv4%`U`+Qz)zu+IahP;nbAe9ffb=89Doo)H*a& z?(|rI)tRRNS0K3CZGIm7s?@CCkIBKckdosnM7?_;+sY+~Ax-D$DWUSW_4wM=RZ-V? z;yg%3E}9KUl|flUQIO zjGu`7E8FT|uqks;(~$l;IMxG5y4CNuOqrC-wXh7C?6 z$72iuT>hnCrm3p8_>B*k&!$WM9S7PGEi*wh1wBi~+enxwFK@?HE@y&f*UtFOiM{36 z)@29?XHW%=%S+28Lggbxe7Tk-krj&PPoq z;&Q5w3>w;mq`OZ5elq@4GkA>&)##Js}7Ba3(Ss@Lv`g%s- zC1YVIN%Y;=I41=4I6$W-vR^M){TBySMx&%nBO^ommIj=)cVuf9^N*uSf}wmKg52z9 zwhL5JUQke?x`*h(bqm9us9tH7iS~;+t$a5pQ40rjq*KyCU1Z?bNy}5~=Kp~|I(4Asae{KjM;_Ds62hZQp0QDggGWp z!OA3Km1J*FWI*U6wd7LI{gg;0{XGXJP|E4SEJlr+jTncs;kyO1naOGropeN2!x|2N zEbcG1zsKgQr%u7wKi%IP(vrn;ZKXA8izZ|<6kOm2?jPhewjq>+d2CwS?q7;rJX|tM zNPpemnT{;)WBH_C-N<&bW|@k!KNHDS4r(D+AJ9~5{|vj~G#`m<V3x;18io!rio!2p&gJSlH0Tw=~HjSYnoq?ZBBdRxkcg7kP3YL>^Xm>*t#Zt zsKtkfC+*PKW)W;{m6a?VzKb5l~VruxBy=XK`SSFseM2vp$Eq$Fo`#z*xb)j3MUUKuvfA~K0U%b z=bZFzlOIZum0@OUpZF|VBRCj(b|Y*+d$c4Mg4Nn*IW5sq9?#u<`eN9Sc-Y=Cy{=kv zu@IkKmb4`4mwbIQ+-W6xdB1;)K!TRqqIK7=ElL;4goGX=Mts^f_img`OE+XftZI=a zS-IjeAggJij&Y&UFVN;1fM>-@6XtsqIkL%lgk;Ub3h__IR+IO8HvAL3|5T2Z-xz%# zs;7)x{$U+F&i_fm#|zTe8P; zqHkIlj}rLVU1XnTdG!*bLQ@L{oo0you)N%9I%^Jo`mT~SCWTi91`DTVgqMs8!~2J$ zitu~r1+U^q`51y&K2w=bAw<&$=I5fy85VX}yo!#myNEea+{ppzVxW2K(T#wCB;XAN z5R!p4g&Z(_MOwX$6eNz&3A!CIYfMVJ#3nZKr1F^GCM+fBy% zqta9^Sbh&2(X;|bo|_e-j+b(9P|T;Bv<=IJCq?}1G85jRJyQ#`drhxdhEU^$=imia9}z(wMQ@16@KN^+F3 z`WM^u4^-VHnyjmRjB4l`Wf(DQJ?mClV!i|#IY%g-c zk*SuEca}Uc$*z3*cgA0YEtt;lHV*9T!Cnbrt~=$g(*!k<)NNa?8 z2)serL1sKu^S<-7N^B>Me!l-!yp2d;lG}!NzQ?lT6WnGd07jJXmg)?Z3$6_GJE}zw zJzf$n#59?X(;=W4QFq$h;Oup*5Bhutxm##BI4zLRddLw6(GSeHOYFA)YR=B?3#MF&*9+)4#RouF%~2fI8SRYagn9^Kc5C|GAB2 z>D^`kKS030;R{6aD>k-hSAHRq@0`B%+`R#L-`nxJNjAHd?x!(nTcfYw>rM}Ki8p52 zQJPieV>P8yi;8}{)hH?t@A3>;26VZ&vxn{jT7F$jBTFqnUE1n50Fec+jIZJ_HN#Xv zalF{sTG7z39sXPxi9R2gkd0%>6;I*UJ)f>RwYi6sHy#KaeP?ecqc>HIWYNDDI45_V z3#CMFr;i7btl+A6i%n@j7cv)w7**~CQ?RgFSL(ozwCplus_{}t5!j?Kw%bDt_kMdu z;@{~ttiEYt)`zw1xG@b?JmdzQx$9>9tWLG`EGc56==eX6xZGRoL^fEl84u+oZ`+pC zT`tq_ebS<4dj&ingv?>@&rU=h_~l_;nHrnvb@Dt9xMvwsLQYSMmS624;H3wPecO`rn~(5m5Wtc`lY6V`wKK* zb=)Mq`TfhX8}FW7rTw1b!IrbNqRVp`5VC?3($mBKojF9aspGNR0p^{BTRSR)j(hF@ z$Kr-x2vXV;@q#d|Q>Wn)Dx(iWZqVID3=TzDvatgRprQ9xKJ)GnB~dR2UJ(a~Bpn8UFBw zNop+Pn0b*7^M_oEnlUVQ7n%odvITl{2)629no&iKucaG8@hvt1^H2(-eSB%oZ?>S~g_}NbS!1#O+a~6GL+DhJJxQzQE)?o{8zf9pH?pfk z*+x-^F!W0Ra{n+CE6W1>c*0S=3`q^-FEy3c@kVYwQKHiU0^U@vAj5;AgqAjIBuD5Q zRamb1^m~2kSHf_+3`_BP5L-AID_jw_>eY*1qRi$~W@g`Q6&fGBrDxd!sMvyT0wpNO zAa_)X0`_A}!7}~M*$gAhVxf}L1={vZ3w zN})f&13#1b({EtbarlYR8UeR(Xv8z#WOxa{FgA^4Ni>84tTWjCE;U%Oycv?P%eNgi z9F6e_nj$6x#y*n?>ov`=LQfo#s0bv9tD__XCJ;Oh5?;P{3Xo)_lFgclAr-+Zh$dO} zQ_CY3(RB3ysqjo{9J1B#06filPASttS}$Oy#)2Y3IK(TAPbK}fTA$WlXy6LD|IzTY zAZf$(a#^jXrz;&quv|YD?KkHeT?PSVA1>D0=PeZplZ6(S&o5H}L}yXJ693HF53`hg zJHv&D`==jV(?neqg3*3;A`{>ASj5c47qk>zHiLg|S_H^1ER>bv`wY1#X5n##OpJHP z0drHL9!O&KdVjLD`tbO0fbO?s8si`|@{2LqOO%^d8*W|OE-3?bF#kk+$MGqRcZ6!3 ziQzRvoSUs`y`9KK72+X#a8`mu4U!M!QO723(szm6yDjN=e}+7QRdGX`(U>zf%q@0D zEJig6qG{-LPhr2dzb362YHSZ$XI#Q%?l@T?EPW3;z5a$>-8=U6yibo9JLt9Jyq)@d zkElVZ>a`7(N)&6ur3K&-+ByDRy0k8`*E*p-IJ%vi=b9USoENuoM@1h_u74OzSSk|+ z;#RLOiy~|m208S3;dYSJ*HWNY`Oky?#BD!#mznTbrc(JfqfRYjqF{afuEjn)2Q^s}> z_`5kfNPGBV1fs%>`rGW5w<0D>2%1R@5Iz9L8-k_jk6rm<;2DJ7htsz0;hf;z9vD@TqH6Bv zGc1;{q!+@`wXgQyG>j~1AfVc%#dK9cO0d-|ENAyQ?o&WYIAlHIJGhx!d<2rY7`6>cyLEe8clOa`Y#yblUn<`PuKw zRo10+jd!3s=sCvH=4oeG%89p`d6XQh|t% z;C`AK3U$MV&+9y_Hv8dcjPpDYN14W?uJD;|0}##`$eBS|wiO#SG@fs`ql5%?Ib8-x z&7*5ok60WkudJj?1G%e=5F<*WoK1%Lb^2!!ZN;e%AHA2S=1Fsn1B=56=U}?4eU3{Q z{~an@%U8G`Uq_NZ6!0XxC;V_-E?8w!}mmwQ?GV4V4H+G9q4s}>byRMip?-m795;MUZ zX!Y?&BU?7%T*d2U6MLex9D`{n+t69Wwz&{O=rrPQWl1ip31Rp5YBiS5PMO6X!fpnv zEznQYyn4B5Sru^3f+S$j;EWgMV~C9N;i?>aGf-*7$i(966?XtHhHt3+Gz{2&vM27a zgaYH6v>+Bnk-D2OaJHGT9^8BHb%#=i!-|{a|NY~B>k1h-V*DhZ=TZe?(>b7)Pgf$h z;NeSVb;2Zd;R}wNKkSET^;a(oz(1Wa`DLUD2>z{yJ{BppyYh|i*C^B!j9i4(-L7RI zLFDJ|FU1u%sYc3g6__7d9<`J$bK3zemJcRK(Tg;aDble~x00K{h7*Km^dM!j? z=8Zc%r5*4oshq+pG>N14WQga!g*EoJRA^=Ul9J5RpE>({erpwLxN-}VbsWGz7v}ZHd){h{?=t~{>^e{kCGuv~s zJOc*L4n@8e!P|y2ZJ>$q}#_C(V0 zB8}o;86af3#HMwp%;jiFWR?(NL%&rj%Fwqs4U=HUbRh-EzHTrq4lFM`Hu8(GUfKdX zS1Yq3|J~A3MsuAa-Y6`U4EKiw#mD5t2Dq40sFZT<0qb(8NPl=czTZ}FNt=6^Wm4EU z+BA16T zvKzF8i7_8aDJ-9396b=)R`y)j2Ol)yxc?02<7?7#w{#^3k#3)c3n)z{O+$I7R;kLb z6^i(O*}ZEjl6jKpv4&Y|z}3E1$$}>+~<3z3yHOzX^}z^foy15BDECxo;)34JMTnR7I{U z&dHsV6iDQdJpe+NJ+Ehcr#xXONEG%ZPNVsY9~cEkbt5yE65;l}>p-ed1BsBqLpa=;6>XJQK8W)}j=_=K&$f3n$Bno!_uAOTA^7uOYumvKK;#a>& zBxTHq90b2cFZcS2d?)C=W(r9!nEL)cvJymf0OdkJru=IBCE>}oHWn-Ig84l->kRR5{?Q7Nr2hM+bj{?O7-3#MtW5ENEyW^*6lK|Bn zNnz{f#|Nk54`F}z^ZAbf&0X6Bn({$+6Hj3!2MlR*kM)b*HKGrg<4hy`cH=a@P)|W6 z$Zg5Qk+5oQ1A{8faH3joGx&~uvCQvry&sfEaL6mS@p()L%?MX4{5X3;!jP1q^7nw? z-BL0Wb6jiL8g47B5XRunYtl)hWHZk24|Vz0;X@TmG+k9qK`I6prr>LKu44Ad^Ya?R zJ#R!^$!d>`hL6t+1jtLIKnM>0&VS1pkXGc_2|kLs01mgLbU-{)`T0fZt z4p08VY^hT$EbxNb&g?gs?;$6FNyA%lCnLlFLDD?$37eMb;j@jtAqxyfN5uVD4$G?W zmwLH3-()5F2$`UgbB?qeoV*YyogbLL@h|rmNnIx{=(Le<9nC-T>44(@&Ha3*itFw( z@`09z+H?3eJy3rOpLqaM7%Vylpt$4`k*F@K{|~mcT5jZaDJmcY602aC%E!RKC6^Yx zC;mM$z?JIghywI1vS$TsmS=Hdaz?ASAu%i~<7PkBKlnAgaCBbVZyUx%n{=v_yV>&9 z-#?afMDI-1%60@MH!Pi2c#uF{RlvpjdmBRgS$B9H93L`|Z|Rr+Y4dR-WkLW3 znb<_wjb=>&agmL2cGXj1{d?5g8)ukCJ`Xh0KSv3+Yp#{%zC;g-=R11#UQiZeam#TR zR_LCC-k8bhzCj1P%{)om+18o74IVq$B{b)0t}-PPC)ahtwtvVSuc&N)~%tw#_zWBE!9@Z_@e zeI-)pq?36CBj8GskO<&9YVm=wo;b*(9j- zXw!1+axe_w$caepbGHK&?>VK}MUQJEhETA&v$Fv%QY&|~H1PJ^Vaf#NNcr*|&f3z> z${^6JQ(^N6EguPk1@B(^xywoY5T!I=G~IuMk?%rG!AWt+L*C1ZB+5O(g{+fF<8$!}1rWO(oxH~N-gc1|qs zz1S(+U;uqGzK}GJ)0d)BK|Rdz#P)p?yIA4-;#71uhqbLY;Z!*G7UW0E3&Wg3kX{Fna^zqx1e1ERhIXBQy& z3k1j4!gAGgRao`A#jo<&N?>`>ho_noR4+;u-O*l)QoT=2d-tG z&GhWZ^7(vOhcy7-506Sc^B39yXhcf)0D|_B?E>tsu;1cn&jY4stZPPVZ(NU)O(x(2#@Ct z(+Wy1UH|%`;*Q#de_QGhfkWUiJTP7-sFK1zYWUgd>)jwqUZ;F=NU2l<^6+N{jIkae zc$JIU*aHjGb{(!UVdTn|@=BxD{lXJwZz>R@7e`ARaxmH^MOFNnwo#w5Z`9ZK{_B_I z)rabx^236iMK69J_~aMf$w0;0mK zAEz#_0T~7C+Zl|MB_qYL;&n_V3b>((OL22sc_>33*U4-w184n*9m1zbt?6&fGJD*f zltLkw+wo6Fcjuau787eO)6<*e;UC{vVyC`>M8 zW|v5T*erwesML-uY{VhkY^#fDB63^rNWV*bHNADevxEtx@C31v=_F&F&f3@!%oVN= z^t*&E@YUO8>>!!mcpL3$z0U!-$xz+zBy{iUaVH6&#Wv+buduZr<(c%}a9`STp%1Hd z4W}aiCR*dOTYA(SDyhd&yrAOzs%(}Bn|;HxTEmIfI4`c z&q~@=rZ{D*F*Htj<`OzgMlAa3`vl?gQBhQ3N2xYyG#OQt{O!z#dw*PDY#k=$l=^0+ zv^P_*|Cc~Wc}f4Mfn!JdREKj+NP*|0N1XOVM0j;c(RgTKTn7ml^>sIx+~+*w1Ns*9 zug)*ZsiU$TLax%2 z4ej`w0#Wx+)hVG9l}H;2{B!?9jscXfZbrD|#{(X33OKhRABir&Tue>s+oUY-)9@gR z?#K4h#3){W2&j2?TL|Q>RTixpJ!aGpj|5>iZGN`FH*b0byC_+Jou;M(0AV-hk+*#F zn<*P^)b(frBc(=-heazKg>=MDaEXh{4+V_Zw$;llPZ?W=SJ)RwTrU>U6L6ZDeqg9X z5kvdHu}GX>#Hyh-ft*9h^BRPCCrpGbguY}b#+{J{g(!yGSm0&n11d7Rqr>Ut0Fnh< z>B~ix?r(}AasMemafvmi1veIAwlHl9IK)5RjK{vNXTk{u8b{F^E4n-qy+Bv2 zDl>ohaN63}Q}OWSQ%rk}#=QCl2ro5M4K5mOPN4Dg%O7Ert@u&?6do&ci@Cg7KKxED z37w^Lkdu_NS4$N1O;67#!^q3~#Cf0|QHtGyVz%(ARF-OP&bHRjgvU*x$~#eZa3CfQ+$ z0yB*ZaA>J%FM(yn#xb)=(7$FLBsk6<_8KDjsAZ0mo&RYd{(v{3Y{fxR2q+WZw4Ky6 z6EP@;S(j}YAxxE{I?lp#$nh~n9rO2d1^B<1{iWNslJ=^{=UUmT*`%xx1&q$oputPS zzJ<(NbC!iv!igTrxMN-lgY|R|p=oT3rE=~ms``PY9cVEjB2O}mlzX1q#voCsX<8X< z*U*DoU}^!VtbdrNSz7ifugh;9mpF)Gy+aTuE#K0QK735AvjWSKja_F}Q!ufB#bt$~ zp+}Jbe;*$6xAfUPFnZZxV(8p-)Wn(fuWbChI-k2D4RqHdf$!@HOq|2` zq(6Q%Dm%6R>uBiuwqa0Zlf-p$1@C_ura{97Pz37CT=d-RC%Z!L&=75=CVx_G1k=?2 z|BU|jMb=y_cnyDWA5_5R_`E>lyR@_FVxNfF7E*d|!t**_ z0FjD?`)ZFj@Kg6vyKppK&@w9(>QxLkLd*3TVp2JOMrR}QQvS;}G=>V7 z8!`atAP}0r%sMc|d054Kzqwk)D5R2Ep{f3oMsE5 zoVpA{rb6K}IT`8X3k<|#19OhkQ1qq0_mCn5g<80@7W*BoTroQPZTMv2w_NOe8HxqR zV${8o;Z2DJaZ1r*4<5*X>3M-?7~RZI6k%;-64bpYriP1I8;^YbXGlzad*ocLt>K}H zzu3GgSjZBM0$g}9Jb|MfMooy%fk%B?8p4U5pKo2Y+Pu^-;^t3c|ntNcf zgnx*D?idGHNQ_WXCyXQKq7{>m*|NI_@WL*#pd8I=z;mI~FF~HKwLoau_3?C{>1F%C zHE>Qx^@s-92tZ`W{yJrR8={p0o^N72;5qM0l6xdg`8<%GsT_`RCBtCC4CkmOQc37d`Aa2krWyIjG%f z8!c&Z0GR`2y>YD@?RL~~AFst2TcUF4G$~yi(vTWWnZ*697w0Wcpp?LtUc}0U=TkJ4 zlqT=F*2xE|)X1Q;fpwkx5iz1#*(<{Q_r=$}DzUc|pr8Ac*de>LV!t)4i;h+~R){uc zD8VL$cdxS-t5^;rXzr-ZA2SpI!Zi+HB8?Ej;2xq()@kq5p4au?ssqoFR1r}4#PLQI zv|nBqiJDZvWDq0-`<@QYxS}C2K8`s3X^n*pda@rYh{R^RW7J0Y7EXnabpp!bmbhT7 zX?!%%r)4Z6ngM9ib#rJ(l2uUzg5Ev30Gxi*v15ZHVA21G<}VMW{06?2-e44x*SHO0 z7$eU!W81O;*zfECa6)$LltI-+a++b436)|M8HRgbQ@2d zYJ^8pgnYFaxD-knqJ4;zA~Z^UhRmZ6$KwPv}w^J`Jkc5yc>2M7E(?&SAU zbzesZess=yi$U9M>0hsp(p)@A9th6o;Pn{)!ThO?WG&=MxX82Jy{OyY-=;OY!?|Ua1=B0k^&*K!T@71z ze@j`Jva5UE-JeeRxDNBHHgZ3t&BHU#&!>c3OM$FfhgJImC8m2q?hBTWDI|QN`CTpp27%n zA%wQXBu9t%fskG7w1_HkW2nEbnF#?lvzvmWj zV1;D^uD}8sRzf05Wxv;xF zXwFz{R1Fd_kZ4;*u)130u+eGbf=(4hWyDp*2_L&L^=vU^<7IHPk=r=C%EjN8%kC2u z3?znhs&TvF#3B!D5ok8JUi+d&r-N*Ii$KAUe?M8N!+goY%LO(@2(P$Tw0{Iex%^7H zRushxy+smmGo(k4Hdb>CG4b93&wBWW0YzmXoj*ia4Tg3P6|y&S5zyvI%cV8?ei6{^ ztnt(Oxj?h`o>3XkvF%sBE@p8cgI%VolE=pLE zu6@fa0_@bwN?-240QBq4pTaDwoaZ6E06C}$5QPNx^lG1>92ELI%a0`3T*A867bf_B zdJ8lw|DxsCg`xnIxcbni;EIS>?wy@k?q%og#K83%@ucxePO1zyE1@};por{iPF3tG z3W$HW78Y|PJLXg6fQ%1>08io0ngyhnlmlwp1fx=I!zH4+ynJXi`Q8e#-T2jkFS%SK z{`dk@$_V;hQ7gL5-`0vC`!%PjkDZ;An+#Jl7U0IFOmrhW(~oBd=y)n{My#>AZ>?;& zE~&`PP2bQYpN_#W=+I}`krJoc%e(^&({*a4C5YK+7v4iCx`;qg`hd9Spbgi!tDV>E z_}>E86s6+UOpRt+%L#-!7(Bge;inUOek!57Px^3c?~jk|=SI}1t&hXzN``jG!D`x-QOM!5R z1NinR;C>CtU4)p-Mscm{b^#}kc(kKDr$W*&w-Yb+96kAI%r(0aj|Qhh$MYt$zTh`L zsu0*p#0qwp8Ee8Vjl%S)^~4IVM`~1?_SYOZZ`fq!Se402>@a(f(cH69!4Sj-EoCy7 z_C9pmi2jx8ewg8L8up;8rlj0YX0o$_pR1~m*NN5js?^aKOM{)A?>c@tI728a8MyB! zKuJHr)nl0*ZiOx#7rSI4@SMLh!Mi|m`!KO+GdYN8hau2BT~VS zi5nYx8{27}%kBoJmL4$Ig@t^8uL=N~|4$)#Y$EWeKLM3-_)Ey@+)4S31%tZdmdP08~o@dKUv;i$6qbc0(qBB4)Hy|ynH2q zUGJj%k^CFHl4%!Xig)PK!_79TQi}~m_aP*|T@2&@f1~xcx<2JM#B^6zcXO--f~UFn882D63J&z&CWL@G3o+xkgvZ*#Lb=Sql$kGe-6`U@11KYL55`+@ zKrY7=B&sp*w)D7dKz0rH$m)80mWPs$0=vYLRoEt0z+72;;Yca}45}M>MirX1sy3eX z69mBi`I^^))VB5ne^yl8pJ6>?&1@#D(V%X4_VPj|&S#zcTe~h6Huk2*@i1t+a5zIY5Vb&Rl<3C+lhsIWo(dO2vjejXW6J;fja{ApW1u87c{ zRDBPshE$my2zZF>_$}UY1a?`j$9hXHm8X@NE9qq#NwvmZyI8UBD4-{;pS{-iz2mdC z5!zsyqUb{coF^P(b{kb$hqYH%1vmP44tcswd4ynbzp@yJnl5ltRi)WPqiKo7q=VtP zhU3kKn2(gIYH1gAOLhR^mnl-5Hi`4Cm2vWv*k@RiE~tzydI?8v#9f_@7r`k+ZCWK9 z*`bF-a8Cyr5P$76eCoryt|18FX2X->mUxI6>*m6OdJ{btGxZL2ac5&u%qw<61Sblo zH736>&4sMaT*sbOM($6Z#f`Uo`dZMT24^>a$V|=&4mh0osXQC0Bxnu z8s%#}WlNR9Yuj;=6rQUd2`q0R$?7~Y?a}!cRautJcU&;9X%DL$#+X#Fx5PJJIkBi# zX1jse#{3D5R6;Xglw1FtH3@my*rLr%MF~bYm@-7>s^E77yVEw}Uo;|tKNgC;SRA~f zXFs|rc^Zr@v@UNr40l#A5m|C0EuRRDgmbH4{ypX^{*_RK_Y!0Qt@qLQA-dDk>Zrn5 zNUKd2mSRwEY~hvD8#n?D=#8^#-H>ctby8*pyJSc6cz^(Fhk zboDR(F~rcFT)+ASK$@-L{`yhSfa2i?Y#A9_^Np6mW{pteCS$3yWSQ5!$si9N@?8(! zpzwLuXI8LO&rbzh6wLwZ-_k?HC3+GQ2B_x( zWS@ys+$lKAnzKNgyHglxc0tEI?!pJ*^5|LP9TfjS1%KyhycsezOU1WJ-IjjR? zGJp!|@0;;`^2m#aNQs4aKf?ifHK0GH@^Q2R7)WWeDbhUI+3YD2 zrzoTmEcz(L|GNiPjIGpW3U4?w@Ni!0Uz>~B9b!tn95P3F2i5L+ zaX31KnoHoAXHawN>$=4>^KCC+Gb(D^=*B}l_M*p*wz*9;r17(*K(&1{87Ft@zR8?V#c z;{ykaOsJ-tj>)ECPl-O(X~|prY^+|yT&wR^C*#Xo-L*E@zIdltc7hryYrelU@8F_89o&!yr z&F56OZwPR1BcubTih07qt3Sxwv26d`G#DCYF`iHJ-HhDG=VsNx%GN)98zDCejp=6z z?=c&Z@M%%t>2~debIV=X%*sc<)zgKI6`6TH{OmhE9S6j9+yzF=<@VPNMi0`I{HDdk zjQNzq)+Q~oVg>`12ornqKQEI~mCzEL{%|?+meHdA6*Jyn6-BG(o4_yS<~<-w{<{5C zM`oJxuxT1{@8Vvrkzfim+(EleQN+vUzVX*lRp_b!P*R?ZkSJGW!W&W2@A>OR+~sTb zmx1*7^7Le4K*aD@HCiPb`oz8A8aE394+lVMO;w>5wMVGd9jcZ@;%-{u-i= z?}tE%Ym0tNNQ-J%_T220RmU;c`xiB-YhW*~qsil{F8{V{d9~4-xOg4;3J(?I`=1k+ z+|FlT-j0G%hB8m9aUO}`0AQF6(cJatmzrK)n5e* z;Qt;+?i1hp{f3H#oJzW1sZ`GdlXA~orAROoG{S}`VP1>gRIl~XI;6ovje&BGX$J^7 z5fr}VnBMMO@X9F-iI}f!9~p4|79~bcBv4Z^Swvu+QErox6I+Z)-Jqeok~9P(ZG^Xw zi*kHPsRqY5QE3cAm9KE#*f*3_Xl@Y`}NP*|QU%7=)d7 z4=zOlsMF<^yM7}jTfa^RZf)Ii$}MwGSOXqQsNL{G=8N&|cgp~+axwY;bk9WA+(REQ zIJmOf%kOP6!!k@X(8bADpR)iem7mWiGu@wPS|y`I7PF9Yheew zW_KiSZ~&-sVu}zU1jJDm&>rKSOq}CQ0;gW36DrbuarZjXRBh-dbcH=N+}E)G3vWY< zkuR~)y)&=_dIfS+!5#`Ppx35QHJd&vK(&R?c5JEd@V*4AL+CUTHd?$d0p)bkj;aat z$-KM3_}SNFW%++mq;r94V*{t>5ZcjXYPJinsv&37yOuW~U*to7YW_NE`@wZnL;wSqJnsENRJkAwKUmRDZ5mLou+ zwGA+LOqs~r-Y;neV%JT7*MdSkRok{7u@#-1!dqhNfyv;Mmj_g3buVEDRHI83{rD>< zmFd^9NyUP&+(w+jmDGa4JWocR)`zD-NjvhC38BW0W7rx1FL3{lb%9c_E?^_cF0Kk z*`t8mbA(V{7IS*NcBEQIyhPKg*lBt!RQJug&!p^G>}Lp^sVInCC%XxcQvCJds(ot@ z$=uOKV5_ziT|4nJ4`?%?It+~)5hUcJBA=u@`C1Ekrvk_9=%Cye=TENBN7YGHDCW~0 z9@pIDGBFq8gQp?2A;Hq?h6FwTQ41`xP$oRTR_r5@!4gSk1dJ5F#57RIse!1ys3bCc z(L$l>Uq=04n@xf;N8(JO^qQnsosbdShtyDiAARlAE)=w{#UCJ2u!Gd_e+G89lh|lj zqzez#(SjD3?lFGk;Y@=ve~Iq=uFY4%YwnY?WP)jY5MejJ{B5!uQ%+2pp9HKI<& zSY7~;#L&Y@>XS<|Gi9^SYyDWI7x2UK4q6BAi4GE_Jf@c~3M}tHUE&b3X z=26*v(5d#+a$(r&y)cMh9(pQYA@(TNz06=p1}6LhtUKfENe$6GF=_KRZrUmKul9UO z92C9_Q#hEo%0q~h%(^)+(AU)6cf@_uzpzpNxDs_ha_bF#Ss~V)U>RFj;C{YPO)_oy z^|GYhJX722x$CT7J)^L4>^=8_T5i zr-Ke)#V*6=YXl|d`9hlrF7}&E0Y?W>t~rZ^ERX{ksnZvm%>Jb3Bx%1t4KgC?KfSNgzDTyfHf!bM>qy7qV*70m zmel;7fbk3}PLGAIoXHKo2lxLcKSeS4X`7jG?|I)|_nV`n2kRgth6uMJQyb3>g%D7_ z{F1d)p_2dOF&57Fgm=I9C~VS5;C6lySx+Y@dxv-j#M*VrUvCTs)oug6&T$^=_>wnX z!O;y>ozk4(xKpnl$SY&)D{1FA2|`N?+>Yz##MN6wOpjGAw3R8}BnO@Q(4X1HX9RBt zJ_|PYp>z6GU}Q7Xg&tEX23!&KIomGA;c?@5t>Kv3ed*I4jxi9}3unZ~!C<^@8pQ!) zSrv!Yz>xfmW~XpyewUDXr(S=s5R^~%VQSBDym+bS>>jPKYK#^rBnYxTC*1(U z9Ro_`szzlqS^E>mhEb7C}OhmmcqDt|f4rdi>?MUO!6K!$-9E zywZwfx_+z~%QX9YP-ANPn5lc8uX}+?h?O}jlS`aa91I!%CSj$wV^h&}MP z`7DNfF#=ivD!{1;9moI&(ey0a;9!a)eF0qdb8@IhJiavpF<9@Sm1V;eKS3q%DrKJDiTl1S&Scr($tmJs`LiYs$)b^eRR7_CspO0 zi-m&d(~u=p8n9;U9C86}8%i7yaT%@sjZK&l+@(;fW{f-s%t&^(&BAEH)8IN2=+Z|F=It0?2WFbhV&H383 z51wDy0>>t;Vl1rXmH@RP@IoihvrbC}or^}8rLQI^Bc>Ra{e^?p}y z{G12&9x|x>MRA}OJPusA9}+Nd9dq%v0{R$jV`_JFk6Ogjcr_QE1vqYG#gY%lI2W^{ z@DKCiKGvI6h|Q9sf3Y~_$UA(b+bF$1QpPj8LXQSUKldEUu%)Kc9+~W6;7}!qy@Dv8 zn!*DrU2$fjbTSzyLYHl+{mJv#%SgU!{wxUlNrv5o>T0b7Lf&CIA>xqqUy#%S;lVrv zo4L9GFLgHG@_gf4l`fAi=fwlG>TGVkF&6A!6(hJ1h_whYCv(`hDEP%NF>9HO29)Bh z8shb2LCnnpr}Yhs&UZIq$wjQ}a_s*pa!f?%?)u%Htqw}6iB-=mX-C9s0{;>=z_~X* zQBQ6pTOtZKWiKD#O9g$Kc>Fy{Le`v|8ks&%F|y7J&#&~Eefu# zxBhW<Lt-5z^ zQl5Yy1Sh;mhK4lsFT8~K#(@E)(ohss*l)i3@9f!iUQNW&E(_4g-uKWV%1 zz4ycea}{o!CpO&Sj&~*5la=XKdvKRV2b@omMFBDAASBQhafafPwaFQUr;H=!DQ5-i zad3-U$%Dhv8^e$P!Nzts9sc1t6N+6UJvmNtwwIvvX!f$#zj~T+8hZ6nkkU$)sVc><=Dgu&$MWlHCx>&lj z-|~p*LFhWeMcYp5hP`|7sV-$javs&3ModA+3^?w-#juI=pV`Ldh1F$C$K|bHsoZjg z>0e;bI*7+cP0VD`y`O({aPB~0iaYUL*zxpG28rUORs^b{LD@-v57`Uhr_mKbyaHPt5CQ477z>Fga|k((JbUrJA$Ml zh5C=MxY-4iBc=9NvxTZKzcS{}Q+pIh9hn~KTHMDGNDrwJEfyUZ7Oerwaigcii4yTK zVRU_JqNsB%Lq6-K($@~Pqbx&t1jT>1@R1_x!J>sizE4se@L@cSA<1eH6|#}iiGTu9 z4=Dy)S4ETS;r~B?oEC{#aAWpvNg+j=eewycrLPG{1%C`wqAwH=9uKzqm8@bj5OG+| zL_nWWD8s3-BL|!R>!&$8vmja}KpO2uu;U zvN=m4EVzQf4vsnEu(+%`Q-Iiq_Nx z@m}|DJ}iirpe8b3m2ApODCHBrCS39)_**`rVbIo!g0h^lpsY4>dHKpN|Tnk&Al5tAZ#9s>bZ@rP80}OQ|wx zezat#>W-hocLP@{4cWx@)t1RtCSixBkL2@MF~WbWZf~Z*_Tpo~D<}4tlYc`SwwCzP zlGP*z`>qT;hsFg5prdA-g8`;kUMG*nwhOgec;(#E-WVUIwd`Sh)_A=+cJg_SZnAL$-zY~6R;+OHL79yVM=}XSM{T*nv2ui$S$kBX- z#cjeJ>La__IwAgGF*PLF_Sm}s4=nENBc;{Ii=^i!Dq|~?LJj1}GCbr=VtbeX+vVaS zGU^!yOkq+v^D0xvy-$9!zTC^~WCm_tlEt3MP}O;~vqK-c|0gAHNcjxoMEPVKjzce0 z)sV?T0K6FH#kO*UAp2*A0(#J}DH zcTtroD2W1NA%_rDu9X4Z5`!U-lcH}MkKaWn`btAIZK|?3YI2evUKo5`{3_J_$mhXI z`FLdLsUe&n>|o`oa8L^d282EXN>Q0}F($Vlx)*a_x)K z-*bG|PJl56_NgZ_8pOa#al9O58nX`zgv~bHX?&lukqgA935zfuedAe6(97p^E8v?C z7N!gK+;*%=<~(==-Y&DUwObyGEmZv~9aBRxfL-5RGR3ns=L3*l|JNC1dLU@I2s z^u$0*LX3K;d9XHn`H!Wbhqx8$eoI}tc%`W2z;5%YcB$8a+(d<)g+;tykh@IKOAB~1 z*h;use8=RF<)3g{TRvx*=`GbR1sx_r2jej_Mth3N8(*OM?Go}Yj7+u00f7q1$L4Z^Wc~jZ`@Fwd4wK_{a zL3oCILX`K)OuA-&;>X#c17vQv_(@j}QZ4sT??%50gW`tfLMrL@+(m4tfz1NcgRZIS zXas8;16(Itm=s5%kX=RnWl#cH)w^F{bq}!kJEnNSo2U6`ZeQANNRCk-S@+@}aU18L zvBD5Fa`dvcypMd0mvpM=#7ATJsZ)AW`X5kRNg?OjmP&c3 zZkq!w>V1zuT80f;`3|Z6r(Fxc--TQEyvE-GI;h0#hXs>|cFZGW=R=oA*(yRO*$XFD zYDT2{`T8gbomh9mtCdZ;U!M1|2c8FClClevrOFC z{XX(YglUZ>A?nNw-0WDR>03K}OxnL-3=3r#O$UVX3uOA<6=l;W_+$CZJH@1Oy$}#A z<6i0A;NY&BtlyFdB*Vsnf{|IlZJ&y#8L#{A8o*F&gi4B{c*v1gG!54;xmi~6oE#yt z9cC5fZnvG@Y_)uS7jjWbg6^EKV~5N4WOZ^Dv{WsGZl-A5q~{n*Qied2zhyWe+UinR zhZyC)23KFd{zqmpWY$wJNUMdFkz6ZqF|_zdQoAMz zYHFb+PpB5c56h9=`)2M%CfhBemn6;vX^K02U2c~I#0_(UD}2nBeWP}nUvz-F2RM3; zedb*Yk$myr-dg(Me^o`X$7(#Sj5S54dDTptmTc)ScnY0P|r1&Uv82MviXmD}Pgi z4rkM{=+jdN$_+UZxx_t>t;+#2%g?g)NhDP9jZ32|CRKy1GMVpNZ3n$Z@~NgpMDe%U z8}Sgu_De$2E6+p4ZNYy6?4t>JQ!qhJGAcOIUBZty*d)*%5EfbQ#`*|*NWFclNZpn* zKc~n5tZ}K2z`~8N_^GpDXhd?O#)Tid#KTF3(M2(Q40G>X-XhLj4PMNd6Q4>B@zOQ^ z{*|3Fqekh4kV0qn6h##6QY!;RF6g~ zLt;Qe-7^h)4T`P%^I96W!Y6KYsc#KMlwbb-lWv6o!~02-pI#Tr(dqnENDIbQ`fu@n zQ;g$s`-kdhTmW}~>NfBfNJ+sMce<4roj>_&PBulUd6!EBF&3CWW9dvI9x{G`g+H!9Zf96cl>ym4=M!F2r$28oluwNMXag5jWx|`K zd!yJm?PFc>Jsfni&g9x#90zSC3SbK5xy5w*fDz^S-v}4|3j@%Liqzl68)ax=8nQ?- z=pyqbo-VfD>yP`=105RucSKL%hh(V_(2(Tc(wCtId#>wy_!^pLY+^cSMBoY;!PaFB zn3g>tL=;ej)Ii$OKZ%pcS)c?Ywm^1&p?*^MwJqN1>AVf7{5yVg0= z2vRk&JqvBU>TVVvPV&D0PkRez5oOMx!>NCyQYom@z)@#S(6iR$J8UI^?EAQYC?{W% zt&$kk@~OSGS1GGO@$7E@UzpU6y_yh1~STj^rVE}c&ia%dNG9G}$nz9q{5kVgJ}nN@l!kr- zJ=w*2fU*{4lTMv~-&}*KVc78r0#g-J&r?!f^gX2e%VShsfAJIJk?sWD+OZ|ASbf zksK3z(6~G`g6pl6rWmDupBiVh%=NKNQu`9vaHAK)mD46LZ*r;ufkwhmo$fSpzz%7_ zY8^jmyu*FpX{>ftG_V2KXc_LAT#kQBew-C0^5ZvXS|E#Dd`gfkwB#>FAB$2`8RmzZ z5lK!QFwfT`Mh9+ek;!s9@n1*^6?xoo9(@Pqm+nWU7I{r)zdqQR${Oqo*Oh7}Yl+>rdeMThl`Y<_7p9WQV*HdnJD zfU;|-idigpDfrLM4-29|XGmRA9cs_jW5;4VZ>9;h0WLDkdsF}bX~FJzQd@UH*`t)^*! zB8IXXVG83}u_3uilM?>@3Os{fH;zQB;pCz>M*;L%n@mFWhU{@Da{lQ;?-e7Y$DOej z-ZwK|E=+lT9C-WyK%k75BF^o3fas#iPs)=mk>``0hOxC270r|-pAH$Qpz%H<#GnII zYYnC%T79t|FJ7*xQ~)JjAFbLvo1oJfxyQLP*0Zm%0DK1bMJ7w6NXS-0GPsZZ8 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