From 45b394185ab64d4f492a1b676bce66c186f391bf Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Tue, 4 Feb 2025 11:57:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=EF=BC=9A=E8=83=BD=E5=A4=9F=E6=89=93=E5=8C=85=20exe=20=E8=BF=90?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +- Makefile | 366 ------------------ kvmd-launcher.py | 59 ++- kvmd/apps/kvmd/info/extras.py | 2 +- kvmd/apps/kvmd/info/hw.py | 26 +- kvmd/apps/kvmd/streamer.py | 2 +- kvmd_data/etc/kvmd/main.yaml | 2 +- kvmd_data/etc/kvmd/meta.yaml | 2 +- kvmd_data/etc/kvmd/override.yaml | 11 +- kvmd_data/usr/bin/ustreamer | Bin 438592 -> 0 bytes kvmd_data/usr/share/kvmd/platform | 6 +- kvmd_data/usr/share/kvmd/web/kvm/index.html | 2 +- .../usr/share/kvmd/web/kvm/window-stream.pug | 2 +- .../kvmd/web/share/js/kvm/stream_mjpeg.js | 5 +- quick_start.sh | 317 --------------- tools/test_video.py | 29 ++ ustreamer-win/mjpeg_stream.py | 194 +++++----- ustreamer-win/ustreamer-win.py | 37 +- 18 files changed, 222 insertions(+), 846 deletions(-) delete mode 100644 Makefile delete mode 100755 kvmd_data/usr/bin/ustreamer delete mode 100755 quick_start.sh create mode 100644 tools/test_video.py diff --git a/.gitignore b/.gitignore index 744d9f68..7b477c26 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ *.pyc *.swp /venv/ -.vscode/settings.j/son +.vscode/settings.json kvmd_config/ __pycache__/ kvmd_data/run/kvmd/* @@ -30,3 +30,7 @@ kvmd-launcher.dist kvmd-launcher.onefile-build ustreamer/ node_modules/ +build/ +*/dist/* +*/build/* +*.spec \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 4941bf4c..00000000 --- a/Makefile +++ /dev/null @@ -1,366 +0,0 @@ --include config.mk - -TESTENV_IMAGE ?= kvmd-testenv -TESTENV_HID ?= /dev/ttyS10 -TESTENV_VIDEO ?= /dev/video0 -TESTENV_GPIO ?= /dev/gpiochip0 -TESTENV_RELAY ?= $(if $(shell ls /dev/hidraw0 2>/dev/null || true),/dev/hidraw0,) - -LIBGPIOD_VERSION ?= 1.6.3 - -USTREAMER_MIN_VERSION ?= $(shell grep -o 'ustreamer>=[^"]\+' PKGBUILD | sed 's/ustreamer>=//g') - -DEFAULT_PLATFORM ?= v2-hdmiusb-rpi4 - -DOCKER ?= docker - - -# ===== -define optbool -$(filter $(shell echo $(1) | tr A-Z a-z),yes on 1) -endef - - -# ===== -all: - @ echo "Useful commands:" - @ echo " make # Print this help" - @ echo " make testenv # Build test environment" - @ echo " make tox # Run tests and linters" - @ echo " make tox E=pytest # Run selected test environment" - @ echo " make gpio # Create gpio mockup" - @ echo " make run # Run kvmd" - @ echo " make run CMD=... # Run specified command inside kvmd environment" - @ echo " make run-cfg # Run kvmd -m" - @ echo " make run-ipmi # Run kvmd-ipmi" - @ echo " make run-ipmi CMD=... # Run specified command inside kvmd-ipmi environment" - @ echo " make run-vnc # Run kvmd-vnc" - @ echo " make run-vnc CMD=... # Run specified command inside kvmd-vnc environment" - @ echo " make regen # Regen some sources like keymap" - @ echo " make bump # Bump minor version" - @ echo " make bump V=major # Bump major version" - @ echo " make release # Publish the new release (include bump minor)" - @ echo " make clean # Remove garbage" - @ echo " make clean-all # Remove garbage and test results" - @ echo - @ echo "Also you can add option NC=1 to rebuild docker test environment" - - -testenv: - $(DOCKER) build \ - $(if $(call optbool,$(NC)),--no-cache,) \ - --rm \ - --tag $(TESTENV_IMAGE) \ - --build-arg LIBGPIOD_VERSION=$(LIBGPIOD_VERSION) \ - --build-arg USTREAMER_MIN_VERSION=$(USTREAMER_MIN_VERSION) \ - -f testenv/Dockerfile . - test -d testenv/.ssl || $(DOCKER) run --rm \ - --volume `pwd`:/src:ro \ - --volume `pwd`/testenv:/src/testenv:rw \ - -t $(TESTENV_IMAGE) bash -c " \ - groupadd kvmd-nginx \ - && groupadd kvmd-vnc \ - && /src/scripts/kvmd-gencert --do-the-thing \ - && /src/scripts/kvmd-gencert --do-the-thing --vnc \ - && chown -R root:root /etc/kvmd/{nginx,vnc}/ssl \ - && chmod 664 /etc/kvmd/{nginx,vnc}/ssl/* \ - && chmod 775 /etc/kvmd/{nginx,vnc}/ssl \ - && mkdir /src/testenv/.ssl \ - && mv /etc/kvmd/nginx/ssl /src/testenv/.ssl/nginx \ - && mv /etc/kvmd/vnc/ssl /src/testenv/.ssl/vnc \ - " - - -tox: testenv - time $(DOCKER) run --rm \ - --volume `pwd`:/src:ro \ - --volume `pwd`/testenv:/src/testenv:rw \ - --volume `pwd`/testenv/tests:/src/testenv/tests:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - -t $(TESTENV_IMAGE) bash -c " \ - cp -a /src/testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /src/testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && cp /src/testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main.yaml /etc/kvmd/main.yaml \ - && mkdir -p /etc/kvmd/override.d \ - && cp /src/testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && cd /src \ - && $(if $(CMD),$(CMD),tox -q -c testenv/tox.ini $(if $(E),-e $(E),-p auto)) \ - " - - -$(TESTENV_GPIO): - test ! -e $(TESTENV_GPIO) - sudo modprobe gpio-mockup gpio_mockup_ranges=0,40 - test -c $(TESTENV_GPIO) - - -run: testenv $(TESTENV_GPIO) - - $(DOCKER) run --rm --name kvmd \ - --privileged \ - --volume `pwd`/testenv/run:/run/kvmd:rw \ - --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/kvmd:/kvmd:ro \ - --volume `pwd`/testenv/env.py:/kvmd/env.py:ro \ - --volume `pwd`/web:/usr/share/kvmd/web:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - --device $(TESTENV_VIDEO):$(TESTENV_VIDEO) \ - --device $(TESTENV_GPIO):$(TESTENV_GPIO) \ - $(if $(TESTENV_RELAY),--device $(TESTENV_RELAY):$(TESTENV_RELAY),) \ - --publish 8080:8080/tcp \ - --publish 4430:4430/tcp \ - -it $(TESTENV_IMAGE) /bin/bash -c " \ - mkdir -p /tmp/kvmd-nginx \ - && mount -t debugfs none /sys/kernel/debug \ - && test -d /sys/kernel/debug/gpio-mockup/`basename $(TESTENV_GPIO)`/ || (echo \"Missing GPIO mockup\" && exit 1) \ - && (socat PTY,link=$(TESTENV_HID) PTY,link=/dev/ttyS11 &) \ - && cp -r /usr/share/kvmd/configs.default/nginx/* /etc/kvmd/nginx \ - && cp -a /testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && cp /testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main/$(if $(P),$(P),$(DEFAULT_PLATFORM)).yaml /etc/kvmd/main.yaml \ - && ln -s /testenv/web.css /etc/kvmd/web.css \ - && mkdir -p /etc/kvmd/override.d \ - && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && python -m kvmd.apps.ngxmkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf \ - && nginx -c /etc/kvmd/nginx/nginx.conf -g 'user http; error_log stderr;' \ - && ln -s $(TESTENV_VIDEO) /dev/kvmd-video \ - && ln -s $(TESTENV_GPIO) /dev/kvmd-gpio \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.kvmd --run) \ - " - - -run-cfg: testenv - - $(DOCKER) run --rm --name kvmd-cfg \ - --volume `pwd`/testenv/run:/run/kvmd:rw \ - --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/kvmd:/kvmd:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - -it $(TESTENV_IMAGE) /bin/bash -c " \ - cp -a /testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && cp /testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main.yaml /etc/kvmd/main.yaml \ - && mkdir -p /etc/kvmd/override.d \ - && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.kvmd -m) \ - " - - -run-ipmi: testenv - - $(DOCKER) run --rm --name kvmd-ipmi \ - --volume `pwd`/testenv/run:/run/kvmd:rw \ - --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/kvmd:/kvmd:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - --publish 6230:623/udp \ - -it $(TESTENV_IMAGE) /bin/bash -c " \ - cp -a /testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && cp /testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main.yaml /etc/kvmd/main.yaml \ - && mkdir -p /etc/kvmd/override.d \ - && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.ipmi --run) \ - " - - -run-vnc: testenv - - $(DOCKER) run --rm --name kvmd-vnc \ - --volume `pwd`/testenv/run:/run/kvmd:rw \ - --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/kvmd:/kvmd:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - --publish 5900:5900/tcp \ - -it $(TESTENV_IMAGE) /bin/bash -c " \ - cp -a /testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && cp /testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main.yaml /etc/kvmd/main.yaml \ - && mkdir -p /etc/kvmd/override.d \ - && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.vnc --run) \ - " - - -regen: keymap pug - - -keymap: testenv - $(DOCKER) run --user `id -u`:`id -g` --rm \ - --volume `pwd`:/src \ - -it $(TESTENV_IMAGE) bash -c "cd src \ - && ./genmap.py keymap.csv kvmd/keyboard/mappings.py.mako kvmd/keyboard/mappings.py \ - && ./genmap.py keymap.csv hid/arduino/lib/drivers/usb-keymap.h.mako hid/arduino/lib/drivers/usb-keymap.h \ - && ./genmap.py keymap.csv hid/arduino/lib/drivers-avr/ps2/keymap.h.mako hid/arduino/lib/drivers-avr/ps2/keymap.h \ - && ./genmap.py keymap.csv hid/pico/src/ph_usb_keymap.h.mako hid/pico/src/ph_usb_keymap.h \ - " - - -pug: testenv - $(DOCKER) run --user `id -u`:`id -g` --rm \ - --volume `pwd`:/src \ - -it $(TESTENV_IMAGE) bash -c "cd src \ - && pug --pretty web/index.pug -o web \ - && pug --pretty web/login/index.pug -o web/login \ - && pug --pretty web/kvm/index.pug -o web/kvm \ - && pug --pretty web/ipmi/index.pug -o web/ipmi \ - && pug --pretty web/vnc/index.pug -o web/vnc \ - " - - -release: - make clean - make tox - make clean - make push - make bump V=$(V) - make push - make clean - - -bump: - bumpversion $(if $(V),$(V),minor) - - -push: - git push - git push --tags - - -clean: - rm -rf testenv/run/*.{pid,sock} build site dist pkg src v*.tar.gz *.pkg.tar.{xz,zst} *.egg-info kvmd-*.tar.gz - find kvmd testenv/tests -name __pycache__ | xargs rm -rf - make -C hid/arduino clean - make -C hid/pico clean - - -clean-all: testenv clean - make -C hid/arduino clean-all - make -C hid/pico clean-all - - $(DOCKER) run --rm \ - --volume `pwd`:/src \ - -it $(TESTENV_IMAGE) bash -c "cd src && rm -rf testenv/{.ssl,.tox,.mypy_cache,.coverage}" - - -.PHONY: testenv - -run-stage-0: - $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd-stage-0 \ - --allow security.insecure --progress plain \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - -f build/Dockerfile-stage-0 . \ - --push - $(DOCKER) buildx build -t silentwind0/kvmd-stage-0 \ - --allow security.insecure --progress plain \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - -f build/Dockerfile-stage-0 . \ - --push - -run-build-dev: - $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - --build-arg CACHEBUST=$(date +%s) --allow security.insecure \ - -f build/Dockerfile . \ - --push - $(DOCKER) buildx build -t silentwind0/kvmd:dev \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - --build-arg CACHEBUST=$(date +%s) --allow security.insecure \ - -f build/Dockerfile . \ - --push - -run-build-new: - $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \ - --platform linux/amd64 \ - --build-arg CACHEBUST=$(date +%s) \ - -f build/Dockerfile . \ - --load - -run-build-release: - $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd \ - --progress plain \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - --build-arg CACHEBUST=$(date +%s) \ - -f build/Dockerfile . \ - --push - $(DOCKER) buildx build -t silentwind0/kvmd \ - --progress plain \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ - --build-arg CACHEBUST=$(date +%s) \ - -f build/Dockerfile . \ - --push - -run-nogpio: testenv - - $(DOCKER) run --rm --name kvmd \ - --privileged \ - --volume `pwd`/testenv/run:/run/kvmd:rw \ - --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/kvmd:/kvmd:ro \ - --volume `pwd`/testenv/env.py:/kvmd/env.py:ro \ - --volume `pwd`/web:/usr/share/kvmd/web:ro \ - --volume `pwd`/extras:/usr/share/kvmd/extras:ro \ - --volume `pwd`/configs:/usr/share/kvmd/configs.default:ro \ - --volume `pwd`/contrib/keymaps:/usr/share/kvmd/keymaps:ro \ - --device $(TESTENV_VIDEO):$(TESTENV_VIDEO) \ - $(if $(TESTENV_RELAY),--device $(TESTENV_RELAY):$(TESTENV_RELAY),) \ - --publish 8080:8080/tcp \ - --publish 4430:4430/tcp \ - -it $(TESTENV_IMAGE) /bin/bash -c " \ - mkdir -p /tmp/kvmd-nginx \ - && mount -t debugfs none /sys/kernel/debug \ - && (socat PTY,link=$(TESTENV_HID) PTY,link=/dev/ttyS11 &) \ - && cp -r /usr/share/kvmd/configs.default/nginx/* /etc/kvmd/nginx \ - && cp -a /testenv/.ssl/nginx /etc/kvmd/nginx/ssl \ - && cp -a /testenv/.ssl/vnc /etc/kvmd/vnc/ssl \ - && touch /etc/kvmd/.docker_flag \ - && cp /testenv/platform /usr/share/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.yaml /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/*.secret /etc/kvmd \ - && cp /usr/share/kvmd/configs.default/kvmd/main.yaml /etc/kvmd/main.yaml \ - && ln -s /testenv/web.css /etc/kvmd/web.css \ - && mkdir -p /etc/kvmd/override.d \ - && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && python -m kvmd.apps.ngxmkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf \ - && nginx -c /etc/kvmd/nginx/nginx.conf -g 'user http; error_log stderr;' \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.kvmd --run) \ - " -nuitka: - python3.11 -m nuitka kvmd-launcher.py --standalone --onefile --no-deployment-flag=self-execution --include-module=\ -kvmd.plugins.auth.htpasswd,kvmd.plugins.auth.http,kvmd.plugins.auth.ldap,\ -kvmd.plugins.auth.pam,kvmd.plugins.auth.radius,\ -kvmd.plugins.hid.ch9329,kvmd.plugins.hid.bt,kvmd.plugins.hid.otg,\ -kvmd.plugins.atx.disabled,kvmd.plugins.atx.gpio,\ -kvmd.plugins.msd.disabled,kvmd.plugins.msd.otg,\ -kvmd.plugins.ugpio.gpio,kvmd.plugins.ugpio.wol,kvmd.plugins.ugpio.cmd,\ -kvmd.plugins.ugpio.ipmi,kvmd.plugins.ugpio.anelpwr,kvmd.plugins.ugpio.cmdret,\ -kvmd.plugins.ugpio.extron,kvmd.plugins.ugpio.ezcoo,kvmd.plugins.ugpio.hidrelay,\ -kvmd.plugins.ugpio.hue,kvmd.plugins.ugpio.locator,kvmd.plugins.ugpio.noyito,\ -kvmd.plugins.ugpio.otgconf,kvmd.plugins.ugpio.pway,kvmd.plugins.ugpio.pwm,\ -kvmd.plugins.ugpio.servo,kvmd.plugins.ugpio.tesmart,kvmd.plugins.ugpio.xh_hk4401,\ -passlib.handlers.sha1_crypt,pygments.formatters.terminal \ No newline at end of file diff --git a/kvmd-launcher.py b/kvmd-launcher.py index 5ca4ae3f..ef44b340 100644 --- a/kvmd-launcher.py +++ b/kvmd-launcher.py @@ -1,11 +1,68 @@ +import multiprocessing +import os +import sys from kvmd.apps.kvmd import main as kvmd_main + +import fileinput + +# 文件路径 +file_path = '_internal/kvmd_data/etc/kvmd/kvmd_data/etc/kvmd/override.yaml' + +# 使用fileinput.input进行原地编辑 + + +def resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + base_path = sys._MEIPASS + else: + base_path = os.path.abspath(".") + return os.path.join(base_path, relative_path) + +def replace_streamer_command(override_config_path): + lines_to_replace = [ + " - \"C:/Users/mofen/miniconda3/python.exe\"\n", + " - \"ustreamer-win/ustreamer-win.py\"\n" + ] + new_line = " - \"ustreamer-win.exe\"\n" + + with open(override_config_path, 'r', encoding='utf-8') as file: + lines = file.readlines() + + with open(override_config_path, 'w', encoding='utf-8') as file: + i = 0 + while i < len(lines): + if lines[i] in lines_to_replace: + if i + 1 < len(lines) and lines[i + 1] == lines_to_replace[1]: + file.write(new_line) + i += 2 + continue + file.write(lines[i]) + i += 1 + def start(): + main_config_path = resource_path('kvmd_data/etc/kvmd/main.yaml') + override_config_path = resource_path('kvmd_data/etc/kvmd/override.yaml') + flag_path = resource_path('kvmd_data/run_flag') + + + + if not os.path.exists(flag_path): + with fileinput.input(override_config_path, inplace=True) as file: + for line in file: + updated_line = line.replace('kvmd_data/', '_internal/kvmd_data/') + print(updated_line, end='') + with open(flag_path, 'w') as flag_file: + flag_file.write("1") + + replace_streamer_command(override_config_path) + custom_argv = [ 'kvmd', - '-c', 'kvmd_data/etc/kvmd/main.yaml', + '-c',main_config_path, '--run' ] kvmd_main(argv=custom_argv) if __name__ == '__main__': + multiprocessing.freeze_support() start() \ No newline at end of file diff --git a/kvmd/apps/kvmd/info/extras.py b/kvmd/apps/kvmd/info/extras.py index 6cae6574..80dbfc44 100644 --- a/kvmd/apps/kvmd/info/extras.py +++ b/kvmd/apps/kvmd/info/extras.py @@ -53,7 +53,7 @@ class ExtrasInfoSubmanager(BaseInfoSubmanager): await sui.open() except Exception as ex: if not os.path.exists("/etc/kvmd/.docker_flag") or not sys.platform.startswith('linux'): - get_logger(0).error("Can't open systemd bus to get extras state: %s", tools.efmt(ex)) + get_logger(0).error("Can't open systemd bus to get extras state.") sui = None try: extras: dict[str, dict] = {} diff --git a/kvmd/apps/kvmd/info/hw.py b/kvmd/apps/kvmd/info/hw.py index db91e586..bc4af604 100644 --- a/kvmd/apps/kvmd/info/hw.py +++ b/kvmd/apps/kvmd/info/hw.py @@ -83,9 +83,9 @@ class HwInfoSubmanager(BaseInfoSubmanager): ) return { "platform": { - "type": "rpi", + "type": "windows", "base": base, - "serial": serial, + "serial": "windows1000000000", **platform, # type: ignore }, "health": { @@ -124,7 +124,7 @@ class HwInfoSubmanager(BaseInfoSubmanager): self.__dt_cache[name] = (await aiotools.read_file(path)).strip(" \t\r\n\0") except Exception as err: #get_logger(0).warn("Can't read DT %s from %s: %s", name, path, err) - return None + return "windows" return self.__dt_cache[name] async def __read_platform_file(self) -> dict: @@ -142,8 +142,8 @@ class HwInfoSubmanager(BaseInfoSubmanager): "board": parsed["PIKVM_BOARD"], } except Exception: - get_logger(0).exception("Can't read device model") - return {"model": None, "video": None, "board": None} + #get_logger(0).exception("Can't read device model") + return {"model": "V2", "video": "USB_VIDEO", "board": "Windows"} async def __get_cpu_temp(self) -> (float | None): temp_path = f"{env.SYSFS_PREFIX}/sys/class/thermal/thermal_zone0/temp" @@ -155,21 +155,9 @@ class HwInfoSubmanager(BaseInfoSubmanager): async def __get_cpu_percent(self) -> (float | None): try: - st = psutil.cpu_times_percent() - user = st.user - st.guest - nice = st.nice - st.guest_nice - idle_all = st.idle + st.iowait - system_all = st.system + st.irq + st.softirq - virtual = st.guest + st.guest_nice - total = max(1, user + nice + system_all + idle_all + st.steal + virtual) - return int( - st.nice / total * 100 - + st.user / total * 100 - + system_all / total * 100 - + (st.steal + st.guest) / total * 100 - ) + return int(psutil.cpu_percent(interval=1)) except Exception as ex: - #get_logger(0).error("Can't get CPU percent: %s", ex) + get_logger(0).error("Can't get CPU percent: %s", ex) return None async def __get_mem(self) -> dict: diff --git a/kvmd/apps/kvmd/streamer.py b/kvmd/apps/kvmd/streamer.py index 0f117e4a..82a7f524 100644 --- a/kvmd/apps/kvmd/streamer.py +++ b/kvmd/apps/kvmd/streamer.py @@ -418,7 +418,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes await self.__start_streamer_proc() assert self.__streamer_proc is not None await aioproc.log_stdout_infinite(self.__streamer_proc, logger) - raise RuntimeError("Streamer unexpectedly died") + logger.exception("Streamer unexpectedly died") except asyncio.CancelledError: break except Exception: diff --git a/kvmd_data/etc/kvmd/main.yaml b/kvmd_data/etc/kvmd/main.yaml index 6d60dcf2..d54f79ed 100644 --- a/kvmd_data/etc/kvmd/main.yaml +++ b/kvmd_data/etc/kvmd/main.yaml @@ -2,7 +2,7 @@ # Use override.yaml to modify required settings. # You can find a working configuration in /usr/share/kvmd/configs.default/kvmd. -override: !include [override.d, override.yaml] +override: !include [override.yaml] logging: !include logging.yaml diff --git a/kvmd_data/etc/kvmd/meta.yaml b/kvmd_data/etc/kvmd/meta.yaml index f024a83f..43bf3591 100644 --- a/kvmd_data/etc/kvmd/meta.yaml +++ b/kvmd_data/etc/kvmd/meta.yaml @@ -4,7 +4,7 @@ # will be displayed in the web interface. server: - host: docker + host: windows kvm: { base_on: PiKVM, diff --git a/kvmd_data/etc/kvmd/override.yaml b/kvmd_data/etc/kvmd/override.yaml index 40f04548..70f81f55 100644 --- a/kvmd_data/etc/kvmd/override.yaml +++ b/kvmd_data/etc/kvmd/override.yaml @@ -40,12 +40,11 @@ kvmd: keymap: kvmd_data/usr/share/kvmd/keymaps/en-us msd: - #type: otg - remount_cmd: /bin/true - msd_path: /var/lib/kvmd/msd - normalfiles_path: NormalFiles - normalfiles_size: 256 + type: disabled + log_reader: + enabled: false + ocr: langs: - eng @@ -53,7 +52,7 @@ kvmd: streamer: resolution: - default: 1280x720 + default: 1920x1080 forever: true diff --git a/kvmd_data/usr/bin/ustreamer b/kvmd_data/usr/bin/ustreamer deleted file mode 100755 index 8c0a15719079818109cb6a4e9a4617286dedc9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438592 zcmeEvX?PSx7w!ZS4GK(9P*jkhg9c?ufFLNN8A))WL4)idBmn|MvXM*>1ax9%Aj2>M z3WACXii(N~3J9o}u%m*2ir^abLwjTgWl zI77e2igfjHrF_llrjBb14%_sr-a@)kKC3^ki*xj=EsoQaFNSV2Ijvp;XLv*OtDKM3 zmnmvhu3ZlDmg!eHAL(ZK?Obom?~S}>H{TG?G zPiR6Q|9%nbv^^;5v+9RT(GU8S_omI(F+Xoa*Df9NN43w-D=eGXeqy(-?YnmAP+HWX z6RVhHkHew54dLoa-volxg|~-+)`h=- z*4KqUWs$y-MZLFMq~B@L{$z{v?_1zoEcBCOA@3y?^>(OZlRxL7J4{m(Vh(!=`XeD#|9SV#984MdebcG z&9IQSqlLV$SlG`m7VQ~gQEzt({D_4f9<*rZofh>@x9HzTE$m^iMZLKe<$q<-{x%ln zEU{?MRtr5Zvyk^Gi~fDVLarkg>9YPE&l zf)?q2wrEdRi*gby^x&~*=K_mzsx16ypN0OHS+w&xi}VQ=aUjd0-d`=`deXvv)?3JX z!6JRgqJQUF$dzw_UuDtGbr${mtwnntv}k{&g+8ycz+bay=j9gd$+c+DeHM1|goWNd zwy3whg??%*>aDSmtIz_^whxaVX@mkg?{60EUu$8X<1G9-&%#cYTIj8fg}n{6D5tSSJ2Nfx)7S$4+@hQ(Eacs9 z(f;o&^m*C>pKPJGZWi*sYhe%LEZP%qk$$s$9J7$Ck41aXy|#G#Q~&l_ zl#^l6&dV;VdtLLoMgO+3DCa8+{6mZO+pNmB&`*p-`Asb3Z3)H1tI7f0&H_JY(N5YI zs%zc1)1p1AEXsKj>6_TDv&Cn_LGTCh+26GwZxHwL-PtLev} zBEr2&Im1PJvK8ExmENy+)~MW)+%b8jp4^gty?f>t73TKK8IhlB%gP#4P*j*z>d7hb zWM%QBbtWt+Dk~gi%P$&}lxTanICo4|L2f}-X~{@VjLs{}D;%qV`;1C3ut6fVPWn_PagVc zbV)9iz*0)^7>LX3$(@i}=s^nnH>)uB5j|~5?)Wk^Ig1jOmE`Gg&d8Cu#h$FvqLJfr zJvOO?tlUCo8ZyMy&k<3>sN8(Ls8WZ&kL-LD?ibtTs$LU!{=I7>=2aAS5W53otQ;-Z=--Uw!|owbIJ-CuYgoO z(pFZQpPOse{BTiTp$$D&oHxo=P*zxwW3qT|vsF2zrMVb_M(5<^+enCq5f-zu5K=~p z!KokzWuf&_8%M)*MzUrhacSNdbSCwJ-gG86V2Ecc9b1rvrsfrr)DWa_WDeH>2~|9a z3h@+;%QB@yzJi?6aW)KdRAy;zKEklAjA7vA78H9X5u>OWL+2POv`}gpH0zmEoSQX* zG)EdhGTb6^lp-X;{36;oqNFHi6vhG%Z=2pUNLOkbJvzUvbS!H>8I&y_W2%&$jeykp zLXragIHnMG&pQKXK62nPs;rm2w+>fNYuC|QyyYKFsnw8ig*}Uy)y9aR3tWF&|aroZMw0p9;p$r}G z+}XHIN;Yo08FyWbJ2T;J29_kCgp}`+9h)8HK0S zQFwY9&HfQZ|GPxcmx4#!7m278eVpu7>?D`Dh?TN;dTi!ORQEw$r$5S)`O8<+3 z^duSO*4smQu3&UM{P#-yYYIgFUjx<-o|czE|JAjjOGR30%E~a)P@a0W$FL@%=gNur zSC%*xE1oNDa|Jem(M@bGfu=vIvz6e*gD$%^4=c-9+nW-9VybXal? z>7%~wZo&63x}NQR(DbLD^U&9|#p5`>Mx6i9@kD`FDfrYrP$&L&DfkltuTk*n0zad3zES+$r!B1%FADld0gZ3p`uF-x7GSfP$lE_w!5a#^ zSi!Fr_(TQ2PT*bzZ!Pdj1=rKhR`7Nr{Q?EQN#KhVysN;MDtMy6mn(S7I4d0^g?K_XvEKg7*>lJ_YYD@EQdlDR51}#|Zqmg8K!2R>Af3w%(EU91!Va6+9&H zI0b)C;LR2MHG#(~_^8=jpD7C7SNLPLg6HV*LBWSS$;(-!;5h=XQt}e z@Dv4KC-7_q-zIRcf@^yF75tpueg)4K{a&NsyG8jnI^cjmecWsurQkn_cGf8PX}$e@BHKSfloPMu(X)j8EBH*2K3lBV!9Nw{ zS1EWuk-kR3a|CYd8`=IJL^<&aULew^DEKjvK3l;jiS%9tuMqem1%FE5RSN!+z-ttI zrNC|dBHO=3;PDFng}_r3{0D(&D|lGoUIjld@I?yVSomp`f;ZRwSHW)EjiArNC1Z ze4HpJTfxui?N@NG-hKt2tG8dl8;7`lY83osz5N3t+yA=2;}!f}fu|_=DuHJ!_!fbC z75poKFH-RR0NI0Fr*8jXxIjeLK*NH>8Tv&`_#clq1B^-}{jlW6> z$D>%|Z?=T7{cpL1>titS)<`%O#KvEhgkyGzqs$_;CrR^}GIeR>GU;AYF%={USf_j+O8$ zrSx$UPUrjezvdDyUNK;-cnQ~E{UAnygkP-}f@`9LH<$2k5`K+@r%3p<67H7p>m)o= z!u5A;h&@Qc=?sDXmo4Gf>maUUCA^h{7fX1&gin<4))MZOaQQqyrG(!orJpU~4hdf% z;cX;*k%ZqQ;Y%g_W(i*|;RzDHM#9@lc$I|TBH`O4{8kCyCE;`?L;u?+;q7%0*BS}$ zAmN&Xca-qs5>ESn`rlazPtrlUK4jW|Ckc<0@Xit*C*icWtN%5Z@MImtHD1EIN_c{V z-zMRS65dV1yGeL=2~Uym+a=sB;de-QriAy9@IexOr-Wxq_+1h{R>D&xyja3r5;n_NfYq5mqNccnvA0gph2_Grpl@dNm!e>i(u7od;@X->!NW#ZR_)-ZUE8)u} zJWs;cNch7NUM1no!XK6J6bYX!;cf|^BH@`5 zK2^d8N%&(Do-N^zOZZp`_eyxNgqKVBLox0?vwD@67HAq1rk0@!WT*S zbO~Q7;gu4;T*3nqzDB}lNO+Zm2PJ%)gwK@lT@oIW@O={gq=eT<_$&$6Bz(4nAD8es z5`I>~pOSE!SPxzb>}d&)mGHR|9w*`RB)qwVKO^Ds5V}gug1` zvnBjB311-LuS@tM312GVOC|gb312SZ%Ore_gugA}RTBP=gm07ZcP0G4+y6B1p9cQZ zz<(O}PXqsH;6Dxgr-A=8@Sg_$)4+ck_)i1>KQwU4e*ItWio>z)V9b8|B{sLe%2Tg) zm%Cz9>_%37ZSvihU1B>~+omTj_Et7Z&-O=8h7Z)%*3M>h6q23{?>6XqjIK85`ix#- z(9w)uY|t@`o@3Co1$i=DZqT$Db22>Mpko=GW6%v4-N&FWW3ltr&gcye@w{ zqYoH#Yew%j=o=VaZO}I|dWAtd7`@n_+c0{LLEpsaa)Z8^(c=v|fzdez-ImdP4Eh#E zyA1kPMkg6`J4UxQ==O|mV$dBJ9c9oR8GYg(UH(KyA28@7M(;N0PK>TL=+2B@VbEO| zz1X0W89m3KyE3}mpl@UJc!Tc7=p2LY&geb{eLJIF27L#klMK2CqgxxalhI8KnjUzf z{|)*sMxXdwmp_Hk2MpT9=-mc=H>0Z!x+kMo7<4M57aMdMqvsfOFGiOe^gWCoZ_sW= z=NNQ4qx%^2y^MAl^nHv@GUyCOw>IeBjBaAk_cJ=mpdVoLiNAFDGZ}rrp!+a-w?RM1 z=xT%R%jgvb-H*|W4Z1(0=NR+=Mwc7(Kt_)@=s}FmG3ddJ?qkqH80|9Xp^Q#4=!Y2H z+MtIqx`{#413&b?L1!`g#5rC5Y(^h2=p07xHs}$It~ThAj9y{TqZqx|pmP~L$Dl_u zy4;}0FnYW}(*SfboMX^=jP7I54>Q_j(Bl}LWYGDHZf(#7jBaAkg^Z3e=psg+IIGKF z%;*CKJ)Y6K4Z4KU)dpS4=oJR-Vf12yE@Si@gPy?Xa)W+^(c=wzBBOH*dJ?1i81$oz zb{X_!Mkg8c6h^l;=&6iuV$k%!3;l1rpV4y+dK#n44SG7G#~XAdqjL;8!00{(J%iCMgAOt}$)IO4y0t-v7~RC6pJa5D zLC<3JiPO6Lvl)HBpyx1pw?RL}=xT$0n$ar^dM=|E8}vLz&oSs{7+r4A^BFzfpcgPY z$Dp5ObRUC$j?pfIexA`u2ECBctquAGMmI6&7a1L8&@VCi#GktSix_>tpcgZGw?V(m z=xT$0h0!YvdI_T!8}zG;o@3CjF}mEKUuX1qgI>z$9D{y?(R~d1O-8$P8nf4f(KLI- zxI^<*&{Jz;BIq)OE>P%Pg&wBR{S~^mLZ>OTQ=yX;y1hcTQRtQm-AthyDRhiNpT7_( z|DOtdM4=BV^bZRCwL=(iR6RfT>*q30=dNTK}-JyoI06uLm6a}|1+ zLibnb-U^+j&`yO;R_OK$-A18XDs(f2ZlusL3Vr^((*Fv5M4=BV^bZRCwL=(iR6RfT>*q30=dNTK}-JyoI06uLm6a}|1+Libnb-U^+j&`yO;R_OK$-A18X zDs(f2ZlusL3Vr?`rT-QBh(aG!=pPjNYlYsS(3=(dV})L&&~GdBs|x*sLeEp^kV5+v zda6Q~DRhBC=PL9th3>D=y%jo5p`8kytkCThx{X4&ROn_3-AJKh6#D$%O8+bL5rsae z&_5{j*9yHup*Jh^#|phlq2E^MR~7mNg`TI-A%*rU^i+i|Q|JPP&Q<7P3f*6!dnS%fBMN;`p?^^5uN8WSLT^^+j}>~ALcguh zuPXEl3O!GuLkjIz=&1@_rqBfnovYBp6uQ4c_g3gMg?1`*vO>3)Y1cs409Sukzy5u( zQ#)vsI~d(20W(~8Al2bcs`A&`E5r3|w!ryM>H$p;{INCWD6-R^_BQtLGD6PPp#4=D zfm-{#m_4{pI<38r-5r0G-9HOiN868WcZVKwB--0%I1;y}Iuhx-QCcDv!0y10?!eac zz!vRgYzJfnehnPcw)LowYBp;rpHU+=YipK9;d;y+*peRDq}}pTeNbE7ftZP?NxLJy zo-HHrvpaA!14)97MgmL^RDs=x*oU3*RM4$Zo;#H4h-V3G-FX7Yp6ZCz7K=o`QK7*pNOW2|f;A;&Tq&?PVEYAD z&M@cg_ynhR5L$zHUFm*56iVXt;cC{xpK|e%&<&7H+mDW+GNC5w$vx}rq{zUJ8G$qQ zw*4H5+O|Jfg31hN*z4SV7Pevc?W9D(E{;z~?OLvA15qfW${oyi#GQ28Z%K7DKWQHx zvnnatrWK*S;=Ee(5X?qKqTGcmS7pIn9(4AJ&ry8)>V0n!HGo+GU9I;%SXONFnavUjjapJi+2_(+1i4bS; zsectG)NEqBF3V1&hb(>iKu9J|xE&r2e6kM3Lzvi;<7)V9D+u0ZuVQtW!_ z3nZBb)rGxWhH4bMj9naaViA`H#$i17h zFKLCsqd2=Bv1tbl?DshP6KdMeP$!!93zDv*4L7i#=Il&jZ{+Mv#D18wJ)C`jTD}Bq zd#e<-K2JK59@stHji6ESzvG$x(vqsky__dt=e5ml{4>V($LJ3BRVOLu5MJ$GQ2`^*8v z|K=IN%iX(w&j_`nT_c3jz3HL;QN8`!?Y`NtxZeI+PlNRCSKFU>5R}`0#O`Z{o21jw zBHVMw{}7_KhiOBI%avwd-L#=AG_hXboU8ihSaR2u}<4aJW9Exk5(Zq}`GQs=WdE z*_f6Q!03y)$Y$;I5k8__K#5*w?Fm$1_m^Kvs$1z;gj)D8Fbg@U=sT|FMW3|CH9K@m zG<5Y5OGP6Bw1o60?M={+7#cQcGf=iP%GqZPZj5pzn=1}Y$cNdb{?$heHa z33yiUV11iD(%p;(=_B1xh&OmR8{;tGH3CP|PLL@$qv$@L?x6(-f(AA9?hEf?uyCrko2C*sW%%Ue?9y3=O8w$V>`MNafay`nW2gHRmX*% z(fniDdl;pthJ!*Gq-V@Bn4amXxzGef&rhP$k*AV=oyzN+kMdAE{SqMQ*^64Zo^KY7 z|FW5(=Qb5>xt=K%*E8F-w>KHZ^t?&C0cA(%ISPg?>3IkhaIu~%;MKaGKRIUV`4q&1 zf|mixV%l~M(jG_uL(vO>Y4zzIYWR?wj&D96j2GeuMAp&A@!@oT{KTB@zyUa2QzT>Y zA=G{nvQy6S=qgg+&*&nWRAhvfIc!3Kbk%G}4Fw*Bp=z0jxb_yI=e*9rC3bHfDdx<$zp6xvqw3ebI-|RX#xN8wf%Y&*I(h`rnwPX^*aAK!jwCWHO}M67XHuM@4w?pu3UHUAxAb> z?pRXpPd7oi&!M0QJEYGWO3K}XMDD;trgD1+YBB<(-%LrrUC;pC<;OC!OKuIwHJIyn zh;|Ac4gEF*s69gW5V|8b5dSAvPyqf-dmQ*03~)#|mj!QWY4QxxxXU+DsF%j2*-+vB z!(4^C(Q9O%H|nMoTH;6%Dx|BHjp~F7f2HnNj;l(h}(&YSg$X_~)a6Onu>x;M{zE;|_ToiQF2>;YFmM_Ck&fxLP8& zhHfOmZU-co`I{oabu_A&uC@t@>TtD~AB3xgXJcKBI860s@_HMHdRJj>z!xJAIWl>@ zgQ(uYRBuzY-lrq$%|N0E%^6lW!l=3o3r^~~Dx>S36q>o+sCpse@~+z^x^CZ%Xu#9I zDuUB52T6i|hC~q!;9ZxBn8{Z}DWr4QBPJV0{f$NaWOXDu2H-{yqaYf9DHU%Adz@)+ zlEDUsYOR6Vk~K8om;k1i4=Lg6>y9oz6hKe)bloT3C8^RZlVONDF zI|OSjP%HW5d<^kkXPYn!Yrj%Nf?~b!O)kqSm>$il63Y^Xy--sEv9^1uts3> z2xuiyc*8bKbjS`e>$U@ewWhytJD}gM^EzAp#$xlkOob~Qy9@_=o12S&FnU$D1LAT! z*hhEV4pySQ0QJ2a`>fK)$b7g}op$i{ce*t%M%{>O!Je_`U^rttEl2p%ZA_e%j_ixX zIZb9wu$G4E$*gmjIQP@9u%*K7+Sz@43vH$2xFHkin{3+;7jR=eK^zu5*m!f+kcou^ z?Yje!f<2i|f>mI;9<~3dK1ELpoaM9hkRi`ae7;Q9x&Y3UG4gC0R%8A~P$bQay>$yi zur?7@k}%s)lh;{(5W={FJ>%`Z*D;W?$<3A224^jrYWGF4d-{l!-8T)6jP2OzU&9BS zHd`&Afbi`^!?*YIuJ`+i1Nn(#%HPfKZ6SY6r2Ml+Q+?>5<`BO5zT_*f$JUitsr1&> z@Q$H|m(gU|AA0=6{O{~nhFxFef7>B`xSjB$^op&}b2!XGZYuU8I9d7xi$rT$>R~>^;(S9>pz4eP3t$sonLbO@{$i){0 zgS2t5E`%!|FzpyLO$P8f?@-?-JX}?_K)C9Oo<_K;`I3dJ9q2L5hGe`AVLFS&_Jsuf zogpu4WB6*6#P~uV85j%X^zZ5U1^+Ef$>sF**>;$z&!>(2&?kK`jO+6q-f;gA>T{S1 zaZFQ*RZM01kCCSGaOozmR1is{Y2#~%1mEb+Dp2l^joFcfEtFY;wJ-V&@W`+@s% zAqID^bJYPf((da^dV!+j3`M62Sxz9CZn(tdhTGgww3dPLBH}C#-pJD^-?eqdSwF@R zUD@FpQ`s$apF}JM-fTJa$!=d4O z>3$XLh%{V)ZY8z(Y4;`6=>Dr=c73_oy|$B?-P154Z3~1I>oFc5=TM|I8&`;Y;Tti< zBH@b-;lJRe`zJ#!y70v1!cR1X-@9KCelmDc`HfM29plCqi0XXt(hTuivc?~;LVJFv z_Lvs>DPeD+-TIWX$v!qz?!Zs3i>c~GQ^yz4DdA+eq>IJt^y=TDu`#_3Kk|8hut&FW zG)934&O171&OgFW^~#of!z#=Em&%f;vRx2F&r{6vv@`QuG)FxT#f8UVj;iPB!SkGj zdkUd0%CnvFL_-n!EGxWFCc2{OVpI%VFm4yH$3NI{G&=VrnoIHHMId_T5|?*w0^RYs zz&SK2!m>YL4s2LoS*yGVP{^{4OXQzE;X#65G8VE}Z562Wh&+`n=^WeYaxsmd` zLK}CyN}Jh``%t@!9To^be4cLMUbgTg^R^$mg&W(#BXJAI-q8e(EuJW@_dw>5^ZQTX z*hior%?)iLO`j`~CW$-$8(<>MGcY4B$`t=NQfVH}{(<^M=scO{evoqa=j`>w7Q5S5adu~7cjfGt zh%LJ0%r+)>Q(|Au*g|ul&M_4Rp>u9VRW0R`ZrU0j?G1_G> zyuXLNNvdP4%ljCfAG_aj2Qk^SH}N?ZAPsRQ22&Dl5P(|jvuqjpScP?bBt9~D)ctyk7AHSoJT6#X@Lc(Az3jR{zK{a%UgV4ORc66X%g zbu0o01un&JTZEwI+U4gB5*4DY= zP?V>QR=L}lc*rx}tu*!6AofdWv08Z>OxA@n7-`)L6YSFuAll*~FSd?JjndZfXqpL> zZzAnWTgUqTsPoyq7|`dU5fqL85koCaU#d_%t>EdZ-H2Y5H;+sA@cGL~sLJb{f-*3F z`4O_xj$1rmp4gFx3f*Fi-w!$BDaNKc5)j;Dvh3J+ycPvTg!gpndUM=;5Q%8)X6spc zxRHhjzHHlgIc6C8q_UmTm5MOSENne6wy1tD4$=$6;k`Zb@{;L>lcplU8piAo2&O&Z75h_Kq zK})iUWbR@KD`~!p=U>Qf^OTW!q;T^%&P~YwI{3N*Q@8@zv#%8NhW0laBq`87>kQeL zId$xeL=jWFblp4#W8TBe<4}>b8$Vf8+DWQZ-i`mPAu62~S?S}CNfmBDg1ReA(JO?d zIleUQaS$`UfUJvLg5ar;m}4CRf0 z>ob9wJD5GVH(J}nHRy)$6mH<5%V6Mm+Cl~%gFG1NPHuvMw?P`dE(|rwqcp+^4s2j) zE+DBEg*5Py4Gq8+Q-SyMp^K1nH&SUoLuZ;3+C`doD2*7kX7M!JDb0Gau27>(rB*!7 zYgkA%yae`Wb8SWT>l#RwkskQQH6Sgpg-$`bKB7p<&&Jeo9Maz8lC8Z`kOHB<7lwge z@%V=rJ)K6KK;zV40*}9r0jY?;#}I$pLf3(f2){SGDh@|^T57SM8}Zj%`0=9-v;E&q zyzF#ZwVL)lV({_I}ZtxiH!QK2Z+`TA{+@qOrkBrbLI#`KAmD*2`Pj--w=sYB? zoR1Q`&Tc3GG4yA&lk7E)JIQCrL&Y7G>@|)%Npp&!*Fl%sUbHyEN$6+qC7W%GL=iU2 zb^__q+a`?ndJHYzW!mf#NP%6RVSsd-O@e*W`VWw{ifjRPTCkJ1t^w*}_Ntz!>`e`c zJW(m^%%hJIVNphXNkVy)=niAj{`f3H!p8?n(j_86-O}B!OBZe_;wVl^492Z7KM^kV zlO7*AeQ3G<{7CmR$EVECYA{!}in}Y&3E^b!X9q8V13XCMZYcQ$=!vZi`c@&GV_>=6(W`PIM~{^P?zZ=u7PQRFI)rC1EwUn(k?AHApxPiq22ctyobC%JiFbDqNuI{Y8K{qi4+yM7qGFm*`;IxnD=R)ZI3V% z`>ZP{+JPnZ!|NlZYaoh#pfM$>_2E-zQok0W}g9gxHExV5n zFtaGuO1pb&9Z_sE%^|Ds90%vM0+~pR{>P*bi#+WLq^DIf9#rTP0&OQ@m<^nU*!sZ@ zKe`N7F!FP51w)1RJ^+|Hg{)waumZYjze7aX3U1%Vt)MTo;dS;zF$j8oHY6F3%=dCj z@jr$%tk57>yt@Zc(7P!HA>jZT7ZLPQNWZWooYdWyd>xWx1iG-3$>_@7fdlD*eF%7^ zn9t$(h92{#d}em;a)@Hi8%KbnImsb|&H;2^jV`6GodgRbTf`GHw(+TW4rXS$=ip3- z={(`Z$PfQ9ravb{InPoC*j|ch(`@?Vg3WN7KC>l4(#Ic^?71^iU2M;7Fy*e(p2N4I zujzb(ctRFFj`@W|A9|n9bM?5_ZZnH}+BzfdUGzL?E&72?Q)s+q_Oy(h7iypKDL0XB z!g(7(P;Mein3YkWAZydM!X)Hz@oLBm4Ojk(0OfVYqZm9b%%`V?KOi}&P(0Fqhue~W z04!OzlVWZs6Uk04)PtR@g$NOLvJu4^c5(_yBs)n9gt?vkf_}s@L${ND+f6&EWJZzf z0;G?P&0w&wlMaBiXVI@@Cw-t7^2rz3_EV$xYzP5`WHX`U8EaVxc;rKbfHxtm8PCZB zy%3TQ{^WmTY7@|6E+6NTh|S(d_*YnQdc_uc^mrG-rMSITni!Yzk~*3tU1Yd6DrpjIRb+n<*~RS!pjt7skHLEP z1)R$jqw$6uHX7G_fQ~x>(ZT+f*dnyQ2OLBF7pPR*!`UAadmQifr#ah;-q+se?1jV@ zR^j37Ih1=YXHS)K_vh>qVwZ7tFJg;%_RYL$IY^}q0Gs=@RbmS! zVs;P+_=@{iQQSkaZ2h2?2 z#ZJ?UO{8LP)JE4;?B`VMRPJ3frU~GiGn3 z`Oc)xJdBMO&KQ=$SPhy^VT`Vt4O*AOSY|a3V+qKB^)HISNO!rI*of)<;f>tG-xr0_ z5k+}=-vd3Yoq@O!5o`+;0yXL9KanV60xb4NFyqwY*W68J{MrUV%yI5faJ2q#1;npH zy5CQ>h4?iG9z^kLJDuif+Y<7QNbci%)e#9H)uMmZjzT`cFhUd|wt)D3R zx++p%wGgEaeVvu`H45iS^=DxVAP6RXeE{k4z76Rp=)4n<_6E9;vb-(d2bd5?ZYtUayGu7BnfDf}?KH z+GBOWOd)(+jQ@!9Vs4!$>P?jDP2_Q&&8^o$5Y403`(fu^vpqP@ok2WO54NP&r@z; z22b@~abG6?ps^U;s=hug8ZB?`OSIEaNi`}7ZCk*UF{Hu2gArW=Iw;~236nqoyk zuYWXyo3SV2o{swaAM5If)g2>+DnCg zsHcKM6Yaj`$Vuv4WT>;RXepgdr)Y$uyUusdVA>YsskmB~GPO3Df-zE!&))kF+b zw~2RW#6UHT3J7>i#bUY*-C|i5jn%L;-9CtkfF6FYAvX*r?*Zg`NPk^n33*r0`7uB( z0r#Zb8gwh9?Lt;?2h>yH41-Jl_W|hXPID5B>k76Q4;_f3xOA({ zS<7|S8q*)I^EniS;rlOoNd=0kG8A#)OtO1|H%$oI>XoiC20-_gMU<1Opk18;N5IKf~!^xeMpv|RbhvYjG#F) zg6*`AsvCjb--C@*#tOV2@{+2m&_;doFR#Ft{0TqGLV*zyohR*>63s^pptt*Od&c-YpY5%8xJNWtI0v4 zx})!Hkc!V@rv8N%qc@kMVBUaNM0@R`0Ti!lPeKcbSCopoBMqlG<3B~js~1-(3XY3x z%3dm<&Um#_QgHY_rVe9cr@3f~58j~rjyy*li&C{4)v8xVRz39Ms)g^Y#R`vW;gf$z z3&w(d5jQ=5L!(|iZ6>)>9c;mV`~>QKYo#J`R%E@uAW_{mbq@9FHWhyTyt!zPeIF)+ z_urRV&(-EZ+VBxH7cYL$ptHUP9fA3Z_7NEFKw2Vu(6|&0-<2;bxzafR+|rdM)^y#5EAno@ z1nDE(;{PB=RI^Ev7gU<>f9xOtrHiF@>IVU;08}{Ve!!mV-wuaP4HnqQ!x1r-u=g+c zdbk05wolKNcEA)|fh~Br)RCU;x7L=esAC$Xzebyiy8Wl^l~!fNQ!pI8fELmGfm)Ut%#KbCj*YEwo?Oj_y*Pm6%4>u@9%cvX zBZoZ%L^|;vU`O@oR(tL}9>9J^bVDP&&P6EAhMU6#xdiARoMMy$hWnE26dXbK|P_&s6hXOJLd9f z=@Yqdi}0{PT6OmZsPJj(ddrPNM2g5bjM@Vztq*}1ib3} z%@H08j8~nFdGJB3{PiB`zS8WG0*HjcmA*@mI zVT|DAWDKF?f+cJOAMzTaRR}_}b>jLIH2V|sMlAr$9jKt7PQB#Mhek08IC%&~Jj;u? zg%?pvTV?kmxxC(9$zG`7nkwY2@PAA1y1{z&B{0`iH^q93-&NG5A4L$>yA(pyVZC#V zcwa>JU?Kx6CDa# zFZb{=R_@Z5jdCyA(49o(-ojLqg7-%@Q>oJ!nM&tX2ni>k7Ofa%u_+wFls<)Phj!Bx zt{?fmn8H=!AtBjVmGFaEtal^h9$t+#{fln3mr)Y=*K=?zuk)=HxY&KYnLWv`T-*Vl zA**{GeCjHi?%T*v*p_^(VKUm?C=a0d#??;LLR}@+LXZBgO!tk0D`T;{#=FXm>a|I4 zkqVbNQm~{kPU;-hI*~RY`4B{4{n^};XcS4lMcDNj_P8`c^1xAAA5dA^a+E+4<2)xM zUb`HbSwy)(2%Q39xPA6Q7m?8KAte_Y%`t>_n?m#02%L) zJb(^`62}75zJwu>5`&PEI{66evSZqJWMHnNq*3`j4Tq3qHrl0oNTwmlAXAcCRY{%^ z5nR~9Nc2+O9&!Sb=pKSrZdhgtbDH&j^1FcaHC+YTiBt;#X_pFFK7j*}EcGA@9_46u zlBMhj67pTxiHN%5w$yZ?Ld0HyK1)L_?^o%Ve^-nNdc6PVHD)(!;1gEoWCGAY_$_Eq z&$Er^@tJupdQ{h+@(hydnalHJnt3i7S6Wk^PHdsrsL?O5eX&V`J<`B6 zRug+3ca5XZGuLQC?8clupV(q{@&#ufCibzVEcZlWi|vQyoV|nCyEuC>X43jYx+i$u zA0d^tg0pX@++%p%B|P^m%Ka2)Uq|eG&hE?E#l$Y`s(BnX}gu`zfCL^m9z^Ux>%fQ~p**U}( zf<4RG(1o;8?;-G<>%)}Mt``aH3i&~a^2U%SdLZ!u}{YY z5(|kt_#q&g3J}Z>0hwF&BjDWZi%nhF0ic^S*DIDwO|$*<-KNu5xBI8B5dSf-bJyE7P~a%p@{@twM(Hfc@J#h5*BAFKfrw5>&!-Zv~ka5 z@lOUJ?SmbLHYp^1inSRlTiFNefnLzgK$3{)|04>PqJKvuirBL-)+q(plhC9898B5t zea6iY3DN&CKt}ZMLq;ETJ`7Cznrr~i^g^%l=KYT5xjsf9L<*mS`cc}g-$rZS@=etB zsR2#etj9c9y91_50@61exbl{<_ex25G}LLIq6(orIweP+(7YP*B2VR8n7HEn3r#gs zv2j8Q#0fcU*RQ6jB*q^v5I&MF5e6(3P6aYuTKlfHNL+{=n` zJv3cLB5`1D&rfVs!#;JDhOfZ|j$;tQqWrv3tL2Yw+5)qgw9F$R9G2=_a(Ef(nf8*M{s?EiI6;X zE{nYnKZ6#&0Fl{xU#oZ#8AZSAi@m#EqQbUnV_+NllBXSYO{o1>uW%)QF8pASt_MU* zT4$4z>8cGyLnL?8-a?t=Ye(yml2@V_TYB(%yMH8Tic^`~c0~LAH?W>X3=Bq|NSq6S zvXt2(~&4*JJ~o8^)+-M&Fy}D*;Mhh%z2W(1mqgRAAb$iUPX69#p?lT zZRs8=K7igO`=SR`nBDPkrQHf{_#S9ow?|{Ucsw^Rzj1OCp*Nd+A(d|zSAPeQrl1=l zM7obU%`};nNK|*|o$<2n4PMN_^!+gE(%I+-G5;4${#>jp5w%+0ixMenQ7UQ;e~(L# zTKd;{{`Z2?E}XDn?GjO|1xle!EdIif8MXc~T1B6rrSBDa^mFJrqA_=g#?W_x;<-K& z5Ex=sd<%W#tMyKa)W;Ges@sLu8PQ=4+amEnK5k+uTp0(rCHnCsRJbsnDDe8(dC(-P z|L{UZZdxi!{o!EsOHWu06Z;GG>n0XnfSJBN{Z4C)A7Y;^6%DYjy4@mzqMxq$%jJ(^lg;%P<}L)Q#I~0`&w_tQ8NGO zvg^Vtu)iPdnNU#`73i7Z>b}K3?Ij=?!O4m4P}9wn8)l3TN4wi@pl^H9>vmCFwck-= zdf-yT0ajrN{FJ`R{JVAns_{<77E+)n&hxsoVK|88n7$kZB1_p!O!!~@2JvSjsV%Hof%oOaJKc$h|8#-mH$C?+ zsGyEPtO8pC`iv>-MKcUNjc9>Lp8-f;V#ZTA4m!I7(w0!TMi6=kf{`73b)FjD$hjAK z#$GY$dES#u&ri&To>#%ZyBMX?XiR3f|hmdfqt z=$4%gorTCFZhvD5HqqwdCAEaI+pZ`Pho z4tZcgS!6=rA`K*e{wuJ>igV^|Y{mH|QfVJ@wu5qGdzx}j;knbXC!;Oo>=fkMIJ=kBfEPLYLt?Mz?3;-# zM*qh-dm*u3;_O(d?rhGUN^CFKnS)UK^gYOb0S4M)e)rKOG^bVP802Wj` z@o$f-KUP(r;uvh;>%M_gNSi6G&DfXpL%nL9wRhNTkK7%)yVm(hYut5n^B2ePY|tHj z%HAZUDZODE`O)|mG*hV9l&Mer*?B0uFX_Tmmfq{@E6b&IR8VWEz|kWe_7u)wh9uu z*Z~~uH;%RSAbmFbZZU-gkNLW-9t&4DJF1$>aHJFiqf+2nV+S)aJpI zNcP_FDQfI_Slb%7U2S+hwvgy~0mfZ%1U4+vTrCL{#|3Im<8F7fRr_O}A`pGTS`w(8 zr9d<46exTP8Y4ZYNS(_BXz-!8C4Jn7My zIqeXn(#C-;+q?N&5#@(%ai~n3CzS8$O>h=iB@gg9_T7Ti+}z!vh3u(&I(|CgPkhdv zDVlaJ7A(Lb%{cvSpWc$h!Bg5;@q!Y)UHL6egpVBH!-;Tu0{$6<=TE@fvwex{wKtxs zV_$-wBpf}PJ^wy~Qd4~RbU7jpmONM+Jp8bFGVS^g#^SDW8pX#gBrbv)Gf2t<8b5O zSfm|Gv+^ISQFE%Jn7?HA$2<{T)<7P-k4!ETO#Tt5`JUZ!@`RvsJ3y@q?x`~lbG7=L zLz)WbIk51_h5gv5Vpd5@AsA3RH_Cwnd^p}ppIqpQILkL5e3!!)=%s?2v?jCbuuJ~J zoVj0?Mla5NgFOlD=UL>ocpikF)EB5Pq6k``ZlUIjr;)9%rFrZbtrL&!{sgp?p7zJn zSisE$8v)Bvig?;jw_4LV++03~3*-BbkP9QhEEpnHSp%u~Z18O%{)lUMXVTM1;_^<^ z=#I8Dnrkc3vWUL>kYWQmSZrw=-T@1czjACmKzS2A$aghnpnCCv34{u4fHf5_i*`rt z*Z|Xj>VqJDIfc#d;5Xgpa=%GJmyzLxMO$ebu^6(F-_TX7f_+JTqs5`k$WXZt=T@-) zfnw+w&=LNdH8g;Tvvf<5j|v{voHPrQBF&Np@aYd4Kpa}X?N=9qjtAoHw4LyRM^(KZ0J+2|bVc{lG%-W2|&maxj4v%)XC?A^b94Y6o_Hsm@Y&QK_Ht{RJxbWtdilv*0P_i=D;!Vd~{7 z_%^n>=|Un9vpfq?_pI!qRG9W&Mk0p;oq4ai<-AA7~=D$lYbY>l1 zYo1HTIkJEoiM7s1M+NV?!Ejgjn|2s5d2CbaOyRLbSFw0sK8M@wB;jLkix20sW}_5l zpR&DXqw7fiH4xeB%tLk?_K`4Ru@xKy;y!y0Mu=qocW}s?ER}qAIk?#TJqYiNL07iu9TK>3uc=}`#FR`VD$simvMt(o-o-GK-v$mK{DBSPqH@p z_Ot0qqpsUwvUKnWCcD$iO!mVk(7vOP_@aHKYlM6|amIkGD%*5Nb__8Og>iRmrHWTb z0nT*Cfk=6gJ6^Fsk4O1f(vfPtuqCeA7kRV&eNi>5)gIU8uWhIfV;iO7Dz3yG)k0(2 zC^oij(&h#gO`j55zG7_q9Hl^(h_S63TJnD#+rq8RK}W{#)u2_|sb%O7F$9B>84rzFT#jxQ?i<&_uzEx{WCLm1Rhm-Iai{e;HjD$SpHvyiq z7J*gYXB~o+2KV*>^Mmn6MOI`M64na;}j9I(I67B9(!LU55>U$4+#Tnc>4gE}auLO$hnSvQ$p0%95x)~NE-_wpMIsWBku<5|k7lmM<4S$m_WVrK z`M-cfaQ;d_u3>D^Hb@%^7l!wHfN4KLAnM%tysvySV7eHvx^0H{&w#}6{$1Gb#DMkj zV`$xRG86RParhG#?Rp{Fmly%`-Xks-?JV8#=|~$@uolAeMc)lWl}g`<(YRv1DcdJO zQ?^rZeaN;9kRI5)5C@_?3rLF=qJ6~s$X@~F(|%P$;Cx}~fCr79eTwF!aacdl5(DQy zf-BinTw8gJI&I=t!I)=I9Lc5+X!qZo=#UP;X-@`xhW^n(=f$B)838J$}pxMGd=&Bt@Crg4+$c@+T zKx@cJ-bQ>yRHk*1*Xcx&?AaDu*zwg5QpX_yE$(oepodB-1y4XdfJq;V4BLAdwNY~h znlAt}y08JFp%6;N^|BOqR0Q5^#19V8x~5uN;8zs1N<0=z!Qhj!FL@W0g1sg7vJ#mg z27=}YBk@nm@gHdi$)63mAz&Kk0A`8Fc0lHGhT<2@^RG&nXD;r^SX%PF_fO|SU?zAI z^3+3+N07EpyZIDP_A7T#e|Pl##cPR0(2ZD2(5<%3$5qb1al9M#!Jxi`fsg{Lpb+l7 zIil{XFk|7)%MTiG#cd-Ma)TO+@&KAU%Wsl#QYS$N3Hy>4Rg*#CmPj6z=u<=6aTJ3u zBzB^1aSm4BeBJZ}Bn!oOCtke&qW^|oA9Pdr4`_hKIX&M@p3nU+`L3aS^dnl7&)9En z_6OVlG3dE$0A+kPZ4%qh8hl3Ih=Xoy-%8$$@4$`O{|iPQQW;jX$up|B%`GQ|vFBH7 zaHrcGHrAlUEt;c3(c%3x(}E6#%{@e=)M0ZDJf$(`91%7bo{o7gb?GjnOP_@3ya4}5 zOkMQxhPYh51$4*dTUD;eS5L?%#+xIkx{et5+FVn<2mPje(-3P+`MQClUCHHZNB8rg zc9QP_G#u*pwSv(?zT+Q5KJrM6qm^Y$zOqLk-%==FmM_teZznInUqN#eF&iQ-m#-U_ zFQz#fuYKuNB1XzKD>3L3JP?t_Dt{EAjd0x&`B>?6+S%#{7M@$J*a>&}U(r$R`dUYRpSh zAsIihn9kTl(^z2W?HSRY`!Le!dLu5^+ft#onvbBj=O0(})?EZMp|>xQD8e#~jgkFE zJX>&*g!96kSUYS+I~t32Y!s&vXpAN** zYTRk)9H;WTQS|CfGdG=B`8N^lG;TLqGV$9Xv>U;-SdRh+zdZ#7i`$(hx(dNkkGR)P zWj(jI#JcBRhb-Y%2%vhNU#GAd*;E-$w!oNj72tw01m_3`; z;i~7^W{poe~MM2o?xF_E3YeON3!b3Z)5^cwGg@wwH!Pi z7U<-^7D6v>lc}c|CiWJpBiG9YhfJMb_8~4eF}E5d%R|dm<){|M05dU?t)zc*F}tI1yGxTz(g_PZg@ONI}NskVED@# z1j7Y97)~x`!Eh|PO?w{d!Z-_^Ml(EO{wv^d<80=J>xN#+zj4CQ?Q%|FjIA4PJ8oJY|CT5BYmt$R|JNz7x9 z7g~FHH3SON?<9(NQEJ|PhS;K)^!r3s(rac(7y0BPRMMw33E)AfE#_L{w!z=HrN$4X z1`8*-m)-LYqgMyeVO>zX?j)};NIsoEjcdSv2ROQuWEvech;`KPm|b|Ht_2}@L^n}4 zO5L;(iRyNe)_9nwJ4tx&Kcd~!DZ6MleZ~uo#LUp{`-1L6EvFQi?f!;A@(&>Fgkm7P zzXBX#XwF;E05Y^>e+vv!2ADSvOhxE`$1zO`@##<|7^heo%G0W-L~D!(&U2S=b`}->6lZ@ZvHNm%G374h?1jV@P3ywheTdzUv!@bU zY+N_v>`uf^=Ir6b7Aua^c}(sriG3Ak-$iUOVgH7+|3D$y8JINWjwiOz`5MlCm2&Un z>?mT3ZL?=Ndo|@=3pO^*eduaz(+*sV`G@#DXZp?WzWDafSeSE-;y;bsd z%&3EXqa&W#)02FB)HUR};!an^uT^yX4NvETJ$nT2iw)qh8gjX?ThSEXrl%+onCX~8 z7a!Xxvio{L?G?_A6S2jx#ph@TD#|{cz|>%8{(&I=vE-NmyYS?cJ~jFeT$O*Uz61L( zP%G`*l7D#sgQxcRPW?9+LD8n}yg_((5`JM{JuU^CYt*V>&uH4V_S4S}b>C7(yKmIW z?tNpiL(F!{+W+|o%>|BWM^HTl#BbyEnE2v8lny(RN=k?Viwj5*@(Tlf#jlir;iSbpU@J&f>0d4iynLX6bSYp!7U( zI7*KQwNp_IvBaeP8KlG-ot;8uPsPR0(5()bBl=$x%n`lAqcE&s@^66jP0SC;6obyM z0BLvOp0ser!<*T?71!e$Xv>D3%brbz>V#rRtEt$q`c3=uTdoEtG>_ktj>Q12g(vxvXuQ}{&3E9dwk#VL5jz>J`O@S3nMGNbt239&M(Hi@- zbtnsmpn3qMCU-$3A^Bgp^D?RPK7m}K^Da>5*S@ zSxT(e8HXa-V^P=*shSzM-9G|G<{aFA@Bq8-1MHqT2M-wB-|kyNw*Uv*eZyf&&Ij+g zJJY=FZ1?36diOmK;?_gAz3?H%$ zCunU&Z_L7Z5PIH~qFW4m!ZbW)(mUK-;p5=4BN_!Ez5I;WVOBrgMG9?5#Fj2X{-fLcA=Q%|geQlU@ZH8iq@ z8r|_WqEt1sk74K3C>8>1AhmWSlCgPs`$@=68OICf@Jr`jiiPjdRkOhxb8#u*QemVwTMyXDgTF33ZISEAdZ zq6i%t8y=N7te~qgwZv58L}q2lNq~%XNHlZ@J+=gaI!XXEq?~3fHX=1G+|9U!EAy#hY?_Z;? z2$k7Hr^O@w$L~vap%mOTrzb0TArJ4K>EFq@8fP+e2Ysc`bkJ`gF{Tx>0U5u8IugAH z2b}^;`weX+2Ym^hMQz@X9)$yXF_5#twfhDo-=Lm#D)zB?>s7vtZT{zSsL@D7= zK0>)e711qss3ExhKa70|oXyqy|BNL=bjMaI)u^E%G!qlzW-c?_sj)99Ye*_ZMfA-w zntPes?V?g&->8U6CA6W*GGk9Fw2{h^bS@I9EQSC3eV+4K?w!&9*Xxxz_dMr3=h@G5 z&gXp2CofWM#(?tHWIY8nnttQ7KN5wc1)s4fV?;QdIPF+dgww8NQN~!rqKxqZintuE zu`@Wg26Ar+6uJR?FTRTycE;O%dkYu3-fWLdv|Vt$qP&_ zdE4twE@^+r_e1!rtk~N@mO2kK=W%8sbJ){cmdJVGHsv}Y5fAVNBr5TBW1P2YnZaz! zRv@d@Q^Q4puY#O>?{g#c#Ph2;)pX2aTU{p}5)45^0?#{1=<`UcjkN_> z6l=RH8AY+SQKkrMdyPf0w&^U2wXqiapsV}Z7F~!MT3b5YM}qJo!%__{Jirqnj@Vn` zms{+MhsB9K2lVUs!+^3g^Wc29*zuw-^UwQSV()anBlgLVnUg&=14LZ{BY@DaXZcx1 zXo&VUs9GNYNA3r?`>_0|1KBGF-cQ-ltiuqa3_V^MTC6h*wAdgji!X?`YSIy7l- zDofn>LF_6>yi_N_jyh#W+3})1L(7UAmFSz0kI9K^yz1ywPp;JIgOi+@;_=~*PT$cA z%p8U)YXN!-EDSpBfhx5cx};VfgB{V4t^%3ap&?bd?*M9_2DP5R<4^@=j~Vz8>VePV zwNHsIKJJ_obf4KcYVh==_XEM)n4rP48ch9L&SQ?iKzVdXoc&&f^{mT&8=xgDx%7Jb zKUSCwA7dJqrDb0X{NhE!3>{lBEogD$?fJEHWwK@~nXGvPLJx+?x@T$X$ ze_Z=NySm!1`ct=`!uIc?%=X5h`OP+C(ATmk2EC28Ee35BVbEt-D+YalMKS0G+H*1+ z0=ZceS4Is@ISU+!I4^?}l5oDQLA4U%Sg{|!+(GH`!Es8R3y*XuwHpqgTT1Q3+XraC zspBn;4nu0{oZo}tasMIuq|O<$?0j+PAT5)W-WSdnkAseAPa|LR_#t|N;=?-6{C-7) z@!QHns|w!Dy==S)b|qSw*147c0k7W0hiRYNo{p)kk0Q1|6m&%|Du7K z?%@vpQZFU8BHby!ik|KBEJ0nN@g{SepOFar^!r=6B?oC@Ydh0qnx}W-oc9KnSeR;h zV3_D^l%4%acbDnzE|sx$jxH(eau(8-yu*^q9|JVqOMBXKDMk0>yFvF7&2E+@-vUd% zM&A1z`6EdtALX<`YrgdFS9F4J+4pk@^2WZWvnclcA&X+){EoJnbI!3=>^sV$*!Nc` zVrIw%;l{ojVUBdCk$BI>8iV(6m@!5l>X4||MlsG$$- zg=uIXlIh@ch=`8VoYOQMiD1W(6n?oKX&Yr;DvhiX>rLh7xV_2jM;?95nGWtB>`VtQ z!;z6$-GM4|{=+vwHAKk6gwPI^>K)oPCWL$71|)O|_%JJn$!BB^eFO?aS?|X6)n!r2 zO;|EbJ|kL5x5^M%Q(YFB4c285S{}+P@IN}qUfktC#<6#S9*+G6gv4!>Vgxn{$ytpY zWQM?MwW_~vTX+^i$@gx&8-MT~Sw130Q4&y71%9;i1X=^4y3CiVWWcpn{GoN~7Q^aX zbl@<27RLrMN7P|SC%Vdqv0`#uUbxM;W+vvxU*xprx@8_89+F*$E-rQK9^|OQgZUon z*o-QBqh&Ts1lsrjb?O?FDUoks2#`pi3t|Aa`1;@^XHgVvVT&)h8wQPd&vwV!JRQv} zf6eZTt~jv_uzBUWR2DYL zc(p2V*vtRq1=GyfrSp4cS5sg(v*r7Yh5~pL@FL$>eqlxkQ+5SG1r9C|(0dkQE{$_Eb;2c^sZQCt1*VOI{ z+ns>v*S6DBuv`1b0!+e^QRNOJ%{nCMBT1~N)k{3zYe>QO%HggzZmrX9HOC%f^l#=Hmo^Vs%1 zJqK$1mOqcaL(3!`VB^oFWReKAL>qx~TMSRRf82l0k#GaSwm;9tRw_EYf2Ub^MW2Gc zRIQgG7T8RRWit$&=P@E9^*wL|D|E7fgw8bEY}7^2XiVsQno@Q`=dI6QD0Gg;VJX=V zDRwLPZ_s43*$d*b%zp3N%HMW@nCKTsimY=88nHf|Fb>ZGd_{;c3DHMk z6{gry7wPQLCQh-tE>fM*%ba2xU4$DYL=&B216@RTONd_S6!*f6R_MX5K5C*#v=&Pm zX%&=wyr4TFdIf@wDYnx^O-l=>cp5=^g+~7srU<}7)5+_wE{xP3TQYXdIs{7QeD&mR2zSMIA9D|YhBb# zq_cxAeZmg9bQmSm(&x0~{gb{mnuNb~15NHRUDV|MOavM}ktGct&60-RuN!Lc5na^q zeY&U{e8Z+1{s2oFd^bxPdWUYPWx=l!=oBS-sZ%-2u57}}BHjIYl3b+wKc$PB`$@W} zIUTKwy6qQE+x1S{kDRuPbx{-Ob&9i4#N=Od1}6W^&BOQ*rK z(Wb>SXu};8wE4}i+kAf;+IY|g;5q~!6!10yuOj$ZFAYA;5e)cU0e{XBwhQ<>g89@6 z$e$JPB=&w!zy;F*HpgCu{;tP<8LiZF0-nR(>!o*3>HRQ~j~4I*f+)Ka% z2sRHlFBNbzf^QaZTY|Z<4bo0_)MFnY_%Z>f5Ns&lDd0az+NqwJ??i%+N$-yY{0+go z1iYV&8PZ-9@Kho%67V{LO;YxRfM>DyYymGI*pSvwz>gC=Ucf0v<-N zQRvkIZq44e3b-S|%(TGw`3{=zBLrU~;4~L_uYk`2iAoS~WrB@LN(8)^z4!IN`N0c* z&#Dl^eS{}2m?4+1z@M07EaR}dhnJ3#yr&~X;MNJ>rVe$`2wQr;6nL-0Ha0Jvz!!qs zgk+0TzCP%gS{ojc6K*Q64TtzG!rHyJ;;0I5p6G^2i|0m1H>P{n+U(0)IY z-wotN5`P6!GeHU-?K}e4%qSMpL%$TA2UVa&kBC>k+Mp4mnh-<^L5?BP7w*^+(_Qvj z{LVrn`8dR-Hi1jwUYfw0NML<6qsxT}w9X5Wz8MHM1uJD}Pw*``zS(18&ff!DSjbe? z_r#Jd)S(Wav$pQo65k!fUW{6d5jg>`G`p#k_$YA8^%4InFLdaB>KuX0(4jDjjlO*E z3qT5SKZGL}1A(%TyLOo4kAZ*53$I3Z;=kI$9~P)g@a7>v#o-ZH%XPpUGsSn%Z{*pl zqrPYqb61}IsiD^_iV->gsx27Bh+MxYdj+h3BIhnbzV|wyN$>=7Fjcr7 zy)F|5g3F*5Nu**Qy+HbbR)xw{Csx0p>Zk2-~M(!X6NiO$e)Ca*6Yx(DMml^a+%o zAEUS}a8{nkZz%+q@0|xUkl&Y(8!a$JJiWQ0thw1SkN;R@AOx|s1)>aErsyz>f+rs zvb1-f_kp;Z&`j=sOcs{zhQClwcOz0-PUXIb>RljGBW{mlX&pV&v4jO^R0d1lVb-!F z4NC^@mq3)}{7O{l4Mwq#ZjCz%V#Aq^ao9?#*ox!+aa-KD^JB+tTzXu-bNP-X%IM>= zp5(Y)h2MwGxDUI=?JDE;;kYGJG4A;IaW9Tl;Rk3G!>=7gp0ZiyX>e=)f?YPmE;98* zeNo<9%=q-{uEwwVS1pD4xcxc-w9v1=$Ie^6w=&T1T4~O}oG{T*9>#)O2qCqT2%)a=qt`7eF+F4%A@Hwy8wTfg&cA_^Lf~CM`Q8dZ z1LquOxSwkWx0&ch;m!m(VpMZd2^H=avIOpb41)Xr0VArN*Mc4eYL`iGN29V;+|g1o z?%o8c7vR@lK0d=5RRn)1mEW-kB6om$MiKos8z*E!2Q-`H7Q@-~Tpn>5$0rR0#$ayQ(Pe=;( z!(3@OW4bs+OG<1JXjJzCky~QZm?O#)ix@%4EUs&wM0nmTWcYu<5aI20xcr0So<2Ib7cPqEzJH; zskd$t(IZ+HYf}9@RNlPds@na$Yk&r4Bfm4}uIdWjowwL{OYN7u3F$-wr(*El9f$V| z4F+C{K1<@!KC$fJKFqC_=(9xhxT$48#SCz+j$nMZ=%@4kGncWZqEQ(-`0#Ek{*J}A zmP<}~*|PuR@KZ`oyE=fMNB)Z8XTAPO`bBQ1Ejcj+6vMlOrArJ;ml&4#avq`NDxk0Y zCu4nZY)jRQV{F<@VC>&w(EURkvs#7?T+6HuX&cI%k1FRh%orFE3~L%H)oBn#!+IBd z(Xi&9)P_}KG7PJU7}gJKRvZ4&3!rv^Gz~4Av zR?Q&j7{!%i%yK5q2hb=+arQ(KvUSH@6C?0CP@}7N6ZDSeV_(lzcRA~dW7}0^T^f|7 z=8Ibew;>9UbiEWpB+*MD{8cxBZ+G-~vb{u)bD$gN|F9Q}r-B3Ocmj!J1Y)tD5~<5X zvcbzN+)#U|M?@9x#xhpP0;=f zRH?r~8@2yF^g->*M|rB%!hw(?s2iMQ9=Ta-e;15ERYfx$A0ka2MtAnS&lvSrpwyDw zAQN}_SDiv1x8(foL~>ZSL2})I266Xtw4~Iw*~YX_C<^XFGs~C=6=T|IjOhjtst)?% zq=qM{ZezL{jbe;RBJtQkj>{C}I3in4j|gXuLY4hotv%%w_Vz=a+63Pu=aa+)0uTRz z-;rv2CqQO5iOg1HYMH&(0@UpUzt((Z#mxh4b)1=tW+on&iklCkTXZO*ywzu^^cnFl zeZ1^*48e$^B1-dorXuNAv$Ntv`F?Cb{SuAJUWYe?G$B{n zZGZHbL-(m$HLo8uw|OlUQ-e@o)XTsl@v|IVSBlT*aP&dyUfVD>gGrcba5E^g41-YN zMzMq_Q-j=m29d?M(~Ys*R79gP3}ZD8bP6B)ktSR6PZvIpG_(0ArL$F#Ui7DF0>I zru$9j5qj%DI&h!IABX#xo$33(*X~mYRO)}|1Mrjo0l2Ps*IlT`d^8s1tN#di2*GC4 zrnP|k5ZqV5*#w(-R#(8S2yP?b`UIOr;n@t0{0f4v67WR?qZgy$j{^Q1Kh-%{1W5aZ zl$%6#jex%=c#nWL6KrPExdL8AaIt{jB-k)ES-=l*?0EuyieQuA4Hobu_I^^p4-kB* zkk($n>Fhm3z`&Pn` z6LK=}NPNi(lwvk=6}EJ6MJN_A3`Y3CFOP@k>*8aYk9U=^a#_(iomRcEm%D+2UHnWs|+3eNUGD|hm3#+$*2D8*> zdX}lB8xnph%YDPMIaiy zAds;`t%I}b&+SaV4}vQ2evaO_Dt8|yaY*fX{K9kYKo$H{Nv&kd6R$|FLR(HPdm#te z^86S;u4#WFVdmYYH!vuWbOjR9;zv-Vl$MyiAzqxf6bP7F@vr(8#2V4-Ezj$35z+so z7iQ@|1JQ5ML)&kgtTPNg?%Hq~B%;@Eo75Z&GyWXJ#fZJW&Za7)Le@JolhDK;s>>e~ zygsGD{iazi*^lr#vY!h+Ap1K}WiMkJ(~rX59Mq|$jDO&FxL8hb6PNZ#6IP&p#d-X9 zxaSOQ@z(DP${jOY~Qx)RJ9Hz%K zn!Ht$R$7xy@3IEYI45~)cIdeO%l&!5{gCJ;*yti0?4r&VKu5IE&+L5{d5wiOI+r%u z3{)B$)h`kkv=AHRu7S_9Y(u`ckY~hlJj>3*;c-j9F;}ygt!0?p0{msY6gqUY5$=`1 z8)LGKVk1QlHpE3>920N*_(F=WfzqjAxtI1KzcgmKMSJlrj`i*bhp^t+sB&HieGoc_ z`A$KlIt~&kiZ>x@ief%iJ^UQpKYv4X!7wyO=o7~8hS|F;Si(X;6cqoeD)2eCGv9Ty z2r3NM%l8h!NN{Gap0M1z?58&Mt=dc!5Yj#W98+uRkAqrl<>*|Dl zy<7U+BSxXO#Z%jfygLisC)w~q3SHIPrO;?27_mQGz*%+`#E2NXK=0Vg#mIQrd1vp! ze0kV86w1`k5*zYaVqKNp?1Ik{`3Uh^(1hm+2~Z#}s|<{RL<>$;^aMXg4csKyQru*M zG2>iJih3b|P`=k_pMOAd)#Ylp08@$wh>9tYr=32f)=B-@CwhvO=-zi(CKLuo*jr_D;_mKeHj*$3RDKM?V#N0i49OPX zpIDQZ5?_8VM|}NmcEmS>Q-3%!7gf&A65|&H*c_GW6=;4N>MH|X<_uIy=n5i>awk-syO9ihkh&K^%G%T~0s!dJUnRw4Fy9m0_=n@{Cb?x{gA|YtBI4AT2iCnIn(g3nhWf1sU3rMC^eov%J-gbrlqz++nM`NLP&@TTHke})Q;IwJH-;5 z<;xKuY#K1eNNo*uV8xovXyTHZ%rrl_M0O)cu(n}`fEzeVT~t}yaL1rNNUSod)M%8+ zbYszcpr=Ue*ZUwb{dtc_<~`SGiFL0J!h%qzUZ2q*=7MA~h{e)7IMj%YtPv^(v5+OO zb_!}x?>CKO?KKL@V(nKnaj|9_M78e5Afku#bm-pP&M<@j0vTD>SZoiz*$n;!2fsOf z@JHN(^FANf;3C)7_Q);h+H^u-6t%oFZT^duIu_I+6E*k%02w zKhbmHG(=0mkwOHey*Iy-V18J;3T3 zgcsMhnz*li!gKW*U(eNkkfUw82UA1!I*~Duet`N-30zCAF1DKRBy|uCtS8D#0KofP z^D)|*o+$gUTT+Yf-sHl&{o#t0hnG*tMP1#l0OleQt?Fk+$*mUsGgVy%Y#BRpLvvCI zVB4&G6hHxS<*}jP<6o=KtNL4Q^Lx6i)yq~i@OwJ1EhtX(0c|>#8As zAPDYbRfbeOELHtjb+uI8BUL|bLe<4mb*EH)$Es5huP;=*f@;jcdBiLFuhZwB{d`Bi zH69Z6=RJ1e>~cx#^y%Tl2lZ*^!+TaBtS21asm~c7-mVWGAKs!*A|J*npL_u0`2XxG z3>U(1809vhU@fa2ld7Af>U~xXk*Y3IHKKQg1l2W;&g=TGo8b^zBZg4x`G%1AqrJZ% zl;eYY=6xGfOK~?{PQ;C-s7wj!xpc2>F{q^|$o!{DDF7%Bv zKG?_;Ly6gyJeAB16kq-%9}MEGCwLz1a>E1D{a6YGIwOZJ@UFQ*Z?*7(JsjIiqx}rW z(mf~RFOZVWx14{+=Q+Nn$o&oVw@Ceo>%t#%mJ6OA=TX_1k~S6aC$(HKAuZ7p@I!t6 zaBDw4H&#{6r`f|A@E-`tO29iM$PP(`58tZHX*D)&>}(`MRY3>H8jbg+_o$KRle?*7 zy6zNi>)X^ZjYSMtRegzA;@eb-qcM;8N~_ZoVnq37cykXaO3>vE3H(4ZFO^h}60WXLa*JhgR3@T_H;@zAF!1=moZX#_k%m z|GF|(*q;`hdT8`U#3e4WKZG>3f;V=A;h`ot6O*tn+!n88g`Ne?(05%>5p9hL8RcY@ z$yO4EqRiX6bh#IL*NHIxs{ev-cOv{ts^~Hq1Lk{=rDM)UEa5~iuQVDTLorPZ{b?HDu>b;P145{y-g^Scz(69_rRjy+y6&g6E(h>?709!d$ z-&$U(4UiqY{YTWOT$Ur=-&sB@q7U*$6&g<`z@m$=K(I37@hNnriY@Vk%#9vhv9^)J?~jo~5Mj*7P2G#&b!bv*XS~jiFmJ zO-1k23px9V&T&`~{rn1>q}W63J`(fKHF3n?Y>Fd>o6905WQ&2XuUdvN}+b)fb_$4kJ*p6-L&w4q@aFy~^zSOoUDlxbL`5tfh-_qj8{7tVPbZ&|0?9 zT7HC5jkV~93QfTsBMDy<%J;Sa8d%FN`n_{3Zi`q{@Pt81YsnI8(Z}Mh=m#-<4dP;S zmhRS>2Tfc$>lDJBpnQC=Dcf<#N3V4p@(u6-e;kA=`@vT;7!W)%4|QreG)M0k34u|A zwLu!+J70tPXccG4%8!6s^8cx>mj5d?E-e31kVbUWNsJ>a-p^QsAk5Ls5;NK%ux7c9 z`)FqMz7WLLtKtMvT}M%~?{yKHxC9{)baHz~3J=zEq%aSz4Jq7(DxZ8U3zr`>28$3w z4l31BXog}KE?NwHsOha1>VuU{Wv#@_dDSss#5=7fNGpMkX1Jax9G7mvD_s1z&tLoS zFiZUdvAGmGX_y@XZUNZEi>=h|7CX@f=WJ2tI9m!^F;5x+A9orofvcF>9rjMa;a4o} z)xT0}Z(s6-wf7z*ALVuJR-fZn=sxc_eM)WVPGq0*7!OWVBL$hzMSp^fNVN{wz%Obl zA{>DJ5aAP$q+)x3uXlml3b--sN(~fn62VoacZz_$?42dxD4wwt)f8}|fR7Sf4`4MO zO1I)wf7z4!i0zF&w|g`(N6}3khiX8~iv-sdbnglH6{6cA;3o(+#5^b9e1hKxSX}}W z0E#5 z_wxy>^K^MO`Y*4R_tWLWkd}HKh+JOfncg25nZP9T+3L>BAJK@%#Pm--UX}BM zQ`x~NlAVOeCjExd@dRc?gQ!V?l!mxFZhreY=3 z`*FcUQYewLK@#%*0&f%a#QNkgj+*38XbeVkVPp9d{3x|WslZ!RH<K75h+WnB^K zrx=%GG;|4dkP#~Xs=F|lTc~f<5ux5!pF({fXc9cZa=2NV6X0GbT#}adhW4@7TXLPF zp`3|uRW#Z$MU24Mlph#lq}vXtUDDUElS z*t>@1MkrIb`^7i{gL#|*-xui#vo8Tz@QN#|YNtuM1jMyQGpx^WbJ0BXX2<_QJCxY@ z296o#8;S9+N<$!XNlbI19=%M&)*3#N?;Q_ZP-%aNj@Ly~bSY4hh%O2JIY1jT06rH| ze<;W+>r|lqLDKTTA0xynbVit{xmc_<5#aV1{gWnY-yYM=CC8VLTv>A5&hQt`d25=Ym@lWtUwL?yOMr?jt- zkcZpR^_tCARe!_!GpUZ1^R$^*ITw7eavVleLosHIde*@WUFw;G2MM%sTRnPy<||qI zeNGTLSI1Eg<1y587*&1sw>f?N)M^+j?EG8Qsdgw+J7+ExS&syXU=y5qg46Ue9pBr! zLnJW(afR}nm?ghE<9Ggq=Fp2jj5ln<*gxuVS3*Ld7Q8h0q)5qXwfnjdw1DZLLwRu0cQAq&mQ>t*wp)*V0=~s`rd(cfPK)Pc70%BlAK> zIrYw9%$o^Jh*^c#LUH-tmo5cMp1>ac?wb4h(I(=0!Mp1@{=!%I#b0=E&G<`m;EVB> ztD!g7oG_wG+?-&){_$#-<1e4rcKoFr{K1(PJ^(~bhikxH7P4FuWwQNgP0dK4JvhL$ zuoXLwMTemuObZn*($m86N|+W>(Tw{{>f&S`ehmG6a<{M5z-&Yh@Sw#Esc12)kI;fb z-Uk9KA-4tpm{K}pWDeRvCWl}o#hOxZ{u>A=Uj9{IV>mOV=o66jp-hUKH`V2Pn*vS3 z=<%+#!Uo|YcpCGvURfe2y4MP|!Is(v!eV56FV4_o&W zBBL54(^sw;dxC51K~!*dsy=!7zfKstXWZD+cy~o^!6rO3EqlnnTRLhzS<_ML4G)IKX_gvgB@^lt22tJAS6gxlk^;VwD-0?5;*dO}J^~9-RkdDUo%srV1 z%AC17wl*?}`c9dBI`u>~a6mW5EM~cRi%U=k3mgbpSr)hoB*Fr>)({I^4{0#x@L5X3 z!L2N)gciuZst3g9w!rzoNeeuSke%;c1T=8?&c^r|RmB+E7^#m!T#!Y0StpOCU{hH6 zfHB4#U&U18GRMc!C?*ZG&2bGj%w#)>Ij_B6nQv3E4Aw^O4k4slR1iw545V_BU^1FO zDn5q%VyJjh&y{wne**ibF;qyZ|If`93CVxNy#MAb5Y%`0c$|<_?8Q`M$Y(SMDfGg?wD=;$yDO2d5tL(Gmlx6IJ8*$c@r06&VhiPcS`EvN< zy+09JehJKKdq?tPC9JD8yyDj_orHCi&GsU}8{CWO)ba#Eh3#<;+wWJ2WBXc)&{Lc>>%JK{)bWBH<|0IP3`5 z=T1hMaKyiAJs3CPNH6tkfm~|6sn+^cKm(-LP*c$QF$^JEe@BcXxDQdwVxLf9{}fAb zpp)1UR_|4g6TofA?_A;N5E_*c2(HU?^xmbKqxS->b3*#l#IS?{M$Fx;M_lTkFb%=qY<7$*p5#0(Sx|KN)-B=(-wS7at zv=PXWop+P%e8RpT;blC4u%7E)0TQf`(-|zmSt_B*K1cW+R0ye^xEN9!fHGOXRJ0!` z{~KVDYL|hCqScgIB(uvu+FRP3E0>@~LZx=T@_}=gx_UwS2e%+4x6ERY?G?ivuXw3a zEN9adcMqIk@HKYG%LoR4Ss^ug6#mS-!P@lvry@9rR9t~;!!GogAp~hgFT>uVyWe{0 zm+$l|^{!zz_Im~rVL$Ue-5LE8A=vz0aFSsBw&)olc+>s`?`g;&y8f8pHG9Cm;|7oU zy^IqpKVK=2Nr1@VdgfcI&w}w>PjmNF$6;x`+2*$$aCpY%@?Vr{jjYg&)11}8d}8Y=Smx2 zB?n($gU_$=<%}mXHgu5PNn{NHX56ymL;8|!d`r@8`Yty3e)^U4<%}jiHgxb+CcgCm zyYYd^nkOOe%LQkQzE?EUEC&W)agBCuFqot7@`77ECyj!=W!w=Q*T9TZJp;>*wul>- ze3Y~K`07TRkM;(iLc{|fLy3RM3 zqC?~Gf#1V_LM|zSGe#~vPtTn6O{`DR?tD|XToMGgdcutR*I~^^PmXI~MlO$Y+;0KS z3$J3@kP{x5#x*}q@!)vfuXGB0#WV%41tSc%3~kW!(=easp)PHPc^>+jakaqPwgR4Z z_;H~kFJI(;!#snxc&Z0dcOn?_uQGp6;qNfdH&5#*>6xnILHI_q@#ET%4duN%8 zApHo=`U^Cp8*!(tuDbr*x$|Lc=2h^_Tw8GJV$aNyq%C7U;ZECnegUZPc{pb15WYI> zI`W52guNIVCp9bPmhYGzn!#Df*LoyQ)}-rA2Jn^_2A?|f+L+ZcG5XpeW;WwfQ`F6% zfP69&+?Y&hV;38ltzP};6prh1)KmLqu6sEr zkDCI1kjJ$}m9uoLUS211jZmqcFK4lSdx99*9oULNDt81sO+~+PUn-Ir_+6)R5C4Hw zZUK0vKa<57HjAH2=U_P(i-Zb`vm6$`J{!m4c#6wmvDyV$Y;Um`tphdM?{hW(=N$96 zW5?k;P#E-5D!(a#Sfl;GmZn>dEPSYcBER9;qIHRf!*0KJ=JOjG+i~K`8%2w2qx7#p zY6aLod@R}snUTA*GdXU&!S4KHQ|auD>-(E!_Q2V3WO zY)Qn%rVh5-i0xP$HfIWXrlHMPf?@16GN&_TW|Fu$mgG;-s0@<(*(84tiTXYQN=dG`6tS`~)f<)^o%~nn2F8F?CL0{XPHQ{{ z6S-6^Ht14D1LM`|1gtK4v&$$R`AZu`(<2u)iu2$(`ZA2dvO*YglTt~VqQkwd~Ffd+T%k0qfWc5Pi!*mM{ql$A@5FxWc?3CB|1BuKt| zMs+le&S9RX6k-ElLqoz5Y=61K+E=ksXigH0c4N}k==CCnNc7B%uu+K3FC?IIPoc3V@R8X;EViRd`bj}H6wR#Y zLa0QS%@SRBSfT~+#l)8D(StF~oMjoAA+g1^_Z-a$ox)*>U+Z!AM(!BHCgJBNE7*I9 z_T&|ZI}?gm6LyyvsdU-DDM@X9Ng>Ict1ex0vieWI_`)ZryU?R;7;T_rwrI~j@c+nx> z*#Up8Q~U^t0A^aVXK@C~xBQ8l1N&g)(XrULyHHFmW`hhgAPy5g;&8mgCcM8l9)}gU z$Fl)11vAr8k+O@Q8|q9{h{N2T9ru)h*+d<6EgSsLP-oma4#)WhXmT|oS3GqlY^WdE zU?-`=w7AqZ+_7TcLB6wL87`q>xZEl-E2oK2kIQf;-S0BmqNW!z+J$%%(=uB99Un{E zdw$c}p8fNMwLRi@XuA+Bi98R#WaP>Z&hxoZV=SK@qj5$uZ=MbUBHo_BrtU#ERSdS! zCfWpTK9V-|07RQx@ru0ip$))W2hhzK6(%3%EMR#@TC<)=)E@JfZu2D65;#sPnz!}f-e^E zOoBfa@KymwiTubh&G#6B&9Rbq1iXdd&jj3?U?cNs0)B$X7Yn!r!A4^v1>BF|=>lHS z2w+2bR{?to9wp$@WXwDr$q;a7j@?bb-x0iCD6b*l8wtKiz#qH7C-!T;_Yz!Fz;g&T ze19e25`zDLDMQ~^ku&d(pGQVZ82~&88cXsw2z8M@=tIKVUp~P=dcIBZhgPQMqar7K z<0|ayAWr;_y{hWH`3g;j1_d6q5Riczx)o2O<4@ZHZ}vA3aLN8OmudK@LZ5@N+(mmj$N z;WU5i9$B7(`lu`L&N)V*P3evwNK%L37vK5l3xc`Cc*q=)VLFn6<%T}$gum+0QKT%O z2d(*J7gwgJ7Dpt%xCR@tpqpdmds_ivLa0KjVFcMhx+f4p9kuIh34IK79Iw@t61#CE zC-bs~h!yA;yEVjEjW=Yfk51)vW*gPJkfbY^d!{8pEBq*!ABU8%6XrJ$`?GNpI~lph z!&jA0$i_^bB}Y-FgA|k*SqY&qwV1r82{67L!Z94Pk&cgE_b>&T82$*;QnQC4sP%Y zb-|db9U4(|REBkM=p5^i8a6;0X&oFo#ZwsgbmGwp@Rr|H7z0wi30H}Hd3oPnxDWNo zzv_x#ZGGyaYxf@#Wp;-r=6fFn8s5rJTl54j;TjS&?1lPe5&e&-KKLJVULh|mP?>ra z+Hn!x0STf?1Y)^t zX9iJaXN`SeQpg$~MxFW|+))fOVJsBGIG7pFyc|IN3MOzg00t)4X|i;*!D+IVsCAtt z6TSKqH+YuioXhqsd+>b8-lUw+Az$US!+Zs2c6px1-^phZP$&+p^#osqtcK0N*U^&` zJi!kkh+&?QPir}%FjIdSfn(2rVDa%EMw-gB`4kGe;nO-CqT!s>L8w4MKJ4R%iKa`% zB5k*xhBH%-!2~@G=jhwNJPj9^OY;{As=!(d&G46~qi8e<*%QvoV`QpyBW_PCBdkdD zNI1N8h85TR_y&6#BAZw;&%CaM1SPUHrxiC)^A6fpT!LNrEYHl1SxLvoh#gzc({y}m zhjSkwfDs?=n*A>nL^oOcu~1&%G>ps-1Iq{HegtL8${!h*fp;T7i0b2^W&)o!{+R-x-VdNv;>m@M;BX8C zaYlk|j0B^gK!~|;21w8MJ`O|)VROnbuwIMW{Y<|cVh=qkzcv_!;TA)h#4Iw}j9)tG zZt2Gypeh1&jPG-eN%5pZDCs*hz1P`q7~2mkp1Hz#Sn*oa5z8*H1ebpnRnEhTq0k%z zGXa%Kfim(w7doNYjKVGea+`T6$ZZ~`?jo7HcInJ$<8I_Or$L+jytlv`1Pa_ii$DvO zJyRB83ku;h8?}rhZA=__)H-Fu)jEVnA@Z;K6oa~^M|I`TBGeWD=6h3t2H^lt=0Jsg zgXVG}G?-aSM95b{-S0S6x)$Mc?SVKEUJi_|^~)J7t+}CRFS=z9^6grV6bC9tiqC0F z%FIKR{f^T$oKC{tmZ($nVO3L$jr#N=17>h7_2sh}R0z7{!H5<%>&)`i@nZ6i8|{Z50ras~wmJ{5O9qP&4tQ$mG;GJ?%$B#CU7qY@m_(fOBfi+}f3P`8Nw=mkx z4%JH4=^=c9_Md{k>QhkdvVW$Bb@sD!tyIRAN|M@2ig+ooGez`ymamok@C77LG^uTN zNS+OR9Q1O`8Co@-%>G~N z*mE0Hs3t%(dR=Aic>hPMJDcafHuCPnGg^)K&1f-5oGc`$gO!p+B8(P;=waD%et#G8 zTs3oV9P@t}2^sg=ibiEbi>vS^sW{eWoIoN?@(zdrWE)ReZq%Ulj#YrxJN~LK!AYFn zQ$PcCei|98NtyG#*8(AR?g>oBdWpJTYU_Fla8TDxfY9jrs*6b|db5>;5$@+`x5HYX zpVsv{_1c~|cGsEU=%8BaG zFzIP?Wa2r21EZ_R@l}OEsTn%7yd(2GhUP+J6$E1~G^WG;Ff%sVFEit{#!(+L%Hu*K z!7Lp4SG@~YDaLtmfaEH2e!1Y0`^~?sSvJBx2lnz6vi7GXb zWf;QE5IYUwRsF=SS_?$|qGxHQk<5|XwITF_($sWtY@cs!a(u4{E^4g)34}&HX(FXq z3iG9F@vj;O>@L?*o1sMd)z^?%zIQv&VEbWYnzc#`eyB~*eZOpPp)dFq)^vIZ%*!)4 z8zX82QfILQ8P0|Ms=h!TBg6SX?~>tjdiHhA%l3CXk5_fJNg<%$_c&r~0EdA;?Ln23 zve6#UZVM_^Cd&}yuh1X`c{iWoMyegX6oMQef^4u&3$o@82(km3ne|wt$(umHzVpNz zgWZjxFhms_Ir6Vchxpxc%*PU+a@?=;-4M{&E8So@BSX&d5_W5dxdvzGHU5RpSNDVJ z)nz~&Bg6Y+bDJ(`6!XTAeb9OWWM~DXcYkyQ__H>;%$HGRFLNJ;QX#*mP^bO`ag@P3 zVj6*ZINJ&NEyi3{G)&}o5LZDXB7F%ls*BLflArqsQd1Fs(7IHLZ#F-5nFQdu^fYZR zJc?um;GsGIuUDzx#j&h+N8x%V0QUoyG6Hb_YSw)7A3afGF=h*Vp70Xnu99W6gbERb zEWv0G!$j2UyW&Q#K=nC}|05d3Y%SPEyS}nxw0du!8%XJ#dOLG-06}mr1`-QMHUv#W zR1ty}X{eEkA?Pj=R6Cxa_l(R;B|pKg$1aoJLANIM;&hQtU;r)<6=MSLScdhk=5_)>%{hrFVP98BHOox(4+gLkR-yzx zGNl!A*V4*L|Hklu+V5UW$3qa^$ZQle0~Y2icBUemm#G)Kv(o52e_}FE$0vQXO<=~g zb_9>G4ij}P1P5!PKFC=x(q!^?5+@%wX1o}avNmH()W=MmiIpFLKWE$I0YFp-s0*zIvb+V{F;qVJttK;YR38kgR)Ea6 zXgn2$`)@zdp>iQiMC}IiTu;h@qHkbRruaS#)ofxh1MlkEM$6b?9V_*R%1@oK4Uxeg zu8Cc~1HfN7{N!d-gxb}CtteES@OefKtgx|NV|?MIU6MciBF5n_8agZ{?$)nA>9-`p_cmLZxGu|M=)G5&Z09e|Gy zw!5-{-Xtsf;$)AXUYor>#ed(^soXzPG|ezpzsLL~=i2&D9^yw$N={YsH$3J~+-%3! z$1mDhk$2$i%zO<07I@q5#1eA%q%6)F2Mr*rrFQm|h*0V0tT{YW3)sai;ew`q(V( z%zPV-$~L{Io-)k-Lq3BvtUb`5mJ3Nz^8S$4;s0lA5}T40DR+Bc@*!803T)Rx$=YNK zrPOJa>R%yBjnFb^^4d4z+bMuRqrn}Sr zuxW+G7@o}mto6v~LeIz!<5>m!gcEiT&)QXt?|&dPCjYqh$LMbCtE)+n0I50)gSH|K zkq9+@mUv=1MNNS;V<&2hFVYqX|BPb#9*QM+s*@*Jn-X>0eUZE-TKP0B6pj?mrR z+8tyK^?%jwJdsZD8jx*imq>(~;hGw)-GyJoQBn}A-Mx@&S=yad>HnnN=v6MiJo1_L z%Z2M~zbutKJPyG`m)aA>;ee4jcJmRgsudx8SX)8efd+~iiQRSe2)Y6MH^IgTnhCfo z!94{0J;7$0swLnIf}0C?6~SiZ`R7`VyavIw1$-;PW{2V%0iOU8^%o?Fu_qC1mRrjO z{1w693V0B~W;HQOz#kI40$^2>b{47DhHd1Ufy~j;=57)&Q&3z*@S`-8NM?!ggybA;`9F9jof$2Mk!8q(%Qwz)}Al;;S2XaJGS19%7n@m`Hq zs-}SFu(u)Ls}e1s;{^Zlxh8)C!R8skhXUR~@Ye!92aB=jdqKbj9D5nSvYsk+K4Kw~ zub5L1vrv&y9G=3gfWa#fVY$HT*^W6gJ3MieK05J-XX>XEl01Iy6v2~%RhVB85b-7s z4;VO);aWrPa*wf`FSznk`zf6BF3c7_OU8>jS^6I1SrD*qV<43$1Tgf>Z5VoNQ@qcE zbcWQq9)%7>K8Q!5WWx0*l=)DkNe22ciZwKT`lZQ*x$b5n!u<>WRVyGJ_necoRpuP- z_2hf215JV_*aQE%HaQod52dpPZN&LwH#z@+qSO-b8WYy1a1utsorLh5v@`P;G-9;Y zKN+oY2vMGjyi?IxXXk$5gzgEn;&A58sIvBZs?c@9-s@1MrqPJNatA~KP#4%NF8v0u z70JainUnB|5!l=aSciHAj5_;0iNL_lr-6{H-D6nGi;PGea(yc(!S697Pc>YEdVQ)PnvVI0@}x^8i=lLbh$*5GXlxluvT##}Y4JQ*vFZo$$8d9k zx^lRgiAH4`N>PHfRlo~J?R*8}oBLk38)Eqt5zD31WqdxcsaTKWf4?bi{DRo=YoSru z()Et#yrEP+?}O;04{Ob4vuZ=4+W`#Mc7O(=iP|HlfZa&k|^H$BYnB{9E!J^2L`?UX%2CswC0JOwxsP6;-HTO-7& zp7e11ZpV+l;3F))LQG@1IL?@i*7}n!by(n}%#X8Ng(zLr02L74X@~;+U5n_Vt`Y{0 zqHIa$i@_RP8GNX7u#y-CtnZKT;#XD7P|R<$EJwl2W8}{t?pW6!y2!JvW8=aON$Xq) ztovtkL+5?HeZ71=eW5?V>(@Q}laCaFI#(i;ojNX~7$}nb!5yAJCn%P;7tTkdrOTR- z@iNF~$Qten!0wQ76lzs(u8Rv9$0!FUWbH$vUE@=m+HTt^GBVk-JUg}Nk0tqAs}4iU z#u>%Cig%4jZM+9}-QsUk<`3M}N!oM#hn=4P7USK4+;GQaf2*CN?+#ZRvZ+Es@Dn5_ z7zn2=lW;I%dB>`wTlo3OUDyh)(@gLz>y+d#*`Mq$*_ZCGyg9VP{}Ec_{a4Udd2KkS z0=9@!{Pi~bD{sr4+ObaV)c*L;Psgfk!zXbSeFYt>;(Y^%$@K+{Nt{|Hucs(u(y=Vd z|7u~aq~jii`97Qxwn6@jyyybk_yN?xHumF>N?d=A_g8!G+lU!uC{#>I53(i)C}9wj zl0oV;+L@VCUvi$iR%Xu0&>7CjR?YWz28IL*JU3j4f=~7Y59smi*!wkb5dAB3U@#T` zwaxmZ3q9+o-6e6_`^Bh zr(E)%NJ<#pSjUO4Fhb~?lB3C?G0^=t{*puK{*t39g}ss{W-w*<<`vzcdpy2OWiSl`NN%4{H?mAj5(64 z7g%~84|hrPH|w017c3d`b+~hSt1jtdJ|jc^@XgfappW%jG85?6BTdr!ru~LHrh0Gd zn$vOgeUGJkyLW8Yb#(G$cX;`QztNSv`1j5+cK~zvj=C!_8S{nPR@=v35BFw1$@b0A ztX;?M&BnAa&5#{Qv&VLMmTYUd-51&{&9f4`oo?&eam*z^!Wu7-_Zs~wo>f)*=``$m z06HQH966%0II=WasV+Y>8tg*2}CCmXih{~bf6^ohxSz*@->$(*^ zfD#D276gK}u0q=g($V7u!zv{=nmX_vmgIQeZ6tb z&Cg7Hd-21MefR=Xa?FI~&nRZTtDv&bXUHJ~b5Vjj`@>_CLSMpahUI!D{>+!C>a^-z z*AuvvlNka@b#)VmN8C^LZvy$U-fyad3*FiicnpX%T)&soQauYnL@M;C6H+4*<5pg;VjZISbLq_}nSGY$~#$RguN7z2Ry)Is)trYH&65KK7I^y)( za}Dljg;Bzw`?wNNZavILPNP$p+|Wi%58eaBiSrSuSsA}(?B;2gw8M>t&B!>fa&=1~ zdKwr}byi>tb2swg^2o3Kp7uKnHb7yAp!_*V{DZ%a*~0gJYuMf3WN|e0CQW>QE0(b6 zImn<@=M+y6T)`^Nd$`O(6vK;4ZBo_Vm6T|kR3@e`p*~t2;T+%Uo97Qh{24otE%5){ zc(`A2&dG8K;SP0Ap2*m-U4_<#JKzylqunR}EPDH`x8Cx5maO%csCuZ{7OIds%#*eS z8w#6$_uL7uzwuMg)P*|txN+@c6`5r0$|I?uA}@4a9R_J+r%t#z)_LbKZ#CE2jd(LS zWY-kWlB1z*4b^tl>QE6Op7z@!75-$2h8^08=v$S7Z>jx3-qVO=4!##FqdkbA)*Itk zWa~4FZ!hC`;1B*0+UfHwS&tAG+5+J>T)X{{$uT_bkhQ?n^1@w{@HYu#@Z@h`9Y)Rb zEWx3l+>!&hYW;ou&dJ#ATg}N{kB`<>nUmuc?BaHj#&r%)l(^>$cTZ~{sgUbg@^z$5 zx!l(ONqY4D44gdPnOpvrlg*J*g-Q^h@F=ukU!{{LiYAf0Vw^Y6u9(mgA1Lj(He-hm zNld_Nmv28U+x>;8MWk~)Jo+JA)Y#XAB=s#ECs_RW zYPI-1L<^iGEjRi-zFav9VOa0k=7s)JgR%VNrtMQ`Y#HHJ;K!$dPA=!6VtnrrvZeEV zg=(he+^i)IH3f2UFFC&fE)xG*MQ+yaL3g-2KF$%i3Kgy`zK76{2o8qt@`R? z5c=al7L)525DA@0o*KN1M*5>SdJ{muhZe=hIIzgP3^N7RoYoRE8FX0N;n|o!u*5vO z%voY?U(PD;AylbeD3jxA9}0nq6a+SK`=dVkDD2FdPgLJ`xsZb_p=-1MO=;GGq$$ld zh-j8HCxUKB^Gysu-1DF#GVeFcYiRkpi-fSPQc9YaBfeSEjQ$5hGrv`Ru^`O@4WnGl zUj~`z{eKAAVtz7+0`rSL6y_H|kYv7^p;exz-1v^@+`VRe3^x<03?Pf)oQH5+c61*am2F335e{t5d3?f&0TjR4Pnai0AH32< zg!}2k@n1p2B8V%7h`!{+5&r=+Dw~LMe>p_JOxu6p81q;N(|P*P5D--Xwt!Ywv0Mo0 z(BQJfj)E(|H;s7)>KR%*fqBR&qTBHg_LuAjRohMT+tJ(-Y6@t#9#qvMKi@BjTKt%bwPffLO`{I3Q8Zv{UDZezQHJr{U21>&#Ib%STxH+omvh_lcAAf9>J#|Lo&1m z_0f;9h3)9a+zbDvcG+z1lk<}Z(JQQdaP#|4%rZJ&n%{p|aBF{l0iICcqL4xJFT7uq z0o6wPnddlGzY)?e?O*zxh6tlq>jAU0I}eh~xSQebQ%Ka3{~(e7aQ*z_Fy!BFag6*Y zjd9u1EHo(FmWH`xAKeduS>&!-q}hD@)eEzE8_B&MeT=9k+r`7rs#TyF(`yHA5cHS% z^9s3T@Ztra_Ez)-xGlkE%i`GWdiK2pBdTizoaE~LJuU#m+1Ke?8Wl{o-bhTV-yV&Svgp z&g#csOye2ZICWTdXcTiuTyUPYlreZXKCpapQx?9r2h(qu#+!81CC25i*S+v;IZBk*}n^XbN#so@ho=U^SgiA9&Mt793g5amOIN|4oPGio$9p+|D z_}73KE2i`SYkdBVD(g+Kf$B$ERM>lRF@nlql(}xX0-__W75Hi!g36Y3F8H{PW9>{G zYEG&HaCZLALMuvXFQh{!HNwGry5}e~R;$f#iG;AP4+(9@UI z;dy@;2iC;d`LGkOsp7?Ahs(|L<!jbV{Yxvb4t+xh)|8j*z>1gg zONua5!fG4`=RGUOA&h8|bq)Z_oD|Mfb@ar55MqA+su_0A6Ai@ygUxX;iE^juxaJ9% zPK$*xV&*kU#%#v?T(;Rfk1S9GyxtoBXufJIMp}qO5KodIKrON87p{ERk6U{|wLBKb zd@H{X&$jYqOCCL6*YZf7b76Vx1JzM}EtPpDuVG)Q-%VB_II24E8Uhh^k0JPT;g;$( zpkv1Q86Dbu9QY@lv!7J0jB9l<^0DFcHG;a~r0r3s79%FmNrypHw9{^|Crp8rkSZ2+0AE=A&PLqi{yYS&)__a1 z52)rZpaLM$WY@aooazU;QjmJSGlG1P>lTc1%oy5cBY=280+ae4{VB-xI@bOCCIuP% zua0#eq!xoDk>wa6IG7K(Dwbd+3{Ik?E)h<{P=e_w6OmIh6`= zQf_(Fn33CHbSAPD690po8eMb5Im-ZnNi9HsEjNfN-}??|f!y|Jb-G_^@*2AQ5U(Y- zxs;Zc+d^AzIY1X9H{>mj+$Q13Q(2by3(nzV7PTyK?;DQXYC-qT5@RDEY94e5xfQWo zA7!%ogQ(v+XgBc$4DohQ1w*XC`99(;{~`?WW;Bz1CLSHjM*}g70dOF?*nObZVvkT^ zuaG4@7Y>6GV%W=}q^zJecW>G34bu6ruorz+2NqD|{wB+hLVhp`bk_Jw?eSOG;~#uA zZu|-E@l!4^{x1L<|46^If9ZD`%tVvS`o|it zx%4~s{DsFWVZSc$NzM<3kDx`j`Tb)YUl-|Nvbhe_e147g2$+kJPgo0*fo=7IWCBK3 z(=Y_U%L&FF9nJW5&X^Hz8^kmS3&-? z^q#=pO9i~k1%6P#)5!cY0xlxh_%QFa!`LGUenh~t2{v;L@3jNCE5SVgHqTefTn!bh z&&P}H_tuG7&WuZDCWP}eoY{U7_`kmu@-v=eDHxYj$rBul((d6Y zyGLg2iF%&;AAZRjFF))IPfEoR1pU2i6_uD73IVPb;lY7^m);YohZxGQgv!npw)fS* zmmy9B@u}!x1@WtxMMRqX@haC$zo{b4pQ=8u#vQ)9qTLB_@bB!B` ze^M4+x`ZO#ao;OsX0eiu`aX|uak@7xP{eUu8P~c|1OE#F z1^c5Fj7D2&qhYrreEhsxQn|%77!CXDsI30ZK>isM`u1wlx+u%c-D88gN*Fdr40AaN zlNZ$Kx*uY!0x_;+iR=lJbtUy@}j8rBPow*eB; z+vUj*Tf3}A$+ac@Del^3{bv#ylJ_U$A5l!E{}kEG_5hjW-Ol5~S0ec@p{s@Mb#S)l zPprC9PC+T&2e3*zquC~^T+ZZuG(Q`H$U+JQ+>J2qTwJl@BZ_CWGEaho1~ zl!4E?8*tpfXQzQrGw_uveT{){7kH?Z&a=ADQ{86(PTQN2+z<47>xGM)1r5&c)uL0J z!4*D*jkUMu5;a=JcSUr2Mf9gMbM20*@p(ODvT-tm3AnW0uvz^f5+hTA_a|iE!fy9S z*=+?Sb5<5zNM_t*X+?3r?9hZP!Q)4L|FE6h_||V6dECL}%!d)I4jsBi$6xOzxb_>J z+kd+Fuh!^pB7#&~vJ5mtS~x;FFm`qJz*s&v3vF~YBn@;Z2*k^5dJ;3xThap>?WQhA zwiko71slK6;FCuBC|R_#XJ9np?u^+yh|pkxn=a!12`RBr%Rda7_?Fs}{!j15=t2o6 ziKGlBZpRQcRhW#DopSDo*@_>fWh2cJ?Mz*H8srqn$x+jN)AD-X1y*N(LM?qWSz z!qKkk0W~SF1;=NzS9x?@*GecW#LzDU|rK-p7(`YChoy+Ayp-2uAB%ETs&j*-^l+fG19w;2M13Jc9gP5cb zI#8^wyuT%Dlg^>_OOW$36SlBYiZa~cSMBk0{$A$m$5lr8H7)CuQg>QhrQI94L8iJ@ z9e4k#@nJCIdyyPb}y+DCj_ z&kdNz$ZE-=)}+7Qk<^>sn#Q3r^wKbmt>?8R^`N0Ob)^xVMtDmmItA633UhptZ|WEb z_ALiB6;Ab4c;5Snw=-BhDZ6-DnMAz4F(TP}ji} zLY+cV>iVGTP&4^rBzjw*Ox(YSR@wXYNBs8(G|rjRpa~DWjxGlOy)p`A?aAWe%&(^2 z7nS?y?iJFaWTDexFC4ooUnh(e`t2T0U5pT26rTOFy9r@by(?eZC&U|Kzi=hOyWz~G z(K+#H#RVMc|8}p!InhnCy}d>)dvp1D>kBuHYSiE8`?C}6qYDb(oxP#`sAXq%seE1# z{S_o+kkF`Q|BTfa3ZlP)bTUY%LM~$9)W9A~!_mGu9G)nsZ>;WER(tDF8P&Tj=wG0{ zAnd*A6=wTZn}*DRu^M*dU!74A=bAL{%UsxsF4Xx^HdoF=LGnr6D`G>k!*2u=qB1sI z>OP8rU7gCM|3=9$T9wNghav2}4EMY&T2)>a8&a@(Y!%t7qE+ECg~nHp9l_5L8h5WA zJI03I;b`{4(rgUL)aorUV~d>NuLsEq2)|j-B7NZma{r5-KDeiq1>KAbN*ju|CzBqa zbI#Wvio2s46WY3QxQi!yCDt4oe#5NmN}l74Buz#yTGIht%P$$tDBr9T}rF-Q8IA{0{!0_I~LlTQHv5%garK`ZF1{hQf*iMhPL}P zNhyao9XlZ3e@XOC)HiDQ-lST;kq8X!cOQJgObsb%zlW>$jhEz3fYJeEqy5HCa$SrL zgw>TS0}pzA&6ParAyoy!dz>=}MXvDK*M)S`$S=L>ua|dkOTCV{+w^)Z2Fv}opfOh% zdC6C2DWy!E?IP8R=IL2{i< z$8MkhB;^XH-kTEVCoq+oY)=B>jY7=`^A3Hlhc5B{6#9g|`X}7AQ5`kDo%x;#^JDdG z@sjuIp=}4WS=`iLeBYh?u0QpEXLHGo`|Yp8-07xY<%mIh5m{vVn7Qbywqypy{l08C6FIfVs-yzTO+b+s$Qme6P*dPgUxAa}MMxE3O;_Ng zI^lKaE7CN_$j~;4eYrv!wM}9P9j7w+iEl(^=Ci;oEpkk<_P2KNR(FnSe-8nt*M7J8 zLBA($N0wdnq;E4_biOF@@-}IZt9)X}Swz5^zs}&jqcmi{PMv|j$Z)f>^`iz)HrZGD zh91PHq`%3akPh_MTRo|z4vvIg>0le~y0)YzX#7Tm2XQ)BlaxXuMb(IoNQSGP%oo&j z;OUD-wC7@^Fds@=NMSj6lZ~i(QHw^DRK*!-s-T68xI5L3?o&gF6%8aQxe}I#O^~ga zH1A0?q=s~XnN(yqXw+=^dD7XV%j0CMS(iJbu7yy?*$Cue`d#anIs+;L>k`yB)4)QU z6+pJvbZ0BhPLP~}f#{*X!`Y{J#K6cPdBUU=XESk-aCSXO!L+}>n1O$iy!Q~g7^^cq z)$=Nk-0hP@c4jVdj1?#&WM;SqgjSiwF8|I@wb1F=g3V!a;_l#KZTpS;Q#kJl#2Tj`Tm zBJ#F1v?6ai0!ym=ShDQOul$jzQK0g~(Zs!yB{C?HxR#X(b4rQ#1cbPPq`uDfiIZFd zdlb}U*Gpf>ZpwU!JHIt?wLp_q-A|S@;@mD7bypDtX#S=Wc?F%rI}=>zFz%M$?;MyP zHYb)tdr&53W%{Se>~wHFS7pw}uLWh!u`>Il%Iwq$eGOX)y~rMvImF6*KJNEvo2D{) zoYS9dE|y$v-g#Q;^BbIipL!Xe0sgrx9kIZ5dkX(fd{hblo6e}*VZGg4WXpXXozmuK zbiux2?{HCrj#ap|AT*VEs0&RUL^WOk_`DeHjrP18h0J^kt7G`&(MiyrH>*48Kpw!a z2|Uffiw*p(P^_Qmzz+yK&%n<7ON$#>ihyBY9V2L2V#H}g3oEo7w&RQfmrza?#r-E;OOVjZEaY&X&`N1D!x?2X-VtG_T&2_V`n0daw zl`mQCXh^!(ugR2jui96wDM}B`5)=q3=6s+(l6aGhe#-`!7XN93L-XT5v^#a}oA3yJ z{AZ)L8n>+bhq%w1n!QJ`QAL2}>w4*n*tu>U;)e)Oyd0h!FJIDP_2p3UvZk&jFOx2$ zZ(6lM#-I2zpROOW_Q%7UHZJ8!@&-lUgZ)6^8NpPxf-8~3#r-lukt#T-yOjmLdX5tj z=RfquiMDBcv@sOfJD`dg!Wy{H;6{JF9W-Kpfazv_r$eD6u%1B@_W^XTEg1wVJ`akG z%nsEb#~?wDx0bTT_opBb-^chvS3QUzs5#ySeWA(28{z&-Bu8>;o^XLiVu5mIyPqwU(%5CzA_7TQUo#;!Ab1uo84z4VQfda)Q|*EC?<9INP>!}gkHMBi z>sBe(4Iyv!k&?ImdXu0aUEZI8Q}TWqy>b6h#AMAWE;6glj4&zR=o7v; zIgkWoEyb-sES!aW?*LZ|`BuSOQoe7IWml^Z`@W}i|FXx~qSeklmc2y}z^=dB^If#T zTkf|F*Oe2_Q(I39=iMdC7(Z_tscCDOMDx<(mM@!eMf5(rb<%`1jSKAuYnLf5-l}cI z#T^nwU?p4L-Zd95;wS?y(E2&`DeH)#lhlN=1c;Z5(UPlB-;W?#sctaVDcd+yjIi<1 znTPin&_qWB;V;P4`D--)^26IxAkI{@obv9qpitxxe^9JJqcVua`uwT-g3B(j;H|j5 z6_@=mfFzeWWbuRB6`XteY&PrqIje8Yt2l`V(dsXv?#kF`_9pi)@Yai5MfWPBTwb~$ z9R1vzIR|pJ5kRNZR*$UWTrq2|uUD0a_8P$X;z2!PRbibi9yua9$ek@7Ic7CyiwUW5 z<4ILP!(Qy|?9I|i2K6i`Eyzr4#S)V7e(&L1)$ij+@F~gtTpPT>w^{4BMeWXS9mOz3 z>qy*Tt>X*diggEy^zXb7SiG@VZhEU&1TM9Thw*Fd|E0J*P^iAQ3>x<{Eh+Wk)_x+> z$Y~~JP!stKU*uEYMC2EPv_w z&zUGWahQw6r7eVb&tc)RG_|CF=E+GjdC;f%N2U?pOUSwf%{|j;PLO41mwAW_xU_be ziA64U^lE-1_|0Pf=+mLzC7?r4liebHVXjw+j>B8i@jB3?x&E0fyOQ0@%zV-s<(%47 zquhckz-7NgQZR?BLzOhjM@aH^=Ua{P9W#XbE1eKKPQh2r)HIAS-;e4q;w9f8e=nD8 z$^Oy$&$lVzx7DZJ1jntOFTte!)B(vxoya0JQ0w}eom!tA^ZRPO8DS(oPaB=TVP$Im zN10PqrjT}IZZ$E}Vt|*6A%6`vS8q4OOO6MN*PrZ+)`kk~j}(9ASpvYv3EbVl_u%wq zy5Uf~=$m((ICi@h@E(A@OE5lAT&+AGN?Y-w*_LN9f4pxnU%;meyw<=^7o(N#vTtFt zdz5`9ULwPL8@C#++tyqiVqbZ6C;InnyO*J`vFUplctIo_X$%bI8xdW^AFmyCxPIN? z=Y07d!k(BkZb!2&2RK{B3ar?{R_sU>TLQer0<_&1HOuW~i~i>AkmMoc+;Ds(ueuf8 zeFRz|*sy@~vS=d?r<4~i8>^28wpQb7V9zCCc@A~}u>bn7Nxl>~a&QxOG2AS@iw*>0HdcgnOLYg)<`Qc-6R^?ibdxgFoDz;fWpX%F^C#>ymlF=YEE?60 z4+969A4G?OEG|`OYy_pfH!(Tn^@#HL7I}>2c~;YMd?!nKFUfjGw`b-;By1#3GCk)@rr?K1a35Nrocy7>H7?Pn81%4 z_)E2=!wp+YMVTR6u1J5C94^$5prE%olTAH(>O>$O7)Knismh1Xpo z(M1#onQTU?h9awBAFJUt5s+sDR0w>6fqx`a1oK-2&NT3!1U}xt9~$@>fxpBIeEU1Q zGJa!j*${S#xQi{Kzp^zOD=bZ$-E#i`R@luqhz!OXt2Qu;9P@eN)0H=0S2Kp&C1L|Q z6u%p)*L_~Gaoh`YT-_WR7T1jSVCVYQy2i{XH&86wx;Z*1$NR>&L3O_2__#6NeKlrk z6P3VnBU@UI+}E9hXAwqeb@NJtMRKeJ-pBByRlm%6WNHxv^H zag$TGPk#3Af$It&@3T1~{IfZ$7Q1_$y83s*sSuaY+=eB8miTNjS3L=m!{2V<@q9Ed z{@Y2R{g`-b3uoT#r&q==E^W$Its1=~`Hye~9NOcqo-OLad!Rxt=dJljyWKb5U}UbL zzznk4jTFugg$X)$CmH4;AdIvWL(OY?$e)j>_%v6%dOj9if(B=vuI%xm3}SZZ{45z= zN3s~cc*p&f=Pb+f$vl_mOa6EXL=B2x$RG5sZyPuy6z>A|4mI0Zp*;RoQV&_4la%La zL-D%61FVLd4g4e)=1ny4g97^moNwS41RiPNo6^9&4Ln`o3cxM;$Fl#kectB$Q7EEI z5W+1iq^B=>y;zX4kmDiY|1S#(-8}`#U?pRkj!1d@lx6G*k$C?z|Y7VQuL84$(pTdQ+;+oHkLAMpWvZah)YJDxp;) zdPZsKjmY}H-?6(yIo7HERd(0QuSY1H*)~0a{XB=+&Ad=p<3+d5apqOWAMeiVoq5I5 zz{3r^5+!?A8u%)K{p*QNG4LpXD*=1Yn1O_q=TfVoi{)9bJlze&5dvRg;Oz>7#Y;{X zcn<^XcKm?8PYryGz~3UIls;U%kK3x^qjTK_baZOP&NtO?1?I-`*u~jiG5GM!N0t{~ z+~Is4|Mh#ddqFnyDxZJD|IA$Q-wA%ibG^XV77WtOTx&dE zdkayD@7IIzzd{_;kr&+}i6Yx+-k%}TNwpn?v*&v6Gk>!C<&2)Z7Tq(0#B_S*F~j;l z({sY_(vzD;&-<7|Iz44A=!tIqU*r`1e<5e8(_K9#5!^raU3Nuu8&|AGw^qbTb9@O+ z_D*R<(M!yFQ%%L$tF`a4=ysIY@}@40s+Wv$4X3&|9GxAG@_xIGhvS{^kSEJSERn|B zhDoDxr)l~uM&l~F1O%NK}Ef~8UXFlv&Wx3=U{M-`00(t})IUFrI&hH(U=YfHWx zjaRC^PSMgF^J#VDSFdN%WDyHL+cVp~o<2;r`)Q^IOgbBPt*L{f53MsUOx}CrxT+UzL*DoiLJG0O$?G`vZbPXa)Ly7)6TTL8kPG zHr|-f*e1(*GFfFjt7PUn!v*WfiGIkfWw7ocXOuQOEB8g3Lo$ZwU1=g+4e26%=W-LNPBhh)ECLN8)%N?Ai*Q4I($4{IQhg-97UC_E+n_Hj@`)#r z?JzL5a2QufK`D#8pG>=uZMQVp{&Gc1wnsbbD_TcV5XXHJ6(if_BzdRsE!l2GqY~m@ zsmyg0?>N~OC@aCeP~-_huyh0mQO(RM=w&Fh+gom=w48SCoj`eiyf8~8g>xShX7B*@ z*W{bo$BMp3FrPuzvtaPH!?0UdrRkQM5guWN8tD!-LDMa@rW=-^Zu$r1dS2E-P`6*6 zCZsWB*hRA)&$5kcwuy53VV_<<+?=5QxACLBLvVSk-&+_yrNNt~B;(o8?eF`))|Vm? z*kt1wV|2Uqv)NBT_br#UpgVN8dlVq0;8)4C3k83Zr2PO?;r5RwPj~%nRv6ia;RTJh z%IX~|c~z+1tk(6mdRLQrT0mVDOfe8~Z=XRj8b{**H72^@#^v z_4o;YXU!K*>Z#x7w)))xHfbO`5ZBDGS@}0JoRxotguMNz0`TVo_cQPU1J4t9>m?4{ zC~&2LpE2-L07>a&| z;uZdQHyDaj1g}&2t7`De_kv_(_2WTIra9pA~6u88{-aFZinr{5O?;)WDYs z>`Qi_fyW7an}Pca>`V4&179HUg@AW8UO&4cy2W0X*goWKI*SZlw!72leIflg!RqKY z;e}cG|LR=&*FyTx^3-4_s!0J zx5l2%O2(VC-((_aiNa+uq0MVG?!QUn{lLC08(!_je==s3_D z`ulWDj;tQrUUip6cVm%ayqhs5ZX_7v-HV!oc&)pEm?I98F3CbRw?THDC zk-%HqVFcIHuovbcXk1zJ<0I~dr|h%O4n~MqT%78UA5$~r{u`2l{`g3>j#x=KN#08` zN2G8$EJ9noo$u^870iJomRh@uOA?K+nKnPzY^5SE!Dzryo^j;PSC>JWw|#gEj&9pc z9iS$O{-770;AI1~IKEaE9pW=|=9$4-al*FjzB!e8>XtNni-+wx#edlm$*CVQ)RN7>o#Cb}xr>Mpo;mm_c%giUW< zTbNjw9JI3;|7dR3dnC_Ed7MU^#^0Hf>80I8blOb~CmG($&Pm^bJ^l3p3HGi0l_cw$ zTNMb?*%45Xpb8WN&k0PiNWrfD!5YjEfF88qi;p6iN5H|l0+^eQFi{pgwMVRPLD}ltN>^XWN!Z)wgkHKY zzZ?*ILAtV}cB)`itFIhUw(wMUxi&vXlts_(Ua|1hY%#~(dn-=u%3`BV`iYz9Mz@OV z=xMIXDU03El`D*I$WuT!I(PQkHr}$oH#axsxf{L0QLgaY=#7B^-Eu8%V&`=CN~f?N zt3JOsbQIU;59QBwO9T0OuQ=m0VS5YC$Fu1)Aus$%DXG9yFGlB5BtC1n)=h%F?M;fz zEu4-`6i5m2qK{s4Ht`vMyoE^0`y&wd6?w0g$@njRKS zhZs$TeB+j?RPZ?Jg?<@=3)JfVeQ3HNx^w+7M$gMozse4IJ8CE=mq<<`&iq`*!8@A zFpj&nM`8y3T&RBnz`BxOhr44OeEmEFuU-= zaZ7Z2o{;+e=b1|~Zd|H)h^FVOQOZRE7 zayuUbzxuCefRf$4L#UyJtNvJ3skIVnDOg!_J~{d7uAUkXSN?MwUbC!ZV-{Fx(3L#v zJDXjvxZ*d4r5yHpSuybsl9E&Un_M#}xtBEWH|Ud4Uc#a8ep;pqgKXnri;$s|MkW*vifCtyCk^ zAP#{W{CNVKDnjLRYD-pJ0AWtXq52r3otD$yKl?J7fK23fYGGYesY|NQZ{U|^C;z-Z z(BPjTq=g1&$QICGFZ9-HWzj>*sn;#yonPDrf!IrxAnd}#MD2ejoU*Vy+toyLAD zS**QrdbJ|fuUFw>)>FC5e`#g(7jH&9Q>`f4hE9%#69u{Oj`wZ(jIIrV}Q3N%ckftj32 zK*i_PPEI7{u$wX*8=B2_OLsIi6#3C9HGQw*zkIqr!jNtFw5v05+wVnmuMcS@I^Mf> zmYRz_=B_N-NG4foaE~kRa$vM&v?|tPa`nHiG0r1%o=i7zJf-KRgjwwjv*;+2u+{=Q z$KQ;05oa!mULD_()=6e0^-tIgbUQ<*nVZdG%YSed`{x0Wd>=BhI7|A8`dL;u@)eVq zfafU`wkA4NUo_Ed@jQ2ME1vJ9>s0IXdH(gDUGe-M8qM$XoY9+kAkA zF^0kX5_^@_aYQ}|D8v}Fo~%ZrzusyXOE-oip;N}t)>(jhngUQcccxVm>u7RA^=z7P z9gQFPeAR3yvdR_X*}1?|mFK%H+*x7|Zu7jEgIWnf_ihQ)9er|<@Ar%>1I^M>)XAvB zIRs_MJ+WQbeA8Kk1Kse85$XiEOvONZ0rB?19MN?Teg73TNf>8fckouP5kB52=T~&? zZ!jFX+3C8b0#!{#1nKc9Kd$z^m5yw2&7^#%_u&qPaL0%D(OIonR6iq--3 zpzdAurHPkZFs2r2(WUDUA3ZW7Bk`?Eu2*t0PP6Zsuo!Q*^wi&imAM>lE4N0Mt7X8g&f zbTdx$Ov*c;@0(Wio#vG7=ymu1eqsJTxc|55VGOxHoyyD=2!d|*?hR1K{sIia`y4g+ zaoQlB_uc6&<@R@GL9OLBmSTxQlS@$URmvgeF=Y4OC){a2c$tbV_T!bZpQTV__VWOm zkVxP3?MB_IpynqvO_ZNpa~Cu}d`3%|-WHDfUFs^pyXsOm(|m$1H8ItRt2Egzwhwf4 z&*=O6bVt!*;uFViDROrAK$bZ)*qeV}@kH+jSU}WIZb8(3l(5%&C+dsA?N!Sj;~n1? z*zZ2t8Tc$j<_$6MV*;;%T@4TLfBEBW zLuAxlCa~|$q6S_e(pDMxj{^T}rLQpXL?NGP;I?Vt0S10hrKOLw8JDfMyZNG~X->Ur z$zGk%Fzo9Rj_O)@Z=cDwxx~GIr`;kp{kw$@ZRT8~;_D_S0o{k`^`yA^S08_v91gc4 zgW29;KJuFvmS$A}D%=u|kLB))x!x^)V||#^v{~#=m@8C>pi5(I-_g@OW!RDTHtB`S zDs=k>uy80mXC@t1M!1+aiq4p0lXaz^K1WxBXEAip(_=pEd7|Bq-*z|JJ6{LwW7VeO z9Ww>?gQR;Hc*jP-=NkCS9|8Np;cvfnoWCUSiGWj6RL6g?5kS22xL%It(p(DDT-~P( zf5b~p)jbPWTfZOuv@({paUe-UDx(VtzIz|vp2=|%3b?$)PB+3}M)BP1mU}N@N80?G z?bYx_`14Qd6(5pyIY#{#gAx--@%;uEDf*BLCuE3&^Cd3c3@{D`ii5GVv7o;c{mid< z4B$7sP$jv%D9Tf>`>0Ct++e(WpBhbsAeKRKFAo_`ZhVU@e&>RSy#JLN32 zq-!l{dxE5HmUO8leXpeUmUONqeWj#rNL;(w89X&>H~Rs@=GwgSLB<(fPRz;}#w|Tr zvGO+Ab2Wv^Xj(git{|i7^BMH~8BHr^$Yh${pTUqSqv_ol3RCM2%Ub?A`$bWIsB7kJ zDm|=p6f?el)LPfvw)%j%L<~SpHLn&kFpXukv6`C_hWbmZXmu-l2;vcG!3gGSFV3Jo z9al|{oD=b)tEHN{aitld$ayR$md7s7V)n_Q*5Arwrs8C{a>S!XBq)UA0F1|->YSKh4%8+#{X zPTc=mDfS|xL{Mtk_BzT4si#l|k}pjSJKVDEoCrPx`m?>UU~9qJDM&4iwQ1yJ=)o>y zaixp7j>n+~DMPHwyH^e(bQb7WV5u@doOd(!xLd*5~g0_Xw-u0&)ZW_6=XdF2a zntPYJUv!gM!((*eW(`9jU>Ea0Guuc{hzRU)imG-Yn&kWs)ZW}vTh>46Sn9Xc^Ie$X zH)#qRby`Yck0Q;~MCS}3-k-1=)YVttFCrAF>oT*q`mdpdp6LX}gfpG{jTepn+I2m5 z5q0+7K_w`)%k@N4LBe z%Lmc6-r0WMY1ovDRmRGCVU+c2WdpH$WG%6?a@mhvJSTL=`@Uhg{WsjXxLMt>f<_fl zuRQuC{`{ka0#hBQ@uv#$db&X(Ui9==PO>-Z4=s;bs(139`kt4^b#JATqaU@*@((_A z6*;?zT9zwB`8I+6Hlc}c%JS>R^`a5zoxAebfP#L-{|-%%pOLF>6ErAB=Uu6~`f4|S zdm|6H8_ysD_B|fNPw(%jDK>~`ZQouJ4A;w5#(OUzq;92Eh!nhtmlN^t!LN`uAb{#)$@hwx$YJ4KO+1O zr|@f@o@cWSdp0W<Pt#$(2n+m)` zz~tSAh{$uJ@;oIm#fx6DJg-Wq&Bz7tP=Wt$;K>I5R4CRMxL9C+^mDC&X9+ypzy}EY zgq1$azhS;F@}1o zwfX8GcQ}Q2HDY5+6=m4Ro4y;Qvg{LHSX!!F=WFHu9?WUxYy3hBM;N~8{PAvTjZX&| zJ}hGc!H@10b;eE?62ZTcc+E!dEobyK`LVYAQb;D&m%UK^xDOjFibyCDVN1BG^EUD);sg!pF5Dj5;hq+vB{VARJ zh<6;1FJ@qLB7d|;Wj0Bj{O>Qr(QuyV;JM6sp}k7km@zmXqQV6_-_|u%JBwgoWfzgI zyX3!&@xPpV_PIks^>CEqjP=Yfi_TZ(JT?pM%h)wkH`z@)M|WID%j8kdqc-w49Dl?O*7<#?e)IRh zt^D=pdHq;U>)J1}I8?tIh0CK$D&ptx;QCF(1H)Ry5>-5!XjU}6XVFSsl;l8RRU26PKWN6aAzb=xoe+N5yQZ=1>+s+Q`*;cgo`g4as1 zDB)^LvCTX%bYK4aE@ky>@_qpB1)LV#)dR;gDkag`FM1c^^t;wMT} zu*&7U-x5DpVr`H}ut_+-RN|N*k+!15ZCFQHeQ0;(?a9Rf!ovVkb-dMTy#2=QwKCM?=+b680QE-gg7#0Q!YN zm%HFskhsheKT=|2kT};8KUU(jAn{d8{8Wikflvouco@a^f;m6V-aeyU$ubc%zqAq8mqMwwQ7bNPLH4?We zF(*juW{JNlF(XI}S>g_v`5OMY4x3gJSiM;`$Y0(C*xs1@-d(RXg%YO(iBDVN*GilmBx*A)IoBz% zHb`u+#Ba5acnm}i&cBH~>-BSl`*{UFd5oBCMegVM{QN;bOWn^(es0mv0{63opFito zp8I(;Key{=j{A8KKbtFxmxdzGFs7_qw+Y8HAfCl_Cj0JInb}C5KAHS;0M4pkbWYjq zHQD_#SC-X%DWBA~ydkHoZq4@chSJQ?^gYYtS^t4@_$h5u9`8@2V^OGXGya_N=d~54 zHvOU>m(BjFC5o!HK8~!=^wTJqMA8lsA`?S*8|T_OqjNO;fSv~RB`7Lx4z0VLTDiF0qTvzL(M>=H??k7R$4@jB#W(0_t{5C z_TD9uE zFne8gdFFq~zHRnK8h`0gb?dg5HjF(wH2th@v%hTHP<4#W4+h42-eAkVZjbiB%ng;% zx7+~A`{Gy|y#?bf1|S`8Wx~VXqaybA(763Q@P7V=?)W>g0|g=aAIFH5@!y4D(BG~4 z9b@|x&lECXSKLX1?@gGrg;Z`Rv=R7|K!Optpf&>ErY}a|jaM=PA9r-C5%>zAX(RAg z$doz&N2Ls}$BxkWS(Apeqn-PTit+O_zew9M>z~)^^<#5$$(b6XPP7?c$BUU>&AbR( zVfJ@8buw)!SSfmrQD7s(tzR;D9&+y4q54lKUD!DO7k-=@y05XWu}xyJ5HjdJuI3dD zX7%f4&a3@y|v`3=nQ>&MrSAb9zg=4tBjym z*T|OY3xzY^RTZj#2VjZKAM{9;U-RiGs50smE>pQJb24kL#7GCIt7@wolaYWp$y*C6sNt_cG$6j?j$gM*)$2RkUuMBb2m#$5C`gINtS5sBNZ8{;l}? zn)effDetrX0J2ZK>#8pe829mslD?V$7kpXZ^KDUgr86VBftJNQBajOXnV!52(+d7y z*tTEv{j%9#(&m?z)qSzeb@*reMu*?fe+OP=$Luw28~Qg_7SE|!kl2G@nA*c4bUw2e zDq}ZEbfaeMsX1okkQ7vb)kk{B>dS3@=8aAobIbYJHpRaD z`It}luIza%hWP(t&o6?>HL*mk5mx>oggsz{J-EyfHeQ5%cOAL(g*SH4B+a>A)#9d!QI|ni{t>O*YOC|T7m$hAMGZXY)gl+g9w?Wt0Fl^?_LZj{ zSH&|+8JEp&%nrT2?XtRUABXB|sJ0?LEt71O(K*qdn+}s72)*8i7Bwf+vM#c$@*m;i z??d&|`56E6yylFIniUngnWWP0zMXZYTE#eZB4>bB%MW?hgY-nMVsig9CiB#Nupv=> zNByNRc}n+IOfGSh6A8DV{EcKvawl%+H_$^`r?E{1>gI+02;F6q{rz%Z(B>^pPJwJj z-K1Rnf%4`tDjS$%f{cD(cDDjQK)}GeAF#LSPcF|Wr*=TGaLnO4@5ZaNS)zJx#Wp#siMQd7sYE7zjVezRx_rqsUNp23Il5`^Ws@D2df9Q1Z!Pjv9rs$k^)=6tr@5K{FGNGb(LV0$ z(s0l4%M4FTt7mj0Jg1T7hEEhvYYERuV+^01B-W&jplnY=IKdHj^yH@Dnu2g-2O10%5 zucx?(cN~~zZ1(iakseoPCMIMWad`g zdDby18eJ%pn|lZtiGS}Wqi5lI6X<-eA^v!+w{Rck?z|09xVlo!f2}*Yx1E|Ol^?86 z=)SSK`8jpJ=2TBt2J(3;U7nh+!xyg(&;BZlc77mxos!E2DQCdARPldpRQ0Zh9@mW6 zIhyHxs0N`HavfF|n!Zo{vYL*Gd!RlveGnDS&8+<;ulk4DUycsd>vB}3)GrG;JFAE` z(mD!#d4#67Z-7NnxgfLl=VPin)i18zGx|~V-KMX_XGL`Lz$0c?)cxGHCcm_{`RJN% zAgvx%PXKm5s*ZkC5#2=I83DiK%&a+}esN8w3g}$0J4-MAIAcNdqo!vkgX5T**}}29 zX(s$>B&ljoq1uybe?Gc;tcXcyq0N;mtL=46%{`U4-$Eh8%aU=bD*Y%iluT$#cThSG zqwo5BMsk5PeN6!(!rQLy-n9A5;;n;1xoLXD>!9@TI8`S}ftYpo{J8T$D;N^pSoeyTpQ#-Bz zOPwEz#Bh=zzadZk?0=ZDXfRP3 zBlHW%W@-=Wi{5s>;c)VPUaQ`=)HzmvH+y@s_%DAIE~_2ag_YWx-78|dg=1B2;~p(= zDU(XPFNgf2UuZYcrh|7h55JJw8&Rg|RbNe4B$ruuZ6(OJA`^-@QoHw4l|ST5B&Y1Y?KWg$Mr z_Uw80{n6y6hZaq4Pr4wa(Ko}V@3RY_?;-R=a_Z867IOQ5EWry#@uL6Wq%}G~2xg2RwTdPoFtiao0VyR!MHW2T4_a1F=+@dO8bnbth z&2RqwK0W))E<4M~8*7x)K|@jh?SP)UV_NK(5@kF7Edoor_W-s)nK0p7emE)g2jstwDztQO4(yo z7-Kq@oE$>Pm!-af57l9Wu5wzeB^E9B9YjwuDZ|SyLo<(Epe$wjg-plD-J;_M77*BsPo{l1?mrb^yKQjF%9s(N;>}Zu}XANxIdrk^pY3{JXQQt8nFo-0i zRR*3X@aqO%Ny%Vt@bzL>dSVFhgMhssx=8>X|E)X<5rN_XL-DgvR2zyH1fFCy+-TtI zXm;KZ15XmTjg{8x2WaV})qsyT@MwX-CgjBi);!w#gMq6Ae%rtY82B~GV_O$TTA{$S zf0h3AU59+QNLyv#y#;>Gz@Hd+EB5NmH1H2ufTtPwZ3EYe@`nw)T;S;je$2oJQgMNpSHi12&n?s? z&%>iLy3Hf~YMB{lQ}Oltw{kllV_8YJ^8#7?H#>MYz1?F_ziRR7&7ry<$@S@~Rk!4K z(!J1~{CmSYa0_^c&wJjr(Y&dt<_Xn*lr#J}`2y0Id@F*}dE?nvI~{Xse6olkN$SCpXL3QeJ(Ynp2^ zTX+>4BEI{B_POyiMA7{|vOWE5YhAYWmTkVv_AS|BezvcCxlZxx+=m=>+wv@ESy6Yp z9OyIn6jidj@iWFRy2vr0JqgtvD`Ge1dY8K@tH&wt`QU-}vyAppevul#wtc9raPh2r ztWtY*h}?t7<{d1{Vu;o~t*ad`3hL(dYWc_#<5PeC9kUo4*Q)BO{lr36%}i>LUnMPB z!^?}P;hh6^G&eos#xK(NXJ7m;orgm+x1Ew`Lj~UMX7h`<1uXCf%jdfWbz^(bHaK;4 zEEHHv!IJVq2cAy<=8ZD&-U4e(3HT}lpFo%4oo3)47zfNe*1!V|JW>w(NCPhy_%H(> zZQxZZ-NC@G3G6~t@gm*ojw3lu;Pq%DtvLqqgCKNZZE%adIfVw7(=6&HPA*+SDxd(~4xyXTZlrw#+7{gU`(l`K%nFrC63WD&FR&J!Jp zMgQba62T}#un1gneb(KY7a;8BBm4&l9gUNH8r%7RX8}0bP+d4FpYGmM#M}FEPg1Xn z*lpQ`TgrGB9;ZK#bL851d+x3=ER21dWAWJDW|tf#JS0xA`DkSf_MNIc5r#RP zM^lh+ZdYR!r(Sq(=Mq0+BN1HB7v;F~i_H2XoPe-=Y@;`~74O`ZJl2GkB(_s+2=G8sCKW>Q{>S)HeaI^D@~^ z9;!cx@6bCtXwq?3X}xVaZp78-MAdFJzYsy6HZO}`m0zkYGNn#F>4z3B$}ziiy5#t0 zZOP?Y@~w>Bnio5t7e34LvqKSWV3J$+kH&0(Pl$!UFz50ovlA;EO9c&#d>4`E{Rbn^#ZZyGj8F|M6g&M;#-V%udjp`gNy_cKm!#F$t-ZXpr^z4Q zn&Z7-`SQFc-3KqRrZuvQ#X{Y@k&Gi!?JRLKIaBldv?Z6>J`EexHW5~y)Ts%wzvQx4 zWgx7DomvU&MHNX2t9iih39D#zny?Z}+~}v4!c@2yCWm?LJ)uu-;=iAaH(}J=`40^V_;x&>|n+!6qNZ}MPPPSpl=aK`w#Vq|2#Ftl|>EY%YZQ173(8M4hI%{zu~Nn>3{BlO_| zjD1wp~!J;QLd=FEgO*?7m7?os!r4mr}kKV zW!}QRh{PvO!d}Xc)$ITO#^>PTeSJR*eS#T%EArAzv>t3KUCKuM9C;3(*X#4v!i<_a zfvR6w(C=7AWLs)pQk)sC1+*P8>h$XVF(P z8Q=tfv%a#`SKIAl-mBQC4Exx<&0utfVlsj!P3JJj zNp+N1%LD>3HXoYf{dG5KpUn(#Q2!Jr?_ar!MR+IqjO{6>L)*S`cRBCQgK-x4?VsL| z%olnQ^JI~>ey)C&>uZ6z>c-D?p`Ytyo;wk)gDlq)%jGhItJu$V0=fJZ1jOf^1^bfl zQaLfapTZ(3@2Ar_CSf_a9B(kFTlhXk57f!18tVwJEV`@QeBT?|p*@SO3d~IOri%8= z(@%~NNw`I48MIL64ZRD|-MPadV$z>|4u&B)wYzvxk0`M!iRFeFB6OiQ&ByW~Sema7J0wBn&DWPArebpX z#Cd(dQ+ED&lFnSI2*OTDqCDP5Im}1d=ui#?#TKLjGlh-K*H<~@DO$aa2&nAbGKcd8 zA7@imz-*MUk;vS`$N8MYITD;tq;QUCjq_n}URX9%WIpJld@zZ!8)H+UoW6(I+6=Uy zZea=%w+`&za49Q1jU^*lpL+ybw&%`DP1TpR^AAAU!T_HD=4{ivRr@}w%J)`|NG1$e zoD-*$0gS97;+nL+FOa5LU#ZAKzMr=ZWU-lyBK$WjROFTTIo>7*rZ@W)!11CJ{ahdU zxqj3TgI$i~82=iY^n+;O=qj(?S;gnxcOa;U4awt@PL8uNk7;sFxQ{#Arg==BI{dRi zD8Cw+s#CDeuh4<8kg(7@f2xb*oRd*~Nm=dfmt<7)+|mUafwkp+=2A9DSM|6oG-lg3 z+{)a@|3CK{R8_M_ao@qA`c-t?!Zoy^s)`F{N(Xz*R5OdzjOaqHemdBc)bL`qR1vIC z;~6yEOB>cNlPt#1)2J{ttPk$%k>}M&H?ff&cEmG$PkfPcpXKT#&R{-JR+{Kw^MCKX zr@6GbGJhoP_7X%|JIo1QitXi{@(i=^rw~DEeCilbUuTb8Xfet&XL1MXl&Ugd$R7$F z^%-ZXC7v-dCwJZ4UR=J5Ma}o>+O)E#Dvg{|z2BQE8rV~M?>9mB=GK*5vzxAym|&L? zA63LJDefrW5Sl4teHGTF)?=t*@9*ws5O%YeOWVkKC=~DXQEB@MQ&`j_GB^DRX@}=SO>>cGub)d zM98pnV7t`lbUeH;c|4J%)EV&(&c~J95xoQhmj_ zD~JX`kra0pgm6nb?XR}vY>@FIFEo8<5C2}*$DJ%*b!Vwel^>hNBSZa*cE(^9&R(6z z(^0GRe)p5+-&(r8>mB3CImf;w?n2XS7Z%XfL|?IrM07wq5c8ztK(p7kO=5s13}2-AT!*O$?ek=n=<->JC#vI&Lkyp8akJ{fg!JnbxHz4tgrjTLXm=VF@G zR~8gDmY>8xCG^+E+LAv}jci4Z4qIWhJQNx2xBIF<0Nx8`WsxJ@MLTxTE@do3lgvBE z<-PPNBg8`XBvN5 z+n8l#BfTXEdLBVi?CMf1+D5x<*f54?ZEwY}E-V+wpOJ4VZZRYOeDO{*^2Df3GHrZq zl89oTh}YeizTQDnL^K!?%vFtqlUkGTIbJJ`gzF(e?J?Ovm%X=(2AVjJCgQi2W9d1A zFjM@O-xOx5*pwMu6S~v2EC-8?}pCE@tIGHwDAaBkM-WU>%_Ypd6 zy6?cd-~U_NWYBjpT+wgeK~iwv*V!~S+UaPLypQ2Y%-{Q~5&5+5T3U_rzEiS|@)#PY z26~B^l=m(5<*lakyky(?%||*8MHuJLyVJeKdG}=7@v>TTenq;@Pd+})QD;H5_2lCU z6zrLB3~12eY%UBCBX7W*q+N^CaCKq`v=^sE{q@2SmELtfxXrYn@UoK^UtP~_>(%pRa9w9~kNf1?O?8*5AeK$S8!Bo>ixq1&&%I$?Vc|YLX zBIgKl?MlI4S(Cv}DBSM?h@Z`tH!ii9{`6l{>iyQ~vgjWqr5te$7Kef-k?8#lk&?^H zh*)wt9J$o>&B=6Kb7J*()_&R4`n2C+3Y*=7A7kG1WEBXGL1jHgjc$?6@w3v zK@9rc&DfrfCBM7*(ir@`?j~^;4LR^y5Bwx{Qnyi8H0|uP{)l*8|D1S&yO@dx3=KuP z(Ss*W;~z$%=X1YT5KzDTDcA4p2^Oyl#e!;%p&Gnv6Hg@imoTqueRuO)@R+#R4S&*a zOYH1qTk}`5af6r<%t*EFye%!{W7k>xE&GDwey?R8%K$ED*@=TuQ9$kZA04$N|AX32 zj#}rTwZWt5Q4Mw%WF}^$JMB@o|Q{F^DkX%?zra~1b3J7X+>F2JHeemzv+Dm zH^{Y#O>r~h2L8t6I$7Yk2L89elMKAT!0!wEq=8=$_-+F~W8eeW{p3XqJSh#_VBnJk zzRbX*1)glBM;Z7of%_Y{Dh+&^fjjG|JCgFiv@V^4nRSY0C4}_l~;@1YU03t$p0l zH(T`0GjK^7c%gx>Q|YGwyZOJZFY11wCHjYDMy?ckw<5a3p6HAIq&u0jnHpp;&EXDFMI=~~?A zuKAR$j9Nwm&@2idCx2QX|q|WrmA+$U8>)KCNg>$@nEGgHL z8v5pXw_D17LCXH#)vZzv@XjX%gbjVWc+>FKOvRuA0`79#_q~5(i&XEZoy-tSw~;og zH;&)uGC-Zzpgf$DP`Y;#{aJ9q(WS5lHaGwL%O*$v(^4Vq4CW_WE5TdM43FK|KcMqj z8H{iwz*9G*kPHV&XnIcJV$Sd!nCK4;TK9;TWwQ5-t3Uwh})Cr5_q1WwV6t{5YwV@^A_a z#T#_tng887=&Pq5o|hMnE(*{7`IPY1Z^NUkd}*IhMtJrwyN8c>HyrQKCb}s8a&bXM z#%yn|!bQ=|vlDxbYJ79~dFu-|k6Nt1(K)lfZ694yxODc0_M;ll>{9u>Ao?pv$RMFn zjsJ|*7Yd@kf^-rD21jApvo~}q+-ys7v%km-?=hQjb96v=uM2F6P2Fu3D2WBceUFg0 zH=V&{FYkIxO$TbU=`B?M6P9f8vFIGPUdGjJKZc`&O2g6f!aB>`i-WOYB$ZLun5nDu zd%1_Wc4KJAu9nxiYDH>%$?A^WLftkJ=E5e*xcLl!y_2y5e|vWgWf#3WoNn0Ib&@l+u&X`jHe&9`~0giIp5nlJ_WHQEU$}n~6+93|cvPigahc zg~`P;Aj>qf|_RUQNPj4nWrr&te5`B&y(Lz%`{n3C`Eg(=GRi# zeEDO3wR6bt8{1L894=$4cezYT4df3@j+qt$oA2F+YFmhl^F1z;Z*u<@mZZrYKmUK4 z9MZ_&kdoO@=Z}l_A}KW^`wF(nw|zZQyPR)H?I1IQ2-kHwW6AZdCZ+b)?i_1e7^-h% zd{RcNCWiy64X^N{t|S|rtTG(NSWyU;AZA&|@y?Ej>ZGgZN?pLd1c>)6N=9;X^nDcHV*DG_2jlezx+!bN!#-dX zQsW#^(TIo8T)d?H=L|DWCY!%+3yWxFWDUx1Mh421oh7DHD!Jap>Q$-sX(4GBpA3Fq z#Q>UkrHJVT|BM9&JWR!Otv`D~*BXjE$5a$zCVT=hkHcEfGc(UfcIAoXWD4rj(Iv*2)#Ns{)ZfCgrSn%jcL5hK$4jO4`1JAt*Pwfo&Z_RqIb^KdF%1a1&$X z4jBLv5+tSOWJr$PjLbd$ysnj+wMQ$>!#tF~vzklh1aUbw86t`FIrA50j*)htQKbsx zPm^Ui8%xfcdwCwbx3Dk4(kjlQ;{V~=Zc5USht2|l_Wi~QwE5$tKzEw!FNNX6u(XLm z$jZF;Kgv9!GJlsMJ`2AU!}>MQ;pLw5pv6*Nb(h3WauJY5y>s0i%a&A*w{-Jm*=@-p^W}_1SB$y`TN;hnZ4$IEXu#UoD5~ELabb-Lk(ordlEo zmA$VlegI0XaQbskGsko7dhpG4q6(1nXJ5$BWm`SKSMq&+*s#P49 z(m5&~F5*&wwk*;?@BJ~uN%IHrbMNIM9-x)~{eZpqI4S*^iZ2myFD?BaExqbf?){pI zV?;3KZJn+pi0&@Qo6$jzY+-Rzk0vD;&8#9E9Md?xS|bLFu|j%1Ip@O zjtb^laS5;7vp7MvvRFlV7sois8QHtH|2nbShVIBvMSS`)%65XKh|d?XT?}6q>7wFO zMSQY~j~B7*or20ORNPE3I|Om)4Hr8;yEGV|^_1b6d*`fGXgo%4=mulG*Xm$Q-XvJk zihs06dGl+ua>>$9oMo3USr{=QFWbtqPRcRsxwZ6W^Q>3`!oZaG(sFarZxg_Wg2A}k zBsSTH*$ohPDb2GFvlIK187A!Fw@qWSe=NyAwiauySRi*kJ1{RB(aFybi)?-^t1TqI z?wMOudOe#GcW8zRL`1CevyzcVS0N&f(?z(r?Vw zVCsgah1TUWdN zTg=I;ZIjB99V)oxU&Kh9ktOU`tc%4L=8`R5gBt-9_2<7wa>Y{2W!NzUqs{49Ov@ZB zb)2|Wz^MPjy#jG$h9Hgc1(seT2c|YRgPY85@lVj)F1O|DY-OUdaiZQKuHd{*Hec^Thq!7gt{ zwoA#;%)eg*Dap~K;Jg8pFEa|;^H`Z$(Q;_ay4!MW4;61fqw?d4dF^vzGmIqLp+VhJwl(y zmBA45Q{Fyg6@^@MX0bZ2L~e>Xtd>HchI%VM~ZPE46vWTcVx7C(IEBnm(uDf-mxDZPUI+aa!moXrFdtn zjU4o$@P!W#kLF5_a^<--w2@aAbD_d@4K;owpv<`L+Ed*;b; zLwhXl`4DP|dw2(c+88sNCL*)#RS0Nq#nZTLGJlft&5X47ciMa^wNlPo7qR`_s*f0# zVqx-OlKUWj3sT(`se0ND<1K9rWJl%zsb12?`XA*Xbril%L28w4B0f?Vab-0~ZIng6 zK2pi|VNN+AWbGFrBE0SzQz1(DM1WG}5&%je0w?_t@*vg=5mul_ar6l)ga`$e2;u3L zQys{51mdPxJR^gT9*sUy?aVQ!Qf-Qzk2pJBEE&v|UMvX(lD63Ck>Q=s12SaT#u#~( zQ{G%unMBq^^chYW!C%|zYVgIJ*grD%Dyy^S4SM2P)|$xqr6^Yx-HCTiE|+=3!8V_0 z;T+%p?^NS|>`8u*>VM_~?018k1nu1ZK1bWN@I#lTnx9lF`w>WKNy9wo+;@))>U+5T zjxr(K#@!lsQ4ebcZP~z6|tkw{wm%q;%#`T>VAZ#_v?y1js3xD)Y*R8`lHBBO z7N6?)&W^WwvYKT%5H9IQ|5kA6piWsgt(1Y+vS8DXlJ9e}PGVB#2H~x6-EgVA!TQ%x z^g(>SH@chotxly}@?7@by-SJ^+c4FM$e(En%7n4l5J%LOrB?#H{#77PIZ@G&3RNZD;2jFaa|QJ6>+(W>#2At zjyJnRld?J$A}&$!&oRr@b@LIgSMhie->KpcRNUJjMfbs375l8#^ zD5(ltr8F}~2$$oVM((m(3&=HX-1DU`>{crB7H@7AF+kqp{Z`n)d(39DrO7VyvHYd< z`=T08RrijlYnBT+aCQ!svW%b3%kC_(sjg^cf3-DrkCY$s&i+)nIx%*LNk~<8sO5bP zc{FEyef4>;|FS7t7qHipbXAF)*=p|0lo8P=&NCuPT#(--abq*txhwVsy6^_y!jI(v z*th0?j%^P!u##vi`%h;>WJ!~yjgcOS90V&DEo(f zEJJ3LInRsfXLDzb5Arr4?~fpTnK3%#uLD2LGtSQS_JtGgiu|4SisR&pn7cyWH45rD zS4LrFkxaQ_fV<+flq>$$I(EWilkcwBkaCx^w%R&Ak}DdzD-NTMPKl01of0Ft8!sg$ zMrE7E^@R)_)s@u3HfD1=}htB1s}kv(hj*AH?m?cqo6F<&p^n;gju~_COB4#vm%HR zw>B3D%#YGu`Q9hnw=wBt6USR~618WtoB>6$V%g-cC3|?>a+uUp*0di2VO1}pgw!=2 zg_Kn~-1C#}Z}GQdm3=qhOztnNIuW-QNAqR51RHVWWW^d1C_@>-d&<6e56ix)8A78v z!YD%e$M2;Ps*EomS*{6tKyK+2$oC<5HqdFA$a5-4o#?S4#Ym@ffo#g^VoN7pDGl zqK-tM9FHuW-Vew!7E^=q*r`a&!H^cJ952WB;1F?oNA+R+YVMfz$|bznm_tzhng^&bjNmu#D1vopK*iA?)&rmHYLmE~u!7R0-P^MM=}-jp zJg|;M6>oB(yM(1g5_`QUXF zeliR+14$ob@YKwF2V!K};O*Zs55GF$2$C#3}E)?N^(|7MSQ+ zoHR4>nb>=k@-Vhsmjd2I5?PtF=tnmG7p=;otj}ToA1ht|jam6h&23sXK2TaZX5|NF z**Uq^Xls=>->yxwOLG!Ge`q9jRm~roJs(&XTNhZj$dWKJoKqezJ75pI?8_;$7P!T> z@#>oR8&*F_DrAoK5SCM$GXOfdfc3%5KZJM5t?Nvh;wCU9AXfl~wzgSvgui+n2rmy$ zx9K$LfQfNm);3X`o{VuGM!WYJl=5Zz^1!7XMRI5vFQaAhf1-j z4B|;8mJsW_Z$&m6ZTwTm*I;4L%0HmKo+myJb?;SX#zv2>E=+dF|CjuJVT=b;H_XXxI z>|ST{Qweuoc#FOrU_RV(CUP>TNa)>WLVrUVK(Eh9Q_Qho(H2)r`+Z0zpV@3~u_SNi zE~Lpr?Mz%D=V=#i9&N3=TpkrjyGWl$Yakj!6tf=Jq!=a>n4#vL$%U>**XI8FY{#DD zq4?il5Ah>tDXQJvt>4E9imL7pqx{|DP@T3vs9utO^SA8H9jawqQeAKH!V5ufkz6N1 zgE<%bUF5%MSMvUw_q(~(5M06&aQ{=1#9K>Ssc`~s&wdV|7gweM)G-yHZ@Dl%P5i*e z=tCwYZ2Mm3A7@zHw7r67YufvPFU69ldx z1xbz~(D=`1bos>-iFfYzU9A0~A3B4uP`Mnp(7{&R0@cc*cc8hs6BQ93CE}GT9nhBHpdy(JH=F)W2NCKhhp6SE;zSieGq&(rs1zzK9*jXRCO-ly0En zmqo0zoRMQyyjsM6!Xz}mU&Q}WkpEHWW{G%{ibsfer`~(Bic3W-{HAn-sOn9Q%K~K_ zJZnDU$5nhr=-w4t`i=#N?^N+oB6exzcop{%@zpBcBbB>*JFiAXoUh_fMf|0z)?P~w z62CN7vFur0xn0Hb?Oas5SH%0N_)!r%yKAd>t7!h!GHciv5j*Z}zuA_4L&Pf(OFOso zd3;-fkC_yewP^U}{u%PM5V8PLhT_m{9?w7sN&nK+C0t>V)zo znd;uUL{p}XMC#&baydahE56CPXoUCOrZE(g8n1Rez|UFP^*8=ii|&O>q#IzSl9lL3 zC)SBk4o36aY-K8hj2)42hN-IS`9f zI^LB$FO1Tzjav_6_s&>uJU{5qN^J;U+0r)wNRz zKQ{SI=JHUC?`s9)x5n=N5;HtN^Yy+megn``)9?ANG&66Ea~*fA0_XuVz5C6!_w(|A zsg<^W?LOD)~O;Fl<)`7&R> z;rB0|T=rGtcN>|GEvvH|?Y;hGzw2!@nE4{nU?I0ad^KQJ*0r>ZygJm12lBxJ^N@=3 zMVzhTM^ro#z0D{UHx7yKQ1J;;`U=EmJ}s9!{6pmO?r^zYbDC5U;To&I#3P;#fyCCMsll?=-?&1oSrp7_VD8& zUQ2$-ilh@<+spB12C7C+yH@44FETDyC;3EeXY zp?zzQmwTR*eos4pyN`SR;@y+ju;uk2f*cNHM38qlRnW(7R9n#3Oo!rJ_X;OX6OIMj z&lIZoag4M(wEkMc%8B+ebyp~&+$IyJ<5$eWiT<-hw}KHDZZUJo&L}Qj%S;Y!EbCM@ z=74N-AouVdgx+VL-LRZ8DT^@W^ER(Tx}w#~WmId+n2CUZckU_T(k=|(WMIxfSRO_E ztxTA7C#mhQ?1cJ9^L$$WTM`$Dh9%G=XeO zEBE?^ z!uhs8$(Zf;C;oV?^)fp`H1A^*&p){np!~`>F?oj_EW*wd+n)TnRz|XsHx3GHE|v55 zyYXd7v?~?W%9?lx)ybq#dt6L|;IQb`Q?I*e;I*S#4(U>BYf)+D>ioX?sn zN?92~L#S(uPbd^OUOvy!1FC!UI2?n79%oa^qsM{Bp~oz~>?$}_ICc-^w6+?)E#~MU zf6b{N6sE^G>J)lBXX!CXJ`l@y6lE3*dJNMhbBux?Z%E7XvHqOh| z<~6V7{e3TYeV7IxWbK`im=ka^u%0K!vw=ro9iZfhy-aFEC$K;5xU#*pjIzl6kK0x^ ziA6)^HGpDXFC6Rb>s>DHLC=GzRVoyJiJx{jqvau3F~&&rlE0>$JBI1G^(Cd}IfPNh zKMO29PvKvoXLm(%jA|JlM?CVJ*yU zp7$(D-h!jazct^SYgt=}mil{&&m;ZKmZd5A>MiA1QU) z{BQ}D+xYaRw(HV4OgxoD%TbulX%$h2odn}xRb}25tM0gUo_;W5wbFu57dZ)Vh?0JEUZ^j;6+>BG+DDQ6x&CLIE z$`o@fX17(I#){R!pHg9EkvieJN30Y2&P2s28145@GhPsoYxjHF@1Ls73%2I^WXH65 zzZWv`=8uD9K#@Rzt(OckoayXyD&`!sjYp(0g>PLdp`M0fwe1 z(mplr9a2>h=g_ra?kh5jhT-J|t>#$Fzkjl3%ok&RvRwSA?W~@R`}A;=_3r$o(D-~ZgjhVV$DjqN5Rw}Ni;?4Xq?Nr=D z#JyBJNblWL?tQe1+l!dxS5o;0@`7SnbdB8mFGzuEc_Ma6<$M)?Dy2VHacvQ|*U}HD zxKhN6RlFU_d6nO$;zvb1UB#_YzKDjp-^aVnlAViz#ls`x4q_d~qT@q74vsv#tO z3=dO=^Sw@z;k-9O>r}e8bRGH8tBh|U+b;#BAN^AF{A#iw8e?JUV0L5v-AtYh93^{( zW=)X!BOds6{-4Bl@>xgrZr(x@HfqV|5{dEh*K9yr7vt>%-zL;V@SgM;eFXbIPz^DD zF;|9$`AaAx0siCAkUN;#>RY?+x4^LWxwJ^IM=A+IQY|h@X**0>7AzWSomGDfZ_9g0 zP`?*~&^}cNn}~Gf)RlJheU)iU+b6W2#VI3v7pt$LX^4WiqM*L=mz3H4@cR+3=WXCj zrM+M2X0ror3+#6icvA*N1=`2#2w8*1DYIm)-U>nH>rB~++C0a7TRe-u4zNCuDpqA7)unQ&^yoSd4|myd>Q>P`z?DjLDihpjnryMF;~l_Qxx1uN&9=d zyg~LaHRqpEtVr!xsPH{3rPSwK?V)35#>`x-$#n zXD>gP4>>K_%ilJOSy==MvBh?D-SoQWmEryIx%lC0H@X&POD$#(z6dkB$oXIm{wt1N zOmUcfJpZOnHf&QD#{ckIOhTt3w0oF_SEPG5oGvhMvRb$H#7i&7?UnVr$) zS@YpHd{?9ziYAT3|Excm`On@&+mgNeWyP2^P)MMog+yL~d=t3w>pv-;!58Pn1QPXpWy=Rjz4(rUlr1ugov&=M ztAURH3LG}0R0<9|fjGpNBe|%09KI%QdN|OCM?M!c_2)2yrapjEL89J9;vD;bbJ8rr zQPS9lsb6CaY$95xRw!yWe8Bb?4?ZgK2y1;ldVT1JPut$O{9(TjtulYzpK{5cZDOC# z`&zaDJOz&sPn*wBw_GZ{mUByeF2OBt%u=_!s)03rr9;y4lw;E!{ljjlpe}JsFQP(m z^f`*d(@P|H2IHr5)aLl504i0a1K{SlCE3m1 zIy??uqQr@R?1tj9acl+b6X@^$A=fwZ48J?XBl0l1;9>f6uHk5{e@}hxE09F+Z96W`FY*Lqru%K_N4H0wV4Bg-YeHP!ZUc< zfLqC3>bVv_(v9~mPh~VXi`zS%+J^yqs7rV{%7%|x6o;qRkTwXYZW?N;svMugHOf=I z$gQA`k}&%9W)yycic&bzS7K1Wkx#ftR=IR4{j@+ndGu3(ECze-egTyCK3J(^caHM% zg;p~IXa`zaM2_QBuo!F?o(9`YPMTXe7OPJIG~vq80*23(kw}x}q~GrOQx9)E?|wJ( z#{2F!dy8xT=6+8P##8>p?Ra;mhe66~x~&uvdEi<5{V#xIGVV)(M0%?bBrCY6`lj1t zO2D(^bDn-)y!(2((4uz5)SBbnaJ-S+sS^_mAZ_KDO0f<1T8cHjgxr0s(5S4=gCagv z#q(5rgO|GVRa{oKS2gQy^Z@`qZ*6av!I>S&2bVfvd)G%6x}#W4-u)MOX zLfrix9sl4w^A{>If9Lu2(8sM`*W6dLUmvDK@&LD9$t(BaW42uRKFal%awFh_tecQj zX&KsR$Xuwp#^0?KKq^v&bd4MVX~rh>eGLUuAU%yTAwvK1Sxu0>6ejd6+rU(hV(M2t zS~@*C`g$-$iB$ENBuD5mid&e|)Ag{6M1oi|l#8myngx)%YOG1hCiBX3*WQn^@RFaq z-&c6;-@|+0qZaSnDK-1)Cp1j9v4JMvtLNUdxU<2FGhV%iYQ1a9{d%j+FFh>vUh4Wi zx6bPsFFv^6`^lt0258c_A1;S^Zc)~{3oY}8QN0;YJ%}F>aa*9J_jx5@#p5Ou8V0EN z4iUT1FipkTkj%7KaTgK0QU5Tl{8XttPsLFYchJgvYw7)f%+ywKLlJjU@!2Z=N=k2s z&8W5)Z+RW#u_|66;?*kNDq`29{<+&~K2yZARQ!gB-Kc-FiYJJ;RK-t;*r~Qu#b=6Y z*Q>Zh#7?ye73YY!GvZ+QY2UZ(X$Ijnq91QGFeYqKJT{~Ch?c;4a%Yrcg7RC+@V@CW zoXV$KIVJ6t=rDEJRl4qE5sc5c>P=gp(AFF-RZ^%f(Ul%AGkKWYxSU(?<4r&REx3G8 z)=kU#f7_sftee)by)Az}9h5a-1^aYnO(*5%#ohsL^GfY{Ui8hn;eEF?4)YL~lzzaS z!kgYQXU``?Sm|AXGFd0_xs-Lp42iX?iJLaomfhfeuXX_XgroP%58F#8oo}P}YmZCx zj^8N3fh@v3>+Ggh$4PkXdYtrE8mE6OBT`w}dnvW0gqh=|2qL$#cQRLcD|_{$dSnvs z5m&wB;g`pPh<&0oghXU3r@V+gUkI3puH%$x%dtGS`tcDpHiuhpmHm=vsj z_8gL*HFZ^f=1(J6mh8ESFBWBvc-@ajd}7XiTdX9y_+h=TeOW(i;uz*OQtsP4^}fI0 z8hhV}z3++kzVF`u|8d`Pxu0%*e22U@o)sHR%S&96%lX)a9Cm0;njAS0U3TP1-h+ru zsB#KQR@W+M_eoZXH0Z+8JwN@2jxiCKQY>8@Jb6b4FGvC`e@!EN9uA>512f@Z z(zE!cQ{sTU;^>HJgi)JaWyQ8x(u6bNy$@=@`U{0*B2k{rd5t{Cggd?Owe!6wn-WxS z<3^!&ekND4H$Pm15v;6Fmb9YcMc*H1UG=C==%FG`4rdVWu^@vMY8DC*0}89hs}!=gMzOy=%Ey z;*#uC>Lnh8ddKuVWRh!3*OIOu~_mpzGw{puHt+Z{%!RQobE1vgmsl-phyA(4Zp-d!#*==;B-8cVqgc5 z4Ds({t`r0BjC%&IfQi)^=soU zaxeA!M2ZTrN_Z+Gb<1m*B9-JKme)*!l{AVEJC37dBjpys$7)Go)oKs#h_bqP1(;1vHLpc`vk5?|ojzJsx^r?&JcIk$t z+x@J>rW>8&=r;zBh2IyNTxRo)qLP~PjRq7+eqjfM`Tn^5QZ1Lgk8<09BH7f9+x)y_ zvOQtHTPm4K@+yX+#2sJ$y}eN&Urb&TqQIz=O#_LoWi6WUB^2>rCt~{Q{fSza>A250nQ@uv)T)P>Lz5N_qY?inHF@cy{6B4$G#V6(Cey_jnE-!H{WsXpoosH7U>=(2V#O1>s z9O$3@jMdv45ApfO%ClDpcljtTBbgqfM(9ASMO z4c{Ak>_(0k&MH?goaP$gIZjnsGSm+RZFJ|adE*}63wAMTJrou%bfg}Q?nhFUs+<*T z;jkzt#3&X|QeM3AxIha{L=pr)Nnr(x9c#Sc_ar)}_~aKR;6uUhQ@K)hBr2n}Wn!sX6J>a;387v^!H-Qvn`TSo7E9 zfHe|NV2$Baz?w>&1ZzIvq&b&kVZ?5AaQt-u71ng*e6pSFM9^iTL$`5&Zl)kk<7{Pf zFCFk-0V-0{W3JJxSvFOtK>M`Ih8@X@xY8pT548QAe1=(E5iw11pEs^W2%Osa9~Mr-L7;yN|I%FCXiO zj=S;_fm?flF>bBLDgQCs*Ag%j(SP_Pml?vb_##&s8;k3gVW-TMkvG&P1^DC+n*wwk zOCTQ&On!bY9L{&~Pm9MN7u4WzzGtV~)Apw~JtLo;kY?mci3>t+HF67ARxxs*RiXa# z*y^P@=b^oq=GEVT}ZWLZr;BN(MglZ8V zChmn7BJuDFo+K|>u8?J$5%Dz0c8bbC=7s`u3A@*FdU{*U_ZhpoC1d8=Rb)!^wp82M$qCG3m0*G$-Az)SYwre2w) zTIP;@l<6X6hG3~zCZT062+CAh7@Q+z{s`UYaxHWCKFWMuLYWDm=Mldw&Mk|4ew!`b zc@*M1ReZaMU1VIW;y&17u2ylcQ0eI^j*2*6#qC7=kXAlU#SKN=7_k`xv&cH)@%=NB z*J>O-NUoow*I%U9{~)^lbeA>dyV;1JS8*#9zbE1iDt=qUu5>*W7t7t|sd!GP^v@%$ zrTs-bRmEi@cEi9ARD6q6J`%BApa1`B{x!$;VQgR1rF3Os>DxuT)|&R=Ox z62aa)##PQC0=jN3+>DRP+%-FSP@ zRZqPu2(oK1EC{myMPhnN(?~>blH*S?OYEOgtSZjKe)htH504_Qw4SYj3zIDuVw*ecv<$1&;vHz0e0&sb_YQdGiW*&DBgS$UiP+-!BcJ9uC`yc9p z2d`TmSdf>O3PDtIV&Vr!(U zDyvhUeFQ3P-(D7Rdxu=eJJe<@DA;yyuDL^^51aRafj5k5G=_5|`WN6}Z*sK<1OxZ^ z#ftkJoGZBZ_IO9jtZ=x?UvoB!gmF($r{MmNoqVyl-%DNKnZr74nfO47a@v$85XY(= z@f|rHud7?cI_OnwX-v&2?7q%Ua=IOcuH+IyJlKS*6VX!^zt|*I;FcZp+j_a^ym0~Q z-(n=FS8yso{T9do>IqJo-DoMO{|~nd8ZR-@kv!sG&M%UwsN`BZt(7m(ji!WLJlr+e zZCoq~nglgcbW2(JYcg<77`pDbNTA#8riX|Jmr_>-vyT!zErQ261n2q)e&%#~?x+Ak zkpfj{xlrCB5Zv64gNg=Rl8WGq^dL1OIQ-54!I_q#k-nS?5NriHAlQkM zWbo@`1PH zcnHUYsXqLXSj3^6kwe)hw;#uHRWtXut@~Rff0-8)E#&Wy?r(-WpUvMvSszc%%as!o znHRU+oP9be+RN#}M6T=&xO&w=m-V8T`<7mAC2-jtcSoEmPbnLl8Mjx{$*q-6ZiQ{% z9pXE)CdFuTCDFXGV%>y1G?6v=-%*utHt$G}hBNYh6lFwP{+iJs?P$n;>Z{G#QA)!G zb{KA3@VYU8-67GkDAA04QDnSGBhKXp+K4Y#;>J&?FV@AZ#2bSE zGs#a16Rf|H+pyMw_gHu!dpDpLuoW}GCDT4;-M>~*iR`6)<`FdA$+otV=)K&2zoOEj z%&dvbn+6>4eV^s~el1F>?@tlmA7^HbtkL)6H~9T}as^ZIGs=BDWvdTqIF&Bf4RsH zPupZ+Z7y4E$#)C$EkDu&{D#p1F%Bd~65y9|Dj>!bq9MeX%}G zSs-U$50GDggvC*4)5&Hc(AAK6%rq;we(2A^wp|MDn#@@{2vbk7v$E|6|-{MqpG@i#rsWg7|<{D}2 zmRG_v(MO1=bl9#0iZ8Iqt!~Z{;4{kM(@Jgy2(8TaThf$@q~g=iS1KjozE~BX@9}5& zdEz<4@poD6J%jvVewELFt_6|gJcjvpT`rR+tz^FBSbZ)ib0PNkRd$h;|Ge?*VYc3i zebhT#>K*C)<-P?fFVR{)efoo(N#18`1wU_EVzSm-w2yilNWItE$CCND%IWv6JrVp~ zr}~EGQ!j>u5=wKuO^O(zd&=e>fiY@NAaJ z6nYftj^wYI1P8<8j*Vz2-I1(hbKTMBw_tpDs2uwhtOVO-{M8`TpK1hKd3{f^K9P8o z3pTTTo~bTnU4L$q!n&v=m=d4pzZo+>ELYaRx@%Kdw@Y-W+-icbK{XWVZA!P>tpnO^{_akCvm>WS|Y?g=8VzWpBn>X@H`1Hzb&*mF(WQxt_ zxJ=jCJX5Z$!RED$KeTt!Ot;qXpdXIlV-lJlcpMS*!^?08{qU!pG=&_?cOBY8-ZxC#d~%ZlG1p^Zwi@t^weIS0w8OfM$rM{P7F z~ zTjP5ee<7#L0vsTWzY!;+WNf(2Eb8>-g`Ud0tSOPa-j?zAUx|XNFkR!hm*#wU4HdBe zJ#+l-J&`Kw8TwNwIf7>4m8sA&efCkNg_L<3zIbJB&@#>TQRWZOOHK(r9&W2;ekFd_ z^bX5PDO15?XqR5Jh8ym1noTZNOa5^(%Dc0rHo358ALdr>EVIm(*>iobf375nKkpJT z@w!OW>x-P%Pk0hgx1nYz+{sr#U8rk>xJHkENmJ7y*Fh4dbf=@wQN)9+-2m&F-!8A& z{8a-nzpW^5i|@FPXxD@Hi@ZnL_tdh!f0ZiCTU?8{Juenjvam&h;X%w(GxapBKkv~z zui`urJLY_MxfPd!znQG!+9K|wrQcTZS-8~PsN(Gj#646zN5!3`bT<{R7BP>HYrjZ+asB zOvRUkRBNE67fI>YRNO|y&Lw~Lw02)7hCPPZ{I0-f%QeGPzmN5rky6Ddt>ULr#N$-_ zii$52@f9lGAYwQo`b|^unIb+5aqxU5SU=E(rxzK;P&%~dbC-6XkKDzHMP!zRSqpE^ zO<623tCY&^Vu8PSU#k^R@Vw@C83AT?i0vMcljxX}=$7-wo<>Y$%doKZviRDA zC9Z>!2OVic1Ic?-g1-()WVn{mysZksXnBpIje6PEyg>K&Jxd^t(_-{ba-7FUtCZd}-Wje~SJfG~RD$hdYlIS5+z=NUR zY-hL2ybo){p6kHNe!5$FO~nV~m*@i;tS|w{4=R6@T*iDW?k)Ma}tB#Lry*c1aZRBxQe&x{FT*hF<)*G%ME6k}o{( z>gk`L-3ZJ-0$ilpai<0J5fU0Nmf0MBrG!sRCVG+{;XY1zh$d=ggsUjOi=zwcxg~CCc+c-x7j` zOt($uynWPJS_|={u8cAh_2*Ht>@;VtJGJohWF& zDwcN+r)zPhoHO>;uW<+MDD1O!yK?MHo~hTqY`t4KHXPG*<=E-=72G^?QLkzqtm?`! zuf5pyV^8pK)b9DlO?{PjS(V`sdUi)ZmxluRc_?=%Fw_!#dvP8-IO@ldg=OR+Tz><< zGBR?A$+ur+AJ0bp2hn!@o4@WY&|c!NYR?PAtb04bOu4*9?SuZ>>VFjN6gAqZ8d>od zC5FiJYP%!_7c##A!dWjCG>g{CuA9+dL+fQFUp6dR-moP4aUT>cz4(AvS;dlp$*kX7 zMhT3V%OB?_Q5x1}=w^>u6C1YnoRMnIk(a&Wobfg7Qq5^;&1qzoUsj_ztn0RR+}lPb zG5Hv}>>|d(kS(Mt$8?ossP;cy$X-O74)L{}%DQECE$f(FlvVhnIph=hetg!XZ)uJl zT8k_PS+2aMN4dxn%1K=K`eVIp8JCqrw_S);yuiA0Tnj_zl8KW**a+rOw zToxuC=3CUpTGZ71*s~go-jX#ND;eBLzar|gKJmfx<)$}yHx<>gCVtsI<)&5c_Y^JB zBA69B=`5bX3n?0#G1c93mE7|U`&>-!SNcag!c`Bhv?J*8ZWfCP+Pe5arm)VSsd(RO z=z1}F5E0~l5)l^m5WP}^A#1{h3yb)i4ol-XG%;!t*ymp)!LY2i4Th&@#pYf}Y5Jh< zFh={Jqp#3`L9z6=o6)`DpVM_v@oG`%{Ap0T=!2th^Jt z<=f-P&|$6jg&hZ{TjgTpG%N1wy4QQn z+o?p{@&pv~+_KObzsnq=y-qv^d{y1jk4WU)B8O%tHHllUh1kW>-MyS!;vIll+#)8a zTT0a6csBQuZm$dLCPk`lDUu`Yqwc246t^TLLk!%qd`eAj8O87}l$#lxnZr6;4`AopK|vp{AGr_6Tdi;t-oDD5#W`B6{PnnB())LaDclLK5`=r;Rkc;z`Bz@gIc69Mj z&}Cstl4b!(uI-VAf-EQ#6kH2yrJC*DCD`fw`Fg{2NwrHG`Wxo zRGl|=Ph+?E>oeRiE%}%I@Tj+6+a#-Yq26l`ufU#>-O}tiLK57dy}yvCsbxHE?a`Kz+=hB;kN8RaC1_Sa`1G!hSWZ&o#d67S z_Cp1(p7ir6!qG!|K()jj*|L|8by719vSMYxY^L4+ug!#p9pG5oC2=|r@Jz9?JYFYc ztz4tlj*=to0w;D&v-S+0XN0`B^zJI&<84&QOm_B5i31HU4(Qv%GBt7tr-BzGzrX>| zcXxN_+h2}>r2*U#Sekd1o9;4yIMV$?ldA@%f&eBC&8992)BPt4OkY#6j#`gztT>f> zpqSzAKL2*~oKJ`7!!a#@V-!`UH04*QI|RqvQf2=lTu|Mf5XvvL6(vlB@m9*rQ`L-puIiHq17=L;DSa-gV zqL94ex**^BPiLuawK)|Rc==XGtd?6m>YBhLNRf^%X)psHFAe60I` zOUZ+e=w$QY_2>F|aFtb1Phwbdu*-wJ{Q2`DTW(rVu1fxVos?_BLn3e9t-{aJmZ-Mz z&V?SRxX91aW(8T=O4LgMb&Q0GAc_5Ff`D3GmUg=Tc&I0k_}^d2Q@yuFeS53u{SwSe zKIrUq>lfv9WQ&{r-jSf^E=HB0=Z=YDGIbTaDJK{BGX}?Amg$Dr<8hfk-@)K8&s=>$ zH3QOW<~!c2BN;_bN%Ye$G7e_mg*yy7_~8sPhshjfO{||)MGLv68ZG{!t*I8?`+A>t ztWgX1zTSzv{k28Xzf{FUR*hocKukAy ze=5@r-t)}T4%HyDLI&?k!}A5DH&evi$Hg{qofHJFZdfOQ>o!`h7r4p_M9W>~OV<|i zI*5{~86K;dsnP{5IW#M%Ndni@^CWPsyU+!$*zt6&HYZ>{P&2&VG#%-FzRmaA7~^-O z+DpnCHm;ZKPn9Wc>@MmKwXugwY6@IiE=mbpdpZSyt2rK~XZVIw{`h^7g!Dx8ea@M4 z9}8DJfjaAT5$W&J`BeK3F{U%lIyy) z0afDQa~P6*+b9lR-2eJ~Tdras<%UbS;ooREQ$hjT9Qp^%;XH0G&0#Rq_nO0<=ZZC%pWaL-Qqo ziAe*jNjo}vCjIG5YUP_WN|_d~9WqIzYEs+4q;XW4V$w|vLqq&|Wn6Xqk;HFiXbjf? zRlLNnD<;vr59CxZhTAAnE)o5y1MOSlx!8UL)Ww?EEAWWCr0G!dl0$2Wb0Tk_Ve^u+ zppv-}&~2Qj-LIip?|;za^mNA(#NXkU4dQP}?w%UN<;rS;crNYA1@V>)RNOrFpXXH* z1iT<_=X*;txY}&sI!o9q0>a*tFV?I!3o+Xx?7FiB!(FC{YsGI=<6W{E$m2x^4$T1t z>fPC=31RC1l}3lxn+Ya7o8*KN_7SCa{6y~KMF)|pcQ?wB681@yOYv?Qb%)~jr))MO z%U?rjy-Pfo(jRz)#c^#50|(!LRXDgQr~LT62VZhoJ;{?Ezj8p{GG?-o7UVF^ewy`uZ z>&~gBv1pH}<9_>mWc8ukVNrilF5(FaobM?x*D8=HZ!xDTAcATXxXD+*%LlvEtU!85G?8S@6&qN!1{Ila>Q+Sxp?>TwH=%!t~kVEq!H3`4Fogw`G zBH!|x=QVe=rZn-QJ0~<=T(2!5{ySHC@j|4^Zzk+Leh;V06n=jj5zYMPHP5j|tonHI zEl*TJ@gfs#ybj?U%jU>$=LM7BYb9tVqF-{#bd_U_uYIl(Jo&99_>rvIto#fSpsn);?TVvo@ zd|-KOu4zX>jFgVTd#=>zEUAqB9{|;(Phab#U1pw!i1@U&7?hSw@Tdbb9ew1`JU~rC zpE@+f;^_2q9ev`*$)vm7mB^v=IYkwZFXCCQM<0Efmc%R~&sUye0yAr<&yw8zdCO>0V)f<1gg{Z@9 z+Fr;4Ha6PkX~{7*4du5K9_3m{H-Rz@I`S|Joj!9C=z8NAf$l&C-Nn&s(85l@#jj^& zgFv^;hwevJDn9mf4?2}9bZY|Wes7xwT`w6i2YLLdx7F0Md~|NW$|>grxUIybfR(o+ zF+Ff3unm>tk8K>|eT$*x~<`2Cm^h{4Ys za;Hwl7SqTqW87ryFIsiHn54twja;L~Pm&|$&7Wtc8UJc+HQw>&w2@VK<0fO*cNX5b zspp%lhduwEvEAt>9?A7oGku*>JBX5=QX*BQngvQ-o32!wRHYstQAH`2J6+N#h0K4S z6*#4pC2l0iDR0gBV(BCj(T_Q03gj3%{s9|=%U^tHopLa9td)PNQ|6vxozkcUPU*pA zd>J%#k)ve(hhU$M9Bc8?WVz0) zFuO$QSY8ExZBpLTdw3VjdWo!>E;fPHu8S@5y4WV>+BP+Iu|b|uDqqDhXK|?wS=j6a z%H48~K-mz)y+9dhB|7dhce_?Oj_cD~`<%S&pr4gPb3;U1`@9wzwDythT%e3~ZANLZ zFZbtF_EWdT?>#l(mPi%*X~De8K~%}f=F5trvdAUt-XmnqR?yED+)@*_CeqqNfwH1) zz^xB0ks@WB^0?JsdXPl)znn7Ppqv>0IDQvyjo(U~taK5pyU(9-a?Jud>wVSeOXsA|UB`+BHU^`MXTg2&?1 z)AT5miTWUN{zjeE=j4eqJsuB+$0!klpML+a2WHv$=HlH#-v6+_tpDFjg&iJV z<)WS4%V%1kXZ>_N`{ktI)z#`*-B|2-^z?k5+{~9t_iOlK3-FJc`F^ScfU@>tF!Hb3w=D-r~UrG!_(pWARSN`Z~1h( zkM}TIi6$e{p`Gya6ds`{-tYpc;wrfM@Fzf zo;Sr-N&-NWSnr3Ir(uwo-irHpR1>M1zA*?dvr&$dL3p{9x;i8;w?eL%Sl8|0U0M zUIR{`^LhZg)xSWt$FaA#8pv4KZXwf!?E=|nI7A@3!$S7e=@zn6vSLR#$bR%88>YI% z|2fHnjJ4`MWP1Y0Zl}r=$c}K3IkvobLrrWM3uNA?pdPAtcy%B!fY-mLg-7=5aUpmm zIcYAHV{AWE2@v~UcgsDF`S;50ir1URTf9zd3SQUZR3EQ3t`#hn$Fx=QRaw~TWR)*!!^L-XGjir4Zy!K;MZD_$LC+Jq+A%Ev1kr%020{KNn+ zk!q7{8{l;mRi@ze8g+;8x`?fHs_&&%deI0ZUTPKK^^K)cWICsUnWJI&kLyY~X@0dK zis!%T{aAelJRr8XCx~rR#I9*<5!=uN#AALf)-V(eF?Elwo6#GW4d(6w_zO z%Kac+y>GCXUR~-^PGbo5CqK0a_}kP{HL{sgUb^}+zJR@NbIP0{$F$rZfE^`c8$Kdk zy%MU~^@M9Q3dA3*29gvipvkp0@vXRd3g5=FA&}P}FR-PbSd*TzxLW_adLet$fnLB7Q>CiAw)Ct?&+GGyRY1kpW`>38kb2c|oXzqrT z;*hyS7lmex-ZS2_aR7}-6`DnIq|m%~LK-yt9VVLjt8)J{P@$cMXw!q zv$L+d%+s#D4d?oFvd+m{Z-b<5$8u=m)Ffmrv+ejEG*YrIa3E&;Nsq)6u8hwjef0Vb zkt&EeLDJKNDpNolmfDVc_phlPXQZ~{S5FLZ+$n@iM4sVP(2hspS8$xdN%J@A36ArX z6|rgWf#U~u^r<)=(u4~H$Ke5vtK}Rx?t*w8jt5G5Ohs3^#2hWg*( zCj>aowA73A<&@X|O1uKa&YUs}VWAj*lhPvA<6YbC$1&krd6KsKrbpR!KQ)JTzZ$F4 z+Wm*Qw%wN>>9_kTxnO@vCEL-nOS|{t#ba8o*FMUfB;`IMK1(^bZn~I<#J0b4zq{IM z3u*b41aIEq+js_|?ock%wi(kk*CH z$jc4lmmHdd8!KfFV+O4_dU#Vy8RFO7t_z*(H@ylaSG)x)9{l*_H@!tc(|Z=BQz%oB z8o#z&Ra5->?c^YS732kc8EMH8Y00S|Kgoc?Fs1<~P0WTO#{YmJ@#|40Pm+JxSsmN% zq{(fCIU0#S)~n*zFe~GcU!+QYBS#vEzi5bxYl5r1Fk*Xe<0ir$A_4pOng?iqyJ~bh_2|YCbKPbH3bpCO+eGEI?=T#Lx z7U0F??T+UjkH=`awn4cn?dl*Ym$}7jANF}y`tz@Zt(Nv7epyDaQNNt4T#UcX?4;)x zkt!Z*9>lGA_;SA#K^NR{7ulHYq>e9J%4&7g*djDB+ zr1xJ544e!mxjvDOD&WOGY#LJipyUJQ34C6B?DN9KjdN@>1{e2x857hNB45R0oQkuU zIQ1yA%vW(upkkAB6;F^=5ka!n+p1XIauGxSrw}cac@9}AK`>sGAE{;5Il_*R>C7sj zrDC-7Mw%LNXkI*4Lrcu|>Wgww&b}V^lUoEcthNVy2ly?(Z(#adtzyXmQU!jL94YW! zs4@lkKB>J?j2%g;UwHjiC^g#NC%>JWQ zNP|OzO_*k|rov6Lk0Hx;%$`Glc87`xIVNUvLPNl7%Gr1k_wigM zQUxkUj+BYZQ7(mvbE!K7)Ss8t1k|)p*8t6~I4&S#nPpz2Bd7fJ1`Qw&mz~Br^Ehr4 zHui)k!p3$h>E;UUqvsfjhA6PhG;@vVN_i%h2F(onrES+p`w27$V~0TVH*2Nn|G5j$ z(Eoqu`u|owG!=T&cng}G7kWgh(D0bggXUR$nF7rg>JEjTEjOxOfueZYBf@1?* zMq*OXNKZs!_7f-)(PQLz0!|al&s8_arhf)3ZFmG=1L^rPR__ozqXaR}-8Nu+A!o}jJoJu=P8W%8N^(Z=mIdnUWn zh@b4wlaF`>y*d@P6c^dFL;BehI7( z9mHpsC(ucI>Cf0BY}(ZB;F{B>gHbt|u|vFVQ=fjp;f7F6r)y2S4)SZNl1ME>`Q%z# ze3dL3I*GNcj!oI*a-L4f!>vv;_fgYrQq%8j(d(62pk;;!WvZlq=S!Jc_LkO;7W663 zq^G#MJN!AgU_YLzn&wn&!#MrFH%(yV9AP{ga(H3gye^0v9Ga6cP%vwOUB%JU zxw~R^g2SwpkJ&O+Cf=1RJX0;t=E^h3-NHGh=4Zdk5t9P1)#&`Ys z+PxPy9>633>&B_zc~Y)`l!&(Dq?v&~1+YHKfY@QLS-@^&Ua|5#1?+G>4+mg(WdfM+ z+m9Pt{kXANOUH+j(|8t&R4p_?-1w$mnuR-M0wu`9j&l}1I&~oO)suV*Wfp&fs0&^cB?6JZ9@Z%T;Fnguf@NaWuwHn z+BL_U?zlDCE{Hdqe+i1mw0M3{yh^~RC&kYTVpQ)S@J;2cw9jInYnLi3av>OnU++KEU;_p0K&h0XLtLJG)IpRB6UCnx9^dD`&y~D zzq?CKgc#-D{=g6+Uan&aant@jA*y)vJg`qL2;6u;faAf=qcWybX5R&21;;Gkkk|7> zs)jTRm|a>o4abECrnId$*chk!5ymIX_4{pWIm&qC-hQaH<*EH@w&hmfOE%&8fg{4X zK_7OzeX4-heOne{xY*L3QN8CBkvdKUwk!t36i#F~TU;ys?ZTRzvI$$16ZOangp&Py zPMqm(zXA{I?RmG`=fseJ6X&MiUbfl_g{j-@?W;>u+c16VL%DI4YEa>8umH3Kfb&Bd zh*SZX6=?7}$fp2cKZG3w%3nLx zu7~adTK3 zc^1VG7Q>>lXcUb-YI(-Wx-s31l1emM7fLPLQ+s@S$iJlMM=9hUQmoXvu5znTO}d~s zU+LyjDYgImeLm;=T)tcIdS&0|^ZA@}KKFC|p0D8`6oK{oDv+KB`yivHpSfBsUB&9Q=;@932oVI!F!c;6XPB`g06ncY5WPQ|Vv| zPLqTj`oVB;KT{b_6U*YY5l5elab7O1mhy671pBwGp)_$0)-iN{5t8M3_#3r(d4w#P zAz6H3S!UOFY4aCoI%0NJ*->PvK1#Y1vWR1TqXp5Ue||mM_~^k1nfBJxGQD;pBvUoV z90jG?T_VaXk}|{op-cys@#)TdHRm3j2sqhxloW6M55?nH{0z*(oiZJyOw2!&*$92v zr{SE9x!d5fu)tTLCL{avVQ99d)yk=jGoemXm36g7p8Y$dk!n^Rz^4Ade8_YL-7$4> zia#&K?+6#KrqIh-d;`ju;+@gDVee9GIhe;f*!6QN&5}xE!D z>q_wz$3r4j<7oO{vF2j~A>D*L0@T^u@7|%+)x3i8YN~7b>0~t|>d> zjMv&aTIP~}sHq2QdIJZ13{Sjd-mzUkif4t3S5yAkEdCOjG{vjJkLTgtT^y8|ikGaM z+uJwH(YJXY{|mFT1}F*iD=mTkgzI;~^xKYU^e<>n?StWg?#R-4g8n}#UCGj42>Skr z(g{*}3=E*&1zMd3XGIn5NrSGCE!cnQ7V=1ANfjv(==FjgL5&eI849 z67)}44l3Iq=t+V;&eAOfT|u-d{h**55bY84yol1B1-*~b9fSvf^8nH2P~BC6{(|U@ zf*wq?Ig*zs=y!>JU(mM^y+c?#gfmo_AxQ>XKp%y}LGEXWhMH)x z>jb@-=t@C9LbQ2hJxS1uh%OU!H=@nStiO(Exu+BTf}mRyogjjJE9ggw9wX?+MBCE# zVnO#Lx{sg_<2@kf0M1N7-$3+@g5E+j1SRK>3%Uu>7YX_!qMJ$EeFc5u2+%Qto!y zZEk>CDd>BNzE996v3yaMD4fp~^jQ?Fqo8*Z{k>G~7jz0sUoPl!qRk@b071tQ9WUtF z5tZK}=${S)ZP(IrKSA_fsXSHC6-2KGI(&a`_`dzfd-ng~IY}?w;CdHdpnFPQ)cyPM z8L*(ff4@$OXJKY~X@`{SO0Z^IfLH3Q#{28=8vWl())hYH`)H4O*_*?g0{sTo>F2U= zos>^7Ai`zH{Zk4$SokIiuUM8VhYsLW#2H8c-oP3Rr%H;G@#+>nUwfglPyStH;iK+# zJX2Q`A3fbOb$R^y;j4M8P5FSyR^t(9H_Lz6Q+f!Tw<`Aqm+0#QKgNOz_!*Ou$pI$s zS`OlVa*Vieb3+OKV0I5Q?lt5f41DoI2Ry=-F-4 zXu;W3z~0!xChGDNHCRwC73Qb710zAHYJo^k`LO%ptQ0RL3@gPy!7rSZ;>f3 z`D(*$XplPe0j#GI{8}LlLWA+I`Znf-^VJ4?+q*(t0e3=y(mXmk_OkK8x0a|2&-lQ+ z^Lg~iFrrLV7Na=p|0LoSA7W*yGM!KOwrpcQ)Z1r7-$~Zv*v6AM2c5V#Dj9ex^bz{YHSopTtUJBCs-=0jQ?N;u-6qIaOLZ z|BEfT>ie^r2{=EN!H>-I7FWh_#4WCmfDAfF!%eP9z(m~SYR*p?52sISXKv2-*|ZB3 zrex|^?qDV71b%}LGz@)#`W7%IU!ZQq5WYlRcDx1$aK1iXgt`&I_zv~XB&poWhidt^*nUv6 zknOKVU3d=^OK|v`!!P~~yaY(BJ>-UbV3D|t|Klsd(^X={2l9*$#I}VGEPuHC9?g;v8SYD1@I0_2r#;5>B}{1V1*4w!llM%Vg) z12XcS!e|u(hGe|pRQ5f%L$_P^pzhm-AA(lqK?~0Ng|sDwo#hCN#NIlv5~)4D`1e@# ziPY#{28A)YeAZhvd=#r5gii^EbvGqA7~FB zLa1D~^U(IKxThVdhYBgqNCs22tQcP5j=E#e{3y?a#$*`Zrrv5|EXy#%uMzArZpXjs zekeH7?H2tdZg-vDpwTI3@d@U7xLXNtou>tMp>`42Ctm8m6|SRG8kA0~2y0HG#r@y4 z5VjL)j&ipqdLJ$1ZhjECR>RGEAh*HYoJ{lc-(g=nU;9=1*8rJ|vwN%8U;+4AIbb*o z{WrcuR;7M~nrV@y^zY!9lu>000i^eD)E1LsdC%P84k=?}JtfUgR#jPX>rq3=HjjTI zq$xg%fWF+Q)NdlpAE8pN?lFt=uWE$2id1R;qoUF}*zq-4d>|^1fvOnD`g8Jm*z2Qa zlbw!N?KeyxyezC)Vnws5e1aRbNrz^CKjPBtd29)eVBGmi5QWmY{+#@|I)I0yB;gv| zB<_y$vu~knUVJ>PW9AcN^8$dv+5Bc$9ZK#6pjrcIspPTZIR4wIWH@H^j+aSScf4Pr zxbAohTd>o;NWK4O4LMi79-zO6u-j95peYqJGi4Vv)~cMYW=2gri!&|+AGN6dOd!qh ziI3RmmnAazV*D^3C4@{+)2PG5Tb%%tq-(i!U|CMhG&V zV(?d81o0z{KJ>5{{T3cUlCFE$F&It9(Rvd{`5|k^812h+V9*)a%c-Q-MIvX-d0X$f8^-OU||BDxgeT-P~u~B?NM)@fX zJ~kT)i}JBd3~eGZN+pOSqg3j95x=i0Ov%M4vFVu{B}U{GCvB%43APjn9O?&&L=61AT~<{=?5;Aehm`hRRByB7JVLSTFas z$0}=R|GX$9{fknWpD%$(gkc;-ne|>qDW4#{x(d?I`OPK$Bl_T;860m1Nhq7zdT@Mi z!&459ZGInJ&OfM64?-@OguR3_ZJ2n7vR0^fp%iD@P@mxyY|-Sf_)H_|Km1)UF`Q%C zkZXK~f7Ki)!1#=wHvEn{p|{d*xO>z1#gRYh4wyESEa9P3Ffj|MQ2c`WV^mK_4r_*3 z(abzPK{H?QHk$xyj`EA=IAIJJ&8!4TPN22(HBsE#jtK<3;;Yjm_BR%p_Vb}}X}^wX zziz1gxAYeZr2T=$GM(9eeRumeFkOUuIxmQ7^2=tPn*7r4hp&Y>OQn4eAjbvc&f9b9 zHQT*t-7bt+oxMWJ{Iok%rrPrAB9>{7xxj$Q{BYRnSo=!si)jB;i}xcdwkfWvgG)t_ zb+l_-U|d5zgu3Y%(_nqaF%CAR?ON3SLmcC{ap_kvchfEn$2e#lgMZbNaO6nG_!f22 zG2;1xj&w>pes>&WIK74534j>p0TicWJP2|pWQY~R#PbP`@nLfqrT{fZIYuP}2|30a zAgReQYT@*;v+;%CKOMX{r)q9OvO=G9^f&ZLz4R9idZ|y5l|Z%|Fm*ehkt6CszvM9k zI^ZPoPQaZ>q`eTU;^F>+2qu-aNF9h!+!>q?{6e2hx-x26|@()m)1Og-fw)>LF$ zr(fBMl`6+&8X%9rWmW^^yqGluMux|{50JV5&s4`ZuqN0n`ACOc!mEwZtKhf|gh`)- z87O*{<3B(tEkP!En}sHuP?#R6LyXn*pdWwLMF@aM9S;3fba+cxhr_@H^a;ZS9QO%xE8rET{0sDaeA3;$AusR@_$* z?k@Rk2=wO%M&+}svN9g!^KS4)9n2KB@DB%%t@hbd^`{m)h!+%uB)L}9>u-Y*gA-T8 ziX@|qBt@x^K_|7jbX0i-3#v6YEWli2Vz)`CGpjJp`=)JiHw(e2ZVh86`_d(Bq2JC0C-Koc! zGJbgYhGg{1={A+H;VML*ugfA%5x_e&QqeAy)YL z$ncX(eolAu(>0o(_8_X+UmAw|1#67pq6mW;yr-nciyP3PYrY))cK=!HH*x!^?e;x5 zvA=ib2U1VhP(0xKGx0olaFezqRAhdCqA5al{Pic@&b;qV-Oi(IXRUq}Fzi7YF&teG<0Oy1U?6gQ(Bk!9M9$f8O14j4 zmOxg@R{;4q-REDG21X<0ECM%_^R4h2PYLQ0IlFOn5pwPd$=T4zc~*p+#EP7XPmr_M zC6M!Mx16=3&V#|4Di0g7VB)0Z#nXVBcB(`{*WVBYx`@H}|*4cQk%KEa+=Q^?s7HAl&LH&=)PW(rjV zlAJ(uX9^YiK;HD);jVl4&*82+35G*&0f0H`kKGsej~#egNdWG+3w z0Y*L08|;-nZL1#j#C;1rv;mp3-mcF70cGL0F|dR)U)@3&rX^Kq*qN5x1uuqk4MBTs zs=smWdXCXCEh#d}=3n(Y8ZpY&^VRl0in6V+vTs3MqU?@XzSB&El>N1c;@=$cj!;ZU z+3`l%7bZj5mEbl?*@=khHusyWh86fpB zf|V+GSlp-NQn@M?*yWG;3_ zq37-itG1K&+Vr{rg_ni4!q!mkq1{k!Z$3jgjl^9_8l&UJ*3q8&Q0{h7?x){qlsDeY$_6H##!X(%O4Hz{e?1rYUxT`p07WZ;Lpn6E%obLxE^Cz%`> z)4}^vu*a(u25DbOzZf9r<(l5=4=5ipCQ!yve1?o^V$YJ{co!Wq#!^P65jfD#Uuzlf z*bEs1Fa{Ov9lIzGP)15m)8;G6;u(C^kHTv-nSek%et6akCA zhJYWy2-x>9XE7&-PjwH(JIKt1^Fvavl^Xr)k=Goli500oGE$!jfz;>QT~cpgckKjj zJuP$fwY!m635m#s1HTUoJyZK_dJllY+Xk0YR4XGBK=md}Lb3Zn9*TXAWvN#j)!KpvA5~Nnt-f{vs0M3LapM^YRH@Yub5`aPN062|bY#UJ8<$ zy4F|zHnD2Y!h(sqY#W$nr`ICf>HR<$I=$0iW~bBZ&rBO^F>;q=?4c&c+B$|nrx$~z zC5|xoSDl1(k)2*=Fw2bn26>c`aaYu(J3YUR98V@D10ZVHiQ*uSc z3pMNpw*ZG<_BkUmLthAznmWB}tD+1&ZfDrgA84DV4*@6?zc<10VCOu*)Jm9$b{-86 zqn!)&3pNQkbztZ7C{i%}YM2ZwE3-F36JJAe+F32GcW>q@;f`1_Ms!AXXeI$;8!GY=EjMuv3(n->?NIb9@exnj9+baM+>j5B19c zdLFt;kBM*@Xo!{ChLyMwD>ZyNHm(y{iFdP-AIZwiAgMn3Xr~!*YutVu>wjkIyG~#8 zpikqk(+8>bV^e)xUmruSk2PAxV`hlw+o4g$V;4@X;DI%MGdylaWANO4t4n?Bby^B- z*iHgb&3)>(e-dME>7Rl-0n8cgKlB-G&17u&F*|&e|7v~MT@yTjH};K~bFd&}9)AY` z1!Be#w;wB!;xFQy*a$?d_ygxYOfYL3L7?I-E`eT-%(I_>q`KRWLzbnG(L+ERXT>xh zMIk;8!@^YTQPk=9C9%Rsso^7&d>r5G;$tGC-0{nFkksUt`*6_O>Cx;nvFKs?+26Ew zw9Z<9E2HYGu)b&>Uk21!BTD;5uigB*KD2gI?S%g)(2{*I^z4-R`)gh1qkkw9V43dV z$tkl|%9Mo5RNGtsWLe{oH|b;-6U2Y7(EI)l76%>NpyS(&|u@328MQBsInVp5G(le*%2dgm=R& zVK?ovQHz}L5A5%NbK3njhl*dXQ?BkU>gkR{XOhu~Wy+TulJ9IIAA49Q&k`&0CADmP~KpAFW40h zIsrx1bD)9$9z+s%cI`H=*688jT#XX+MxxJ!E>U`spf7_h)m?&qKLR~n(ATl_^@5&4 zbexoaRM3iO+5>GDMxc8N`Y*EfH=G9O9z>fl*bRdImgwz*zLscA{K#4pK`$nHsi4mx z+6E*mA4OP{HI>pk1l@_O6$!dB0=-PoeOdY*L6;GYJx;bgOVBqFeY2on zAlk4tUeE`LzC_Sth&GE5_X;|e=sJS#L$sN$w-@vetAO4E$AVgJBzl{)og(O!M6VI_ zMMRrboH#+xCHgf%#}JK89CH5CO0AY2Y`av@-yaF1D+E1&r3VRm1<_`rJx|cL5Phql z=MZfsqya&v5`87mYJwPj9BD8dBLnvd&DW%y|m67+8L7Y=Ld(Fj6i5K9jc^eaRM zq;x|meFbOBodo?V(a0SXY?73|lBHV$Js`X|iS>xzJr^G1;+;3JHmlXTLF;*lc5rN& z@9Jw?tITVV=ZaS)t&Au_`oJdUIHsvTdN9MS@C8nAaHw{Ej@<3JEADQH9{!tWe)o;L z6L58&A-dHN@$Uf7RdM_~q8aO9`d^DH!O+DGjs;g)t;)+f-I{xgdiQE!sE@bzN*G`k zrR*$9cy+nf(ENLG!iH3|j`85ulNCE80Krq=z#8{)Tt{+07UD3NO?pLCGDgkvR1|E;YhYOR#Ot zWoqyElXQH15i<_oYY%*m-;60w$@_Kid;Cd8JifDoAHL$p<704Q9!n+L9?bmRGqh6^ zj&?%plb%Ic%{>ioYce3vzPXi^wrzCgwg+}+ zWsH-xDB!bjG|UmdLrNZfxknsj$D0`HbW|NB{0i8Is8k4_x;4E$D4iV^Y{2B8vNX&m z+U-XLINu-Ib(!;NIGDFU#=Amie*(a${xAuG`EfogFh^C)g5GhUx(yufPXtKWW7H`| zW=phluKxr|IRWluzoi&olELwZLK6oRy+gp}F>P%Ubr$YyfyAX2ZC5;+9+X4j;W_1~ zSJbi}EyCi|%sX|RC>H|pjkO@9e$wk8)(@_6spcFe&9Gmjf{5|1-K03<*Y&kxV(}7B zIb6^)@e*`oo`qS>z1zlRdIPt#(J!BYw}`Yf2rR&ueD@3pCo_5PUa9laf|Q~V-`8qQ zdHjFDHnb#PLn2m~F69%LE~*WtZ*VjH20a5p!-Kb`4+n`a5WN-5ucwNlN3+M7B~Z)zCf&-C{g17 z3Us2SAt?n^5#C;+e)4NUKj)*eD1Uz*h6?GY2S{qtPu#Cg0^g<`Fvh!-+04$xRLq=z z(Rq0vCMWuL$vTh!8X^~VZ0`L8=8f^Ty`_!Ee-U8bZ9_A+#{Iwu0`r-g`EBh|RIbtD zS%&`{3$K|9|330RD;E6sTIJ&ZTg`tcSxo^E&ns!CL}qH9QmNnW@_L?IZO_IuP4aja z4%e~pTkx(nPe^1lZY+aAdGS?%MC zGJ2s({L1ZQr66e|o9(diW?iDkj{wj~VHT3@QgIASSGW=|%;~RU&7a+PvJQf=gL2tb#L08B#%!{U20d z9|dDLPbBBc@)$b&o~`*k5EFR)+Zi|2DW^8Zq$JDgQ7~@dha6TcF9RbnOR){lo$;q( zDceR!hNm1(`BlqUzFmq_d}Iy9b6Grybr8u_oy%feZ{;|TdQYPr ze$kmB{Cm63T?v0fH)UhNE;_z@KZN51Gd3=S$Jaq6EN_<9uaE_dzK9@ai1&P7O}%;n zsA&)MqEEB39#YxEQrXPG$Qg@(R%gP-ps`3}dfGz^bQO~!jG7`<42j@plb|0ax=_$T zh0=Yc1&_4gV+%b5-IAqC1U*$s*QPYr3fdEa9xmucto$6H&H1Vx7)jFmqDGMH;Bd1+ zU=N4V}7> zqW@)!eK@7-gFIi>iWLXbv%oFPaXbE~;cz##0X6|mThg=^nx;bYB5AtNC4&j)5q*uI zYYF;#qOTV8apZ$CTo}O?euOsBLM+i|0S!OXt?`QtC zGUgF>`Y1Gl-Y9ZDcap+b8AZTzTE~%-J*SqAQ}$w=lDY7i}B z)O^kdf|}*qfj7mpeD?XS`P`7jIzObMQIj94&FB6?lXgFyhBLwcN@j--^-rDe_*>8C zmP3h7u)p0?d&<`NVA)1_)j_+9tQYjq799WUET|+&3VA8&-f)`7l&ixtp}A52(SA1u6eKre3;&|rSK+UYa@X$Gni+*Z>P47K(I26`CrD$IJ6C8bNb?wIfbK`MQLbOm z{fO=*=nh01^c(=u0nf{kb#^`s$`GVqH*0$sGLb5J<(V zw@c&k$UV8hz<5J26n5I6D#YIkb;=kV>lass=MF}!`eeVOvFz_PltF4FN%t()N6u-+4B4CwQT z#sUESa*X&~J|;`5pP>J41~euOME4PNeWE)6&Hh{a6PECp(D8onxFnyysxU!)SQ{Zx zk(C7DV7mzy*X*V z!13(BVNS~ql0Dp%lUP=SC!C|O7>cAg)4pp+D>TalV4OJ$oavUnHMlH z9C8A`sNSYCY=oMMk3Kf`^5EoyTdS&ykEM@n-J;>;1h)1}+zhO*Uk87TFIL@HwF~|5 z$g?qaUwLV*m_WI&U!5m>u^R;LU513Ovl*ohWiw38(d8qfl>*u!a5Q2vFML7%4zYG$ zlnwpPjI}$5e*3IAZyEKEiJW~Mz-Bz8_AY=?t&9{P%NPqBxNpGU3jAYaRQQm32;hGz z<3qeXZr$Xs!m;$0AjUg?#1&nSA;35QKIRW!uu(kjN=o+lhX8~Y^X%15|D#4rdka3M zPe@a(Hr3qN29Rc1^|F|}YP(zetp$0_g+m^@!836;exaf6c5l<~sk5Y=od3|yK;6zo zS$^D{F^1JfO7%cgJAE`dCnY}MZEhdLkQ;inKN7tr**oMZM=EdM5tzp}ZDg|z^<6#F4SkT=I3qMOXbewVb@o6P)+UPtN1JXwCMA^hTQOt&7= z>!;FAu0Hd^e3N5k{I!Tpqz^(i;v06qERyb}4V>LuF<~Br$MibJ#)3Q7XRM5MLf_WV zml^usgnqt5|FWisK4*{~6IbLJZ<=iZ%=x7iH$DR1#vT@e4~l?i+Py;XE)j5_ew`Wh zfSl1-kHoA~Z0#+jpX0>{09EqWf9RZ=zTI(2d(JB0FV&(ex)D}KO{ zI^LKDIOT(P3BAEvzG>HbWFz0l7eIg*WIdl}&T`Ka-vI~Z1Toss{SOwVmm%7!RJZpq zDode^GVjEYGk#5GYOMVR=hQ8o^9!mM=n#)n7yi2)=Y!O1U5C5b{5!66`ON18gv_`M zzu+#t?F?t$tA3xa+iCtE+VSajJam^k-R*RYYNw5~lW%{cR|PoUwBpu%2vN{_s=Z7@ zi>NO(Oxk}7$o~)@t3mCx&S7{gxWXms8~|M5F&QAV*x&Bt@WK8e*1i!xMgQvecSU|O z_b>6{L*rT2OS<=p`1^?d8E|6wfl7}XvqNqGH zj(|`*4@)~k>>*A&mqYbUTu4>bu)HijEWQ{OlWltX^k~Lnr=B09Vxl-Zu6L zy;=dgst?}L`up{Rf0rv>w8$UOn4HsDx9Y6lqBEPugr%cY<8K5oCqta-uokr)p%J;1+ybJKgH=#kQO30> zj(vhFE`^BjF{V0M5?q5~?A0b9y~^}>rpC&8`$wSTl3?PmXyH?E7qy=JKiUJ%Z6?XJ zK@>HK#0?f%fuk5*oU0RV=#8Lz@uD)e-1Jat8sxbvw1MIS#_2!W@%gp)sgVQfZa6;K z?2E9*$joH2*MYTr;vlN_?>FDlez5z!T9~9ckyL?Zst+Dw-VOzEsoM=k5|B~U1-HaZ zd?4%yNw%eLo}eF$M-zGt&>pE_MQnppcjVFjvG%0HjV_Z@Y|j zMT}IsIJRx_8ke;uqt7Z@j%2DD=bLijKUzihuLW-+c3Tp!v(otcV{a zeL-nU-_Nz-_y{ac9E`MYthb%pl>VmuN(R+41HY;WE^eVjU(vm3;m;p z{urW|^7h843FEyYqh9+59O~BNy~?+>ezFbydPD!+*_z%lo&CN;|GLnhYv`Xh^nAq^ z^*i>ppK$0O6?z-zvS_cthQ2FDWfc<~C$PIZ^w~oHv7x`-(9b(h)6a7FzZmowc%2Vw zu4zru6B}P}YDzgM;2*~~Bgpz7W$|DH>*w_2ic!O8g;;Eg|)e*?SAZHNfm0xOvW z59I?qV>b-&+`A%}TRQ%juPJH9k;d!U+_8cE7SEDeaj(23F~Tu#y!{-22&Cq*c2J{r zic5~Q$LWKo8EKWFgpmPfwZ8yZUGkca@7}2B-}3M%keb2NS;?;Ou0?`~yCu zLpR{9W5=?YC9mpc{(O@*{^#jiL*0xXo(6S25!rPN0c>Xcu_`3pkL= zq@K72$7SuH{*^HS&8hDn*EhwM-gq$#7wFi?E&vj0!nke#o>Ws|t>=GWZ3IZYmLAc5 zg)odta4QH9)=pNDwf8iIp7SNzf8#8pmtlwNQd0oQw$5-M zsMJPr3?d%`!fSPo*BH%8CKx7<`M_jZ9TS0VfZr(cA~1$d-3+W#n=bYjkgB;0nqc8b zCrY;41*FG?Y&?R{ztH_gRip_0(G5Kl`_bxi7c^m@emAjk4ZYF#ggV^~J&((} zf4UTriVJBD(bwl4F^e#6v30sb;y&F21&=zj!ZbHv-Lpx(n zQ^mTWTM6AePunpktogQB|EA_Q0;8e$p#yF@7seL@s(0c5(lL4rP)%mt)=2%&U54k( z)I>M54xC>-?1oMzZ7(-;1)*7PXwCsZuX00QB=lT2^eCaV-O#Q$vZnT-4~>%XEkd`r zp=aRKt6J`c4kYwVH}ri%pLIk3CUl$|+W9v?2f3m12<--FlrNu#vz;o#P1~E$%iU0( z163R!M9KE*20)La!;FG{OWHkv=2*BG$FX&tKa5q8YvR=!-Jf?()CILKbO4@C@|L^0 zDL|-cZsw={{(cf8~QP!-QCc$4g-3l8+sq1scz_(gr4b!HpKyP^*8$2DDjI4 z{Rz-0Wq(8H1~={HICHPc+|WUU&UHf<6Z(`J+5&HKs8Md{?S$UzhQ3Z{jvIRVF+i^c z6v?-F*dF}>rahXt=_|efeO*AKyXQYJG>O&&>)qjo?jv+9pxBEEldFYpy8G~Ej+*6$ zE+h0wK%;cq^lv~5-L%~Z?dyhKK<<5jMst6yo9;fAPIg1TB=j_0I+FXNb6m35I{~^M z+|auS{mczrOz1*4bRVI!+|Wlp2lPomqqxTq?ZsG(w;y(sA7v%I+|YYZ0-B{Oi4@`* zK%&(8Jn1fQm;Qs$dT!_)Re&DCjzHL^7)X>7x(!h4wl)p|;N<|Li(a7-?IIBIScd`P zb$31afU7BP=%b&Z_QwH@QigiKO~-d$R1Y__2{m?;8#;o}W^U+OLeFwTFUD)|>cni9 z%!P#h?1t_qbR(cq8eaD)Bv=e+v;?oaODALGt){r4g9&}y4SkEy`vJ8Q9()mldDGSY z39#0*y3JkUG~A$|(%sNPLN9VdcMw|N4fWwQHud`~mnNPhbh{h+^Lof!;fB6L+V|Yh zwS>Olh8`o-?}nz-1#~E&b^%@(RI8uUGo_O_!})L1-t(q&mLR*9^%GsQv7@{#Dx(N1 z3Z99-;u({rczYgiRqjEK~Kqk2@a48p%skQ~A>L|^R1I2&XESU~!Grxa;?L{u% z^#s7RS#pb}(euI-yNU497%j0Mt+opC=W6Kt&KJxo$R+x=tcOZujf6|FSn-fDSn^no zZ{B3~w%73n6)SGV3(y^w0lCDHWG~RbjJE+)@k2%C*CDfSI#vOa?Pq~jxzn`L11$J2 zYYne})J*6{yG0&MKxj#$H-15}Y4+8^!Ik7-!fhwHrd4_zS69h;N34COuzfo4*@3!t zZT!T#We3l~(Xl*Kg$+WFe>2|1kAXdVD{%HJym2&J!JD_1>d=d9a z#23ZA72d+VlN^Ya@R~soPH)i-k$pGw6~Yq4I?0iPfUk54dgQnp3FE5RFK(BI#%(Rl%$x#Gw3Tx zMQvg{{-H1|j+5i6WbSSOoeb{0$wHE>NuCsv$@s)cT&&u`h==CtvbsP;cH14pU+jQW*w7Hh{&>KJaE&ozk82bt# zTVlx0*JQ&V;?lpypC4p=BU52d@1% zw_zSF9137-I+%Mu0|`RO4t&d28lAQv>LktwBxJ(rVAa#fmWzm}834Fa{RDsz zR^9D%aAK68o82?{KQ`Mg+-yUATBV!2*_*33dzEf>!c?kz@wd8V>O{Bvz<+Id1qnsq zbM;Z3zY<&mD*#*qe*=&=Fkuo~_Ue{94%E&5@$`Qb_%^3ms}&Dg%yl<9rFx@9y3vk9 z>@O?BR~3AK29ZjK`oSYc1#rn~2X{074_(Q0JoWuPjDg2#3;+b=kR0LUD91OPEUFecW`B zY}*9I7&YIS`h3<*jg@T6%@%ep13pI!O;KZ1w!H{dM`YW(K;+t~-i14DkZE5+|KeoY z#Z$tW_5g%Irkw{+=nk*Z(%(!4OjUt7ri(>zN-$ZH$H7Z5p%l^PyrxhAF_0a$L+vV& zzKdg$W%K|56Ix<<52s>sJK+ELUrtIs{`F?AN%i8AdNu9`e)O$iQt0fQ{Jawc7L#8R8idqS}HER;)flHzOWmM`nmp09*kx z93TYDTvTo+;&KtQqo!LfpY$JFJ}2C=}* z#XeP5{2y5qncM2~Il^-c0)kRbS>bYc=E%rNnwJ zMOPsbT#Eh`Af)0k_8Z@5S?4*j_C%xqN!Is3sAaX<@?=t#yV3msxEkFC5Ul$aCB0g= z+c95Dy64IN*l4@xMz3%;dT#Yb>*_{3_P5Kw){@S5BrQOrVUzxYdMijst4a?3lX)f5 zk9SvB??$cO2@5ExPq*8V$rS60f&bWO*HEMNdGf8?-RQg38=a{e?O14U{)&=z%+oCf z{%ec7NEjKg7)3=3`T_thla>MmKk9AYi#DmvB1kE@J0D@l+?@>nc1{@)E4jOrPsrVG zR6r~DLD-1gJ?@c+ygeHPHRtWSmpiYiv`3P1USV5Ts(U*BSnw)6UA0Sj?tmBB6L56R zyq>Zr^tks~$}kJOi3~FlS(KqSoXC-ZSdoE2Lm7Tr0~uyReGxKvo*o-Lxv2z^OAd2V z>Q2ZJx?OGKw_wXkI4g+Z{m1RlfcGPs5#7{;MeIw`8)71$nG2om961r<_%`Ws+a|Fb z4g`$Lt|&*jA{4v?HSArDN|$P65x_V>&W>*(5N`qTibjkIAmU2VmElON1}S* z3N)@i3WZo)jB<9Kpu1>v751=0=qW7SR?t^#bWCytI*+B#6ZBac4Q#k{ccPEufHm6w z!*bLkl5~fN_D;cV)wrml9u_SZ^v4>FRw6Xio{Y^B{ESf5A->Nddc2??tB!6(^u2=a zRYUEU6MwVdZ>V0plFVHq=q4JS+?isZ3*lj;!7N=z&?laB#18S6PV^oO=b@Dy)zK$d z`5Hkl)97f)*AxG$;9sgYXc1zl7feK*kq1$|F-^qvJkXAAmfjYdcq-`l~WyfhGe zU#4+9eJ9p@o4AI+IWhfbiH_;_@M7nwV)_XNK|F>GCZ_KXKTg052d$I`s)vR}4zUqL z{Hz-A3yDX~#23|opGf@u8s9h{cntqWe4xYh{l#1s)`4mcE^a6WhqJ$6U5#4{?FkIy z5YjEH(at69a7~*KuW1{{NWC|sNObs*B5k(Neuv8*-QhnT1?`nMc?}ts)PNsC{2am0 ztN}la_+r72sR92c@%;qfy9WGd;@b~e z_W4}v@ZdyE`{#R__PlDe`J`>7X%kjy+Qx0j$|8xS_W*LMDx0iKM`r?6JyQez8RAC? z{^1(%_Yj{a_%1cz&mg{y;9F^Yc~hQ<^?t6TR`jkb9xH8p`b5+ z6zHBns}B)Ep!tGTa4iA0xm~xIQJXZ^N)>k#{eV>Q1tdia?G9pD zI28%=-~p?#kZ%c6e+kAfQ!$1p8lB7+Pd+a^vpC}-KTZLUyk|}Oox=>#=Q&I|qXJKJV6ABmXp3*4Ov+yv)h*#5=P$)DR@q*Z`bc^Cu104zEo);Xn z3Y75nivwyre27D-ED-92Q(g|jSG+UT*|35+#(tO!3 zAn-^4j||K?g!}GRz?Xx>Ht`xq^}|Bz*@<9ko zo|j<3IrN_SN#nBzFfR#RrAqzw`@cx-pOS?8kMPP<)ExpkcW4Rv#qi5Oh8ww?Tb!S6^*_( zCcB~|CTTG-!!IfteGg)-FQz*ktQNYkE>DCnB2cE+Eq^4{g`=`Vk@rQH+bPTYTDEzyNkKeRlUc>x&*xpV+T`bng&!q2(E!ge}=k&;HJ#Yv!^k~3(c!|ML;bdoDUoWTR|!AeLX zF|Zx(%{o`1PCCJFp2UQ z=aZ)|lWeS8qRUV*#m?uX;?>0eozl`r02IF2$H!Q;GVTFTeFlS26(z>O2Z3uEyZeXIqtIWC50|vllLHCFh>qqU zir`IT263zMsNRP81DyGMR-$KN*Cf1K>F0%2J}bt`Y(gFF#4l2y`zz;;b3I&D=^I>7uRSjj)9D=_^3X7RBZJMqNpfi>Eqf~r&GVM)rOEeb~aL{ zV|$Ud=V~^wVymruLSml25H)r~jR1!)?b9D1qLb3=wx(MkqD?|~!;9H|#hFFNFbBtk z4U>X2byw((tIfcu_ux1%%X&ViGi^iaeUE85N(LbxBfV}uiu8IPTnIf^Eu6hXdOd3> znCl2K>6iF@UhouaAH*C8`_qzhkPn@-Gx}EE6*wP_#Ny^SbYKV+UaE)m<(Y5+s%EnT zOqfoCUZMlT7c5ChhBnP@Sc!}d{#NZriN;g4#&b|VqT?JafKlTZ;F;+7P6YC=JdHJ@ zEHF9|=)h0KFNqGuL9W^{(xvqICPW58=>xZ>pZ%eP2!;rk;8>@L4$LE=mP!Ka%P-YM`9#${oZCi$q+ zJ}6Vm=@dK@j$;XnrO!9%AOWR)7A`-F)+hC+`>om#mD%Nx)?Wiu2J&8sS=NIEo|5a0 z9y3FFoNAaFjgCM(_bvTl2k~5ANRR4;5iS)zh6Z$U6~F!J1O9{$@Fx|P9jMfcj#&W( zwU$KqZ`xyF?e*8rntlO5&dBQ!Obgwe29O$#XG-5fyuyDFY&yEJcj4trdPQPLnl*;( zZSdyAA+aJ&QdpYLhr6U{Zh8TeGvgo)y+DHRU4)4734I&dDRQP=feB!?H6oEa*B0J% zGD*wHQoPa7iW~cAE!>IWDR~myQ?#3ag!GAcfqyQ@bXa&2)6adM4ZM{?Dp5!&pF9n5^ALh%jryq2rIh`2mvBdN z@I5iH))7bSa(`hqUS0564>0%#X6ozea#elQzvpJs$dJmRlKX z?=YrVWP%|`CaRg@VAvFVR5ON&DHgzWiZWgvsUz)yL{G^PVCk3hpr-Anbz} zdlfL%5YKePb+82;^AKL`L?7|~Z|Ea>YEja6@KuXo#sTP5T?{h$emgX`l`CWrbyrB# z_Tr%aD_{~Q1c?=oQ+z^K73X=j((Jk1!x!C|+ltV`0 z<~qa8g@zkq!rZLIFY01ES`o8f=jP{m!;i^ILqS>1?Dyhb6;TJ*lAS1+IaEhM-hHQz zf@V;^efg146ikSCL`_ceI#@igNvz$0%XoqPBG=vG`TmaZO0ltwH@l@{0K zidRF)_REmfDfKW)Az`!t?WxwFPeKkm3BDd07NOG*{}`x8Rgv3E8PF{QJ_Yh>i+d6? zW?*}i`F9rWu7@e}vd93NC}3WMMWd zK`4+e?0nO8)0jV)M7#t_h-&*Z)3!;(f4u2R#Fu>GnuC^Grl8z|bfYAPkL? zUGeW3uYafmoVzT*hF_f~g=W~j}sJS=uZ1+!sAQ|;Lycf(~zVwoj*( zHfRNo^T$1>cAV8vtKD6vsf5=tvMj?9ZAul~p{3f7K3#33*9H^LBpOSXM2|RKqi3UL z^}e7vE_KrJ?NWL&gi=!kU5DrgMP+=oAKBX559mTc@4@iPK{ph1SC;M}=nGjoC~fCI zr%M;(kGfXSRV+P8&|X1bMD#g=-bJ(}=!*sY(=@LCKBxs-PV|$4t}W;fh^_=$wT9&( zd=_c$6!st9t{Hfr!ha}LTt@U`g6=Bleq?`|pzB4TuMu=1OOF(^!n9mCikdSCrrXIt>vAD zv#1Ka>h#EcL-Z+K4GENJjQWAiVp%zeg$J&gc7>aA;prFrWjr^EjaYc{n;?IQKo2Vh zWq|=c0HCw*)NZhpW*3OFo5^N5>3=A)J??&p$nhLkiWBt=r%no1d*ZRw^T**6RXy+W zmycS{VO)|`v;igj2)crUnhSAo?|A|ViKbkLrVt3uf%cz70u-WUWs=n z#_5iy&A`eyf*>1z)X)duY3s$DEAd)l*|pR{FumS3O|yYfcpGR?#ayCW3tD}v(E*~H z3;Iu@O`u#SE%amy34-2Cvz@xaAOk)PMkU`(jJiGPiM-7`|tXbAi%P5HqmrW5choV8U)m?q&c zPeV0yts?a2OKa(habKR zdK+$vHN}lN=>3yBVF|Q^Z6~(kwnnPDXf3hB&o9o18N%(6E7<3h;S+Xt53CAlKNE5s zdpoI1ocQ8I)!s_1d-#GE%zgmf7uuL%wDdnMr?bGvy9JMUFg>G^m0xsG%87GP##1PX z>DdOYkI?^~YD!Cj;g>`~e_|xb9uX|E-YM z^*|84>*s^Ry>KkEw3S{4kTb=8itcJb_vL+7iTQkZID=hAV_5_2*Zmsdb?)M92Dw1AWE8X`5{SW0$oj#ElAQbq-_QJ zINj~K{<^#MV>9qnCtRGgr{All@CL_zO=8t9*(2b6x7Xp;vH z0ggQIA<-3ro=mjqFgFSM38Lo#t!hKxsA4xp{my8?S6f#x>@H}!M5>6>42bob3j6m$ zZ|XjvOPrH5%!UjN;RjKnQA9I3p>Z2Xasny*Yy`X-*N!?d;Y(Ka;7!N_{rGA`?Ap*g zV)j` zpVcE~+ab>rb6||^TLIYdedU;x3q6ZEq+D3^S%U$X3^l17lG0>nyA=Gn&}Y?2@p;OQ z-ejZuhzXA`u-|&_{j%TM&_vv8btK|)FbSXvn1uLO&AKmY*A*wa)xLYRVoO(}(xQyR z1CV;GUP&H*27XiZx!Nvj0!mW<^_{AbPID!g_2*YMzl7?aL0wV$KZx2w%G{d14n$EO zZ1e`U$~xMY=un*ubtQOMiq>I!bvGmmFJd-#2jS7-8v~2;QWV4 ziq-aIy|9;E4`sA`;)3=lEkGvL+gU;2uz4Fm)yaq6G3sm%lVFIT->rE80#X0dVF&6T zeJFM-amgj~z1iN!^|~jy=UFtvJ-Y@KGe`vo-e;XjD zGaL`Q!PTAzNX6lqqJ9E1QPg|UBtKY@0Jx1o2y|EiQ843{{q07MADG`>t>z9Qtl6(` zC9&t{nPErR$o=~9Ga+m{m?1*gaU&xH9R-4#1>J#;*%8z}6WJ{^{&G6aseQD6Q_Fog?V~W9erF zJ%Q*v=of8YFZ_+~3iJq|B|p2z(@wvX3Ij)VM@azS7G~ts7(6kj@~@1i2jW{_`ol>a z-QtZ*!KpN80U@LZ)fMVxxDE%^*Bi6XMz0YXRDWX}|3LzsL3OzSwgu1`R8Q(H4pZVpsHw(@hVejHt64VjseF3v zJmZ^i&-BdQ;dHSY5`=rEk-(^~ur|`g1AN{L|DvEzAZ9w2Rj5(Y{)@NF6XrsOz_k2;ET=E8(mpvg_aW9E>y#6-8tz&(j%N zuVz-V0VEM)c_iXjzlKv{+ceEd#p!6<>GcOOP^|Qe0di9DVHg;?^#G(E!!t#^S{$Qf zuB0N~b5%B1^PYaor#eyO<$^T}Cg;2aD;U1wacMDyr|~7GpVXACT*}VEU^kOz5K^to zI+3C7D3`(WP8e-xxodU!4GQ+Ot)kEV$w@CDZ(btuU@xA|1R=8~0P#SiOT{K#wHa z%(^~)LZiRKAN91L^N2RHuIB|kis%ACw7Su9}t1zp5`9SlR|pI+###s@h9; z(VxTcl%U6sS(BND`+AO{>A;ms5zr24`&6z}eFAFd%~a0X2Y7}yN~y?f1Ywv5(d|Dy zAKqs5XyCOvCFYm0cQ zuG3X~<9GBhWut}WX`#s{%~zm76<-rQT+juA?(!Hkw*Y8oJ&>Q&HQ(d71^J8&r>Z%V z$uRR9e<$+zUmIWXO)-U+(Q<&@g0$C8?6wHqeI#w$i$?BLUGa`d7#Od*hAKqu>3=!M zHmW`au^#uS7(NuQ!YG5^>-Y_x75-jFcHksGv8vZ9<6)f~>#7KUG)M9*upjDqm>;q5 z40q$H#$aBuih;42wdUc7mXoz2yQ17@pqSIUM`bO~)6UjnJi7RJeE$YHL?D%W8uUi|s#Wu5Sv7hnP9tV6!WUBRk_Bie1 z^~DgAv#p1G_?DqBps)mk6X^J20**@H0H;1dUJnDT!5<*Vtg-rID*WA3eq#xys*t~L z#c#BgYw1SX>Z|HI>Sd6JN7`jjR^oE|glu~!KM1&{cwf<$%q29A%iQnk2Nfj-0PX|+j> z{8$C(Oh_-nV<>=Tz3oa*F;8&dNPL|XYPJYJ2Ce-3v(G-; zxHes)*rvoYpSR&E2!muR1cN3(p$twpmQO~3pC zy&jL+W?R>CR67f`s9)=ztb%lb1Nb1o?YQsAxbPP^ucUoxX)36ER*`NpGZk|M<|8IR z{7qHcyD}ScHaLU%}BxP^fgSj~^aP!0P*whZH~7}eRdvLidt2LkD4WYPQU zpV-I&G_n$np!e!#+SowRtd42asy-Hae?&tMp&^YxYr3iBpq7|7CW2^{n?>&MSN#Ph%uGn%oREFHE>QXm z+!f!yLme@m5}s^guFMyk>_Hi7FbI1{YQ&j!nE~lFrgRK{)WOcK)HspHj-ZD$q{g(Z z>8T)!I>IKZ^nMne0|l|M;*8UmLy+(sXc#c6b2oMc8Ta#f6J0l$F`Ca4a)rGw&9N`I zL0+0?VQofXPb3`ALPQ6Da1_G9A`5_}xrQCki)0ywa8$y+mWEH>Q?Tq!`{` zu`Iwmfo=qSwhTi|=eR~Aq#pHgDHAH%1U|)SPH_EMVM1^5ycX(Vy_KEF^Kv zx^dZxB=Y47FL@V@O@#HABhxV1bq0uPdynI7CO!2Qv@VJ*c@4nHA3kmL-5L z8=oBoO;Vkf&<7*fwKdj`GQTBV?1IiNidZ>jZr6U zf={2VN>#V8qP9N{|CX+isHUSnuB7A}ubPfnpoq-9YMX~2=VS8?Q;hYUo^+NzZ;@f& z4v*Yz0%kPIF3yFHLi>v8uLHj<10XdH4HWN<9sUcZqf-dQp<>)m%I2+%Cs@rs@CzrO z#^>3cw3C;#m17;JA#BRdqQeH$7cS9*zX~skAIph6AAnTkGyIjD&4PN&z!$Ti{RH*N zSb!?zv+NE^kL40nEq0a_?GwS0HXt|Y&DYp|4r)}Apk#0r8mW5x`OF>TS8*8Tj8^gT zmaK<)$De4c6HG(RdB&2?kZh4r^nVjUs6Nm=?Pv1zwT%4&tGiZWh89dO!g zU1Q{BFIS1i{98=DHDC7f=tO9(HEN7nVK@zS>YkAY-?pX?0g>xW;P>cjKF55?S!3AP zDV)3FV15{NDL~E|!~Y>W!mMusq|W9uW?_6@f1Bj4)4`>Xo}+z^U`)h45nlpiQyW)8~QlVPL+o`>MGxE7pk(_4Mt;G z5s+X(ao zL60MPy`UEpy-G^oFX(whzbWXM5on*FmlHin(2o}`qmWO~U)NimJ*Q}p} zAWUnEFkW2>JLrY%OHINlCXo9Tq)arx+X3W$1(#XBYcHjn09Kqa1MgVY@=Ux59S}CI z^YP0U{9h4@hxVs@mY)juEG#O=AC7I_MNTWuxLcQ;pf?iG^GYOTN<}Eqf+s z2LVlUJWa5w-$Aob>On>Y&W1fG=m^xw(NZQWl>Duiat{?z zH&`>92brS!BAXR)mL`4CE)bgK+)jaml0VzQ37n3|cT2b<8UsPXgXosPsQL^WE8}85 z2VorUJ7#4GZ;LU2&Iu03Lemk|)EK5z!|u!9dp7({?>FsK!wv4l|Fick@O2#3-Rn59 zlVI23kzgR$8(}4qqpOEsacoPrEXkILY$=j#$9Zsbbsy5TukKau!;%tGo5oIJTtiYG za@goxAt(J9MCN`UY@&}UzH=Dl zecN^yHQoxM6P-YUN7sKHQFy+Is})+?nZbrTo?38s&nOmL6lv@#IvT4ReGDrh9(?Tf z$?^+i=099yXRddrqm=o}-I*WIGv9|O{m0i4CV)9HiA^ZCn{c9VCz&V(LMNwhE5P&E-cV3*XMcGTF!PL3sJsTRG*?9l}h#lT^O@nTG4T zAoZ;bPIc&2PM@;x%w+#Qe6g(?wy*TjRG$M0E4pI!Je+ zFq{Bxwov)jk1?)afEqbXTmDp6dnd|)70cV#`**c31f}VuZuGC1OF&osQotoxczg>$ zsm}%UyV(ENjfOsTB~5OTAkvi2KLXxXuMaI@C+%!h$HRq#8IH^K7OGoODupnd_AaJ21R0B>>g zB1Gvuekm^^;;n3D8p^;9bMgBWz0q>VyX^M;4wMCo<{o@fie@9~9kI6KQ~AT-3@UOG zRSXP|{vV>`$)&%>9LN2i7L4>OsCZzc6R4Z=XHaILr-NLV0RW|aiEJqQQ92qFo1hL# z`BhsMVm9@S{JH!;9fD{ZL8Bw>ivR&cy9q>NH583du1$E8z~|Tjl%6O?HlS7^3wcKM z`>_gj;s60v%c5JsPl}9l^sVnixa=!R$R2)e4 zVtgzA9-gVVn?$`I{UlUHkm_rsbiGfI>Pr~pgH$)K19ERbMT-9SFDb@-BF2YBj5|-E zRo;RaB+!TNppDeppX`Gd?#M-fVyFO5;$4~V!oiMT63 zgYsnp)OHH~QxV)Df`9mFfI3G6zd}pBQUrg5Qh#p?m-6eHvUvBmD8KfX0OsfEu)Hy1G zds>lquLw?4uxx2b5qvoXHzL^5-=w|@%kLvN+L-jzUB~~va|Gfl-*Jw?t837RArPi} z(f6Of?2_MKb&3$eq3ounzhbK$O;Ey2q}uy28h>-UM3Wt)C1r!&o|{r9;5I5}$+{@BQT!XkL(S zSK(9nJ>Uc_r|~+%a3vX;5?gI?OYY7ygse z7hx419c2G2rbzi(fx+wG0Sk!rp1i%a{3_6ckOEU0pX<4qKY#iNvMYa7RvWY`&=+pL z-~SPO?girJnJ?1>%jy2(Ph$cZ?oNJE9+NWlqlnyjhmfKRXeIwfMynO_My=QDJ^oqD zTAU(S*ktn4-s5kgnV8<=_tB@*&tu7C^@@iDe;xZ{z$I2B-qCx-FBO65Yp-(g&bt|) z#XFxxByZli2aQVc&glmrHK};xn(o9S)jJ-V)~1uy-+rYfk1LjZ?%oJ_ z{9Tf~$IG^&CtaT&o^T7{jOn1YG z32FFJvZ3^ySONDZ;9gDdxev*x&Dp9RCNea==U2CYC?8wrV(KO-5aq1;e;|_MWCK?B z$Z!}3Q!8mW0JT#|!#i00Sic3Ilwy1lq%NdkBR-YiNKAyL+z)~gc26Qdwvlw+dFLt6 zweQ5M(3l@vc9gm^ajc`TBhsAb+bIT3S(7~d6`&G?lPGrg@n`PrxtYHHry$O;H{)yn z$qyf)1jsJ3Mnrxm(dfkO-YNNv@ZY30fv4xvulfUK76;m48aC z0GOxg7pNY)8O^Hi#_yxV{X-j%omg%uj)22BAR zY-545vLc5*W8Le387v729hE8 zFDUqWR1I3u&xDV^B_BiZ--_USDEI~u{B;o=0ixx%h~Qf&_$CqjF%jHB!80Owh=N}w zg5NBHw^H!+B6uwYM@8_I2p**1%?K{P8Kee&%P7v6h%+qW+(>a=EI>R3*1vyT1g{gp zB?^89b%4~TDOk#1HPzF!2tK@0w-2!6}u z2!1<)H3`G|*vOvVlewFD#|`nLWaxK*Px?>3m$>iAm)ZRxtq?A+mmInYaZcPpwh%Z_ z`W|ufCjpmz{nJk>F49vGK{r4orUM^tT`FU)J?m1i@F1)yFRT zn^)d^^pVo(T}bgyeaF8{DWBkWi!aNLlI^@tEWhYGanC8d^^xNO+T=s|C zVuuzzcH6cm7vA&jN8zOL)J>f?%K5O~FvD+S*rf`9$zT;_e$=szohZ=m2i zMeuh-@H0g3_aYeMeWr)7jx)dC@z4=RA3EK3>apD5zbyR%z}(S(!5S=2e=KYM%hFc^ z6ic|NBrK38y0AXv+*NR3b=x2r4}bZsA3uhb_CGze{9B)Y3@n4+M;<%<&tLiWx1PL6 z)Wf$Q{r00zo}0So+i-3KUpAWXrpZrqEr zs#m|6di9&jPoi9UufADS+1;==8IMhvN7_4SlC}55m9#qfv4ex`XzS>km_XK`=W_r; z@XJUfx&{PkgPuzcfEm8h zP{^vwz9?v9B)Sa}GNON`(VOV6+9XoL8d8G-DPjLi1F0=;q^Q5wkSZdQ1F1KJMhdFN zXIgB94H@2luVBdC zA7Xy}&Sk*-1&Efyei^oq?&l!~>RrBn6x}G(Ln-g)uI9e<)Jp%p^j?tS^aV)x?MKTO zgLcS!g_ieM|BUl~gNeM~jHn2{i-Khjv-uIw?PPlj8I-3GEbY;9ypDxhI7#iRoqI9p zd!+dsFv;lWX^N@m_(OY+f00@ebPq3u6i2QtSyg^BNJISfpvAu!7zwTPN{~VFFRy00 z4FyHiyB8wrk@lm=%UE{ocZt)$8PXK@VnN|!pt@vNEFTw~!KSz|^tt6a0May>Wv@Ri z*;T5f*CUe4n<<$e-wv86ee{8dUHw1fnqL1Qd{X-8k!G&^x8hUzTs+hK$)~OqC55tL zJYbv)JnpAh#}{JOtUS<22{t2_KSS>f;rJ2!lxL_XAUDEGR)NM)PcJ@$gTfA{zU z)M-Av?Oc=-KTGfzyxn_g@9}%y0{#BsBNrh6oO9;kBjo4_S>oH*DKbCZgC}}9{=xU* zr~CNL3Dm}skK(yp&q#H#gHBzOd>PRQnxqm&*18W(k9?~v;$H%^5EhUug8HmSo=zfz z_cb`E@9-o0I3jpZ{z1@8NQ2if_a6a#%RAS(R|x*U)Z+h&y$$z*x~CsOqhou7*k|`L z)sB=OS#bRf23m^iFBVGWB*2zmL$z~q=>ZCUKC(vrNT<~;D-b-2;PR(YcEs7C#ko&t zZku0@I30+iDOak$+1Gdc7h+1b^Y|Ck4zjyZ54~6`)q5NsGqgVF=&EUiw4FM!V-?o; zEIXP`ds$Z1!=xuj_5O!Kv+5--xDAYkdXprbxWFRmn)5A^{sbUE(o+CW zkUuUP#Mk7y^L`MfRg#o`%R7;^Bq`e=|FB+=bnj9k>AR>`$2#r{1xeopQVEi_3XG5K zv(~eVMZQA% zvHk&kvX2y`_64HehmYlp@k~YkBC7KE=cwL?fMoB97e2gw74R}nywao{Rd5MVek}+J zp;ul*FtLsuf)J|rvZLPvhMgyNt~$LEP1dpxW5@tA;3HU8cye7|=T}a{lkm3w6Wa!d zuI;=Qt2EC{_Le_EfbMw6q+H2%(R<<=$g$hb@BI0{^qwqWnZi-_?D Rar6_yX+Z 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 Sca0-B^N>n^sVjjiX#5}iblGYE diff --git a/kvmd_data/usr/share/kvmd/platform b/kvmd_data/usr/share/kvmd/platform index 0f00370c..0c9d0ac4 100644 --- a/kvmd_data/usr/share/kvmd/platform +++ b/kvmd_data/usr/share/kvmd/platform @@ -1,3 +1,3 @@ -PIKVM_MODEL=docker_model -PIKVM_VIDEO=docker_video -PIKVM_BOARD=docker_board +PIKVM_MODEL=windows_model +PIKVM_VIDEO=windows_video +PIKVM_BOARD=windows_board diff --git a/kvmd_data/usr/share/kvmd/web/kvm/index.html b/kvmd_data/usr/share/kvmd/web/kvm/index.html index 774a64bb..f5799301 100644 --- a/kvmd_data/usr/share/kvmd/web/kvm/index.html +++ b/kvmd_data/usr/share/kvmd/web/kvm/index.html @@ -899,7 +899,7 @@
-
+
diff --git a/kvmd_data/usr/share/kvmd/web/kvm/window-stream.pug b/kvmd_data/usr/share/kvmd/web/kvm/window-stream.pug index ee75646c..918260ab 100644 --- a/kvmd_data/usr/share/kvmd/web/kvm/window-stream.pug +++ b/kvmd_data/usr/share/kvmd/web/kvm/window-stream.pug @@ -13,7 +13,7 @@ div(id="stream-window" class="window window-resizable") div(id="stream-info") button(class="window-button-exit-full-tab") ▼ - div(id="stream-box" class="stream-box-online") + div(id="stream-box" class="stream-box-offline") img(id="stream-image" src=`${png_dir}/blank-stream.png`) video(id="stream-video" class="hidden" disablePictureInPicture="true" autoplay playsinline muted) div(id="stream-fullscreen-active") diff --git a/kvmd_data/usr/share/kvmd/web/share/js/kvm/stream_mjpeg.js b/kvmd_data/usr/share/kvmd/web/share/js/kvm/stream_mjpeg.js index 5de3e1e7..6b8b775d 100644 --- a/kvmd_data/usr/share/kvmd/web/share/js/kvm/stream_mjpeg.js +++ b/kvmd_data/usr/share/kvmd/web/share/js/kvm/stream_mjpeg.js @@ -127,8 +127,9 @@ export function MjpegStreamer(__setActive, __setInactive, __setInfo) { var __checkStream = function() { __findId(); - - if (__id.legnth > 0 && __id in __state.stream.clients_stat) { + console.log("__state.stream.clients_stat",__state.stream.clients_stat) + console.log("__id",__id) + if (__id.length > 0 && __id in __state.stream.clients_stat) { __setStreamActive(); __stopChecking(); diff --git a/quick_start.sh b/quick_start.sh deleted file mode 100755 index a304ab26..00000000 --- a/quick_start.sh +++ /dev/null @@ -1,317 +0,0 @@ -#!/bin/bash -#Install Latest Stable One-KVM Dcoker Release - -DOCKER_IMAGE_PATH="registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd" -DOCKER_PORT="-p 8080:8080 -p 4430:4430 -p 5900:5900 -p 623:623" -DOCKER_NAME="kvmd" -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -BLUE='\033[0;34m' -NC='\033[0m' - -function check_os_architecture(){ - osCheck=$(uname -a) - if [[ $osCheck =~ 'x86_64' ]];then - architecture="amd64" - elif [[ $osCheck =~ 'arm64' ]] || [[ $osCheck =~ 'aarch64' ]];then - architecture="arm64" - elif [[ $osCheck =~ 'armv7l' ]];then - architecture="armv7l" - else - echo "暂不支持的系统架构,请参阅官方文档,选择受支持的系统。\n退出程序" - exit 1 - fi -} - -function check_docker_exists() { - if command -v docker &> /dev/null; then - echo "$(docker -v)" - else - echo "Docker 未安装,退出程序" - exit 1 - fi -} - -function check_sudo_exists() { - if command -v sudo > /dev/null 2>&1; then - sudo_command="sudo" - else - sudo_command="" - fi -} - -function delete_kvmd_container(){ - if docker ps -a --format '{{.Names}}' | grep -q '^kvmd$'; then - $sudo_command docker stop $DOCKER_NAME - $sudo_command docker rm $DOCKER_NAME - fi -} - -function check_otg_device(){ - $sudo_command modprobe libcomposite > /dev/null|| echo -e "${YELLOW}libcomposite 内核模块加载失败${NC}" - if [[ "$architecture" != "amd64" ]] && [[ -d "/sys/class/udc" ]]; then - if [[ "$(ls -A /sys/class/udc)" ]] || [[ "$(ls -A /sys/class/usb_role)" ]]; then - otg_devices=$(ls -A /sys/class/udc) - otg_status=$(cat /sys/class/usb_role/*/role 2>/dev/null | head -n 1) - echo -e "${GREEN}当前系统支持 OTG:$otg_devices OTG 状态:$otg_status${NC}" - fi - else - echo -e "${RED}当前系统不支持 OTG,退出程序${NC}" - exit 1 - fi - if [[ ! -d "/sys/kernel/config" ]];then - echo -e "${RED}当前系统不支持 configfs 文件系统,退出程序${NC}" - exit 1 - fi -} - -function check_video_device(){ - if ls /dev/video* 1> /dev/null 2>&1; then - video_devices=($(ls /dev/video* 2>/dev/null)) - video_num_devices=${#video_devices[@]} - echo -e ""${GREEN}找到视频设备:$(ls -A /dev/video*)${NC}"" - else - echo -e "${RED}未找到任何视频采集设备,退出程序${NC}" - exit 1 - fi -} - -function check_repeat_install(){ - if docker ps -a --format '{{.Names}}' | grep -q '^kvmd$'; then - echo -e "${YELLOW}检查到 kvmd 容器已存在,是否删除容器重新部署?${NC}" - read -p "y/n: " delete_choice - case $delete_choice in - y|Y) - delete_kvmd_container - ;; - n|N) - echo -e "${RED}退出程序${NC}" - exit 1 - ;; - *) - echo -e "${RED}无效的选择,请输入 y 或者 n,退出程序${NC}" - exit 1 - ;; - esac - fi - if [[ -d "kvmd_config" ]]; then - echo -e "${YELLOW}检查到此前配置文件夹已存在,是否删除此前配置文件夹?${NC}" - read -p "y/n: " delete_choice - case $delete_choice in - y|Y) - $sudo_command rm -r kvmd_config - ;; - n|N) - echo -e "" - ;; - *) - echo -e "${RED}无效的选择,请输入 y 或者 n,退出程序${NC}" - exit 1 - ;; - esac - fi -} - -function show_main_menu() { - echo -e "${BLUE}==============================${NC}" - echo -e "${BLUE} One-KVM Docker 版管理 ${NC}" - echo -e "${BLUE}==============================${NC}" - - echo " 1. 安装 One-KVM Docker 版" - echo "" - echo " 2. 卸载 One-KVM Docker 版" - echo "" - echo " 3. 拉取 One-KVM 最新镜像" - echo "" - echo " 4. 更多信息" - - echo -e "${BLUE}==============================${NC}" - read -p "请输入数字(1-4): " choice - while [[ "$choice" != "1" && "$choice" != "2" && "$choice" != "3" && "$choice" != "4" ]]; do - echo -e "${RED}无效的选择,请输入1-4${NC}" - read -p "请输入数字(1-4): " choice - done - case $choice in - 1) - check_repeat_install - get_hid_info - get_video_info - get_audio_info - get_userinfo - get_userenv - show_install_info - get_install_command - execute_command - ;; - 2) - delete_kvmd_container - ;; - 3) - $sudo_command docker pull $DOCKER_IMAGE_PATH - ;; - 4) - echo -e "${BLUE}作者:${NC}\t\t默风SilentWind" - echo -e "${BLUE}文档:${NC}\t\thttps://one-kvm.mofeng.run/" - echo -e "${BLUE}Github:${NC}\thttps://github.com/mofeng-git/One-KVM" - ;; - *) - echo -e "${RED}无效的选择,请输入1-4之间的数字,退出程序${NC}" - exit 1 - ;; - esac -} - -function get_hid_info() { - if [[ "$architecture" == "amd64" ]]; then - echo -e "${GREEN}使用的 HID 硬件类型:CH9329${NC}" - use_hid="CH9329" - else - echo -e "${GREEN}请选择使用的 HID 硬件类型:${NC}" - echo " 1. OTG" - echo " 2. CH9329" - read -p "请输入数字(1 或 2): " hardware_type - while [[ "$hardware_type" != "1" && "$hardware_type" != "2" ]]; do - echo -e "${RED}无效的选择,请输入1或2。${NC}" - read -p "请输入数字(1 或 2): " hardware_type - done - if [[ "$hardware_type" == "1" ]]; then - use_hid="OTG" - else - use_hid="CH9329" - fi - fi - - if [[ "$use_hid" == "CH9329" ]]; then - if ls /dev/ttyUSB* 1> /dev/null 2>&1; then - echo -e ""${GREEN}找到串口设备:$(ls -A /dev/ttyUSB*)${NC}"" - else - echo -e "${RED}未找到任何 USB 串口设备,退出程序${NC}" - exit 1 - fi - read -p "请输入 CH9329 硬件的地址(回车使用默认值 /dev/ttyUSB0): " ch9329_address - read -p "请输入 CH9329 硬件的波特率(回车使用默认值 9600): " ch9329_serial_rate - ch9329_address=${ch9329_address:-/dev/ttyUSB0} - ch9329_serial_rate=${ch9329_serial_rate:-9600} - fi - - if [[ "$use_hid" == "OTG" ]]; then - check_otg_device - fi -} - -function get_video_info() { - check_video_device - if [[ "$video_num_devices" == "3" ]]; then - video_default_device="/dev/video1" - echo -e "${YELLOW}经检测 /dev/video0 可能不可用,建议使用 /dev/video1${NC}" - else - video_default_device="/dev/video0" - fi - read -p "请输入视频设备路径(回车使用默认值 $video_default_device): " video_device - if [[ -z "$video_device" ]]; then - video_device=$video_default_device - fi -} - -function get_audio_info() { - if [[ -d "/dev/snd" ]]; then - echo -e ""${GREEN}找到音频设备:$(ls -A /dev/snd)${NC}"" - read -p "请输入音频设备路径(回车使用默认值 hw:0): " audio_device - if [[ -z "$audio_device" ]]; then - audio_device="hw:0" - fi - else - echo -e "${YELLOW}未找到任何音频采集设备${NC}" - audio_device="none" - fi -} - -function get_userinfo() { - read -p "请输入用户名(回车使用默认值 admin): " username - read -s -p "请输入密码(回车使用默认值 admin): " password - if [[ -z "$username" ]]; then - username="admin" - fi - if [[ -z "$password" ]]; then - password="admin" - fi -} - -function get_userenv() { - echo -e "\n" - read -p "额外用户环境变量(回车则留空): " userenv -} - -function show_install_info() { - echo -e "\n\n${BLUE}==============================${NC}" - echo -e "${BLUE}安装信息总览:${NC}" - if [[ "$use_hid" == "CH9329" ]]; then - echo -e "CH9329 设备: \t${GREEN}$ch9329_address${NC} \tCH9329 波特率: \t${GREEN}$ch9329_serial_rate${NC}" - fi - if [[ "$use_hid" == "OTG" ]]; then - echo -e "OTG端口:\t${GREEN}$otg_devices${NC} \tOTG 状态:\t${GREEN}$otg_status${NC}" - fi - echo -e "视频设备: \t${GREEN}$video_device${NC} \t音频设备: \t${GREEN}$audio_device${NC}" - echo -e "用户名: \t${GREEN}$username${NC} \t\t密码: \t${GREEN}$password${NC}" -} - -function get_install_command(){ - local docker_init_command="docker run -itd --name $DOCKER_NAME" - local append_command="" - local append_env="" - - if [[ "$use_hid" == "CH9329" ]]; then - append_command="--device $video_device:/dev/video0 --device $ch9329_address:/dev/ttyUSB0 -v ./kvmd_config:/etc/kvmd" - - if [[ -d "/dev/snd" ]]; then - append_command="$append_command --device /dev/snd:/dev/snd -e AUDIONUM=${audio_device:3}" - fi - append_env="-e USERNAME=$username -e PASSWORD=$password -e CH9329SPEED=$ch9329_serial_rate" - docker_command="$sudo_command $docker_init_command $append_command $DOCKER_PORT $append_env $userenv $DOCKER_IMAGE_PATH" - else - append_command="--privileged=true -v /lib/modules:/lib/modules:ro -v /dev:/dev -v /sys/kernel/config:/sys/kernel/config -v ./kvmd_config:/etc/kvmd" - if [[ -d "/dev/snd" ]]; then - append_command="$append_command -e AUDIONUM=${audio_device:3}" - fi - append_env="-e OTG=1 -e USERNAME=$username -e PASSWORD=$password -e VIDEONUM=${video_device:10} -e AUDIONUM=${audio_device:3}" - docker_command="$sudo_command $docker_init_command $append_command $DOCKER_PORT $append_env $userenv $DOCKER_IMAGE_PATH" - fi - echo -e "\n${BLUE}Docker 部署命令:${NC}\n$docker_command" - echo -e "${BLUE}==============================${NC}\n" -} - -function execute_command(){ - echo -e "${BLUE}One-KVM 部署中......${NC}" - eval "$docker_command" - local exit_status=$? - if [[ $exit_status -eq 0 ]]; then - echo -e "${BLUE}One-KVM 部署成功${NC}" - $sudo_command docker update --restart=always $DOCKER_NAME - if [[ "$use_hid" == "OTG" ]]; then - execute_otg_command - fi - else - echo -e "${RED}One-KVM 部署失败,退出状态码为 $exit_status${NC}" - fi -} - -function execute_otg_command(){ - $sudo_command echo "device" > /sys/class/usb_role/**/role || echo -e "${YELLOW}OTG 端口切换 device 模式失败${NC}" - if grep -q "usb_role" /etc/rc.local; then - echo -e "" - else - $sudo_command sed -i '/^exit 0/i echo device > \/sys\/class\/usb_role\/\*\*\/role' /etc/rc.local - $sudo_command chmod +x /etc/rc.local - fi - if grep -q "libcomposite" /etc/modules.conf; then - echo -e "" - else - $sudo_command echo "libcomposite" >> /etc/modules.conf - fi -} - -check_os_architecture -check_docker_exists -check_sudo_exists -show_main_menu \ No newline at end of file diff --git a/tools/test_video.py b/tools/test_video.py new file mode 100644 index 00000000..0e0237f3 --- /dev/null +++ b/tools/test_video.py @@ -0,0 +1,29 @@ +# 模块导入 +import numpy as np +import cv2 as cv +# 相机捕获 +cap = cv.VideoCapture(0,cv.CAP_DSHOW) +#更改默认参数 +cap.set(6,cv.VideoWriter.fourcc('M','J','P','G'))# 视频流格式 +cap.set(5, 30);# 帧率 +cap.set(3, 1280)# 帧宽 +cap.set(4, 720)# 帧高 +# 获取相机宽高以及帧率 +width = cap.get(3) +height = cap.get(4) +frame = cap.get(5) #帧率只对视频有效,因此返回值为0 +#打印信息 +print(width ,height) +# 循环 +while(True): + # 获取一帧图片 + ret, img = cap.read() + # 显示图片 + cv.imshow('img', img) + # 等待键盘事件 + k = cv.waitKey(1) & 0xFF + if k == 27: + break +#资源释放 +cap.release() +cv.destroyAllWindows() \ No newline at end of file diff --git a/ustreamer-win/mjpeg_stream.py b/ustreamer-win/mjpeg_stream.py index b9b13529..87bfbd27 100644 --- a/ustreamer-win/mjpeg_stream.py +++ b/ustreamer-win/mjpeg_stream.py @@ -3,9 +3,9 @@ import threading import time import json from collections import deque -from typing import List, Optional, Tuple, Union, Dict, Any +from typing import List, Optional, Tuple, Dict +import uuid -import aiohttp import cv2 import logging import numpy as np @@ -13,8 +13,7 @@ from aiohttp import MultipartWriter, web from aiohttp.web_runner import GracefulExit class MjpegStream: - """MJPEG video stream class for handling video frames and providing HTTP streaming service""" - + def __init__( self, name: str, @@ -26,19 +25,7 @@ class MjpegStream: device_name: str = "Unknown Camera", log_requests: bool = True ) -> None: - """ - Initialize MJPEG stream - - Args: - name: Stream name - size: Video size (width, height) - quality: JPEG compression quality (1-100) - fps: Target frame rate - host: Server host address - port: Server port - device_name: Camera device name - log_requests: Whether to log stream requests - """ + self.name = name.lower().replace(" ", "_") self.size = size self.quality = max(1, min(quality, 100)) @@ -48,53 +35,58 @@ class MjpegStream: self._device_name = device_name self.log_requests = log_requests - # Video frame and synchronization self._frame = np.zeros((320, 240, 1), dtype=np.uint8) self._lock = asyncio.Lock() - self._byte_frame_window = deque(maxlen=30) - self._bandwidth_last_modified_time = time.time() self._is_online = True - self._last_frame_time = time.time() + self._last_repeat_frame_time = time.time() + self._last_fps_update_time = time.time() + self._last_frame_data = None + self.per_second_fps = 0 + self.frame_counter = 0 - - # 设置日志级别为ERROR,以隐藏HTTP请求日志 if not self.log_requests: logging.getLogger('aiohttp.access').setLevel(logging.ERROR) - # Server setup self._app = web.Application() self._app.router.add_route("GET", f"/{self.name}", self._stream_handler) self._app.router.add_route("GET", "/state", self._state_handler) self._app.router.add_route("GET", "/", self._index_handler) + self._app.router.add_route("GET", "/snapshot", self._snapshot_handler) self._app.is_running = False + self._clients: Dict[str, Dict] = {} + self._clients_lock = asyncio.Lock() + def set_frame(self, frame: np.ndarray) -> None: - """Set the current video frame""" self._frame = frame - self._last_frame_time = time.time() self._is_online = True - def get_bandwidth(self) -> float: - """Get current bandwidth usage (bytes/second)""" - if time.time() - self._bandwidth_last_modified_time >= 1: - self._byte_frame_window.clear() - return sum(self._byte_frame_window) - async def _process_frame(self) -> Tuple[np.ndarray, Dict[str, str]]: - """Process video frame (resize and JPEG encode)""" frame = cv2.resize( self._frame, self.size or (self._frame.shape[1], self._frame.shape[0]) ) success, encoded = cv2.imencode( ".jpg", frame, [cv2.IMWRITE_JPEG_QUALITY, self.quality] ) + if not success: raise ValueError("Error encoding frame") - - self._byte_frame_window.append(len(encoded.tobytes())) - self._bandwidth_last_modified_time = time.time() + + current_frame_data = encoded.tobytes() + current_time = time.time() + + if current_frame_data == self._last_frame_data and current_time - self._last_repeat_frame_time < 1: + return None, {} + else: + self._last_frame_data = current_frame_data + self._last_repeat_frame_time = current_time - # Add KVMD-compatible header information + if current_time - self._last_fps_update_time >= 1: + self.per_second_fps = self.frame_counter + self.frame_counter = 0 + self._last_fps_update_time = current_time + + self.frame_counter += 1 headers = { "X-UStreamer-Online": str(self._is_online).lower(), "X-UStreamer-Width": str(frame.shape[1]), @@ -109,61 +101,69 @@ class MjpegStream: return encoded, headers async def _stream_handler(self, request: web.Request) -> web.StreamResponse: - """Handle MJPEG stream requests""" + client_id = request.query.get("client_id", uuid.uuid4().hex[:8]) + client_key = request.query.get("key", "0") + advance_headers = request.query.get("advance_headers", "0") == "1" + response = web.StreamResponse( status=200, reason="OK", - headers={"Content-Type": "multipart/x-mixed-replace;boundary=frame"} + headers={ + "Content-Type": "multipart/x-mixed-replace;boundary=frame", + "Set-Cookie": f"stream_client={client_key}/{client_id}; Path=/; Max-Age=30" + } ) await response.prepare(request) - if self.log_requests: - print(f"Stream request received: {request.path}") + async with self._clients_lock: + if client_id not in self._clients: + self._clients[client_id] = { + "key": client_key, + "advance_headers": advance_headers, + "extra_headers": False, + "zero_data": False, + "fps": 0, + } + try: + while True: + async with self._lock: + frame, headers = await self._process_frame() + if frame is None: + continue + + #Enable workaround for the Chromium/Blink bug https://issues.chromium.org/issues/41199053 + if advance_headers: + headers.pop('Content-Length', None) + for k in list(headers.keys()): + if k.startswith('X-UStreamer-'): + del headers[k] + + with MultipartWriter("image/jpeg", boundary="frame") as mpwriter: + part = mpwriter.append(frame.tobytes(), {"Content-Type": "image/jpeg"}) + for key, value in headers.items(): + part.headers[key] = value + try: + await mpwriter.write(response, close_boundary=False) + except (ConnectionResetError, ConnectionAbortedError): + return web.Response(status=499) + await response.write(b"\r\n") + self._clients[client_id]["fps"]=self.per_second_fps + finally: + async with self._clients_lock: + if client_id in self._clients: + del self._clients[client_id] - while True: - await asyncio.sleep(1 / self.fps) - - # Check if the device is online - if time.time() - self._last_frame_time > 5: - self._is_online = False - - async with self._lock: - frame, headers = await self._process_frame() - - with MultipartWriter("image/jpeg", boundary="frame") as mpwriter: - part = mpwriter.append(frame.tobytes(), {"Content-Type": "image/jpeg"}) - for key, value in headers.items(): - part.headers[key] = value - try: - await mpwriter.write(response, close_boundary=False) - except (ConnectionResetError, ConnectionAbortedError): - return web.Response(status=499) - await response.write(b"\r\n") async def _state_handler(self, request: web.Request) -> web.Response: - """Handle /state requests and return device status information""" state = { + "ok": "true", "result": { "instance_id": "", "encoder": { "type": "CPU", "quality": self.quality }, - "h264": { - "bitrate": 4875, - "gop": 60, - "online": self._is_online, - "fps": self.fps - }, - "sinks": { - "jpeg": { - "has_clients": False - }, - "h264": { - "has_clients": False - } - }, "source": { "resolution": { "width": self.size[0] if self.size else self._frame.shape[1], @@ -171,21 +171,12 @@ class MjpegStream: }, "online": self._is_online, "desired_fps": self.fps, - "captured_fps": 0 # You can update this with actual captured fps if needed + "captured_fps": self.fps }, "stream": { - "queued_fps": 2, # Placeholder value, update as needed - "clients": 1, # Placeholder value, update as needed - "clients_stat": { - "70bf63a507f71e47": { - "fps": 2, # Placeholder value, update as needed - "extra_headers": False, - "advance_headers": True, - "dual_final_frames": False, - "zero_data": False, - "key": "tIR9TtuedKIzDYZa" # Placeholder key, update as needed - } - } + "queued_fps": self.fps, + "clients": len(self._clients), + "clients_stat": self._clients } } } @@ -195,18 +186,30 @@ class MjpegStream: ) async def _index_handler(self, _: web.Request) -> web.Response: - """Handle root path requests and display available streams""" html = f""" -

Available Video Streams:

-
    -
  • /{self.name}
  • -
  • /state
  • + + uStreamer-Win + +

    uStreamer-Win v0.01

    +

      +
    • /{self.name} +
      Get a live stream.


    • +
    • /snapshot +
      Get a current actual image from the server.


    • +
    • /state +
      Get JSON structure with the state of the server.


    + + """ return web.Response(text=html, content_type="text/html") + async def _snapshot_handler(self, request: web.Request) -> web.Response: + async with self._lock: + frame, _ = await self._process_frame() + return web.Response(body=frame.tobytes(), content_type="image/jpeg") + def start(self) -> None: - """Start the stream server""" if not self._app.is_running: threading.Thread(target=self._run_server, daemon=True).start() self._app.is_running = True @@ -214,8 +217,8 @@ class MjpegStream: else: print("\nServer is already running\n") + def stop(self) -> None: - """Stop the stream server""" if self._app.is_running: self._app.is_running = False print("\nStopping server...\n") @@ -223,7 +226,6 @@ class MjpegStream: print("\nServer is not running\n") def _run_server(self) -> None: - """Run the server in a new thread""" loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) runner = web.AppRunner(self._app) diff --git a/ustreamer-win/ustreamer-win.py b/ustreamer-win/ustreamer-win.py index 36627b79..7557824d 100644 --- a/ustreamer-win/ustreamer-win.py +++ b/ustreamer-win/ustreamer-win.py @@ -41,7 +41,6 @@ def test_camera(index, logger): return False def find_camera_by_name(camera_name, logger): - """Find device index by camera name""" if platform.system() != "Windows": logger.warning("Finding camera by name is only supported on Windows") return None @@ -57,7 +56,6 @@ def find_camera_by_name(camera_name, logger): return None def get_first_available_camera(logger): - """Get the first available camera""" for i in range(5): if test_camera(i, logger): return i @@ -75,13 +73,10 @@ def parse_arguments(): parser.add_argument('--port', type=int, default=8000, help='Server port') args = parser.parse_args() - # Validate arguments if args.quality < 1 or args.quality > 100: raise ValueError("Quality must be between 1 and 100.") if args.fps <= 0: raise ValueError("FPS must be greater than 0.") - - # Parse resolution try: width, height = map(int, args.resolution.split('x')) except ValueError: @@ -95,14 +90,9 @@ def parse_arguments(): def main(): logger = configure_logging() args = parse_arguments() - - # Determine which camera device to use device_index = None if args.device_name: - if platform.system() != "Windows": - logger.error("Specifying camera by name is only supported on Windows") - return device_index = find_camera_by_name(args.device_name, logger) if device_index is None: logger.error(f"No available camera found with a name containing '{args.device_name}'") @@ -122,23 +112,21 @@ def main(): # Initialize the camera try: - cap = cv2.VideoCapture(device_index, cv2.CAP_DSHOW if platform.system() == "Windows" else cv2.CAP_ANY) + cap = cv2.VideoCapture(device_index, cv2.CAP_DSHOW) if not cap.isOpened(): logger.error(f"Unable to open camera {device_index}") return - # Set camera parameters cap.set(cv2.CAP_PROP_FRAME_WIDTH, args.width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, args.height) - - # Verify camera settings + cap.set(cv2.CAP_PROP_FRAME_COUNT, args.fps) + cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G')) actual_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) actual_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) if actual_width != args.width or actual_height != args.height: logger.warning(f"Actual resolution ({actual_width}x{actual_height}) does not match requested resolution ({args.width}x{args.height})") - # Test if we can read frames ret, _ = cap.read() if not ret: logger.error("Unable to read video frames from the camera") @@ -155,13 +143,13 @@ def main(): try: stream = MjpegStream( name="stream", - size=(int(actual_width), int(actual_height)), # Use actual resolution + size=(int(actual_width), int(actual_height)), quality=args.quality, fps=args.fps, host=args.host, port=args.port, - device_name=args.device_name or f"Camera {device_index}", # Add device name - log_requests=False # 设置为False以隐藏HTTP请求日志 + device_name=args.device_name or f"Camera {device_index}", + log_requests=False ) stream.start() logger.info(f"Video stream started: http://{args.host}:{args.port}/stream") @@ -176,20 +164,11 @@ def main(): except KeyboardInterrupt: logger.info("User interrupt") - except Exception as e: - logger.error(f"An error occurred: {str(e)}") finally: logger.info("Cleaning up resources...") - try: - stream.stop() - except Exception as e: - logger.error(f"Error stopping the video stream: {str(e)}") - try: - cap.release() - except Exception as e: - logger.error(f"Error releasing the camera: {str(e)}") + stream.stop() + cap.release() cv2.destroyAllWindows() - logger.info("Program has exited") if __name__ == "__main__": main() \ No newline at end of file