diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8430414fa..b1719761c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,38 +33,63 @@ include: - project: 'libretro-infrastructure/ci-templates' file: '/osx-x64.yml' + # MacOS ARM 64-bit + - project: 'libretro-infrastructure/ci-templates' + file: '/osx-arm64.yml' + ################################## CELLULAR ################################ # Android - project: 'libretro-infrastructure/ci-templates' file: '/android-jni.yml' -# ################################## CONSOLES ################################ -# # Nintendo 3DS -# - project: 'libretro-infrastructure/ci-templates' -# file: '/ctr-static.yml' -# -# # Nintendo WiiU -# - project: 'libretro-infrastructure/ci-templates' -# file: '/wiiu-static.yml' -# -# # Nintendo Switch -# - project: 'libretro-infrastructure/ci-templates' -# file: '/libnx-static.yml' -# -# # PlayStation Vita -# - project: 'libretro-infrastructure/ci-templates' -# file: '/vita-static.yml' + # iOS + - project: 'libretro-infrastructure/ci-templates' + file: '/ios-arm64.yml' + + # iOS (armv7) + - project: 'libretro-infrastructure/ci-templates' + file: '/ios9.yml' + + ################################## CONSOLES ################################ + # Nintendo 3DS + - project: 'libretro-infrastructure/ci-templates' + file: '/ctr-static.yml' + + # Nintendo WiiU + - project: 'libretro-infrastructure/ci-templates' + file: '/wiiu-static.yml' + + # Nintendo Switch + - project: 'libretro-infrastructure/ci-templates' + file: '/libnx-static.yml' + + # PlayStation Vita + - project: 'libretro-infrastructure/ci-templates' + file: '/vita-static.yml' + + # OpenDingux + - project: 'libretro-infrastructure/ci-templates' + file: '/dingux-mips32.yml' + + # tvOS (AppleTV) + - project: 'libretro-infrastructure/ci-templates' + file: '/tvos-arm64.yml' + +################################## WEB ################################ + # emscripten + - project: 'libretro-infrastructure/ci-templates' + file: '/emscripten-static.yml' + +############################################################################## +#################################### STAGES ################################## +############################################################################## # Stages for building stages: - build-prepare - build-shared -# - build-static + - build-static -############################################################################## -#################################### STAGES ################################## -############################################################################## -# ################################### DESKTOPS ################################# # Windows 64-bit libretro-build-windows-x64: @@ -102,6 +127,14 @@ libretro-build-osx-x64: variables: ISMAC: 1 +# MacOS ARM 64-bit +libretro-build-osx-arm64: + extends: + - .libretro-osx-arm64-make-default + - .core-defs + variables: + ISMAC: 1 + ################################### CELLULAR ################################# # Android ARMv7a android-armeabi-v7a: @@ -127,27 +160,64 @@ android-x86: - .libretro-android-jni-x86 - .core-defs +# iOS +libretro-build-ios-arm64: + extends: + - .libretro-ios-arm64-make-default + - .core-defs + +# iOS (armv7) [iOS 9 and up] +libretro-build-ios9: + extends: + - .libretro-ios9-make-default + - .core-defs + +# tvOS +libretro-build-tvos-arm64: + extends: + - .libretro-tvos-arm64-make-default + - .core-defs + #################################### CONSOLES ################################# ## Nintendo 3DS #libretro-build-ctr: # extends: # - .libretro-ctr-static-retroarch-master # - .core-defs -# + ## Nintendo WiiU #libretro-build-wiiu: # extends: # - .libretro-wiiu-static-retroarch-master # - .core-defs -# + ## Nintendo Switch #libretro-build-libnx-aarch64: # extends: # - .libretro-libnx-static-retroarch-master # - .core-defs -# -## PlayStation Vita -#libretro-build-vita: -# extends: -# - .libretro-vita-static-retroarch-master -# - .core-defs + +# PlayStation Vita +libretro-build-vita: + extends: + - .libretro-vita-static-retroarch-master + - .core-defs + +# OpenDingux +libretro-build-dingux-mips32: + extends: + - .libretro-dingux-mips32-make-default + - .core-defs + +# OpenDingux Beta +libretro-build-dingux-odbeta-mips32: + extends: + - .libretro-dingux-odbeta-mips32-make-default + - .core-defs + +#################################### WEB ################################# +# emscripten +libretro-build-emscripten: + extends: + - .libretro-emscripten-static-retroarch-master + - .core-defs diff --git a/Makefile b/Makefile index d86338917..83cf96c77 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2020-2021 Bernhard Schelling +# Copyright (C) 2020-2022 Bernhard Schelling # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,15 +32,60 @@ SOURCES := \ src/*/*.cpp \ src/*/*/*.cpp -CPUFLAGS := +CPUFLAGS := $(MAKE_CPUFLAGS) +STRIPCMD := strip --strip-all ifneq ($(ISWIN),) OUTNAME := dosbox_pure_libretro.dll CXX ?= g++ LDFLAGS := -Wl,--gc-sections -fno-ident + COMMONFLAGS += -pthread +else ifneq (,$(findstring ios,$(platform))) + ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path) + endif + OUTNAME := dosbox_pure_libretro_ios.dylib + MINVERSION := + COMMONFLAGS += -DDISABLE_DYNAREC=1 + ifeq ($(platform),ios-arm64) + CXX = c++ -arch arm64 -isysroot $(IOSSDK) + else + CXX = c++ -arch armv7 -isysroot $(IOSSDK) + endif + LDFLAGS := -Wl,-dead_strip + ifeq ($(platform),$(filter $(platform),ios9 ios-arm64)) + MINVERSION = -miphoneos-version-min=8.0 + else + MINVERSION = -miphoneos-version-min=5.0 + endif + COMMONFLAGS += $(MINVERSION) -Wno-ignored-optimization-argument -Wno-unknown-warning-option + STRIPCMD := strip -xS +else ifeq ($(platform),tvos-arm64) + ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk appletvos Path) + endif + OUTNAME := dosbox_pure_libretro_tvos.dylib + CXX = c++ -arch arm64 -isysroot $(IOSSDK) + LDFLAGS := -Wl,-dead_strip + COMMONFLAGS += -DDISABLE_DYNAREC=1 -Wno-unknown-warning-option + STRIPCMD := strip -xS else ifneq ($(ISMAC),) OUTNAME := dosbox_pure_libretro.dylib - CXX ?= clang++ + CXX ?= c++ LDFLAGS := -Wl,-dead_strip + COMMONFLAGS += -pthread -Wno-unknown-warning-option + ifeq ($(CROSS_COMPILE),1) + COMMONFLAGS += -DDISABLE_DYNAREC=1 + TARGET_RULE = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT) + COMMONFLAGS += $(TARGET_RULE) + LDFLAGS += $(TARGET_RULE) + endif + COMMONFLAGS += $(ARCHFLAGS) + LDFLAGS += $(ARCHFLAGS) + STRIPCMD := strip -xS +else ifeq ($(platform),windows) # For MSYS2 only + OUTNAME := dosbox_pure_libretro.dll + CXX ?= g++ + LDFLAGS := -Wl,--gc-sections -fno-ident else ifeq ($(platform),vita) OUTNAME := dosbox_pure_libretro_vita.a CXX := arm-vita-eabi-g++ @@ -70,14 +115,14 @@ else ifeq ($(platform),wii) CXX := $(DEVKITPPC)/bin/powerpc-eabi-g++ AR := $(DEVKITPPC)/bin/powerpc-eabi-ar COMMONFLAGS += -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float -fpermissive - COMMONFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int -D__POWERPC__ -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 + COMMONFLAGS += -U__INT32_TYPE__ -U__UINT32_TYPE__ -D__INT32_TYPE__=int -D__POWERPC__ -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 STATIC_LINKING = 1 else ifeq ($(platform),wiiu) OUTNAME := dosbox_pure_libretro_wiiu.a CXX := $(DEVKITPPC)/bin/powerpc-eabi-g++ AR := $(DEVKITPPC)/bin/powerpc-eabi-ar - COMMONFLAGS += -DGEKKO -DWIIU -DHW_RVL -mcpu=750 -meabi -mhard-float -I./deps/include/ - COMMONFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int -D__POWERPC__ -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 + COMMONFLAGS += -DGEKKO -DWIIU -DHW_RVL -mcpu=750 -meabi -mhard-float + COMMONFLAGS += -U__INT32_TYPE__ -U__UINT32_TYPE__ -D__INT32_TYPE__=int -D__POWERPC__ -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DGX_PTHREAD_LEGACY STATIC_LINKING = 1 else ifeq ($(platform),libnx) OUTNAME := dosbox_pure_libretro_libnx.a @@ -86,30 +131,52 @@ else ifeq ($(platform),libnx) COMMONFLAGS += -I$(LIBNX)/include/ -ftls-model=local-exec -specs=$(LIBNX)/switch.specs COMMONFLAGS += $(INCLUDE) -D__SWITCH__ -DHAVE_LIBNX STATIC_LINKING = 1 -else ifeq ($(platform), gcw0) +else ifeq ($(platform),gcw0) # You must used the toolchain built on or around 2014-08-20 OUTNAME := dosbox_pure_libretro.so CXX := /opt/gcw0-toolchain/usr/bin/mipsel-linux-g++ LDFLAGS := -Wl,--gc-sections -fno-ident CPUFLAGS := -ffast-math -march=mips32r2 -mtune=mips32r2 -mhard-float -fexpensive-optimizations -frename-registers + COMMONFLAGS += -pthread + STRIPCMD := /opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/bin/strip --strip-all +else ifneq ($(findstring Haiku,$(shell uname -s)),) + OUTNAME := dosbox_pure_libretro.so + LDFLAGS := -Wl,--gc-sections -fno-ident -lroot -lnetwork + ifneq ($(findstring BePC,$(shell uname -m)),) + CXX ?= g++-x86 + else + CXX ?= g++ + endif +else ifeq ($(platform), emscripten) + EXT?=bc + TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT) + STATIC_LINKING = 1 + OUTNAME := dosbox_pure_libretro_emscripten.bc + COMMONFLAGS += -pthread + HAVE_THREADS = 1 else OUTNAME := dosbox_pure_libretro.so CXX ?= g++ LDFLAGS := -Wl,--gc-sections -fno-ident - # ARM optimizations - PROCCPU := $(shell cat /proc/cpuinfo)) - ifneq ($(and $(filter ARMv7,$(PROCCPU)),$(filter neon,$(PROCCPU))),) - CPUFLAGS := -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ffast-math - else - ifeq ($(CORTEX_A7), 1) - CPUFLAGS += -marm -mcpu=cortex-a7 - ifeq ($(ARM_NEON), 1) - CPUFLAGS += -mfpu=neon-vfpv4 + COMMONFLAGS += -pthread + ifeq ($(CPUFLAGS),) + # ARM optimizations + PROCCPU := $(shell cat /proc/cpuinfo)) + ifneq ($(and $(filter ARMv7,$(PROCCPU)),$(filter neon,$(PROCCPU))),) + CPUFLAGS := -marm -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ffast-math + else ifeq ($(ARM_RPI4), 1) + CPUFLAGS := -marm -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ffast-math + else + ifeq ($(CORTEX_A7), 1) + CPUFLAGS += -marm -mcpu=cortex-a7 + ifeq ($(ARM_NEON), 1) + CPUFLAGS += -mfpu=neon-vfpv4 + endif + endif + ifeq ($(ARM_HARDFLOAT), 1) + CPUFLAGS += -mfloat-abi=hard endif endif - ifeq ($(ARM_HARDFLOAT), 1) - CPUFLAGS += -mfloat-abi=hard - endif endif CXX_VER := $(shell $(CXX) -v 2>&1) ifneq ($(and $(findstring arm,$(CXX_VER)),$(findstring version 10,$(CXX_VER))),) @@ -138,17 +205,28 @@ else ifeq ($(BUILD),ASAN) else BUILD := RELEASE BUILDDIR := release - CFLAGS := -DNDEBUG -O2 -fno-ident + ifeq ($(platform),vita) + CFLAGS := -DNDEBUG -O3 -fno-ident -fno-partial-inlining + else + CFLAGS := -DNDEBUG -O2 -fno-ident + endif LDFLAGS += -O2 endif -CFLAGS += $(CPUFLAGS) -std=c++11 -fpic -fomit-frame-pointer -fno-exceptions -fno-non-call-exceptions -Wno-address-of-packed-member -Wno-format -Wno-switch +CFLAGS += $(CPUFLAGS) -std=gnu++11 -fomit-frame-pointer -fexceptions -Wno-address-of-packed-member -Wno-format -Wno-switch -Wno-psabi +ifneq ($(STATIC_LINKING), 1) + CFLAGS += -fpic +else + CFLAGS += -DSTATIC_LINKING +endif + CFLAGS += -fvisibility=hidden -ffunction-sections -CFLAGS += -pthread -D__LIBRETRO__ -Iinclude +CFLAGS += -D__LIBRETRO__ -Iinclude -D_FILE_OFFSET_BITS=64 CFLAGS += $(COMMONFLAGS) #CFLAGS += -fdata-sections #saves around 32 bytes on most platforms but wrongfully adds up to 60MB on msys2 -LDFLAGS += $(CPUFLAGS) -lpthread -shared +LDLIBS := -lpthread +LDFLAGS += $(CPUFLAGS) -shared #LDFLAGS += -static-libstdc++ -static-libgcc #adds 1MB to output and still dynamically links against libc and libm .PHONY: all clean @@ -173,11 +251,9 @@ ifeq ($(STATIC_LINKING), 1) $(AR) rcs $@ $^ else $(info Linking $@ ...) - $(CXX) $(LDFLAGS) -o $@ $^ + $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) ifneq ($(BUILD),DEBUG) - @-/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/bin/strip --strip-all $@ $(PIPETONULL);true # gcw0 - @-strip --strip-all $@ $(PIPETONULL);true # others - @-strip -xS $@ $(PIPETONULL);true # mac + $(STRIPCMD) $@ endif endif diff --git a/README.md b/README.md index b67d3dd59..2507c46ed 100644 --- a/README.md +++ b/README.md @@ -5,25 +5,30 @@ built for RetroArch/Libretro aiming for simplicity and ease of use. ![Logo](images/logo.png) -* [Download](#download) -* [Install](#install) +* [How To Use](#how-to-use) +* [Manual Install](#manual-install) * [Features](#features) * [Load games from ZIP](#load-games-from-zip) * [Store modifications in separate save files](#store-modifications-in-separate-save-files) * [Mount disk images from inside ZIP files](#mount-disk-images-from-inside-zip-files) + * [Installing an Operating System](#installing-an-operating-system) * [Start menu with auto start](#start-menu-with-auto-start) * [Automated controller mappings](#automated-controller-mappings) * [Mouse emulation](#mouse-emulation) * [Keyboard emulation](#keyboard-emulation) * [Joystick emulation](#joystick-emulation) * [On-screen keyboard](#on-screen-keyboard) + * [Gamepad mapper](#gamepad-mapper) + * [3dfx Voodoo Emulation](#3dfx-voodoo-emulation) * [MIDI playback with SoundFonts](#midi-playback-with-soundfonts) * [Cheats support](#cheats-support) * [Save states](#save-states) * [Rewind support](#rewind-support) + * [Booter games](#booter-games) * [Loading M3U8 files](#loading-m3u8-files) * [Tips](#tips) * [Playing with keyboard and mouse](#playing-with-keyboard-and-mouse) + * [Loading a dosbox.conf file](#loading-a-dosboxconf-file) * [ZIP files can be renamed to DOSZ](#zip-files-can-be-renamed-to-dosz) * [Force opening the start menu](#force-opening-the-start-menu) * [Mount ZIP as A or D drive](#mount-zip-as-a-or-d-drive) @@ -31,7 +36,6 @@ built for RetroArch/Libretro aiming for simplicity and ease of use. * [Keyboard layout defaults to US](#keyboard-layout-defaults-to-us) * [Save file handling](#save-file-handling) * [Features not yet implemented](#features-not-yet-implemented) - * [Load dosbox.conf](#load-dosboxconf) * [Store ZIP seek index into save file](#store-zip-seek-index-into-save-file) * [Unsupported features](#unsupported-features) * [Building](#building) @@ -39,11 +43,15 @@ built for RetroArch/Libretro aiming for simplicity and ease of use. * [Linux](#linux) * [License](#license) -## Download -You can find a binary download for Windows, Linux and Raspberry Pi (Arm7) under the [Releases page](https://github.com/schellingb/dosbox-pure/releases/latest). +## How To Use +The easiest way to use this core is with the built-in core downloader feature of RetroArch. -## Install -Locate the directory where your libretro frontend stores its cores. +Just [get RetroArch](https://retroarch.com/?page=platforms) and select `Online Updater` -> `Core Downloader` -> `DOS (DOSBox-Pure)` and you're ready to go! + +## Manual Install +You can find a binary download of the core for Windows, Linux and Raspberry Pi (Arm7) under the [Releases page here](https://github.com/schellingb/dosbox-pure/releases/latest). + +To install, locate the directory where your libretro frontend stores its cores. In RetroArch, you can open the main menu and go to `Configuration File` -> `Load Configuration` -> `Parent Directory` -> `cores` to find it. The release ZIP contains 2 files, `dosbox_pure_libretro.dll` (or `.so` for Linux) and `dosbox_pure_libretro.info`. The `.dll` or `.so` file is to be extracted into the cores directory. The `.info` file goes into the `info` directory or into `cores` if it doesn't exist. @@ -57,12 +65,39 @@ DOSBox Pure can load games directly from ZIP files without the need to extract t Changes made to a loaded ZIP file will be stored as a separate ZIP file into the libretro saves directory. If a game is loaded directly without using a ZIP file the saves directory is not used. -### Mount disc images from inside ZIP files -CD images (ISO or CUE) and floppy disk images (IMG/IMA/VHD) can be mounted directly from inside ZIP files. +### Mount disk images from inside ZIP files +CD images (ISO or CUE) and floppy disk images (IMG/IMA/VHD/JRC/TC) can be mounted directly from inside ZIP files. The system will automatically mount the first found disk image as the A: or D: drive. Additional disks can be loaded or swapped by using the `Disc Control` menu in RetroArch. The start menu also offers the option to mount or unmount an image. +### Installing an Operating System +When loading a content that contains a bootable CD-ROM image, the start menu will show an additional option +`[ Boot and Install New Operating System ]`. Additionally it will also show when both a CD-ROM image and a +floppy disk image are loaded, so non-bootable install CDs can be used as well. + +With this option a hard disk image of selectable size (between 8 and 1024 MB) can be created after which +the CD-ROM or floppy disk image will boot to install the operating system. Once the installation has completed, +loading any content (for example a ZIP file) will have the option `[ Run Installed Operating System ]` to boot +the created hard disk image as the C: drive and with the loaded content becoming the D: drive. If there are +any CD-ROM images available they will appear as the E: drive. + +There are two core options related to this feature: + +- `System > Advanced > Discard Disk Modifications`: If set, while running an installed operating system, + modifications to the C: drive will not be saved permanently. This allows the content to be closed any + time without worry of file system or registry corruption. Make sure to finish setting up the OS + by setting the screen resolution and installing device drivers first before setting this option. +- `System > Advanced > Force Normal Core in OS`: If you encounter program errors or crashes inside the + installed operating system, this option can be used to switch to a more compatible but slower + mode. The option can be toggled on and off as needed. + +It is also possible to create save states while running an installed operating system. This can be used +to skip the startup sequence or even jump directly to the title screen of a game. Make sure to load the +same operating system and do not modify the loaded ZIP file in any way otherwise the operating system +will be very confused and most likely crash. To make things easier, set the operating system to +[auto start](#start-menu-with-auto-start) so it starts together with the content and skipping the start menu. + ### Start menu with auto start ![Start Menu](images/startmenu.png) @@ -113,6 +148,32 @@ the move speed. If the cursor is moved above the middle of the screen the keyboard will move to the top. The button can be remapped in the controls menu and there is also a core options to disable it entirely. +### Gamepad mapper +![Gamepad mapper](images/padmapper.png) + +If you need even more customization of the controls than provided by the [Automated controller mappings](#automated-controller-mappings), +or the various presets for [mouse](#mouse-emulation), [keyboard](#keyboard-emulation) and [joysticks](#joystick-emulation) you can use +the gamepad mapper. + +To open it, click the "PAD MAPPER" button in the [On-screen keyboard](#on-screen-keyboard). + +It is available any time in-game and changes are immediately saved and applied when closing the mapper. Up to 4 functions can be mapped +for any button/direction of the gamepad. A mapping can be to any function of the 3 emulated input devices: keyboard, mouse or joystick. + +### 3dfx Voodoo Emulation +The core includes emulation of a 3dfx Voodoo PCI card. Compatible DOS games should work out of the box. If running an +[installed operating system](#installing-an-operating-system) like Windows 95 or Windows 98, you can get the required drivers +from [this site](https://www.philscomputerlab.com/drivers-for-voodoo.html). Download and launch voodoo_graphics_driver_kit_version_3.01.00.zip +with the core, then run the operating system and install the driver via the control panel from the files on the D: drive. + +There are two core options related to this feature: + +- `Video > 3dfx Voodoo Emulation`: By default a 12 MB memory card with two texture mapping units is emulated. + It can be changed to a single TMU 4MB card or support can be disabled entirely. +- `Video > 3dfx Voodoo Performance Settings`: Some options to modify the rendering behavior are available. Setting + it to 'low quality' only gives a small performance improvement. Disabling multi-threading is possible for example + if your device gets too hot while using it but in general is not recommended. + ### MIDI playback with SoundFonts If DOSBox Pure finds one or more `.SF2` sound font file in the `system` directory of the frontend, one of them can be selected via the `Audio > MIDI SoundFont` core option. @@ -134,6 +195,14 @@ Save states might not be compatible across different versions of DOSBox Pure. Using the core option `Save States Support`, rewinding can be enabled. Keep in mind that rewind support comes at a high performance cost. +### Booter games +When loading a ZIP file which contains a floppy or hard-disk image or loading such a disk image directly, +the [start menu](#start-menu-with-auto-start) will show an additional option `[BOOT IMAGE FILE]`. +When selected, a list of system modes (emulated graphics card) will be shown and once a mode is selected, +DOSBox Pure will try to boot from the mounted image. +While running a booter game, the mounted disk can be easily swapped with the +[Disc Control menu](#mount-disk-images-from-inside-zip-files) or hotkeys set in the frontend. + ### Loading M3U8 files If the core gets loaded with a `.m3u8` file, all files listed in it will be added to the disc swap menu. The first image will automatically get mounted as A: or D: drive depending @@ -147,6 +216,15 @@ mode available in RetroArch. By default you can toggle game focus by pressing th scroll lock key. While game focus is active, the hotkeys are disabled and keyboard will not cause retro pad button presses (which could cause multiple keys to be pressed at once). +### Loading a dosbox.conf file +If a .conf file gets selected in the frontend, DOSBox Pure will mount the directory of that file as the C: drive and then use it. + +Alternatively, a .conf file can get loaded automatically depending on the 'Emulation > Loading of dosbox.conf' core option. There are two modes that can be enabled: +- "Try 'dosbox.conf' in the loaded content (ZIP or folder)" - Will load C:\DOSBOX.CONF automatically if it exists in the mounted ZIP or path +- "Try '.conf' with same name as loaded content (next to ZIP or folder)" - Will automatically load GAME.conf next to GAME.zip if it exists. + +If there is a .conf file, DOSBox Pure will load the settings in that file and run the autoexec lines from it (if set). + ### ZIP files can be renamed to DOSZ If your libretro frontend wants to load the content of `.ZIP` files instead of sending it to DOSBox Pure to load, the files can be renamed from `.ZIP` to `.DOSZ`. @@ -187,11 +265,6 @@ Then gradually until at max 59MB and more, it will be written out 60 seconds aft ## Features not yet implemented -### Load dosbox.conf -It would be nice to be able to load a `dosbox.conf` file if it exists in the loaded -game directory (for example inside the ZIP file). Ideally this would then hide all the options that -have been overwritten by that `.conf` file in the core options list. - ### Store ZIP seek index into save file When a DOS games opens a large file and wants to read some data from near the end of the file, DOSBox Pure needs to decompress the entire file to do that. This can be most noticeable when mounting diff --git a/core_options.h b/core_options.h index afd7d6496..a148eddcc 100644 --- a/core_options.h +++ b/core_options.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Bernhard Schelling + * Copyright (C) 2020-2022 Bernhard Schelling * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,22 +16,58 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -static retro_core_option_definition option_defs[] = +static retro_core_option_v2_category option_cats[] = +{ + { "Emulation", "Emulation Options", "Core specific settings (latency, save states, start menu)." }, + { "Input", "Input Options", "Keyboard, mouse and joystick settings." }, + { "Performance", "Performance Options", "Adjust the performance of the emulated CPU." }, + { "Video", "Video Options", "Settings for the emulated graphics card and aspect ratio." }, + { "System", "System Options", "Other system settings for the emulated RAM and CPU." }, + { "Audio", "Audio Options", "MIDI, SoundBlaster and other audio settings." }, + { NULL, NULL, NULL } +}; + +static retro_core_option_v2_definition option_defs[] = { { "dosbox_pure_advanced", - "Show Advanced Options", - "Close and re-open the menu to refresh this options page.", + "Show Advanced Options", NULL, + "Close and re-open the menu to refresh this options page.", NULL, + NULL, { { "false", "Off" }, { "true", "On" } }, "false" }, + // Emulation + { + "dosbox_pure_force60fps", + "Force 60 FPS Output", NULL, + "Enable this to force output at 60FPS. Use this if you encounter screen tearing or vsync issues.", NULL, + "Emulation", + { + { "false", "Off" }, + { "true", "On" }, + }, + "false" + }, + { + "dosbox_pure_perfstats", + "Show Performance Statistics", NULL, + "Enable this to show statistics about performance and framerate and check if emulation runs at full speed.", NULL, + "Emulation", + { + { "none", "Disabled" }, + { "simple", "Simple" }, + { "detailed", "Detailed information" }, + }, + "none" + }, { "dosbox_pure_savestate", - "Save States Support", + "Save States Support", NULL, "Make sure to test it in each game before using it. Complex late era DOS games might have problems." "\n" - "Be aware that states saved with different video or CPU settings are not loadable." "\n" - "Rewind support comes at a high performance cost, setting it requires a full core restart." "\n" - "Save states might not be compatible with new versions of this core." "\n\n", //end of top section + "Be aware that states saved with different video, CPU or memory settings are not loadable." "\n" + "Rewind support comes at a high performance cost and needs at least 40MB of rewind buffer.", NULL, + "Emulation", { { "on", "Enable save states" }, { "rewind", "Enable save states with rewind" }, @@ -39,26 +75,92 @@ static retro_core_option_definition option_defs[] = }, "on" }, + { + "dosbox_pure_conf", + "Loading of dosbox.conf", NULL, + "DOSBox Pure is meant to be configured via core options but optionally supports loading of legacy .conf files." "\n\n", NULL, //end of Emulation section + "Emulation", + { + { "false", "Disabled conf support (default)" }, + { "inside", "Try 'dosbox.conf' in the loaded content (ZIP or folder)" }, + { "outside", "Try '.conf' with same name as loaded content (next to ZIP or folder)" }, + }, + "default" + }, + { + "dosbox_pure_menu_time", + "Advanced > Start Menu", NULL, + "Set the behavior of the start menu before and after launching a game." "\n" + "You can also force it to open by holding shift or L2/R2 when selecting 'Restart'.", NULL, + "Emulation", + { +#ifndef STATIC_LINKING + { "5", "Show at start, shut down core 5 seconds after auto started game exit" }, + { "3", "Show at start, shut down core 3 seconds after auto started game exit" }, + { "0", "Show at start, shut down core immediately after auto started game exit" }, +#else + { "5", "Show at start, show again after game exit (default)" }, +#endif + { "-1", "Always show menu on startup and after game exit, ignore auto start setting" }, + }, + "5" + }, + { + "dosbox_pure_latency", + "Advanced > Input Latency", NULL, + "By default the core operates in a high performance mode with good input latency." "\n" + "There is a special mode available which minimizes input latency further requiring manual tweaking.", NULL, + "Emulation", + { + { "default", "Default" }, + { "low", "Lowest latency - See CPU usage setting below!" }, + { "variable", "Irregular latency - Might improve performance on low-end devices" }, + }, + "default" + }, + { + "dosbox_pure_auto_target", + "Advanced > Low latency CPU usage", NULL, + "In low latency mode when emulating DOS as fast as possible, how much time per frame should be used by the emulation." "\n" + "If the video is stuttering, lower this or improve render performance in the frontend (for example by disabling vsync or video processing)." "\n" + "Use the performance statistics to easily find the maximum that still hits the emulated target framerate." "\n\n", NULL, //end of Emulation > Advanced section + "Emulation", + { + //{ "0.2", "20%" }, { "0.21", "21%" }, { "0.22", "22%" }, { "0.23", "23%" }, { "0.24", "24%" }, { "0.25", "25%" }, { "0.26", "26%" }, { "0.27", "27%" }, { "0.28", "28%" }, { "0.29", "29%" }, + //{ "0.3", "30%" }, { "0.31", "31%" }, { "0.32", "32%" }, { "0.33", "33%" }, { "0.34", "34%" }, { "0.35", "35%" }, { "0.36", "36%" }, { "0.37", "37%" }, { "0.38", "38%" }, { "0.39", "39%" }, + //{ "0.4", "40%" }, { "0.41", "41%" }, { "0.42", "42%" }, { "0.43", "43%" }, { "0.44", "44%" }, { "0.45", "45%" }, { "0.46", "46%" }, { "0.47", "47%" }, { "0.48", "48%" }, { "0.49", "49%" }, + { "0.5", "50%" }, { "0.51", "51%" }, { "0.52", "52%" }, { "0.53", "53%" }, { "0.54", "54%" }, { "0.55", "55%" }, { "0.56", "56%" }, { "0.57", "57%" }, { "0.58", "58%" }, { "0.59", "59%" }, + { "0.6", "60%" }, { "0.61", "61%" }, { "0.62", "62%" }, { "0.63", "63%" }, { "0.64", "64%" }, { "0.65", "65%" }, { "0.66", "66%" }, { "0.67", "67%" }, { "0.68", "68%" }, { "0.69", "69%" }, + { "0.7", "70%" }, { "0.71", "71%" }, { "0.72", "72%" }, { "0.73", "73%" }, { "0.74", "74%" }, { "0.75", "75%" }, { "0.76", "76%" }, { "0.77", "77%" }, { "0.78", "78%" }, { "0.79", "79%" }, + { "0.8", "80%" }, { "0.81", "81%" }, { "0.82", "82%" }, { "0.83", "83%" }, { "0.84", "84%" }, { "0.85", "85%" }, { "0.86", "86%" }, { "0.87", "87%" }, { "0.88", "88%" }, { "0.89", "89%" }, + { "0.9", "90%" }, { "0.91", "91%" }, { "0.92", "92%" }, { "0.93", "93%" }, { "0.94", "94%" }, { "0.95", "95%" }, { "0.96", "96%" }, { "0.97", "97%" }, { "0.98", "98%" }, { "0.99", "99%" }, + { "1.0", "100%" }, + }, + "0.9", + }, // Input { "dosbox_pure_bind_unused", - "Input > Bind Unused Buttons", - "Bind all unused controller buttons to keyboard keys.\nCan be remapped in the Controls section of the core settings.", + "Bind Unused Buttons", NULL, + "Bind all unused controller buttons to keyboard keys.\nCan be remapped in the Controls section of the core settings.", NULL, + "Input", { { "true", "On" }, { "false", "Off" } }, "true" }, { "dosbox_pure_on_screen_keyboard", - "Input > Enable On Screen Keyboard", - "Enable the On Screen Keyboard feature which can be activated with the L3 button on the controller.", + "Enable On Screen Keyboard", NULL, + "Enable the On Screen Keyboard feature which can be activated with the L3 button on the controller.", NULL, + "Input", { { "true", "On" }, { "false", "Off" } }, "true" }, { "dosbox_pure_mouse_wheel", - "Input > Bind Mouse Wheel To Key", - "Bind mouse wheel up and down to two keyboard keys to be able to use it in DOS games.", + "Bind Mouse Wheel To Key", NULL, + "Bind mouse wheel up and down to two keyboard keys to be able to use it in DOS games.", NULL, + "Input", { { "67/68", "Left-Bracket/Right-Bracket" }, { "72/71", "Comma/Period" }, @@ -78,8 +180,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_mouse_speed_factor", - "Input > Mouse Sensitivity", - "Sets the overall mouse cursor movement speed." "\n\n", //end of Input section + "Mouse Sensitivity", NULL, + "Sets the overall mouse cursor movement speed." "\n\n", NULL, //end of Input section + "Input", { { "0.2", "20%" }, { "0.25", "25%" }, { "0.3", "30%" }, { "0.35", "35%" }, { "0.4", "40%" }, { "0.45", "45%" }, { "0.5", "50%" }, { "0.55", "55%" }, { "0.6", "60%" }, { "0.65", "65%" }, { "0.7", "70%" }, { "0.75", "75%" }, @@ -93,8 +196,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_mouse_speed_factor_x", - "Input > Advanced > Horizontal Mouse Sensitivity.", - "Experiment with this value if the mouse is too fast/slow when moving left/right.", + "Advanced > Horizontal Mouse Sensitivity.", NULL, + "Experiment with this value if the mouse is too fast/slow when moving left/right.", NULL, + "Input", { { "0.2", "20%" }, { "0.25", "25%" }, { "0.3", "30%" }, { "0.35", "35%" }, { "0.4", "40%" }, { "0.45", "45%" }, { "0.5", "50%" }, { "0.55", "55%" }, { "0.6", "60%" }, { "0.65", "65%" }, { "0.7", "70%" }, { "0.75", "75%" }, @@ -108,26 +212,30 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_mouse_input", - "Input > Advanced > Use Mouse Input", - "You can disable input handling from a mouse or a touchscreen (emulated mouse through joypad will still work).", + "Advanced > Use Mouse Input", NULL, + "You can disable input handling from a mouse or a touchscreen (emulated mouse through joypad will still work).", NULL, + "Input", { { "true", "On (default)" }, { "false", "Off" } }, "true" }, { "dosbox_pure_auto_mapping", - "Input > Advanced > Automatic Game Pad Mappings", + "Advanced > Automatic Game Pad Mappings", NULL, "DOSBox Pure can automatically apply a gamepad control mapping scheme when it detects a game." "\n" - "These button mappings are provided by the Keyb2Joypad Project (by Jemy Murphy and bigjim).", + "These button mappings are provided by the Keyb2Joypad Project (by Jemy Murphy and bigjim).", NULL, + "Input", { { "true", "On (default)" }, { "notify", "Enable with notification on game detection" }, { "false", "Off" } }, "true" }, { "dosbox_pure_keyboard_layout", - "Input > Advanced > Keyboard Layout", - "Select the keyboard layout (will not change the On Screen Keyboard).", + "Advanced > Keyboard Layout", NULL, + "Select the keyboard layout (will not change the On Screen Keyboard).", NULL, + "Input", { { "us", "US (default)" }, { "uk", "UK" }, + { "be", "Belgium" }, { "br", "Brazil" }, { "hr", "Croatia" }, { "cz243", "Czech Republic" }, @@ -154,52 +262,41 @@ static retro_core_option_definition option_defs[] = }, "us" }, + { + "dosbox_pure_menu_transparency", + "Advanced > Menu Transparency", NULL, + "Set the transparency level of the On Screen Keyboard and the Gamepad Mapper.", NULL, + "Input", + { + { "10", "10%" }, { "20", "20%" }, { "30", "30%" }, { "40", "40%" }, { "50", "50%" }, { "60", "60%" }, { "70", "70%" }, { "80", "80%" }, { "90", "90%" }, { "100", "100%" }, + }, + "50" + }, { "dosbox_pure_joystick_analog_deadzone", - "Input > Joystick Analog Deadzone", - "Set the deadzone of the joystick analog sticks. May be used to eliminate drift caused by poorly calibrated joystick hardware.", + "Advanced > Joystick Analog Deadzone", NULL, + "Set the deadzone of the joystick analog sticks. May be used to eliminate drift caused by poorly calibrated joystick hardware.", NULL, + "Input", { - { "0", "0%" }, - { "5", "5%" }, - { "10", "10%" }, - { "15", "15%" }, - { "20", "20%" }, - { "25", "25%" }, - { "30", "30%" }, - { "35", "35%" }, - { "40", "40%" }, - { NULL, NULL }, + { "0", "0%" }, { "5", "5%" }, { "10", "10%" }, { "15", "15%" }, { "20", "20%" }, { "25", "25%" }, { "30", "30%" }, { "35", "35%" }, { "40", "40%" }, }, "15" }, { "dosbox_pure_joystick_timed", - "Input > Advanced > Enable Joystick Timed Intervals", - "Enable timed intervals for joystick axes. Experiment with this option if your joystick drifts." "\n\n", //end of Input > Advanced section + "Advanced > Enable Joystick Timed Intervals", NULL, + "Enable timed intervals for joystick axes. Experiment with this option if your joystick drifts." "\n\n", NULL, //end of Input > Advanced section + "Input", { { "true", "On (default)" }, { "false", "Off" } }, "true" }, // Performance - { - "dosbox_pure_cycles_scale", - "Performance > Performance Scale", - "Fine tune the emulated performance for specific needs.", - { - { "0.2", "20%" }, { "0.25", "25%" }, { "0.3", "30%" }, { "0.35", "35%" }, { "0.4", "40%" }, { "0.45", "45%" }, - { "0.5", "50%" }, { "0.55", "55%" }, { "0.6", "60%" }, { "0.65", "65%" }, { "0.7", "70%" }, { "0.75", "75%" }, - { "0.8", "80%" }, { "0.85", "85%" }, { "0.9", "90%" }, { "0.95", "95%" }, { "1.0", "100%" }, { "1.05", "105%" }, - { "1.1", "110%" }, { "1.15", "115%" }, { "1.2", "120%" }, { "1.25", "125%" }, { "1.3", "130%" }, { "1.35", "135%" }, - { "1.4", "140%" }, { "1.45", "145%" }, { "1.5", "150%" }, { "1.55", "155%" }, { "1.6", "160%" }, { "1.65", "165%" }, - { "1.7", "170%" }, { "1.75", "175%" }, { "1.8", "180%" }, { "1.85", "185%" }, { "1.9", "190%" }, { "1.95", "195%" }, - { "2.0", "200%" }, - }, - "1.0", - }, { "dosbox_pure_cycles", - "Performance > Emulated Performance", - "The raw performance that DOSBox will try to emulate." "\n\n", //end of Performance section + "Emulated Performance", NULL, + "The raw performance that DOSBox will try to emulate." "\n\n", NULL, //end of Performance section + "Performance", { { "auto", "AUTO - DOSBox will try to detect performance needs (default)" }, { "max", "MAX - Emulate as many instructions as possible" }, @@ -217,12 +314,64 @@ static retro_core_option_definition option_defs[] = }, "auto" }, + { + "dosbox_pure_cycles_scale", + "Detailed > Performance Scale", NULL, + "Fine tune the emulated performance for specific needs." "\n\n", NULL, //end of Performance > Detailed section + "Performance", + { + { "0.2", "20%" }, { "0.25", "25%" }, { "0.3", "30%" }, { "0.35", "35%" }, { "0.4", "40%" }, { "0.45", "45%" }, + { "0.5", "50%" }, { "0.55", "55%" }, { "0.6", "60%" }, { "0.65", "65%" }, { "0.7", "70%" }, { "0.75", "75%" }, + { "0.8", "80%" }, { "0.85", "85%" }, { "0.9", "90%" }, { "0.95", "95%" }, { "1.0", "100%" }, { "1.05", "105%" }, + { "1.1", "110%" }, { "1.15", "115%" }, { "1.2", "120%" }, { "1.25", "125%" }, { "1.3", "130%" }, { "1.35", "135%" }, + { "1.4", "140%" }, { "1.45", "145%" }, { "1.5", "150%" }, { "1.55", "155%" }, { "1.6", "160%" }, { "1.65", "165%" }, + { "1.7", "170%" }, { "1.75", "175%" }, { "1.8", "180%" }, { "1.85", "185%" }, { "1.9", "190%" }, { "1.95", "195%" }, + { "2.0", "200%" }, + }, + "1.0", + }, + { + "dosbox_pure_cycle_limit", + "Detailed > Limit CPU Usage", NULL, + "When emulating DOS as fast as possible, how much time per frame should be used by the emulation." "\n" + "Lower this if your device becomes hot while using this core." "\n\n", NULL, //end of Performance > Detailed section + "Performance", + { + //{ "0.2", "20%" }, { "0.21", "21%" }, { "0.22", "22%" }, { "0.23", "23%" }, { "0.24", "24%" }, { "0.25", "25%" }, { "0.26", "26%" }, { "0.27", "27%" }, { "0.28", "28%" }, { "0.29", "29%" }, + //{ "0.3", "30%" }, { "0.31", "31%" }, { "0.32", "32%" }, { "0.33", "33%" }, { "0.34", "34%" }, { "0.35", "35%" }, { "0.36", "36%" }, { "0.37", "37%" }, { "0.38", "38%" }, { "0.39", "39%" }, + //{ "0.4", "40%" }, { "0.41", "41%" }, { "0.42", "42%" }, { "0.43", "43%" }, { "0.44", "44%" }, { "0.45", "45%" }, { "0.46", "46%" }, { "0.47", "47%" }, { "0.48", "48%" }, { "0.49", "49%" }, + { "0.5", "50%" }, { "0.51", "51%" }, { "0.52", "52%" }, { "0.53", "53%" }, { "0.54", "54%" }, { "0.55", "55%" }, { "0.56", "56%" }, { "0.57", "57%" }, { "0.58", "58%" }, { "0.59", "59%" }, + { "0.6", "60%" }, { "0.61", "61%" }, { "0.62", "62%" }, { "0.63", "63%" }, { "0.64", "64%" }, { "0.65", "65%" }, { "0.66", "66%" }, { "0.67", "67%" }, { "0.68", "68%" }, { "0.69", "69%" }, + { "0.7", "70%" }, { "0.71", "71%" }, { "0.72", "72%" }, { "0.73", "73%" }, { "0.74", "74%" }, { "0.75", "75%" }, { "0.76", "76%" }, { "0.77", "77%" }, { "0.78", "78%" }, { "0.79", "79%" }, + { "0.8", "80%" }, { "0.81", "81%" }, { "0.82", "82%" }, { "0.83", "83%" }, { "0.84", "84%" }, { "0.85", "85%" }, { "0.86", "86%" }, { "0.87", "87%" }, { "0.88", "88%" }, { "0.89", "89%" }, + { "0.9", "90%" }, { "0.91", "91%" }, { "0.92", "92%" }, { "0.93", "93%" }, { "0.94", "94%" }, { "0.95", "95%" }, { "0.96", "96%" }, { "0.97", "97%" }, { "0.98", "98%" }, { "0.99", "99%" }, + { "1.0", "100%" }, + }, + "1.0", + }, // Video + { + "dosbox_pure_machine", + "Emulated Graphics Chip (restart required)", NULL, + "The type of graphics chip that DOSBox will emulate.", NULL, + "Video", + { + { "svga", "SVGA (Super Video Graphics Array) (default)" }, + { "vga", "VGA (Video Graphics Array)" }, + { "ega", "EGA (Enhanced Graphics Adapter" }, + { "cga", "CGA (Color Graphics Adapter)" }, + { "tandy", "Tandy (Tandy Graphics Adapter" }, + { "hercules", "Hercules (Hercules Graphics Card)" }, + { "pcjr", "PCjr" }, + }, + "svga" + }, { "dosbox_pure_cga", - "Video > CGA Mode", - "The CGA variation that is being emulated.", + "CGA Mode", NULL, + "The CGA variation that is being emulated.", NULL, + "Video", { { "early_auto", "Early model, composite mode auto (default)" }, { "early_on", "Early model, composite mode on" }, @@ -235,8 +384,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_hercules", - "Video > Hercules Color Mode", - "The color scheme for Hercules emulation.", + "Hercules Color Mode", NULL, + "The color scheme for Hercules emulation.", NULL, + "Video", { { "white", "Black & white (default)" }, { "amber", "Black & amber" }, @@ -246,8 +396,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_svga", - "Video > SVGA Mode (restart required)", - "The SVGA variation that is being emulated. Try changing this if you encounter graphical glitches.", + "SVGA Mode (restart required)", NULL, + "The SVGA variation that is being emulated. Try changing this if you encounter graphical glitches.", NULL, + "Video", { { "svga_s3", "S3 Trio64 (default)" }, { "vesa_nolfb", "S3 Trio64 no-line buffer hack (reduces flickering in some games)" }, @@ -259,24 +410,36 @@ static retro_core_option_definition option_defs[] = "s3" }, { - "dosbox_pure_machine", - "Video > Emulated Graphics Chip (restart required)", - "The type of graphics chip that DOSBox will emulate.", + "dosbox_pure_voodoo", + "3dfx Voodoo Emulation", NULL, + "Enables certain games with support for the Voodoo 3D accelerator." "\n" + "3dfx Voodoo Graphics SST-1/2 emulator by Aaron Giles and the MAME team (license: BSD-3-Clause)", NULL, + "Video", { - { "svga", "SVGA (Super Video Graphics Array) (default)" }, - { "vga", "VGA (Video Graphics Array)" }, - { "ega", "EGA (Enhanced Graphics Adapter" }, - { "cga", "CGA (Color Graphics Adapter)" }, - { "tandy", "Tandy (Tandy Graphics Adapter" }, - { "hercules", "Hercules (Hercules Graphics Card)" }, - { "pcjr", "PCjr" }, + { "12mb", "Enabled - 12MB memory (default)" }, + { "4mb", "Enabled - 4MB memory" }, + { "off", "Disabled" }, }, - "svga" + "12mb", + }, + { + "dosbox_pure_voodoo_perf", + "3dfx Voodoo Performance Settings", NULL, + "Options to tweak the behavior of the 3dfx Voodoo emulation.", NULL, + "Video", + { + { "1", "Multi-threading (default)" }, + { "3", "Multi-threading, low quality" }, + { "2", "Low quality" }, + { "0", "None" }, + }, + "1", }, { "dosbox_pure_aspect_correction", - "Video > Aspect Ratio Correction.", - "When enabled, the core's aspect ratio is set to what a CRT monitor would display." "\n\n", //end of Video section + "Aspect Ratio Correction", NULL, + "When enabled, the core's aspect ratio is set to what a CRT monitor would display." "\n\n", NULL, //end of Video section + "Video", { { "false", "Off (default)" }, { "true", "On" } }, "false" }, @@ -284,8 +447,10 @@ static retro_core_option_definition option_defs[] = // System { "dosbox_pure_memory_size", - "System > Memory Size (restart required)", - "The amount of (high) memory that the emulated machine has. You can also disable extended memory (EMS/XMS).", + "Memory Size (restart required)", NULL, + "The amount of (high) memory that the emulated machine has. You can also disable extended memory (EMS/XMS)." "\n" + "Using more than the default is not recommended, due to incompatibility with certain games and applications.", NULL, + "System", { { "none", "Disable extended memory (no EMS/XMS)" }, { "4", "4 MB" }, @@ -295,17 +460,21 @@ static retro_core_option_definition option_defs[] = { "32", "32 MB" }, { "48", "48 MB" }, { "64", "64 MB" }, + { "96", "96 MB" }, + { "128", "128 MB" }, + { "224", "224 MB" }, }, "16" }, { "dosbox_pure_cpu_type", - "System > CPU Type", + "CPU Type (restart required)", NULL, "Emulated CPU type. Auto is the fastest choice." "\n" "Games that require specific CPU type selection:" "\n" "386 (prefetch): X-Men: Madness in The Murderworld, Terminator 1, Contra, Fifa International Soccer 1994" "\n" "486 (slow): Betrayal in Antara" "\n" - "Pentium (slow): Fifa International Soccer 1994, Windows 95/Windows 3.x games" "\n\n", //end of System section + "Pentium (slow): Fifa International Soccer 1994, Windows 95/Windows 3.x games" "\n\n", NULL, //end of System section + "System", { { "auto", "Auto - Mixed feature set with maximum performance and compatibility" }, { "386", "386 - 386 instruction with fast memory access" }, @@ -318,8 +487,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_cpu_core", - "System > Advanced > CPU Core", - "Emulation method (DOSBox CPU core) used.", + "Advanced > CPU Core", NULL, + "Emulation method (DOSBox CPU core) used.", NULL, + "System", { #if defined(C_DYNAMIC_X86) { "auto", "Auto - Real-mode games use normal, protected-mode games use dynamic" }, @@ -338,24 +508,40 @@ static retro_core_option_definition option_defs[] = #endif }, { - "dosbox_pure_menu_time", - "System > Advanced > Start Menu", - "Set the behavior of the start menu before and after launching a game." "\n" - "You can also force it to open by holding shift or L2/R2 when selecting 'Restart'." "\n\n", //end of System > Advanced section - { - { "5", "Show at start, shut down core 5 seconds after auto started game exit" }, - { "3", "Show at start, shut down core 3 seconds after auto started game exit" }, - { "0", "Show at start, shut down core immediately after auto started game exit" }, - { "-1", "Always show menu on startup and after game exit, ignore auto start setting" }, - }, - "5" + "dosbox_pure_bootos_ramdisk", + "Advanced > Discard OS Disk Modifications (restart required)", NULL, + "When running an installed operating system, modifications to the C: drive will not be saved permanently." "\n" + "This allows the content to be closed any time without worry of file system or registry corruption.", NULL, + "System", + { { "false", "Off (default)" }, { "true", "On" } }, + "false" + }, + { + "dosbox_pure_bootos_dfreespace", + "Advanced > Free Space on D: in OS (restart required)", NULL, + "Controls the amount of free space available on the D: drive when running an installed operating system." "\n" + "If the total size of the D: drive (data + free space) exceeds 2 GB, it can't be used in earlier versions of Windows 95." "\n" + "WARNING: Created save files are tied to this setting, so changing this will hide all existing D: drive changes.", NULL, + "System", + { { "1024", "1GB (default)" }, { "2048", "2GB" }, { "4096", "4GB" }, { "8192", "8GB" } }, + "1024" + }, + { + "dosbox_pure_bootos_forcenormal", + "Advanced > Force Normal Core in OS", NULL, + "The normal core can be more stable when running an installed operating system." "\n" + "This can be toggled on and off to navigate around crashes." "\n\n", NULL, //end of System > Advanced section + "System", + { { "false", "Off (default)" }, { "true", "On" } }, + "false" }, // Audio { "dosbox_pure_audiorate", - "Audio > Audio Sample Rate (restart required)", - "This should match the frontend audio output rate (Hz) setting.", + "Audio Sample Rate (restart required)", NULL, + "This should match the frontend audio output rate (Hz) setting.", NULL, + "Audio", { { "48000", NULL }, { "44100", NULL }, @@ -373,8 +559,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_sblaster_conf", - "Audio > SoundBlaster Settings", - "Set the address, interrupt, low 8-bit and high 16-bit DMA.", + "SoundBlaster Settings", NULL, + "Set the address, interrupt, low 8-bit and high 16-bit DMA.", NULL, + "Audio", { // Some common (and less common) port, irq, low and high dma settings (based on a very scientific web search) { "A220 I7 D1 H5", "Port 0x220, IRQ 7, 8-Bit DMA 1, 16-bit DMA 5" }, @@ -386,16 +573,17 @@ static retro_core_option_definition option_defs[] = { "A240 I5 D1 H5", "Port 0x240, IRQ 5, 8-Bit DMA 1, 16-bit DMA 5" }, { "A240 I10 D3 H7", "Port 0x240, IRQ 10, 8-Bit DMA 3, 16-bit DMA 7" }, { "A280 I10 D0 H6", "Port 0x280, IRQ 10, 8-Bit DMA 0, 16-bit DMA 6" }, - { "A210 I5 D1 H5", "Port 0x210, IRQ 5, 8-Bit DMA 1, 16-bit DMA 5" }, + { "A280 I5 D1 H5", "Port 0x280, IRQ 5, 8-Bit DMA 1, 16-bit DMA 5" }, }, "A220 I7 D1 H5" }, { "dosbox_pure_midi", - "Audio > MIDI Output", + "MIDI Output", NULL, "Select the .SF2 SoundFont file, .ROM file or interface used for MIDI output." "\n" "To add SoundFonts or ROM files, copy them into the 'system' directory of the frontend." "\n" - "To use the frontend MIDI driver, make sure it's set up correctly." "\n\n", //end of Audio section + "To use the frontend MIDI driver, make sure it's set up correctly." "\n\n", NULL, //end of Audio section + "Audio", { // dynamically filled in retro_init }, @@ -403,8 +591,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_sblaster_type", - "Audio > Advanced > SoundBlaster Type", - "Type of emulated SoundBlaster card.", + "Advanced > SoundBlaster Type", NULL, + "Type of emulated SoundBlaster card.", NULL, + "Audio", { { "sb16", "SoundBlaster 16 (default)" }, { "sbpro2", "SoundBlaster Pro 2" }, @@ -418,8 +607,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_sblaster_adlib_mode", - "Audio > Advanced > SoundBlaster Adlib/FM Mode", - "The SoundBlaster emulated FM synth mode. All modes are Adlib compatible except CMS.", + "Advanced > SoundBlaster Adlib/FM Mode", NULL, + "The SoundBlaster emulated FM synth mode. All modes are Adlib compatible except CMS.", NULL, + "Audio", { { "auto", "Auto (select based on the SoundBlaster type) (default)" }, { "cms", "CMS (Creative Music System / GameBlaster)" }, @@ -433,8 +623,9 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_sblaster_adlib_emu", - "Audio > Advanced > SoundBlaster Adlib Provider", - "Provider for the Adlib emulation. Default has good quality and low performance requirements.", + "Advanced > SoundBlaster Adlib Provider", NULL, + "Provider for the Adlib emulation. Default has good quality and low performance requirements.", NULL, + "Audio", { { "default", "Default" }, { "nuked", "High quality Nuked OPL3" }, @@ -443,12 +634,13 @@ static retro_core_option_definition option_defs[] = }, { "dosbox_pure_gus", - "Audio > Advanced > Enable Gravis Ultrasound (restart required)", + "Advanced > Enable Gravis Ultrasound (restart required)", NULL, "Enable Gravis Ultrasound emulation. Settings are fixed at port 0x240, IRQ 5, DMA 3." "\n" - "If the ULTRADIR variable needs to be different than the default 'C:\\ULTRASND' you need to issue 'SET ULTRADIR=...' in the command line or in a batch file." "\n\n", //end of Audio > Advanced section + "If the ULTRADIR variable needs to be different than the default 'C:\\ULTRASND' you need to issue 'SET ULTRADIR=...' in the command line or in a batch file." "\n\n", NULL, //end of Audio > Advanced section + "Audio", { { "false", "Off (default)" }, { "true", "On" } }, "false" }, - { NULL, NULL, NULL, {{0}}, NULL }, + { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL } }; diff --git a/dosbox_pure_libretro.cpp b/dosbox_pure_libretro.cpp index 076ca65b5..6a03631c2 100644 --- a/dosbox_pure_libretro.cpp +++ b/dosbox_pure_libretro.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Bernhard Schelling + * Copyright (C) 2020-2022 Bernhard Schelling * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,47 +23,26 @@ #include #include #include "include/dosbox.h" -#include "include/setup.h" -#include "include/video.h" -#include "include/programs.h" +#include "include/cpu.h" #include "include/control.h" -#include "include/pic.h" #include "include/render.h" -#include "include/shell.h" #include "include/keyboard.h" #include "include/mouse.h" #include "include/joystick.h" -#include "include/vga.h" -#include "include/bios.h" #include "include/bios_disk.h" #include "include/callback.h" -#include "include/regs.h" #include "include/dbp_serialize.h" +#include "include/dbp_threads.h" #include "src/ints/int10.h" #include "src/dos/drives.h" #include "keyb2joypad.h" #include "libretro-common/include/libretro.h" +#include "libretro-common/include/retro_timers.h" #include - -#ifndef DBP_THREADS_CLASSES -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#define THREAD_CC WINAPI -struct Thread { typedef DWORD RET_t; typedef RET_t (THREAD_CC *FUNC_t)(LPVOID); static void StartDetached(FUNC_t f, void* p = NULL) { HANDLE h = CreateThread(0,0,f,p,0,0); CloseHandle(h); } }; -struct Mutex { Mutex() : h(CreateMutexA(0,0,0)) {} ~Mutex() { CloseHandle(h); } __inline void Lock() { WaitForSingleObject(h,INFINITE); } __inline void Unlock() { ReleaseMutex(h); } private:HANDLE h;Mutex(const Mutex&);Mutex& operator=(const Mutex&);}; -static INLINE void sleep_ms(Bit32u ms) { Sleep(ms); } -#else -#include -#define THREAD_CC -struct Thread { typedef void* RET_t; typedef RET_t (THREAD_CC *FUNC_t)(void*); static void StartDetached(FUNC_t f, void* p = NULL) { pthread_t h = 0; pthread_create(&h, NULL, f, p); } }; -struct Mutex { Mutex() { pthread_mutex_init(&h,0); } ~Mutex() { pthread_mutex_destroy(&h); } __inline void Lock() { pthread_mutex_lock(&h); } __inline void Unlock() { pthread_mutex_unlock(&h); } private:pthread_mutex_t h;Mutex(const Mutex&);Mutex& operator=(const Mutex&);}; -static void sleep_ms(Bit32u ms) { timespec req, rem; req.tv_sec = ms / 1000; req.tv_nsec = (ms % 1000) * 1000000ULL; while (nanosleep(&req, &rem)) req = rem; } -#endif -#endif +#include +#include // RETROARCH AUDIO/VIDEO -#define DBP_DEFAULT_FPS 60.0f #ifdef GEKKO // From RetroArch/config.def.h #define DBP_DEFAULT_SAMPLERATE 44100.0 #define DBP_DEFAULT_SAMPLERATE_STRING "44100" @@ -77,61 +56,50 @@ static void sleep_ms(Bit32u ms) { timespec req, rem; req.tv_sec = ms / 1000; req static retro_system_av_info av_info; // DOSBOX STATE -enum DBP_State : Bit8u { DBPSTATE_BOOT, DBPSTATE_EXITED, DBPSTATE_SHUTDOWN, DBPSTATE_WAIT_FIRST_FRAME, DBPSTATE_WAIT_FIRST_EVENTS, DBPSTATE_WAIT_FIRST_RUN, DBPSTATE_RUNNING }; -enum DBP_SerializeMode : Bit8u { DBPSERIALIZE_DISABLED, DBPSERIALIZE_STATES, DBPSERIALIZE_REWIND }; -static Mutex dbp_audiomutex; -static Mutex dbp_lockthreadmtx[2]; +static enum DBP_State : Bit8u { DBPSTATE_BOOT, DBPSTATE_EXITED, DBPSTATE_SHUTDOWN, DBPSTATE_REBOOT, DBPSTATE_FIRST_FRAME, DBPSTATE_RUNNING } dbp_state; +static enum DBP_SerializeMode : Bit8u { DBPSERIALIZE_DISABLED, DBPSERIALIZE_STATES, DBPSERIALIZE_REWIND } dbp_serializemode; +static enum DBP_Latency : Bit8u { DBP_LATENCY_DEFAULT, DBP_LATENCY_LOW, DBP_LATENCY_VARIABLE } dbp_latency; +static bool dbp_game_running, dbp_pause_events, dbp_paused_midframe, dbp_frame_pending, dbp_force60fps, dbp_biosreboot, dbp_system_cached, dbp_system_scannable; +static char dbp_menu_time, dbp_conf_loading; +static float dbp_auto_target, dbp_targetrefreshrate; +static Bit32u dbp_lastmenuticks, dbp_framecount, dbp_serialize_time, dbp_last_throttle_mode; +static Semaphore semDoContinue, semDidPause; +static retro_throttle_state dbp_throttle; +static retro_time_t dbp_lastrun; static std::string dbp_crash_message; static std::string dbp_content_path; static std::string dbp_content_name; static retro_time_t dbp_boot_time; -static Bit32u dbp_lastmenuticks; -static Bit32u dbp_retro_activity; -static Bit32u dbp_wait_activity; -static Bit32u dbp_overload_count; -static Bit32u dbp_last_run; -static Bit32u dbp_min_sleep; -static DBP_State dbp_state; -static DBP_SerializeMode dbp_serializemode; -static char dbp_menu_time; -static bool dbp_timing_tamper; -static bool dbp_fast_forward; -static bool dbp_game_running; -static bool dbp_lockthreadstate; -static void dbp_calculate_min_sleep() { dbp_min_sleep = (uint32_t)(1000 / (render.src.fps > av_info.timing.fps ? render.src.fps : av_info.timing.fps)); } - -// DOSBOX GFX -enum { DBP_BUFFER_COUNT = 2 }; -static Bit8u dosbox_buffers[DBP_BUFFER_COUNT][SCALER_MAXWIDTH * SCALER_MAXHEIGHT * 4]; -static Bit8u dosbox_buffers_last; -static Bit32u RDOSGFXwidth; -static Bit32u RDOSGFXheight; -static Bit32u RDOSGFXpitch; -static float RDOSGFXratio; -static void(*dbp_gfx_intercept)(Bit8u* buf); - -// DOSBOX AUDIO -static uint8_t audioData[4096 * 4]; // mixer blocksize * 2 (96khz @ 30 fps max) -static retro_usec_t dbp_frame_time; +static size_t dbp_serializesize; + +// DOSBOX AUDIO/VIDEO +static Bit8u buffer_active; +static struct DBP_Buffer { Bit32u video[SCALER_MAXWIDTH * SCALER_MAXHEIGHT], width, height; float ratio; } dbp_buffers[2]; +enum { DBP_MAX_SAMPLES = 4096 }; // twice amount of mixer blocksize (96khz @ 30 fps max) +static int16_t dbp_audio[DBP_MAX_SAMPLES * 2]; // stereo +static double dbp_audio_remain; +static void(*dbp_gfx_intercept)(DBP_Buffer& buf); // DOSBOX DISC MANAGEMENT -static std::vector dbp_images; +struct DBP_Image { std::string path; bool mounted = false, was_mounted; char drive; }; +static std::vector dbp_images; +static std::vector dbp_osimages; +static StringToPointerHashMap dbp_vdisk_filter; static unsigned dbp_disk_image_index; -static bool dbp_disk_eject_state; -static char dbp_disk_mount_letter; +static bool dbp_legacy_save; // DOSBOX INPUT -#define DBP_JOY_ANALOG_RANGE 0x8000 // System analog stick range is -0x8000 to 0x8000 struct DBP_InputBind { - uint8_t port, device, index, id; + Bit8u port, device, index, id; const char* desc; - int16_t evt, meta, lastval; - }; + Bit16s evt, meta, lastval; +}; enum DBP_Port_Device { DBP_DEVICE_Disabled = RETRO_DEVICE_NONE, DBP_DEVICE_DefaultJoypad = RETRO_DEVICE_JOYPAD, + DBP_DEVICE_DefaultAnalog = RETRO_DEVICE_ANALOG, DBP_DEVICE_BindGenericKeyboard = RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0), DBP_DEVICE_MouseLeftAnalog = RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1), DBP_DEVICE_MouseRightAnalog = RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2), @@ -144,45 +112,43 @@ enum DBP_Port_Device DBP_DEVICE_KeyboardMouseLeftStick = RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 1), DBP_DEVICE_KeyboardMouseRightStick = RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_KEYBOARD, 2), }; -enum { DBP_MAX_PORTS = 8 }; +enum { DBP_MAX_PORTS = 8, DBP_JOY_ANALOG_RANGE = 0x8000 }; // analog stick range is -0x8000 to 0x8000 static const char* DBP_KBDNAMES[] = { "None","1","2","3","4","5","6","7","8","9","0","Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M", "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Esc","Tab","Backspace","Enter","Space","Left-Alt","Right-Alt","Left-Ctrl","Right-Ctrl","Left-Shift","Right-Shift", - "Caps-Lock","Scroll-Lock","Num-Lock","Grave","Minus","Equals","Backslash","Left-Bracket","Right-Bracket","Semicolon","Quote","Period","Comma","Slash","Extra-Lt-Gt", + "Caps-Lock","Scroll-Lock","Num-Lock","Grave `","Minus -","Equals =","Backslash","Left-Bracket [","Right-Bracket ]","Semicolon ;","Quote '","Period .","Comma ,","Slash /","Backslash \\", "Print-Screen","Pause","Insert","Home","Page-Up","Delete","End","Page-Down","Left","Up","Down","Right","NP-1","NP-2","NP-3","NP-4","NP-5","NP-6","NP-7","NP-8","NP-9","NP-0", - "NP-Divide","NP-Multiply","NP-Minus","NP-Plus","NP-Enter","NP-Period","" + "NP-Divide /","NP-Multiply *","NP-Minus -","NP-Plus +","NP-Enter","NP-Period .","" }; static std::vector dbp_input_binds; +static std::vector dbp_custom_mapping; static DBP_Port_Device dbp_port_devices[DBP_MAX_PORTS]; +static bool dbp_input_binds_modified; static bool dbp_bind_unused; static bool dbp_on_screen_keyboard; static bool dbp_mouse_input; +static bool dbp_optionsupdatecallback; +static bool dbp_last_hideadvanced; +static bool dbp_reboot_set64mem; +static char dbp_last_machine; +static char dbp_reboot_machine; static char dbp_auto_mapping_mode; -static int16_t dbp_bind_mousewheel; +static Bit8u dbp_alphablend_base; +static Bit16s dbp_bind_mousewheel; +static Bit16s dbp_content_year; static int dbp_joy_analog_deadzone = (int)(0.15f * (float)DBP_JOY_ANALOG_RANGE); static float dbp_mouse_speed = 1; static float dbp_mouse_speed_x = 1; -static Bit8u* dbp_auto_mapping; +static const Bit8u* dbp_auto_mapping; static const char* dbp_auto_mapping_names; static const char* dbp_auto_mapping_title; -#define DBP_GET_JOY_ANALOG_VALUE(VAL) ((VAL < -dbp_joy_analog_deadzone || VAL > dbp_joy_analog_deadzone) ? \ - ((float)((VAL > dbp_joy_analog_deadzone) ? \ - (VAL - dbp_joy_analog_deadzone) : \ - (VAL + dbp_joy_analog_deadzone)) / \ - (float)(DBP_JOY_ANALOG_RANGE - dbp_joy_analog_deadzone)) : \ - 0.0f) +#define DBP_GET_JOY_ANALOG_VALUE(V) ((V >= -dbp_joy_analog_deadzone && V <= dbp_joy_analog_deadzone) ? 0.0f : \ + ((float)((V > dbp_joy_analog_deadzone) ? (V - dbp_joy_analog_deadzone) : (V + dbp_joy_analog_deadzone)) / (float)(DBP_JOY_ANALOG_RANGE - dbp_joy_analog_deadzone))) // DOSBOX EVENTS -enum DBP_Event_Type +enum DBP_Event_Type : Bit8u { - DBPET_SET_VARIABLE, DBPET_MOUNT, - _DBPET_EXT_MAX, - - DBPET_UNMOUNT, DBPET_SET_FASTFORWARD, DBPET_LOCKTHREAD, DBPET_SHUTDOWN, - - _DBPET_INPUT_FIRST, - DBPET_JOY1X, DBPET_JOY1Y, DBPET_JOY2X, DBPET_JOY2Y, DBPET_JOYMX, DBPET_JOYMY, _DBPET_JOY_AXIS_MAX, @@ -193,33 +159,81 @@ enum DBP_Event_Type DBPET_JOY1DOWN, DBPET_JOY1UP, DBPET_JOY2DOWN, DBPET_JOY2UP, DBPET_KEYDOWN, DBPET_KEYUP, + DBPET_ONSCREENKEYBOARD, DBPET_ONSCREENKEYBOARDUP, - DBPET_ONSCREENKEYBOARD, - DBPET_AXIS_TO_KEY, + DBPET_AXISMAPPAIR, + DBPET_CHANGEMOUNTS, #define DBP_IS_RELEASE_EVENT(EVT) ((EVT) >= DBPET_MOUSEUP && (EVT & 1)) - #define DBP_KEYAXIS_MAKE(KEY1,KEY2) (((KEY1)<<7)|(KEY2)) - #define DBP_KEYAXIS_GET(VAL, META) ((VAL) < 0 ? (int16_t)((META)>>7) : (int16_t)((META)&127)) + #define DBP_MAPPAIR_MAKE(KEY1,KEY2) (Bit16s)(((KEY1)<<8)|(KEY2)) + #define DBP_MAPPAIR_GET(VAL,META) ((VAL) < 0 ? (Bit8u)(((Bit16u)(META))>>8) : (Bit8u)(((Bit16u)(META))&255)) + #define DBP_GETKEYDEVNAME(KEY) ((KEY) == KBD_NONE ? NULL : (KEY) < KBD_LAST ? DBPDEV_Keyboard : DBP_SpecialMappings[(KEY)-DBP_SPECIALMAPPINGS_KEY].dev) + #define DBP_GETKEYNAME(KEY) ((KEY) < KBD_LAST ? DBP_KBDNAMES[(KEY)] : DBP_SpecialMappings[(KEY)-DBP_SPECIALMAPPINGS_KEY].name) _DBPET_MAX }; -struct DBP_Event +//static const char* DBP_Event_Type_Names[] = { +// "JOY1X", "JOY1Y", "JOY2X", "JOY2Y", "JOYMX", "JOYMY", "JOY_AXIS_MAX", "MOUSEXY", "MOUSEDOWN", "MOUSEUP", "MOUSESETSPEED", "MOUSERESETSPEED", "JOYHATSETBIT", "JOYHATUNSETBIT", +// "JOY1DOWN", "JOY1UP", "JOY2DOWN", "JOY2UP", "KEYDOWN", "KEYUP", "ONSCREENKEYBOARD", "AXIS_TO_KEY", "CHANGEMOUNTS", "MAX" }; +static const char *DBPDEV_Keyboard = "Keyboard", *DBPDEV_Mouse = "Mouse", *DBPDEV_Joystick = "Joystick"; +static const struct DBP_SpecialMapping { int16_t evt, meta; const char* dev, *name; } DBP_SpecialMappings[] = { - struct Ext { Section* section; std::string cmd; }; - DBP_Event_Type type; - union { int val; int16_t xy[2]; Ext* ext; }; + { DBPET_JOYMY, -1, DBPDEV_Mouse, "Move Up" }, // 200 + { DBPET_JOYMY, 1, DBPDEV_Mouse, "Move Down" }, // 201 + { DBPET_JOYMX, -1, DBPDEV_Mouse, "Move Left" }, // 202 + { DBPET_JOYMX, 1, DBPDEV_Mouse, "Move Right" }, // 203 + { DBPET_MOUSEDOWN, 0, DBPDEV_Mouse, "Left Click" }, // 204 + { DBPET_MOUSEDOWN, 1, DBPDEV_Mouse, "Right Click" }, // 205 + { DBPET_MOUSEDOWN, 2, DBPDEV_Mouse, "Middle Click" }, // 206 + { DBPET_MOUSESETSPEED, 1, DBPDEV_Mouse, "Speed Up" }, // 207 + { DBPET_MOUSESETSPEED, -1, DBPDEV_Mouse, "Slow Down" }, // 208 + { DBPET_JOY1Y, -1, DBPDEV_Joystick, "Up" }, // 209 + { DBPET_JOY1Y, 1, DBPDEV_Joystick, "Down" }, // 210 + { DBPET_JOY1X, -1, DBPDEV_Joystick, "Left" }, // 211 + { DBPET_JOY1X, 1, DBPDEV_Joystick, "Right" }, // 212 + { DBPET_JOY1DOWN, 0, DBPDEV_Joystick, "Button 1" }, // 213 + { DBPET_JOY1DOWN, 1, DBPDEV_Joystick, "Button 2" }, // 214 + { DBPET_JOY2DOWN, 0, DBPDEV_Joystick, "Button 3" }, // 215 + { DBPET_JOY2DOWN, 1, DBPDEV_Joystick, "Button 4" }, // 216 + { DBPET_JOYHATSETBIT, 8, DBPDEV_Joystick, "Hat Up" }, // 217 + { DBPET_JOYHATSETBIT, 2, DBPDEV_Joystick, "Hat Down" }, // 218 + { DBPET_JOYHATSETBIT, 1, DBPDEV_Joystick, "Hat Left" }, // 219 + { DBPET_JOYHATSETBIT, 4, DBPDEV_Joystick, "Hat Right" }, // 220 + { DBPET_JOY2Y, -1, DBPDEV_Joystick, "Joy 2 Up" }, // 221 + { DBPET_JOY2Y, 1, DBPDEV_Joystick, "Joy 2 Down" }, // 222 + { DBPET_JOY2X, -1, DBPDEV_Joystick, "Joy 2 Left" }, // 223 + { DBPET_JOY2X, 1, DBPDEV_Joystick, "Joy 2 Right" }, // 224 }; +#define DBP_SPECIALMAPPING(key) DBP_SpecialMappings[(key)-DBP_SPECIALMAPPINGS_KEY] +enum { DBP_SPECIALMAPPINGS_KEY = 200, DBP_SPECIALMAPPINGS_MAX = 200+(sizeof(DBP_SpecialMappings)/sizeof(DBP_SpecialMappings[0])) }; enum { DBP_EVENT_QUEUE_SIZE = 256, DBP_DOWN_BY_KEYBOARD = 128 }; -static DBP_Event dbp_event_queue[DBP_EVENT_QUEUE_SIZE]; +static struct DBP_Event { DBP_Event_Type type; int val, val2; } dbp_event_queue[DBP_EVENT_QUEUE_SIZE]; static int dbp_event_queue_write_cursor; static int dbp_event_queue_read_cursor; static int dbp_keys_down_count; static unsigned char dbp_keys_down[KBD_LAST+1]; static unsigned short dbp_keymap_dos2retro[KBD_LAST]; static unsigned char dbp_keymap_retro2dos[RETROK_LAST]; -static void(*dbp_input_intercept)(DBP_Event& evnt); -static void DBP_QueueEvent(DBP_Event& evt) +static void(*dbp_input_intercept)(DBP_Event_Type, int, int); +static void DBP_QueueEvent(DBP_Event_Type type, int val = 0, int val2 = 0) { + switch (type) + { + case DBPET_KEYDOWN: + if (!val || ((++dbp_keys_down[val]) & 127) > 1) return; + dbp_keys_down_count++; + break; + case DBPET_KEYUP: + if (((dbp_keys_down[val]) & 127) == 0 || ((--dbp_keys_down[val]) & 127) > 0) return; + dbp_keys_down[val] = 0; + dbp_keys_down_count--; + break; + case DBPET_MOUSEDOWN: case DBPET_JOY1DOWN: case DBPET_JOY2DOWN: dbp_keys_down[KBD_LAST] = 1; break; + case DBPET_MOUSEUP: case DBPET_JOY1UP: case DBPET_JOY2UP: dbp_keys_down[KBD_LAST] = 0; break; + default:; + } + DBP_Event evt = { type, val, val2 }; + DBP_ASSERT(evt.type != DBPET_AXISMAPPAIR); int cur = dbp_event_queue_write_cursor, next = ((cur + 1) % DBP_EVENT_QUEUE_SIZE); if (next == dbp_event_queue_read_cursor) { @@ -233,68 +247,30 @@ static void DBP_QueueEvent(DBP_Event& evt) DBP_Event je = (j == i ? evt : dbp_event_queue[j]); if (je.type != ie.type) continue; else if (ie.type >= DBPET_JOY1X && ie.type <= _DBPET_JOY_AXIS_MAX) ie.val += je.val; - else if (ie.type == DBPET_MOUSEXY) { ie.xy[0] += je.xy[0]; ie.xy[1] += je.xy[1]; } - else if (ie.ext != je.ext) continue; + else if (ie.type == DBPET_MOUSEXY) { ie.val += je.val; ie.val2 += je.val2; } cur = j; goto remove_element_at_cur; } } // Found nothing to remove, just blindly remove the last element - if (1) - { - //static const char* DBPETNAMES[] = { "SET_VARIABLE","MOUNT","_EXT_MAX","UNMOUNT","SET_FASTFORWARD","LOCKTHREAD","SHUTDOWN","_INPUT_FIRST","JOY1X","JOY1Y","JOY2X","JOY2Y","JOYMX","JOYMY","_JOY_AXIS_MAX","MOUSEXY","MOUSEDOWN","MOUSEUP","MOUSESETSPEED","MOUSERESETSPEED","JOYHATSETBIT","JOYHATUNSETBIT","JOY1DOWN","JOY1UP","JOY2DOWN","JOY2UP","KEYDOWN","KEYUP","AXIS_TO_KEY","ONSCREENKEYBOARD","_MAX" }; - //for (next = cur; (cur = ((cur + DBP_EVENT_QUEUE_SIZE - 1) % DBP_EVENT_QUEUE_SIZE)) != next;) - //{ - // fprintf(stderr, "EVT [%3d] - %20s (%2d) - %d\n", cur, DBPETNAMES[dbp_event_queue[cur].type], dbp_event_queue[cur].type, dbp_event_queue[cur].val); - //} - //fprintf(stderr, "EVT [ADD] - %20s (%2d) - %d\n", DBPETNAMES[evt.type], evt.type, evt.val); - DBP_ASSERT(false); - } + DBP_ASSERT(false); + //if (1) + //{ + // for (next = cur; (cur = ((cur + DBP_EVENT_QUEUE_SIZE - 1) % DBP_EVENT_QUEUE_SIZE)) != next;) + // { + // fprintf(stderr, "EVT [%3d] - %20s (%2d) - %d\n", cur, DBP_Event_Type_Names[dbp_event_queue[cur].type], dbp_event_queue[cur].type, dbp_event_queue[cur].val); + // } + // fprintf(stderr, "EVT [ADD] - %20s (%2d) - %d\n", DBP_Event_Type_Names[evt.type], evt.type, evt.val); + //} // remove element at cur and shift everything up to next one down remove_element_at_cur: next = ((next + DBP_EVENT_QUEUE_SIZE - 1) % DBP_EVENT_QUEUE_SIZE); - if (dbp_event_queue[cur].type <= _DBPET_EXT_MAX) { delete dbp_event_queue[cur].ext; dbp_event_queue[cur].ext = NULL; } for (int n = cur; (n = ((n + 1) % DBP_EVENT_QUEUE_SIZE)) != next; cur = n) dbp_event_queue[cur] = dbp_event_queue[n]; } dbp_event_queue[cur] = evt; dbp_event_queue_write_cursor = next; } -static void DBP_QueueEvent(DBP_Event_Type type, int val) -{ - switch (type) - { - case DBPET_KEYDOWN: - if (!val || ((++dbp_keys_down[val]) & 127) > 1) return; - dbp_keys_down_count++; - break; - case DBPET_KEYUP: - if (((dbp_keys_down[val]) & 127) == 0 || ((--dbp_keys_down[val]) & 127) > 0) return; - dbp_keys_down[val] = 0; - dbp_keys_down_count--; - break; - case DBPET_MOUSEDOWN: case DBPET_JOY1DOWN: case DBPET_JOY2DOWN: dbp_keys_down[KBD_LAST] = 1; break; - case DBPET_MOUSEUP: case DBPET_JOY1UP: case DBPET_JOY2UP: dbp_keys_down[KBD_LAST] = 0; break; - default:; - } - DBP_Event evt = { type, val }; - DBP_QueueEvent(evt); -} -static void DBP_QueueEvent(DBP_Event_Type type, int16_t x, int16_t y) -{ - DBP_Event evt = { type }; - evt.xy[0] = x; - evt.xy[1] = y; - DBP_QueueEvent(evt); -} -static void DBP_QueueEvent(DBP_Event_Type type, std::string& swappable_cmd, Section* section = NULL) -{ - DBP_Event evt = { type }; - evt.ext = new DBP_Event::Ext(); - evt.ext->section = section; - std::swap(evt.ext->cmd, swappable_cmd); - DBP_QueueEvent(evt); -} // LIBRETRO CALLBACKS static void retro_fallback_log(enum retro_log_level level, const char *fmt, ...) @@ -305,14 +281,30 @@ static void retro_fallback_log(enum retro_log_level level, const char *fmt, ...) vfprintf(stderr, fmt, va); va_end(va); } +#ifdef ANDROID +extern "C" int __android_log_write(int prio, const char *tag, const char *text); +static void AndroidLogFallback(int level, const char *fmt, ...) { static char buf[8192]; va_list va; va_start(va, fmt); vsprintf(buf, fmt, va); va_end(va); __android_log_write(2, "DBP", buf); } +#endif +static retro_time_t time_in_microseconds() +{ + return std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); +} static retro_log_printf_t log_cb = retro_fallback_log; -static retro_perf_get_time_usec_t time_cb; +static retro_perf_get_time_usec_t time_cb = time_in_microseconds; static retro_environment_t environ_cb; static retro_video_refresh_t video_cb; static retro_audio_sample_batch_t audio_batch_cb; static retro_input_poll_t input_poll_cb; static retro_input_state_t input_state_cb; +// PERF OVERLAY +static enum DBP_Perf : Bit8u { DBP_PERF_NONE, DBP_PERF_SIMPLE, DBP_PERF_DETAILED } dbp_perf; +static Bit32u dbp_perf_uniquedraw, dbp_perf_count, dbp_perf_emutime, dbp_perf_totaltime; +//#define DBP_ENABLE_WAITSTATS +#ifdef DBP_ENABLE_WAITSTATS +static Bit32u dbp_wait_pause, dbp_wait_finish, dbp_wait_paused, dbp_wait_continue; +#endif + // PERF FPS COUNTERS //#define DBP_ENABLE_FPS_COUNTERS #ifdef DBP_ENABLE_FPS_COUNTERS @@ -322,7 +314,7 @@ static Bit32u dbp_lastfpstick, dbp_fpscount_retro, dbp_fpscount_gfxstart, dbp_fp #define DBP_FPSCOUNT(DBP_FPSCOUNT_VARNAME) #endif -static void retro_notify(unsigned duration, retro_log_level lvl, char const* format,...) +static void retro_notify(int duration, retro_log_level lvl, char const* format,...) { static char buf[1024]; va_list ap; @@ -331,92 +323,359 @@ static void retro_notify(unsigned duration, retro_log_level lvl, char const* for va_end(ap); retro_message_ext msg; msg.msg = buf; - msg.duration = (duration ? duration : 4000); + msg.duration = (duration ? (unsigned)abs(duration) : 4000); msg.priority = 0; msg.level = lvl; - msg.target = RETRO_MESSAGE_TARGET_ALL; - msg.type = RETRO_MESSAGE_TYPE_NOTIFICATION; - if (!environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE_EXT, &msg)) log_cb(RETRO_LOG_ERROR, "%s", buf); + msg.target = (duration < 0 ? RETRO_MESSAGE_TARGET_OSD : RETRO_MESSAGE_TARGET_ALL); + msg.type = (duration < 0 ? RETRO_MESSAGE_TYPE_STATUS : RETRO_MESSAGE_TYPE_NOTIFICATION); + if (!environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE_EXT, &msg) && duration >= 0) log_cb(RETRO_LOG_ERROR, "%s", buf); +} + +static const char* retro_get_variable(const char* key, const char* default_value) +{ + retro_variable var = { key }; + return (environ_cb && environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value ? var.value : default_value); } // ------------------------------------------------------------------------------ static void DBP_StartOnScreenKeyboard(); +static void DBP_StartMapper(); void DBP_DOSBOX_ForceShutdown(const Bitu = 0); -void DBP_DOSBOX_ResetTickTimer(); -void DBP_DOSBOX_Unlock(bool unlock, int start_frame_skip = 0); void DBP_CPU_ModifyCycles(const char* val); void DBP_KEYBOARD_ReleaseKeys(); void DBP_CGA_SetModelAndComposite(bool new_model, Bitu new_comp_mode); void DBP_Hercules_SetPalette(Bit8u pal); +void DBP_SetMountSwappingRequested(); Bit32u DBP_MIXER_GetFrequency(); Bit32u DBP_MIXER_DoneSamplesCount(); void MIXER_CallBack(void *userdata, uint8_t *stream, int len); bool MSCDEX_HasDrive(char driveLetter); int MSCDEX_AddDrive(char driveLetter, const char* physicalPath, Bit8u& subUnit); int MSCDEX_RemoveDrive(char driveLetter); +void IDE_RefreshCDROMs(); +void IDE_SetupControllers(char force_cd_drive_letter = 0); bool MIDI_TSF_SwitchSF2(const char*); bool MIDI_Retro_HasOutputIssue(); -void DBP_Crash(const char* msg) +enum DBP_ThreadCtlMode { TCM_PAUSE_FRAME, TCM_ON_PAUSE_FRAME, TCM_RESUME_FRAME, TCM_FINISH_FRAME, TCM_ON_FINISH_FRAME, TCM_NEXT_FRAME, TCM_SHUTDOWN, TCM_ON_SHUTDOWN }; +static void DBP_ThreadControl(DBP_ThreadCtlMode m) { - log_cb(RETRO_LOG_WARN, "[DOSBOX] Crash: %s\n", msg); - dbp_crash_message = msg; - DBP_DOSBOX_ForceShutdown(); + //#define TCMLOG(x, y)// printf("[%10u] [THREAD CONTROL] %20s %25s - STATE: %d - PENDING: %d - PAUSEEVT: %d - MIDFRAME: %d\n", (unsigned)(time_cb() - dbp_boot_time), x, y, (int)dbp_state, dbp_frame_pending, dbp_pause_events, dbp_paused_midframe); + DBP_ASSERT(dbp_state != DBPSTATE_BOOT && dbp_state != DBPSTATE_SHUTDOWN); + switch (m) + { + case TCM_PAUSE_FRAME: + if (!dbp_frame_pending || dbp_pause_events) return; + dbp_pause_events = true; + #ifdef DBP_ENABLE_WAITSTATS + { retro_time_t t = time_cb(); semDidPause.Wait(); dbp_wait_pause += (Bit32u)(time_cb() - t); } + #else + semDidPause.Wait(); + #endif + dbp_pause_events = dbp_frame_pending = dbp_paused_midframe; + return; + case TCM_ON_PAUSE_FRAME: + DBP_ASSERT(dbp_pause_events && !dbp_paused_midframe); + dbp_paused_midframe = true; + semDidPause.Post(); + #ifdef DBP_ENABLE_WAITSTATS + { retro_time_t t = time_cb(); semDoContinue.Wait(); dbp_wait_paused += (Bit32u)(time_cb() - t); } + #else + semDoContinue.Wait(); + #endif + dbp_paused_midframe = false; + return; + case TCM_RESUME_FRAME: + if (!dbp_frame_pending) return; + DBP_ASSERT(dbp_pause_events); + dbp_pause_events = false; + semDoContinue.Post(); + return; + case TCM_FINISH_FRAME: + if (!dbp_frame_pending) return; + if (dbp_pause_events) DBP_ThreadControl(TCM_RESUME_FRAME); + #ifdef DBP_ENABLE_WAITSTATS + { retro_time_t t = time_cb(); semDidPause.Wait(); dbp_wait_finish += (Bit32u)(time_cb() - t); } + #else + semDidPause.Wait(); + #endif + DBP_ASSERT(!dbp_paused_midframe); + dbp_frame_pending = false; + return; + case TCM_ON_FINISH_FRAME: + semDidPause.Post(); + #ifdef DBP_ENABLE_WAITSTATS + { retro_time_t t = time_cb(); semDoContinue.Wait(); dbp_wait_continue += (Bit32u)(time_cb() - t); } + #else + semDoContinue.Wait(); + #endif + return; + case TCM_NEXT_FRAME: + DBP_ASSERT(!dbp_frame_pending); + if (dbp_state == DBPSTATE_EXITED) return; + dbp_frame_pending = true; + semDoContinue.Post(); + return; + case TCM_SHUTDOWN: + if (dbp_frame_pending) + { + dbp_pause_events = true; + semDidPause.Wait(); + dbp_pause_events = dbp_frame_pending = false; + } + if (dbp_state == DBPSTATE_EXITED) return; + DBP_DOSBOX_ForceShutdown(); + do + { + semDoContinue.Post(); + semDidPause.Wait(); + } while (dbp_state != DBPSTATE_EXITED); + return; + case TCM_ON_SHUTDOWN: + dbp_state = DBPSTATE_EXITED; + semDidPause.Post(); + return; + } +} + +void DBP_SetRealModeCycles() +{ + if (cpu.pmode || CPU_CycleAutoAdjust || !(CPU_AutoDetermineMode & CPU_AUTODETERMINE_CYCLES) || render.frameskip.max > 1) return; + + static const Bit16u Cycles1981to1993[1+1993-1981] = { 900, 1400, 1800, 2300, 2800, 3800, 4800, 6300, 7800, 14000, 23800, 27000, 44000 }; + int year = (dbp_game_running ? dbp_content_year : 0); + CPU_CycleMax = + (year <= 1970 ? 3000 : // Unknown year, dosbox default + (year < 1981 ? 500 : // Very early 8086/8088 CPU + (year > 1993 ? 60000 : // Pentium 90 MHz + Cycles1981to1993[year - 1981]))); // Matching speed for year + + // Switch to dynamic core for newer real mode games + if (CPU_CycleMax >= 8192 && (CPU_AutoDetermineMode & CPU_AUTODETERMINE_CORE)) + { + #if (C_DYNAMIC_X86) + if (cpudecoder != CPU_Core_Dyn_X86_Run) { void CPU_Core_Dyn_X86_Cache_Init(bool); CPU_Core_Dyn_X86_Cache_Init(true); cpudecoder = CPU_Core_Dyn_X86_Run; } + #elif (C_DYNREC) + if (cpudecoder != CPU_Core_Dynrec_Run) { void CPU_Core_Dynrec_Cache_Init(bool); CPU_Core_Dynrec_Cache_Init(true); cpudecoder = CPU_Core_Dynrec_Run; } + #endif + } +} + +static void DBP_UnlockSpeed(bool unlock, int start_frame_skip = 0, bool skip_once = false) +{ + static Bit32s old_max; + static bool old_pmode; + if (unlock) + { + old_max = CPU_CycleMax; + old_pmode = cpu.pmode; + if (dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD && dbp_throttle.rate && dbp_state == DBPSTATE_RUNNING && !skip_once) + { + // If fast forwarding at a desired rate, apply custom frameskip and max cycle rules + render.frameskip.max = (int)(dbp_throttle.rate / av_info.timing.fps * 1.5f + .4f); + CPU_CycleMax = (Bit32s)(old_max / (CPU_CycleAutoAdjust ? dbp_throttle.rate / av_info.timing.fps : 1.0f)); + } + else + { + render.frameskip.max = start_frame_skip; + CPU_CycleMax = (cpu.pmode ? 30000 : 10000); + } + if (skip_once) + { + render.updating = false; //avoid immediate call to GFX_EndUpdate without skipping frames yet + dbp_last_throttle_mode = 99; //special mode checked in GFX_EndUpdate + } + } + else if (old_max) + { + // If we switched to protected mode while locked (likely at startup) with auto adjust cycles on, choose a reasonable base rate + CPU_CycleMax = (old_pmode == cpu.pmode || !CPU_CycleAutoAdjust ? old_max : 20000); + render.frameskip.max = old_max = 0; + DBP_SetRealModeCycles(); + } } -static Thread::RET_t THREAD_CC DBP_RunThreadDosBox(void*) +static bool DBP_NeedFrameSkip(bool in_emulation) { - dbp_lockthreadmtx[1].Lock(); - control->StartUp(); - dbp_lockthreadmtx[1].Unlock(); - dbp_state = DBPSTATE_EXITED; - return 0; + if ((in_emulation ? (dbp_throttle.rate > render.src.fps - 1) : (render.src.fps > dbp_throttle.rate - 1)) + || dbp_throttle.rate < 10 || dbp_latency == DBP_LATENCY_VARIABLE + || dbp_throttle.mode == RETRO_THROTTLE_FRAME_STEPPING || dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD + || dbp_throttle.mode == RETRO_THROTTLE_SLOW_MOTION || dbp_throttle.mode == RETRO_THROTTLE_REWINDING) return false; + static float accum; + accum += (in_emulation ? (render.src.fps - dbp_throttle.rate) : (dbp_throttle.rate - render.src.fps)); + if (accum < dbp_throttle.rate) return false; + //log_cb(RETRO_LOG_INFO, "%s AT %u\n", (in_emulation ? "[GFX_EndUpdate] EMULATING TWO FRAMES" : "[retro_run] SKIP EMULATING FRAME"), dbp_framecount); + accum -= dbp_throttle.rate; + return true; } -static void DBP_AppendImage(const char* entry, bool sorted) +static unsigned DBP_AppendImage(const char* entry, bool sorted) { // insert into image list ordered alphabetically, ignore already known images - size_t insert_index; - for (insert_index = 0; insert_index != dbp_images.size(); insert_index++) + unsigned insert_index; + for (insert_index = 0; insert_index != (unsigned)dbp_images.size(); insert_index++) { - if (dbp_images[insert_index] == entry) return; - if (sorted && dbp_images[insert_index] > entry) { break; } + if (dbp_images[insert_index].path == entry) return insert_index; + if (sorted && dbp_images[insert_index].path > entry) { break; } } - dbp_images.insert(dbp_images.begin() + insert_index, entry); + dbp_images.insert(dbp_images.begin() + insert_index, DBP_Image()); + dbp_images[insert_index].path = entry; + return insert_index; } -static DOS_Drive* DBP_Mount(const char* path, bool is_boot, bool set_content_name) +static void DBP_GetImageLabel(unsigned index, std::string& out) { - const char *last_slash = strrchr(path, '/'), *last_bslash = strrchr(path, '\\'); - const char *path_file = (last_slash && last_slash > last_bslash ? last_slash + 1 : (last_bslash ? last_bslash + 1 : path)); + const char* img = dbp_images[index].path.c_str(); + char longname[256]; + if (img[0] == '$' && Drives[img[1]-'A'] && Drives[img[1]-'A']->GetLongFileName(img+4, longname)) + img = longname; + const char *lastSlash = strrchr(img, '/'), *lastBackSlash = strrchr(img, '\\'); + const char *basePath = (lastSlash && lastSlash > lastBackSlash ? lastSlash + 1 : (lastBackSlash ? lastBackSlash + 1 : img)); + out = basePath; +} + +static bool DBP_ExtractPathInfo(const char* path, const char ** out_path_file = NULL, size_t* out_namelen = NULL, const char ** out_ext = NULL, const char ** out_fragment = NULL, char* out_letter = NULL) +{ + if (!path || !*path) return false; + // Skip any slashes at the very end of path, then find the next slash as the start of the loaded file/directory name + const char *path_end = path + strlen(path), *path_file = path_end; + for (bool had_other = false; path_file > path; path_file--) + { + bool is_slash = (path_file[-1] == '/' || path_file[-1] == '\\'); + if (is_slash) { if (had_other) break; path_end = path_file - 1; } else had_other = true; + } const char *ext = strrchr(path_file, '.'); - if (!ext) return NULL; + if (ext) ext++; else ext = path_end; const char *fragment = strrchr(path_file, '#'); if (fragment && ext > fragment) // check if 'FOO.ZIP#BAR.EXE' { const char* real_ext = fragment - (fragment - 3 > path_file && fragment[-3] == '.' ? 3 : 4); - if (real_ext > path_file && *real_ext == '.') ext = real_ext; + if (real_ext > path_file && *real_ext == '.') ext = real_ext+1; else fragment = NULL; } // A drive letter can be specified either by naming the mount file '..' or by loading a path with an added '#' suffix. char letter = 0; const char *p_fra_drive = (fragment && fragment[1] && !fragment[2] ? fragment + 1 : NULL); - const char *p_dot_drive = (ext - path > 2 && ext[-2] == '.' ? ext - 1 : NULL); + const char *p_dot_drive = (ext - path_file > 3 && ext[-3] == '.' && !p_fra_drive ? ext - 2 : NULL); if (p_fra_drive && (*p_fra_drive >= 'A' && *p_fra_drive <= 'Z')) letter = *p_fra_drive; else if (p_fra_drive && (*p_fra_drive >= 'a' && *p_fra_drive <= 'z')) letter = *p_fra_drive - 0x20; else if (p_dot_drive && (*p_dot_drive >= 'A' && *p_dot_drive <= 'Z')) letter = *p_dot_drive; else if (p_dot_drive && (*p_dot_drive >= 'a' && *p_dot_drive <= 'z')) letter = *p_dot_drive - 0x20; - if (!is_boot && dbp_disk_mount_letter) letter = dbp_disk_mount_letter; - if (letter && Drives[letter-'A']) { DBP_ASSERT(0); return NULL; } + else p_dot_drive = NULL; - if (set_content_name) + if (out_path_file) *out_path_file = path_file; + if (out_namelen) *out_namelen = (p_dot_drive ? p_dot_drive : ext) - (ext[-1] == '.' ? 1 : 0) - path_file; + if (out_ext) *out_ext = ext; + if (out_fragment) *out_fragment = fragment; + if (out_letter) *out_letter = letter; + return true; +} + +static bool DBP_IsMounted(char drive) +{ + DBP_ASSERT(drive >= 'A' && drive <= 'Z'); + return Drives[drive-'A'] || (drive < 'A'+MAX_DISK_IMAGES && imageDiskList[drive-'A']); +} + +static void DBP_Unmount(char drive) +{ + DBP_ASSERT(drive >= 'A' && drive <= 'Z'); + if (Drives[drive-'A'] && Drives[drive-'A']->UnMount() != 0) { DBP_ASSERT(false); return; } + Drives[drive-'A'] = NULL; + MSCDEX_RemoveDrive(drive); + if (drive < 'A'+MAX_DISK_IMAGES) + if (imageDisk*& dsk = imageDiskList[drive-'A']) + { delete dsk; dsk = NULL; } + IDE_RefreshCDROMs(); + mem_writeb(Real2Phys(dos.tables.mediaid)+(drive-'A')*9,0); + for (DBP_Image& i : dbp_images) + if (i.mounted && i.drive == drive) + i.mounted = false; +} + +enum DBP_SaveFileType { SFT_GAMESAVE, SFT_VIRTUALDISK, _SFT_LAST_SAVE_DIRECTORY, SFT_SYSTEMDIR, SFT_NEWOSIMAGE }; +static std::string DBP_GetSaveFile(DBP_SaveFileType type, const char** out_filename = NULL, Bit32u* out_diskhash = NULL) +{ + std::string res; + const char *env_dir = NULL; + if (environ_cb((type < _SFT_LAST_SAVE_DIRECTORY ? RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY : RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY), &env_dir) && env_dir) + res.assign(env_dir) += CROSS_FILESPLIT; + size_t dir_len = res.size(); + if (type < _SFT_LAST_SAVE_DIRECTORY) { - dbp_content_path = path; - dbp_content_name = std::string(path_file, (p_dot_drive ? p_dot_drive - 1 : ext) - path_file); + res.append(dbp_content_name.empty() ? "DOSBox-pure" : dbp_content_name.c_str()); + if (type == SFT_GAMESAVE) + { + if (FILE* fSave = fopen_wrap(res.append(".pure.zip").c_str(), "rb")) { fclose(fSave); } // new save exists! + else if (FILE* fSave = fopen_wrap(res.replace(res.length()-8, 3, "sav", 3).c_str(), "rb")) { dbp_legacy_save = true; fclose(fSave); } + else res.replace(res.length()-8, 3, "pur", 3); // use new save + } + else if (type == SFT_VIRTUALDISK) + { + if (!dbp_vdisk_filter.Len()) + { + dbp_vdisk_filter.Put("AUTOBOOT.DBP", (void*)(size_t)true); + dbp_vdisk_filter.Put("PADMAP.DBP", (void*)(size_t)true); + dbp_vdisk_filter.Put("DOSBOX~1.CON", (void*)(size_t)true); + dbp_vdisk_filter.Put("DOSBOX.CON", (void*)(size_t)true); + for (const DBP_Image& i : dbp_images) if (i.path[0] == '$' && i.path[1] == 'C') + dbp_vdisk_filter.Put(&i.path[4], (void*)(size_t)true); + } + struct Local { static void FileHash(const char* path, bool, Bit32u size, Bit16u date, Bit16u time, Bit8u attr, Bitu data) + { + size_t pathlen = strlen(path); + if (pathlen >= 2 && path[pathlen-1] == '.' && (path[pathlen-2] == '.' || path[pathlen-2] == '\\')) return; // skip . and .. + if (dbp_vdisk_filter.Get(path)) return; + Bit32u& hash = *(Bit32u*)data; + Bit8u arr[] = { (Bit8u)(size>>24), (Bit8u)(size>>16), (Bit8u)(size>>8), (Bit8u)(size), (Bit8u)(date>>8), (Bit8u)(date), (Bit8u)(time>>8), (Bit8u)(time), attr }; + hash = DriveCalculateCRC32(arr, sizeof(arr), DriveCalculateCRC32((const Bit8u*)path, pathlen, hash)); + }}; + Bit32u hash = (Bit32u)(0x11111111 - 1024) + (Bit32u)atoi(retro_get_variable("dosbox_pure_bootos_dfreespace", "1024")); + DriveFileIterator(Drives['C'-'A'], Local::FileHash, (Bitu)&hash); + res.resize(res.size() + 32); + res.resize(res.size() - 32 + sprintf(&res[res.size() - 32], (hash == 0x11111111 ? ".sav" : "-%08X.sav"), hash)); + if (out_diskhash) *out_diskhash = hash; + } + } + else if (type == SFT_NEWOSIMAGE) + { + res.append(!dbp_content_name.empty() ? dbp_content_name.c_str() : "Installed OS").append(".img"); + size_t num = 1, baselen = res.size() - 4; + while (FILE* f = fopen_wrap(res.c_str(), "rb")) + { + fclose(f); + res.resize(baselen + 16); + res.resize(baselen + sprintf(&res[baselen], " (%d).img", (int)++num)); + } + } + if (out_filename) *out_filename = res.c_str() + dir_len; + return res; +} + +static void DBP_SetDriveLabelFromContentPath(DOS_Drive* drive, const char *path, char letter = 'C', const char *path_file = NULL, const char *ext = NULL, bool forceAppendExtension = false) +{ + // Use content filename as drive label, cut off at file extension, the first occurence of a ( or [ character or right white space. + if (!path_file && !DBP_ExtractPathInfo(path, &path_file, NULL, &ext)) return; + char lbl[11+1], *lblend = lbl + (ext - path_file > 11 ? 11 : ext - (*ext ? 1 : 0) - path_file); + memcpy(lbl, path_file, lblend - lbl); + for (char* c = lblend; c > lbl; c--) { if (c == lblend || *c == '(' || *c == '[' || (*c <= ' ' && !c[1])) *c = '\0'; } + if (forceAppendExtension && ext && ext[0]) + { + lblend = (lblend > lbl + 11 - 4 ? lbl + 11 - 4 : lblend); + *lblend = '-'; + strcpy(lblend + 1, ext); } + drive->label.SetLabel(lbl, (letter > 'C'), true); +} + +static DOS_Drive* DBP_Mount(unsigned disk_image_index = 0, bool unmount_existing = false, char remount_letter = 0, const char* boot = NULL) +{ + const char *path = (boot ? boot : dbp_images[disk_image_index].path.c_str()), *path_file, *ext, *fragment; char letter; + if (!DBP_ExtractPathInfo(path, &path_file, NULL, &ext, &fragment, &letter)) return NULL; + if (remount_letter) letter = remount_letter; std::string path_no_fragment; if (fragment) @@ -427,95 +686,108 @@ static DOS_Drive* DBP_Mount(const char* path, bool is_boot, bool set_content_nam path = path_no_fragment.c_str(); } - DOS_Drive* res = NULL; - Bit8u res_media_byte = 0; - if (!strcasecmp(ext, ".zip") || !strcasecmp(ext, ".dosz")) + DOS_Drive* drive = NULL; + imageDisk* disk = NULL; + CDROM_Interface* cdrom = NULL; + Bit8u media_byte = 0; + + if (!strcasecmp(ext, "ZIP") || !strcasecmp(ext, "DOSZ")) { + if (!letter) letter = (boot ? 'C' : 'D'); + if (!unmount_existing && Drives[letter-'A']) return NULL; FILE* zip_file_h = fopen_wrap(path, "rb"); if (!zip_file_h) { - if (!is_boot) dbp_disk_eject_state = true; - retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s", "ZIP", path); + retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", "ZIP", path, ""); return NULL; } - res = new zipDrive(new rawFile(zip_file_h, false), true); - - // Use zip filename as drive label, cut off at file extension, the first occurence of a ( or [ character or right white space. - char lbl[11+1], *lblend = lbl + (ext - path_file > 11 ? 11 : ext - path_file); - memcpy(lbl, path_file, lblend - lbl); - for (char* c = lblend; c > lbl; c--) { if (c == lblend || *c == '(' || *c == '[' || (*c <= ' ' && !c[1])) *c = '\0'; } - res->label.SetLabel(lbl, !(is_boot && (!letter || letter == 'C')), true); - - if (is_boot && (!letter || letter == 'C')) return res; - if (!letter) letter = 'D'; - if (letter > 'C') - { - Bit8u subUnit; - MSCDEX_AddDrive(letter, "", subUnit); - } - else if (letter < 'C') - { - res_media_byte = 0xF0; //floppy - } + drive = new zipDrive(new rawFile(zip_file_h, false), dbp_legacy_save); + DBP_SetDriveLabelFromContentPath(drive, path, letter, path_file, ext); + if (boot && letter == 'C') return drive; } - else if (!strcasecmp(ext, ".img") || !strcasecmp(ext, ".ima") || !strcasecmp(ext, ".vhd")) + else if (!strcasecmp(ext, "IMG") || !strcasecmp(ext, "IMA") || !strcasecmp(ext, "VHD") || !strcasecmp(ext, "JRC") || !strcasecmp(ext, "TC")) { - fatDrive* fat = new fatDrive(path, 512, 63, 16, 0, 0); - if (!fat->loadedDisk || !fat->created_successfully) + fatDrive* fat = new fatDrive(path, 512, 0, 0, 0, 0); + if (!fat->loadedDisk || (!fat->created_successfully && letter >= 'A'+MAX_DISK_IMAGES)) { + FAT_TRY_ISO: delete fat; goto MOUNT_ISO; } - bool is_hdd = fat->loadedDisk->hardDrive; - if (is_boot && is_hdd && (!letter || letter == 'C')) return fat; - if (!letter) letter = (is_hdd ? 'D' : 'A'); - - // Copied behavior from IMGMOUNT::Run, force obtaining the label and saving it in label - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - dta.SetupSearch(255, DOS_ATTR_VOLUME, (char*)"*.*"); - fat->FindFirst((char*)"", dta); - dos.dta(save_dta); - - // Register with BIOS/CMOS - if (letter-'A' < MAX_DISK_IMAGES) + else if (!fat->created_successfully) { - if (imageDiskList[letter-'A']) { DBP_ASSERT(0); delete imageDiskList[letter-'A']; } - imageDiskList[letter-'A'] = fat->loadedDisk; + // Check if ISO (based on CDROM_Interface_Image::LoadIsoFile/CDROM_Interface_Image::CanReadPVD) + static const Bit32u pvdoffsets[] = { 32768, 32768+8, 37400, 37400+8, 37648, 37656, 37656+8 }; + for (Bit32u pvdoffset : pvdoffsets) + { + Bit8u pvd[8]; + if (fat->loadedDisk->Read_Raw(pvd, pvdoffset, 8) == 8 && (!memcmp(pvd, "\1CD001\1", 7) || !memcmp(pvd, "\1CDROM\1", 7))) + goto FAT_TRY_ISO; + } + // Neither FAT nor ISO, just register with BIOS/CMOS for raw sector access and set media table byte + disk = fat->loadedDisk; + fat->loadedDisk = NULL; // don't want it deleted by ~fatDrive + delete fat; } - - // Because fatDrive::GetMediaByte is different than all others... - res_media_byte = (is_hdd ? 0xF8 : 0xF0); - res = fat; + else + { + // Copied behavior from IMGMOUNT::Run, force obtaining the label and saving it in label + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + dta.SetupSearch(255, DOS_ATTR_VOLUME, (char*)"*.*"); + fat->FindFirst((char*)"", dta); + dos.dta(save_dta); + + drive = fat; + disk = fat->loadedDisk; + + if (boot && disk->hardDrive && (!letter || letter == 'C')) + { + // also register with BIOS/CMOS to make this image bootable (make sure it's its own instance as we pass this one to be owned by unionDrive) + fatDrive* fat2 = new fatDrive(path, 512, 0, 0, 0, 0); + imageDiskList['C'-'A'] = fat2->loadedDisk; + fat2->loadedDisk = NULL; // don't want it deleted by ~fatDrive + delete fat2; + return fat; + } + } + if (!letter) letter = (disk->hardDrive ? 'D' : 'A'); + media_byte = (disk->hardDrive ? 0xF8 : (disk->active ? disk->GetBiosType() : 0)); } - else if (!strcasecmp(ext, ".iso") || !strcasecmp(ext, ".cue") || !strcasecmp(ext, ".ins")) + else if (!strcasecmp(ext, "ISO") || !strcasecmp(ext, "CUE") || !strcasecmp(ext, "INS")) { MOUNT_ISO: + if (letter < 'D') letter = 'D'; + if (!unmount_existing && Drives[letter-'A']) return NULL; + if (DBP_IsMounted(letter)) DBP_Unmount(letter); // needs to be done before constructing isoDrive as it registers itself with MSCDEX overwriting the current drives registration int error = -1; - if (!letter) letter = 'D'; - res = new isoDrive(letter, path, 0xF8, error); + drive = new isoDrive(letter, path, 0xF8, error); if (error) { - delete res; - if (!is_boot) dbp_disk_eject_state = true; - retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s", "image", path); + delete drive; + retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", "CD-ROM image", path, ""); return NULL; } + cdrom = ((isoDrive*)drive)->GetInterface(); } - else if (!strcasecmp(ext, ".exe") || !strcasecmp(ext, ".com") || !strcasecmp(ext, ".bat")) + else if (!strcasecmp(ext, "EXE") || !strcasecmp(ext, "COM") || !strcasecmp(ext, "BAT") || !strcasecmp(ext, "conf") || ext[-1] != '.') { - if (!letter) letter = (is_boot ? 'C' : 'D'); - res = new localDrive(std::string(path, path_file - path).c_str(), 512, 32, 32765, 16000, 0xF8); - res->label.SetLabel("PURE", false, true); - path = NULL; // don't treat as disk image + if (!letter) letter = (boot ? 'C' : 'D'); + if (!unmount_existing && Drives[letter-'A']) return NULL; + std::string dir; dir.assign(path, (ext[-1] == '.' ? path_file : ext) - path).append(ext[-1] == '.' ? "" : "/"); // must end with slash + strreplace((char*)dir.c_str(), (CROSS_FILESPLIT == '\\' ? '/' : '\\'), CROSS_FILESPLIT); // required by localDrive + drive = new localDrive(dir.c_str(), 512, 32, 32765, 16000, 0xF8); + DBP_SetDriveLabelFromContentPath(drive, path, letter, path_file, ext); + if (ext[-1] == '.' && (ext[2]|0x20) == 'n') dbp_conf_loading = 'o'; // conf loading mode set to 'o'utside will load the requested .conf file + path = NULL; // don't treat as disk image, but always register with Drives even if is_boot } - else if (!strcasecmp(ext, ".m3u") || !strcasecmp(ext, ".m3u8")) + else if (!strcasecmp(ext, "M3U") || !strcasecmp(ext, "M3U8")) { FILE* m3u_file_h = fopen_wrap(path, "rb"); if (!m3u_file_h) { - retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s", "M3U", path); + retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", "M3U", path, ""); return NULL; } fseek(m3u_file_h, 0, SEEK_END); @@ -539,91 +811,340 @@ static DOS_Drive* DBP_Mount(const char* path, bool is_boot, bool set_content_nam delete [] m3u; return NULL; } + else // unknown extension + { + DBP_ASSERT(false); + return NULL; + } - if (res) + if (DBP_IsMounted(letter)) { - DBP_ASSERT(!Drives[letter-'A']); - Drives[letter-'A'] = res; - mem_writeb(Real2Phys(dos.tables.mediaid) + (letter-'A') * 9, (res_media_byte ? res_media_byte : res->GetMediaByte())); - if (path) + if (!unmount_existing) { - if (is_boot) DBP_AppendImage(path, false); - else dbp_disk_mount_letter = letter; + if (drive) delete drive; // also deletes disk + else if (disk) delete disk; + return NULL; } + DBP_Unmount(letter); + } + + // Register emulated drive + Drives[letter-'A'] = drive; + + // Write media bytes to dos table + if (!media_byte) media_byte = (letter < 'C' ? 0xF0 : (drive ? drive->GetMediaByte() : 0xF8)); // F0 = floppy, F8 = hard disk + mem_writeb(Real2Phys(dos.tables.mediaid) + (letter-'A') * 9, media_byte); + + // Register virtual drives with MSCDEX + bool attachedVirtualDrive = (letter > 'C' && !disk && !cdrom); + if (attachedVirtualDrive) + { + Bit8u subUnit; + MSCDEX_AddDrive(letter, "", subUnit); + } + + // Register CDROM with IDE controller only when running with 32MB or more RAM (used when booting an operating system) + if (cdrom && (MEM_TotalPages() / 256) >= 32) + { + IDE_RefreshCDROMs(); + } + + // Register with BIOS/CMOS/IDE controller + if (disk && letter < 'A'+MAX_DISK_IMAGES) + { + imageDiskList[letter-'A'] = disk; + } + + if (path) + { + if (boot) disk_image_index = DBP_AppendImage(path, false); + dbp_images[disk_image_index].mounted = true; + dbp_images[disk_image_index].drive = letter; + dbp_disk_image_index = disk_image_index; } return NULL; } -static void DBP_Shutdown() +static void DBP_Remount(char drive1, char drive2) { - if (dbp_state != DBPSTATE_EXITED && dbp_state != DBPSTATE_SHUTDOWN) + if (!DBP_IsMounted(drive1) || DBP_IsMounted(drive2)) return; + + DBP_Image* img = NULL; + for (DBP_Image& i : dbp_images) { if (i.mounted && i.drive == drive1) { img = &i; break; } } + if (img) { - dbp_state = DBPSTATE_RUNNING; - DBP_QueueEvent(DBPET_SHUTDOWN, 0); - while (dbp_state != DBPSTATE_EXITED) sleep_ms(50); + DBP_Unmount(drive1); + DBP_Mount((unsigned)(img - &dbp_images[0]), false, drive2); } - if (!dbp_crash_message.empty()) + else { - retro_notify(0, RETRO_LOG_ERROR, "DOS crashed: %s", dbp_crash_message.c_str()); - dbp_crash_message.clear(); + // Swap registration with BIOS/CMOS + if (imageDisk*& dsk = imageDiskList[drive1-'A']) + { + if (drive2 < 'A'+MAX_DISK_IMAGES) imageDiskList[drive2-'A'] = dsk; + else if (!dynamic_cast(Drives[drive1-'A'])) delete dsk; + dsk = NULL; + } + + // Swap media bytes in dos table + mem_writeb(Real2Phys(dos.tables.mediaid) + (drive2-'A') * 9, mem_readb(Real2Phys(dos.tables.mediaid) + (drive1-'A') * 9)); + mem_writeb(Real2Phys(dos.tables.mediaid) + (drive1-'A') * 9, 0); + + // Swap emulated drives + Drives[drive2-'A'] = Drives[drive1-'A']; + Drives[drive1-'A'] = NULL; + + // Handle MSCDEX (using path "" can only be used for virtual drives and not image file based drives) + if (MSCDEX_RemoveDrive(drive1)) { Bit8u subUnit; MSCDEX_AddDrive(drive2, "", subUnit); } } - if (control) + + // If the currently running batch file is placed on the remounted drive, make sure it now points to the new drive + if (BatchFile* bf = first_shell->bf) + if (bf->filename.length() > 2 && bf->filename[0] == drive1 && bf->filename[1] == ':') + bf->filename[0] = drive2; + + if (DOS_GetDefaultDrive() == drive1-'A') DOS_SetDrive(drive2-'A'); + + for (DBP_Image& i : dbp_images) { - DBP_ASSERT(!first_shell); //should have been properly cleaned up - delete control; - control = NULL; + if (i.path[0] == '$' && i.path[1] == drive1) i.path[1] = drive2; + if (i.mounted && i.drive == drive1) i.drive = drive2; } - for (DBP_Event& e : dbp_event_queue) +} + +struct DBP_PadMapping +{ + enum { DBP_PADMAP_MAXSIZE = 1 + (20 * (1 + (4 * 2))) }; + + static void Load() { - if (e.type > _DBPET_EXT_MAX) continue; - delete e.ext; - e.ext = NULL; + DOS_File *padmap = nullptr; + if (!Drives['C'-'A'] || !Drives['C'-'A']->FileOpen(&padmap, (char*)"PADMAP.DBP", OPEN_READ)) + return; + + dbp_custom_mapping.resize(DBP_PADMAP_MAXSIZE); + Bit8u version; Bit16u version_length = sizeof(version), padmap_length = (Bit16u)DBP_PADMAP_MAXSIZE; + padmap->AddRef(); + padmap->Read(&version, &version_length); + padmap->Read(&dbp_custom_mapping[0], &padmap_length); + if (!version_length || version != 0 || !padmap_length) + { + retro_notify(0, RETRO_LOG_ERROR, "Corrupt gamepad mapping data in %c:\\%s", 'C', "PADMAP.DBP"); + DBP_ASSERT(0); + dbp_custom_mapping.clear(); + } + padmap->Close(); + delete padmap; + } + + static void ForceAxisMapPair(DBP_InputBind& b) + { + // convert axis binding into key pair to simplify editing (will be reversed by save+load of padmapping when done) + DBP_ASSERT(b.device == RETRO_DEVICE_ANALOG && b.evt < _DBPET_JOY_AXIS_MAX && b.evt != _DBPET_MAX); + for (const DBP_SpecialMapping& sm : DBP_SpecialMappings) + { + if (sm.evt != b.evt || sm.meta != -1) continue; + DBP_ASSERT((&sm)[1].evt == sm.evt && (&sm)[1].meta == -sm.meta); + int key = DBP_SPECIALMAPPINGS_KEY + (int)(&sm - DBP_SpecialMappings); + b.evt = DBPET_AXISMAPPAIR; + b.meta = DBP_MAPPAIR_MAKE(key, key+1); + return; + } + DBP_ASSERT(false); + } + + static void Save() + { + dbp_custom_mapping.resize(DBP_PADMAP_MAXSIZE); + Bit8u version = 0, *data = &dbp_custom_mapping[0], *pBind = data + 1; + data[0] = 0; + for (Bit8u btn_id = 0; btn_id != 20; btn_id++) + { + DBP_InputBind bnd = { 0, RETRO_DEVICE_JOYPAD, 0, btn_id }; + bool isAnalog = (bnd.id >= 16); + if (isAnalog) + { + bnd.device = RETRO_DEVICE_ANALOG; + bnd.index = (bnd.id >= 18 ? RETRO_DEVICE_INDEX_ANALOG_RIGHT : RETRO_DEVICE_INDEX_ANALOG_LEFT); + bnd.id = (bnd.id & 1 ? RETRO_DEVICE_ID_ANALOG_Y : RETRO_DEVICE_ID_ANALOG_X); + } + Bit8u key_count = 0, *p = pBind+1; + for ( DBP_InputBind& b : dbp_input_binds) + { + if (b.port != 0 || b.device != bnd.device || b.index != bnd.index || b.id != bnd.id) continue; + if (isAnalog && b.evt != DBPET_AXISMAPPAIR) ForceAxisMapPair(b); + p[0] = p[1] = (Bit8u)KBD_NONE; + if (b.evt == DBPET_KEYDOWN) + p[0] = (Bit8u)b.meta; + else if (b.evt == DBPET_AXISMAPPAIR) + p[0] = DBP_MAPPAIR_GET(-1, b.meta), p[1] = DBP_MAPPAIR_GET(1, b.meta); + else if (!isAnalog) for (const DBP_SpecialMapping& sm : DBP_SpecialMappings) + if (sm.evt == b.evt && sm.meta == b.meta) + { p[0] = (Bit8u)DBP_SPECIALMAPPINGS_KEY+(Bit8u)(&sm - DBP_SpecialMappings); break; } + if (p[0] == KBD_NONE && p[1] == KBD_NONE) continue; + p += (isAnalog ? 2 : 1); + if (++key_count == 4) break; + } + if (!key_count) continue; + + *pBind = btn_id | (Bit8u)((key_count - 1)<<6); + pBind = p; + data[0]++; + } + + DOS_File *padmap = nullptr; + if (!Drives['C'-'A'] || !Drives['C'-'A']->FileCreate(&padmap, (char*)"PADMAP.DBP", DOS_ATTR_ARCHIVE)) + { + retro_notify(0, RETRO_LOG_ERROR, "Unable to write gamepad mapping data %c:\\%s", 'C', "PADMAP.DBP"); + DBP_ASSERT(0); + return; + } + Bit16u version_length = sizeof(version), padmap_length = (Bit16u)(pBind - data); + padmap->AddRef(); + padmap->Write(&version, &version_length); + padmap->Write(data, &padmap_length); + padmap->Close(); + delete padmap; + dbp_input_binds_modified = true; + } + + static void Delete() + { + dbp_custom_mapping.clear(); + if (Drives['C'-'A']) Drives['C'-'A']->FileUnlink((char*)"PADMAP.DBP"); + dbp_input_binds_modified = true; } - dbp_event_queue_write_cursor = dbp_event_queue_read_cursor = 0; - dbp_state = DBPSTATE_SHUTDOWN; -} -static void DBP_LockThread(bool lock) + static void Apply(const Bit8u* mapping, const char* mapping_names = NULL) + { + const Bit8u count = *mapping, *p = mapping + 1; + static std::vector name_buffers; + name_buffers.resize(count); + for (Bit8u num = 0; num != count; num++) + { + std::string& name = name_buffers[num]; + name.clear(); + size_t first_input_bind = dbp_input_binds.size(); + + Bit8u btn_id = *(p++); + DBP_InputBind bnd = { 0, RETRO_DEVICE_JOYPAD, 0, (Bit8u)(btn_id & 31) }; + if (bnd.id > 19) { DBP_ASSERT(0); goto err; } + bool hasActionName = !!(btn_id & 32); + if (hasActionName) + { + if (!mapping_names) { DBP_ASSERT(0); goto err; } + Bit32u name_offset = 0; + do { name_offset = (name_offset<<7)|(*p&127); } while (*(p++) & 128); + ((name = mapping_names + name_offset) += ' ') += '('; + } + + bool isAnalog = (bnd.id >= 16); + if (isAnalog) + { + bnd.device = RETRO_DEVICE_ANALOG; + bnd.index = (bnd.id >= 18 ? RETRO_DEVICE_INDEX_ANALOG_RIGHT : RETRO_DEVICE_INDEX_ANALOG_LEFT); + bnd.id = (bnd.id & 1 ? RETRO_DEVICE_ID_ANALOG_Y : RETRO_DEVICE_ID_ANALOG_X); + } + const char *desc_lastdev = NULL; + for (Bit8u key_count = 1 + (btn_id>>6); key_count--;) + { + Bit8u k[] = { *(p++), (isAnalog ? *(p++) : (Bit8u)0) }; + if (!isAnalog) + { + if (k[0] < KBD_LAST && k[0] != KBD_NONE) + { + bnd.evt = DBPET_KEYDOWN; + bnd.meta = k[0]; + } + else if (k[0] >= DBP_SPECIALMAPPINGS_KEY && k[0] < DBP_SPECIALMAPPINGS_MAX) + { + bnd.evt = DBP_SPECIALMAPPING(k[0]).evt; + bnd.meta = DBP_SPECIALMAPPING(k[0]).meta; + } + else { DBP_ASSERT(0); goto err; } + } + else + { + if (k[1] == k[0] + 1 && k[0] >= DBP_SPECIALMAPPINGS_KEY && k[1] < DBP_SPECIALMAPPINGS_MAX && DBP_SPECIALMAPPING(k[0]).evt < _DBPET_JOY_AXIS_MAX && DBP_SPECIALMAPPING(k[0]).evt == DBP_SPECIALMAPPING(k[1]).evt) + { + DBP_ASSERT(DBP_SPECIALMAPPING(k[0]).meta == -1 && DBP_SPECIALMAPPING(k[1]).meta == 1); + bnd.evt = DBP_SPECIALMAPPING(k[0]).evt; + bnd.meta = 0; + } + else if ((k[0] < KBD_LAST || (k[0] >= DBP_SPECIALMAPPINGS_KEY && k[0] < DBP_SPECIALMAPPINGS_MAX)) && (k[1] < KBD_LAST || (k[1] >= DBP_SPECIALMAPPINGS_KEY && k[1] < DBP_SPECIALMAPPINGS_MAX)) && (k[0] != KBD_NONE || k[1] != KBD_NONE)) + { + bnd.evt = DBPET_AXISMAPPAIR; + bnd.meta = DBP_MAPPAIR_MAKE(k[0], k[1]); + } + else { DBP_ASSERT(0); goto err; } + } + dbp_input_binds.push_back(bnd); + for (int i = 0; i <= (int)isAnalog; i++) + { + if (i) name += '/'; + const char *desc_dev = DBP_GETKEYDEVNAME(k[i]); + if (desc_lastdev != desc_dev) { if (desc_dev) (name += desc_dev) += ' '; desc_lastdev = desc_dev; } + name += DBP_GETKEYNAME(k[i]); + } + if (key_count) name += '+'; + } + if (hasActionName) name += ')'; + dbp_input_binds[first_input_bind].desc = name.c_str(); + } + return; + err: retro_notify(0, RETRO_LOG_ERROR, "Gamepad mapping data is invalid"); + } +}; + +static void DBP_Shutdown() { - if (lock && !dbp_lockthreadstate) + if (dbp_state == DBPSTATE_SHUTDOWN || dbp_state == DBPSTATE_BOOT) return; + DBP_ThreadControl(TCM_SHUTDOWN); + if (!dbp_crash_message.empty()) { - dbp_lockthreadstate = true; - dbp_lockthreadmtx[0].Lock(); - DBP_QueueEvent(DBPET_LOCKTHREAD, 0); - dbp_lockthreadmtx[1].Lock(); + retro_notify(0, RETRO_LOG_ERROR, "DOS crashed: %s", dbp_crash_message.c_str()); + dbp_crash_message.clear(); } - else if (!lock && dbp_lockthreadstate) + DBP_ASSERT(control); + if (control) { - dbp_lockthreadmtx[0].Unlock(); - dbp_lockthreadmtx[1].Unlock(); - dbp_lockthreadstate = false; + DBP_ASSERT(!first_shell); //should have been properly cleaned up + delete control; + control = NULL; } + dbp_state = DBPSTATE_SHUTDOWN; } -Bit32u DBP_GetTicks() +static double DBP_GetFPS() { - return (Bit32u)((time_cb() - dbp_boot_time) / 1000); + if (dbp_force60fps) return 60; + if (dbp_latency != DBP_LATENCY_VARIABLE) return render.src.fps; + if (!dbp_targetrefreshrate && (!environ_cb || !environ_cb(RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE, &dbp_targetrefreshrate) || dbp_targetrefreshrate < 1)) dbp_targetrefreshrate = 60.0f; + return dbp_targetrefreshrate; } -void DBP_DelayTicks(Bit32u ms) +void DBP_OnBIOSReboot() { - sleep_ms(ms); + dbp_biosreboot = true; + DBP_DOSBOX_ForceShutdown(); } -void DBP_MidiDelay(Bit32u ms) +void DBP_Crash(const char* msg) { - if (dbp_fast_forward) return; - sleep_ms(ms); + log_cb(RETRO_LOG_WARN, "[DOSBOX] Crash: %s\n", msg); + dbp_crash_message = msg; + DBP_DOSBOX_ForceShutdown(); } -void DBP_LockAudio() +Bit32u DBP_GetTicks() { - dbp_audiomutex.Lock(); + return (Bit32u)((time_cb() - dbp_boot_time) / 1000); } -void DBP_UnlockAudio() +void DBP_MidiDelay(Bit32u ms) { - dbp_audiomutex.Unlock(); + if (dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD) return; + retro_sleep(ms); } bool DBP_IsKeyDown(KBD_KEYS key) @@ -656,28 +1177,28 @@ Bitu GFX_SetSize(Bitu width, Bitu height, Bitu flags, double scalex, double scal // Make sure DOSbox is not using any scalers that would waste performance DBP_ASSERT(render.src.width == width && render.src.height == height); if (width > SCALER_MAXWIDTH || height > SCALER_MAXHEIGHT) { DBP_ASSERT(false); return 0; } - - memset(dosbox_buffers, 0, sizeof(dosbox_buffers)); - RDOSGFXwidth = (Bit32u)width; - RDOSGFXheight = (Bit32u)height; - RDOSGFXpitch = (Bit32u)width * 4; - RDOSGFXratio = (float)((width * scalex) / (height * scaley)); - if (RDOSGFXratio < 1) RDOSGFXratio *= 2; //because render.src.dblw is not reliable - if (RDOSGFXratio > 2) RDOSGFXratio /= 2; //because render.src.dblh is not reliable - //const char* VGAModeNames[] { "M_CGA2","M_CGA4","M_EGA","M_VGA","M_LIN4","M_LIN8","M_LIN15","M_LIN16","M_LIN32","M_TEXT","M_HERC_GFX","M_HERC_TEXT","M_CGA16","M_TANDY2","M_TANDY4","M_TANDY16","M_TANDY_TEXT","M_ERROR"}; //log_cb(RETRO_LOG_INFO, "[DOSBOX SIZE] Width: %u - Height: %u - Ratio: %f (%f) - DBLH: %d - DBLW: %d - BPP: %u - Mode: %s (%d)\n", - // RDOSGFXwidth, RDOSGFXheight, RDOSGFXratio, render.src.ratio, render.src.dblh, render.src.dblw, render.src.bpp, VGAModeNames[vga.mode], vga.mode); - - dbp_calculate_min_sleep(); + // (unsigned)width, (unsigned)height, (float)((width * scalex) / (height * scaley)), render.src.ratio, render.src.dblh, render.src.dblw, render.src.bpp, VGAModeNames[vga.mode], vga.mode); return GFX_GetBestMode(0); } bool GFX_StartUpdate(Bit8u*& pixels, Bitu& pitch) { DBP_FPSCOUNT(dbp_fpscount_gfxstart) - pixels = dosbox_buffers[(dosbox_buffers_last + 1) % DBP_BUFFER_COUNT]; - pitch = RDOSGFXpitch; + DBP_Buffer& buf = dbp_buffers[buffer_active^1]; + pixels = (Bit8u*)buf.video; + pitch = render.src.width * 4; + float ratio = (float)render.src.width / render.src.height; + if (render.aspect) ratio /= (float)render.src.ratio; + if (ratio < 1) ratio *= 2; //because render.src.dblw is not reliable + if (ratio > 2) ratio /= 2; //because render.src.dblh is not reliable + if (buf.width != render.src.width || buf.height != render.src.height || buf.ratio != ratio) + { + buf.width = (Bit32u)render.src.width; + buf.height = (Bit32u)render.src.height; + buf.ratio = ratio; + } return true; } @@ -685,39 +1206,218 @@ void GFX_EndUpdate(const Bit16u *changedLines) { if (!changedLines) return; - #ifdef DBP_ENABLE_FPS_COUNTERS - static Bit32u last_chk; - Bit32u chk = 0; - for (Bit32u *p = (Bit32u*)dosbox_buffers[(dosbox_buffers_last + 1) % DBP_BUFFER_COUNT], *pMax = p + RDOSGFXwidth * RDOSGFXheight; p != pMax; p++) chk = chk*65599 + *p; - if (last_chk != chk) { DBP_FPSCOUNT(dbp_fpscount_gfxend) last_chk = chk; } - #endif + buffer_active ^= 1; + DBP_Buffer& buf = dbp_buffers[buffer_active]; + //DBP_ASSERT((Bit8u*)buf.video == render.scale.outWrite - render.scale.outPitch * render.src.height); // this assert can fail after loading a save game + DBP_ASSERT(render.scale.outWrite >= (Bit8u*)buf.video && render.scale.outWrite <= (Bit8u*)buf.video + sizeof(buf.video)); + + if (dbp_gfx_intercept) dbp_gfx_intercept(buf); + + if ( + #ifndef DBP_ENABLE_FPS_COUNTERS + dbp_perf == DBP_PERF_DETAILED && + #endif + memcmp(dbp_buffers[0].video, dbp_buffers[1].video, buf.width * buf.height * 4)) + { + DBP_FPSCOUNT(dbp_fpscount_gfxend) + dbp_perf_uniquedraw++; + } + + // frameskip is best to be modified in this function (otherwise it can be off by one) + dbp_framecount += 1 + render.frameskip.max; + + if (dbp_last_throttle_mode != dbp_throttle.mode) + { + if (dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD) + DBP_UnlockSpeed(true, 10); + else if (dbp_last_throttle_mode == RETRO_THROTTLE_FAST_FORWARD || dbp_last_throttle_mode == 99) + DBP_UnlockSpeed(false); + dbp_last_throttle_mode = dbp_throttle.mode; + } + + render.frameskip.max = (DBP_NeedFrameSkip(true) ? 1 : 0); +} + +static bool GFX_Events_AdvanceFrame() +{ + enum { HISTORY_STEP = 4, HISTORY_SIZE = HISTORY_STEP * 2 }; + static struct + { + retro_time_t TimeLast, TimeSleepUntil; + double LastModeHash; + Bit32u LastFrameCount, FrameTicks, Paused, HistoryCycles[HISTORY_SIZE], HistoryEmulator[HISTORY_SIZE], HistoryFrame[HISTORY_SIZE], HistoryCursor; + } St; + + St.FrameTicks++; + if (St.LastFrameCount == dbp_framecount) + { + if (dbp_pause_events) + { + retro_time_t time_before_pause = time_cb(); + DBP_ThreadControl(TCM_ON_PAUSE_FRAME); + St.Paused += (Bit32u)(time_cb() - time_before_pause); + } + return false; + } + + Bit32u finishedframes = (dbp_framecount - St.LastFrameCount); + Bit32u finishedticks = St.FrameTicks; + St.LastFrameCount = dbp_framecount; + St.FrameTicks = 0; + + // With certain keyboard layouts, we can end up here during startup which we don't want to do anything further + if (dbp_state == DBPSTATE_BOOT) return true; + + retro_time_t time_before = time_cb() - St.Paused; + St.Paused = 0; + + if (dbp_latency != DBP_LATENCY_VARIABLE || dbp_state == DBPSTATE_FIRST_FRAME) + { + DBP_ThreadControl(TCM_ON_FINISH_FRAME); + } + + retro_time_t time_after = time_cb(); + if (dbp_latency == DBP_LATENCY_VARIABLE) + { + while (time_after > dbp_lastrun + 100000 && !dbp_pause_events) retro_sleep(0); // paused or frame stepping + if (dbp_pause_events) DBP_ThreadControl(TCM_ON_PAUSE_FRAME); + if (dbp_throttle.mode != RETRO_THROTTLE_FAST_FORWARD || dbp_throttle.rate > .1f) + { + Bit32u frameTime = (Bit32u)(1000000.0 / render.src.fps * (((dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD || dbp_throttle.mode == RETRO_THROTTLE_SLOW_MOTION) && dbp_throttle.rate > .1f) ? av_info.timing.fps / dbp_throttle.rate : 1.0)); + if (St.TimeSleepUntil <= time_after - frameTime * 2) + St.TimeSleepUntil = time_after; + else + St.TimeSleepUntil += frameTime; + while ((Bit32s)(St.TimeSleepUntil - time_after) > 0) + { + retro_sleep(((St.TimeSleepUntil - time_after) > 1500 ? 1 : 0)); // double brackets because of missing brackets in macro... + if (dbp_pause_events) DBP_ThreadControl(TCM_ON_PAUSE_FRAME); + time_after = time_cb(); + } + } + } + retro_time_t time_last = St.TimeLast; + St.TimeLast = time_after; + + if (dbp_perf) + { + dbp_perf_count += finishedframes; + dbp_perf_emutime += (Bit32u)(time_before - time_last); + dbp_perf_totaltime += (Bit32u)(time_after - time_last); + } + + // Skip evaluating the performance of this frame if the display mode has changed + double modeHash = render.src.fps * render.src.width * render.src.height * (double)vga.mode; + if (modeHash != St.LastModeHash) + { + //log_cb(RETRO_LOG_INFO, "[DBPTIMERS@%4d] NEW VIDEO MODE %f|%d|%d|%d|%d|\n", St.HistoryCursor, render.src.fps, (int)render.src.width, (int)render.src.height, (int)vga.mode); + St.LastModeHash = modeHash; + St.HistoryEmulator[HISTORY_SIZE-1] = 0; + St.HistoryCursor = 0; + return true; + } + + if (!CPU_CycleAutoAdjust) + { + St.HistoryEmulator[HISTORY_SIZE-1] = 0; + St.HistoryCursor = 0; + return true; + } + + if (finishedframes > 1) + return true; + + if (dbp_throttle.mode == RETRO_THROTTLE_FRAME_STEPPING || dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD || dbp_throttle.mode == RETRO_THROTTLE_SLOW_MOTION || dbp_throttle.mode == RETRO_THROTTLE_REWINDING) + return true; + + extern Bit64s CPU_IODelayRemoved; + Bit32u hc = St.HistoryCursor % HISTORY_SIZE; + St.HistoryCycles[hc] = (Bit32u)(((Bit64s)CPU_CycleMax * finishedticks - CPU_IODelayRemoved) / finishedticks); + St.HistoryEmulator[hc] = (Bit32u)(time_before - time_last); + St.HistoryFrame[hc] = (Bit32u)(time_after - time_last); + St.HistoryCursor++; + CPU_IODelayRemoved = 0; + + if ((St.HistoryCursor % HISTORY_STEP) == 0) + { + Bit32u frameThreshold = 0; + for (Bit32u f : St.HistoryFrame) frameThreshold += f; + frameThreshold = (frameThreshold / HISTORY_SIZE) * 3; + + Bit32u recentCount = 0, recentCyclesSum = 0, recentEmulator = 0, recentFrameSum = 0; + for (int i = 0; i != HISTORY_STEP; i++) + { + int n = ((St.HistoryCursor + (HISTORY_SIZE-1) - i) % HISTORY_SIZE); + if (St.HistoryFrame[n] > frameThreshold) continue; + recentCount++; + recentCyclesSum += St.HistoryCycles[n]; + recentEmulator += St.HistoryEmulator[n]; + recentFrameSum += St.HistoryFrame[n]; + } + recentEmulator /= (recentCount ? recentCount : 1); + + Bit32u frameTime = (Bit32u)((1000000.0f / render.src.fps) * (dbp_auto_target - 0.01f)); + + //Bit32u st = dbp_serialize_time; + if (dbp_serialize_time) + { + // To deal with frontends that have a rewind-feature we need to remove the time used to create rewind states from the available frame time + dbp_serialize_time /= HISTORY_STEP; + if (dbp_serialize_time > frameTime - 3000) + frameTime = 3000; + else + frameTime -= dbp_serialize_time; + dbp_serialize_time = 0; + } + + Bit32s ratio = 0; + Bit64s recentCyclesMaxSum = (Bit64s)CPU_CycleMax * recentCount; + if (recentCount > HISTORY_STEP/2 && St.HistoryEmulator[HISTORY_SIZE-1] && recentCyclesMaxSum >= recentCyclesSum) + { + // ignore the cycles added due to the IO delay code in order to have smoother auto cycle adjustments + double ratio_not_removed = 1.0 - ((double)(recentCyclesMaxSum - recentCyclesSum) / recentCyclesMaxSum); + + // scale ratio we are aiming for (1024 is no change) + ratio = frameTime * 1024 * 100 / 100 / recentEmulator; + ratio = (Bit32s)((double)ratio * ratio_not_removed); + + // Don't allow very high ratio which can cause us to lock as we don't scale down + // for very low ratios. High ratio might result because of timing resolution + if (ratio > 16384) + ratio = 16384; - if (dbp_gfx_intercept) dbp_gfx_intercept(dosbox_buffers[(dosbox_buffers_last + 1) % DBP_BUFFER_COUNT]); + // Limit the ratio even more when the cycles are already way above the realmode default. + else if (ratio > 5120 && CPU_CycleMax > 50000) + ratio = 5120; - dosbox_buffers_last = (dosbox_buffers_last + 1) % DBP_BUFFER_COUNT; + else if (ratio < 1000 && /*St.RepeatDowns < 5 && */CPU_CycleMax > 50000) + { + // When scaling down a decent amount, scale down more aggressively to avoid sound dropping out + ratio = (ratio > 911 ? ratio * ratio * ratio / (1024*1024) : ratio * 80 / 100); + } - // Tell dosbox to draw the next frame completely, not just the scanlines that changed (could also issue GFX_CallBackRedraw) - render.scale.clearCache = true; + if (ratio > 1024) + { + Bit64s ratio_with_removed = (Bit64s)((((double)ratio - 1024.0) * ratio_not_removed) + 1024.0); + Bit64s cmax_scaled = (Bit64s)CPU_CycleMax * ratio_with_removed; + CPU_CycleMax = (Bit32s)(1 + (CPU_CycleMax >> 1) + cmax_scaled / (Bit64s)2048); + } + else + { + double r = (1.0 + ratio_not_removed) / (ratio_not_removed + 1024.0 / ratio); + CPU_CycleMax = 1 + (Bit32s)(CPU_CycleMax * r); + } - if (dbp_state == DBPSTATE_WAIT_FIRST_FRAME) - dbp_state = DBPSTATE_WAIT_FIRST_EVENTS; + if (CPU_CycleMax < CPU_CYCLES_LOWER_LIMIT) CPU_CycleMax = CPU_CYCLES_LOWER_LIMIT; + if (CPU_CycleMax > 4000000) CPU_CycleMax = 4000000; + if (CPU_CycleMax > (Bit64s)recentEmulator * 280) CPU_CycleMax = (Bit32s)(recentEmulator * 280); + } - // When pausing the frontend we need to make sure CycleAutoAdjust is only re-activated after normal rendering has resumed - extern bool CPU_SkipCycleAutoAdjust; - static Bit8u stall_frames, resume_frames; - static Bit32u last_retro_activity; - if (dbp_retro_activity != last_retro_activity) - { - last_retro_activity = dbp_retro_activity; - if (stall_frames) stall_frames = 0; - if (resume_frames && resume_frames++ > 4) { CPU_SkipCycleAutoAdjust = false; resume_frames = 0; } - } - else if ((dbp_timing_tamper || stall_frames++ > 4) && dbp_state == DBPSTATE_RUNNING && !first_shell->exit) - { - stall_frames = resume_frames = 1; - CPU_SkipCycleAutoAdjust = true; - dbp_wait_activity = last_retro_activity; + //log_cb(RETRO_LOG_INFO, "[DBPTIMERS%4d] - EMU: %5d - FE: %5d - SRLZ: %u - TARGET: %5d - EffectiveCycles: %6d - Limit: %6d|%6d - CycleMax: %6d - Scale: %5d\n", + // St.HistoryCursor, (int)recentEmulator, (int)((recentFrameSum / recentCount) - recentEmulator), st, frameTime, + // recentCyclesSum / recentCount, CPU_CYCLES_LOWER_LIMIT, recentEmulator * 280, CPU_CycleMax, ratio); } + return true; } void GFX_Events() @@ -729,94 +1429,30 @@ void GFX_Events() DBP_FPSCOUNT(dbp_fpscount_event) + bool wasFrameEnd = GFX_Events_AdvanceFrame(); + static bool mouse_speed_up, mouse_speed_down; static int mouse_joy_x, mouse_joy_y, hatbits; - - bool wait_until_activity = !!dbp_wait_activity; - bool wait_until_run = (dbp_state == DBPSTATE_WAIT_FIRST_EVENTS); - - check_new_events: for (;dbp_event_queue_read_cursor != dbp_event_queue_write_cursor; dbp_event_queue_read_cursor = ((dbp_event_queue_read_cursor + 1) % DBP_EVENT_QUEUE_SIZE)) { DBP_Event e = dbp_event_queue[dbp_event_queue_read_cursor]; - #if 0 - static const char* DBP_Event_Type_Names[] = { "SET_VARIABLE", "MOUNT", "EXT_MAX", "UNMOUNT", "SET_FASTFORWARD", "LOCKTHREAD", "SHUTDOWN", "INPUT_FIRST", - "JOY1X", "JOY1Y", "JOY2X", "JOY2Y", "JOYMX", "JOYMY", "JOY_AXIS_MAX", - "MOUSEXY", "MOUSEDOWN", "MOUSEUP", "MOUSESETSPEED", "MOUSERESETSPEED", "JOYHATSETBIT", "JOYHATUNSETBIT", "JOY1DOWN", "JOY1UP", "JOY2DOWN", "JOY2UP", "KEYDOWN", "KEYUP", - "ONSCREENKEYBOARD", "AXIS_TO_KEY", "MAX" }; - log_cb(RETRO_LOG_INFO, "[DOSBOX EVENT] [@%6d] %s %08x%s\n", DBP_GetTicks(), (e.type > _DBPET_MAX ? "SPECIAL" : DBP_Event_Type_Names[(int)e.type]), (unsigned)e.val, (dbp_input_intercept && e.type >= _DBPET_INPUT_FIRST ? " [INTERCEPTED]" : "")); - #endif - if (dbp_input_intercept && e.type >= _DBPET_INPUT_FIRST) + //log_cb(RETRO_LOG_INFO, "[DOSBOX EVENT] [@%6d] %s %08x%s\n", DBP_GetTicks(), (e.type > _DBPET_MAX ? "SPECIAL" : DBP_Event_Type_Names[(int)e.type]), (unsigned)e.val, (dbp_input_intercept && e.type >= _DBPETOLD_INPUT_FIRST ? " [INTERCEPTED]" : "")); + if (dbp_input_intercept) { - dbp_input_intercept(e); + dbp_input_intercept(e.type, e.val, e.val2); if (!DBP_IS_RELEASE_EVENT(e.type)) continue; } switch (e.type) { - case DBPET_SET_VARIABLE: - if (!memcmp(e.ext->cmd.c_str(), "midiconfig=", 11) && MIDI_TSF_SwitchSF2(e.ext->cmd.c_str() + 11)) - { - // Do the SF2 reload directly (otherwise midi output stops until dos program restart) - e.ext->section->HandleInputline(e.ext->cmd); - } - else if (!memcmp(e.ext->cmd.c_str(), "cycles=", 7)) - { - // Set cycles value without Destroy/Init (because that can cause FPU overflow crashes) - DBP_CPU_ModifyCycles(e.ext->cmd.c_str() + 7); - e.ext->section->HandleInputline(e.ext->cmd); - } - else - { - e.ext->section->ExecuteDestroy(false); - e.ext->section->HandleInputline(e.ext->cmd); - e.ext->section->ExecuteInit(false); - } - delete e.ext; - dbp_event_queue[dbp_event_queue_read_cursor].ext = NULL; - break; - - case DBPET_MOUNT: - if (!Drives['A'-'A'] && !Drives['D'-'A']) - DBP_Mount(e.ext->cmd.c_str(), false, false); - if (dbp_input_intercept) dbp_input_intercept(e); - delete e.ext; - dbp_event_queue[dbp_event_queue_read_cursor].ext = NULL; - break; - - case DBPET_UNMOUNT: - if (dbp_disk_mount_letter && Drives[dbp_disk_mount_letter-'A'] && Drives[dbp_disk_mount_letter-'A']->UnMount() == 0) - { - Drives[dbp_disk_mount_letter-'A'] = 0; - mem_writeb(Real2Phys(dos.tables.mediaid)+(dbp_disk_mount_letter-'A')*9,0); - } - if (dbp_input_intercept) dbp_input_intercept(e); - break; - - case DBPET_SET_FASTFORWARD: - DBP_DOSBOX_Unlock(!!e.val, 10); - break; - - case DBPET_LOCKTHREAD: - dbp_lockthreadmtx[1].Unlock(); - dbp_lockthreadmtx[0].Lock(); - dbp_lockthreadmtx[1].Lock(); - dbp_lockthreadmtx[0].Unlock(); - break; - - case DBPET_SHUTDOWN: - DBP_DOSBOX_ForceShutdown(); - goto abort_gfx_events; - case DBPET_KEYDOWN: KEYBOARD_AddKey((KBD_KEYS)e.val, true); break; case DBPET_KEYUP: KEYBOARD_AddKey((KBD_KEYS)e.val, false); break; - case DBPET_ONSCREENKEYBOARD: - DBP_StartOnScreenKeyboard(); - break; + case DBPET_ONSCREENKEYBOARD: DBP_StartOnScreenKeyboard(); break; + case DBPET_ONSCREENKEYBOARDUP: break; case DBPET_MOUSEXY: { - float mx = e.xy[0]*dbp_mouse_speed*dbp_mouse_speed_x, my = e.xy[1]*dbp_mouse_speed; // good for 320x200? + float mx = e.val*dbp_mouse_speed*dbp_mouse_speed_x, my = e.val2*dbp_mouse_speed; // good for 320x200? Mouse_CursorMoved(mx, my, 0, 0, true); break; } @@ -848,49 +1484,12 @@ void GFX_Events() (hatbits == 12 ? (JOYSTICK_GetMove_Y(1) < -0.7f ? -0.5f : -1.0f) : //up-right 1.0f))))))))); //centered break; + case DBPET_CHANGEMOUNTS: break; + default: DBP_ASSERT(false); break; } } - static Bit32u events_per_frame = (Bit32u)(1800 / DBP_DEFAULT_FPS); - static Bit32u measure_ticks, measure_last, event_calls; - - if (wait_until_activity) - { - if (dbp_wait_activity == dbp_retro_activity && dbp_state == DBPSTATE_RUNNING && !first_shell->exit) - { - sleep_ms(1); - goto check_new_events; - } - dbp_wait_activity = 0; - measure_last = DBP_GetTicks(); - measure_ticks = 1; - DBP_DOSBOX_ResetTickTimer(); - } - - if (wait_until_run) - { - if (dbp_state == DBPSTATE_WAIT_FIRST_EVENTS) dbp_state = DBPSTATE_WAIT_FIRST_RUN; - if (dbp_state == DBPSTATE_WAIT_FIRST_RUN && !first_shell->exit) - { - sleep_ms(1); - goto check_new_events; - } - DBP_DOSBOX_Unlock(dbp_fast_forward, 10); // also resets tick timer - } - - // measure how often events are handled per frame to send joystick mouse movement at a fixed rate - if ((++measure_ticks & 0x3FF) == 1) - { - Bit32u measure_now = DBP_GetTicks(), measure_time = measure_now - measure_last; - measure_last = measure_now; - if (measure_ticks != 1) - { - // Now we know it takes [measure_time] for 0x400 event ticks - events_per_frame = (Bit32u)((0x400 * 1000) / (measure_time * render.src.fps) + .499f); - measure_ticks = 1; - } - } - if (event_calls++ > events_per_frame) + if (wasFrameEnd) { if ((mouse_joy_x || mouse_joy_y) && (abs(mouse_joy_x) > 5 || abs(mouse_joy_y) > 5)) { @@ -905,10 +1504,8 @@ void GFX_Events() my *= dbp_mouse_speed; Mouse_CursorMoved(mx, my, 0, 0, true); } - event_calls = 0; } - abort_gfx_events: GFX_EVENTS_RECURSIVE = false; } @@ -931,30 +1528,144 @@ void GFX_ShowMsg(char const* format,...) void GFX_SetPalette(Bitu start,Bitu count,GFX_PalEntry * entries) { } +struct DBP_MenuState +{ + enum ItemType : Bit8u { IT_NONE, IT_EXEC, IT_EXIT, IT_MOUNT, IT_BOOTIMGLIST, IT_BOOTIMG, IT_BOOTOSLIST, IT_BOOTOS, IT_INSTALLOSSIZE, IT_INSTALLOS, IT_COMMANDLINE, IT_EDIT, IT_ADD, IT_DEL, IT_DEVICE } result; + int sel, scroll, mousex, mousey, joyx, joyy; + Bit32u open_ticks; + DBP_Event_Type held_event; KBD_KEYS held_key; Bit32u held_ticks; + struct Item { ItemType type; Bit16s info; std::string str; INLINE Item() {} INLINE Item(ItemType t, Bit16s i = 0, const char* s = "") : type(t), info(i), str(s) {} }; + std::vector list; + + DBP_MenuState() : result(IT_NONE), sel(0), scroll(0), mousex(0), mousey(0), joyx(0), joyy(0), open_ticks(DBP_GetTicks()), held_event(_DBPET_MAX) { } + + bool ProcessInput(DBP_Event_Type type, int val, int val2, int* p_x_change = NULL) + { + int sel_change = 0, x_change = 0; + switch (type) + { + case DBPET_KEYDOWN: + switch ((KBD_KEYS)val) + { + case KBD_left: case KBD_kp4: x_change--; break; + case KBD_right: case KBD_kp6: x_change++; break; + case KBD_up: case KBD_kp8: sel_change--; break; + case KBD_down: case KBD_kp2: sel_change++; break; + case KBD_pageup: sel_change -= 12; break; + case KBD_pagedown: sel_change += 12; break; + case KBD_home: sel_change -= 99999; break; + case KBD_end: sel_change += 99999; break; + } + break; + case DBPET_KEYUP: + switch ((KBD_KEYS)val) + { + case KBD_enter: case KBD_kpenter: result = IT_EXEC; break; + case KBD_esc: result = IT_EXIT; break; + } + if (held_event == DBPET_KEYDOWN) held_event = _DBPET_MAX; + break; + case DBPET_MOUSEXY: + mousex += val; + mousey += val2; + if (abs(mousex) > 1000) { x_change = (mousex > 0 ? 1 : -1); mousex = mousey = 0; } + while (mousey < -300) { sel_change--; mousey += 300; mousex = 0; } + while (mousey > 300) { sel_change++; mousey -= 300; mousex = 0; } + break; + case DBPET_MOUSEDOWN: if (val == 0) result = IT_EXEC; break; //left + case DBPET_MOUSEUP: if (val == 1) result = IT_EXIT; break; //right + case DBPET_JOY1X: case DBPET_JOY2X: + if (joyy < 16000 && val >= 16000) x_change++; + if (joyy > -16000 && val <= -16000) x_change--; + if (held_event == type && val > -16000 && val < 16000) held_event = _DBPET_MAX; + joyx = val; + break; + case DBPET_JOY1Y: case DBPET_JOY2Y: + if (joyy < 16000 && val >= 16000) sel_change++; + if (joyy > -16000 && val <= -16000) sel_change--; + if (held_event == type && val > -16000 && val < 16000) held_event = _DBPET_MAX; + joyy = val; + break; + case DBPET_JOY1DOWN: case DBPET_JOY2DOWN: if (val == 0) result = IT_EXEC; break; // B/Y button + case DBPET_JOY1UP: case DBPET_JOY2UP: if (val == 1) result = IT_EXIT; break; // A/X button + } + + if (result && (DBP_GetTicks() - open_ticks) < 200U) + result = IT_NONE; // ignore already pressed buttons when opening + + if (x_change && !p_x_change) sel_change = x_change * 12; + + if ((sel_change || x_change) && !val2) + { + held_event = type; + held_ticks = DBP_GetTicks() + 300; + if (sel_change == -1) held_key = KBD_up; + else if (sel_change == 1) held_key = KBD_down; + else if (sel_change == -12) held_key = KBD_pageup; + else if (sel_change == 12) held_key = KBD_pagedown; + else if (x_change == -1) held_key = KBD_left; + else if (x_change == 1) held_key = KBD_right; + else held_event = _DBPET_MAX; + } + + DBP_ASSERT(list.size()); + for (int count = (int)list.size(); !result && sel_change;) + { + sel += sel_change; + if (sel >= 0 && sel < count) { } + else if (sel_change > 1) sel = count - 1; + else if (sel_change == -1) sel = count - 1; + else sel = scroll = 0; + if (list[sel].type != IT_NONE) break; + sel_change = (sel_change == -1 ? -1 : 1); + } + + if (result == IT_EXEC) result = list[sel].type; + + if (p_x_change) *p_x_change = x_change; + return sel_change || x_change || result; + } + + void UpdateScroll(int rows) + { + int count = (int)list.size(); + if (count <= rows) { scroll = 0; return; } + if (scroll == -1) { scroll = sel - rows/2; scroll = (scroll < 0 ? 0 : scroll > count - rows ? count - rows : scroll); return; } + if (sel < scroll+ 4) scroll = (sel < 4 ? 0 : sel - 4); + if (sel > scroll+rows-5) scroll = (sel > count - 5 ? count - rows : sel - rows + 5); + } + + void UpdateHeld(void(*input)(DBP_Event_Type, int, int)) + { + if (held_event == _DBPET_MAX) return; + Bit32u t = DBP_GetTicks(); + if ((Bit32s)(t - held_ticks) < 60) return; + held_ticks = (t - held_ticks > 120 ? t : held_ticks + 60); + input(DBPET_KEYDOWN, (int)held_key, 1); + } +}; + static void DBP_PureMenuProgram(Program** make) { static struct Menu* menu; + static DBP_MenuState::ItemType last_result; + static Bit16s last_info; - struct FakeBatch : BatchFile + struct BatchFileRun : BatchFile { - int count; - std::string exe; - FakeBatch(std::string& _exe) : BatchFile(first_shell,"Z:\\AUTOEXEC.BAT","",""), count(0) { std::swap(exe, _exe); } + BatchFileRun(std::string& _exe) : BatchFile(first_shell,"Z:\\AUTOEXEC.BAT","","") { std::swap(filename, _exe); } virtual bool ReadLine(char * line) { - const char *p = exe.c_str(), *f = strrchr(p, '\\') + 1, *fext; - switch (count++) + const char *p = filename.c_str(), *f = strrchr(p, '\\') + 1, *fext; + switch (location++) { case 0: - memcpy(line + 0, "@ :\n", 5); - line[1] = p[0]; - break; - case 1: + DOS_SetDrive(p[0]-'A'); memcpy(line + 0, "@cd ", 4); memcpy(line + 4, p + 2, (f - (f == p + 3 ? 0 : 1) - p - 2)); memcpy(line + 4 + (f - (f == p + 3 ? 0 : 1) - p - 2), "\n", 2); break; - case 2: + case 1: { bool isbat = ((fext = strrchr(f, '.')) && !strcasecmp(fext, ".bat")); int call_cmd_len = (isbat ? 5 : 0), flen = (int)strlen(f); @@ -964,8 +1675,9 @@ static void DBP_PureMenuProgram(Program** make) memcpy(line+call_cmd_len+1+flen, "\n", 2); break; } - case 3: - memcpy(line, "@Z:PUREMENU -FINISH\n", 21); + case 2: + memcpy(line, "@Z:PUREMENU", 11); + memcpy(line+11, " -FINISH\n", 10); delete this; break; } @@ -973,152 +1685,310 @@ static void DBP_PureMenuProgram(Program** make) } }; - struct Menu : Program + struct BatchFileBoot : BatchFile { - Menu() : result(0), sel(0), exe_count(0), fs_count(0), scroll(0), mousex(0), mousey(0), joyx(0), joyy(0), init_autosel(0), init_autoskip(0), autoskip(0), - have_autoboot(false), use_autoboot(false), multidrive(false), open_ticks(DBP_GetTicks()) { } + BatchFileBoot(char drive) : BatchFile(first_shell,"Z:\\AUTOEXEC.BAT","","") { file_handle = drive; } + + virtual bool ReadLine(char * line) + { + if (location++) + { + memcpy(line, "@PAUSE\n", 8); + if (location > 2) { last_result = DBP_MenuState::IT_NONE; DBP_OnBIOSReboot(); } + return true; + } + memcpy(line, "@Z:BOOT -l \n", 14); + line[11] = (char)file_handle; // drive letter + if (machine == MCH_PCJR && file_handle == 'A' && !dbp_images.empty()) + { + // The path to the image needs to be passed to boot for pcjr carts + const std::string& imgpath = dbp_images[dbp_disk_image_index].path; + line[12] = ' '; + memcpy(line+13, imgpath.c_str(), imgpath.size()); + memcpy(line+13+imgpath.size(), "\n", 2); + } + return true; + } + + static void BootImage(char want_machine, bool have_iso) + { + if (dbp_last_machine != want_machine) + { + dbp_reboot_machine = want_machine; + DBP_OnBIOSReboot(); + return; + } + + if (!dbp_images.empty()) + { + DBP_Mount(); // make sure something is mounted + + // If hard disk image was mounted to D:, swap it to be the bootable C: drive + std::swap(imageDiskList['D'-'A'], imageDiskList['C'-'A']); + + // If there is no mounted hard disk image but a D: drive, setup the CDROM IDE controller + if (!imageDiskList['C'-'A'] && Drives['D'-'A']) + IDE_SetupControllers(have_iso ? 'D' : 0); + } + + if (first_shell->bf) delete first_shell->bf; + first_shell->bf = new BatchFileBoot(imageDiskList['A'-'A'] ? 'A' : 'C'); + } + + static bool BootOSMountIMG(char drive, const char* path, const char* type, bool needwritable, bool complainnotfound) + { + FILE* raw_file_h = NULL; + if (needwritable && (raw_file_h = fopen_wrap(path, "rb+")) != NULL) goto openok; + if ((raw_file_h = fopen_wrap(path, "rb")) == NULL) + { + if (complainnotfound) + retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", type, path, ""); + return false; + } + if (needwritable) + { + retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", type, path, " (file is read-only!)"); + fclose(raw_file_h); + return false; + } + openok: + DOS_File* df = new rawFile(raw_file_h, needwritable); + df->AddRef(); + imageDiskList[drive-'A'] = new imageDisk(df, "", 0, true); + imageDiskList[drive-'A']->Set_GeometryForHardDisk(); + return true; + } + + static void BootOS(DBP_MenuState::ItemType result, Bit16s info, bool have_iso, bool isBiosReboot) + { + // Make sure we have at least 32 MB of RAM, if not set it to 64 + if ((MEM_TotalPages() / 256) < 32) + { + dbp_reboot_set64mem = true; + DBP_OnBIOSReboot(); + return; + } + + std::string path; + if (result == DBP_MenuState::IT_BOOTOS) + { + path = DBP_GetSaveFile(SFT_SYSTEMDIR).append(dbp_osimages[info]); + } + else if (info) //IT_INSTALLOS + { + const char* filename; + path = DBP_GetSaveFile(SFT_NEWOSIMAGE, &filename); + + // Create a new empty hard disk image of the requested size + memoryDrive* memDrv = new memoryDrive(); + DBP_SetDriveLabelFromContentPath(memDrv, path.c_str(), 'C', filename, path.c_str() + path.size() - 3); + imageDisk* memDsk = new imageDisk(memDrv, (Bit32u)(info*8)); + Bit32u heads, cyl, sect, sectSize; + memDsk->Get_Geometry(&heads, &cyl, §, §Size); + FILE* f = fopen_wrap(path.c_str(), "wb"); + if (!f) { retro_notify(0, RETRO_LOG_ERROR, "Unable to open %s file: %s%s", "OS image", path.c_str(), " (create file failed)"); return; } + for (Bit32u i = 0, total = heads * cyl * sect; i != total; i++) { Bit8u data[512]; memDsk->Read_AbsoluteSector(i, data); fwrite(data, 512, 1, f); } + fclose(f); + delete memDsk; + delete memDrv; + + // If using system directory index cache, append the new OS image to that now + if (dbp_system_cached) + if (FILE* fc = fopen_wrap(DBP_GetSaveFile(SFT_SYSTEMDIR).append("DOSBoxPureMidiCache.txt").c_str(), "a")) + { fprintf(fc, "%s\n", filename); fclose(fc); } + + // Set last_info to this new image to support BIOS rebooting with it + last_result = DBP_MenuState::IT_BOOTOS; + last_info = (Bit16s)dbp_osimages.size(); + dbp_osimages.emplace_back(filename); + } + + if (!path.empty()) + { + // When booting an external disk image as C:, use whatever is C: in DOSBox DOS as the second hard disk in the booted OS (it being E: in Drives[] doesn't matter) + char newC = ((have_iso || DBP_IsMounted('D')) ? 'E' : 'D'); // alternative would be to do DBP_Remount('D', 'E'); and always use 'D' + if (imageDiskList['C'-'A']) + imageDiskList[newC-'A'] = imageDiskList['C'-'A']; + else if (!BootOSMountIMG(newC, (dbp_content_path + ".img").c_str(), "D: drive image", true, false) && Drives['C'-'A']) + { + Bit32u save_hash = 0; + DBP_SetDriveLabelFromContentPath(Drives['C'-'A'], dbp_content_path.c_str(), 'C', NULL, NULL, true); + std::string save_path = DBP_GetSaveFile(SFT_VIRTUALDISK, NULL, &save_hash); + imageDiskList[newC-'A'] = new imageDisk(Drives['C'-'A'], atoi(retro_get_variable("dosbox_pure_bootos_dfreespace", "1024")), save_path.c_str(), save_hash, &dbp_vdisk_filter); + } + + static char ramdisk; // static variable so it sticks across bios reboots + if (!ramdisk || !isBiosReboot) ramdisk = retro_get_variable("dosbox_pure_bootos_ramdisk", "false")[0]; + if (result == DBP_MenuState::IT_INSTALLOS) ramdisk = 'f'; // must be false while installing os + + // Now mount OS hard disk image as C: drive + BootOSMountIMG('C', path.c_str(), "OS image", (ramdisk != 't'), true); + } + else if (!imageDiskList['C'-'A'] && Drives['C'-'A']) + { + // Running without hard disk image uses the DOS C: drive as a read-only C: hard disk + imageDiskList['C'-'A'] = new imageDisk(Drives['C'-'A'], 0); + } + + // Try reading a boot disk image off from an ISO file + Bit8u* bootdisk_image; Bit32u bootdisk_size; + if (!Drives['A'-'A'] && Drives['D'-'A'] && dynamic_cast(Drives['D'-'A']) && ((isoDrive*)(Drives['D'-'A']))->CheckBootDiskImage(&bootdisk_image, &bootdisk_size)) + { + Drives['Y'-'A'] = new memoryDrive(); + DriveCreateFile(Drives['Y'-'A'], "CDBOOT.IMG", bootdisk_image, bootdisk_size); + free(bootdisk_image); + DBP_Mount(DBP_AppendImage("$Y:\\CDBOOT.IMG", false), true); // this mounts the image as the A drive + //// Generate autoexec bat that starts the OS setup program? + //DriveCreateFile(Drives['A'-'A'], "CONFIG.SYS", (const Bit8u*)"", 0); + //DriveCreateFile(Drives['A'-'A'], "AUTOEXEC.BAT", (const Bit8u*)"DIR\r\n", 5); + } + + // Setup IDE controllers for the hard drives and one CDROM drive (if any CDROM image is mounted) + IDE_SetupControllers(have_iso ? 'D' : 0); + + // Switch cputype to highest feature set (needed for Windows 9x) and increase real mode CPU cycles + Section* section = control->GetSection("cpu"); + section->ExecuteDestroy(false); + section->HandleInputline("cputype=pentium_slow"); + if (retro_get_variable("dosbox_pure_bootos_forcenormal", "false")[0] == 't') section->HandleInputline("core=normal"); + section->ExecuteInit(false); + if (Property* p = section->GetProp("cputype")) p->OnChangedByConfigProgram(); + if (dbp_content_year < 1993) { dbp_content_year = 1993; DBP_SetRealModeCycles(); } + + if (first_shell->bf) delete first_shell->bf; + first_shell->bf = new BatchFileBoot(result == DBP_MenuState::IT_BOOTOS ? 'C' : 'A'); + } + }; + struct Menu : Program, DBP_MenuState + { + Menu() : exe_count(0), fs_count(0), iso_count(0), init_autoboothash(0), autoskip(0), have_autoboot(false), use_autoboot(false), multidrive(false), bootimg(false) { } ~Menu() {} - int result, sel, exe_count, fs_count, scroll, mousex, mousey, joyx, joyy, init_autosel, init_autoskip, autoskip; - bool have_autoboot, use_autoboot, multidrive; - Bit32u open_ticks; - std::vector list; + int exe_count, fs_count, iso_count, init_autoboothash, autoskip; + bool have_autoboot, use_autoboot, multidrive, bootimg; enum { ATTR_HEADER = 0x0B, //cyan in color, white in hercules ATTR_NORMAL = 0x0E, //yellow in color, white in hercules ATTR_HIGHLIGHT = 0x78, //dark gray on gray in color, white on gray in hercules + ATTR_WARN = 0x0A, //light green in color, white in hercules ATTR_WHITE = 0x0F, - - RESULT_LAUNCH = 1, - RESULT_COMMANDLINE = 2, - RESULT_SHUTDOWN = 3, }; void RefreshFileList(bool initial_scan) { list.clear(); - exe_count = fs_count = 0; - size_t old_images_size = dbp_images.size(); - int old_sel = sel; - // Scan drive C first, any others after - sel = ('C'-'A'); - DriveFileIterator(Drives[sel], FileIter, (Bitu)this); - if (fs_count) + exe_count = fs_count = 0, iso_count = 0; int img_count = 0; + + for (unsigned i = 0; i != (unsigned)dbp_images.size(); i++) { - for (int i = 0; i != fs_count; i++) - { - // Filter image files that have the same name as a cue file - const char *pEntry = list[i].c_str(), *pExt = strrchr(pEntry, '.'); - if (!pExt || (strcasecmp(pExt, ".cue") && strcasecmp(pExt, ".ins"))) continue; - for (int j = fs_count; j--;) - { - if (i == j || strncasecmp(list[j].c_str(), pEntry, pExt - pEntry + 1)) continue; - list.erase(list.begin() + j); - if (i > j) i--; - fs_count--; - } - } - for (int i = 0; i != fs_count; i++) - DBP_AppendImage(list[i].c_str(), true); + list.emplace_back(IT_MOUNT, (Bit16s)i); + DBP_GetImageLabel(i, list.back().str); + ((list.back().str[list.back().str.size()-2]|0x25) == 'm' ? img_count : iso_count)++; //0x25 recognizes IMG/IMA/VHD but not ISO/CUE/INS + fs_count++; + } + if (!bootimg) for (imageDisk* dsk : imageDiskList) bootimg |= !!dsk; + if (bootimg) + { + list.emplace_back(IT_BOOTIMGLIST, 0, "[ Boot from Disk Image ]"); + fs_count++; + } + if (dbp_osimages.size()) + { + list.emplace_back(IT_BOOTOSLIST, 0, "[ Run Installed Operating System ]"); + fs_count++; } - if (initial_scan && !old_images_size && dbp_images.size()) + if ((Drives['D'-'A'] && dynamic_cast(Drives['D'-'A']) && ((isoDrive*)(Drives['D'-'A']))->CheckBootDiskImage()) || (img_count == 1 && iso_count == 1)) { - dbp_disk_eject_state = false; - dbp_disk_image_index = 0; - DBP_Mount(dbp_images[0].c_str(), false, false); + list.emplace_back(IT_INSTALLOSSIZE, 0, "[ Boot and Install New Operating System ]"); + fs_count++; } + if (fs_count) list.emplace_back(IT_NONE); + + // Scan drive C first, any others after + int old_sel = sel; + sel = ('C'-'A'); + DriveFileIterator(Drives[sel], FileIter, (Bitu)this); for (sel = 0; sel != ('Z'-'A'); sel++) { if (sel == ('C'-'A') || !Drives[sel]) continue; DriveFileIterator(Drives[sel], FileIter, (Bitu)this); multidrive = true; } - sel = (list.empty() ? 2 : old_sel); - if (!initial_scan) return; - char autostr[DOS_PATHLENGTH + 32] = {0,1}; + if (exe_count) list.emplace_back(IT_NONE); + + sel = (fs_count && exe_count ? fs_count + 1 : 0); + + if (list.empty()) { list.emplace_back(IT_NONE, 0, "No executable file found"); list.emplace_back(IT_NONE); sel = 2; } + list.emplace_back(IT_COMMANDLINE, 0, "Go to Command Line"); + list.emplace_back(IT_EXIT, 0, "Exit"); + if (!initial_scan) { if (old_sel < (int)list.size()) sel = old_sel; return; } + } + + void ReadAutoBoot(bool isBiosReboot) + { + char autostr[DOS_PATHLENGTH + 32] = {0,1}, *pautostr = autostr; + Bit16u autostrlen = DriveReadFileBytes(Drives['C'-'A'], "AUTOBOOT.DBP", (Bit8u*)autostr, (Bit16u)(sizeof(autostr) - 1)); + autostr[autostrlen] = '\0'; + have_autoboot = (autostrlen != 0); if (have_autoboot) { - Bit16u autostrlen = (Bit16u)(sizeof(autostr) - 1); - DOS_File *autobootfile = nullptr; - Drives['C'-'A']->FileOpen(&autobootfile, (char*)"AUTOBOOT.DBP", OPEN_READ); - autobootfile->AddRef(); - autobootfile->Read((Bit8u*)autostr, &autostrlen); - autobootfile->Close(); - delete autobootfile; - autostr[autostrlen] = '\0'; - char *nameend = strchr(autostr, '\n'), *skip = nameend; - while (nameend > autostr && *nameend <= ' ') nameend--; + if (autostr[1] == '*' && !isBiosReboot) + { + if (autostr[0] == 'O') { GoToSubMenu(IT_BOOTOSLIST); pautostr += 2; } + else if (autostr[0] == 'I') { GoToSubMenu(IT_BOOTIMGLIST); pautostr += 2; } + } + char *nameend = strchr(pautostr, '\n'), *skip = nameend; while (skip && *skip && *skip <= ' ') skip++; + if (skip) autoskip = atoi(skip); + if (isBiosReboot) return; // only need autoskip + while (nameend > pautostr && *nameend <= ' ') nameend--; if (nameend) nameend[1] = '\0'; - if (skip) init_autoskip = autoskip = atoi(skip); } else if (strrchr(dbp_content_path.c_str(), '#')) { - memcpy(autostr, "C:\\", 3); - safe_strncpy(autostr + 3, strrchr(dbp_content_path.c_str(), '#') + 1, DOS_PATHLENGTH + 16); + memcpy(pautostr, "C:\\", 3); + safe_strncpy(pautostr + 3, strrchr(dbp_content_path.c_str(), '#') + 1, DOS_PATHLENGTH + 16); } - if (autostr[0]) + if (pautostr[0]) { - for (std::string& name : list) + for (Item& it : list) { - if (name != autostr) continue; + if ((it.type != IT_EXEC && it.type != IT_BOOTOS && it.type != IT_BOOTIMG) || it.str != pautostr) continue; use_autoboot = have_autoboot = true; - init_autosel = sel = (int)(&name - &list[0]); + sel = (int)(&it - &list[0]); + init_autoboothash = AutoBootHash(); return; } - init_autoskip = autoskip = 0; } - sel = fs_count; + } + + int AutoBootHash() + { + return 1 | ((14 * autoskip) ^ (254 * sel) ^ (4094 * (int)list[sel].type)); } static void FileIter(const char* path, bool is_dir, Bit32u size, Bit16u, Bit16u, Bit8u, Bitu data) { if (is_dir) return; Menu* m = (Menu*)data; - if (m->sel == ('C'-'A') && !memcmp(path, "AUTOBOOT.DBP", sizeof("AUTOBOOT.DBP"))) - { - m->have_autoboot = true; - return; - } const char* fext = strrchr(path, '.'); - if (!fext) return; - bool isEXE = (!strcasecmp(fext, ".exe") || !strcasecmp(fext, ".com") || !strcasecmp(fext, ".bat")); - bool isFS = (!isEXE && m->sel == ('C'-'A') && (!strcasecmp(fext, ".iso") || !strcasecmp(fext, ".cue") || !strcasecmp(fext, ".ins") || !strcasecmp(fext, ".img") || !strcasecmp(fext, ".ima") || !strcasecmp(fext, ".vhd"))); - if (!isEXE && !isFS) return; - if (isFS && !strncasecmp(fext + 1, "im", 2) && (size < 163840 || (size <= 2949120 && (size % 20480)))) return; //validate floppy images - if (isFS && !strcasecmp(fext, ".ins")) - { - // Make sure this is an actual CUE file with an INS extension - if (size >= 16384) return; - Bit8u cmd[6]; - Bit16u cmdlen = (Bit16u)sizeof(cmd); - DOS_File *insfile = nullptr; - Drives['C'-'A']->FileOpen(&insfile, (char*)path, OPEN_READ); - insfile->AddRef(); - insfile->Read(cmd, &cmdlen); - insfile->Close(); - delete insfile; - if (cmdlen != sizeof(cmd) || memcmp(cmd, "FILE \"", sizeof(cmd))) return; - } - (isEXE ? m->exe_count : m->fs_count)++; - - int insert_index; + if (!fext++ || (strcmp(fext, "EXE") && strcmp(fext, "COM") && strcmp(fext, "BAT"))) return; + m->exe_count++; + std::string entry; - entry.reserve(4 + (fext - path) + 4); - if (isFS) entry += '$'; - entry += ('A' + m->sel); - entry += ':'; - entry += '\\'; - entry += path; + entry.reserve(3 + (fext - path) + 3 + 1); + (((entry += ('A' + m->sel)) += ':') += '\\') += path; // insert into menu list ordered alphabetically - for (insert_index = 0; insert_index != (int)m->list.size(); insert_index++) - if (m->list[insert_index] > entry) { break; } - m->list.insert(m->list.begin() + insert_index, std::string()); - std::swap(m->list[insert_index], entry); + Item item = { IT_EXEC }; + int insert_index = (m->fs_count ? m->fs_count + 1 : 0); + for (; insert_index != (int)m->list.size(); insert_index++) + if (m->list[insert_index].str > entry) break; + m->list.insert(m->list.begin() + insert_index, item); + std::swap(m->list[insert_index].str, entry); } static void DrawText(Bit16u x, Bit16u y, const char* txt, Bit8u attr) @@ -1131,7 +2001,7 @@ static void DBP_PureMenuProgram(Program** make) } } - void RedrawScreen() + void RedrawScreen(bool callDrawMenu = true) { ClearScreen(); INT10_SetCursorShape(0, 0); @@ -1166,64 +2036,47 @@ static void DBP_PureMenuProgram(Program** make) //// Test all font characters //for (int i = 0; i != 256; i++) { char bla[2] { (char)i, 0 }; DrawText(i, 2, bla, ATTR_HEADER); } - DrawMenu(); + if (callDrawMenu) DrawMenu(); } - void DrawMenu(int sel_change = 0) + void DrawMenu() { - int mid = (int)CurMode->twidth / 2; - int maxy = (int)CurMode->theight - 5; - int count = (int)list.size() + 3, min = (count == 3 ? 1 : 0); - int starty = (int)(count >= maxy-1 ? 3 : 4 + min); - if (sel < min) sel = count - 1; - if (sel >= count) sel = 0; - if (sel == count-3) sel += (sel_change > 0 ? 1 : -1); - if (count > maxy) - { - if (sel < scroll+ 4) scroll = (sel < 4 ? 0 : sel - 4); - if (sel > scroll+maxy-5) scroll = (sel > count - 5 ? count - maxy : sel - maxy + 5); - } - - if (count == 3) DrawText(mid - 12, starty - 1, "No executable file found", ATTR_HEADER); + int mid = (int)CurMode->twidth / 2, rows = (int)CurMode->theight - 5, count = (int)list.size(); + int starty = (int)(count >= rows-1 ? 3 : (list[0].type == IT_NONE ? 5 : 4)); + UpdateScroll(rows); bool autostart_info = false; - for (int i = scroll; i != count && i != (scroll + maxy); i++) + for (int i = scroll; i != count && i != (scroll + rows); i++) { - int y = starty + i - scroll; + const Item& item = list[i]; + int y = starty + i - scroll, strlen = (int)item.str.size(); for (Bit16u x = 0; x != CurMode->twidth; x++) DrawText(x, y, " ", 0); - if (i >= count - 3) - { - if (i == count - 2) DrawText(mid - 9, y, "Go to command line", (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); - if (i == count - 1) DrawText(mid - 2, y, "Exit", (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); - continue; - } - int off = (multidrive ? 0 : 3), len = (int)list[i].size() - off; - const char* line = list[i].c_str(), *lext = + line + list[i].length() - 4; - if (line[0] == '$') // mountable file system + if (item.type == IT_MOUNT) // mountable file system { - bool mounted = (!dbp_disk_eject_state && dbp_images[dbp_disk_image_index] == list[i]); - int lbllen = (mounted ? sizeof("UNMOUNT") : sizeof("MOUNT")); - len += lbllen - 1; + bool mounted = dbp_images[item.info].mounted; + int lbllen = (mounted ? sizeof("UNMOUNT") : sizeof("MOUNT")), len = strlen + lbllen; DrawText(mid - len / 2, y, (mounted ? "UNMOUNT " : "MOUNT "), (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); - DrawText(mid - len / 2 + lbllen, y, line + 1 + off, (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); + DrawText(mid - len / 2 + lbllen, y, item.str.c_str(), (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); } - else + else if (item.type == IT_EXEC || item.type == IT_BOOTOS || item.type == IT_BOOTIMG) { - DrawText(mid - len / 2, y, line + off, (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); + int off = ((item.type != IT_EXEC || multidrive) ? 0 : 3), len = strlen - off; + DrawText(mid - len / 2, y, item.str.c_str() + off, (i == sel ? ATTR_HIGHLIGHT : ATTR_NORMAL)); if (i != sel) continue; DrawText(mid - len / 2 - 2, y, "*", ATTR_WHITE); DrawText(mid - len / 2 + len + 1, y, (use_autoboot ? "* [SET AUTO START]" : "*"), ATTR_WHITE); autostart_info = use_autoboot; } + else DrawText(mid - strlen / 2, y, item.str.c_str(), (i == sel ? ATTR_HIGHLIGHT : (item.type == IT_NONE && item.info ? item.info : ATTR_NORMAL))); } if (scroll) { int y = starty, from = (mid - 10), to = (mid + 10); for (Bit16u x = 0; x != CurMode->twidth; x++) DrawText(x, y, (x >= from && x <= to ? "\x1E" : " "), ATTR_NORMAL); } - if (scroll + maxy < count) + if (scroll + rows < count) { - int y = starty + maxy - 1, from = (mid - 10), to = (mid + 10); + int y = starty + rows - 1, from = (mid - 10), to = (mid + 10); for (Bit16u x = 0; x != CurMode->twidth; x++) DrawText(x, y, (x >= from && x <= to ? "\x1F" : " "), ATTR_NORMAL); } @@ -1237,119 +2090,168 @@ static void DBP_PureMenuProgram(Program** make) } } - static void HandleInput(DBP_Event& e) + void GoToSubMenu(ItemType type) { - int sel_change = 0, auto_change = 0; - switch (e.type) - { - case DBPET_KEYDOWN: - switch ((KBD_KEYS)e.val) - { - case KBD_left: case KBD_kp4: auto_change--; break; - case KBD_right: case KBD_kp6: auto_change++; break; - case KBD_up: case KBD_kp8: sel_change--; break; - case KBD_down: case KBD_kp2: sel_change++; break; - case KBD_pageup: sel_change -= 10; break; - case KBD_pagedown: sel_change += 10; break; - case KBD_enter: case KBD_kpenter: menu->result = RESULT_LAUNCH; break; - case KBD_esc: menu->result = RESULT_SHUTDOWN; break; - } - break; - case DBPET_MOUSEXY: - menu->mousex += e.xy[0]; - menu->mousey += e.xy[1]; - if (abs(menu->mousex) > 1000) { auto_change = (menu->mousex > 0 ? 1 : -1); menu->mousex = menu->mousey = 0; } - while (menu->mousey < -300) { sel_change--; menu->mousey += 300; menu->mousex = 0; } - while (menu->mousey > 300) { sel_change++; menu->mousey -= 300; menu->mousex = 0; } - break; - case DBPET_MOUSEDOWN: - if (e.val == 0) menu->result = RESULT_LAUNCH; //left - if (e.val == 1) menu->result = RESULT_SHUTDOWN; //right - break; - case DBPET_JOY1X: - if (menu->joyy < 16000 && e.val >= 16000) auto_change++; - if (menu->joyy > -16000 && e.val <= -16000) auto_change--; - menu->joyx = e.val; - break; - case DBPET_JOY1Y: - if (menu->joyy < 16000 && e.val >= 16000) sel_change++; - if (menu->joyy > -16000 && e.val <= -16000) sel_change--; - menu->joyy = e.val; - break; - case DBPET_JOY1DOWN: - case DBPET_JOY2DOWN: - menu->result = RESULT_LAUNCH; - break; - case DBPET_MOUNT: - case DBPET_UNMOUNT: - menu->RefreshFileList(false); - menu->RedrawScreen(); - break; - } - if (menu->result && (DBP_GetTicks() - menu->open_ticks) < 200U) menu->result = 0; // ignore already pressed buttons when opening - if (menu->sel >= (int)menu->list.size()) + for (const Item& it : list) { - auto_change = 0; + if (it.type != type) continue; + sel = (int)(&it - &list[0]); + open_ticks -= 1000; + HandleInput(DBPET_MOUSEDOWN, 0, 0); + return; } - else if (menu->result == RESULT_LAUNCH || auto_change) + DBP_ASSERT(false); + } + + void Input(DBP_Event_Type type, int val, int val2) + { + int auto_change; + if (!ProcessInput(type, val, val2, &auto_change) && type != DBPET_CHANGEMOUNTS) return; + + if (result || auto_change) { - const char* line = menu->list[menu->sel].c_str(), *lext = + line + menu->list[menu->sel].length() - 4; - bool isFS = (line[0] == '$'); // mountable file system - if (isFS) auto_change = 0; - if (isFS && menu->result == RESULT_LAUNCH) + const Item& item = list[sel]; + if (item.type != IT_EXEC && item.type != IT_BOOTOS && item.type != IT_BOOTIMG) auto_change = 0; + if (result == IT_MOUNT) { - unsigned image_index; - for (image_index = 0; image_index != (unsigned)dbp_images.size(); image_index++) - if (dbp_images[image_index] == menu->list[menu->sel]) - break; - bool was_ejected = dbp_disk_eject_state; - dbp_disk_eject_state = true; - if (dbp_disk_mount_letter && Drives[dbp_disk_mount_letter-'A'] && Drives[dbp_disk_mount_letter-'A']->UnMount() == 0) + if (dbp_images[item.info].mounted) + DBP_Unmount(dbp_images[item.info].drive); + else + DBP_Mount((unsigned)item.info, true); + result = IT_NONE; + type = DBPET_CHANGEMOUNTS; + } + else if (result == IT_BOOTIMGLIST) + { + if (!have_autoboot && control->GetSection("dosbox")->GetProp("machine")->getChange() == Property::Changeable::OnlyByConfigProgram) { - Drives[dbp_disk_mount_letter-'A'] = 0; - mem_writeb(Real2Phys(dos.tables.mediaid)+(dbp_disk_mount_letter-'A')*9,0); + // Machine property was fixed by DOSBOX.CONF and cannot be modified here, so automatically boot the image as is + result = IT_BOOTIMG; + return; } - if (was_ejected || image_index != dbp_disk_image_index) + list.clear(); + list.emplace_back(IT_NONE, ATTR_HEADER, "Select Boot System Mode"); + list.emplace_back(IT_NONE); + list.emplace_back(IT_BOOTIMG, 's', "SVGA (Super Video Graphics Array)"); + list.emplace_back(IT_BOOTIMG, 'v', "VGA (Video Graphics Array)"); + list.emplace_back(IT_BOOTIMG, 'e', "EGA (Enhanced Graphics Adapter"); + list.emplace_back(IT_BOOTIMG, 'c', "CGA (Color Graphics Adapter)"); + list.emplace_back(IT_BOOTIMG, 't', "Tandy (Tandy Graphics Adapter"); + list.emplace_back(IT_BOOTIMG, 'h', "Hercules (Hercules Graphics Card)"); + list.emplace_back(IT_BOOTIMG, 'p', "PCjr"); + const std::string& img = (!dbp_images.empty() ? dbp_images[dbp_disk_image_index].path : list[1].str); + bool isPCjrCart = (img.size() > 3 && (img[img.size()-3] == 'J' || img[img.size()-2] == 'T')); + for (const Item& it : list) + if (it.info == (isPCjrCart ? 'p' : dbp_last_machine)) + sel = (int)(&it - &list[0]); + scroll = 0; + result = IT_NONE; + RedrawScreen(false); + } + else if (result == IT_INSTALLOSSIZE) + { + const char* filename; + std::string osimg = DBP_GetSaveFile(SFT_NEWOSIMAGE, &filename); + list.clear(); + list.emplace_back(IT_NONE, ATTR_HEADER, "Hard Disk Size For Install"); + list.emplace_back(IT_NONE); + list.emplace_back(IT_NONE, ATTR_WARN, "Create a new hard disk image in the following location:"); + if (filename > &osimg[0]) { list.emplace_back(IT_NONE, ATTR_WARN); list.back().str.assign(&osimg[0], filename - &osimg[0]); } + list.emplace_back(IT_NONE, ATTR_WARN, filename); + list.emplace_back(IT_NONE); + char buf[128]; + for (Bit16s sz = 16/8; sz <= 64*1024/8; sz += (sz < 4096/8 ? sz : (sz < 32*1024/8 ? 4096/8 : 8192/8))) { - dbp_disk_eject_state = false; - dbp_disk_image_index = image_index; - DBP_Mount(dbp_images[image_index].c_str(), false, false); + list.emplace_back(IT_INSTALLOS, sz, (sprintf(buf, "%3d %cB Hard Disk", (sz < 1024/8 ? sz*8 : sz*8/1024), (sz < 1024/8 ? 'M' : 'G')),buf)); + if (sz == 2048/8) + { + list.emplace_back(IT_NONE); + list.emplace_back(IT_NONE, ATTR_WARN, "Hard disk images over 2GB will be formatted with FAT32"); + list.emplace_back(IT_NONE, ATTR_WARN, "NOTE: FAT32 is only supported in Windows 95C and newer"); + list.emplace_back(IT_NONE); + } } - menu->result = 0; - menu->RefreshFileList(false); - menu->RedrawScreen(); + list.emplace_back(IT_NONE); + list.emplace_back(IT_INSTALLOS, 0, "[ Boot Only Without Creating Hard Disk Image ]"); + sel = (filename > &osimg[0] ? 11 : 10); + scroll = 0; + result = IT_NONE; + RedrawScreen(false); } + else if (result == IT_BOOTOSLIST) + { + list.clear(); + const char* filename; + std::string savefile = DBP_GetSaveFile(SFT_VIRTUALDISK, &filename); + + list.emplace_back(IT_NONE, ATTR_HEADER, "Select Operating System Disk Image"); + list.emplace_back(IT_NONE); + for (const std::string& im : dbp_osimages) + { list.emplace_back(IT_BOOTOS, (Bit16s)(&im - &dbp_osimages[0])); list.back().str.assign(im.c_str(), im.size()-4); } + if (dbp_system_cached) { list.emplace_back(IT_NONE); list.emplace_back(IT_NONE, ATTR_WARN, "To Refresh: Audio Options > MIDI Output > Scan System Directory"); } + list.emplace_back(IT_NONE); + list.emplace_back(IT_NONE, ATTR_WARN, "Changes made to the D: drive will be stored in the following location:"); + if (filename > &savefile[0]) { list.emplace_back(IT_NONE, ATTR_WARN); list.back().str.assign(&savefile[0], filename - &savefile[0]); } + list.emplace_back(IT_NONE, ATTR_WARN, filename); + sel = 2; + scroll = 0; + result = IT_NONE; + RedrawScreen(false); + } + else if (result == IT_EXIT && item.type != IT_EXIT) + { + // Go to top menu (if in submenu) or refresh list + type = DBPET_CHANGEMOUNTS; + sel = scroll = 0; + result = IT_NONE; + } + } + if (!result) + { + if (use_autoboot && auto_change > 0) autoskip += (autoskip < 50 ? 10 : (autoskip < 150 ? 25 : (autoskip < 300 ? 50 : 100))); + if (!use_autoboot && auto_change > 0) use_autoboot = true; + if (auto_change < 0) autoskip -= (autoskip <= 50 ? 10 : (autoskip <= 150 ? 25 : (autoskip <= 300 ? 50 : 100))); + if (autoskip < 0) { use_autoboot = false; autoskip = 0; } + if (type == DBPET_CHANGEMOUNTS) + { + RefreshFileList(false); + RedrawScreen(false); + } + DrawMenu(); } - if (!menu->result && (sel_change || auto_change)) + else if (have_autoboot && !use_autoboot) { - menu->sel += sel_change; - if (menu->use_autoboot && auto_change > 0) menu->autoskip += (menu->autoskip < 50 ? 10 : (menu->autoskip < 150 ? 25 : (menu->autoskip < 300 ? 50 : 100))); - if (!menu->use_autoboot && auto_change > 0) menu->use_autoboot = true; - if (auto_change < 0) menu->autoskip -= (menu->autoskip <= 50 ? 10 : (menu->autoskip <= 150 ? 25 : (menu->autoskip <= 300 ? 50 : 100))); - if (menu->autoskip < 0) { menu->use_autoboot = false; menu->autoskip = 0; } - menu->DrawMenu(sel_change); + Drives['C'-'A']->FileUnlink((char*)"AUTOBOOT.DBP"); } - if (menu->result == RESULT_LAUNCH) + else if (use_autoboot && (!have_autoboot || init_autoboothash != AutoBootHash()) && (result == IT_EXEC || result == IT_BOOTIMG || result == IT_BOOTOS)) { - if (menu->sel == menu->list.size() + 1) menu->result = RESULT_COMMANDLINE; - if (menu->sel == menu->list.size() + 2) menu->result = RESULT_SHUTDOWN; + char autostr[DOS_PATHLENGTH + 32], *pautostr = autostr; + if (result != IT_EXEC) { autostr[0] = (result == IT_BOOTIMG ? 'I' : 'O'); autostr[1] = '*'; pautostr = autostr + 2; } + char* autoend = pautostr + snprintf(pautostr, (&autostr[sizeof(autostr)] - pautostr), "%s", list[sel].str.c_str()); + if (autoskip) autoend += snprintf(autoend, (&autostr[sizeof(autostr)] - autoend), "\r\n%d", autoskip); + if (!DriveCreateFile(Drives['C'-'A'], "AUTOBOOT.DBP", (Bit8u*)autostr, (Bit32u)(autoend - autostr))) { DBP_ASSERT(false); } } } - static void CheckAnyPress(DBP_Event& e) + static void HandleInput(DBP_Event_Type type, int val, int val2) + { + menu->Input(type, val, val2); + } + + static void CheckAnyPress(DBP_Event_Type type, int val, int val2) { - switch (e.type) + switch (type) { case DBPET_KEYDOWN: case DBPET_MOUSEDOWN: case DBPET_JOY1DOWN: case DBPET_JOY2DOWN: - if ((DBP_GetTicks() - dbp_lastmenuticks) > 300) menu->result = 1; + if ((DBP_GetTicks() - dbp_lastmenuticks) > 300) menu->result = IT_EXEC; break; } } - bool IdleLoop(void(*input_intercept)(DBP_Event&), Bit32u tick_limit = 0) + bool IdleLoop(void(*input_intercept)(DBP_Event_Type, int, int), Bit32u tick_limit = 0) { DBP_KEYBOARD_ReleaseKeys(); // any unintercepted CALLBACK_* can set a key down dbp_gfx_intercept = NULL; @@ -1357,6 +2259,7 @@ static void DBP_PureMenuProgram(Program** make) while (!result && !first_shell->exit) { CALLBACK_Idle(); + if (input_intercept == HandleInput) UpdateHeld(HandleInput); if (tick_limit && DBP_GetTicks() >= tick_limit) first_shell->exit = true; } dbp_input_intercept = NULL; @@ -1376,8 +2279,11 @@ static void DBP_PureMenuProgram(Program** make) bool always_show_menu = (dbp_menu_time == (char)-1 || (on_finish && (DBP_GetTicks() - dbp_lastmenuticks) < 500)); dbp_lastmenuticks = DBP_GetTicks(); - RefreshFileList(true); + bool isBiosReboot = (dbp_biosreboot && (last_result == IT_BOOTIMG || last_result == IT_BOOTOS || last_result == IT_INSTALLOS)); + if (!isBiosReboot) RefreshFileList(true); + ReadAutoBoot(isBiosReboot); + #ifndef STATIC_LINKING if (on_finish && !always_show_menu && ((exe_count == 1 && fs_count <= 1) || use_autoboot)) { if (dbp_menu_time == 0) { first_shell->exit = true; return; } @@ -1390,8 +2296,10 @@ static void DBP_PureMenuProgram(Program** make) DrawText((Bit16u)(CurMode->twidth / 2 - 33), (Bit16u)(CurMode->theight - 2), "* GAME ENDED - EXITTING IN SECONDS - PRESS ANY KEY TO CONTINUE *", ATTR_HIGHLIGHT); DrawText((Bit16u)(CurMode->twidth / 2 - 33) + 27, (Bit16u)(CurMode->theight - 2), secs, ATTR_HIGHLIGHT); if (!IdleLoop(CheckAnyPress, DBP_GetTicks() + (dbp_menu_time * 1000))) return; - result = 0; + result = IT_NONE; } + #endif + if (on_finish) { // ran without auto start or only for a very short time (maybe crash), wait for user confirmation @@ -1399,61 +2307,51 @@ static void DBP_PureMenuProgram(Program** make) INT10_SetCursorPos((Bit8u)CurMode->twidth, (Bit8u)CurMode->theight, 0); DrawText((Bit16u)(CurMode->twidth / 2 - 33), (Bit16u)(CurMode->theight - 2), " * PRESS ANY KEY TO RETURN TO START MENU * ", ATTR_HIGHLIGHT); if (!IdleLoop(CheckAnyPress)) return; - result = 0; + result = IT_NONE; } - if (on_boot && !always_show_menu && ((exe_count == 1 && fs_count <= 1) || use_autoboot)) - result = RESULT_LAUNCH; - - if (on_boot && list.size() == 0 && !Drives['C'-'A'] && !Drives['A'-'A'] && !Drives['D'-'A']) - result = RESULT_COMMANDLINE; + // Show menu on image auto boot when there are EXE files (some games need to run a FIX.EXE before booting) + Bit16s info = 0; + if (isBiosReboot) + result = last_result, info = last_info, dbp_biosreboot = false; + else if (on_boot && !always_show_menu && ((exe_count == 1 && fs_count <= 1) || use_autoboot)) + result = list[sel].type, info = list[sel].info; + else if (on_boot && exe_count == 0 && fs_count == 0 && !Drives['C'-'A'] && !Drives['A'-'A'] && !Drives['D'-'A']) + result = IT_COMMANDLINE; if (!result) { RedrawScreen(); if (!IdleLoop(HandleInput)) return; ClearScreen(); + info = list[sel].info; } + else if (result != IT_COMMANDLINE && !autoskip) + ClearScreen(); - if (have_autoboot && !use_autoboot) - { - Drives['C'-'A']->FileUnlink((char*)"AUTOBOOT.DBP"); - } - - if (result == RESULT_LAUNCH) - { - if (use_autoboot && (!have_autoboot || init_autosel != sel || init_autoskip != autoskip)) - { - char autostr[DOS_PATHLENGTH + 32]; - char* autoend = autostr + snprintf(autostr, sizeof(autostr), "%s", list[sel].c_str()); - if (autoskip) autoend += snprintf(autoend, sizeof(autostr), "\r\n%d", autoskip); - Bit16u auto_length = (Bit16u)(autoend - autostr); - DOS_File *autobootfile; - Drives['C'-'A']->FileCreate(&autobootfile, (char*)"AUTOBOOT.DBP", DOS_ATTR_ARCHIVE); - autobootfile->AddRef(); - autobootfile->Write((Bit8u*)autostr, &auto_length); - autobootfile->Close(); - delete autobootfile; - DBP_ASSERT(auto_length == (Bit16u)(autoend - autostr)); - } + last_result = result; + last_info = info; - if (autoskip) - { - dbp_state = DBPSTATE_WAIT_FIRST_FRAME; - DBP_DOSBOX_Unlock(true, autoskip); - render.updating = false; //avoid immediate call to GFX_EndUpdate - } + if (autoskip) + DBP_UnlockSpeed(true, autoskip, true); + if (result == IT_EXEC) + { if (first_shell->bf) delete first_shell->bf; - first_shell->bf = new FakeBatch(list[sel]); + first_shell->bf = new BatchFileRun(list[sel].str); } - else if (result == RESULT_SHUTDOWN) - first_shell->exit = true; - else if (result == RESULT_COMMANDLINE) + else if (result == IT_BOOTIMG) { - if (Drives['C'-'A']) DOS_SetDrive('C'-'A'); - WriteOut("Type 'PUREMENU' to return to the start menu\n"); + BatchFileBoot::BootImage((char)info, (menu->iso_count > 0)); } + else if (result == IT_BOOTOS || result == IT_INSTALLOS) + { + BatchFileBoot::BootOS(result, info, (menu->iso_count > 0), isBiosReboot); + } + else if (result == IT_EXIT) + first_shell->exit = true; + else if (result == IT_COMMANDLINE) + WriteOut("Type 'PUREMENU' to return to the start menu\n"); dbp_lastmenuticks = DBP_GetTicks(); } }; @@ -1504,41 +2402,318 @@ static void DBP_PureRemountProgram(Program** make) { cmd->GetStringRemain(temp_line); const char* p1 = temp_line.c_str(), *p2 = (p1 ? strchr(p1, ' ') : NULL); - char drive1 = ( p1[0] && p1[1] == ':' ? (p1[0] >= 'A' && p1[0] <= 'Z' ? p1[0] : (p1[0] >= 'a' && p1[0] <= 'z' ? p1[0]-0x20 : 0)) : 0); - char drive2 = (p2 && p2[1] && p2[2] == ':' ? (p2[1] >= 'A' && p2[1] <= 'Z' ? p2[1] : (p2[1] >= 'a' && p2[1] <= 'z' ? p2[1]-0x20 : 0)) : 0); + char drive1 = ( p1[0] && p1[p1[1] == ':' ? 2 : 1] <= ' ' ? (p1[0] >= 'A' && p1[0] <= 'Z' ? p1[0] : (p1[0] >= 'a' && p1[0] <= 'z' ? p1[0]-0x20 : 0)) : 0); + char drive2 = (p2 && p2[1] && p2[p2[2] == ':' ? 3 : 2] <= ' ' ? (p2[1] >= 'A' && p2[1] <= 'Z' ? p2[1] : (p2[1] >= 'a' && p2[1] <= 'z' ? p2[1]-0x20 : 0)) : 0); if (!drive1) { WriteOut("Usage: REMOUNT [olddrive:] [newdrive:]\n"); return; } if (!drive2) { drive2 = drive1; drive1 = DOS_GetDefaultDrive()+'A'; } - if (!Drives[drive1-'A']) { WriteOut("Drive %c: does not exist\n", drive1); return; } - if (Drives[drive2-'A']) { WriteOut("Drive %c: already exists\n", drive2); return; } + if (!DBP_IsMounted(drive1)) { WriteOut("Drive %c: does not exist\n", drive1); return; } + if ( DBP_IsMounted(drive2)) { WriteOut("Drive %c: already exists\n", drive2); return; } WriteOut("Remounting %c: to %c:\n", drive1, drive2); - if (drive1 != dbp_disk_mount_letter) + DBP_Remount(drive1, drive2); + } + }; + *make = new RemountProgram; +} + +struct DBP_BufferDrawing +{ + static void Print(DBP_Buffer& buf, int lh, int x, int y, const char* msg) + { + for (const char* p = msg; *p; p++) + DrawChar(buf, lh, x+(int)(p - msg), y, *p); + } + + static void DrawChar(DBP_Buffer& buf, int lh, int x, int y, int c) + { + const Bit8u* ltr = &(lh == 8 ? int10_font_08 : int10_font_16)[(Bit8u)c * lh], *ltrend = ltr + lh; + for (Bit32u w = buf.width, *py = buf.video + (w * y * lh) + (x * 8); ltr != ltrend; py += w, ltr++) + for (Bit32u *px = py, bit = 256; bit; px++) + if (*ltr & (bit>>=1)) + *px = 0xFFFFFFFF; + } + + static void DrawRect(DBP_Buffer& buf, int x, int y, int w, int h, Bit32u col) + { + for (Bit32u *p = buf.video + buf.width * y + x, *pEnd = p + w, *p2 = p + buf.width * (h-1); p != pEnd; p++, p2++) + *p = *p2 = col; + for (Bit32u *p = buf.video + buf.width * y + x, *pEnd = p + buf.width * h; p != pEnd; p+=buf.width) + *p = p[w-1] = col; + } + + static void AlphaBlendFillRect(DBP_Buffer& buf, int x, int y, int w, int h, Bit32u col) + { + Bit32u alpha = ((col & 0xFF000000) >> 24) + (dbp_alphablend_base ? dbp_alphablend_base : 0x80); + col = ((alpha > 0xFF ? 0xFF : alpha) << 24) | (col & 0xFFFFFF); + for (Bit32u *py = buf.video + buf.width * y + x; h--; py += buf.width) + for (Bit32u *p = py, *pEnd = p + w; p != pEnd; p++) + AlphaBlend(p, col); + } + + static void AlphaBlend(Bit32u* p1, Bit32u p2) + { + Bit32u a = (p2 & 0xFF000000) >> 24, na = 255 - a; + Bit32u rb = ((na * (*p1 & 0x00FF00FF)) + (a * (p2 & 0x00FF00FF))) >> 8; + Bit32u ag = (na * ((*p1 & 0xFF00FF00) >> 8)) + (a * (0x01000000 | ((p2 & 0x0000FF00) >> 8))); + *p1 = ((rb & 0x00FF00FF) | (ag & 0xFF00FF00)); + } +}; + +static void DBP_StartMapper() +{ + static Bit8u joypad_nums[] = { RETRO_DEVICE_ID_JOYPAD_UP, RETRO_DEVICE_ID_JOYPAD_DOWN, RETRO_DEVICE_ID_JOYPAD_LEFT, RETRO_DEVICE_ID_JOYPAD_RIGHT, RETRO_DEVICE_ID_JOYPAD_A, RETRO_DEVICE_ID_JOYPAD_B, RETRO_DEVICE_ID_JOYPAD_X, RETRO_DEVICE_ID_JOYPAD_Y, RETRO_DEVICE_ID_JOYPAD_SELECT, RETRO_DEVICE_ID_JOYPAD_START, RETRO_DEVICE_ID_JOYPAD_L, RETRO_DEVICE_ID_JOYPAD_R, RETRO_DEVICE_ID_JOYPAD_L2, RETRO_DEVICE_ID_JOYPAD_R2, RETRO_DEVICE_ID_JOYPAD_R3 }; + static const char* joypad_names[] = { "Up", "Down", "Left", "Right", "A", "B", "X", "Y", "SELECT", "START", "L", "R", "L2", "R2", "R3" }; + enum { JOYPAD_MAX = (sizeof(joypad_nums)/sizeof(joypad_nums[0])) }; + static struct : DBP_MenuState + { + int main_sel; + Bit8u bind_dev, bind_part, changed; + DBP_InputBind* edit; + + static DBP_InputBind BindFromPadNum(Bit8u i) + { + Bit8u a = (i>=JOYPAD_MAX), n, device, index, id; + if (a) { n = i-JOYPAD_MAX, device = RETRO_DEVICE_ANALOG, index = n/4, id = 1-(n/2)%2; } + else { n = joypad_nums[i], device = RETRO_DEVICE_JOYPAD, index = 0, id = n; } + return { 0, device, index, id, NULL, _DBPET_MAX }; + } + + void menu_top() + { + list.clear(); + list.emplace_back(IT_NONE, 0, " Gamepad Mapper"); + list.emplace_back(IT_NONE); + for (Bit8u i = 0; i != JOYPAD_MAX + 8; i++) + { + Bit8u a = (i>=JOYPAD_MAX), apart = (a ? (i-JOYPAD_MAX)%2 : 0); + DBP_InputBind pad = BindFromPadNum(i); + list.emplace_back(IT_NONE); + if (!a) list.back().str = joypad_names[i]; + else ((list.back().str = joypad_names[2+pad.index]) += " Analog ") += joypad_names[(i-JOYPAD_MAX)%4]; + + size_t numBefore = list.size(); + for (const DBP_InputBind& b : dbp_input_binds) + { + if (b.port != 0 || b.device != pad.device || b.index != pad.index || b.id != pad.id) continue; + int key = -1; + if (b.evt == DBPET_KEYDOWN) + key = b.meta; + else if (b.evt == DBPET_AXISMAPPAIR) + key = DBP_MAPPAIR_GET(apart?1:-1, b.meta); + else for (const DBP_SpecialMapping& sm : DBP_SpecialMappings) + if (sm.evt == b.evt && sm.meta == (a ? (apart ? 1 : -1) : b.meta)) + { key = DBP_SPECIALMAPPINGS_KEY + (int)(&sm - DBP_SpecialMappings); break; } + if (key < 0) { DBP_ASSERT(false); continue; } + const char *desc_dev = DBP_GETKEYDEVNAME(key); + list.emplace_back(IT_EDIT, (Bit16s)(((&b - &dbp_input_binds[0])<<1)|apart), " [Edit]"); + (((list.back().str += (desc_dev ? " " : "")) += (desc_dev ? desc_dev : "")) += ' ') += DBP_GETKEYNAME(key); + } + if (list.size() - numBefore == 0) list.emplace_back(IT_ADD, i, " [Create Binding]"); + } + if (!dbp_custom_mapping.empty() || changed) + { + list.emplace_back(IT_NONE); + list.emplace_back(IT_DEL, 0, "[Delete Custom Mapping]"); + } + list.emplace_back(IT_NONE); + list.emplace_back(IT_EXIT, 0, " Close Mapper"); + if (main_sel >= (int)list.size()) main_sel = (int)list.size()-1; + while (main_sel && list[main_sel].type == IT_NONE) main_sel--; + if (main_sel < 3) main_sel = 3; // skip top IT_NONE entry + sel = main_sel; + scroll = -1; + result = IT_NONE; + edit = NULL; + bind_dev = 0; + } + + void menu_devices() + { + if (!edit) + { + main_sel = sel; + int main_info = list[sel].info; + if (result == IT_ADD) + { + dbp_input_binds.push_back(BindFromPadNum((Bit8u)main_info)); + main_info = (Bit16u)((dbp_input_binds.size()-1)<<1); + } + edit = &dbp_input_binds[main_info>>1]; + bind_part = (Bit8u)(main_info&1); + + int sel_header = sel - 1; while (list[sel_header].type != IT_NONE) sel_header--; + (list[0].str = list[sel_header].str); + (list[1].str = " >") += list[sel].str; + } + else if (result == IT_ADD) + { + dbp_input_binds.push_back(*edit); + edit = &dbp_input_binds.back(); + edit->desc = NULL; edit->evt = _DBPET_MAX; edit->meta = edit->lastval = 0; + (list[1].str = " >") += " [Additional Binding]"; + } + list.resize(2); + list.emplace_back(IT_NONE); + list.emplace_back(IT_DEVICE, 1, " "); list.back().str += DBPDEV_Keyboard; + list.emplace_back(IT_DEVICE, 2, " "); list.back().str += DBPDEV_Mouse; + list.emplace_back(IT_DEVICE, 3, " "); list.back().str += DBPDEV_Joystick; + if (edit->evt != _DBPET_MAX) + { + list.emplace_back(IT_NONE); + list.emplace_back(IT_DEL, 0, " [Remove Binding]"); + int count = 0; + for (const DBP_InputBind& b : dbp_input_binds) + if (b.port == 0 && b.device == edit->device && b.index == edit->index && b.id == edit->id) + count++; + if (count < 4) + { + list.emplace_back(IT_NONE); + list.emplace_back(IT_ADD, 0, " [Additional Binding]"); + } + } + list.emplace_back(IT_NONE); + list.emplace_back(IT_EXIT, 0, "Cancel"); + + char device = *(list[1].str.c_str() + (sizeof(" > [Edit] ")-1)); + sel = (device == 'J' ? 5 : (device == 'M' ? 4 : 3)); + scroll = 0; + result = IT_NONE; + bind_dev = 0; + } + + void menu_keys() + { + bind_dev = (Bit8u)list[sel].info; + (list[2].str = " > ") += list[sel].str; + list.resize(3); + list.emplace_back(IT_NONE); + if (bind_dev == 1) for (Bit16s i = KBD_NONE + 1; i != KBD_LAST; i++) + { + list.emplace_back(IT_EXEC, i, " "); + list.back().str += DBP_KBDNAMES[i]; + } + else for (const DBP_SpecialMapping& sm : DBP_SpecialMappings) { - if (MSCDEX_HasDrive(drive1)) MSCDEX_RemoveDrive(drive1); - if (imageDiskList[drive1-'A']) imageDiskList[drive1-'A'] = NULL; + if (sm.dev != (bind_dev == 2 ? DBPDEV_Mouse : DBPDEV_Joystick)) continue; + list.emplace_back(IT_EXEC, (Bit16s)(DBP_SPECIALMAPPINGS_KEY + (&sm - DBP_SpecialMappings)), " "); + list.back().str += sm.name; + } + list.emplace_back(IT_NONE); + list.emplace_back(IT_EXIT, 0, "Cancel"); - DOS_Drive* drive = Drives[drive1-'A']; - Drives[drive1-'A'] = NULL; - Drives[drive2-'A'] = drive; - mem_writeb(Real2Phys(dos.tables.mediaid) + (drive2-'A') * 9, (drive2 > 'B' ? 0xF8 : 0xF0)); + sel = 4; // skip top IT_NONE entry + if (!strncmp(list[1].str.c_str() + (sizeof(" > [Edit] ")-1), list[2].str.c_str() + (sizeof(" > ")-1), list[2].str.size() - (sizeof(" > ")-1))) + { + const char* keyname = list[1].str.c_str() + (sizeof(" > [Edit] ")-1) + list[2].str.size() - (sizeof(" > ")-1) + 1; + for (const Item& it : list) + if (it.str.size() > 2 && !strcmp(it.str.c_str() + 2, keyname)) + { sel = (int)(&it - &list[0]); break; } + } + scroll = -1; + result = IT_NONE; + } - if (drive2 > 'C') + void input(DBP_Event_Type type, int val, int val2) + { + ProcessInput(type, val, val2); + if (type == DBPET_ONSCREENKEYBOARDUP) result = IT_EXIT; + if (!result) return; + if ((result == IT_EXEC || result == IT_DEL) && edit) + { + Bit16u bind_key = list[sel].info; + if (bind_key == 0) // deleting entry + { + dbp_input_binds.erase(dbp_input_binds.begin() + (edit - &dbp_input_binds[0])); + } + else if (edit->device == RETRO_DEVICE_ANALOG) // Binding to an axis + { + if (edit->evt != DBPET_AXISMAPPAIR && edit->evt != _DBPET_MAX) DBP_PadMapping::ForceAxisMapPair(*edit); + edit->evt = DBPET_AXISMAPPAIR; + int other_key = DBP_MAPPAIR_GET((bind_part ? -1 : 1), edit->meta); + edit->meta = (bind_part ? DBP_MAPPAIR_MAKE(other_key, bind_key) : DBP_MAPPAIR_MAKE(bind_key, other_key)); + } + else if (bind_key < DBP_SPECIALMAPPINGS_KEY) // Binding a key to a joypad button + { + edit->evt = DBPET_KEYDOWN; + edit->meta = (Bit16s)bind_key; + } + else // Binding a special mapping to a joypad button { - Bit8u subUnit; - MSCDEX_AddDrive(drive2, "", subUnit); + edit->evt = DBP_SPECIALMAPPING(bind_key).evt; + edit->meta = DBP_SPECIALMAPPING(bind_key).meta; } + changed = true; + menu_top(); + } + else if (result == IT_EDIT || result == IT_ADD) + { + menu_devices(); + } + else if (result == IT_DEVICE) + { + menu_keys(); + } + else if (result == IT_EXIT && bind_dev) + { + menu_devices(); + } + else if (result == IT_EXIT && edit) + { + if (edit->evt == _DBPET_MAX) dbp_input_binds.pop_back(); + menu_top(); } - else if (!dbp_disk_eject_state && dbp_disk_image_index < dbp_images.size()) + else if (result == IT_EXIT || result == IT_DEL) { - Drives[drive1-'A']->UnMount(); - Drives[drive1-'A'] = 0; - dbp_disk_mount_letter = drive2; - DBP_Mount(dbp_images[dbp_disk_image_index].c_str(), false, false); + main_sel = sel; + dbp_gfx_intercept = NULL; + dbp_input_intercept = NULL; + if (result == IT_EXIT && changed) + { + DBP_PadMapping::Save(); + } + else if (result == IT_DEL) + { + main_sel = 0; + DBP_PadMapping::Delete(); + } + changed = false; } - if (drive1 == DOS_GetDefaultDrive()) DOS_SetDrive(drive2-'A'); - for (std::string& img : dbp_images) if (img[0] == '$' && img[1] == drive1) img[1] = drive2; + } + } mp; + + struct MPFunc : DBP_BufferDrawing + { + static void gfx(DBP_Buffer& buf) + { + mp.UpdateHeld(input); + int lh = (buf.height >= 400 ? 16 : 8), w = buf.width / 8, h = buf.height / lh; + int l = w/2 - 18, r = l + 36, u = 4, d = h - 4, rows = (int)d - u, count = (int)mp.list.size(); + bool scrollbar = (count > rows); + mp.UpdateScroll(rows); + + int yStart = u*lh-5, yEnd = d*lh+5, yNum = yEnd-yStart, xStart = l*8-5, xNum = 5+(r-l)*8+5, xEnd = xStart + xNum; + AlphaBlendFillRect(buf, xStart, yStart, xNum, yNum, 0xAA0000); + DrawRect(buf, xStart-1, yStart-1, xNum+2, yNum+2, 0xFFFFFFFF); + DrawRect(buf, xStart-2, yStart-2, xNum+4, yNum+4, 0x00000000); + + AlphaBlendFillRect(buf, xStart, (u + mp.sel - mp.scroll) * lh, xNum - (scrollbar ? 12 : 0), lh, 0xF08080); + + if (scrollbar) + AlphaBlendFillRect(buf, xEnd-10, yStart + yNum * mp.scroll / count, 8, yNum * rows / count, 0xF08080); + + for (int i = mp.scroll; i != count && i != (mp.scroll + rows); i++) + Print(buf, lh, l+2, u + i - mp.scroll, mp.list[i].str.c_str()); + } + + static void input(DBP_Event_Type type, int val, int val2) + { + mp.input(type, val, val2); } }; - *make = new RemountProgram; + + DBP_KEYBOARD_ReleaseKeys(); + mp.menu_top(); + dbp_gfx_intercept = MPFunc::gfx; + dbp_input_intercept = MPFunc::input; } static void DBP_StartOnScreenKeyboard() @@ -1546,37 +2721,20 @@ static void DBP_StartOnScreenKeyboard() static struct { float mx, my, dx, dy, jx, jy, kx, ky, mspeed; + Bit32u pressed_time; KBD_KEYS hovered_key, pressed_key; - bool toggled_keys[KBD_rightshift-KBD_leftalt == 5 ? 6 : -1]; + bool held[KBD_LAST+1]; } osk; - struct OSKFunc + + struct OSKFunc : DBP_BufferDrawing { - static void reset() - { - float fac = (RDOSGFXwidth < KWIDTH ? (RDOSGFXwidth - 10) / (float)KWIDTH : (RDOSGFXwidth < 400 ? 1.f : 2.f)); - int osky = (int)(RDOSGFXheight / fac) - 3 - 65; - if (!osk.mx && !osk.my) - { - osk.mx = (float)(KWIDTH/2); - osk.my = (float)(osky + 32); - } - osk.dx = osk.dy = osk.jx = osk.jy = osk.kx = osk.ky = 0; - osk.mspeed = 2.f; - osk.hovered_key = osk.pressed_key = KBD_NONE; - osk.toggled_keys[KBD_leftalt -KBD_leftalt] = !!dbp_keys_down[KBD_leftalt ]; - osk.toggled_keys[KBD_rightalt -KBD_leftalt] = !!dbp_keys_down[KBD_rightalt ]; - osk.toggled_keys[KBD_leftctrl -KBD_leftalt] = !!dbp_keys_down[KBD_leftctrl ]; - osk.toggled_keys[KBD_rightctrl -KBD_leftalt] = !!dbp_keys_down[KBD_rightctrl ]; - osk.toggled_keys[KBD_leftshift -KBD_leftalt] = !!dbp_keys_down[KBD_leftshift ]; - osk.toggled_keys[KBD_rightshift-KBD_leftalt] = !!dbp_keys_down[KBD_rightshift]; - } - enum { KWR = 10, KWTAB = 15, KWCAPS = 20, KWLS = 17, KWRSHIFT = 33, KWCTRL = 16, KWZERO = 22, KWBS = 28, KWSPACEBAR = 88, KWENTR = 18, KWPLUS }; + enum { KWR = 10, KWTAB = 15, KWCAPS = 20, KWLS = 17, KWRSHIFT = 33, KWCTRL = 16, KWZERO = 22, KWBS = 28, KWSPACEBAR = 88, KWENTR = 18, KWPLUS, KWMAPPER = KWR*4+2*3 }; enum { KXX = 100+KWR+2, SPACEFF = 109, KSPLIT = 255, KSPLIT1 = 192, KSPLIT2 = 234, KWIDTH = KSPLIT2 + KWR*4 + 2*3 }; - static void gfx(uint8_t* buf) + static void gfx(DBP_Buffer& buf) { - static const uint8_t keyboard_rows[6][25] = + static const Bit8u keyboard_rows[6][25] = { - { KWR, KXX ,KWR,KWR,KWR,KWR, SPACEFF, KWR,KWR,KWR,KWR, SPACEFF, KWR,KWR,KWR,KWR , KSPLIT , KWR,KWR,KWR }, + { KWR, KXX ,KWR,KWR,KWR,KWR, SPACEFF, KWR,KWR,KWR,KWR, SPACEFF, KWR,KWR,KWR,KWR , KSPLIT , KWR,KWR,KWR , KSPLIT , KWMAPPER }, { KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWBS , KSPLIT , KWR,KWR,KWR , KSPLIT , KWR,KWR,KWR,KWR }, { KWTAB, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWENTR , KSPLIT , KWR,KWR,KWR , KSPLIT , KWR,KWR,KWR,KWPLUS }, { KWCAPS, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KWR, KSPLIT , KSPLIT , KWR,KWR,KWR }, @@ -1585,17 +2743,27 @@ static void DBP_StartOnScreenKeyboard() }; static const KBD_KEYS keyboard_keys[6][25] = { - { KBD_esc,KBD_NONE,KBD_f1,KBD_f2,KBD_f3,KBD_f4,KBD_NONE,KBD_f5,KBD_f6,KBD_f7,KBD_f8,KBD_NONE,KBD_f9,KBD_f10,KBD_f11,KBD_f12,KBD_NONE,KBD_printscreen,KBD_scrolllock,KBD_pause }, + { KBD_esc,KBD_NONE,KBD_f1,KBD_f2,KBD_f3,KBD_f4,KBD_NONE,KBD_f5,KBD_f6,KBD_f7,KBD_f8,KBD_NONE,KBD_f9,KBD_f10,KBD_f11,KBD_f12,KBD_NONE,KBD_printscreen,KBD_scrolllock,KBD_pause,KBD_NONE,KBD_LAST }, { KBD_grave, KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, KBD_8, KBD_9, KBD_0, KBD_minus, KBD_equals, KBD_backspace ,KBD_NONE,KBD_insert,KBD_home,KBD_pageup ,KBD_NONE,KBD_numlock,KBD_kpdivide,KBD_kpmultiply,KBD_kpminus }, { KBD_tab,KBD_q,KBD_w,KBD_e,KBD_r,KBD_t,KBD_y,KBD_u,KBD_i,KBD_o,KBD_p,KBD_leftbracket,KBD_rightbracket, KBD_enter ,KBD_NONE,KBD_delete,KBD_end,KBD_pagedown,KBD_NONE,KBD_kp7,KBD_kp8,KBD_kp9,KBD_kpplus }, { KBD_capslock,KBD_a,KBD_s,KBD_d,KBD_f,KBD_g,KBD_h,KBD_j,KBD_k,KBD_l,KBD_semicolon,KBD_quote,KBD_backslash ,KBD_NONE , KBD_NONE,KBD_kp4,KBD_kp5,KBD_kp6 }, { KBD_leftshift,KBD_extra_lt_gt,KBD_z,KBD_x,KBD_c,KBD_v,KBD_b,KBD_n,KBD_m,KBD_comma,KBD_period,KBD_slash,KBD_rightshift ,KBD_NONE, KBD_NONE,KBD_up,KBD_NONE ,KBD_NONE,KBD_kp1,KBD_kp2,KBD_kp3,KBD_kpenter }, { KBD_leftctrl,KBD_NONE,KBD_leftalt, KBD_space, KBD_rightalt,KBD_NONE,KBD_rightctrl ,KBD_NONE, KBD_left,KBD_down,KBD_right ,KBD_NONE,KBD_kp0,KBD_kpperiod }, }; - int thickness = (RDOSGFXwidth < 400 ? 1 : 2); - float fac = (RDOSGFXwidth < KWIDTH ? (RDOSGFXwidth - 10) / (float)KWIDTH : (RDOSGFXwidth < 400 ? 1.f : 2.f)); - int oskx = (int)(RDOSGFXwidth / fac / 2) - (KWIDTH / 2); - int osky = (osk.my < (RDOSGFXheight / fac / 2) ? 3 : (int)(RDOSGFXheight / fac) - 3 - 65); + + int thickness = (buf.width < (KWIDTH + 10) ? 1 : ((int)buf.width - 10) / KWIDTH); + float fx = (buf.width < KWIDTH ? (buf.width - 10) / (float)KWIDTH : (float)thickness); + float fy = fx * buf.ratio * buf.height / buf.width; if (fy < 1) fy = 1; + int thicknessy = (int)(fy + .95f); + int oskx = (int)(buf.width / fx / 2) - (KWIDTH / 2); + int osky = (osk.my && osk.my < (buf.height / fy / 2) ? 3 : (int)(buf.height / fy) - 3 - 65); + + if (!osk.mspeed) + { + osk.mx = (float)(KWIDTH/2); + osk.my = (float)(osky + 32); + osk.mspeed = 2.f; + } if (osk.dx) { osk.mx += osk.dx; osk.dx = 0; } if (osk.dy) { osk.my += osk.dy; osk.dy = 0; } @@ -1603,17 +2771,23 @@ static void DBP_StartOnScreenKeyboard() osk.my += (osk.jy + osk.ky) * osk.mspeed; if (osk.mx < 0) osk.mx = 0; if (osk.mx > KWIDTH) osk.mx = KWIDTH; - if (osk.my < 3) osk.my = (float)( 3); - if (osk.my > (RDOSGFXheight / fac) - 3) osk.my = (float)((RDOSGFXheight / fac) - 3); - int cX = (int)((oskx+osk.mx)*fac); // mx is related to oskx - int cY = (int)(( osk.my)*fac); // my is related to screen! + if (osk.my < 3) osk.my = (float)( 3); + if (osk.my > (buf.height / fy) - 3) osk.my = (float)((buf.height / fy) - 3); + int cX = (int)((oskx+osk.mx)*fx); // mx is related to oskx + int cY = (int)(( osk.my)*fy); // my is related to screen! + + if (osk.pressed_key && (DBP_GetTicks() - osk.pressed_time) > 500) + { + osk.held[osk.pressed_key] = true; + osk.pressed_key = KBD_NONE; + } // Draw keys and check hovered state osk.hovered_key = KBD_NONE; for (int row = 0; row != 6; row++) { int x = 0, y = (row ? 3 + (row * 10) : 0); - for (const uint8_t *k = keyboard_rows[row], *k_end = k + 25; k != k_end; k++) + for (const Bit8u *k = keyboard_rows[row], *k_end = k + 25; k != k_end; k++) { int draww = *k, drawh = 8; switch (*k) @@ -1637,95 +2811,89 @@ static void DBP_StartOnScreenKeyboard() } DBP_ASSERT(draww); - int rl = (int)((oskx + x) * fac), rr = (int)((oskx + x + draww) * fac), rt = (int)((osky + y) * fac), rb = (int)((osky + y + drawh) * fac); - bool hovered = (cX >= rl && cX < rr && cY >= rt && cY < rb); + int rl = (int)((oskx + x) * fx), rr = (int)((oskx + x + draww) * fx), rt = (int)((osky + y) * fy), rb = (int)((osky + y + drawh) * fy); + bool hovered = (cX >= rl-1 && cX <= rr && cY >= rt-1 && cY <= rb); KBD_KEYS kbd_key = keyboard_keys[row][k - keyboard_rows[row]]; if (hovered) osk.hovered_key = kbd_key; - unsigned col = (osk.pressed_key == kbd_key ? 0x808888FF : - (kbd_key >= KBD_leftalt && kbd_key <= KBD_rightshift && osk.toggled_keys[kbd_key-KBD_leftalt] ? 0x80A0A000 : - (hovered ? 0x800000FF : - 0x80FF0000))); + Bit32u col = (osk.pressed_key == kbd_key ? 0x8888FF : + (osk.held[kbd_key] ? 0xA0A000 : + (hovered ? 0x0000FF : + 0xFF0000))); - for (int ky = rt; ky != rb; ky++) - for (int kx = rl; kx != rr; kx++) - AlphaBlend((unsigned*)(buf + ky * RDOSGFXpitch + kx * 4), col); - - for (int kx = rl-1; kx <= rr; kx++) - { - AlphaBlend((unsigned*)(buf + (rt-1) * RDOSGFXpitch + kx * 4), 0xA0000000); - AlphaBlend((unsigned*)(buf + (rb ) * RDOSGFXpitch + kx * 4), 0xA0000000); - } - for (int ky = rt; ky != rb; ky++) - { - AlphaBlend((unsigned*)(buf + ky * RDOSGFXpitch + (rl-1) * 4), 0x80000000); - AlphaBlend((unsigned*)(buf + ky * RDOSGFXpitch + (rr ) * 4), 0x80000000); - } + AlphaBlendFillRect(buf, rl, rt, rr-rl, rb-rt, col); + for (int kx = rl-1; kx <= rr; kx++) { AlphaBlend(buf.video + (rt-1) * buf.width + kx, 0xA0000000); AlphaBlend(buf.video + rb * buf.width + kx, 0xA0000000); } + for (int ky = rt; ky != rb; ky++) { AlphaBlend(buf.video + ky * buf.width + (rl-1), 0x80000000); AlphaBlend(buf.video + ky * buf.width + rr, 0x80000000); } x += (draww + 2); } } // Draw key letters - static unsigned int keyboard_letters[] = { 3154116614U,3773697760U,3285975058U,432266297U,1971812352U,7701880U,235069918U,0,2986344448U,545521665U,304153104U,71320576U,2376196U,139756808U,1375749253U,15335968U,0,9830400U,148945920U,2023662U,471712220U,2013272514U,2239255943U,3789422661U,69122U,0,45568U,33824900U,67112993U,1090790466U,2215116836U,612698196U,42009088U,482U,0,2214592674U,553779744U,1107558416U,608207908U,1417938944U,1344776U,570589442U,1U,3053453312U,545521665U,270590494U,406963200U,1589316U,141854472U,3254809733U,31596257U,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3670272U,125847559U,805798000U,3934080U,14680064U,33555392U,19792160U,2149581128U,9961472U,134234113U,134250568U,2152203264U,9220U,1171071088U,563740792U,1476471297U,44048385U,16802816U,2013724704U,3670912U,125841412U,229412U,1271156960U,31500800U,23593262U,234995728U,268500992U,4196352U,33572868U,604241992U,544210944U,8000605U,572334506U,268519425U,320U,524544U,67125256U,1208025160U,2360320U,1428160512U,704645644U,19010849U,537395528U,2U,117471233U,805535808U,2150629504U,15367U,3588022272U,564789259U,1208009245U,2055U,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3759984128U,3936512U,285339655U,1610875024U,7343872U,14U,14747136U,31457518U,122892U,17835300U,150995985U,2417033280U,9438208U,134221833U,0,705569130U,302055425U,603980064U,285282333U,1074200636U,9439744U,251695108U,524304U,704643072U,19796705U,3758883072U,635699201U,68485456U,4196608U,67145732U,268501136U,2048U,560594944U,2147557906U,16781824U,2418353152U,267520U,67125257U,2416181392U,1048832U,33783816U,304163328U,4194594U,65554U,23076132U,151010314U,1610874944U,6292480U,234909697U,6436992U,3792888166U,201334784U,480U,0,0,0,0,2147483648U,10059U,0,0,1024U,0,0,0,0,1216348160U,34U,0,0,14U,0,0,0,0,575176704U,0,0,67108864U,0,0,0,0,0,2902912U,0,0,201326592U,3758489600U,31459073U,503390236U,65608U,2098176U,0,0,3225157920U,2043805697U,2099463U,33562633U,672137504U,256U,8196U,0,536870912U,2098177U,21627392U,151117833U,3759800800U,1576961U,8193U,64U,0,31457280U,57372U,252148674U,537460992U,18878976U,16787472U,1073741824U,0,0,536936448U,1375732000U,590858U,2099457U,302063634U,536936520U,8388608U,0,0,538968320U,197918721U,31459591U,201334791U,1208746272U,2100992U,32768U,0,0,12590081U,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2152730112U,35666944U,469901336U,4457024U,33554432U,6063584U,16777216U,4194304U,1057021966U,4213282U,604119072U,3223585312U,27650U,537001984U,16900U,229376U,268451840U,774439168U,268443864U,537133376U,54533122U,84U,3185574144U,238U,1984U,3758620736U,1256728832U,2148008000U,35652608U,1140998180U,0,1118109697U,0,1073741825U,16778240U,2152376320U,20972544U,604061732U,2151940672U,8390656U,4367616U,16777216U,4194304U,520159234U,35502U,402792508U,1075576960U,8406018U,3758129152U,98981U,65536U,503332864U,1048800U,0,0,0,0,0,0,0,0,4096U,0,0,0,0,0,0,0,0,15U,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1275592704U,1275068480U,2U,0,0,9408U,16460U,256U,61440U,1480736256U,38928384U,0,0,536870912U,1107296293U,1048664U,8193U,144U,4514313U,479744U,0,0,1965031424U,1155661824U,16783360U,2415919200U,16777216U,17474U,606U,0,0,2482176U,4473344U,4228366588U,9437184U,1107296256U,1375731780U,2U,0,0,9504U,402670658U,6292352U,36864U,1166810880U,206700544U,0,0,536870912U,2348810437U,1048645U,8193U,4194544U,16U }; - for (unsigned int p = 0; p != 59*280; p++) + static Bit32u keyboard_letters[] = { 1577058307U,1886848880,3790471177U,216133148,985906176,3850940,117534959,1144626176,456060646,34095104,19009569,1078199360,2147632160U,1350912080,85984328,2148442146U,1429047626,77381,3692151160U,3087023553U,2218277763U,250609715,2332749995U,96707584,693109268,3114968401U,553648172,138445064,276889604,152060169,354484736,2148081986U,2072027207,2720394752U,85530487,285483008,8456208,555880480,1073816068,675456032,135266468,1074335764,580142244,112418,3793625220U,3288338464U,1078204481,2265448472U,1954875508,518111744,1955070434,633623176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117454849,1879539784,2150631296U,15367,3221282816U,537001987,1208036865,8392705,2102016,151060488,2147549200U,2156923136U,234881028,252228004,1092891456,2818085,2415940610U,8389633,235003932,3222274272U,9444864,1132462094,2818649873U,78141314,2098592,2147497991U,67110912,604110880,2359552,4610,170823736,2429878333U,2751502090U,10486784,2148532224U,67141632,268730432,1077937280,2,10536274,559026848,1075085330,8704,15729152,117473294,1610678368,7868160,968884224,1409292203,25432643,528016,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58749752,469823556,1078200256,25169922,939638844,0,3087238168U,805797891,2449475456U,142641170,537165826,4720768,75515906,262152,3036676096U,9766672,2416509056U,30556160,62984209,2684616816U,4196608,16814089,128,772972544,268440225,1966272,44059592,301991978,537395328,18876417,268443678,0,1545880276,604045314,1224737280,88089609,268582913,2359552,4203521,3758227460U,1249902720,4752520,1074036752,15278080,31477771,537002056,2097920,58722307,298057840,2534092803U,16779024,983136,0,0,0,0,0,2575232,0,0,262144,0,0,0,0,268435456,1097,0,0,448,0,0,0,0,2300706816U,0,0,268435456,0,0,0,0,0,1451456,0,0,12582912,503341056,3223191664U,2178945537U,4100,131136,0,0,470007826,250848256,302006290,1074004032,5251074,134217730,64,0,37748736,2147500040U,37769856,2013413496,7865984,4195844,268435464,0,0,117471232,3725590584U,134248507,2415984712U,1082132736,2049,131072,0,0,151060488,67785216,151060489,538050592,4723201,8193,128,0,16777216,2147557408U,18932089,67166268,2149843328U,31459585,268435460,0,0,58728448,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,538182528,8916736,117475334,1114256,8388608,1515896,12582912,2148532224U,532690947,131665,18878721,369172497,864,553652224,528,15360,8389120,3626977288U,1074790432,35652609,1409499164,0,4005421057U,3221225472U,1073741839,14682112,134831401,2148532480U,75514880,557128,2097152,545952,6291456,2148007936U,2684362752U,268566826,9438464,151031813,537002256,2483028480U,266,3072,524544,1163361284,270401536,4197377,570499086,1073741888,3243438080U,2147483648U,536870913,7343872,8,0,0,0,0,0,0,0,16777216,0,0,0,0,0,0,0,0,7680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1279262720,1275068480,2,0,0,9408,268451916,2097920,61440,185105920,4866048,0,0,2751463424U,138412036,1610809355,3072,536870930,70537,7496,0,0,30703616,18057216,4027319280U,37748739,553910272,788529186,1,0,0,4848,2113937953,8259552,18432,71573504,2433024,0,0,1375731712,1142947842,2013364228,1536,4026531849U,35609,6308,0,0,25837568,9115648,1074135072,31457280,2097280 }; + for (Bit32u p = 0; p != 59*277; p++) { if (!(keyboard_letters[p>>5] & (1<<(p&31)))) continue; - int lx = (int)((oskx + (p%280)) * fac), ly = (int)((osky + 1 + (p/280)) * fac); - for (int y = ly; y != ly + thickness; y++) + int lx = (int)((oskx + 1 + (p%277)) * fx), ly = (int)((osky + 1 + (p/277)) * fy); + for (int y = ly; y != ly + thicknessy; y++) for (int x = lx; x != lx + thickness; x++) - *(unsigned*)(buf + y * RDOSGFXpitch + x * 4) = 0xFFFFFFFF; + *(buf.video + y * buf.width + x) = 0xFFFFFFFF; } // Draw white mouse cursor with black outline - for (unsigned i = 0; i != 9; i++) + for (Bit32u i = 0; i != 9; i++) { - unsigned n = (i < 4 ? i : (i < 8 ? i+1 : 4)), x = (unsigned)cX + (n%3)-1, y = (unsigned)cY + (n/3)-1, ccol = (n == 4 ? 0xFFFFFFFF : 0xFF000000); - for (unsigned c = 0; c != (unsigned)(8*fac); c++) + Bit32u n = (i < 4 ? i : (i < 8 ? i+1 : 4)), x = (Bit32u)cX + (n%3)-1, y = (Bit32u)cY + (n/3)-1, ccol = (n == 4 ? 0xFFFFFFFF : 0xFF000000); + for (Bit32u c = 0; c != (Bit32u)(8*fx); c++) { - *(unsigned*)(buf + (y+c) * RDOSGFXpitch + (x ) * 4) = ccol; - if (x+c >= RDOSGFXwidth) continue; - *(unsigned*)(buf + (y ) * RDOSGFXpitch + (x+c) * 4) = ccol; - *(unsigned*)(buf + (y+c) * RDOSGFXpitch + (x+c) * 4) = ccol; + *(buf.video + (y+c) * buf.width + (x )) = ccol; + if (x+c >= buf.width) continue; + *(buf.video + (y ) * buf.width + (x+c)) = ccol; + *(buf.video + (y+c) * buf.width + (x+c)) = ccol; } } } - static void AlphaBlend(unsigned* p1, unsigned p2) - { - unsigned int a = (p2 & 0xFF000000) >> 24, na = 255 - a; - unsigned int rb = ((na * (*p1 & 0x00FF00FF)) + (a * (p2 & 0x00FF00FF))) >> 8; - unsigned int ag = (na * ((*p1 & 0xFF00FF00) >> 8)) + (a * (0x01000000 | ((p2 & 0x0000FF00) >> 8))); - *p1 = ((rb & 0x00FF00FF) | (ag & 0xFF00FF00)); - } - - static void input(DBP_Event& e) + static void input(DBP_Event_Type type, int val, int val2) { - switch (e.type) + switch (type) { - case DBPET_MOUSEXY: osk.dx += e.xy[0]/2.f; osk.dy += e.xy[1]/2.f; break; + case DBPET_MOUSEXY: osk.dx += val/2.f; osk.dy += val2/2.f; break; case DBPET_MOUSEDOWN: case DBPET_JOY1DOWN: case DBPET_JOY2DOWN: case_ADDKEYDOWN: if (osk.pressed_key == KBD_NONE && osk.hovered_key != KBD_NONE) { - if (osk.hovered_key >= KBD_leftalt && osk.hovered_key <= KBD_rightshift) + if (osk.held[osk.hovered_key]) { - KEYBOARD_AddKey(osk.hovered_key, (osk.toggled_keys[osk.hovered_key-KBD_leftalt] ^= true)); - break; + osk.held[osk.hovered_key] = false; + KEYBOARD_AddKey(osk.hovered_key, false); + } + else if (osk.hovered_key >= KBD_leftalt && osk.hovered_key <= KBD_rightshift) + { + osk.held[osk.hovered_key] = true; + KEYBOARD_AddKey(osk.hovered_key, true); + } + else if (osk.hovered_key == KBD_LAST) + { + DBP_StartMapper(); + } + else + { + osk.pressed_time = DBP_GetTicks(); + osk.pressed_key = osk.hovered_key; + KEYBOARD_AddKey(osk.pressed_key, true); } - osk.pressed_key = osk.hovered_key; - KEYBOARD_AddKey(osk.pressed_key, true); } break; case DBPET_MOUSEUP: case DBPET_JOY1UP: case DBPET_JOY2UP: case_ADDKEYUP: - if (osk.pressed_key != KBD_NONE && (osk.hovered_key < KBD_leftalt || osk.hovered_key > KBD_rightshift)) + if (osk.pressed_key != KBD_NONE) { KEYBOARD_AddKey(osk.pressed_key, false); osk.pressed_key = KBD_NONE; } break; case DBPET_KEYDOWN: - switch ((KBD_KEYS)e.val) + switch ((KBD_KEYS)val) { case KBD_left: case KBD_kp4: osk.kx = -1; break; case KBD_right: case KBD_kp6: osk.kx = 1; break; @@ -1735,18 +2903,20 @@ static void DBP_StartOnScreenKeyboard() } break; case DBPET_KEYUP: - switch ((KBD_KEYS)e.val) + switch ((KBD_KEYS)val) { case KBD_left: case KBD_kp4: case KBD_right: case KBD_kp6: osk.kx = 0; break; case KBD_up: case KBD_kp8: case KBD_down: case KBD_kp2: osk.ky = 0; break; case KBD_enter: case KBD_kpenter: case KBD_space: goto case_ADDKEYUP; case KBD_esc: goto case_CLOSEOSK; } - case DBPET_JOY1X: case DBPET_JOY2X: case DBPET_JOYMX: osk.jx = DBP_GET_JOY_ANALOG_VALUE(e.val); break; - case DBPET_JOY1Y: case DBPET_JOY2Y: case DBPET_JOYMY: osk.jy = DBP_GET_JOY_ANALOG_VALUE(e.val); break; - case DBPET_MOUSESETSPEED: osk.mspeed = (e.val > 0 ? 4.f : 1.f); break; + case DBPET_JOY1X: case DBPET_JOY2X: case DBPET_JOYMX: osk.jx = DBP_GET_JOY_ANALOG_VALUE(val); break; + case DBPET_JOY1Y: case DBPET_JOY2Y: case DBPET_JOYMY: osk.jy = DBP_GET_JOY_ANALOG_VALUE(val); break; + case DBPET_MOUSESETSPEED: osk.mspeed = (val > 0 ? 4.f : 1.f); break; case DBPET_MOUSERESETSPEED: osk.mspeed = 2.f; break; case DBPET_ONSCREENKEYBOARD: case_CLOSEOSK: + osk.pressed_key = KBD_NONE; + memset(osk.held, 0, sizeof(osk.held)); DBP_KEYBOARD_ReleaseKeys(); dbp_gfx_intercept = NULL; dbp_input_intercept = NULL; @@ -1756,7 +2926,6 @@ static void DBP_StartOnScreenKeyboard() }; DBP_KEYBOARD_ReleaseKeys(); - OSKFunc::reset(); dbp_gfx_intercept = OSKFunc::gfx; dbp_input_intercept = OSKFunc::input; } @@ -1776,26 +2945,35 @@ void retro_get_system_info(struct retro_system_info *info) // #1 { memset(info, 0, sizeof(*info)); info->library_name = "DOSBox-pure"; - info->library_version = "0.11"; + info->library_version = "0.9.7"; info->need_fullpath = true; info->block_extract = true; - info->valid_extensions = "zip|dosz|exe|com|bat|iso|cue|ins|img|ima|vhd|m3u|m3u8"; + info->valid_extensions = "zip|dosz|exe|com|bat|iso|cue|ins|img|ima|vhd|jrc|tc|m3u|m3u8|conf"; } void retro_set_environment(retro_environment_t cb) //#2 { - if (environ_cb == cb) return; - environ_cb = cb; - - struct retro_log_callback logging; - log_cb = (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging) ? logging.log : retro_fallback_log); - bool allow_no_game = true; cb(RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME, &allow_no_game); } -static void refresh_input_binds(unsigned refresh_min_port = 0) +static void refresh_dos_joysticks() +{ + // Enable DOS joysticks only when mapped + // This helps for games which by default react to the joystick without calibration + // This can cause problems in other games that expect the joystick to respond (but hopefully these games have a setup program that can disable that) + bool useJoy1 = false, useJoy2 = false; + for (DBP_InputBind *b = (dbp_input_binds.empty() ? NULL : &dbp_input_binds[0]), *bEnd = b + dbp_input_binds.size(); b != bEnd; b++) + { + useJoy1 |= (b->evt == DBPET_JOY1X || b->evt == DBPET_JOY1Y || b->evt == DBPET_JOY1DOWN); + useJoy2 |= (b->evt == DBPET_JOY2X || b->evt == DBPET_JOY2Y || b->evt == DBPET_JOY2DOWN || b->evt == DBPET_JOYHATSETBIT); + } + JOYSTICK_Enable(0, useJoy1); + JOYSTICK_Enable(1, useJoy2); +} + +static void refresh_input_binds(bool set_controller_info = false, unsigned refresh_min_port = 0) { if (refresh_min_port < 2) { @@ -1807,8 +2985,8 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) dbp_input_binds.push_back({ 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_MIDDLE, NULL, DBPET_MOUSEDOWN, 2 }); if (dbp_bind_mousewheel) { - dbp_input_binds.push_back({ 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP, NULL, DBPET_KEYDOWN, DBP_KEYAXIS_GET(-1, dbp_bind_mousewheel) }); - dbp_input_binds.push_back({ 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN, NULL, DBPET_KEYDOWN, DBP_KEYAXIS_GET( 1, dbp_bind_mousewheel) }); + dbp_input_binds.push_back({ 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP, NULL, DBPET_KEYDOWN, DBP_MAPPAIR_GET(-1, dbp_bind_mousewheel) }); + dbp_input_binds.push_back({ 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN, NULL, DBPET_KEYDOWN, DBP_MAPPAIR_GET( 1, dbp_bind_mousewheel) }); } } refresh_min_port = 0; @@ -1894,11 +3072,12 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Button 4", DBPET_JOY2DOWN, 1 }, { 0 }}; - for (uint8_t port = refresh_min_port; port != DBP_MAX_PORTS; port++) + for (Bit8u port = refresh_min_port; port != DBP_MAX_PORTS; port++) { + const Bit8u* mapping = (port == 0 && !dbp_custom_mapping.empty() ? &dbp_custom_mapping[0] : NULL); const DBP_InputBind* binds = NULL; size_t port_bind_begin = dbp_input_binds.size(); - switch (dbp_port_devices[port]) + if (!mapping) switch (dbp_port_devices[port]) { case DBP_DEVICE_Disabled: continue; @@ -1911,92 +3090,11 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) binds = BindsMouseRightAnalog; break; case DBP_DEVICE_DefaultJoypad: - if (port == 0) - { - if (dbp_auto_mapping) - { - const Bit8u count = *dbp_auto_mapping, *p = dbp_auto_mapping + 1; - static std::vector name_buffers; - name_buffers.resize(count); - for (Bit8u num = 0; num != count; num++) - { - std::string& name = name_buffers[num]; - name.clear(); - const char *desc_key = NULL, *desc_key2 = NULL, *desc_device = NULL; - size_t first_input_bind = dbp_input_binds.size(); - - DBP_InputBind bnd = { 0, RETRO_DEVICE_JOYPAD, 0, *(p++) }; - bool hasActionName = (bnd.id >= 128); - if (hasActionName) - { - bnd.id &= 127; - Bit32u name_offset = 0; - do { name_offset = (name_offset<<7)|(*p&127); } while (*(p++) & 128); - name = dbp_auto_mapping_names + name_offset; - name += ' '; name += '('; - } - DBP_ASSERT(bnd.id <= 19); - bool isAnalog = (bnd.id >= 16); - if (isAnalog) - { - bnd.device = RETRO_DEVICE_ANALOG; - bnd.index = (bnd.id >= 18 ? RETRO_DEVICE_INDEX_ANALOG_RIGHT : RETRO_DEVICE_INDEX_ANALOG_LEFT); - bnd.id = (bnd.id & 1 ? RETRO_DEVICE_ID_ANALOG_X : RETRO_DEVICE_ID_ANALOG_Y); - } - for (Bit8u more_keys = 1; more_keys;) - { - Bit8u key = (*p & 127), key2 = (isAnalog ? (*(++p) & 127) : 0); - more_keys = (*(p++) & 128); - if (isAnalog) - { - if (key > KBD_LAST) - { - bnd.evt = (key == 114 || key == 115 ? DBPET_JOY1Y : DBPET_JOY1X); - bnd.meta = 0; - desc_key = (bnd.evt == DBPET_JOY1Y ? "Up/Down" : "Left/Right"); - } - else - { - bnd.evt = DBPET_AXIS_TO_KEY; - bnd.meta = (int16_t)DBP_KEYAXIS_MAKE(key, key2); - desc_key = DBP_KBDNAMES[key]; - desc_key2 = DBP_KBDNAMES[key2]; - } - } - else switch (key) - { - case 110: bnd.evt = DBPET_JOY1DOWN; bnd.meta = 0; desc_key = "Button 1"; break; //Joy 1 Btn 1 - case 111: bnd.evt = DBPET_JOY1DOWN; bnd.meta = 1; desc_key = "Button 2"; break; //Joy 1 Btn 2 - case 112: bnd.evt = DBPET_JOY2DOWN; bnd.meta = 0; desc_key = "Button 3"; break; //Joy 2 Btn 1 - case 113: bnd.evt = DBPET_JOY2DOWN; bnd.meta = 1; desc_key = "Button 4"; break; //Joy 2 Btn 2 - case 114: bnd.evt = DBPET_JOY1Y; bnd.meta = -1; desc_key = "Up"; break; //Joy 1 Up - case 115: bnd.evt = DBPET_JOY1Y; bnd.meta = 1; desc_key = "Down"; break; //Joy 1 Down - case 116: bnd.evt = DBPET_JOY1X; bnd.meta = -1; desc_key = "Left"; break; //Joy 1 Left - case 117: bnd.evt = DBPET_JOY1X; bnd.meta = 1; desc_key = "Right"; break; //Joy 1 Right - case 118: bnd.evt = DBPET_MOUSEDOWN; bnd.meta = 0; desc_key = "Left"; break; //Mouse Left - case 119: bnd.evt = DBPET_MOUSEDOWN; bnd.meta = 1; desc_key = "Right"; break; //Mouse Right - case 120: bnd.evt = DBPET_MOUSEDOWN; bnd.meta = 2; desc_key = "Middle"; break; //Mouse Middle - default: bnd.evt = DBPET_KEYDOWN; bnd.meta = key; desc_key = DBP_KBDNAMES[key]; break; //Key - } - dbp_input_binds.push_back(bnd); - - const char* dev = (bnd.evt == DBPET_KEYDOWN || bnd.evt == DBPET_AXIS_TO_KEY ? "Keyboard" : (bnd.evt == DBPET_MOUSEDOWN ? "Mouse" : "Joystick")); - if (desc_device != dev) { name += (desc_device = dev); name += ' '; } - name += desc_key; - if (desc_key2) { name += '/'; name += desc_key2; } - if (more_keys) name += '+'; - } - if (hasActionName) name += ')'; - dbp_input_binds[first_input_bind].desc = name.c_str(); - } - } - else - binds = BindsGravisGamepad; - } - else if (port == 1) - binds = BindsBasicJoystick2; - else - continue; + case DBP_DEVICE_DefaultAnalog: + if (port > 1) break; + else if (port == 1) binds = BindsBasicJoystick2; + else if (dbp_auto_mapping) mapping = dbp_auto_mapping; + else binds = BindsGravisGamepad; break; case DBP_DEVICE_GravisGamepad: binds = BindsGravisGamepad; @@ -2019,7 +3117,9 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) break; } - for (; binds && binds->port; binds++) + if (mapping) + DBP_PadMapping::Apply(mapping, (mapping == dbp_auto_mapping ? dbp_auto_mapping_names : NULL)); + else if (binds) for (; binds->port; binds++) { dbp_input_binds.push_back(*binds); dbp_input_binds.back().port = port; @@ -2030,20 +3130,20 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) dbp_input_binds.push_back({ port, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L3, "On Screen Keyboard", DBPET_ONSCREENKEYBOARD }); } - if ((dbp_port_devices[port] & RETRO_DEVICE_MASK) == RETRO_DEVICE_KEYBOARD) + if (mapping) continue; - if (port == 0 && dbp_auto_mapping && dbp_port_devices[0] == DBP_DEVICE_DefaultJoypad) + if ((dbp_port_devices[port] & RETRO_DEVICE_MASK) == RETRO_DEVICE_KEYBOARD) continue; if (!dbp_bind_unused && dbp_port_devices[port] != DBP_DEVICE_BindGenericKeyboard) continue; int abp = (port % 4); //auto bind series - static const struct { uint8_t id; struct { int16_t meta; const char* name; } ports[4]; } auto_buttons[] = + static const struct { Bit8u id; struct { Bit16s meta; const char* name; } ports[4]; } auto_buttons[] = { - #define ABK(key, name) {(int16_t)KBD_##key, "Keyboard " #name} - #define ABKP(key, name) {(int16_t)KBD_kp##key, "Numpad " #name} + #define ABK(key, name) {(Bit16s)KBD_##key, "Keyboard " #name} + #define ABKP(key, name) {(Bit16s)KBD_kp##key, "Numpad " #name} { RETRO_DEVICE_ID_JOYPAD_UP, { ABK(up ,Up ), ABKP(8, 8 ), ABK(q,Q), ABK(backspace, Backspace ) } }, { RETRO_DEVICE_ID_JOYPAD_DOWN, { ABK(down ,Down ), ABKP(2, 2 ), ABK(a,A), ABK(backslash, Backslash ) } }, { RETRO_DEVICE_ID_JOYPAD_LEFT, { ABK(left ,Left ), ABKP(4, 4 ), ABK(z,Z), ABK(semicolon, Semicolon ) } }, @@ -2063,10 +3163,10 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) #undef ABK #undef ABKP }; - static const struct { uint8_t index, id; struct { int16_t meta; const char* name; } ports[4]; } auto_analogs[] = + static const struct { Bit8u index, id; struct { Bit16s meta; const char* name; } ports[4]; } auto_analogs[] = { - #define ABK(key1, key2, name) {(int16_t)DBP_KEYAXIS_MAKE(KBD_##key1, KBD_##key2), "Keyboard " #name} - #define ABKP(key1, key2, name) {(int16_t)DBP_KEYAXIS_MAKE(KBD_kp##key1, KBD_kp##key2), "Numpad " #name} + #define ABK(key1, key2, name) {(Bit16s)DBP_MAPPAIR_MAKE(KBD_##key1, KBD_##key2), "Keyboard " #name} + #define ABKP(key1, key2, name) {(Bit16s)DBP_MAPPAIR_MAKE(KBD_kp##key1, KBD_kp##key2), "Numpad " #name} { RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, { ABK(left, right, Left/Right), ABKP(4, 6, 4/6 ), ABK(z,x,Z/X), ABK(semicolon, quote, Semicolon/Quote ) } }, { RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, { ABK(up, down, Up/Down ), ABKP(8, 2, 8/2 ), ABK(q,a,Q/A), ABK(backspace, backslash, Backspace/Backslash) } }, { RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X, { ABK(home, end, Home/End ), ABKP(minus, plus, Minus/Plus ), ABK(j,l,J/L), ABK(leftbracket,rightbracket, Left/Right Bracket ) } }, @@ -2092,17 +3192,14 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) for (int i = 0, j = 0; j != (sizeof(auto_analogs)/sizeof(*auto_analogs)); j++) { if (bound_analogs[auto_analogs[j].index]) continue; - dbp_input_binds.push_back({ port, RETRO_DEVICE_ANALOG, auto_analogs[j].index, auto_analogs[j].id, auto_analogs[i].ports[abp].name, DBPET_AXIS_TO_KEY, auto_analogs[i].ports[abp].meta }); + dbp_input_binds.push_back({ port, RETRO_DEVICE_ANALOG, auto_analogs[j].index, auto_analogs[j].id, auto_analogs[i].ports[abp].name, DBPET_AXISMAPPAIR, auto_analogs[i].ports[abp].meta }); i++; } } - bool useJoy1 = false, useJoy2 = false; std::vector input_descriptor; for (DBP_InputBind *b = (dbp_input_binds.empty() ? NULL : &dbp_input_binds[0]), *bEnd = b + dbp_input_binds.size(), *prev = NULL; b != bEnd; prev = b++) { - useJoy1 |= (b->evt == DBPET_JOY1X || b->evt == DBPET_JOY1Y || b->evt == DBPET_JOY1DOWN); - useJoy2 |= (b->evt == DBPET_JOY2X || b->evt == DBPET_JOY2Y || b->evt == DBPET_JOY2DOWN || b->evt == DBPET_JOYHATSETBIT); if (b->device != RETRO_DEVICE_MOUSE && b->desc) if (!prev || prev->port != b->port || prev->device != b->device || prev->index != b->index || prev->id != b->id) input_descriptor.push_back( { b->port, b->device, b->index, b->id, b->desc } ); @@ -2110,49 +3207,248 @@ static void refresh_input_binds(unsigned refresh_min_port = 0) input_descriptor.push_back( { 0 } ); environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, &input_descriptor[0]); - JOYSTICK_Enable(0, useJoy1); - JOYSTICK_Enable(1, useJoy2); + if (set_controller_info) + { + unsigned port, port_first_cd[3]; + struct retro_controller_info ports[DBP_MAX_PORTS+1] = {{0}}; + static std::vector controller_descriptions; // descriptions must be static data + controller_descriptions.clear(); + for (port = 0; port != 3; port++) + { + const DBP_Port_Device gravis_device = (port != 0 || dbp_auto_mapping ? DBP_DEVICE_GravisGamepad : DBP_DEVICE_DefaultJoypad); + const DBP_Port_Device secondjoystick_device = (port != 1 ? DBP_DEVICE_BasicJoystick2 : DBP_DEVICE_DefaultJoypad); + const DBP_Port_Device generickeyboard_device = (port < 2 ? DBP_DEVICE_BindGenericKeyboard : DBP_DEVICE_DefaultJoypad); + port_first_cd[port] = (unsigned)controller_descriptions.size(); + controller_descriptions.push_back({ "Disabled", (unsigned)DBP_DEVICE_Disabled }); + if (port == 0 && dbp_auto_mapping) + controller_descriptions.push_back({ dbp_auto_mapping_title, (unsigned)DBP_DEVICE_DefaultJoypad }); + controller_descriptions.push_back({ "Generic Keyboard Bindings", (unsigned)generickeyboard_device }); + controller_descriptions.push_back({ "Mouse with Left Analog Stick", (unsigned)DBP_DEVICE_MouseLeftAnalog }); + controller_descriptions.push_back({ "Mouse with Right Analog Stick", (unsigned)DBP_DEVICE_MouseRightAnalog }); + controller_descriptions.push_back({ "Gravis GamePad (1 D-Pad, 4 Buttons)", (unsigned)gravis_device }); + controller_descriptions.push_back({ "First DOS joystick (2 Axes, 2 Buttons)", (unsigned)DBP_DEVICE_BasicJoystick1 }); + controller_descriptions.push_back({ "Second DOS joystick (2 Axes, 2 Buttons)", (unsigned)secondjoystick_device }); + controller_descriptions.push_back({ "ThrustMaster Flight Stick (3 axes, 4 buttons, 1 hat)", (unsigned)DBP_DEVICE_ThrustMasterFlightStick }); + controller_descriptions.push_back({ "Control both DOS joysticks (4 axes, 4 buttons)", (unsigned)DBP_DEVICE_BothDOSJoysticks }); + controller_descriptions.push_back({ "Custom Keyboard Bindings", (unsigned)DBP_DEVICE_BindCustomKeyboard }); + controller_descriptions.push_back({ "Custom Keyboard + Mouse on Left Stick and B/A/X", (unsigned)DBP_DEVICE_KeyboardMouseLeftStick }); + controller_descriptions.push_back({ "Custom Keyboard + Mouse on Right Stick and L/R/X", (unsigned)DBP_DEVICE_KeyboardMouseRightStick }); + ports[port].num_types = (unsigned)controller_descriptions.size() - port_first_cd[port]; + if (!dbp_custom_mapping.empty() && port == 0) + for (retro_controller_description& rcd : controller_descriptions) + rcd.desc = "From Gamepad Mapper"; + } + for (port = 0; port != 3; port++) ports[port].types = &controller_descriptions[port_first_cd[port]]; + for (; port != DBP_MAX_PORTS; port++) ports[port] = ports[2]; + environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); + } + + refresh_dos_joysticks(); // do after control change +} + +static void set_variables(bool force_midi_scan = false) +{ + static std::vector dynstr; + dynstr.clear(); + dbp_osimages.clear(); + std::string path, subdir; + const char *system_dir = NULL; + struct retro_vfs_interface_info vfs = { 3, NULL }; + retro_time_t scan_start = time_cb(); + if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir && environ_cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs) && vfs.required_interface_version >= 3 && vfs.iface) + { + std::vector subdirs; + subdirs.push_back(std::string()); + while (subdirs.size()) + { + std::swap(subdir, subdirs.back()); + subdirs.pop_back(); + struct retro_vfs_dir_handle *dir = vfs.iface->opendir(path.assign(system_dir).append(subdir.length() ? "/" : "").append(subdir).c_str(), false); + if (!dir) continue; + while (vfs.iface->readdir(dir)) + { + const char* entry_name = vfs.iface->dirent_get_name(dir); + size_t entry_len = strlen(entry_name); + if (vfs.iface->dirent_is_dir(dir) && strcmp(entry_name, ".") && strcmp(entry_name, "..")) + subdirs.push_back(path.assign(subdir).append(subdir.length() ? "/" : "").append(entry_name)); + else if (entry_len < 4 || entry_name[entry_len - 4] != '.') { } // all files we access have a 3 letter extentions + else if (!strcasecmp(entry_name + entry_len - 3, "SF2") || (entry_len > 12 && !strcasecmp(entry_name + entry_len - 12, "_CONTROL.ROM"))) + { + dynstr.push_back(path.assign(subdir).append(subdir.length() ? "/" : "").append(entry_name)); + dynstr.push_back(entry_name[entry_len-1] == '2' ? "General MIDI SoundFont" : "Roland MT-32/CM-32L"); + dynstr.back().append(": ").append(path, 0, path.size() - (entry_name[entry_len-1] == '2' ? 4 : 12)); + } + else if (!strcasecmp(entry_name + entry_len - 3, "IMG") || !strcasecmp(entry_name + entry_len - 3, "IMA") || !strcasecmp(entry_name + entry_len - 3, "VHD")) + { + int32_t entry_size = 0; + std::string subpath = path.assign(subdir).append(subdir.length() ? "/" : "").append(entry_name); + FILE* f = fopen_wrap(path.assign(system_dir).append("/").append(subpath).c_str(), "rb"); + Bit64u fsize = 0; if (f) { fseek_wrap(f, 0, SEEK_END); fsize = (Bit64u)ftell_wrap(f); fclose(f); } + if (fsize < 1024*1024*7 || (fsize % 512)) continue; // min 7MB hard disk image made up of 512 byte sectors + dbp_osimages.push_back(subpath); + } + else if (entry_len == 23 && !subdir.length() && !force_midi_scan && !strcasecmp(entry_name, "DOSBoxPureMidiCache.txt")) + { + std::string content; + FindAndReadDosFile(path.assign(system_dir).append("/").append(entry_name).c_str(), content); + dynstr.clear(); + for (const char *pLine = content.c_str(), *pEnd = pLine + content.size() + 1, *p = pLine; p != pEnd; p++) + { + if (*p >= ' ') continue; + if (p == pLine) { pLine++; continue; } + if ((p[-3]|0x21) == 's' || dynstr.size() & 1) // check ROM/rom/SF2/sf2 extension, always add description from odd rows + dynstr.emplace_back(pLine, p - pLine); + else + dbp_osimages.emplace_back(pLine, p - pLine); + pLine = p + 1; + } + if (dynstr.size() & 1) dynstr.pop_back(); + dbp_system_cached = true; + subdirs.clear(); + break; + } + } + vfs.iface->closedir(dir); + } + } + if (force_midi_scan || (!dbp_system_cached && time_cb() - scan_start > 2000000 && system_dir)) + { + FILE* f = fopen_wrap(path.assign(system_dir).append("/").append("DOSBoxPureMidiCache.txt").c_str(), "w"); + if (f) + { + for (const std::string& s : dynstr) { fwrite(s.c_str(), s.length(), 1, f); fwrite("\n", 1, 1, f); } + for (const std::string& s : dbp_osimages) { fwrite(s.c_str(), s.length(), 1, f); fwrite("\n", 1, 1, f); } + fclose(f); + } + } + + #include "core_options.h" + for (retro_core_option_v2_definition& def : option_defs) + { + if (!def.key || strcmp(def.key, "dosbox_pure_midi")) continue; + size_t i = 0, numfiles = (dynstr.size() > (RETRO_NUM_CORE_OPTION_VALUES_MAX-4)*2 ? (RETRO_NUM_CORE_OPTION_VALUES_MAX-4)*2 : dynstr.size()); + for (size_t f = 0; f != numfiles; f += 2) + if (dynstr[f].back() == '2') + def.values[i++] = { dynstr[f].c_str(), dynstr[f+1].c_str() }; + for (size_t f = 0; f != numfiles; f += 2) + if (dynstr[f].back() != '2') + def.values[i++] = { dynstr[f].c_str(), dynstr[f+1].c_str() }; + def.values[i++] = { "disabled", "Disabled" }; + def.values[i++] = { "frontend", "Frontend MIDI driver" }; + if (dbp_system_cached) + def.values[i++] = { "scan", (!strcmp(retro_get_variable("dosbox_pure_midi", ""), "scan") ? "System directory scan finished" : "Scan System directory for soundfonts (open this menu again after)") }; + def.values[i] = { 0, 0 }; + def.default_value = def.values[0].value; + break; + } + + unsigned options_ver = 0; + if (environ_cb) environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &options_ver); + if (options_ver >= 2) + { + // Category options support, skip the first 'Show Advanced Options' entry + static const struct retro_core_options_v2 options = { option_cats, option_defs+1 }; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, (void*)&options); + } + else if (options_ver == 1) + { + // Convert options to V1 format, keep first 'Show Advanced Options' entry + static std::vector v1defs; + for (const retro_core_option_v2_definition& v2def : option_defs) + { + if (v2def.category_key) + { + // Build desc string "CATEGORY > V2DESC" + dynstr.push_back(v2def.category_key); + dynstr.back().append(" > ").append(v2def.desc); + } + v1defs.push_back({ v2def.key, (v2def.category_key ? dynstr.back().c_str() : v2def.desc), v2def.info, {}, v2def.default_value }); + memcpy(v1defs.back().values, v2def.values, sizeof(v2def.values)); + } + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, (void*)&v1defs[0]); + } + else + { + // Convert options to legacy format, skip the first 'Show Advanced Options' entry + static std::vector v0defs; + for (const retro_core_option_v2_definition& v2def : option_defs) + { + if (!v2def.desc) { v0defs.push_back({0,0}); break; } + dynstr.resize(dynstr.size() + 1); + if (v2def.category_key) + dynstr.back().append(v2def.category_key).append(" > "); + dynstr.back().append(v2def.desc).append("; ").append(v2def.default_value); + for (const retro_core_option_value& v2val : v2def.values) + if (v2val.value && strcmp(v2def.default_value, v2val.value)) + dynstr.back().append("|").append(v2val.value); + v0defs.push_back({ v2def.key, dynstr.back().c_str() }); + } + environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)&v0defs[1]); + } } -static void check_variables() +static bool check_variables(bool is_startup = false) { struct Variables { - static void DosBoxSet(const char* section_name, const char* var_name, const char* new_value, bool disallow_in_game = false) + static bool DosBoxSet(const char* section_name, const char* var_name, const char* new_value, bool disallow_in_game = false, bool need_restart = false) { - if (!control) return; + if (!control) return false; Section* section = control->GetSection(section_name); DBP_ASSERT(section); std::string str = var_name; - std::string old_val = section->GetPropValue(str); - DBP_ASSERT(old_val != "PROP_NOT_EXIST"); - if (!section || old_val == new_value) return; + Property* prop = section->GetProp(str); + DBP_ASSERT(prop); + std::string old_val = prop->GetValue().ToString(); + if (!section || old_val == new_value || prop->getChange() == Property::Changeable::OnlyByConfigProgram) return false; + bool reInitSection = (dbp_state != DBPSTATE_BOOT); if (disallow_in_game && dbp_game_running) { - retro_notify(0, RETRO_LOG_ERROR, "Unable to change value while game is running"); - return; + retro_notify(0, RETRO_LOG_WARN, "Unable to change value while game is running"); + reInitSection = false; + } + if (need_restart && reInitSection && dbp_game_running) + { + retro_notify(2000, RETRO_LOG_INFO, "Setting will be applied after restart"); + reInitSection = false; + } + else if (need_restart && reInitSection) + { + dbp_state = DBPSTATE_REBOOT; } //log_cb(RETRO_LOG_INFO, "[DOSBOX] variable %s::%s updated from %s to %s\n", section_name, var_name, old_val.c_str(), new_value); str += '='; str += new_value; - if (dbp_state != DBPSTATE_BOOT) + if (reInitSection) { - DBP_QueueEvent(DBPET_SET_VARIABLE, str, section); + DBP_ThreadControl(TCM_PAUSE_FRAME); + if (!strcmp(var_name, "midiconfig") && MIDI_TSF_SwitchSF2(str.c_str() + 11)) + { + // Do the SF2 reload directly (otherwise midi output stops until dos program restart) + section->HandleInputline(str); + } + else if (!strcmp(var_name, "cycles")) + { + // Set cycles value without Destroy/Init (because that can cause FPU overflow crashes) + DBP_CPU_ModifyCycles(str.c_str() + 7); + section->HandleInputline(str); + } + else + { + section->ExecuteDestroy(false); + section->HandleInputline(str); + section->ExecuteInit(false); + } + DBP_ThreadControl(TCM_RESUME_FRAME); } else { section->HandleInputline(str); } - } - - static const char* RetroGet(const char* key, const char* default_value) - { - retro_variable var; - var.key = key; - return (environ_cb && environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value ? var.value : default_value); + return true; } static void RetroVisibility(const char* key, bool visible) @@ -2164,79 +3460,163 @@ static void check_variables() } }; - char buf[16]; - bool show_advanced = (Variables::RetroGet("dosbox_pure_advanced", "false")[0] != 'f'); - - static const char* advanced_options[] = - { - "dosbox_pure_mouse_speed_factor_x", - "dosbox_pure_mouse_input", - "dosbox_pure_auto_mapping", - "dosbox_pure_joystick_timed", - "dosbox_pure_keyboard_layout", - "dosbox_pure_cpu_core", - "dosbox_pure_menu_time", - "dosbox_pure_sblaster_type", - "dosbox_pure_sblaster_adlib_mode", - "dosbox_pure_sblaster_adlib_emu", - "dosbox_pure_gus", - }; - for (const char* i : advanced_options) Variables::RetroVisibility(i, show_advanced); + // Depending on this we call set_variables, which needs to be done before any RetroVisibility call + const char* midi = retro_get_variable("dosbox_pure_midi", ""); + if (dbp_system_cached) + { + if (!strcmp(midi, "scan")) + { + if (dbp_system_scannable) set_variables(true); // rescan and update label on "scan" option + dbp_system_scannable = false; + midi = ""; + } + else if (!dbp_system_scannable) + { + if (!is_startup) set_variables(); // just update label on "scan" option + dbp_system_scannable = true; + } + } + + char buf[16]; + unsigned options_ver = 0; + if (environ_cb) environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &options_ver); + bool show_advanced = (options_ver != 1 || retro_get_variable("dosbox_pure_advanced", "false")[0] != 'f'); + bool visibility_changed = false; + + if (dbp_last_hideadvanced == show_advanced) + { + static const char* advanced_options[] = + { + "dosbox_pure_mouse_speed_factor_x", + "dosbox_pure_mouse_input", + "dosbox_pure_auto_mapping", + "dosbox_pure_joystick_timed", + "dosbox_pure_keyboard_layout", + "dosbox_pure_joystick_analog_deadzone", + "dosbox_pure_cpu_core", + "dosbox_pure_menu_time", + "dosbox_pure_sblaster_type", + "dosbox_pure_sblaster_adlib_mode", + "dosbox_pure_sblaster_adlib_emu", + "dosbox_pure_gus", + }; + for (const char* i : advanced_options) Variables::RetroVisibility(i, show_advanced); + dbp_last_hideadvanced = !show_advanced; + visibility_changed = true; + } + + dbp_auto_mapping_mode = retro_get_variable("dosbox_pure_auto_mapping", "true")[0]; + + char mchar = (dbp_reboot_machine ? dbp_reboot_machine : retro_get_variable("dosbox_pure_machine", "svga")[0]); + int mch = (dbp_state != DBPSTATE_BOOT ? machine : -1); + bool machine_is_svga = (mch == MCH_VGA && svgaCard != SVGA_None), machine_is_cga = (mch == MCH_CGA), machine_is_hercules = (mch == MCH_HERC); + const char* dbmachine; + switch (mchar) + { + case 's': dbmachine = retro_get_variable("dosbox_pure_svga", "svga_s3"); machine_is_svga = true; break; + case 'v': dbmachine = "vgaonly"; break; + case 'e': dbmachine = "ega"; break; + case 'c': dbmachine = "cga"; machine_is_cga = true; break; + case 't': dbmachine = "tandy"; break; + case 'h': dbmachine = "hercules"; machine_is_hercules = true; break; + case 'p': dbmachine = "pcjr"; break; + } + Variables::DosBoxSet("dosbox", "machine", dbmachine, false, true); + if (dbp_reboot_machine) + control->GetSection("dosbox")->GetProp("machine")->OnChangedByConfigProgram(), dbp_reboot_machine = 0; + + const char* mem = retro_get_variable("dosbox_pure_memory_size", "16"); + if (dbp_reboot_set64mem) mem = "64"; + bool mem_use_extended = (atoi(mem) > 0); + Variables::DosBoxSet("dos", "xms", (mem_use_extended ? "true" : "false"), true); + Variables::DosBoxSet("dos", "ems", (mem_use_extended ? "true" : "false"), true); + Variables::DosBoxSet("dosbox", "memsize", (mem_use_extended ? mem : "16"), false, true); + + const char* audiorate = retro_get_variable("dosbox_pure_audiorate", DBP_DEFAULT_SAMPLERATE_STRING); + Variables::DosBoxSet("mixer", "rate", audiorate, false, true); if (dbp_state == DBPSTATE_BOOT) { - const char* machine = Variables::RetroGet("dosbox_pure_machine", "svga"); - if (!strcmp(machine, "svga")) - machine = Variables::RetroGet("dosbox_pure_svga", "svga_s3"); - else if (!strcmp(machine, "vga")) - machine = "vgaonly"; - Variables::DosBoxSet("dosbox", "machine", machine); + dbp_last_machine = mchar; - const char* audiorate = Variables::RetroGet("dosbox_pure_audiorate", DBP_DEFAULT_SAMPLERATE_STRING); - Variables::DosBoxSet("mixer", "rate", audiorate); Variables::DosBoxSet("sblaster", "oplrate", audiorate); Variables::DosBoxSet("speaker", "pcrate", audiorate); Variables::DosBoxSet("speaker", "tandyrate", audiorate); - dbp_auto_mapping_mode = Variables::RetroGet("dosbox_pure_auto_mapping", "true")[0]; - // initiate audio buffer, we don't need SDL specific behavior, so just set a large enough buffer Variables::DosBoxSet("mixer", "prebuffer", "0"); Variables::DosBoxSet("mixer", "blocksize", "2048"); } - const char* mem = Variables::RetroGet("dosbox_pure_memory_size", "16"); - bool mem_use_extended = (atoi(mem) > 0); - Variables::DosBoxSet("dos", "xms", (mem_use_extended ? "true" : "false"), true); - Variables::DosBoxSet("dos", "ems", (mem_use_extended ? "true" : "false"), true); - Variables::DosBoxSet("dosbox", "memsize", (mem_use_extended ? mem : "16"), true); + // Emulation options + dbp_force60fps = (retro_get_variable("dosbox_pure_force60fps", "default")[0] == 't'); + + const char latency = retro_get_variable("dosbox_pure_latency", "none")[0]; + bool toggled_variable = (dbp_state != DBPSTATE_BOOT && (dbp_latency == DBP_LATENCY_VARIABLE) != (latency == 'v')); + if (toggled_variable) DBP_ThreadControl(TCM_PAUSE_FRAME); + switch (latency) + { + case 'l': dbp_latency = DBP_LATENCY_LOW; break; + case 'v': dbp_latency = DBP_LATENCY_VARIABLE; break; + default: dbp_latency = DBP_LATENCY_DEFAULT; break; + } + if (toggled_variable) DBP_ThreadControl(dbp_pause_events ? TCM_RESUME_FRAME : TCM_NEXT_FRAME); + Variables::RetroVisibility("dosbox_pure_auto_target", (dbp_latency == DBP_LATENCY_LOW)); - // handle setting strings like on/yes/true/savestate or rewind - const char* savestate = Variables::RetroGet("dosbox_pure_savestate", "false"); - char ss0 = (savestate[0] | 0x20), ss1 = (savestate[1] | 0x20); // to lower case - dbp_serializemode = ((ss0 == 'o' && ss1 == 'n') || ss0 == 'y' || ss0 == 't' || ss0 == 's' ? DBPSERIALIZE_STATES : (ss0 == 'r' ? DBPSERIALIZE_REWIND : DBPSERIALIZE_DISABLED)); + switch (retro_get_variable("dosbox_pure_perfstats", "none")[0]) + { + case 's': dbp_perf = DBP_PERF_SIMPLE; break; + case 'd': dbp_perf = DBP_PERF_DETAILED; break; + default: dbp_perf = DBP_PERF_NONE; break; + } + switch (retro_get_variable("dosbox_pure_savestate", "on")[0]) + { + case 'd': dbp_serializemode = DBPSERIALIZE_DISABLED; break; + case 'r': dbp_serializemode = DBPSERIALIZE_REWIND; break; + default: dbp_serializemode = DBPSERIALIZE_STATES; break; + } DBPArchive::accomodate_delta_encoding = (dbp_serializemode == DBPSERIALIZE_REWIND); + dbp_conf_loading = retro_get_variable("dosbox_pure_conf", "false")[0]; + dbp_menu_time = (char)atoi(retro_get_variable("dosbox_pure_menu_time", "5")); - const char* cycles = Variables::RetroGet("dosbox_pure_cycles", "auto"); + const char* cycles = retro_get_variable("dosbox_pure_cycles", "auto"); bool cycles_numeric = (cycles[0] >= '0' && cycles[0] <= '9'); Variables::RetroVisibility("dosbox_pure_cycles_scale", cycles_numeric); + Variables::RetroVisibility("dosbox_pure_cycle_limit", !cycles_numeric); if (cycles_numeric) { - snprintf(buf, sizeof(buf), "%d", (int)(atoi(cycles) * (float)atof(Variables::RetroGet("dosbox_pure_cycles_scale", "1.0")) + .499)); + snprintf(buf, sizeof(buf), "%d", (int)(atoi(cycles) * (float)atof(retro_get_variable("dosbox_pure_cycles_scale", "1.0")) + .499)); cycles = buf; } - Variables::DosBoxSet("cpu", "cycles", cycles); + visibility_changed |= Variables::DosBoxSet("cpu", "cycles", cycles); + + dbp_auto_target = + (dbp_latency == DBP_LATENCY_LOW ? (float)atof(retro_get_variable("dosbox_pure_auto_target", "0.8")) : 1.0f) + * (cycles_numeric ? 1.0f : (float)atof(retro_get_variable("dosbox_pure_cycle_limit", "1.0"))); + + extern const char* RunningProgram; + Variables::DosBoxSet("cpu", "core", ((!memcmp(RunningProgram, "BOOT", 5) && retro_get_variable("dosbox_pure_bootos_forcenormal", "false")[0] == 't') ? "normal" : retro_get_variable("dosbox_pure_cpu_core", "auto"))); + Variables::DosBoxSet("cpu", "cputype", retro_get_variable("dosbox_pure_cpu_type", "auto"), true); - const char* machine = Variables::RetroGet("dosbox_pure_machine", "svga"); + if (dbp_last_machine != mchar) + { + dbp_last_machine = mchar; + visibility_changed = true; + } - bool machine_is_svga = !strcmp(machine, "svga"); Variables::RetroVisibility("dosbox_pure_svga", machine_is_svga); + Variables::RetroVisibility("dosbox_pure_voodoo", machine_is_svga); + Variables::RetroVisibility("dosbox_pure_voodoo_perf", machine_is_svga); + if (machine_is_svga) + { + Variables::DosBoxSet("pci", "voodoo", retro_get_variable("dosbox_pure_voodoo", "12mb"), true, true); + Variables::DosBoxSet("pci", "voodoo_perf", retro_get_variable("dosbox_pure_voodoo_perf", "1"), true); + } - bool machine_is_cga = !strcmp(machine, "cga"); Variables::RetroVisibility("dosbox_pure_cga", machine_is_cga); if (machine_is_cga) { - const char* cga = Variables::RetroGet("dosbox_pure_cga", "early_auto"); + const char* cga = retro_get_variable("dosbox_pure_cga", "early_auto"); bool cga_new_model = false; const char* cga_mode = NULL; if (!memcmp(cga, "early_", 6)) { cga_new_model = false; cga_mode = cga + 6; } @@ -2244,21 +3624,16 @@ static void check_variables() DBP_CGA_SetModelAndComposite(cga_new_model, (!cga_mode || cga_mode[0] == 'a' ? 0 : ((cga_mode[0] == 'o' && cga_mode[1] == 'n') ? 1 : 2))); } - bool machine_is_hercules = !strcmp(machine, "hercules"); Variables::RetroVisibility("dosbox_pure_hercules", machine_is_hercules); if (machine_is_hercules) { - const char herc_mode = Variables::RetroGet("dosbox_pure_hercules", "white")[0]; + const char herc_mode = retro_get_variable("dosbox_pure_hercules", "white")[0]; DBP_Hercules_SetPalette(herc_mode == 'a' ? 1 : (herc_mode == 'g' ? 2 : 0)); } - Variables::DosBoxSet("render", "aspect", Variables::RetroGet("dosbox_pure_aspect_correction", "false")); - Variables::DosBoxSet("cpu", "core", Variables::RetroGet("dosbox_pure_cpu_core", "auto" )); - Variables::DosBoxSet("cpu", "cputype", Variables::RetroGet("dosbox_pure_cpu_type", "auto" )); + Variables::DosBoxSet("render", "aspect", retro_get_variable("dosbox_pure_aspect_correction", "false")); - dbp_menu_time = (char)atoi(Variables::RetroGet("dosbox_pure_menu_time", "5")); - - const char* sblaster_conf = Variables::RetroGet("dosbox_pure_sblaster_conf", "A220 I7 D1 H5"); + const char* sblaster_conf = retro_get_variable("dosbox_pure_sblaster_conf", "A220 I7 D1 H5"); static const char sb_attribs[] = { 'A', 'I', 'D', 'H' }; static const char* sb_props[] = { "sbbase", "irq", "dma", "hdma" }; for (int i = 0; i != 4; i++) @@ -2273,36 +3648,30 @@ static void check_variables() } std::string soundfontpath; - const char* midi = Variables::RetroGet("dosbox_pure_midi", ""); - if (!*midi) midi = Variables::RetroGet("dosbox_pure_soundfont", ""); // old option name - if (!strcasecmp(midi, "disabled") || !strcasecmp(midi, "none")) midi = ""; - else if (*midi && strcasecmp(midi, "frontend")) - { - const char *system_dir = NULL; - environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir); - midi = soundfontpath.assign(system_dir).append("/").append(midi).c_str(); - } + if (!strcmp(midi, "disabled") || !strcasecmp(midi, "none")) midi = ""; + else if (*midi && strcmp(midi, "frontend") && strcmp(midi, "scan")) + midi = (soundfontpath = DBP_GetSaveFile(SFT_SYSTEMDIR)).append(midi).c_str(); Variables::DosBoxSet("midi", "midiconfig", midi); - Variables::DosBoxSet("sblaster", "sbtype", Variables::RetroGet("dosbox_pure_sblaster_type", "sb16")); - Variables::DosBoxSet("sblaster", "oplmode", Variables::RetroGet("dosbox_pure_sblaster_adlib_mode", "auto")); - Variables::DosBoxSet("sblaster", "oplemu", Variables::RetroGet("dosbox_pure_sblaster_adlib_emu", "default")); - Variables::DosBoxSet("gus", "gus", Variables::RetroGet("dosbox_pure_gus", "false")); + Variables::DosBoxSet("sblaster", "sbtype", retro_get_variable("dosbox_pure_sblaster_type", "sb16")); + Variables::DosBoxSet("sblaster", "oplmode", retro_get_variable("dosbox_pure_sblaster_adlib_mode", "auto")); + Variables::DosBoxSet("sblaster", "oplemu", retro_get_variable("dosbox_pure_sblaster_adlib_emu", "default")); + Variables::DosBoxSet("gus", "gus", retro_get_variable("dosbox_pure_gus", "false")); - Variables::DosBoxSet("joystick", "timed", Variables::RetroGet("dosbox_pure_joystick_timed", "true")); + Variables::DosBoxSet("joystick", "timed", retro_get_variable("dosbox_pure_joystick_timed", "true")); // Keyboard layout can't be change in protected mode (extracting keyboard layout doesn't work when EMS/XMS is in use) - Variables::DosBoxSet("dos", "keyboardlayout", Variables::RetroGet("dosbox_pure_keyboard_layout", "us"), true); + Variables::DosBoxSet("dos", "keyboardlayout", retro_get_variable("dosbox_pure_keyboard_layout", "us"), true); - const char* mouse_wheel = Variables::RetroGet("dosbox_pure_mouse_wheel", "67/68"); + const char* mouse_wheel = retro_get_variable("dosbox_pure_mouse_wheel", "67/68"); const char* mouse_wheel2 = (mouse_wheel ? strchr(mouse_wheel, '/') : NULL); int wkey1 = (mouse_wheel ? atoi(mouse_wheel) : 0); int wkey2 = (mouse_wheel2 ? atoi(mouse_wheel2 + 1) : 0); - Bit16u bind_mousewheel (wkey1 > KBD_NONE && wkey1 < KBD_LAST && wkey2 > KBD_NONE && wkey2 < KBD_LAST ? DBP_KEYAXIS_MAKE(wkey1, wkey2) : 0); + Bit16s bind_mousewheel = (wkey1 > KBD_NONE && wkey1 < KBD_LAST && wkey2 > KBD_NONE && wkey2 < KBD_LAST ? DBP_MAPPAIR_MAKE(wkey1, wkey2) : 0); - bool bind_unused = (Variables::RetroGet("dosbox_pure_bind_unused", "true")[0] != 'f'); - bool on_screen_keyboard = (Variables::RetroGet("dosbox_pure_on_screen_keyboard", "true")[0] != 'f'); - bool mouse_input = (Variables::RetroGet("dosbox_pure_mouse_input", "true")[0] != 'f'); + bool bind_unused = (retro_get_variable("dosbox_pure_bind_unused", "true")[0] != 'f'); + bool on_screen_keyboard = (retro_get_variable("dosbox_pure_on_screen_keyboard", "true")[0] != 'f'); + bool mouse_input = (retro_get_variable("dosbox_pure_mouse_input", "true")[0] != 'f'); if (bind_unused != dbp_bind_unused || on_screen_keyboard != dbp_on_screen_keyboard || mouse_input != dbp_mouse_input || bind_mousewheel != dbp_bind_mousewheel) { dbp_bind_unused = bind_unused; @@ -2311,70 +3680,139 @@ static void check_variables() dbp_bind_mousewheel = bind_mousewheel; if (dbp_state > DBPSTATE_SHUTDOWN) refresh_input_binds(); } + dbp_alphablend_base = (Bit8u)((atoi(retro_get_variable("dosbox_pure_menu_transparency", "50")) * 0xFF + 50) / 100); + dbp_mouse_speed = (float)atof(retro_get_variable("dosbox_pure_mouse_speed_factor", "1.0")); + dbp_mouse_speed_x = (float)atof(retro_get_variable("dosbox_pure_mouse_speed_factor_x", "1.0")); - dbp_mouse_speed = (float)atof(Variables::RetroGet("dosbox_pure_mouse_speed_factor", "1.0")); - dbp_mouse_speed_x = (float)atof(Variables::RetroGet("dosbox_pure_mouse_speed_factor_x", "1.0")); + dbp_joy_analog_deadzone = (int)((float)atoi(retro_get_variable("dosbox_pure_joystick_analog_deadzone", "15")) * 0.01f * (float)DBP_JOY_ANALOG_RANGE); - dbp_joy_analog_deadzone = (int)((float)atoi(Variables::RetroGet("dosbox_pure_joystick_analog_deadzone", "15")) * 0.01f * (float)DBP_JOY_ANALOG_RANGE); + return visibility_changed; } -static bool init_dosbox(const char* path, bool firsttime) +static bool init_dosbox(const char* path, bool firsttime, std::string* dosboxconf = NULL) { DBP_ASSERT(dbp_state == DBPSTATE_BOOT); control = new Config(); DOSBOX_Init(); - check_variables(); + check_variables(true); + Section* autoexec = control->GetSection("autoexec"); + if (dosboxconf) + { + std::string line; Section* section = NULL; std::string::size_type loc; + for (std::istringstream in(*dosboxconf); std::getline(in, line);) + { + trim(line); + switch (line.size() ? line[0] : 0) + { + case '%': case '\0': case '#': case ' ': case '\r': case '\n': continue; + case '[': + if ((loc = line.find(']')) == std::string::npos) continue; + if (Section* sec = control->GetSection(line.erase(loc).erase(0, 1))) section = sec; + continue; + default: + if (!section || !section->HandleInputline(line)) continue; + if (section == autoexec) autoexec = NULL; // skip our default autoexec + if ((loc = line.find('=')) == std::string::npos) continue; + trim(line.erase(loc)); + if (Property* p = section->GetProp(line)) p->OnChangedByConfigProgram(); + } + } + } dbp_boot_time = time_cb(); control->Init(); PROGRAMS_MakeFile("PUREMENU.COM", DBP_PureMenuProgram); PROGRAMS_MakeFile("LABEL.COM", DBP_PureLabelProgram); PROGRAMS_MakeFile("REMOUNT.COM", DBP_PureRemountProgram); - DOS_Drive* union_underlay = (path ? DBP_Mount(path, true, true) : NULL); + const char *path_file, *path_ext; size_t path_namelen; + if (path && DBP_ExtractPathInfo(path, &path_file, &path_namelen, &path_ext)) + { + dbp_content_path = path; + dbp_content_name = std::string(path_file, path_namelen); + } - if (!dbp_disk_eject_state && dbp_disk_image_index < dbp_images.size() && !Drives['A'-'A'] && !Drives['D'-'A']) - DBP_Mount(dbp_images[dbp_disk_image_index].c_str(), false, false); + dbp_legacy_save = false; + std::string save_file = DBP_GetSaveFile(SFT_GAMESAVE); // this can set dbp_legacy_save to true, needed by DBP_Mount + DOS_Drive* union_underlay = (path ? DBP_Mount(0, false, 0, path) : NULL); if (!Drives['C'-'A']) { - if (!union_underlay) union_underlay = new memoryDrive(); - - std::string save_file; - const char *env_save_dir = NULL; - environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &env_save_dir); - if (env_save_dir) + if (!union_underlay) { - save_file = env_save_dir; - save_file += '/'; - save_file += (dbp_content_name.empty() ? "DOSBox-pure" : dbp_content_name.c_str()); - save_file += ".save.zip"; + union_underlay = new memoryDrive(); + if (path) DBP_SetDriveLabelFromContentPath(union_underlay, path, 'C', path_file, path_ext); } - unionDrive* uni = new unionDrive(*union_underlay, (save_file.empty() ? NULL : &save_file[0]), true); Drives['C'-'A'] = uni; - - // Set the media byte and the hard drive label and switch to it mem_writeb(Real2Phys(dos.tables.mediaid) + ('C'-'A') * 9, uni->GetMediaByte()); } - // Detect auto mapping - if (firsttime && dbp_auto_mapping_mode != 'f') + // A reboot can happen during the first frame if puremenu wants to change DOSBox machine config at which point we cannot request input_state yet (RetroArch would crash) + bool force_start_menu = (dbp_biosreboot ? true : (!input_state_cb ? false : ( + input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_LSHIFT) || + input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RSHIFT) || + input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2) || + input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2)))); + + if (dbp_conf_loading != 'f' && !force_start_menu && !dosboxconf) + { + const char* confpath = NULL; std::string strconfpath, confcontent; + if (dbp_conf_loading == 'i' && Drives['C'-'A']) // load confs 'i'nside content + { + if (Drives['C'-'A']->FileExists("$C:\\DOSBOX.CON"+4)) { confpath = "$C:\\DOSBOX.CON"; } //8.3 filename in ZIPs + else if (Drives['C'-'A']->FileExists("$C:\\DOSBOX~1.CON"+4)) { confpath = "$C:\\DOSBOX~1.CON"; } //8.3 filename in local file systems + } + else if (dbp_conf_loading == 'o' && path) // load confs 'o'utside content + { + confpath = ((strconfpath.assign(path, path_ext - path) += (path_ext[-1] == '.' ? "" : ".")) += "conf").c_str(); + } + if (confpath && FindAndReadDosFile(confpath, confcontent)) + { + delete control; + return init_dosbox(path, firsttime, &confcontent); + } + } + + // Detect content year and auto mapping + if (firsttime) { struct Local { static void FileIter(const char* path, bool is_dir, Bit32u size, Bit16u, Bit16u, Bit8u, Bitu data) { - if (is_dir || dbp_auto_mapping) return; - const char* lastslash = strrchr(path, '\\'); + if (is_dir) return; + const char* lastslash = strrchr(path, '\\'), *fname = (lastslash ? lastslash + 1 : path); + + // Check mountable disk images on drive C + const char* fext = (data == ('C'-'A') ? strrchr(fname, '.') : NULL); + if (fext++) + { + bool isFS = (!strcmp(fext, "ISO") || !strcmp(fext, "CUE") || !strcmp(fext, "INS") || !strcmp(fext, "IMG") || !strcmp(fext, "IMA") || !strcmp(fext, "VHD") || !strcmp(fext, "JRC") || !strcmp(fext, "TC")); + if (isFS && !strncmp(fext, "IM", 2) && (size < 163840 || (size <= 2949120 && (size % 20480) && (size % 20480) != 1024))) isFS = false; //validate floppy images + if (isFS && !strcmp(fext, "INS")) + { + // Make sure this is an actual CUE file with an INS extension + Bit8u cmd[6]; + if (size >= 16384 || DriveReadFileBytes(Drives['C'-'A'], path, cmd, (Bit16u)sizeof(cmd)) != sizeof(cmd) || memcmp(cmd, "FILE \"", sizeof(cmd))) isFS = false; + } + if (isFS) + { + std::string entry; + entry.reserve(4 + (fext - path) + 4); + (entry += "$C:\\") += path; // the '$' is for FindAndOpenDosFile + DBP_AppendImage(entry.c_str(), true); + } + } + if (dbp_auto_mapping) return; Bit32u hash = 0x811c9dc5; - for (const char* p = (lastslash ? lastslash + 1 : path); *p; p++) + for (const char* p = fname; *p; p++) hash = ((hash * 0x01000193) ^ (Bit8u)*p); hash ^= (size<<3); for (Bit32u idx = hash;; idx++) { - if (!map_keys[idx &= (MAP_TABLE_SIZE-1)]) break; + if (!map_keys[idx %= MAP_TABLE_SIZE]) break; if (map_keys[idx] != hash) continue; static std::vector static_buf; @@ -2391,8 +3829,12 @@ static bool init_dosbox(const char* path, bool firsttime) const Bit16u map_offset = (ident[1]<<8) + ident[2]; const char* map_title = (char*)buf + (MAP_TABLE_SIZE/MAP_BUCKETS) * 5 + (ident[3]<<8) + ident[4]; + dbp_content_year = (Bit16s)(1970 + (Bit8u)map_title[0]); + if (dbp_auto_mapping_mode == 'f') + return; + static_title = "Detected Automatic Key Mapping: "; - static_title += map_title; + static_title += map_title + 1; dbp_auto_mapping_title = static_title.c_str(); static_buf.resize(mappings_bk.mappings_size_uncompressed); @@ -2408,37 +3850,93 @@ static bool init_dosbox(const char* path, bool firsttime) } } }; + for (int i = 0; i != ('Z'-'A'); i++) - if (Drives[i] && !dbp_auto_mapping) - DriveFileIterator(Drives[i], Local::FileIter); + if (Drives[i]) + DriveFileIterator(Drives[i], Local::FileIter, i); + + if (dbp_images.size()) + { + for (size_t i = 0; i != dbp_images.size(); i++) + { + // Filter image files that have the same name as a cue file + const char *imgpath = dbp_images[i].path.c_str(), *imgext = imgpath + dbp_images[i].path.length() - 3; + if (strcmp(imgext, "CUE") && strcmp(imgext, "INS")) continue; + for (size_t j = dbp_images.size(); j--;) + { + if (i == j || memcmp(dbp_images[j].path.c_str(), imgpath, imgext - imgpath)) continue; + dbp_images.erase(dbp_images.begin() + j); + if (i > j) i--; + } + } + } + + if (!dbp_content_year && path) + { + // Try to find a year somewhere in the content path, i.e. "Game (1993).zip" or "/DOS/1993/Game.zip" + for (const char *p = path + strlen(path), *pMin = path + 5; p >= pMin; p--) + { + while (p >= pMin && *p != ')' && *p != '/' && *p != '\\') p--; + if (p < pMin || (p[-5] != '(' && p[-5] != '/' && p[-5] != '\\')) continue; + int year = (int)atoi(p-4) * ((p[-2]|0x20) == 'x' ? 100 : ((p[-1]|0x20) == 'x' ? 10 : 1)); + if (year > 1970 && year < 2100) { dbp_content_year = (Bit16s)year; break; } + } + } + + DBP_PadMapping::Load(); } - // Always launch puremenu, to tell us the shell was fully started - control->GetSection("autoexec")->ExecuteDestroy(); - static_cast(control->GetSection("autoexec"))->data += "@PUREMENU -BOOT\n"; - control->GetSection("autoexec")->ExecuteInit(); + // Joysticks are refreshed after control modifications but needs to be done here also to happen on core restart + refresh_dos_joysticks(); - char org_menu_time = dbp_menu_time; - bool force_start_menu = (!input_state_cb ? false : ( - input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_LSHIFT) || - input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RSHIFT) || - input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2) || - input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2))); - if (force_start_menu) dbp_menu_time = (char)-1; - - // Start DOSBox and wait until the shell has fully started - DBP_ASSERT(DOS_GetDefaultDrive() == ('Z'-'A')); // Shell must start with Z:\AUTOEXEC.BAT - dbp_lastmenuticks = (Bit32u)-1; - Thread::StartDetached(DBP_RunThreadDosBox); - while (dbp_lastmenuticks == (Bit32u)-1) - { - if (dbp_state == DBPSTATE_EXITED) { DBP_Shutdown(); return false; } - sleep_ms(1); - } - dbp_state = DBPSTATE_WAIT_FIRST_FRAME; - dbp_retro_activity = 1; - dbp_last_run = DBP_GetTicks(); - dbp_menu_time = org_menu_time; + // If mounted, always switch to the C: drive directly (for puremenu, to run DOSBOX.BAT and to run the autoexec of the dosbox conf) + // For DBP we modified init_line to always run Z:\AUTOEXEC.BAT and not just any AUTOEXEC.BAT of the current drive/directory + DOS_SetDrive('C'-'A'); + + if (autoexec) + { + bool auto_mount = true; + autoexec->ExecuteDestroy(); + if (!force_start_menu && path && (!strcasecmp(path_ext, "EXE") || !strcasecmp(path_ext, "COM") || !strcasecmp(path_ext, "BAT"))) + { + (((((static_cast(autoexec)->data += '@') += ((path_ext[0]|0x20) == 'b' ? "call " : "")) += path_file) += '\n') += "@Z:PUREMENU") += " -FINISH\n"; + } + else if (!force_start_menu && Drives['C'-'A'] && Drives['C'-'A']->FileExists("DOSBOX.BAT")) + { + ((static_cast(autoexec)->data += '@') += "DOSBOX.BAT") += '\n'; + auto_mount = false; + } + else + { + // Boot into puremenu, it will take care of further auto start options + ((static_cast(autoexec)->data += "@Z:PUREMENU") += (force_start_menu ? "" : " -BOOT")) += '\n'; + } + autoexec->ExecuteInit(); + + // Mount the first found cdrom image as well as the first found floppy, or reinsert them on core restart (and keep selected index) + unsigned active_disk_image_index = dbp_disk_image_index; + for (unsigned i = 0; auto_mount && i != (unsigned)dbp_images.size(); i++) + if (!firsttime && (dbp_images[i].path[0] == '$' && !Drives[dbp_images[i].path[1]-'A'])) + dbp_images.erase(dbp_images.begin() + (i--)); + else if (firsttime || dbp_images[i].was_mounted) + DBP_Mount(i); + if (!firsttime) dbp_disk_image_index = (active_disk_image_index >= dbp_images.size() ? 0 : active_disk_image_index); + } + + struct Local + { + static Thread::RET_t THREAD_CC ThreadDOSBox(void*) + { + control->StartUp(); + DBP_ThreadControl(TCM_ON_SHUTDOWN); + return 0; + } + }; + + // Start DOSBox thread + dbp_frame_pending = true; + dbp_state = DBPSTATE_FIRST_FRAME; + Thread::StartDetached(Local::ThreadDOSBox); return true; } @@ -2487,6 +3985,7 @@ void retro_init(void) //#3 { static void RETRO_CALLCONV keyboard_event(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers) { + // This can be called from another thread. Hopefully we can get away without a mutex in DBP_QueueEvent. int val = dbp_keymap_retro2dos[keycode]; if (!val) return; if (down && !dbp_keys_down[val]) @@ -2501,35 +4000,25 @@ void retro_init(void) //#3 } } - static void RETRO_CALLCONV retro_frame_time(retro_usec_t usec) - { - dbp_frame_time = usec; - dbp_timing_tamper = (usec == 0 && dbp_state == DBPSTATE_RUNNING); - bool variable_update = false; - // because usec is > 0 when the menu is active even though retro_run is paused we always check variables here, too - if (/*dbp_timing_tamper && */environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &variable_update) && variable_update) - check_variables(); - } - static bool RETRO_CALLCONV set_eject_state(bool ejected) { - if (dbp_images.size() == 0) { dbp_disk_eject_state = true; return ejected; } - if (dbp_disk_eject_state == ejected) return true; + if (dbp_images.size() == 0) return ejected; + if (dbp_images[dbp_disk_image_index].mounted != ejected) return true; + DBP_ThreadControl(TCM_PAUSE_FRAME); if (ejected) - DBP_QueueEvent(DBPET_UNMOUNT, 0); + DBP_Unmount(dbp_images[dbp_disk_image_index].drive); else - { - std::string swappable = dbp_images[dbp_disk_image_index]; - DBP_QueueEvent(DBPET_MOUNT, swappable); - } - dbp_disk_eject_state = ejected; + DBP_Mount(dbp_disk_image_index, true); + DBP_SetMountSwappingRequested(); // set swapping_requested flag for CMscdex::GetMediaStatus + DBP_ThreadControl(TCM_RESUME_FRAME); + DBP_QueueEvent(DBPET_CHANGEMOUNTS); return true; } static bool RETRO_CALLCONV get_eject_state() { - if (dbp_images.size() == 0) dbp_disk_eject_state = true; - return dbp_disk_eject_state; + if (dbp_images.size() == 0) return true; + return !dbp_images[dbp_disk_image_index].mounted; } static unsigned RETRO_CALLCONV get_image_index() @@ -2552,6 +4041,8 @@ void retro_init(void) //#3 static bool RETRO_CALLCONV replace_image_index(unsigned index, const struct retro_game_info *info) { if (index >= dbp_images.size()) return false; + if (dbp_images[dbp_disk_image_index].mounted) + DBP_Unmount(dbp_images[dbp_disk_image_index].drive); if (info == NULL) { if (dbp_disk_image_index > index) dbp_disk_image_index--; @@ -2560,7 +4051,7 @@ void retro_init(void) //#3 } else { - dbp_images[index] = info->path; + dbp_images[index].path = info->path; } return true; } @@ -2579,25 +4070,38 @@ void retro_init(void) //#3 static bool RETRO_CALLCONV get_image_path(unsigned index, char *path, size_t len) { if (index >= dbp_images.size()) return false; - safe_strncpy(path, dbp_images[index].c_str(), len); + safe_strncpy(path, dbp_images[index].path.c_str(), len); return true; } static bool RETRO_CALLCONV get_image_label(unsigned index, char *label, size_t len) { if (index >= dbp_images.size()) return false; - const char *lastSlash = strrchr(dbp_images[index].c_str(), '/'), *lastBackSlash = strrchr(dbp_images[index].c_str(), '\\'); - const char *basePath = (lastSlash && lastSlash > lastBackSlash ? lastSlash + 1 : (lastBackSlash ? lastBackSlash + 1 : dbp_images[index].c_str())); - safe_strncpy(label, basePath, len); + std::string lbl; + DBP_GetImageLabel(index, lbl); + safe_strncpy(label, lbl.c_str(), len); return true; } + + static bool RETRO_CALLCONV options_update_display(void) + { + // because we read variables here, clear variable dirty flag in frontend + bool variable_update; environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &variable_update); + return check_variables(); + } }; + struct retro_log_callback logging; + log_cb = (environ_cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logging) ? logging.log : retro_fallback_log); + #ifdef ANDROID + log_cb = (void (*)(enum retro_log_level, const char *, ...))AndroidLogFallback; + #endif + static const struct retro_keyboard_callback kc = { CallBacks::keyboard_event }; environ_cb(RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK, (void*)&kc); - static const struct retro_frame_time_callback rftc = { CallBacks::retro_frame_time, 0 }; - environ_cb(RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK, (void*)&rftc); + static const struct retro_core_options_update_display_callback coudc = { CallBacks::options_update_display }; + dbp_optionsupdatecallback = environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK, (void*)&coudc); static const retro_disk_control_ext_callback disk_control_callback = { @@ -2611,59 +4115,14 @@ void retro_init(void) //#3 if (!environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE, (void*)&disk_control_callback)) environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, (void*)&disk_control_callback); - static std::vector synthfiles; - const char *system_dir = NULL; - struct retro_vfs_interface_info vfs = { 3, NULL }; - if (environ_cb && environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir && environ_cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs) && vfs.required_interface_version >= 3 && vfs.iface) - { - std::string path, subdir; - std::vector subdirs; - subdirs.push_back(std::string()); - while (subdirs.size()) - { - std::swap(subdir, subdirs.back()); - subdirs.pop_back(); - struct retro_vfs_dir_handle *dir = vfs.iface->opendir(path.assign(system_dir).append(subdir.length() ? "/" : "").append(subdir).c_str(), false); - if (!dir) continue; - while (vfs.iface->readdir(dir)) - { - const char* entry_name = vfs.iface->dirent_get_name(dir); - size_t entry_len = strlen(entry_name); - if (vfs.iface->dirent_is_dir(dir) && strcmp(entry_name, ".") && strcmp(entry_name, "..")) - subdirs.push_back(path.assign(subdir).append(subdir.length() ? "/" : "").append(entry_name)); - else if ((entry_len > 4 && !strcasecmp(entry_name + entry_len - 4, ".sf2")) - || (entry_len > 12 && !strcasecmp(entry_name + entry_len - 12, "_CONTROL.ROM"))) - { - synthfiles.push_back(path.assign(subdir).append(subdir.length() ? "/" : "").append(entry_name)); - synthfiles.push_back(entry_name[entry_len-1] == '2' ? "General MIDI SoundFont" : "Roland MT-32/CM-32L"); - synthfiles.back().append(": ").append(path, 0, path.size() - (entry_name[entry_len-1] == '2' ? 4 : 12)); - } - } - vfs.iface->closedir(dir); - } - } - - #include "core_options.h" - for (retro_core_option_definition& def : option_defs) - { - if (!def.key || strcmp(def.key, "dosbox_pure_midi")) continue; - size_t i = 0, numfiles = (synthfiles.size() > (RETRO_NUM_CORE_OPTION_VALUES_MAX-2)*2 ? (RETRO_NUM_CORE_OPTION_VALUES_MAX-2)*2 : synthfiles.size()); - for (size_t f = 0; f != numfiles; f += 2) - if (synthfiles[f].back() == '2') - def.values[i++] = { synthfiles[f].c_str(), synthfiles[f+1].c_str() }; - for (size_t f = 0; f != numfiles; f += 2) - if (synthfiles[f].back() != '2') - def.values[i++] = { synthfiles[f].c_str(), synthfiles[f+1].c_str() }; - def.values[i ] = { "disabled", "Disabled" }; - def.values[i+1] = { "frontend", "Frontend MIDI driver" }; - def.default_value = def.values[0].value; - break; - } - environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, (void*)&option_defs); + struct retro_perf_callback perf; + if (environ_cb(RETRO_ENVIRONMENT_GET_PERF_INTERFACE, &perf) && perf.get_time_usec) time_cb = perf.get_time_usec; // Set default ports dbp_port_devices[0] = (DBP_Port_Device)DBP_DEVICE_DefaultJoypad; dbp_port_devices[1] = (DBP_Port_Device)DBP_DEVICE_DefaultJoypad; + + set_variables(); } bool retro_load_game(const struct retro_game_info *info) //#4 @@ -2675,14 +4134,6 @@ bool retro_load_game(const struct retro_game_info *info) //#4 return false; } - struct retro_perf_callback perf; - time_cb = (environ_cb(RETRO_ENVIRONMENT_GET_PERF_INTERFACE, &perf) ? perf.get_time_usec : NULL); - if (!time_cb) - { - retro_notify(0, RETRO_LOG_ERROR, "Frontend does not supply proper PERF_INTERFACE.\n"); - return false; - } - //// RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK crashes RetroArch with the XAudio driver when launching from the command line //// Also it explicitly doesn't support save state rewinding when used so give up on this for now. //struct CallBacks @@ -2732,36 +4183,7 @@ bool retro_load_game(const struct retro_game_info *info) //#4 bool support_achievements = true; environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &support_achievements); - unsigned port, port_first_cd[3]; - struct retro_controller_info ports[DBP_MAX_PORTS+1] = {{0}}; - static std::vector controller_descriptions; // descriptions must be static data - controller_descriptions.clear(); - for (port = 0; port != 3; port++) - { - const DBP_Port_Device gravis_device = (port != 0 || dbp_auto_mapping ? DBP_DEVICE_GravisGamepad : DBP_DEVICE_DefaultJoypad); - const DBP_Port_Device secondjoystick_device = (port != 1 ? DBP_DEVICE_BasicJoystick2 : DBP_DEVICE_DefaultJoypad); - port_first_cd[port] = (unsigned)controller_descriptions.size(); - controller_descriptions.push_back({ "Disabled", DBP_DEVICE_Disabled }); - if (port == 0 && dbp_auto_mapping) - controller_descriptions.push_back({ dbp_auto_mapping_title, DBP_DEVICE_DefaultJoypad }); - controller_descriptions.push_back({ "Generic Keyboard Bindings", DBP_DEVICE_BindGenericKeyboard }); - controller_descriptions.push_back({ "Mouse with Left Analog Stick", DBP_DEVICE_MouseLeftAnalog }); - controller_descriptions.push_back({ "Mouse with Right Analog Stick", DBP_DEVICE_MouseRightAnalog }); - controller_descriptions.push_back({ "Gravis GamePad (1 D-Pad, 4 Buttons)", gravis_device }); - controller_descriptions.push_back({ "First DOS joystick (2 Axes, 2 Buttons)", DBP_DEVICE_BasicJoystick1 }); - controller_descriptions.push_back({ "Second DOS joystick (2 Axes, 2 Buttons)", secondjoystick_device }); - controller_descriptions.push_back({ "ThrustMaster Flight Stick (3 axes, 4 buttons, 1 hat)", DBP_DEVICE_ThrustMasterFlightStick }); - controller_descriptions.push_back({ "Control both DOS joysticks (4 axes, 4 buttons)", DBP_DEVICE_BothDOSJoysticks }); - controller_descriptions.push_back({ "Custom Keyboard Bindings", DBP_DEVICE_BindCustomKeyboard }); - controller_descriptions.push_back({ "Custom Keyboard + Mouse on Left Stick and B/A/X", DBP_DEVICE_KeyboardMouseLeftStick }); - controller_descriptions.push_back({ "Custom Keyboard + Mouse on Right Stick and L/R/X", DBP_DEVICE_KeyboardMouseRightStick }); - ports[port].num_types = (unsigned)controller_descriptions.size() - port_first_cd[port]; - } - for (port = 0; port != 3; port++) ports[port].types = &controller_descriptions[port_first_cd[port]]; - for (; port != DBP_MAX_PORTS; port++) ports[port] = ports[2]; - environ_cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); - - refresh_input_binds(); + refresh_input_binds(true); return true; } @@ -2769,20 +4191,25 @@ bool retro_load_game(const struct retro_game_info *info) //#4 void retro_get_system_av_info(struct retro_system_av_info *info) // #5 { DBP_ASSERT(dbp_state != DBPSTATE_BOOT); - av_info.geometry.base_width = 320; - av_info.geometry.base_height = 200; av_info.geometry.max_width = SCALER_MAXWIDTH; av_info.geometry.max_height = SCALER_MAXHEIGHT; - av_info.geometry.aspect_ratio = 4.0f / 3.0f; - av_info.timing.fps = DBP_DEFAULT_FPS; - av_info.timing.sample_rate = DBP_MIXER_GetFrequency(); - if (environ_cb) + // More accurate then render.src.fps would be (1000.0 / vga.draw.delay.vtotal) + DBP_ThreadControl(TCM_FINISH_FRAME); + if (dbp_biosreboot || dbp_state == DBPSTATE_EXITED) { - float refresh_rate = (float)DBP_DEFAULT_FPS; - if (environ_cb(RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE, &refresh_rate)) - av_info.timing.fps = refresh_rate; + // A reboot can happen during the first frame if puremenu wants to change DOSBox machine config + DBP_ASSERT(dbp_biosreboot && dbp_state == DBPSTATE_EXITED); + retro_reset(); + DBP_ThreadControl(TCM_FINISH_FRAME); + DBP_ASSERT(!dbp_biosreboot && dbp_state == DBPSTATE_FIRST_FRAME); } - dbp_calculate_min_sleep(); + DBP_ASSERT(render.src.fps > 10.0); // validate initialized video mode after first frame + const DBP_Buffer& buf = dbp_buffers[buffer_active]; + av_info.geometry.base_width = buf.width; + av_info.geometry.base_height = buf.height; + av_info.geometry.aspect_ratio = buf.ratio; + av_info.timing.fps = DBP_GetFPS(); + av_info.timing.sample_rate = DBP_MIXER_GetFrequency(); *info = av_info; } @@ -2796,33 +4223,31 @@ void retro_set_controller_port_device(unsigned port, unsigned device) //#5 if (port >= DBP_MAX_PORTS || dbp_port_devices[port] == (DBP_Port_Device)device) return; //log_cb(RETRO_LOG_INFO, "[DOSBOX] Plugging device %u into port %u.\n", device, port); dbp_port_devices[port] = (DBP_Port_Device)device; - if (dbp_state > DBPSTATE_SHUTDOWN) refresh_input_binds(port); + if (dbp_state > DBPSTATE_SHUTDOWN) refresh_input_binds(false, port); } void retro_reset(void) { DBP_Shutdown(); DBPArchiveZeroer ar; - DBPSerialize_All(ar, false); + DBPSerialize_All(ar); extern const char* RunningProgram; RunningProgram = "DOSBOX"; dbp_crash_message.clear(); dbp_state = DBPSTATE_BOOT; - dbp_fast_forward = false; + dbp_throttle = { RETRO_THROTTLE_NONE }; dbp_game_running = false; - dbp_disk_mount_letter = 0; + dbp_serializesize = 0; dbp_gfx_intercept = NULL; dbp_input_intercept = NULL; - for (size_t i = dbp_images.size(); i--;) - if (dbp_images[i][0] == '$') - dbp_images.erase(dbp_images.begin() + i); + for (DBP_Image& i : dbp_images) { i.was_mounted = i.mounted; i.mounted = false; } init_dosbox((dbp_content_path.empty() ? NULL : dbp_content_path.c_str()), false); } void retro_run(void) { - DBP_FPSCOUNT(dbp_fpscount_retro) #ifdef DBP_ENABLE_FPS_COUNTERS + DBP_FPSCOUNT(dbp_fpscount_retro) uint32_t curTick = DBP_GetTicks(); if (curTick - dbp_lastfpstick >= 1000) { @@ -2834,70 +4259,69 @@ void retro_run(void) } #endif - dbp_retro_activity++; - - // serialize_size got called but was never followed by serialize or unserialize - if (dbp_lockthreadstate) - DBP_LockThread(false); - if (dbp_state < DBPSTATE_RUNNING) { - if (dbp_state == DBPSTATE_EXITED || dbp_state == DBPSTATE_SHUTDOWN) + if (dbp_state == DBPSTATE_EXITED || dbp_state == DBPSTATE_SHUTDOWN || dbp_state == DBPSTATE_REBOOT) { - // submit last frame - video_cb(dosbox_buffers[dosbox_buffers_last], RDOSGFXwidth, RDOSGFXheight, RDOSGFXpitch); - + DBP_Buffer& buf = dbp_buffers[buffer_active]; if (!dbp_crash_message.empty()) // unexpected shutdown DBP_Shutdown(); + else if (dbp_state == DBPSTATE_REBOOT || dbp_biosreboot) + retro_reset(); else if (dbp_state == DBPSTATE_EXITED) // expected shutdown + { + #ifndef STATIC_LINKING environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, 0); + #else + // On statically linked platforms shutdown would exit the frontend, so don't do that. Just tint the screen red and sleep. + for (Bit8u *p = (Bit8u*)buf.video, *pEnd = p + sizeof(buf.video); p < pEnd; p += 56) p[2] = 255; + retro_sleep(10); + #endif + } + // submit last frame + Bit32u numEmptySamples = (Bit32u)(av_info.timing.sample_rate / av_info.timing.fps); + memset(dbp_audio, 0, numEmptySamples * 4); + audio_batch_cb(dbp_audio, numEmptySamples); + video_cb(buf.video, buf.width, buf.height, buf.width * 4); return; } - float refresh_rate = (float)av_info.timing.fps; - if (environ_cb && environ_cb(RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE, &refresh_rate) && refresh_rate != (float)av_info.timing.fps) + DBP_ASSERT(dbp_state == DBPSTATE_FIRST_FRAME); + DBP_ThreadControl(TCM_FINISH_FRAME); + DBP_ASSERT(dbp_state == DBPSTATE_FIRST_FRAME || (dbp_state == DBPSTATE_EXITED && dbp_biosreboot)); + if (MIDI_Retro_HasOutputIssue()) + retro_notify(0, RETRO_LOG_WARN, "The frontend MIDI output is not set up correctly"); + if (dbp_state == DBPSTATE_FIRST_FRAME) + dbp_state = DBPSTATE_RUNNING; + if (dbp_latency == DBP_LATENCY_VARIABLE) { - av_info.timing.fps = refresh_rate; - environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &av_info); - dbp_calculate_min_sleep(); + DBP_ThreadControl(TCM_NEXT_FRAME); + dbp_targetrefreshrate = 0; // force refresh this because only in retro_run RetroArch will return the correct value } + } - if (MIDI_Retro_HasOutputIssue()) - retro_notify(0, RETRO_LOG_WARN, "The frontend MIDI output is not set up correctly"); + if (!environ_cb(RETRO_ENVIRONMENT_GET_THROTTLE_STATE, &dbp_throttle)) + { + bool fast_forward = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &fast_forward) && fast_forward) + dbp_throttle = { RETRO_THROTTLE_FAST_FORWARD, 0.0f }; + else + dbp_throttle = { RETRO_THROTTLE_NONE, (float)av_info.timing.fps }; + } - // first frame - DBP_ASSERT(dbp_state != DBPSTATE_BOOT); - for (int n = 0; n++ != 5000 && dbp_state != DBPSTATE_WAIT_FIRST_RUN;) sleep_ms(1); - if (dbp_state == DBPSTATE_WAIT_FIRST_RUN) dbp_state = DBPSTATE_RUNNING; + static retro_throttle_state throttle_last; + if (dbp_throttle.mode != throttle_last.mode || dbp_throttle.rate != throttle_last.rate) + { + static const char* throttle_modes[] = { "NONE", "FRAME_STEPPING", "FAST_FORWARD", "SLOW_MOTION", "REWINDING", "VSYNC", "UNBLOCKED" }; + log_cb(RETRO_LOG_INFO, "[DBP THROTTLE] %s %f -> %s %f\n", throttle_modes[throttle_last.mode], throttle_last.rate, throttle_modes[dbp_throttle.mode], dbp_throttle.rate); + throttle_last = dbp_throttle; } bool variable_update = false; - if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &variable_update) && variable_update) + if (!dbp_optionsupdatecallback && environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &variable_update) && variable_update) check_variables(); - bool new_fast_forward = false; - if (environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &new_fast_forward) && new_fast_forward != dbp_fast_forward) - DBP_QueueEvent(DBPET_SET_FASTFORWARD, (int)(dbp_fast_forward = new_fast_forward)); - - extern bool DBP_CPUOverload; - if (DBP_CPUOverload) - { - static Bit32u first_overload, last_overload_msg; - if (!dbp_overload_count) first_overload = DBP_GetTicks(); - if (dbp_retro_activity < 10 || dbp_timing_tamper || dbp_fast_forward) dbp_overload_count = 0; - else if (dbp_overload_count++ >= 200) - { - Bit32u ticks = DBP_GetTicks(); - if ((ticks - first_overload) < 10000 && (!last_overload_msg || (ticks - last_overload_msg) >= 60000)) - { - retro_notify(0, RETRO_LOG_WARN, "Emulated CPU is overloaded, try reducing the emulated performance in the core options"); - last_overload_msg = ticks; - } - dbp_overload_count = 0; - } - } - // Use fixed mappings using only port 0 to use in the menu and the on-screen keyboard static DBP_InputBind intercept_binds[] = { @@ -2919,8 +4343,8 @@ void retro_run(void) { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, NULL, DBPET_JOY1DOWN, 1 }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, NULL, DBPET_JOY2DOWN, 0 }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, NULL, DBPET_JOY2DOWN, 1 }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, NULL, DBPET_MOUSEDOWN, 0 }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, NULL, DBPET_MOUSEDOWN, 1 }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, NULL, DBPET_KEYDOWN, KBD_pageup }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, NULL, DBPET_KEYDOWN, KBD_pagedown }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, NULL, DBPET_KEYDOWN, KBD_esc }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, NULL, DBPET_KEYDOWN, KBD_enter }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, NULL, DBPET_MOUSESETSPEED, 1 }, @@ -2928,75 +4352,84 @@ void retro_run(void) }; static bool use_input_intercept; bool toggled_intercept = (use_input_intercept != !!dbp_input_intercept); - if (toggled_intercept) use_input_intercept ^= 1; - DBP_InputBind *binds = (dbp_input_binds.empty() ? NULL : &dbp_input_binds[0]); - DBP_InputBind *binds_end = binds + dbp_input_binds.size(); + if (toggled_intercept) + { + use_input_intercept ^= 1; + if (!use_input_intercept) for (DBP_InputBind* b = intercept_binds; b != &intercept_binds[sizeof(intercept_binds)/sizeof(*intercept_binds)]; b++) + { + // Release all pressed events when leaving intercepted screen + DBP_ASSERT(b->evt != DBPET_AXISMAPPAIR); + if (!b->lastval) continue; + if (b->evt <= _DBPET_JOY_AXIS_MAX) DBP_QueueEvent((DBP_Event_Type)b->evt, 0); + else DBP_QueueEvent((DBP_Event_Type)(b->evt + 1), b->meta); + b->lastval = 0; + } + if (dbp_input_binds_modified) + { + dbp_input_binds_modified = false; + refresh_input_binds(true); + } + } + DBP_InputBind *binds = (dbp_input_binds.empty() ? NULL : &dbp_input_binds[0]), *binds_end = binds + dbp_input_binds.size(); input_poll_cb(); if (use_input_intercept) { + //input_state_cb(0, RETRO_DEVICE_NONE, 0, 0); // poll keys? + //input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SPACE); // get latest keyboard callbacks? if (toggled_intercept) for (DBP_InputBind* b = intercept_binds; b != &intercept_binds[sizeof(intercept_binds)/sizeof(*intercept_binds)]; b++) b->lastval = input_state_cb(b->port, b->device, b->index, b->id); binds = intercept_binds + (dbp_mouse_input ? 0 : 5); binds_end = &intercept_binds[sizeof(intercept_binds)/sizeof(*intercept_binds)]; - if (!dbp_gfx_intercept) + static bool warned_game_focus; + if (!dbp_gfx_intercept && !warned_game_focus && dbp_port_devices[0] != DBP_DEVICE_BindCustomKeyboard && input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK)) { - input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SPACE); // this gets latest keyboard callbacks - for (Bit8u i = KBD_NONE + 1; dbp_keys_down_count && i != KBD_LAST; i++) + for (Bit8u i = KBD_NONE + 1; i != KBD_LAST; i++) { - if (!(dbp_keys_down[i] & DBP_DOWN_BY_KEYBOARD)) continue; - - static bool warned_game_focus; - if (!warned_game_focus && dbp_port_devices[0] != DBP_DEVICE_BindCustomKeyboard) - { - for (DBP_InputBind *b = intercept_binds + 5; b != &intercept_binds[sizeof(intercept_binds)/sizeof(*intercept_binds)]; b++) - { - int16_t val = input_state_cb(b->port, b->device, b->index, b->id); - if (val / (b->device == RETRO_DEVICE_ANALOG ? 12000 : 1) == 0) continue; - retro_notify(10000, RETRO_LOG_WARN, - "Detected keyboard and joypad being pressed at the same time.\n" - "To freely use the keyboard without hotkeys enable 'Game Focus' (Scroll Lock key by default) if available."); - warned_game_focus = true; - break; - } - } - - // Only query mouse bindings while a key is down to avoid the keyboard additionally hitting joypad buttons in the start menu - binds_end = intercept_binds + 5; + if (!input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, dbp_keymap_dos2retro[i])) continue; + warned_game_focus = true; + retro_notify(10000, RETRO_LOG_WARN, + "Detected keyboard and joypad being pressed at the same time.\n" + "To freely use the keyboard without hotkeys enable 'Game Focus' (Scroll Lock key by default) if available."); + break; } } } - // forward input state changes to thread + // query input states and generate input events for (DBP_InputBind *b = binds; b != binds_end; b++) { - int16_t val = input_state_cb(b->port, b->device, b->index, b->id); - if (val == b->lastval) continue; - if (b->evt == DBPET_AXIS_TO_KEY) - { - int cur = (val < -12000 ? -1 : (val > 12000 ? 1 : 0)), last = (b->lastval < -12000 ? -1 : (b->lastval > 12000 ? 1 : 0)); - if (cur == last) {} - else if (cur && last) - { - DBP_QueueEvent(DBPET_KEYUP, DBP_KEYAXIS_GET(last, b->meta)); - DBP_QueueEvent(DBPET_KEYDOWN, DBP_KEYAXIS_GET(cur, b->meta)); - } - else - { - DBP_QueueEvent((cur ? DBPET_KEYDOWN : DBPET_KEYUP), DBP_KEYAXIS_GET(cur+last, b->meta)); - } - } - else if (b->evt <= _DBPET_JOY_AXIS_MAX) + Bit16s val = input_state_cb(b->port, b->device, b->index, b->id), lastval = b->lastval; + if (val == lastval) continue; + if (b->evt <= _DBPET_JOY_AXIS_MAX) { // if meta is 1 or -1, this is a digital input for an axis DBP_QueueEvent((DBP_Event_Type)b->evt, (b->meta ? (val ? 32767 : 0) * b->meta : val)); } - else + else if (b->device != RETRO_DEVICE_ANALOG) { // if button is pressed, send the _DOWN, otherwise send _UP DBP_QueueEvent((DBP_Event_Type)(val ? b->evt : b->evt + 1), b->meta); } + else for (Bit16s dir = 1; dir >= -1; dir -= 2) + { + DBP_ASSERT(b->evt == DBPET_AXISMAPPAIR); + Bit16s map = DBP_MAPPAIR_GET(dir, b->meta), dirval = val * dir, dirlastval = lastval * dir; + if (map == KBD_NONE) continue; + if (map < KBD_LAST) + { + if (dirval >= 12000 && dirlastval < 12000) { DBP_QueueEvent(DBPET_KEYDOWN, map); } + if (dirval < 12000 && dirlastval >= 12000) { DBP_QueueEvent(DBPET_KEYUP, map); } + continue; + } + if (map < DBP_SPECIALMAPPINGS_KEY) { DBP_ASSERT(false); continue; } + if (dirval <= 0 && dirlastval <= 0) continue; + const DBP_SpecialMapping& sm = DBP_SPECIALMAPPING(map); + if (sm.evt <= _DBPET_JOY_AXIS_MAX) DBP_QueueEvent((DBP_Event_Type)sm.evt, (dirval < 0 ? 0 : dirval) * sm.meta); + else if (dirval >= 12000 && dirlastval < 12000) DBP_QueueEvent((DBP_Event_Type)sm.evt, sm.meta); + else if (dirval < 12000 && dirlastval >= 12000) DBP_QueueEvent((DBP_Event_Type)(sm.evt + 1), sm.meta); + } b->lastval = val; } int16_t mousex = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); @@ -3019,68 +4452,134 @@ void retro_run(void) } } - // handle audio/video mode changes - if (av_info.geometry.base_width != RDOSGFXwidth || av_info.geometry.base_height != RDOSGFXheight || av_info.geometry.aspect_ratio != RDOSGFXratio) + bool skip_emulate = DBP_NeedFrameSkip(false); + switch (dbp_latency) { - log_cb(RETRO_LOG_INFO, "[DOSBOX] Resolution changed %ux%u @ %.3fHz AR: %.5f => %ux%u @ %.3fHz AR: %.5f\n", - av_info.geometry.base_width, av_info.geometry.base_height, av_info.timing.fps, av_info.geometry.aspect_ratio, - RDOSGFXwidth, RDOSGFXheight, av_info.timing.fps, RDOSGFXratio); + case DBP_LATENCY_DEFAULT: + DBP_ThreadControl(skip_emulate ? TCM_PAUSE_FRAME : TCM_FINISH_FRAME); + break; + case DBP_LATENCY_LOW: + if (skip_emulate) break; + if (!dbp_frame_pending) DBP_ThreadControl(TCM_NEXT_FRAME); + DBP_ThreadControl(TCM_FINISH_FRAME); + break; + case DBP_LATENCY_VARIABLE: + dbp_lastrun = time_cb(); + break; + } + + Bit32u tpfActual = 0, tpfTarget = 0, tpfDraws = 0; + #ifdef DBP_ENABLE_WAITSTATS + Bit32u waitPause = 0, waitFinish = 0, waitPaused = 0, waitContinue = 0; + #endif + if (dbp_perf && dbp_perf_totaltime > 1000000) + { + tpfActual = dbp_perf_totaltime / dbp_perf_count; + tpfTarget = (Bit32u)(1000000.f / render.src.fps); + tpfDraws = dbp_perf_uniquedraw; + #ifdef DBP_ENABLE_WAITSTATS + waitPause = dbp_wait_pause / dbp_perf_count, waitFinish = dbp_wait_finish / dbp_perf_count, waitPaused = dbp_wait_paused / dbp_perf_count, waitContinue = dbp_wait_continue / dbp_perf_count; + dbp_wait_pause = dbp_wait_finish = dbp_wait_paused = dbp_wait_continue = 0; + #endif + dbp_perf_uniquedraw = dbp_perf_count = dbp_perf_emutime = dbp_perf_totaltime = 0; + } + + // mix audio + Bit32u haveSamples = DBP_MIXER_DoneSamplesCount(), mixSamples = 0; double numSamples; + if (dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD && dbp_throttle.rate < 1) + numSamples = haveSamples; + else if (dbp_throttle.mode == RETRO_THROTTLE_FAST_FORWARD || dbp_throttle.mode == RETRO_THROTTLE_SLOW_MOTION || dbp_throttle.rate < 1) + numSamples = (av_info.timing.sample_rate / av_info.timing.fps) + dbp_audio_remain; + else + numSamples = (av_info.timing.sample_rate / dbp_throttle.rate) + dbp_audio_remain; + if (numSamples && haveSamples > numSamples * .99) // Allow 1 percent stretch on underrun + { + mixSamples = (numSamples > haveSamples ? haveSamples : (Bit32u)numSamples); + dbp_audio_remain = ((numSamples <= mixSamples || numSamples > haveSamples) ? 0.0 : (numSamples - mixSamples)); + if (mixSamples > DBP_MAX_SAMPLES) mixSamples = DBP_MAX_SAMPLES; + if (dbp_latency == DBP_LATENCY_VARIABLE) + { + if (dbp_pause_events) DBP_ThreadControl(TCM_RESUME_FRAME); // can be paused by serialize + while (DBP_MIXER_DoneSamplesCount() < mixSamples * 12 / 10) { dbp_lastrun = time_cb(); retro_sleep(0); } // buffer ahead a bit + DBP_ThreadControl(TCM_PAUSE_FRAME); + } + MIXER_CallBack(0, (Bit8u*)dbp_audio, mixSamples * 4); + if (dbp_latency == DBP_LATENCY_VARIABLE) + { + DBP_ThreadControl(TCM_RESUME_FRAME); + } + } + + // Read buffer_active before waking up emulation thread + const DBP_Buffer& buf = dbp_buffers[buffer_active]; + + if (dbp_latency == DBP_LATENCY_DEFAULT) + { + DBP_ThreadControl(skip_emulate ? TCM_RESUME_FRAME : TCM_NEXT_FRAME); + } + + // submit audio + //log_cb(RETRO_LOG_INFO, "[retro_run] Submit %d samples (remain %f) - Had: %d - Left: %d\n", mixSamples, dbp_audio_remain, haveSamples, DBP_MIXER_DoneSamplesCount()); + if (mixSamples) audio_batch_cb(dbp_audio, mixSamples); - av_info.geometry.base_width = RDOSGFXwidth; - av_info.geometry.base_height = RDOSGFXheight; - av_info.geometry.aspect_ratio = RDOSGFXratio; + if (tpfActual) + { + extern const char* DBP_CPU_GetDecoderName(); + if (dbp_perf == DBP_PERF_DETAILED) + retro_notify(-1500, RETRO_LOG_INFO, "Speed: %4.1f%%, DOS: %dx%d@%4.2ffps, Actual: %4.2ffps, Drawn: %dfps, Cycles: %u (%s)" + #ifdef DBP_ENABLE_WAITSTATS + ", Waits: p%u|f%u|z%u|c%u" + #endif + , ((float)tpfTarget / (float)tpfActual * 100), (int)render.src.width, (int)render.src.height, render.src.fps, (1000000.f / tpfActual), tpfDraws, CPU_CycleMax, DBP_CPU_GetDecoderName() + #ifdef DBP_ENABLE_WAITSTATS + , waitPause, waitFinish, waitPaused, waitContinue + #endif + ); + else + retro_notify(-1500, RETRO_LOG_INFO, "Emulation Speed: %4.1f%%", + ((float)tpfTarget / (float)tpfActual * 100)); + } - bool cb_error = !environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); - if (cb_error) log_cb(RETRO_LOG_WARN, "[DOSBOX] SET_GEOMETRY failed\n"); + // handle video mode changes + double targetfps = DBP_GetFPS(); + if (av_info.geometry.base_width != buf.width || av_info.geometry.base_height != buf.height || av_info.geometry.aspect_ratio != buf.ratio || av_info.timing.fps != targetfps) + { + log_cb(RETRO_LOG_INFO, "[DOSBOX] Resolution changed %ux%u @ %.3fHz AR: %.5f => %ux%u @ %.3fHz AR: %.5f\n", + av_info.geometry.base_width, av_info.geometry.base_height, av_info.timing.fps, av_info.geometry.aspect_ratio, + buf.width, buf.height, av_info.timing.fps, buf.ratio); + bool newfps = (av_info.timing.fps != targetfps); + av_info.geometry.base_width = buf.width; + av_info.geometry.base_height = buf.height; + av_info.geometry.aspect_ratio = buf.ratio; + av_info.timing.fps = targetfps; + environ_cb((newfps ? RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO : RETRO_ENVIRONMENT_SET_GEOMETRY), &av_info); } // submit video - Bit8u* dbbuf = dosbox_buffers[dosbox_buffers_last]; - video_cb(dbbuf, RDOSGFXwidth, RDOSGFXheight, RDOSGFXpitch); - - // process and submit audio - static Bit32u mix_missed; - if (!dbp_frame_time) dbp_frame_time = (retro_usec_t)(150000.0 + 500000.0 / render.src.fps); - Bit32u mix_samples = (uint32_t)(av_info.timing.sample_rate / 1000000.0 * dbp_frame_time + .499999); - if (mix_samples || mix_missed) - { - Bit32u mix_samples_need = mix_samples; - mix_samples += mix_missed; - if (mix_samples > sizeof(audioData)/4) mix_samples = sizeof(audioData) / 4; - if (mix_samples > DBP_MIXER_DoneSamplesCount()) mix_samples = DBP_MIXER_DoneSamplesCount(); - if (mix_samples_need != mix_samples) - { - if (dbp_retro_activity < 10 || dbp_timing_tamper || dbp_fast_forward) mix_missed = 0; - else mix_missed += (mix_samples_need - mix_samples); - } - dbp_audiomutex.Lock(); - MIXER_CallBack(0, audioData, mix_samples * 4); - dbp_audiomutex.Unlock(); - audio_batch_cb((int16_t*)audioData, mix_samples); - } - - // keep frontend UI thread from running at 100% cpu - uint32_t this_run = DBP_GetTicks(), run_sleep = dbp_min_sleep - (this_run - dbp_last_run); - if (run_sleep < dbp_min_sleep) { sleep_ms(run_sleep); this_run += run_sleep; } - dbp_last_run = this_run; + video_cb(buf.video, buf.width, buf.height, buf.width * 4); } static bool retro_serialize_all(DBPArchive& ar, bool unlock_thread) { if (dbp_serializemode == DBPSERIALIZE_DISABLED) return false; - if (dbp_serializemode == DBPSERIALIZE_STATES || ar.mode == DBPArchive::MODE_SIZE) - { - if (ar.mode == DBPArchive::MODE_MAXSIZE) return false; // measure max size for rewind buffers is ignored with DBPSERIALIZE_STATES - if (!dbp_game_running) { retro_notify(0, RETRO_LOG_WARN, "Unable to save/load state while start menu is open"); return false; } - if (dbp_state != DBPSTATE_RUNNING) { retro_notify(0, RETRO_LOG_WARN, "Unable to save/load state while DOS is not running"); return false; } - } - DBP_LockThread(true); - DBPSerialize_All(ar, (!dbp_game_running || (dbp_state != DBPSTATE_RUNNING))); + bool pauseThread = (dbp_state != DBPSTATE_BOOT && dbp_state != DBPSTATE_SHUTDOWN); + if (pauseThread) DBP_ThreadControl(TCM_PAUSE_FRAME); + retro_time_t timeStart = time_cb(); + DBPSerialize_All(ar, (dbp_state == DBPSTATE_RUNNING), dbp_game_running); + dbp_serialize_time += (Bit32u)(time_cb() - timeStart); + //log_cb(RETRO_LOG_WARN, "[SERIALIZE] [%d] [%s] %u\n", (dbp_state == DBPSTATE_RUNNING && dbp_game_running), (ar.mode == DBPArchive::MODE_LOAD ? "LOAD" : ar.mode == DBPArchive::MODE_SAVE ? "SAVE" : ar.mode == DBPArchive::MODE_SIZE ? "SIZE" : ar.mode == DBPArchive::MODE_MAXSIZE ? "MAXX" : ar.mode == DBPArchive::MODE_ZERO ? "ZERO" : "???????"), (Bit32u)ar.GetOffset()); if (dbp_game_running && ar.mode == DBPArchive::MODE_LOAD) dbp_lastmenuticks = DBP_GetTicks(); // force show menu on immediate emulation crash - if (unlock_thread) DBP_LockThread(false); - if (ar.had_error && ar.mode == DBPArchive::MODE_LOAD) + if (pauseThread && unlock_thread) DBP_ThreadControl(TCM_RESUME_FRAME); + + if (ar.had_error && (ar.mode == DBPArchive::MODE_LOAD || ar.mode == DBPArchive::MODE_SAVE)) { static const char* machine_names[MCH_VGA+1] = { "hercules", "cga", "tandy", "pcjr", "ega", "vga" }; + static Bit32u lastErrorId, lastErrorTick; + Bit32u ticks = DBP_GetTicks(); + Bit32u errorId = (ar.mode << 8) | ar.had_error; + if (lastErrorId == errorId && (ticks - lastErrorTick) < 5000U) return false; // don't spam errors (especially when doing rewind) + lastErrorId = errorId; + lastErrorTick = ticks; switch (ar.had_error) { case DBPArchive::ERR_LAYOUT: @@ -3089,8 +4588,13 @@ static bool retro_serialize_all(DBPArchive& ar, bool unlock_thread) case DBPArchive::ERR_VERSION: retro_notify(0, RETRO_LOG_ERROR, "%sUnsupported version (%d)", "Load State Error: ", ar.version); break; - case DBPArchive::ERR_INVALIDSTATE: - retro_notify(0, RETRO_LOG_ERROR, "%s%s", "Load State Error: ", "Save state was made during start menu or while system was crashed"); + case DBPArchive::ERR_DOSNOTRUNNING: + if (dbp_serializemode != DBPSERIALIZE_REWIND) + retro_notify(0, RETRO_LOG_ERROR, "%sUnable to %s not running.\nIf using rewind, make sure to modify the related core option.", (ar.mode == DBPArchive::MODE_LOAD ? "Load State Error: " : "Save State Error: "), (ar.mode == DBPArchive::MODE_LOAD ? "load state made while DOS was" : "save state while DOS is")); + break; + case DBPArchive::ERR_GAMENOTRUNNING: + if (dbp_serializemode != DBPSERIALIZE_REWIND) + retro_notify(0, RETRO_LOG_ERROR, "%sUnable to %s not running.\nIf using rewind, make sure to modify the related core option.", (ar.mode == DBPArchive::MODE_LOAD ? "Load State Error: " : "Save State Error: "), (ar.mode == DBPArchive::MODE_LOAD ? "load state made while game was" : "save state while game is")); break; case DBPArchive::ERR_WRONGMACHINECONFIG: retro_notify(0, RETRO_LOG_ERROR, "%sWrong graphics chip configuration (%s instead of %s)", "Load State Error: ", @@ -3117,23 +4621,27 @@ static bool retro_serialize_all(DBPArchive& ar, bool unlock_thread) size_t retro_serialize_size(void) { - static size_t previous_size; - if (dbp_lockthreadstate) return previous_size; - DBPArchiveCounter ar(dbp_state != DBPSTATE_RUNNING); - return (previous_size = (retro_serialize_all(ar, false) ? ar.count : 0)); + bool rewind = (dbp_state != DBPSTATE_RUNNING || dbp_serializemode == DBPSERIALIZE_REWIND); + if (rewind && dbp_serializesize) return dbp_serializesize; + DBPArchiveCounter ar(rewind); + return dbp_serializesize = (retro_serialize_all(ar, false) ? ar.count : 0); } bool retro_serialize(void *data, size_t size) { DBPArchiveWriter ar(data, size); - return retro_serialize_all(ar, true); + if (!retro_serialize_all(ar, true) && ((ar.had_error != DBPArchive::ERR_DOSNOTRUNNING && ar.had_error != DBPArchive::ERR_GAMENOTRUNNING) || dbp_serializemode != DBPSERIALIZE_REWIND)) return false; + memset(ar.ptr, 0, ar.end - ar.ptr); + return true; } bool retro_unserialize(const void *data, size_t size) { - dbp_overload_count = 0; // don't show overload warning immediately after loading DBPArchiveReader ar(data, size); - return retro_serialize_all(ar, true); + bool res = retro_serialize_all(ar, true); + if ((ar.had_error != DBPArchive::ERR_DOSNOTRUNNING && ar.had_error != DBPArchive::ERR_GAMENOTRUNNING) || dbp_serializemode != DBPSERIALIZE_REWIND) return res; + if (dbp_state != DBPSTATE_RUNNING || dbp_game_running) retro_reset(); + return true; } // Unused features @@ -3146,62 +4654,64 @@ void retro_deinit(void) { } // UTF8 fopen #include "libretro-common/include/compat/fopen_utf8.h" -FILE *fopen_wrap(const char *path, const char *mode) { return (FILE*)fopen_utf8(path, mode); } +FILE *fopen_wrap(const char *path, const char *mode) +{ + #ifdef WIN32 + for (const unsigned char* p = (unsigned char*)path; *p; p++) + if (*p >= 0x80) + return (FILE*)fopen_utf8(path, mode); + #endif + return fopen(path, mode); +} +#ifndef STATIC_LINKING #include "libretro-common/compat/fopen_utf8.c" #include "libretro-common/compat/compat_strl.c" #include "libretro-common/encodings/encoding_utf.c" +#endif -bool fpath_nocase(char* path, const char* base_dir) +bool fpath_nocase(char* path) { if (!path || !*path) return false; + struct stat test; + if (stat(path, &test) == 0) return true; // exists as is - // Because we have no idea what the current directory of the frontend is, refuse relative paths - const char* test = (base_dir && *base_dir ? base_dir : path); #ifdef WIN32 - if (test[0] < 'A' || test[0] > 'z' || test[1] != ':' || (test[2] && test[2] != '/' && test[2] != '\\')) return false; - enum { PATH_ROOTLEN = 2 }; + // If stat could handle utf8 strings, we just return false here because paths are not case senstive on Windows + size_t rootlen = ((path[1] == ':' && (path[2] == '/' || path[2] == '\\')) ? 3 : 0); #else - if (*test != '/') return false; - enum { PATH_ROOTLEN = 1 }; + size_t rootlen = ((path[0] == '/' || path[0] == '\\') ? 1 : 0); #endif - + if (!path[rootlen]) return false; std::string subdir; - if (!base_dir || !*base_dir) - { - if (!path[PATH_ROOTLEN]) return false; - base_dir = subdir.append(path, PATH_ROOTLEN).c_str(); - path += PATH_ROOTLEN; - } + const char* base_dir = (rootlen ? subdir.append(path, rootlen).c_str() : NULL); + path += rootlen; + struct retro_vfs_interface_info vfs = { 3, NULL }; if (!environ_cb || !environ_cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs) || vfs.required_interface_version < 3 || !vfs.iface) - { - struct stat test; - if (subdir.empty() && base_dir) subdir = base_dir; - if (!subdir.empty() && subdir.back() != '/' && subdir.back() != '\\' && *path != '/' && *path != '\\') subdir += '/'; - return (stat(subdir.append(path).c_str(), &test) == 0); - } - for (char* psubdir;; *psubdir = '/', path = psubdir + 1) + return false; + + for (char* psubdir;; *psubdir = CROSS_FILESPLIT, path = psubdir + 1) { char *next_slash = strchr(path, '/'), *next_bslash = strchr(path, '\\'); psubdir = (next_slash && (!next_bslash || next_slash < next_bslash) ? next_slash : next_bslash); if (psubdir == path) continue; if (psubdir) *psubdir = '\0'; - bool found = false; - struct retro_vfs_dir_handle *dir = vfs.iface->opendir(base_dir, true); - while (dir && vfs.iface->readdir(dir)) + // On Android opendir fails for directories the user/app doesn't have access so just assume it exists as is + if (struct retro_vfs_dir_handle *dir = (base_dir ? vfs.iface->opendir(base_dir, true) : NULL)) { - const char* entry_name = vfs.iface->dirent_get_name(dir); - if (strcasecmp(entry_name, path)) continue; - memcpy(path, entry_name, strlen(entry_name)); - found = true; - break; + while (dir && vfs.iface->readdir(dir)) + { + const char* entry_name = vfs.iface->dirent_get_name(dir); + if (strcasecmp(entry_name, path)) continue; + strcpy(path, entry_name); + break; + } + vfs.iface->closedir(dir); } - vfs.iface->closedir(dir); - if (!found || !psubdir) { if (psubdir) *psubdir = '/'; return found; } - - if (subdir.empty()) subdir = base_dir; - if (subdir.back() != '/') subdir += '/'; + if (!psubdir) return true; + if (subdir.empty() && base_dir) subdir = base_dir; + if (!subdir.empty() && subdir.back() != '/' && subdir.back() != '\\') subdir += CROSS_FILESPLIT; base_dir = subdir.append(path).c_str(); } } diff --git a/dosbox_pure_libretro.info b/dosbox_pure_libretro.info index 16189a23b..454c0816c 100644 --- a/dosbox_pure_libretro.info +++ b/dosbox_pure_libretro.info @@ -1,7 +1,7 @@ # Software Information display_name = "DOS (DOSBox-Pure)" authors = "DOSBox Team|Psyraven" -supported_extensions = "zip|dosz|exe|com|bat|iso|cue|ins|img|ima|vhd|m3u|m3u8" +supported_extensions = "zip|dosz|exe|com|bat|iso|cue|ins|img|ima|vhd|jrc|tc|m3u|m3u8|conf" corename = "DOSBox" categories = "Emulator" license = "GPLv2" diff --git a/dosbox_pure_libretro.vcxproj b/dosbox_pure_libretro.vcxproj index 72af19164..2b9a98877 100644 --- a/dosbox_pure_libretro.vcxproj +++ b/dosbox_pure_libretro.vcxproj @@ -1,4 +1,4 @@ - + 2012 @@ -6,7 +6,8 @@ 2015 2017 2019 - 20XX + 2022 + 9999 @@ -38,10 +39,13 @@ DynamicLibrary v110_xp v120_xp - v140 - v141 - v142 - $(DefaultPlatformToolset) + v140 + v141 + v142 + v143 + $(DefaultPlatformToolset) + v140_xp + v141_xp false MultiByte true @@ -68,7 +72,6 @@ false Level3 true - false true __LIBRETRO__;WIN32;_WINDOWS;%(PreprocessorDefinitions) _HAS_EXCEPTIONS=0;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) @@ -142,6 +145,7 @@ MaxSpeed Default Level2 + /Zc:offsetof- %(AdditionalOptions) MaxSpeed @@ -298,6 +302,10 @@ MaxSpeed Default + + MaxSpeed + Default + MaxSpeed Default @@ -445,11 +453,17 @@ Default Level2 + + MaxSpeed + Default + Level2 Level2 + MaxSpeed + Default diff --git a/dosbox_pure_libretro.vcxproj.filters b/dosbox_pure_libretro.vcxproj.filters index 79236dba6..c7c9bdfba 100644 --- a/dosbox_pure_libretro.vcxproj.filters +++ b/dosbox_pure_libretro.vcxproj.filters @@ -148,6 +148,9 @@ src\hardware + + src\hardware + src\hardware @@ -318,6 +321,9 @@ + + src\hardware + diff --git a/images/onscreenkeyboard.png b/images/onscreenkeyboard.png index 2918c0c75..80c3b8f15 100644 Binary files a/images/onscreenkeyboard.png and b/images/onscreenkeyboard.png differ diff --git a/images/padmapper.png b/images/padmapper.png new file mode 100644 index 000000000..d0db4cee7 Binary files /dev/null and b/images/padmapper.png differ diff --git a/include/bios.h b/include/bios.h index 4f2371b28..1992d9046 100644 --- a/include/bios.h +++ b/include/bios.h @@ -1,136 +1,136 @@ -/* - * Copyright (C) 2002-2021 The DOSBox Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef DOSBOX_BIOS_H -#define DOSBOX_BIOS_H - -#define BIOS_BASE_ADDRESS_COM1 0x400 -#define BIOS_BASE_ADDRESS_COM2 0x402 -#define BIOS_BASE_ADDRESS_COM3 0x404 -#define BIOS_BASE_ADDRESS_COM4 0x406 -#define BIOS_ADDRESS_LPT1 0x408 -#define BIOS_ADDRESS_LPT2 0x40a -#define BIOS_ADDRESS_LPT3 0x40c -/* 0x40e is reserved */ -#define BIOS_CONFIGURATION 0x410 -/* 0x412 is reserved */ -#define BIOS_MEMORY_SIZE 0x413 -#define BIOS_TRUE_MEMORY_SIZE 0x415 -/* #define bios_expansion_memory_size (*(unsigned int *) 0x415) */ -#define BIOS_KEYBOARD_STATE 0x417 -#define BIOS_KEYBOARD_FLAGS1 BIOS_KEYBOARD_STATE -#define BIOS_KEYBOARD_FLAGS2 0x418 -#define BIOS_KEYBOARD_TOKEN 0x419 -/* used for keyboard input with Alt-Number */ -#define BIOS_KEYBOARD_BUFFER_HEAD 0x41a -#define BIOS_KEYBOARD_BUFFER_TAIL 0x41c -#define BIOS_KEYBOARD_BUFFER 0x41e -/* #define bios_keyboard_buffer (*(unsigned int *) 0x41e) */ -#define BIOS_DRIVE_ACTIVE 0x43e -#define BIOS_DRIVE_RUNNING 0x43f -#define BIOS_DISK_MOTOR_TIMEOUT 0x440 -#define BIOS_DISK_STATUS 0x441 -/* #define bios_fdc_result_buffer (*(unsigned short *) 0x442) */ -#define BIOS_VIDEO_MODE 0x449 -#define BIOS_SCREEN_COLUMNS 0x44a -#define BIOS_VIDEO_MEMORY_USED 0x44c -#define BIOS_VIDEO_MEMORY_ADDRESS 0x44e -#define BIOS_VIDEO_CURSOR_POS 0x450 - - -#define BIOS_CURSOR_SHAPE 0x460 -#define BIOS_CURSOR_LAST_LINE 0x460 -#define BIOS_CURSOR_FIRST_LINE 0x461 -#define BIOS_CURRENT_SCREEN_PAGE 0x462 -#define BIOS_VIDEO_PORT 0x463 -#define BIOS_VDU_CONTROL 0x465 -#define BIOS_VDU_COLOR_REGISTER 0x466 -/* 0x467-0x468 is reserved */ -#define BIOS_LAST_UNEXPECTED_IRQ 0x46b -#define BIOS_TIMER 0x46c -#define BIOS_24_HOURS_FLAG 0x470 -#define BIOS_KEYBOARD_FLAGS 0x471 -#define BIOS_CTRL_ALT_DEL_FLAG 0x472 -#define BIOS_HARDDISK_COUNT 0x475 -/* 0x474, 0x476, 0x477 is reserved */ -#define BIOS_LPT1_TIMEOUT 0x478 -#define BIOS_LPT2_TIMEOUT 0x479 -#define BIOS_LPT3_TIMEOUT 0x47a -/* 0x47b is reserved */ -#define BIOS_COM1_TIMEOUT 0x47c -#define BIOS_COM2_TIMEOUT 0x47d -#define BIOS_COM3_TIMEOUT 0x47e -#define BIOS_COM4_TIMEOUT 0x47f -/* 0x47e is reserved */ //<- why that? -/* 0x47f-0x4ff is unknow for me */ -#define BIOS_KEYBOARD_BUFFER_START 0x480 -#define BIOS_KEYBOARD_BUFFER_END 0x482 - -#define BIOS_ROWS_ON_SCREEN_MINUS_1 0x484 -#define BIOS_FONT_HEIGHT 0x485 - -#define BIOS_VIDEO_INFO_0 0x487 -#define BIOS_VIDEO_INFO_1 0x488 -#define BIOS_VIDEO_INFO_2 0x489 -#define BIOS_VIDEO_COMBO 0x48a - -#define BIOS_KEYBOARD_FLAGS3 0x496 -#define BIOS_KEYBOARD_LEDS 0x497 - -#define BIOS_WAIT_FLAG_POINTER 0x498 -#define BIOS_WAIT_FLAG_COUNT 0x49c -#define BIOS_WAIT_FLAG_ACTIVE 0x4a0 -#define BIOS_WAIT_FLAG_TEMP 0x4a1 - - -#define BIOS_PRINT_SCREEN_FLAG 0x500 - -#define BIOS_VIDEO_SAVEPTR 0x4a8 - - -#define BIOS_DEFAULT_HANDLER_LOCATION (RealMake(0xf000,0xff53)) -#define BIOS_DEFAULT_INT5_LOCATION (RealMake(0xf000,0xff54)) -#define BIOS_DEFAULT_IRQ0_LOCATION (RealMake(0xf000,0xfea5)) -#define BIOS_DEFAULT_IRQ1_LOCATION (RealMake(0xf000,0xe987)) -#define BIOS_DEFAULT_IRQ2_LOCATION (RealMake(0xf000,0xff55)) -#define BIOS_DEFAULT_RESET_LOCATION (RealMake(0xf000,0xe05b)) - -/* maximum of scancodes handled by keyboard bios routines */ -#define MAX_SCAN_CODE 0x58 - -/* The Section handling Bios Disk Access */ -//#define BIOS_MAX_DISK 10 - -//#define MAX_SWAPPABLE_DISKS 20 - -void BIOS_ZeroExtendedSize(bool in); -void char_out(Bit8u chr,Bit32u att,Bit8u page); -void INT10_StartUp(void); -void INT16_StartUp(void); -void INT2A_StartUp(void); -void INT2F_StartUp(void); -void INT33_StartUp(void); -void INT13_StartUp(void); - -bool BIOS_AddKeyToBuffer(Bit16u code); - -void INT10_ReloadRomFonts(); - -void BIOS_SetComPorts (Bit16u baseaddr[]); - -#endif +/* + * Copyright (C) 2002-2021 The DOSBox Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef DOSBOX_BIOS_H +#define DOSBOX_BIOS_H + +#define BIOS_BASE_ADDRESS_COM1 0x400 +#define BIOS_BASE_ADDRESS_COM2 0x402 +#define BIOS_BASE_ADDRESS_COM3 0x404 +#define BIOS_BASE_ADDRESS_COM4 0x406 +#define BIOS_ADDRESS_LPT1 0x408 +#define BIOS_ADDRESS_LPT2 0x40a +#define BIOS_ADDRESS_LPT3 0x40c +/* 0x40e is reserved */ +#define BIOS_CONFIGURATION 0x410 +/* 0x412 is reserved */ +#define BIOS_MEMORY_SIZE 0x413 +#define BIOS_TRUE_MEMORY_SIZE 0x415 +/* #define bios_expansion_memory_size (*(unsigned int *) 0x415) */ +#define BIOS_KEYBOARD_STATE 0x417 +#define BIOS_KEYBOARD_FLAGS1 BIOS_KEYBOARD_STATE +#define BIOS_KEYBOARD_FLAGS2 0x418 +#define BIOS_KEYBOARD_TOKEN 0x419 +/* used for keyboard input with Alt-Number */ +#define BIOS_KEYBOARD_BUFFER_HEAD 0x41a +#define BIOS_KEYBOARD_BUFFER_TAIL 0x41c +#define BIOS_KEYBOARD_BUFFER 0x41e +/* #define bios_keyboard_buffer (*(unsigned int *) 0x41e) */ +#define BIOS_DRIVE_ACTIVE 0x43e +#define BIOS_DRIVE_RUNNING 0x43f +#define BIOS_DISK_MOTOR_TIMEOUT 0x440 +#define BIOS_DISK_STATUS 0x441 +/* #define bios_fdc_result_buffer (*(unsigned short *) 0x442) */ +#define BIOS_VIDEO_MODE 0x449 +#define BIOS_SCREEN_COLUMNS 0x44a +#define BIOS_VIDEO_MEMORY_USED 0x44c +#define BIOS_VIDEO_MEMORY_ADDRESS 0x44e +#define BIOS_VIDEO_CURSOR_POS 0x450 + + +#define BIOS_CURSOR_SHAPE 0x460 +#define BIOS_CURSOR_LAST_LINE 0x460 +#define BIOS_CURSOR_FIRST_LINE 0x461 +#define BIOS_CURRENT_SCREEN_PAGE 0x462 +#define BIOS_VIDEO_PORT 0x463 +#define BIOS_VDU_CONTROL 0x465 +#define BIOS_VDU_COLOR_REGISTER 0x466 +/* 0x467-0x468 is reserved */ +#define BIOS_LAST_UNEXPECTED_IRQ 0x46b +#define BIOS_TIMER 0x46c +#define BIOS_24_HOURS_FLAG 0x470 +#define BIOS_KEYBOARD_FLAGS 0x471 +#define BIOS_CTRL_ALT_DEL_FLAG 0x472 +#define BIOS_HARDDISK_COUNT 0x475 +/* 0x474, 0x476, 0x477 is reserved */ +#define BIOS_LPT1_TIMEOUT 0x478 +#define BIOS_LPT2_TIMEOUT 0x479 +#define BIOS_LPT3_TIMEOUT 0x47a +/* 0x47b is reserved */ +#define BIOS_COM1_TIMEOUT 0x47c +#define BIOS_COM2_TIMEOUT 0x47d +#define BIOS_COM3_TIMEOUT 0x47e +#define BIOS_COM4_TIMEOUT 0x47f +/* 0x47e is reserved */ //<- why that? +/* 0x47f-0x4ff is unknow for me */ +#define BIOS_KEYBOARD_BUFFER_START 0x480 +#define BIOS_KEYBOARD_BUFFER_END 0x482 + +#define BIOS_ROWS_ON_SCREEN_MINUS_1 0x484 +#define BIOS_FONT_HEIGHT 0x485 + +#define BIOS_VIDEO_INFO_0 0x487 +#define BIOS_VIDEO_INFO_1 0x488 +#define BIOS_VIDEO_INFO_2 0x489 +#define BIOS_VIDEO_COMBO 0x48a + +#define BIOS_KEYBOARD_FLAGS3 0x496 +#define BIOS_KEYBOARD_LEDS 0x497 + +#define BIOS_WAIT_FLAG_POINTER 0x498 +#define BIOS_WAIT_FLAG_COUNT 0x49c +#define BIOS_WAIT_FLAG_ACTIVE 0x4a0 +#define BIOS_WAIT_FLAG_TEMP 0x4a1 + + +#define BIOS_PRINT_SCREEN_FLAG 0x500 + +#define BIOS_VIDEO_SAVEPTR 0x4a8 + + +#define BIOS_DEFAULT_HANDLER_LOCATION (RealMake(0xf000,0xff53)) +#define BIOS_DEFAULT_INT5_LOCATION (RealMake(0xf000,0xff54)) +#define BIOS_DEFAULT_IRQ0_LOCATION (RealMake(0xf000,0xfea5)) +#define BIOS_DEFAULT_IRQ1_LOCATION (RealMake(0xf000,0xe987)) +#define BIOS_DEFAULT_IRQ2_LOCATION (RealMake(0xf000,0xff55)) +#define BIOS_DEFAULT_RESET_LOCATION (RealMake(0xf000,(machine==MCH_PCJR)?0x0043:0xe05b)) + +/* maximum of scancodes handled by keyboard bios routines */ +#define MAX_SCAN_CODE 0x58 + +/* The Section handling Bios Disk Access */ +//#define BIOS_MAX_DISK 10 + +//#define MAX_SWAPPABLE_DISKS 20 + +void BIOS_ZeroExtendedSize(bool in); +void char_out(Bit8u chr,Bit32u att,Bit8u page); +void INT10_StartUp(void); +void INT16_StartUp(void); +void INT2A_StartUp(void); +void INT2F_StartUp(void); +void INT33_StartUp(void); +void INT13_StartUp(void); + +bool BIOS_AddKeyToBuffer(Bit16u code); + +void INT10_ReloadRomFonts(); + +void BIOS_SetComPorts (Bit16u baseaddr[]); + +#endif diff --git a/include/bios_disk.h b/include/bios_disk.h index be2a47fc3..44338ba23 100644 --- a/include/bios_disk.h +++ b/include/bios_disk.h @@ -33,7 +33,9 @@ /* The Section handling Bios Disk Access */ #define BIOS_MAX_DISK 10 +#ifdef C_DBP_ENABLE_DISKSWAP #define MAX_SWAPPABLE_DISKS 20 +#endif struct diskGeo { Bit32u ksize; /* Size in kilobytes */ Bit16u secttrack; /* Sectors per track */ @@ -43,6 +45,10 @@ struct diskGeo { }; extern diskGeo DiskGeometryList[]; +#ifdef C_DBP_SUPPORT_DISK_FAT_EMULATOR +template struct StringToPointerHashMap; +#endif + class imageDisk { public: Bit8u Read_Sector(Bit32u head,Bit32u cylinder,Bit32u sector,void * data); @@ -62,11 +68,17 @@ class imageDisk { imageDisk(FILE *imgFile, const char *imgName, Bit32u imgSizeK, bool isHardDisk); ~imageDisk() { if(diskimg != NULL) { fclose(diskimg); } }; #endif + #ifdef C_DBP_SUPPORT_DISK_FAT_EMULATOR + imageDisk(class DOS_Drive *useDrive, Bit32u freeSpaceMB = 0, const char* savePath = NULL, Bit32u driveSerial = 0, const StringToPointerHashMap* fileFilter = NULL); + void Set_GeometryForHardDisk(); + struct fatFromDOSDrive* ffdd; + #endif bool hardDrive; bool active; #ifdef C_DBP_SUPPORT_DISK_MOUNT_DOSFILE class DOS_File* dos_file; + std::vector tempwrites; #else FILE *diskimg; #endif @@ -76,26 +88,35 @@ class imageDisk { Bit32u sector_size; Bit32u heads,cylinders,sectors; private: + #ifdef C_DBP_SUPPORT_DISK_MOUNT_DOSFILE + Bit64u current_fpos; + #else Bit32u current_fpos; + #endif enum { NONE,READ,WRITE } last_action; }; void updateDPT(void); void incrementFDD(void); -#define MAX_HDD_IMAGES 2 +//DBP: Increased from 2 to 4 +#define MAX_HDD_IMAGES 4 #define MAX_DISK_IMAGES (2 + MAX_HDD_IMAGES) extern imageDisk *imageDiskList[MAX_DISK_IMAGES]; +#ifdef C_DBP_ENABLE_DISKSWAP extern imageDisk *diskSwap[MAX_SWAPPABLE_DISKS]; extern Bit32s swapPosition; +#endif extern Bit16u imgDTASeg; /* Real memory location of temporary DTA pointer for fat image disk access */ extern RealPt imgDTAPtr; /* Real memory location of temporary DTA pointer for fat image disk access */ extern DOS_DTA *imgDTA; +#ifdef C_DBP_ENABLE_DISKSWAP void swapInDisks(void); void swapInNextDisk(void); +#endif bool getSwapRequest(void); #endif diff --git a/include/callback.h b/include/callback.h index 54176b935..9e3e5b7e4 100644 --- a/include/callback.h +++ b/include/callback.h @@ -95,6 +95,9 @@ class CALLBACK_HandlerObject{ //Install and allocate a callback. void Install(CallBack_Handler handler,Bitu type,const char* description); void Install(CallBack_Handler handler,Bitu type,PhysPt addr,const char* description); +#ifdef C_DBP_LIBRETRO + void InstallFixed(Bitu fix_callback, CallBack_Handler handler,Bitu type,const char* description); +#endif void Uninstall(); diff --git a/include/config.h b/include/config.h index a24de184a..785af9810 100644 --- a/include/config.h +++ b/include/config.h @@ -32,7 +32,7 @@ //#undef OS2 #endif -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || _M_IX86 || defined(__x86_64__) || _M_AMD64 #define C_UNALIGNED_MEMORY 1 /* Define to 1 to use a unaligned memory access */ #endif @@ -49,7 +49,7 @@ /* #undef C_MODEM */ /* Define to 1 to enable internal modem support, requires SDL_net */ /* #undef C_SDL_SOUND */ /* Define to 1 to enable SDL_sound support */ -// ----- Disabled native interfaces and features +// ----- Disabled native interfaces and legacy features //#define C_DBP_NATIVE_MIDI //#define C_DBP_NATIVE_CDROM //(also needs SDL to work) //#define C_DBP_NATIVE_OVERLAY @@ -67,16 +67,23 @@ //#define C_DBP_ENABLE_CONFIG_PROGRAM //#define C_DBP_ENABLE_MESSAGEFILE //#define C_DBP_ENABLE_AUTOLOCK +//#define C_DBP_ENABLE_DISKSWAP +//#define C_DBP_ENABLE_SCALERCACHE // ----- Enabled new features #define C_DBP_LIBRETRO +#define C_DBP_CUSTOMTIMING +#define C_DBP_PAGE_FAULT_QUEUE_WIPE #define C_DBP_HAVE_FPATH_NOCASE #define C_DBP_SUPPORT_CDROM_MOUNT_DOSFILE #define C_DBP_SUPPORT_DISK_MOUNT_DOSFILE +#define C_DBP_SUPPORT_DISK_FAT_EMULATOR #define C_DBP_SUPPORT_MIDI_TSF #define C_DBP_SUPPORT_MIDI_RETRO #define C_DBP_SUPPORT_MIDI_MT32 #define C_DBP_ENABLE_NUKEDOPL3 +#define C_DBP_ENABLE_IDE +#define C_DBP_ENABLE_VOODOO // ----- DBP ASSERT MACRO #ifdef NDEBUG @@ -111,6 +118,10 @@ #define C_DYNREC 1 #define C_UNALIGNED_MEMORY 1 #define C_TARGETCPU MIPSEL +#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) +// DYNREC crashes on WiiU so this is disabled for now +//#define C_DYNREC 1 +//#define C_TARGETCPU POWERPC #endif // ----- HEADERS: Define if headers exist in build environment @@ -133,7 +144,7 @@ #endif // ----- STANDARD LIBRARY FEATURES -#if !defined (__QNX__) && !defined(VITA) && !defined(PSP) +#if !defined (__QNX__) && !defined(VITA) && !defined(PSP) && !defined(__HAIKU__) #define DIRENT_HAS_D_TYPE 1 /* struct dirent has d_type */ #endif diff --git a/include/cpu.h b/include/cpu.h index 8d39d33ce..c1a4f2f46 100644 --- a/include/cpu.h +++ b/include/cpu.h @@ -29,6 +29,9 @@ #ifndef DOSBOX_MEM_H #include "mem.h" #endif +#ifndef DOSBOX_PAGING_H +#include "paging.h" +#endif #define CPU_AUTODETERMINE_NONE 0x00 #define CPU_AUTODETERMINE_CORE 0x01 @@ -182,6 +185,7 @@ void CPU_SetFlags(Bitu word,Bitu mask); #define CR0_FPUEMULATION 0x00000004 #define CR0_TASKSWITCH 0x00000008 #define CR0_FPUPRESENT 0x00000010 +#define CR0_WRITEPROTECT 0x00010000 #define CR0_PAGING 0x80000000 // reasons for triggering a debug exception @@ -384,7 +388,7 @@ class DescriptorTable { bool GetDescriptor (Bitu selector, Descriptor& desc) { selector&=~7; if (selector>=table_limit) return false; - desc.Load(table_base+(selector)); + desc.Load((PhysPt)(table_base+(selector))); return true; } protected: @@ -398,11 +402,11 @@ class GDTDescriptorTable : public DescriptorTable { Bitu address=selector & ~7; if (selector & 4) { if (address>=ldt_limit) return false; - desc.Load(ldt_base+address); + desc.Load((PhysPt)(ldt_base+address)); return true; } else { if (address>=table_limit) return false; - desc.Load(table_base+address); + desc.Load((PhysPt)(table_base+address)); return true; } } @@ -410,11 +414,11 @@ class GDTDescriptorTable : public DescriptorTable { Bitu address=selector & ~7; if (selector & 4) { if (address>=ldt_limit) return false; - desc.Save(ldt_base+address); + desc.Save((PhysPt)(ldt_base+address)); return true; } else { if (address>=table_limit) return false; - desc.Save(table_base+address); + desc.Save((PhysPt)(table_base+address)); return true; } } @@ -497,4 +501,17 @@ static INLINE void CPU_SetFlagsw(Bitu word) { CPU_SetFlags(word,mask); } +static INLINE void CPU_SetCPL(Bitu newcpl) { + if (newcpl != cpu.cpl) { + if (paging.enabled) { + if ( ((cpu.cpl < 3) && (newcpl == 3)) || ((cpu.cpl == 3) && (newcpl < 3)) ) + PAGING_SwitchCPL(newcpl == 3); + } + cpu.cpl = newcpl; + } +} + +Bitu CPU_ForceV86FakeIO_In(Bitu port,Bitu len); +void CPU_ForceV86FakeIO_Out(Bitu port,Bitu val,Bitu len); + #endif diff --git a/include/cross.h b/include/cross.h index 75fc6b7a3..2d2f68ab1 100644 --- a/include/cross.h +++ b/include/cross.h @@ -63,6 +63,10 @@ #define CROSS_FILE 1 #define CROSS_DIR 2 #if defined (WIN32) +// DBP: Fix warning when building with MSYS2 +#ifdef ftruncate +#undef ftruncate +#endif #define ftruncate(blah,blah2) chsize(blah,blah2) #endif @@ -131,10 +135,9 @@ void close_directory(dir_information* dirp); FILE *fopen_wrap(const char *path, const char *mode); #ifdef C_DBP_HAVE_FPATH_NOCASE -// Check if path exists inside base_dir, will fix case in path -// Either base_dir (if set) or path (if without base_dir) needs to be absolute +// Check if path exists, will fix case in path // Returns true if file exists, otherwise path can be partially modified -bool fpath_nocase(char* path, const char* base_dir = NULL); +bool fpath_nocase(char* path); #endif //DBP: Use 64-bit fseek and ftell (based on libretro-common/vfs/vfs_implementation.c) diff --git a/include/dbp_serialize.h b/include/dbp_serialize.h index afb252d6e..3eef4d2d9 100644 --- a/include/dbp_serialize.h +++ b/include/dbp_serialize.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Bernhard Schelling + * Copyright (C) 2020-2022 Bernhard Schelling * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ struct DBPArchive MODE_ZERO, }; - DBPArchive(EMode _mode) : mode(_mode), had_error(ERR_NONE), warnings(WARN_NONE) {} + DBPArchive(EMode _mode) : mode(_mode), flags(FLAG_NONE), had_error(ERR_NONE), warnings(WARN_NONE) {} virtual DBPArchive& SerializeByte(void* p) = 0; virtual DBPArchive& SerializeBytes(void* p, size_t sz) = 0; virtual DBPArchive& Discard(size_t sz); @@ -57,7 +57,8 @@ struct DBPArchive ERR_NONE, ERR_LAYOUT, ERR_VERSION, - ERR_INVALIDSTATE, + ERR_DOSNOTRUNNING, + ERR_GAMENOTRUNNING, ERR_WRONGMACHINECONFIG, ERR_WRONGMEMORYCONFIG, ERR_WRONGVGAMEMCONFIG, @@ -69,8 +70,13 @@ struct DBPArchive WARN_WRONGDEVICES = 1<<1, WARN_WRONGPROGRAM = 1<<2, }; + enum EFlag : Bit8u + { + FLAG_NONE = 0, + FLAG_NORESETINPUT = 1<<0, + }; - Bit8u mode, version, had_error, warnings, error_info; + Bit8u mode, version, flags, had_error, warnings, error_info; // If this is set to true, the serializer will attempt have the same // output size and data layout on successively stored states. @@ -150,6 +156,6 @@ struct DBPArchiveZeroer : DBPArchive virtual size_t GetOffset() { return 0; } }; -void DBPSerialize_All(DBPArchive& ar, bool invalid_state); +void DBPSerialize_All(DBPArchive& ar, bool dos_running = true, bool game_running = true); #endif diff --git a/include/dbp_threads.h b/include/dbp_threads.h new file mode 100644 index 000000000..67817c93a --- /dev/null +++ b/include/dbp_threads.h @@ -0,0 +1,24 @@ +#define DBP_STACK_SIZE (2*1024*1024) //2 MB +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#define THREAD_CC WINAPI +struct Thread { typedef DWORD RET_t; typedef RET_t (THREAD_CC *FUNC_t)(LPVOID); static void StartDetached(FUNC_t f, void* p = NULL) { HANDLE h = CreateThread(0,DBP_STACK_SIZE,f,p,0,0); CloseHandle(h); } }; +struct Mutex { Mutex() : h(CreateMutexA(0,0,0)) {} ~Mutex() { CloseHandle(h); } __inline void Lock() { WaitForSingleObject(h,INFINITE); } __inline void Unlock() { ReleaseMutex(h); } private:HANDLE h;Mutex(const Mutex&);Mutex& operator=(const Mutex&);}; +struct Semaphore { Semaphore() : h(CreateSemaphoreA(0,0,1,0)) {} ~Semaphore() { CloseHandle(h); } __inline void Post() { BOOL r = ReleaseSemaphore(h, 1, 0); DBP_ASSERT(r); } __inline void Wait() { WaitForSingleObject(h,INFINITE); } private:HANDLE h;Semaphore(const Semaphore&);Semaphore& operator=(const Semaphore&);}; +#else +#if defined(WIIU) +#include "../libretro-common/rthreads/wiiu_pthread.h" +#elif defined(GEKKO) +#include "../libretro-common/rthreads/gx_pthread.h" +#elif defined(_3DS) +#include "../libretro-common/rthreads/ctr_pthread.h" +#else +#include +#endif +#define THREAD_CC +struct Thread { typedef void* RET_t; typedef RET_t (THREAD_CC *FUNC_t)(void*); static void StartDetached(FUNC_t f, void* p = NULL) { pthread_t h = 0; pthread_attr_t a; pthread_attr_init(&a); pthread_attr_setstacksize(&a, DBP_STACK_SIZE); pthread_create(&h, &a, f, p); pthread_attr_destroy(&a); pthread_detach(h); } }; +struct Mutex { Mutex() { pthread_mutex_init(&h,0); } ~Mutex() { pthread_mutex_destroy(&h); } __inline void Lock() { pthread_mutex_lock(&h); } __inline void Unlock() { pthread_mutex_unlock(&h); } private:pthread_mutex_t h;Mutex(const Mutex&);Mutex& operator=(const Mutex&);friend struct Conditional;}; +struct Conditional { Conditional() { pthread_cond_init(&h,0); } ~Conditional() { pthread_cond_destroy(&h); } __inline void Broadcast() { pthread_cond_broadcast(&h); } __inline void Wait(Mutex& m) { pthread_cond_wait(&h,&m.h); } private:pthread_cond_t h;Conditional(const Conditional&);Conditional& operator=(const Conditional&);}; +struct Semaphore { Semaphore() : v(0) {} __inline void Post() { m.Lock(); v = 1; c.Broadcast(); m.Unlock(); } __inline void Wait() { m.Lock(); while (!v) c.Wait(m); v = 0; m.Unlock(); } private:Mutex m;Conditional c;int v;Semaphore(const Semaphore&);Semaphore& operator=(const Semaphore&);}; +#endif diff --git a/include/dos_system.h b/include/dos_system.h index ced1e8979..a3418c9e0 100644 --- a/include/dos_system.h +++ b/include/dos_system.h @@ -87,6 +87,8 @@ class DOS_File { Bits refCtr; bool open; char* name; + //DBP: Added for large ZIP file support + inline virtual bool Seek64(Bit64u * pos,Bit32u type) { Bit32u i = (Bit32u)*pos; bool j = Seek(&i, type); *pos = i; return j; } /* Some Device Specific Stuff */ private: Bit8u hdrive; @@ -139,6 +141,7 @@ class localFile : public DOS_File { //DBP: Reason being DOS_Drive_Cache uses a lot of memory and is only used in a few //DBP: places, while DOS_Label is used in many. //DBP: Changed size of label from CROSS_LEN to DOS_NAMELENGTH_ASCII +//DBP: Added GetLongFileName function to DOS_Drive class DOS_Label { public: DOS_Label() : updatelabel(true) { label[0] = 0; } @@ -269,8 +272,9 @@ class DOS_Drive { virtual bool AllocationInfo(Bit16u * _bytes_sector,Bit8u * _sectors_cluster,Bit16u * _total_clusters,Bit16u * _free_clusters)=0; virtual bool FileExists(const char* name)=0; virtual bool FileStat(const char* name, FileStat_Block * const stat_block)=0; + virtual bool GetLongFileName(const char* name, char longname[256]) { return false; } virtual Bit8u GetMediaByte(void)=0; - virtual void SetDir(const char* path) final { strcpy(curdir,path); }; + virtual void SetDir(const char* path) { strcpy(curdir,path); }; virtual void EmptyCache(void) { }; virtual bool isRemote(void)=0; virtual bool isRemovable(void)=0; @@ -297,6 +301,7 @@ enum { DOS_SEEK_SET=0,DOS_SEEK_CUR=1,DOS_SEEK_END=2}; //DBP: These flag checks were inconsistent across the code, so added these macros #define OPEN_IS_WRITING(flags) (flags & 3) #define OPEN_IS_READING(flags) (!(flags & 1)) +#define OPEN_CHECK_ACCESS_CODE(flags) ((flags&0xf) <= 4) /* A multiplex handler should read the registers to check what function is being called diff --git a/include/fpu.h b/include/fpu.h index e40a770a3..01fec5af4 100644 --- a/include/fpu.h +++ b/include/fpu.h @@ -85,7 +85,7 @@ enum FPU_Round { ROUND_Chop = 3 }; -typedef struct { +typedef struct FPU_rec { FPU_Reg regs[9]; FPU_P_Reg p_regs[9]; FPU_Tag tags[9]; @@ -172,6 +172,9 @@ static INLINE void FPU_LOG_WARN(Bitu tree, bool ea, Bitu group, Bitu sub) { #if C_DEBUG #define DB_FPU_STACK_CHECK_POP DB_FPU_STACK_CHECK_LOG #define DB_FPU_STACK_CHECK_PUSH DB_FPU_STACK_CHECK_EXIT +#elif defined(C_DBP_LIBRETRO) +#define DB_FPU_STACK_CHECK_POP DB_FPU_STACK_CHECK_NONE +#define DB_FPU_STACK_CHECK_PUSH DB_FPU_STACK_CHECK_NONE #else #define DB_FPU_STACK_CHECK_POP DB_FPU_STACK_CHECK_NONE #define DB_FPU_STACK_CHECK_PUSH DB_FPU_STACK_CHECK_EXIT diff --git a/include/paging.h b/include/paging.h index 081635212..5cd9b5eb0 100644 --- a/include/paging.h +++ b/include/paging.h @@ -82,6 +82,9 @@ class PageHandler { /* Some other functions */ void PAGING_Enable(bool enabled); bool PAGING_Enabled(void); +void PAGING_ChangedWP(void); +void PAGING_SwitchCPL(bool isUser); +void PAGING_OnChangeCore(void); Bitu PAGING_GetDirBase(void); void PAGING_SetDirBase(Bitu cr3); @@ -174,6 +177,18 @@ struct PagingBlock { Bitu used; Bit32u entries[PAGING_LINKS]; } links; + struct { + Bitu used; + Bit32u entries[PAGING_LINKS]; + } ur_links; + struct { + Bitu used; + Bit32u entries[PAGING_LINKS]; + } krw_links; + struct { + Bitu used; + Bit32u entries[PAGING_LINKS]; + } kr_links; // WP-only Bit32u firstmb[LINK_START]; bool enabled; }; @@ -363,5 +378,11 @@ static INLINE bool mem_writed_checked(PhysPt address,Bit32u val) { } else return mem_unalignedwrited_checked(address,val); } +extern bool paging_prevent_exception_jump; +#include +struct GuestPageFaultException : std::exception { + GuestPageFaultException(Bitu n_faultcode) : faultcode(n_faultcode) {} + Bitu faultcode; +}; #endif diff --git a/include/pci_bus.h b/include/pci_bus.h index 2181aa729..ea569cef1 100644 --- a/include/pci_bus.h +++ b/include/pci_bus.h @@ -19,16 +19,27 @@ #ifndef DOSBOX_PCI_H #define DOSBOX_PCI_H +#include "config.h" +#ifdef C_DBP_ENABLE_VOODOO +#define PCI_FUNCTIONALITY_ENABLED 1 +#else //#define PCI_FUNCTIONALITY_ENABLED 0 +#endif #if defined PCI_FUNCTIONALITY_ENABLED +#ifdef C_DBP_LIBRETRO +// Reduced to be just as much as needed +#define PCI_MAX_PCIDEVICES 2 +#define PCI_MAX_PCIFUNCTIONS 2 +#else #define PCI_MAX_PCIDEVICES 10 #define PCI_MAX_PCIFUNCTIONS 8 +#endif class PCI_Device { -private: +protected: Bits pci_id, pci_subfunction; Bit16u vendor_id, device_id; diff --git a/include/render.h b/include/render.h index 4d23e7e60..36c0cf48f 100644 --- a/include/render.h +++ b/include/render.h @@ -65,14 +65,18 @@ typedef struct { int count; int max; Bitu index; +#if 0 Bit8u hadSkip[RENDER_SKIP_CACHE]; +#endif } frameskip; struct { Bitu size; scalerMode_t inMode; scalerMode_t outMode; scalerOperation_t op; +#ifdef C_DBP_ENABLE_SCALERCACHE bool clearCache; +#endif bool forced; ScalerLineHandler_t lineHandler; ScalerLineHandler_t linePalHandler; @@ -80,8 +84,10 @@ typedef struct { Bitu blocks, lastBlock; Bitu outPitch; Bit8u *outWrite; +#ifdef C_DBP_ENABLE_SCALERCACHE Bitu cachePitch; Bit8u *cacheRead; +#endif Bitu inHeight, inLine, outLine; } scale; #if C_OPENGL @@ -91,7 +97,9 @@ typedef struct { bool updating; bool active; bool aspect; +#ifdef VGA_KEEP_CHANGES bool fullFrame; +#endif bool forceUpdate; } Render_t; diff --git a/include/setup.h b/include/setup.h index 5b722715e..b355fe3dd 100644 --- a/include/setup.h +++ b/include/setup.h @@ -126,7 +126,11 @@ class Value { class Property { public: +#ifndef C_DBP_LIBRETRO struct Changeable { enum Value {Always, WhenIdle,OnlyAtStart};}; +#else + struct Changeable { enum Value {Always, WhenIdle, OnlyAtStart, OnlyByConfigProgram};}; +#endif const std::string propname; Property(std::string const& _propname, Changeable::Value when):propname(_propname),change(when) { } @@ -145,6 +149,9 @@ class Property { virtual const std::vector& GetValues() const; Value::Etype Get_type(){return default_value.type;} Changeable::Value getChange() {return change;} +#ifdef C_DBP_LIBRETRO + void OnChangedByConfigProgram(){const_cast(change)=Changeable::OnlyByConfigProgram;} +#endif protected: //Set interval value to in or default if in is invalid. force always sets the value. @@ -271,7 +278,12 @@ class Section { virtual std::string GetPropValue(std::string const& _property) const =0; virtual bool HandleInputline(std::string const& _line)=0; +#ifdef C_DBP_NATIVE_CONFIGFILE virtual void PrintData(FILE* outfile) const =0; +#endif +#ifdef C_DBP_LIBRETRO + virtual Property* GetProp(std::string const& _property) const =0; +#endif virtual ~Section() { /*Children must call executedestroy ! */} }; @@ -308,8 +320,13 @@ class Section_prop:public Section { Prop_multival* Get_multival(std::string const& _propname) const; Prop_multival_remain* Get_multivalremain(std::string const& _propname) const; bool HandleInputline(std::string const& gegevens); +#ifdef C_DBP_NATIVE_CONFIGFILE void PrintData(FILE* outfile) const; +#endif virtual std::string GetPropValue(std::string const& _property) const; +#ifdef C_DBP_LIBRETRO + virtual Property* GetProp(std::string const& _property) const; +#endif //ExecuteDestroy should be here else the destroy functions use destroyed properties virtual ~Section_prop(); }; @@ -343,8 +360,13 @@ class Section_line: public Section{ Section_line(std::string const& _sectionname):Section(_sectionname){} ~Section_line(){ExecuteDestroy(true);} bool HandleInputline(std::string const& gegevens); +#ifdef C_DBP_NATIVE_CONFIGFILE void PrintData(FILE* outfile) const; +#endif virtual std::string GetPropValue(std::string const& _property) const; +#ifdef C_DBP_LIBRETRO + virtual Property* GetProp(std::string const& _property) const {return NULL;} +#endif std::string data; }; diff --git a/jni/Android.mk b/jni/Android.mk index 5f7ea18ad..13a2617aa 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -51,7 +51,7 @@ else LDFLAGS += -O2 endif -CFLAGS += $(CPUFLAGS) -std=c++11 -fpic -fomit-frame-pointer -fno-exceptions -fno-non-call-exceptions -Wno-address-of-packed-member -Wno-format -Wno-switch +CFLAGS += $(CPUFLAGS) -std=c++11 -fpic -fomit-frame-pointer -fexceptions -Wno-address-of-packed-member -Wno-format -Wno-switch CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections CFLAGS += -pthread -D__LIBRETRO__ -Iinclude diff --git a/keyb2joypad.cpp b/keyb2joypad.cpp index 28a6dee8e..88fe66d79 100644 --- a/keyb2joypad.cpp +++ b/keyb2joypad.cpp @@ -3,516 +3,585 @@ #include "keyb2joypad.h" const Bit32u map_keys[MAP_TABLE_SIZE] = { - 3164741631,3438301185,0,980295683,0,0,3360505862,937357319,0,3847831561,782020618,147972106,4264448009,535199757,2107076622,0,0,3846967313,0,0,1665749012,0,0,2244182039,0,3221254169,2750976026,2360221721,4129951772,3293016092,0,0,0,0,0,0,4150448164,2035716133,4149944358,0,2665115688,1170165801,1170186281,1948901417,3945365547,390144045,2796875821,3673124911,2913120299,3967098929,0,0,315379764,236314677,2545680438,3276189751,360615991,3020304441,508919866,4191621175,1242669108,800911418,1276051518,527609918,1708474426,4048023617,1365344322,2195017795,3830865988,3293159493,3296690241,2484920391,503701576,1155469382,3960332362,4015398987,723816523,3196694605,4232962123,3597430856,93827152,3438833745,2737324105,602849363,703246420,1696657493,2489622614,2705723478,3105456216,3514441817,1615921242,2137530459,1030414428,2278043738,877170777,3957911642,2460708954,3488829537,104927329,350666850,103747684,224718938,1857912931,1793597543,2799657064,2795638889,374661226,4144377962,853307499,460959850,1290453096,1141805164,1673056366,3286413425,3754299486,846155891,2968977478,282898549,4097974378,4173496439,3694563448,2795720825,1329090682,1727193209,1230299260,4218118268,3386720380,1813921919, - 2774540415,1966153856,108454008,3303313530,632647812,3536941189,2752155782,2644643975,2327462023,1917112455,309911640,4131434635,2051866764,2829189261,354308238,207327374,4150972558,170147982,2774589583,4178460815,3931091092,637251725,506781846,558923920,2198442071,2018627737,1973567641,277913755,1807654993,3833348250,1655951518,394932383,1581047914,2507665531,672096418,962822307,451199140,33566885,3600253090,4015067303,1503834279,1266778281,4197912649,3576217771,3594821734,4256391341,1595850925,2198343793,3619315888,1530413232,1109151922,3058278579,716312756,2829189301,3473801397,3605704885,923664567,874209465,1814929590,1146986676,1868292284,99107005,231219390,2741846207,1789886644,1246585020,36171961,4040855746,4026605764,3833942213,2456821958,17473734,1690456243,1690452147,766775483,1277702342,1920147554,1890558106,1781584078,2847092837,3852017872,21680337,765350098,3155300563,2990956755,2701643989,2337566934,782049490,1840955608,812773593,3892846810,3892080856,599822553,3866431707,1101971678,619614431,4260667616,2785538273,966054109,2542878945,996966622,2044821730,1455292645,4134375648,4201197800,3366625512,968839385,2935329003,305631444,4082381037,4009062638,2092609775,1764270320,2783047921,3846975729,297066739,970555636,824168692,598536435,699994359,1363534072,719761657,3303190778,71344379,1862353148,2090037500,3436278013,562520313, - 1722212605,1451196673,3147178241,2491556088,2581528836,2270560494,3895628038,2429694214,2546561273,734175481,1154457837,718897413,65671436,452632845,1088217358,3229540621,4177301776,747430161,2541342994,3052097808,1576145172,3840282901,3584200982,2619429141,1046724888,681898254,1670447384,2367869186,2432319772,3844448540,1671262474,331649311,3029463295,2796241185,916701474,4218126625,2047660324,846668069,2858033444,2941223207,356823335,2880504102,1576517778,2532208815,1326022956,498856237,406757676,1540895020,2287153456,1813184817,2273444144,46686511,1747693753,2292424801,2255884598,4146905279,0,1491546425,2024198458,1123447097,3367162172,2102780221,595652923,1587491135,2314461499,3794071872,0,2159788355,3688411460,933028165,2964234564,3687252295,2767552840,926540104,3303350602,1929154891,1999184204,3742237005,1682850124,161628494,528638276,795173201,1108844881,2279035218,2734612820,2577248597,1250206037,689652050,929472837,2123538777,1068376410,1703616858,1111097691,1878528345,0,425640287,2811003231,3009630561,642736482,4119798115,1289462115,3028013412,1690169702,1410781542,3797643624,1657205097,950378858,1032634727,3639746924,3535429996,3364778343,326463851,4289290594,1299956068,859054450,3574526323,2705514866,2053489013,2055733618,419320182,1395761528,2796925305,3860902265,2082877819,2340700535,3958055293,2801533305,2486542716, - 903762304,832004480,3439161701,3222270339,591241603,3969433987,2374226310,197255555,3772846472,2474619272,1235861898,2137137547,3491946891,3543040396,4051251595,1820766600,2175254928,2091409808,1634640272,3113152906,3214131604,1117024661,1719554454,4280586647,3977335189,0,0,2874614171,0,2537882013,1418367390,3059372446,0,0,797761954,2821673379,2810282404,0,0,819655079,3429392807,3489972649,1738621354,3155329449,3130106284,3302744493,1653735853,1465508270,2934866348,305717678,1936495026,3859169715,2377355700,702710195,3052589491,4258087351,1907610039,1425867193,2079793593,3461140923,1368990139,3705467307,354308542,3837092281,2250469823,1016549825,1293156801,613036483,3275719107,1854845379,2309755334,3145810364,1725469128,1498186185,782377418,2873373130,2714534317,1452585421,3341357495,0,2862334416,1554342353,2260083154,2940240339,1428443604,1534816725,1627079122,458301908,4135997909,4148388307,1591112154,952603090,3213590994,587141597,3027718621,1183506897,1757987296,3060949467,0,0,3934781924,3171398117,2396991974,2057642471,2128507364,2283016681,0,0,4099482092,2246595053,969212396,1171358191,4139000304,1741259246,1337577970,2885476846,3451638253,1682067957,1175749110,3080929783,730685943,2900484600,53354999,1471672821,1048138236,3325178360,423555582,906895870, - 3847782912,3947762168,2959442421,2100478467,2258858487,3415175683,2322457083,2161426951,2033394184,0,0,68432395,1139528204,126312971,0,1922880015,2090967568,1909711377,914862610,2749878803,1448235540,1321480722,3229463062,1588867603,4137341464,3086541337,338256409,1899512347,448598556,2422424092,4055061022,2742141471,918118944,700826144,2960245277,3415224856,2586268196,870130213,2366411302,3088757287,397955603,1810887209,556343850,2401788457,0,0,2382381614,2053120559,3355501104,710013488,3843498545,3113493043,2272866867,3154309684,3963167284,1777390135,0,971010617,0,0,0,0,0,0,0,0,3491775042,0,1699689028,909808196,831509061,0,0,653738569,1242440266,1768931914,1364505162,3517698637,1208627788,1177133644,2042913360,4011344458,4076884561,1455362643,680559188,382038611,774070870,1409458774,2044404311,159920717,3289055834,349262427,793887323,3491517021,340591198,0,2287981152,0,390029922,143749731,756249187,1781944933,4033946214,554807910,3939009127,2409214569,0,165896811,0,0,3366580846,3349045871,2772382320,1626153583,2708705906,2112725619,303223406,3008488046,1165943414,1165935222,1015136886,3343889017,1135927926,2116977274,866202232,3118654077,3943281277,3584356982, - 3328639616,575373943,2796671609,667861615,2832667256,535339637,925799046,914121351,1350361736,360428166,3194442378,948150922,538350220,701174409,2708333198,1151554190,2812641936,2124870288,3794354833,4065796723,2441925268,1298137749,1276056214,4277174934,1219015319,2277946009,1151558294,1723040409,851731100,710107804,1485189790,448377503,3819139742,4276920990,1120813727,1254105762,4118196893,3255300770,1157202598,1588130459,1030062760,766427815,3634066074,4224606887,3545313964,2357973672,592143003,2689204911,669967024,321295025,1639465650,307602099,226411188,2589147828,1336353462,3424633527,3938861751,2466017974,272188090,1663378106,688759477,4027067,3288392382,4144562879,3790070464,3790070465,2142503618,1220129475,3790070466,1245303492,3081925318,1948955335,4103418566,3639251657,355033799,370754251,484098763,1512760013,1208787661,966218447,1363333837,1558024887,1936741074,869311187,1744863956,1262465749,86397654,1807966935,1628541655,1606046421,1371661018,3664646875,759632604,1960776412,3397915356,1333379800,4242858718,3910804193,777552610,58270434,3640926948,1476575973,3606471398,3947598555,3240813276,1267700457,3863335657,3228033770,3780477674,2012422890,1770803950,942478062,1573991151,2448790256,741491382,2749829875,1869710068,2212057845,2098524915,2047689388,2091152120,2797388537,2795705081,1849168635,185561851,2795856633,3174343421,1334895355, - 1916338944,2795729665,1662169858,2315825923,4289278716,632746716,3413205753,1404973831,1539371762,118358679,3585405706,236880549,2755523340,1994355468,2735878925,4007035660,4080014093,1110606609,190759698,1625981715,3932193453,2765394669,708473622,3827323558,3815363345,1441944246,3744232175,3459744375,1307009650,4030800502,912696094,1612239646,3793842974,2572698399,2193302306,713945891,21332771,1611428641,3257684774,1767846659,2733589170,2035835513,2240344874,1026945835,659108651,41579308,2954412843,1039475498,1070990128,3504055088,1717662508,3814794035,318907136,140882560,2284913462,1454973751,3056223020,2895725270,4241630010,2225550138,3224634106,113218365,4070990654,1437676150,1582723904,843821888,641942338,1049035587,2646688432,1449358149,3829457734,1187504967,1666118470,1611252551,1020953401,2623427257,4029895313,2438591309,1418646350,1230013262,1172677456,4086694734,3159561042,517219155,2982265678,1485574997,2186306297,4198113980,2553520984,3859493721,508801882,2749379418,2246431579,1302528744,112313182,1278219102,2598048608,1581691745,1146577762,1367622489,231203572,2938180453,3250283365,3232617318,1489351528,863621990,2359862122,2507580266,1120756588,2455573357,3515974510,1924268911,1030787952,2770228078,1799050093,935289709,1856906092,2954466164,3517457260,1364075367,760525648,3792257684,946078399,3091776379,2833171323,1112212349,1660334974,402641787, - 2268357500,985793409,155558782,2848805760,2788565892,38404994,3187835608,456078215,3483288456,3614622601,1596461960,3658851211,1231258508,4041020301,3612017550,2833470347,2091410320,2292667281,3277603720,664212371,0,0,1041748886,2067374999,645366680,812716953,683504538,2077397913,3278050204,1922737052,4151071646,270926745,462963616,1058538395,3575665570,1093534617,2286080928,1954931621,233767831,1568129959,150565800,2536448937,0,0,0,0,0,2246222767,3264857008,2191205297,1782387631,3586593715,3264373684,1465689012,1360495541,2240848823,3992515511,2795549625,1016026041,3259188155,2280272828,150320055,2866148284,1958843327,2472608704,1845154753,982852545,2512020419,1547310019,3113583553,4196668353,2016523187,3713688500,1985328073,364172234,3234898873,3068318668,2100790201,1177277387,2750370757,768365520,952587217,2025513937,2813887413,0,0,0,3065705431,2248037335,419058649,425178071,736101335,1022735324,2281739228,859300830,1939010527,0,3865117665,887829474,2422789090,964953059,602883045,2749277153,291206118,601293793,1143624681,4235494375,2192626667,3467600876,592303083,1977115617,1748181999,0,3633669105,569603058,0,2231411700,0,2290213878,1907663863,717997048,4015879160,2083632122,387793912,1883190266,2804827131,71828478,3950502907, - 76096505,904639481,3487601660,175092732,298636292,92218366,3629954044,566961159,997942280,3116037126,0,4245595147,1895609356,528495629,3612337166,1227076622,0,3718657041,3776402450,3157034003,2275140625,3641144338,0,4263412759,1955922968,2157904919,3303359514,3414111257,1254462492,1567691805,0,2880492575,4180194336,2736907297,1892860962,211870755,2632328228,1716675620,3613758502,306709537,968938528,2035438633,2659173418,0,4157621292,94229548,3271697454,3384615983,559146032,0,3535152178,846832691,1530729524,1071985716,1337369654,0,818418744,2127447096,3607835705,4155077691,1169097784,379933757,4206036026,1634677823,286266432,1559684161,3099239490,3627283522,3600340034,483693637,1495225414,2476766279,1344279624,2665321545,2292704329,2775069771,64058442,171332684,3345011776,3479028813,2619286608,2173838417,2819474514,73188435,3808732241,4147237972,631370819,0,0,3143181401,3686741082,1741558875,1398297691,3863458905,2318271582,4090467423,605766752,2818839649,571847777,2679751779,351990882,4245046373,4245050469,99050597,987288678,3331859550,363500650,0,486732908,440398957,3574805613,0,0,1845306481,2705654898,3022259315,1939612786,0,0,3105743991,0,1911014521,4123747450,876926073,2298823803,3820942461,3589534845,1335972986, - 2840474752,1216427137,3446445186,3808998530,4156523646,0,36201606,1624528007,0,2795779209,1867732105,2640450699,199808139,2440713354,2545083534,4055123086,4260934800,242226320,315667602,4139898003,1461806228,2976216213,2990904468,3830682775,3526546584,2063021208,1621845146,0,2945066140,1094382749,2700813470,1157440670,3255461024,2379228320,1609364642,1991668899,1375831204,310928549,1832518822,2194592935,3691725989,2245194918,2590213283,1444373674,74499244,4220929194,2657526958,1947047084,40846512,3045156017,1056949419,2516350131,646837427,1272661173,876426422,963278005,354317494,3991045303,1549464757,1690453171,106808493,4074509495,3861087401,3080881343,1849353405,0,1982448834,3948639427,0,0,2966947014,0,2271335624,0,3396879562,1378407627,0,1287341261,0,4083057871,1996137680,3860952273,1724114129,3397989584,2292913361,0,0,0,0,2241602777,1792079065,1461069019,3821200603,2930922716,29541595,2198246619,433345759,1571493089,0,2402673891,347366627,2134951141,1902503142,688456935,884012264,2859570406,2543543529,1626834155,2029020393,135443693,3155043565,3977749743,4140434672,3846612209,383677682,106509555,3114677491,1851176181,3875333366,762139894,1773675766,3861636345,152577271,2859570422,577082611,3928892653,3529364721,1031210239, - 2802271488,3146962177,2898638061,2265371883,4101850372,481309957,918426884,1813484783,2203964680,2092438793,2753139978,3234182411,2157356296,3731997961,1032664333,3456484623,1116988688,2859484433,3867768081,1536390415,3042235668,3821045009,532202774,1874122007,3890705688,3860907289,3933557997,1057346843,2233152786,1067230493,0,786564383,0,3326178593,919254305,2792183073,873297186,1830516005,0,0,3809654056,0,0,685335851,377214252,3493991725,2438026542,0,2384487728,0,0,869598515,3415528756,1276871989,0,920749367,0,0,3873154362,0,2644608316,1334281533,0,0,0,0,0,2855646531,0,0,3800663366,32744774,0,1635521865,3306804554,3034727754,1629517132,253498701,1622398286,1977177418,1267000656,2909779280,2538104141,1100367187,1037321556,869320019,1377396051,0,0,0,911676762,3366610266,672228698,2225595738,118543710,2127721820,458495328,2168829281,638727521,980587873,3296376164,2058315106,2615870822,2245657958,940053862,279590248,2962851178,2787726694,3671987564,3943789932,3066307943,995423596,863995241,3443324273,3443320177,1290106227,3574261107,1298351476,358323574,1380242797,702338415,31171961,3478775162,2079929721,478918012,2115818877,1290233214,2128835964, - 471082366,75658605,4026795394,4137420141,87491972,3477951877,665777540,0,0,3183662473,0,4150031755,1137415564,2152641933,0,1645208975,1742214544,3798013327,2715493778,382879123,415999380,1865729426,3117016463,1043805587,2371143064,4243813785,2411726234,4276098459,3909649820,1656784285,546600349,738104733,441316768,2794804641,4146197922,849126819,3365299618,2730108325,171480486,2980189606,2604496291,21136809,3585758634,950666666,279618979,1568875931,0,0,3039671728,3369346481,48031152,0,0,565695925,875701686,0,1620530616,3446609337,0,678311355,4142679484,3265897916,2510103998,2505991615,2144740796,2882815419,2377295292,1383859651,655635903,3872232901,4059616710,4071609799,3320124871,3303962055,2811643334,4014777803,185562571,1242432972,3148219853,2836264381,3995571664,3080492483,4224337362,3810579923,280266194,3771631061,3972756950,3280491991,2935666135,4203202009,388351449,2216392148,233981404,1201075673,2489517534,0,0,0,0,0,704230884,0,0,4250703335,0,0,0,226219499,3811194348,684230125,1658373612,589428207,2253858288,3235505649,1480881647,3124913651,1596155376,3567269365,1630553590,2876401142,3062195703,877151737,877118969,1490863610,2837632493,2438026742,2349209067,0, - 854996480,170296832,4145747457,3420378627,363488770,1324185093,0,3244336647,2383459847,0,140039690,0,1688245772,3467625996,1418614286,0,0,0,3507521042,0,0,0,2303362582,2850661911,0,3144021529,3443402265,4080547355,972887580,3172271642,1418978841,0,603997728,718267937,3949565474,3369596449,2018924068,236750372,3906336288,3871999520,4220954146,751388201,595752490,4002289187,4002387491,107718180,1823376935,3064456751,4106671664,1621714480,3073955375,3403388463,104302132,1286706735,659093046,4198417969,2353018415,0,1089746490,3935761978,4130793020,0,257402430,2762827327,1348744768,4124309056,394098240,375141955,169993793,132802117,3576206918,1434060357,1994810950,2796349001,886773322,631281226,3389744715,3162728007,3909236302,2503837254,1950774864,68044369,606967376,2645071443,1586468436,2836112980,2018846294,1640887894,2531481175,4062533209,449799770,2165982806,1037162076,160368221,796329565,2518337119,1745958480,1938429511,1768662626,2557986403,2243503716,1072723556,704026214,3635848807,1763350119,4035872361,410875498,1969788523,2575197802,3449239149,22169193,3694175841,2202019440,3863877209,2645825138,3164100211,585352820,3283621492,2223191667,1554925175,3834017400,3279554168,3642009208,2156074619,2779047544,2568550013,2420668030,1095865982, - 2491762304,1182762623,4146198146,2388301443,2579469950,1375716987,3799914104,2644657799,3084793477,2742965891,550831751,3993155186,236930693,4063803021,3834771086,1488217743,447334032,1945409165,2535712402,178824845,2846877332,3956131477,331749014,3003356820,4099479192,2749294233,1966495386,2126952091,2571552412,1927788182,453695134,2317801118,3830621839,1734096545,2157323938,2051397283,3221132963,3320792740,941266598,1816708774,4179433127,236881573,617264807,268301980,2987132588,2248492702,1857947310,1715308207,2133313200,3114456751,1187030704,15206067,2144728754,3877303955,2545714870,1100199607,1497585336,4230911669,283940538,3788891835,1401443936,1655641789,711718590,708667071,3671991997,811890369,339150529,198588099,2845210305,798414526,3688883906,1174267591,319174238,2406790857,2663868077,3796498058,1299543756,1683773133,184571513,1189115577,2652501712,1215600337,2340894418,910137043,801703636,3018536660,1794803414,846046935,2422101720,2397238999,3730593498,2137573083,4201678555,2829309661,4177938135,2792199903,726910673,3861055201,245696226,726677201,1476114148,3933996773,4248680165,354862816,451233512,3632817896,1123219177,591881957,4069590736,3261167341,3378509549,51218157,2796553937,3257140977,436205269,3464521398,1579169524,2672555676,2217723503,2510022382,1664693902,2797008633,1387722490,179795707,117315289,3786393341,2128074494,3193284292, - 3270563584,1324406528,3422861058,531502850,4154615419,1373914885,379700997,2185197317,1449547528,2505410217,1548195594,796022539,2402658059,4114687757,3464881933,3430663947,3632854722,185251601,4219086610,2023569170,1310066360,2130872085,2545743638,1447016215,3881203480,443516695,219739930,3441227547,2750986010,1910507293,529032843,146999071,4084365088,2418169633,74454816,3905541923,521606945,629438245,4148786979,146528039,107480872,2492659496,2544355114,2346362667,201135915,2468689566,3887228718,3385485103,3656529711,3801147185,1846925105,3273463603,966137652,2302039861,1296635702,2678351670,281073464,2776553272,1128208182,2877630262,422319925,1580914493,495789877,709031732,909715264,286635841,3900712769,2423461699,1660745540,3205793605,4132247363,1277150995,4031821454,1346094740,3737331530,3051022154,1346098836,2573944653,2073429571,3390588751,703715152,4173035344,2480568145,2281658193,1741395796,1692075860,2010077014,397399894,3273258665,2993059497,0,0,0,3123201885,818186078,1810986847,3439900510,677988191,300611421,92481375,0,1909761893,0,2410968935,2275694440,2802153320,247924586,0,2656872300,0,0,0,3974121328,1031067505,2370951025,2387162995,78563188,2574104437,370366324,1406515063,0,303347577,1123239802,3901290363,2237765500,3288844156,3964331902,1420294011, - 70682496,2757552001,4139480953,2955368316,3504433028,2393470853,3250640773,456079239,2724910984,2092869513,2418100105,4118452103,1460557700,2032400264,1765013386,3020289935,1745221519,4120348561,2796984209,1837856659,3100264340,2011416469,3461670800,3465869207,2322810776,2289145752,1827739546,2583304088,1226254236,3568400285,635975582,3270862751,2079369119,1826895776,3083433890,1786898339,2095585186,2888841125,1574422434,3851437981,257386398,2687461289,1141827497,306358187,123377580,4073326509,476997537,3245594543,3146917807,1975146416,2503591846,3020470195,2934097843,3976665013,560080800,1680648119,3105064878,1016047545,2272778170,164480955,927238076,3834030011,2821466043,4150974398,1495574464,2937845696,3512465346,1080584128,2823874498,1257392069,1030145983,1987233735,2159519688,896341961,361809866,1626011595,2802309064,2574895042,3901065166,1470691268,3503044523,3634227145,1056454610,1608595411,2916984788,3337656277,144201682,2883581911,1794709464,4021077975,1933424568,1058863067,468072353,3287693277,75524024,3979036575,2272892896,3114772423,1776117730,2156136419,2851104740,3966994405,2489767910,2424719335,3395016680,4181239782,2043029479,749979620,2435745771,2809513962,4191533031,1763678191,975575023,2795513841,716691442,3979245,580310957,1809901557,3982088140,3553581007,4196829176,297175013,3619203066,3697752058,3228669846,2596013981,4094408702,298854309, - 2914174976,244500481,3511998465,2018125778,3491653636,972294149,3725584388,2550417361,2637346818,3249129481,3986995210,3815196683,3987027978,2985666549,1972938766,3447703567,1695053840,2096740369,3432613902,3083946003,509769602,160368661,3935385622,2367682582,3623258082,2080290841,2199660570,878913563,2654492700,3272996893,2633512990,218052639,3715422220,2092050465,1915861026,71718837,380753956,4213610415,2338801569,929855460,961263656,3210721320,3993090090,2161342506,4160682028,0,0,0,2801809456,3634477105,3047041074,3640035378,1859270704,518010932,2639566902,1328445492,3317028920,3020077113,1187223608,616536120,619661369,1831254077,1695049784,1695053880,4225243200,3817142335,1775691834,162891843,1447159876,4189214788,1685346372,2476857415,1377413187,3334031433,845637705,3732744267,2013435980,1921079367,2830604341,3456149583,823928903,970278993,3670857810,972027967,1228224570,3989080149,1262442581,1301563477,2262091864,1850292313,3093301338,2334353495,663427162,2620102742,732973143,1991104603,1161042016,3902781529,1939322978,2010638385,1864546404,4228098141,987285606,555563111,688105575,2533132393,3201722471,2243164267,2686306412,1657907308,3966371947,1003509869,3400800368,1354528877,0,0,0,0,3187710070,0,3001759864,2779342968,0,3379902587,3003033724,3486931068,1249134718,1069734013, - 2677598336,1361971329,1622218878,122861691,3798534268,3528796293,2498279558,1437227143,155584640,2795747465,1131436170,1950615691,2023925898,3447965837,4032137358,4072364175,4073064588,3373119628,1525565586,13752466,851933331,1904040085,2667714710,4192872599,2371143832,1374681241,625035410,4244834459,4124940444,1712056477,2538317982,3211765919,1110493340,1138440353,1921226914,4066007202,729421977,818555030,3951212701,1335224487,2223437975,3574991017,2795538601,221227177,1973201068,2596436140,226433197,3890780335,1620658352,4112623751,675076274,565577870,972892340,2860411061,358738102,0,3607517368,0,0,0,4166613180,3805685949,4287731902,2085574847,4074617023,2962528448,1954568382,3080509635,2851797188,0,762333382,1577994439,2402822342,3846351049,1117493449,870852807,531192007,1032702157,115161293,3339086031,2747320523,1963550921,1328998610,1508612307,2591033554,174782662,1344743638,965273811,1262442709,3436300505,1278085318,4202989787,3578280155,3241982172,4236437721,1936468191,3708922080,2836805857,20023520,1262430421,1298684132,3966839013,2483607782,2310478055,4227983592,1140697321,943577320,191469800,136452328,1610287341,109037800,2354075879,3225172208,3469535467,472914156,797481203,1937975527,1894369509,2935552243,3866532087,3547797708,3861285113,2795874553,152787193,905832700,2972416252,1013639422,89876734, - 1025706237,223668479,1969793279,3303282938,2332391684,1157286149,3096570118,48929029,3111175,1151559942,699816198,3914635531,661096716,3845753085,2834913550,833304847,262441232,1652341007,2730801422,3384973573,3131746580,3995871509,1833834774,3690748182,808769816,21817625,462084377,3303561498,972794140,2611411227,2634889492,1609586975,831838496,2394667297,2331789602,530716957,208808225,4270078237,2632808730,3611265319,3436767528,1288169716,1778473258,2580678860,929036588,1465375020,1218124048,2703051016,1780685104,3454814414,0,869607731,2145450292,0,0,77728055,4106742072,2202683704,3465791801,4080671035,572188986,0,954820926,1626118463,961718590,4125751617,1594726722,2126833987,3303184706,2659170626,711526726,495954247,4086507848,1964468553,3303790922,224139593,1726720324,3254118733,2977085774,3225340239,1185257808,726862153,3767761234,2853054803,3203721556,1243359556,156428614,3303565655,4189383000,3791677781,1655048510,1031092554,2218150233,28719453,334010718,3252713822,1390115168,752232793,2831964493,3849685347,3230890324,1458514277,4235016550,1237297487,3267574120,2265454953,716339562,22972779,3203230058,956504425,1667504494,1088964972,2291698032,2438924653,1177106802,4267407728,3538426192,1121814901,3091392886,3791087953,2503158136,3043694969,3303328122,3861297529,4274649453,2514827645,3612490110,2255997311, - 4005857637,4041079169,855452033,2434873673,0,3209873797,2763983238,2566875526,2422229384,2175691145,3930638728,3847883145,2404567436,64395656,3752622476,3369384329,27560334,278358415,3774552466,1267169683,39524755,3967699349,3225880982,2614700438,285063574,324397460,909691290,641780122,3376290200,1872722333,4182481303,956074399,1970825631,167496095,1036425611,2053548447,2172803492,4150417828,4200888741,1755081127,2692639144,2367814057,2883410340,4119181739,2468379052,511818157,3469011369,835713455,120469935,1378355631,3875490225,2088872369,2245740980,1088698805,646408630,1160137142,2459597240,633751989,1328941498,261413298,1484716473,2255923598,1148475828,3051137459,2861345216,4016105921,63938,2720258499,1109821892,1259841989,3516975532,384870855,1765026248,2369604040,1883179466,3306617291,624257471,2856139213,2991208909,736594383,1673079248,4085217745,3619056080,3803249107,492296656,1250417109,0,4159130071,0,0,0,634223067,3167312348,1180015068,0,2525993439,1229142496,1435134433,1559091682,864827872,2204891618,0,0,1924635111,3325217255,191232489,3025086951,3638610408,3980855788,3118627304,2791205357,0,1072916976,1437866481,1577699826,1266833907,2690136564,2157713909,3229137398,3690224118,1291110904,370850288,250714618,1425480186,3592321530,1188866557,4276578811,0, - 3855202816,0,0,0,1073633796,0,0,0,48499208,1085114889,2946726410,460384778,0,0,231983630,0,59849232,0,0,3161283091,0,0,701807126,231905815,1222433303,767425049,3922881049,2676038171,3486558748,4136311323,1446259225,1629010463,438483488,779840032,946342434,3117345313,3969432099,659270181,1175054886,3275803175,3602180647,3522095657,3461200425,1558264361,909863468,3133205035,1098906150,1429383713,2286049840,4207372848,3867957809,1822800435,2749749811,2352093748,2804832819,1922656823,1806658104,2292591159,2432420408,1977096726,74164796,347109949,3726363198,3414878783,394099264,2190826049,148208194,798960194,2209909314,1823439424,4025211462,699488835,0,0,0,1242544715,0,0,0,0,0,0,0,0,2364127828,0,0,3072281175,1341172311,0,982395482,0,2686134876,3594902108,2300287581,3962137183,3233442400,3285666401,3233856093,1842268771,3953273443,1994906213,3656940131,2058558054,3871582813,3485071977,1693735530,3891808871,1314609772,0,3461196398,756267630,0,2749254257,3993066098,0,0,0,0,635685495,3050445432,0,3380300410,2156149371,2155997819,3796589181,2855795325,1610590847, - 1092557439,0,0,4039363203,0,0,2527328902,2785774214,928676488,2949995145,3341843082,0,0,0,545413774,0,0,2656877201,3053623954,1353722513,1377110675,2798750357,2689596054,3180849815,1673067159,3152075417,0,1060944539,0,2440989341,1884707485,583301790,0,0,0,0,0,0,1418484390,0,604646056,336149161,0,665070251,0,179325613,2830588590,2245573294,1144625838,4171000496,0,2427353779,0,2301262517,3229485750,2164079287,3046607544,1738037943,959875770,3550415546,704879292,783665849,633502389,2559654591,3337902784,1113082561,1006176960,874617539,3866057412,3613792958,1832114886,2216381126,1170201287,3215358665,2163477178,3457743563,2632035020,0,3704048334,3123235535,1827564240,3537541841,3284380369,3020487379,1267833554,4258061007,2430675664,258452183,1333390040,1632434905,4147030745,0,2140846812,2477247197,3749751518,4286003935,1010404064,2328107745,3066620637,3701435107,2024139490,4080982757,2164726502,2795850465,3147799269,4023192297,3432667882,4041554666,3599588075,3594869481,0,0,0,4031605489,1775278834,234609394,4159118068,2462624500,1121815285,3669994230,0,0,0,1947659003,422161148,1353902844,1549785854,1947720443, - 2683755262,233802492,686988028,1418496766,0,2435132165,1970449158,2530081543,0,0,2744929034,2402626315,3662654219,2963155725,0,1035750159,2653174544,3369659153,4198419217,0,0,1250417429,0,4068719383,4043574040,0,1120979738,212405018,0,0,0,0,0,0,0,0,0,3301976869,3550759718,2194586407,0,359394089,3822353194,870497067,1823124268,4075981613,294959918,3380300590,2493455152,771762989,0,1845238579,64912180,3812870965,2207456053,1416121143,3060751159,3643566905,3329088314,649358132,1480612668,481176381,1541552957,911072063,3899783997,35711804,2252151612,0,0,297020229,1661168453,0,0,0,0,0,3238583116,4066650957,0,340269903,3066186575,0,2874907474,0,3454344020,1132694357,171158358,0,1916058456,861657945,3369102169,0,1903049564,2837838685,3023145822,3667938143,3831790431,2485046113,3435555681,622787425,2902379364,1580424037,3228146526,470403936,3395152735,2796116841,3016768360,3411471211,350165868,1607027565,1518902126,1186564974,2045258608,3854281585,216570736,323513203,1854503774,286067573,3070741365,2009222005,1015585655,2796108665,967994234,3916557179,3368016761,50740091,1998633854,937995134, - 3119217536,3146967937,3679034241,490978174,927009668,370195333,263109505,1035729791,3799526269,346057609,1074846602,2510941067,1879882636,1246276493,2795346829,922459021,2395773840,3452926863,3868539794,3518094221,3928206221,3798821772,3558165398,594594711,620010392,3920583577,2587392922,1446562715,4126682012,1052117902,3439311774,1055849375,2289281952,2583301016,757668764,1126075238,1699789732,552344480,2605366146,1155967911,4137421677,3703757675,3293137834,1815432107,279940011,480279469,3454344108,77917103,189529008,178121645,3105074094,3831577523,4236200877,2058558389,3653974899,1907571639,0,1663323065,2795711417,2809547705,1016048569,2317155257,1390922686,3685010367,2282646464,682335168,0,0,0,995716037,2406144966,0,0,911670217,3868187593,3333000139,2267777993,28806090,1427545034,1844624335,2136619984,140172240,3760139218,0,87530452,2783947733,762448854,1162898390,176815063,745933785,2023779290,2284071899,2954656729,3027250141,983104474,0,2287971296,2525555681,996846562,1286089699,640756706,74017761,1091152870,3680439271,2527902696,2962729959,2028153833,2614221803,2265672683,935308269,1096301550,2236660719,2492607472,4038925297,4024753138,753191921,3540118516,571665397,2226134005,528096246,1025399800,2666134520,1734806522,1856416763,4236450809,1231424486,4241791993,2595019775, - 770354173,4097227767,2493496304,1257470957,4137421805,998423557,849579014,3379362823,4267908102,1750903815,3168328709,67070986,1013693446,831417355,929541125,0,61635600,0,4042816530,219057171,2467941395,4012125203,2694159381,1186475026,4146474008,895949849,134655002,1536879640,0,0,1848241182,0,662023200,3849411616,3303361570,1573411872,2128137252,3682155555,2933070882,3351170087,2795043880,2811272233,2190949417,3592027178,843004969,3592768557,1545776174,3782753327,2100935727,4289092654,3525065770,2133187635,0,0,0,3497151543,2263551032,1695054904,1092602935,586181691,2352512060,1094151229,2043837501,967707711,360438841,3502599228,477277250,2454137922,950668354,906939461,1427450936,0,0,0,2986146890,2265459787,3481341004,1820277837,1742548046,1306946636,96050256,2619350094,0,1560284243,3490544723,2638015573,242928725,4018523222,1435843670,587140183,359459925,4184300632,222170197,3712461908,3749747806,3932941407,3500305503,2543139937,4129946708,971979875,1446513764,4279508067,987286630,0,3703377000,2157173864,3303152746,3147213931,996850794,119540845,1413213294,1442131054,4099464304,0,2760543346,2544102514,1579199604,1431092339,2502020210,3438869623,166952053,3181902969,3717614714,3079609466,2872605819,2067790973,2701896830,1938066559, - 3070053497,2531441793,417057915,950320259,108784772,852442245,0,1624550535,2046667911,2808343687,1042918538,2082880651,2418461833,2058521741,3606797447,2002226316,254323856,909765776,886312082,809356426,3954089108,0,3131104406,47291543,0,0,3303181466,4016725147,2611182748,3266399389,2054106267,2642394271,3725876382,221289629,2980797602,1089809565,4119198878,2853366942,1768713371,22031527,3972721832,4055448745,2244136105,1430035627,2638183596,3266329773,2918100142,481660071,1093635248,3113364657,2416835738,3560578227,2094009524,1367461019,1655159990,688110775,4248546488,1949002937,3398270138,1823403195,1189276859,1440959677,854916267,252415130,2253171880,3369483457,679091394,4142103726,157670596,1750797509,1803148486,3452247233,353578138,1948785865,0,0,0,1287212237,4032646350,899919055,3477335248,1110072529,243702993,2684615891,2853768399,2251152593,1642056912,4084829399,3891920088,228019413,4042857690,2760740058,535932124,4141636829,4181298398,0,0,3393244385,2260053218,2164317411,1298685156,2699869413,0,0,35663080,3990670569,1997540586,510082282,4138061032,2595601645,3214367982,347110637,958115054,3369409777,368110833,487947507,728034543,3435777269,4186954992,2157534452,1149037801,302017785,0,0,0,0,0,1156013311, - 0,4069403905,3489287426,3226471682,3485736195,2581900549,1032441094,2538908935,378379528,1314831625,1914723594,1347562762,2375777548,1183059213,3966840077,4151938319,100875536,1859599631,2228378895,2374921482,1772649738,2051894549,1153424655,3307437335,1713159448,2700336409,4288875799,4279991579,224431388,4026764572,1711271195,1394973979,4099108128,2623237408,2127539490,1333153059,1262099746,3286334757,2303364382,3890564369,2799660328,3329498408,3897404714,704150827,4144012587,761302317,1032441134,2840112419,87334192,4149652761,1516363026,3423890701,3922431281,1772956975,4262247734,1409551671,254324024,3613830457,4033047865,622357818,1811270972,3578838332,1076378940,3577363775,381066560,2768874817,2922863937,2434268432,1120673092,2430913844,103566652,1601207569,361602361,249859345,2471300409,2075766089,1208225100,3213512012,824298808,4002409763,2103565648,787590430,487738706,3601960263,1070873939,484765006,3393015061,1943375191,2759060824,4143996249,4043447641,431697243,1053949276,3355110749,4081392984,2033569118,1231760734,2282818896,2207894834,68005199,395750756,3629260133,1884945764,193523047,2669780328,3615055209,2462915944,1819995499,98217324,2438577517,3860999529,4210355567,2430217578,3267554664,3303349618,2638564718,1430056307,3443326321,3565362540,395079023,1513270648,3861122425,2795732345,164052347,1502924156,3302182269,498249085,2784910717, - 2061061477,1455840617,2333146498,3962178947,2980101507,579194245,1378430342,245128583,2139618696,1374719335,264904074,1871728010,362298764,1796775306,3227680142,2508340622,367910288,874212753,1210318224,4014001555,856812858,4052708747,489291026,2225114519,4196842904,3315039640,3837906329,2663071128,1657519516,1262280092,755658142,775302558,4151541150,1485835677,3244821920,513351075,1812716964,2207858085,126332324,3242089753,1538489768,4113395113,2189475242,3560922539,2439892394,2600025517,4242623916,3985280431,2642587055,3700968872,1245732274,576843186,1581170100,1333730740,1937182121,1622519222,800964024,2796887481,2340699578,1138331067,3091598761,113651115,520805822,368041407,2503617975,2703695297,566037954,954932675,1710812597,477597125,4258364859,1446870471,997613000,976485831,4210933119,2430729675,223505868,1509825995,3816947150,2546290125,1246145996,178625998,3512622546,3164102099,2926820819,243105237,2957544915,3742158291,2794802648,3991440851,3892850138,2402278875,2880454108,1036516826,1700081116,503057879,4293975520,2877439452,2240318946,593599970,4136005092,329883108,2162023910,3070914015,1028980200,2199854569,1203359209,614514155,796749292,958156269,3895205358,1576177135,1641414128,1366031857,1444519409,3518594540,29208052,2502835697,2185645558,465464822,1480445430,2225241582,1490492922,2219007473,4085677558,3027381757,3370196476,3114708479, - 458952192,2429214208,3503455744,2358660611,2000903683,337153433,1299279366,3464384007,1354300762,0,0,2494168587,2097413644,4188970508,0,2493791759,3218927120,3861900817,360431121,2747366931,3146821140,0,0,0,1525964312,2283462168,1470934554,3584359960,2710507036,517291549,1180778014,615476761,0,3863096865,903888418,1792769571,3489934883,1581063717,3165728292,2727104039,142966311,2584387113,1737444900,800480811,618253868,130068013,1278492206,2478534191,1161133616,1760869937,100204075,1915727411,2774138419,1693859375,1855168054,63233569,0,0,0,1138343483,671190588,1094184509,3714666046,0,3474361920,0,798961218,3396337218,227348034,3523366469,0,384339527,2066759240,3022790217,1587088970,3343437387,0,0,0,3954892367,0,1630498385,2326502994,0,735063636,4193820244,0,2032447063,0,0,0,2422357595,2515676764,3390770781,2541080158,781876831,1561976412,3342323297,3099405922,2088156769,2763710049,3287641701,1874320998,2138426981,3269221992,629026409,3388460649,535498347,1575218786,2705210989,2005806702,2001006191,526650990,2470825585,3608145505,1647844979,871849582,1085099637,1973182069,583695991,1500532332,1418329721,1245920890,1756507771,2796383865,35950205,3204984445,514326143, - 3862367865,2678468225,1851829887,2928029303,3672727172,2132352611,3927858808,3032387173,801349254,3181874809,4118396534,2615254667,2646150796,2522648205,179043981,2416471679,1033432720,67432057,1561677458,747028115,2121686675,2477440660,2535648918,1043656343,3983646360,172805785,624418457,3917967001,3736501916,3263266461,3078082206,4123877000,3796676256,2597084833,708824737,178515581,472026788,2173165221,3978686116,781754023,3084082856,3003592361,1974005418,2239983275,2906574456,3729530541,1592954499,643518127,1311989423,4263738971,4144471730,153370290,800485036,1391357621,318082741,1346068116,2794380984,1950899896,866999994,1756516027,927268540,3916746429,977518267,1401671359,2287951552,2210635457,413691584,2775121603,2998566595,768081604,3686719170,248094407,1803411144,2549096125,401465034,3740606155,2895040204,1243606732,296337101,3522793165,1797365449,881422033,13754066,4186185426,3846848209,726781649,3252567765,3262095063,1869971160,2413932247,356564697,579571411,2487008953,1262427861,2893180638,903970527,2026811104,903904991,947769058,1169157858,2397019876,287514340,3163631332,489987815,670801634,2285620963,2607451882,4199067371,1844666092,1337954027,3243441900,1604931300,1450503920,3285880559,788414194,2134888171,3387670260,299810549,44072674,857771767,1253682935,3235512057,1417936601,3114614487,1297690364,3436240637,140476157,2600025853, - 387014400,831999744,846245633,3765255939,3483102976,3084783365,2254155524,3956145927,4207087368,3564560136,3345407754,2352754443,3212459788,352091917,74534668,2761010955,2627698448,3342540474,365641433,4239662867,889335486,2002259644,2374795024,3846217441,830983864,3990728420,4080942874,3598687964,684617500,3348180765,3235290909,4255125279,3277102880,3554254625,970071842,119484195,1090416420,2044219173,2377322276,3819945766,310943524,3542445865,1371930410,1267203883,3413409579,1371926314,1924067114,2086760239,3891326768,226664241,3346984747,1391947565,1302015776,347135797,2426941237,2571501365,1088139064,3561029432,2327875386,2248445754,3109719867,3286978358,526933821,1345998484,1341013824,3370520385,647679808,3725434691,3083616064,1012309827,1720536900,3596234567,76750664,2537619273,1096642378,3660209994,1120685896,184078154,1346096788,3678605033,3346091856,1887256401,2730020607,0,0,0,0,2160455511,203886424,924245849,1590673242,769642327,2251304796,4161380189,2313650014,0,807513952,3702984544,521494369,2643705699,2760224612,0,0,0,475643752,4103094121,3640074090,1766457194,437133164,1737871209,308535150,3515936622,746340208,1994538865,3261771634,2749325170,1933975412,2205335412,4011913077,3992903543,2459848568,4292804473,501432186,1756524411,2796539769,2231197564,799457146,3680079723, - 2288476032,3226333057,0,0,0,0,0,1065508743,2910199688,973225865,0,1377677195,0,0,3813318542,1712234383,3137326990,2795585425,3791122322,1724919698,2726952852,452595602,1725337493,3071221655,4195180440,3619999641,725118874,2630418318,1483554703,3651198867,1572462494,3412283288,269512608,1685516193,2795511713,596590499,0,0,0,1131138983,0,3686895529,1136332713,266084267,0,1320177581,481345453,755814317,939728814,1390788526,2278039474,1837682611,1284157363,3285688238,904732598,3654000560,2652164024,3113750445,3534888885,116617147,3509125050,3247730608,3934998462,101048254,4281712576,2153541569,2888384450,2760552386,2448580546,797216704,3750555590,1168416711,3289718728,1039097801,4178206640,0,0,0,3707178958,2672619471,2743082960,396500945,4050096081,13766610,2154958804,930578389,1165246417,2020716498,1903112142,3488382937,4096851924,4276424667,3893243856,0,0,3501494239,0,4027449313,742399969,1838518243,0,0,2540089318,0,0,1617047529,183304169,1590591466,633163756,865615849,814944236,2511208426,3273768940,0,0,1800368115,0,1868140533,4155576309,0,3436601336,2133737464,0,3948027899,1972035580,0,2534871038,3072073727 + 2395773840,1987639920,716691442,4039363203,2154958804,326022078,2165982806,528096246,2217723503,191232489,2954656729,1420294011,50740091,1036425611,831417355,2933070882,838281936,2736907297,2222408736,2821673379,665777540,1119393941,703246420,838095383,3566984824,216570736,1720536900,3665602987,3623258082,4137421677,756267630,1924268911,654961312,2597084833,1845154753,3022259315,570254595,798960194,3229137398,699994359,1028980200,3846316041,716339562,942115320,3794354833,1656784285,1417936601,4029895313,1070990128,104927329,710013488,1792769571,625035410,3284380369,2466017974,1750903815,2340700535,551492617,2023925898,3152075417,1120979738,2829309661,3851437981,188082218,2282646464,2328107745,4040855746,3560578227,1577699826,1857912931,2596436140,3992515511,3700968872,1156625433,395079023,1741558875,1052117902,379933757,1186475026,3342540474,1915861026,3147178241,383677682,1108844881,315379764,3812870965,506781846,2406144966,4086507848,2665115688,74017761,140882560,3367162172,1512760013,1413213294,3979036575,2752370656,2394667297,2988322412,1661168453,3018536660,1262430421,1927788182,732973143,2749254257,3341357495,75658605,2054106267,3517457260,565577870,3131104406,3187835608,2652501712,2418169633,58270434,2209909314,4103197623,3454814414,3576206918,1907610039,4189383000,691633160,3151935558,1947720443,2097413644,452632845,684230125,4137421805, + 2091409808,1324406528,2286080928,929541125,3165728292,3283621492,1781944933,406163706,3084082856,2703051016,3892850138,1368990139,2115526940,2440989341,2107076622,50442233,48459104,1734096545,1262099746,0,4129946708,930578389,299810549,1446870471,2371143832,2374226310,555563111,1509825995,661096716,943705437,1088217358,2057642471,100204075,2200250641,2757552001,1559684161,4139898003,3252567765,671293924,1100199607,1713159448,1395761528,3640074090,370754251,1387722490,1334281533,1653735853,2092609775,480485456,2677598336,254323856,1286089699,1810887209,3877213048,358738102,4118452103,3262095063,2012422890,741491382,4178460815,2281739228,116617147,4264448009,3673124911,2493455152,93827152,1574422434,2159788355,3020470195,801703636,3634227145,4192872599,2644657799,2477440660,870196602,3216014762,4142679484,3278050204,982395482,1297690364,1123239802,3155043565,777552610,3164100211,2640443252,1476575973,1816708774,688105575,2139618696,2794804641,1173551658,2155997819,2874614171,2898638061,2468006647,4274649453,2163477178,3370520385,4220954146,1049035587,1699689028,2058558389,78563188,236880549,1276871989,1964468553,3634066074,4213610415,3060949467,1188866557,2960245277,3114708479,226433197,0,0,0,2954466164,1904040085,846389046,2164079287,3329498408,3289718728,3986995210,2432420408,4157621292,4126682012,3028526253,2228378895, + 899919055,3146962177,354862816,3765255939,415999380,237041700,3469011369,1131138983,681898254,3429392807,1997540586,4015398987,1080250507,3068318668,4151541150,2018125778,559146032,3029463295,679091394,2532208815,735063636,0,0,2962729959,0,1973567641,2607451882,0,0,3742237005,3008488046,1652341007,2623237408,2286242208,1328998610,846155891,0,1696657493,3474107894,2310478055,2605806776,3343889017,1096642378,3863335657,3639251657,2334353495,1588130459,2945066140,1187030704,353578138,4069403905,3420378627,4159118068,472026788,2589147828,2883581911,481660071,458301908,3660209994,1774359755,633163756,3592768557,2546561273,1748181999,4293975520,2887241040,1627079122,613036483,1428443604,1534816725,1015136886,303766646,1121815285,1789886644,1046724888,4199067371,4276578811,2676038171,27560334,1055849375,2537882013,1629517132,63938,2020716498,3438852327,70354650,261413298,2240848823,4137341464,3861122425,172805785,631281226,3980855788,1966495386,147972106,1344279624,254324024,3326178593,1138440353,3921521235,2582062836,1586468436,3583262517,3337656277,997613000,3656529711,3966371947,1820766600,535932124,2510941067,1717662508,589428207,3504055088,2796984209,3814736850,2802271488,298636292,2938180453,2429694214,77728055,1497585336,2536448937,2935666135,3275803175,585196695,1120598461,3027250141,736594383, + 3390770781,922459021,3023145822,347366627,2352093748,3691725989,669967024,3438301185,2016523187,3315947504,2116977274,678311355,150130316,755814317,2144740796,3389744715,3780477674,249859345,1708474426,2438924653,1547596144,3173585285,3605704885,3091392886,279590248,3860999529,1016048569,3914635531,233802492,2568550013,3558712971,21136809,1229142496,229761777,3849411616,3020487379,2427353779,3840282901,4267908102,383415142,74454816,2377355700,2750976026,1883179466,1480612668,3230074827,2033394184,765350098,48031152,1435134433,1695054904,2998566595,3765251875,2574104437,2245194918,675076274,987288678,103566652,911676762,2821466043,3199775804,390144045,2122680121,35663080,1622398286,682335168,2502020210,824298808,3028013412,3059372446,4262247734,4086694734,2583301016,719761657,283940538,22972779,4023192297,3229540621,4063803021,655635903,3699438624,1994538865,2240318946,3574261107,2916984788,1093534617,2407849822,4191533031,1954568382,2537619273,3464521398,3373119628,2638183596,3436240637,334010718,3501494239,854996480,1357784156,2454137922,1333683996,1530729524,3567269365,918426884,384339527,22031527,183304169,3256795367,3369384329,3737331530,704879292,2009222005,1153424655,2801809456,3369409777,3113364657,3058278579,3932193453,1529351539,544310502,4186597703,2794380984,2795720825,4195132825,3664933547,606710564,3113750445,231983630,1857947310, + 2559654591,4027449313,243702993,2492607472,2098524915,379700997,257402430,1800368115,537407800,3249129481,64058442,4232962123,3916556364,36171961,4043574040,4136311323,3878337008,645366680,592303083,2684615891,3931091092,1701410773,2512624521,1426531553,961263656,2546290125,2895725270,4119181739,340591198,788288484,2225241582,530716957,4267407728,321295025,3544814385,2705514866,2632328228,1973182069,1476114148,4150417828,475643752,2484920391,866999994,3301976869,3397915356,2092050465,3680439271,3027381757,1033432720,726677201,938494882,1609364642,2980101507,3830865988,263109505,2194586407,531192007,1617047529,671268884,4002289187,3943789932,1246276493,3464881933,101048254,2937845696,1500532332,2823874498,950320259,1333730740,4069590736,2527328902,1693859375,3114772423,1878528345,2511208426,1378407627,1823124268,4141636829,526650990,1094382749,903904991,3863458905,3360505862,1203359209,2581528836,243105237,3096570118,1157202598,3317028920,2795538601,1682067957,1856416763,1991104603,2456821958,3834771086,643518127,441316768,3369596449,1418496766,1116630051,2274900532,1306946636,2489622614,1810701087,3564560136,1290453096,3303350602,2467994379,2748614539,2043837501,2421956462,2683755262,3486289744,3193284292,3489287426,4154615419,1470691268,4245050469,3967699349,583695991,550831751,1247193,401465034,2402626315,1975488716,2795856633,2791205357,1427545034, + 2091410320,2848805760,961246482,2605366146,159920717,2468689566,2251304796,3435108727,1489351528,4062348889,2292704329,659108651,2451674649,136452328,939728814,3123235535,4155077691,2543139937,3488829537,2423461699,2705654898,1851176181,1561677458,628338977,3265432410,3860902265,1425480186,1663378106,1231258508,563276189,711718590,3550415546,1792079065,2531441793,3799914104,2491556088,1848784836,3831790431,84215552,2225114519,3438869623,306709537,360438841,4084829399,1022735324,1460557700,1390788526,833304847,1673079248,398293569,1571493089,869607731,1648181971,2044219173,495177574,489987815,2128137252,462084377,17473734,2156074619,796022539,4147237972,2918100142,2318271582,228019413,2845210305,3473968370,3962178947,4178948939,3303282938,3229485750,1917112455,2831964493,3334031433,1444373674,4220929194,1467150956,2646150796,140476157,3943281277,4119198878,2525993439,1365344322,3221132963,2690136564,4026605764,2571501365,2130872085,2669780328,2094009524,4042857690,556343850,1688245772,3302744493,2313650014,2566875526,2498289296,3045156017,2028153833,2804832819,3652523300,1049867139,1299543756,1938066559,3181874809,1663323065,2809547705,4202989787,2243164267,546600349,1311309785,3443402265,331649311,1353722513,916701474,106509555,2544102514,2957544915,3081925318,1243359556,3881203480,3325178360,2587392922,595652923,1558264361,2906465638,1278492206,4156523646, + 1348744768,2384487728,2127539490,2306692211,859054450,4245046373,708640454,1868140533,3436601336,1123219177,3113152906,4178987179,2127721820,583301790,423555582,1767813662,700826144,2250469823,3469211186,3390588751,3640926948,3954089108,1228943589,2701643989,2880504102,876926073,365641433,4218126625,2002226316,2353018415,2374795024,1554342353,1996137680,3369346481,2042913360,797481203,704230884,390029922,381066560,3244821920,1441944246,1302528744,2847092837,1398297691,326463851,1580914493,2392709134,665070251,3530822653,1215600337,1662169858,1216427137,2794631457,3287641701,2010638385,433345759,3070914015,3916170825,2796925305,1337954027,2280272828,528495629,3346984747,2642394271,1936468191,726910673,1899512347,854916267,935289709,425429717,3895628038,4173496439,2287981152,3731997961,751388201,4085677558,1243372364,2522648205,2595601645,1612239646,2627698448,68044369,3867957809,428206916,2634889492,3247730608,1833834774,1987233735,604646056,4196829176,3093301338,374511579,4244834459,3908911979,2284071899,3518594540,1903112142,2795729665,1525565586,2678468225,3518094221,310928549,4135997909,1943375191,152577271,450449980,1738621354,1026945835,2402278875,2438577517,2317801118,3435108959,2202019440,244500481,4234505835,2934097843,3296376164,963278005,4248680165,2808343687,1031092554,2687461289,1418484390,800911418,2571552412,3534888885,1002981315,3066186575, + 3403398004,4198419217,4024876018,631370819,231203572,1117024661,3584356982,2134951141,2368057864,861657945,2327875386,349262427,4218118268,4073326509,3266399389,3732744267,2287951552,2251152593,2874907474,799457146,3491653636,2377322276,1458514277,2244182039,2066759240,2802153320,2809513962,1278085318,301617564,3123201885,544684046,3685010367,368041407,1722212605,1947047084,2164317411,637251725,1725337493,370195333,4074509495,2762827327,3022790217,3194442378,3560922539,1819995499,1287341261,2858443582,1634677823,2033000379,221227177,245696226,869311187,3504433028,3337902784,3592027178,1341172311,1363534072,3909649820,3897404714,3303359514,927238076,4114687757,2657526958,2259853118,4242858718,4236519921,2783047921,3861055201,2240344874,305717678,3887228718,1755081127,193523047,4203202009,140039690,2935552243,4129951772,3272996893,1186564974,835713455,1772956975,1401443936,903888418,1991668899,4024753138,107718180,208808225,3787321623,2262091864,3001759864,3303181466,1632434905,1862353148,1112212349,556187227,3064456751,994895792,846245633,950668354,1065508743,2243503716,3415528756,2545743638,119484195,2205699880,1039097801,641780122,1138343483,3983646360,484098763,3436300505,2455401944,3477335248,2096740369,3686719170,143749731,3672727172,3966839013,153370290,189529008,2330211736,303347577,3619315888,572188986,1778473258,3261167341,635975582,170147982, + 1859270704,3288392382,671307492,1290657007,680559188,3536941189,968938528,3629954044,4106742072,1525964312,1775691834,4080547355,1502924156,1820428076,1249134718,2079369119,956074399,1145861041,4144562879,452595602,3925058080,3084783365,673202801,3938799927,2799660328,3388460649,3892846810,1144288010,3224423528,2000903683,3726363198,4072364175,1597853520,1442131054,798961218,2207858085,2948348605,659270181,1160137142,1406515063,3863785863,2860411061,3845753085,4198113980,3201722471,958156269,3080492483,1576517778,1268748918,874212753,2144728754,1625981715,598536435,998423557,132802117,3171398117,2091152120,566961159,2359862122,134655002,710107804,1364505162,1973051159,1057346843,1377110675,2190826049,2255884598,3725434691,1439553172,2726952852,1032441094,1374719335,3452247233,3574991017,3864994298,1657205097,4142103726,3729530541,755658142,728034543,2438026542,919254305,1268748910,3275719107,3969433987,1894369509,1650671158,3276189751,107480872,2584387113,1766457194,3345407754,1326022956,983104474,354308238,976485831,2292424801,366379521,3443326321,2619350094,3963167284,3250283365,916320244,3070053497,1725469128,3846351049,1245920890,1180285690,3411471211,135443693,1960776412,937995134,1032441134,2796539769,1161133616,964953059,1660745540,1165246417,2581677773,3991045303,419320182,4182481303,508919866,3866431707,4205928508,1030414428,2420668030,3594902108, + 3515974510,3441227547,4196668353,1799050093,75524024,3890705688,3794071872,3060751159,3267574120,2796887481,1374681241,2796349001,1680648119,3348180765,3172271642,766775483,2619286608,3474155402,2044821730,2132263251,1933975412,3528796293,358323574,2538908935,1956485573,1695742533,1948955335,2205335412,688110775,718897413,4237876923,2836264381,2186306297,1302015776,2193302306,3598687964,2338801569,2699108869,1994810950,4178206640,3772846472,2159420472,2035438633,1669463035,1058538395,898202797,4181298398,4255125279,768365520,2287604160,638727521,323513203,1869396004,4150448164,2853054803,3956145927,359459925,629026409,1871728010,3101667202,3296690241,3553121210,3793842974,1587491135,1290233214,2210635457,21680337,1786898339,1146577762,1737871209,3760139218,1793597543,818418744,1291110904,1635521865,306358187,3861636345,3378509549,3439900510,859300830,2840474752,3339086031,3949565474,1703781634,1447159876,76096505,1157440670,2267014747,350165868,2133187635,4147030745,671451876,3075294444,99107005,233981404,3876968199,269512608,603997728,367910288,1601207569,4194298286,236881573,2396991974,1807966935,3483288456,673300534,2024198458,2882815419,1394973979,1701424221,3786393341,3874784615,2569644713,1031067505,3600253090,2917027987,2760300572,2410445499,2162023910,567533718,4099479192,2092869513,1591112154,1626834155,2430729675,1626011595,3756798158,2881912316, + 1827564240,2795513841,2980797602,1559091682,3273463603,1645032243,1284157363,3226471682,3694563448,3351170087,272188090,2267777993,3695318160,1067230493,3704048334,4070990654,1683773133,527609918,3535152178,869320019,672096418,2279035218,1296635702,2451289448,1222257617,1948785865,501432186,704150827,2494168587,422161148,2700813470,2833470347,447334032,1364361229,1138331067,2727839235,924906436,1037321556,2245657958,4288875799,4015879160,3831210200,4043447641,2666134520,4124940444,2737324105,3612337166,1742548046,2045258608,798414526,3228146526,21332771,2598048608,3215358665,1673067159,3118627304,3809654056,738104733,1974005418,3916557179,1465375020,460384778,3227680142,4055061022,2303364382,1016549825,3825956865,3962137183,2364127828,1039475498,1175749110,3320124871,3263266461,873297186,2439892394,996850794,3467625996,3273768940,2678154952,2236660719,3056223020,3285666401,4120348561,2749878803,768081604,996846562,4065796723,4280586647,3310020967,1085114889,2096265850,388351449,2432319772,2246595053,545413774,701174409,831838496,1366031857,470403936,617264807,1716675620,2769242901,4025211462,1151559942,174782662,3734830822,882832986,1947251067,628700106,2321575190,1907174590,1573991151,3993619230,2438026742,3053623954,2990956755,1012309827,3051181636,904732598,4071609799,2545680438,1170186281,1030062760,3614622601,3550759718,2705723478,4151071646,3879474206, + 1851829887,339150529,742399969,2283016681,2846877332,1665749012,3625057254,3303962055,2790930534,471082366,3697752058,3594821734,770354173,3235290909,354308542,340269903,3674644064,3515936622,3270563584,15206067,1290106227,2018924068,2774589583,514326143,3168328709,3020077113,2077397913,3314676554,4289278716,3329088314,257386398,1242669108,3233442400,2168829281,4050096081,360431121,3529364721,2198343793,1655187206,495954247,4097227767,3860907289,2873373130,1111097691,2435745771,1910507293,2245573294,89876734,1906470816,2543543529,569603058,2112725619,3264182413,2231411700,876426422,2530081543,2752155782,245128583,2048052905,2615254667,3902781529,3080509635,1890558106,4083057871,170296832,363500650,2541342994,1267833554,4258364859,535339637,2750370757,1257470957,4195180440,3606999161,1490492922,3502707880,3680079723,4031821454,1741259246,1958843327,2253858288,1390115168,3575665570,1842268771,236750372,1685346372,1576145172,3325217255,1283589415,2798740697,2190949417,4031605489,2132352611,179043981,3052589491,1042918538,831999744,3865117665,4235494375,3670857810,1869710068,1262465749,927009668,3881840231,4189214788,4113395113,2411726234,282898549,2930922716,535199757,2541080158,3287693277,3749751518,2079793593,472914156,2315825923,2590213283,1726720324,1283661514,4184300632,1538489768,3615055209,2796671609,1929154891,478918012,1641059612,3834030011,1667504494, + 96050256,2128074494,2645825138,1354528877,2851104740,3688411460,2639566902,1043656343,2271335624,388907061,1242440266,4203656267,1467058508,2134888171,3413205753,1970825631,1030787952,1451196673,1634640272,513351075,2192017955,1155469382,4179433127,2489517534,1333379800,3143181401,904639481,592143003,2866148284,346057609,29541595,4095782207,3978686116,1088964972,3162197810,2402673891,1465689012,2760224612,579571411,846046935,4250703335,2824562377,1092602935,1933424568,2090037500,309911640,1337369654,2830604341,1393337664,396500945,484765006,2033569118,2872605819,126332324,1435843670,1091152870,2263551032,2795874553,264904074,1831287274,2644608316,2686134876,1924914958,775302558,3899783997,1246145996,2535712402,3905541923,2332391684,1539371762,987285606,2331789602,3632854722,3861297529,3303313530,3491946891,2786482972,2108400973,1768713371,1180778014,2877439452,2714534317,4076884561,3516975532,1421571860,1391357621,2402822342,3080929783,2652164024,3074671543,2244136105,3950502907,1120756588,1094184509,3612490110,2877630262,59849232,970278993,2880454108,1220129475,1657443064,1581063717,3816947150,355033799,3834017400,1140697321,2778410042,431697243,1137415564,2275694440,966145004,4210355567,2468080208,2100790201,3052097808,577082611,518010932,870130213,632647812,397399894,2127447096,2492659496,2024139490,1367461019,538350220,3423890701,155558782,3565362540, + 3117016463,4097974378,4186954992,3411620147,2198246619,3369516937,3871582813,2160455511,1611252551,3868187593,3822353194,3947598555,3467600876,752232793,4150974398,2571697356,1346094740,760525648,3627283522,3113493043,1346098836,602883045,3205793605,1624528007,2216381126,4103418566,2283462168,586181691,1455292645,1183059213,1977096726,2993059497,100875536,4124309056,70682496,2720258499,2333146498,86849621,909765776,575373943,2692639144,2795747465,973225865,2462915944,929036588,3486931068,1418646350,2987132588,807513952,1685516193,2819474514,4150834515,909808196,234609394,2535648918,797761954,2422101720,2795705081,1347562762,3686741082,896341961,3196694605,3589534845,3560596846,2951067146,2763710049,2061061477,3393015061,824168692,3145810364,849579014,4033946214,1447016215,877151737,3213590994,1218124048,927268540,2058521741,2510022382,448377503,3255461024,1239748065,2448580546,1210318224,1950774864,3042235668,2489767910,1768662626,3245594543,2265454953,1924067114,4080671035,1048138236,406757676,818186078,1657519516,3797553515,185251601,2292667281,3413515518,2477247197,579194245,875701686,923664567,629438245,2277946009,2779342968,1449547528,3162728007,2573944653,130068013,1299956068,1975146416,3146967937,2260053218,3222270339,3100264340,476997537,3584200982,3817142335,203886424,2157173864,602878906,2330246424,2346362667,1262427861,118543710,2001006191, + 961718590,2749277153,197674831,73188435,1289462115,3228172430,2558422007,4002379427,4075981613,3003592361,510082282,556166843,2298823803,468072353,2914174976,3187710070,3116037126,2601568289,1639465650,219057171,2145450292,3933996773,2207456053,384870855,1298684132,3180849815,1703616858,3413409579,3303190778,253498701,1208787661,3725876382,2472608704,3633669105,4094408702,1430056307,2416835738,1977177418,1814929590,1409551671,3561029432,1425867193,818555030,3740606155,863621990,761302317,2811643334,2086760239,2518337119,3871999520,1109151922,2493791759,2902379364,2733589170,3230890324,1335224487,3930638728,3642009208,1587088970,2082880651,2023779290,4241630010,1660334974,3147213931,4260667616,3241982172,947769058,2502835697,1922880015,2422424092,465464822,3900712769,4196842904,1670447384,2507580266,3524646027,41579308,1180015068,909863468,2689204911,458952192,849651230,4073064588,1782387631,395750756,3805685949,2185645558,2067374999,2878444598,3847831561,508801882,723816523,437133164,1903049564,3522793165,113218365,3264857008,985793409,350666850,382038611,1109821892,2053489013,2783947733,354317494,2157356296,2797388537,2018627737,423535494,2531481175,356564697,356823335,1182762623,3978131023,4173035344,531502850,975575023,2750341507,2120324149,2545714870,4021077975,3366625512,2749294233,3293137834,3259188155,3736501916,1446562715,1947247355,3225340239, + 4260934800,1437866481,583510720,602849363,3264373684,3867768081,3152000966,3599588075,1513270648,338256409,219739930,1723040409,3861285113,28719453,2382381614,2880492575,2254155524,378379528,2142503618,2907726099,3070741365,2128507364,4181239782,587140183,884012264,1822621064,3303152746,1353952666,2934866348,2705210989,2438591309,708667071,4144012587,480279469,3868539794,2811003231,2817240276,1485574997,4149944358,734225799,2795043880,1266778281,1763350119,336149161,98217324,2735878925,109037800,616536120,380753956,863995241,4042816530,713945891,3163631332,2278039474,2292591159,801349254,2527902696,3235512057,2753139978,2278043738,713280218,2079929721,1230013262,786564383,1311989423,3385485103,1823439424,4148388307,2020671434,787590430,1666118470,142966311,2776553272,1261970151,1548195594,2810282404,3752622476,3214329036,663129518,3285688238,832004480,1113082561,1892860962,175092732,3459744375,2730108325,659093046,1830516005,3133205035,767425049,3155329449,2075766089,1314609772,1243606732,4080014093,2488839615,3073955375,2053548447,2750986010,2538104141,64912180,3072081301,1581170100,3452994421,2799657064,874209465,3690748182,3131746580,686988028,3872232901,4243813785,619614431,2742141471,1031068273,3910804193,4014001555,2260083154,3877303955,757668764,1637956439,124747079,3395016680,3432667882,2954412843,1734806522,2963155725,3714666046,1884707485, + 3749747806,3916460359,914862610,363488770,928676488,2638015573,1120506853,2476857415,2503158136,2542992937,2248037335,729421977,249975495,123377580,3252713822,3384615983,903762304,918118944,911072063,4239662867,2026811104,3393244385,1162898390,909715264,3796498058,2198442071,4289092654,1429496701,2253171880,3447965837,3966840077,2572698399,1125187840,1764270320,3159561042,3157034003,1375831204,2858033444,155584640,1041748886,48499208,3088757287,1371930410,140172240,434945532,3295079933,297175013,3147799269,1237297487,3369483457,190759698,3164102099,1939322978,1692075860,1378430342,2876401142,1410781542,2796383865,374661226,1590591466,3109719867,641942338,4030800502,4148786979,799411712,486732908,44072674,4119798115,1664693902,481309957,846416358,1577994439,146528039,3619999641,3678935642,1615921242,2895040204,1701789724,1170165801,1751397721,948150922,4178891003,1337577970,1915727411,3742158291,2713080611,1495225414,3979245,649358132,1949002937,2096508298,2687984058,624418457,3613830457,3819139742,1626118463,71344379,3286413425,13752466,3843498545,2272866867,672228698,521606945,2161426951,4123877000,1630498385,2157534452,3664646875,113651115,3051330876,3895205358,218052639,3410170427,397955603,2596013981,1690456243,1864546404,242928725,171480486,3635848807,3435114487,3144021529,3863753049,924245849,298854309,3641144338,912696094,3067570095, + 3328639616,2768874817,3796676256,1760869937,3119217536,1069046101,318082741,856812858,2422229384,2553520984,1943728425,361809866,3046607544,3542445865,1036516826,3538426192,2889697872,605766752,262441232,280266194,1744863956,1580424037,566037954,3611265319,498545635,1301563477,1344743638,1073633796,2032191801,211870755,1530413232,3932941407,2246222767,1110606609,4094896690,2422789090,3846848209,1391947565,532202774,1409458774,2796116841,709031732,1967731098,2430217578,212405018,2796875821,4172887261,3977749743,4287731902,3511998465,2517069746,1936495026,1865729426,3995871509,1630553590,1056949419,4230911669,812716953,967994234,1470934554,1371926314,2710507036,1700081116,4080942874,2743082960,20023520,970071842,560080800,3009630561,1373914885,1135927926,3596234567,3507521042,1345769751,3993090090,1177106802,3798821772,3574805613,1549785854,3020289935,2261130656,462963616,4171000496,2371820095,667861615,1606046421,3613758502,3379362823,1794709464,4033047865,3992903543,3778270497,1966153856,1094151229,906895870,872492511,779840032,2646275313,1604931300,3859169715,971979875,702710195,171158358,3652185639,1325129480,4201197800,1854845379,3815196683,1947659003,197255555,3901065166,1810986847,1480881647,3967098929,1444519409,2962528448,952603090,1909761893,156428614,2968977478,1350361736,503701576,3303233658,2137530459,3091776379,3662654219,2749379418,3452926863, + 3790070464,3790070465,2760543346,3790070466,2217250947,1259841989,2659173418,2401788457,1846925105,1690452147,2029020393,1710812597,65671436,1831254077,1276051518,2053120559,662023200,226664241,352091917,448598556,78221843,1879882636,701807126,2285620963,4224606887,619661369,1036495770,370366324,1811270972,2067790973,3227791374,2545083534,3483102976,4048023617,2025513937,2061189297,3422861058,2270560494,2483607782,3830621839,4193820244,3310085507,3585405706,2265459787,1430035627,3780840029,1655641789,2579469950,703715152,881422033,1936741074,1921226914,1741395796,855452033,1375716987,2397238999,1245031720,2900484600,3343437387,3821200603,4014777803,3204984445,1089809565,3457743563,3400800368,1110072529,497693569,1377396051,3764477892,3293159493,3250640773,104302132,2633512990,3446609337,1948901417,199808139,3844448540,3487601660,3719186222,520805822,942478062,1074846602,2370951025,1100367187,3725584388,1298137749,4102876548,1287228228,3991440851,3474097170,958115054,3788891835,2314461499,660479917,2600025517,2784910717,2416471679,3435555681,2309772082,1560284243,2574895042,4002409763,1832114886,2855646531,2794802648,4260685129,3369102169,3306617291,796749292,1068376410,2972416252,3643447130,2152641933,1187223608,453695134,2861345216,2836112980,278358415,1902503142,3600457776,1088139064,2665321545,2949995145,76750664,1286706735,935308269,3302182269,3607517368, + 2717087691,2785538273,1609586975,3814794035,601293793,1809901557,1970449158,2043029479,1025399800,3368016761,1843211002,2354075879,74499244,2837838685,796329565,1937182121,793887323,811890369,498249085,2088872369,4210288532,3629260133,361602361,150357076,1916058456,1642056912,2935329003,3395152735,2755523340,972794140,3813318542,3027718621,4007035660,4074617023,3341843082,1266833907,1629010463,347109949,1856906092,771762989,2326502994,599822553,22169193,614514155,3594869481,3066620637,3833348250,2853768399,3654000560,3415224856,2982265678,956283470,1812716964,1088698805,1175054886,3424633527,1955922968,3043694969,419058649,2775069771,185561851,3576217771,279940011,2272778170,3939009127,3837906329,1437676150,2507665531,63233569,1360495541,495789877,730685943,1201075673,2796108665,4052708747,164052347,3811194348,4161380189,618253868,146999071,3486558748,368110833,3310085707,3485736195,2550417361,236314677,3791087953,2643705699,3210721320,734175481,3286778442,2137573083,3837092281,119540845,2161342506,3146917807,843821888,3846975729,4219086610,903970527,1849002932,3575335890,4134375648,2632808730,808769816,3892080856,410875498,1328941498,1187741019,2654492700,1581691745,3990728420,3164174624,2542878945,3554254625,1377413187,2114282788,2659203348,436205269,594594711,565033427,1533156212,2933298154,725118874,1149037801,1043805587,1655951518,1540716300, + 1037631514,753191921,35711804,2645071443,3934781924,1384413444,2226134005,3819945766,2063021208,4143996249,1228224570,3658851211,165896811,1701404333,3958055293,1231760734,3346091856,3226333057,2204891618,1547310019,2883410340,2796553937,762333382,1738037943,1806658104,800964024,3847883145,4245595147,1973201068,3212459788,1485189790,3137326990,4140434672,1273724032,1418367390,1311320105,40846512,1169097784,2329789318,1219015319,1536879640,2047689388,3540118516,3846967313,3130106284,1682850124,954820926,1070873939,92218366,2131217409,3255300770,615476761,1328445492,716528693,2309755334,456078215,3072281175,2123538777,1620530616,1729439258,972887580,2829189261,2005806702,3456149583,3604227338,1288169716,1839272226,926540104,1461806228,329883108,987286630,1163280551,2474619272,166952053,2292913361,1367622489,3525065770,3118654077,3105064878,302017785,3277102880,4225243200,3791122322,364604034,3418023524,2435132165,4112623751,2430675664,3935562168,653738569,4062533209,1756524411,4026764572,377214252,2823295694,3373469612,3928892653,3257140977,4145747457,4125751617,2199854569,2829189301,3771631061,2277480503,3791677781,2418100105,3619203066,67070986,3167312348,3715684268,1655048510,3985280431,2933048112,1622519222,3744232175,4206036026,970555636,2798750357,2614700438,3084793477,222170197,2080290841,4144377962,1963550921,759632604,2855795325,1518902126,3447703567, + 746340208,1567691805,3954892367,3161283091,2788565892,782049490,1855168054,1554925175,1189496535,3848158857,1455840617,2402658059,1540895020,1320177581,996966622,3456484623,4106671664,4130793020,3512465346,3774552466,671953612,2143835749,4068719383,2505410217,3712461908,2218150233,4241791993,3397989584,2985666549,831509061,4009062638,2672101599,1092557439,319134801,1887256401,2388301443,1579169524,4132247363,360428166,1095025127,1840955608,2413932247,3592321530,2126952091,1242432972,2946726410,2600025853,800480811,1757987296,1826895776,2715493778,2512020419,3578838332,1471672821,708824737,2272892896,4200888741,3607835705,1827739546,1883190266,223505868,1756516027,2830588590,1156013311,1621845146,179795707,951335787,517219155,2467941395,347135797,2577248597,4050122836,3827323558,3091598761,886773322,3901290363,1139528204,3960332362,171332684,3493991725,4084365088,1361971329,2124870288,1013693446,2172803492,1245303492,1276056214,1165943414,64395656,2966947014,2962851178,13452052,3833942213,2300287581,226219499,393271255,1742214544,2273444144,2503837254,3849685347,1941392788,3523366469,972294149,4235016550,756249187,2223191667,914121351,1480445430,2225595738,2455573357,2510103998,3707178958,1745958480,2480568145,1254105762,3574526323,3155300563,3032387173,184078154,857771767,3877194488,2699869413,595752490,2080842171,3380300410,417006813,1561976412,2642587055, + 1161042016,3861900817,147033266,307602099,2462624500,671902892,582362571,907977623,3797643624,21817625,47291543,1437227143,3469535467,176815063,671190588,3479028813,286266432,1581047914,966137652,2258858487,1298685156,4096851924,2540089318,2192413559,1130416518,63407800,2083632122,2189475242,3003033724,178824845,1141805164,4258061007,647679808,2818839649,3370196476,851933331,3613792958,1909711377,4277174934,2194592935,3632817896,3597430856,3451638253,2913120299,92481375,3820942461,3452846862,77917103,3934998462,2744775343,2760552386,3854281585,2058315106,2011416469,3669994230,2851797188,3050445432,1813484783,3034727754,164480955,1849168635,440398957,71828478,2770228078,364172234,1895609356,2630418318,2557986403,3018196004,2648302645,1884945764,2497006726,2159519688,3891920088,4248546488,3653424328,877118969,115161293,1089746490,382879123,4177301776,606967376,1724919698,1647844979,1090416420,3490544723,2284913462,3148219853,3526546584,2724910984,3267554664,402641787,3686682908,106808493,1096301550,2834913550,87334192,292037151,3114456751,558923920,716312756,483693637,291206118,672081076,2459597240,4035872361,3484362842,4149652761,4081392984,4139480953,2032400264,3072073727,458495328,1724114129,1776117730,846832691,1120673092,3976665013,331749014,1794803414,2689596054,29208052,317027738,309985098,2450697498,160368221,3909236302,370850288, + 3799526269,3438833745,2795850465,2282818896,1671262474,1250417109,2791907254,2046667911,3972721832,1850292313,3051022154,277913755,74164796,1711271195,1037162076,1035750159,2286049840,61635600,2909779280,394098240,747430161,599979912,852442245,3464384007,1937975527,1558024887,3074660153,1756507771,2140846812,1982448834,1827421774,2813887413,492296656,2191205297,2922863937,2702502659,404990819,2959442421,1336353462,2268831223,2367682582,2175691145,2164726502,258452183,117315289,3355110749,3380300590,509769602,1573411872,2859484433,4137420141,995716037,3203721556,2790185877,2580678860,711864821,3914510920,800485036,2434873673,769642327,1353902844,624257471,1346096788,2100935727,3039671728,4041079169,3099239490,1608595411,1837682611,966218447,3303361570,1624550535,2787726694,2367814057,3808998530,3718601732,3243441900,1120685896,1345998484,2792199903,2653174544,527891505,487738706,3803249107,3608145505,3875490225,2678351670,3512622546,425173263,2092438793,3289055834,68432395,995423596,347110637,152787193,632746716,4082381037,3922431281,351990882,201135915,2487008953,33566885,3875333366,2941223207,4275245903,2771148329,3228033770,417057915,1922737052,4024992653,3891808871,120469935,2073429571,4038925297,3678605033,874617539,3792257684,4172006181,1165935222,1907663863,2327462023,2032447063,2322457083,266084267,1208627788,517291549,308535150,3798534268, + 1171358191,980587873,895418994,2765394669,1146986676,1085099637,2185197317,53354999,2767552840,1418329721,3957911642,3465791801,3309836107,2514827645,3502599228,4276424667,3906336288,1116988688,2090967568,1807654993,503057879,2035716133,929855460,3071221655,2322810776,1823376935,4146905279,3653974899,1972035580,2102780221,3928206221,1783991583,1916338944,3503455744,2708705906,962822307,2346592948,1257392069,2023945904,3065705431,178515581,3982088140,3306804554,2952030748,3543040396,2672555676,4210933119,4151938319,1658220480,946078399,388421042,2900696296,1579199604,310943524,2430913844,3244336647,4023572328,3462196328,3228669846,4197912649,3293016092,2856139213,490978174,2774540415,1596155376,2173838417,2340894418,2156136419,972892340,3365299618,2477354574,39460583,2779047544,2795549625,3745432576,1222433303,704377388,3945365547,1465508270,4188970508,1737444900,2792183073,887829474,3586593715,788414194,571665397,3232617318,2853620677,997942280,3113583553,2101974665,2614221803,3503044523,1765013386,1972938766,3286978358,3891326768,1080584128,2888384450,4144471730,3114677491,1994906213,2153541569,2410968935,2749325170,2223437975,3935761978,1461069019,1208225100,1610287341,2352512060,1488217743,3667938143,4085217745,224718938,3432613902,3863096865,1449358149,4155576309,802601271,1404973831,1985328073,1914723594,2544355114,726862153,51218157,3240813276,3977335189, + 2772382320,3679034241,3718657041,3083946003,2047660324,2212057845,1773675766,2379228320,3279554168,3489972649,422319925,185562571,1844666092,1069734013,3271697454,2505991615,3213143056,571847777,3221254169,1837856659,849126819,3414102099,2620102742,1921079367,359394089,4055448745,1796775306,977518267,2422357595,3500305503,1177277387,2637346818,2349209067,3846217441,3261771634,1822800435,3047041074,148208194,1859035474,830983864,2486542716,3547797708,2383459847,1969788523,2265672683,3277603720,1673056366,4005857637,3810503968,726781649,3974121328,2493496304,859544532,286067573,2010077014,752717735,3111175,2424719335,2551563177,2082877819,853307499,2246431579,1772649738,4177938135,3355501104,413691584,1060944539,231905815,2441925268,512627746,4059616710,2275140625,1938429511,268301980,1278219102,1250417429,3238583116,498856237,2663868077,1813921919,3708922080,2508340622,178625998,1267169683,885272883,591241603,2503591846,3606797447,1765026248,1117493449,1490863610,108454008,3213512012,3703757675,907541374,1114864560,2785774214,3948027899,1169157858,1845238579,1431092339,1954931621,3454344020,337153433,1354300762,745933785,247924586,1497757867,535498347,299033546,4276920990,2672619471,3852017872,2485046113,1245732274,2749829875,1736105236,3473801397,2290213878,1434060357,1333390040,3443324273,1329090682,2833171323,1590673242,1016026041,3143098362,4027067, + 4099108128,3953731247,689652050,1690453171,108784772,2976216213,42755248,1777390135,2644643975,3514441817,245516298,2340699578,905832700,4166613180,4276098459,1626153583,2491762304,3203230058,2095585186,2126833987,1508612307,3989080149,3085527667,3105743991,2157713909,3183662473,3585758634,1516363026,3288844156,587141597,4032137358,1287212237,3435107191,1845306481,1594726722,1015445202,103747684,642736482,286635841,445843590,1187317848,2700336409,959875770,2156149371,2795638889,3266329773,1872722333,1572462494,2274216416,3342323297,952587217,3922881049,450884970,160368661,1254462492,1922656823,4066650957,1314831625,3253686106,4167079627,4239418267,3449239149,1498186185,3256798271,3364778343,151172075,3600340034,2795511713,3987027978,2426941237,1549464757,591881957,150565800,167496095,1555536442,3786912762,3671987564,3873154362,2329205006,3782753327,1939010527,2088156769,3688883906,2516350131,458762932,1324185093,86397654,736101335,3454344108,3105074094,250714618,2640450699,1110493340,3398270138,3386720380,3146821140,2136619984,3995571664,2121686675,3651198867,3927858808,2581900549,1695893189,633751989,4011344458,2991208909,2248445754,1334895355,4138061032,1820277837,1422782078,1541552957,3863877209,1293156801,1867850593,2775121603,3953273443,933028165,1299279366,870852807,980295683,1699789732,1154457837,685335851,122861691,1390922686,3181902969,1143624681, + 126312971,718267937,3443320177,198588099,3969432099,2157323938,2490108822,940053862,1803411144,3643566905,1491546425,270926745,3809422988,3862367865,3229463062,1859599631,2291698032,906939461,2591033554,227348034,4179002595,2219007473,67432057,2663071128,943577320,2168475161,3303328122,3461140923,362298764,35950205,3917967001,1715308207,3225172208,2175254928,1056454610,611224928,178121645,2265371883,32744774,3880595655,635685495,1189115577,782020618,1189276859,1467153740,2656872300,4041020301,296337101,1495574464,622787425,4047952704,797216704,580310957,3435777269,4016105921,2044404311,387793912,3938861751,1071985716,2761010955,2731441196,511818157,3036420158,2708333198,3535429996,1621714480,1032702157,144201682,814944236,477597125,925799046,248094407,3638610408,3686895529,909691290,2804827131,2686306412,3254118733,4133452328,1650012247,787837936,969212396,2055733618,2840112419,3387670260,3320792740,1832518822,1416121143,708473622,1128208182,3066307943,3379902587,4016725147,324397460,4032646350,1763678191,864827872,950666666,1775278834,2795732345,1072723556,2255997311,2763983238,941266598,339212040,937357319,3478775162,1267203883,2051866764,2231197564,1874320998,2741846207,3484626368,1093635248,3665687090,13766610,3568400285,2393470853,762448854,3303565655,150320055,3396879562,2157904919,3285880559,227797580,2583304088,1418978841,3461670800, + 1341013824,1010404064,3446445186,2796241185,671746788,1157286149,3815363345,425178071,1939612786,2797008633,3234898873,2906574456,4242623916,1025706237,3671991997,1745221519,242226320,795173201,3491775042,3489934883,1695053840,3575875443,3951212701,2955368316,2910199688,783665849,449799770,3488382937,2377295292,4118196893,4145816252,2905001454,1545776174,1658373612,565695925,2701896830,2734612820,2623427257,1126075238,823928903,2371143064,1867732105,4041554666,3366610266,1994355468,3461200425,1016047545,1003509869,845637705,1058863067,968839385,702338415,3509125050,2165023957,84341478,456079239,1695053880,3376290200,1429383713,699488835,1177133644,3430663947,3861087401,2085574847,1120813727,3846612209,425640287,664212371,672556692,3821045009,1640887894,2380437132,3418961277,3086541337,3303561498,526933821,1592954499,3412283288,1227076622,1712234383,3384973573,3544804785,2024289906,1575218786,226411188,48929029,646408630,846668069,620010392,640756706,2289145752,4051251595,2831412075,1377677195,865472478,1401671359,2357973672,64125186,886312082,4146197922,2122501042,121123525,1803148486,3800663366,920749367,2471300409,2199660570,1950615691,3234182411,481345453,2468379052,3577363775,4281712576,2862334416,2287971296,279618979,3003356820,2448790256,2366411302,3800345383,2202683704,1446259225,3993066098,2137137547,1657907308,2611411227,231219390,1378355631, + 677988191,3345011776,2449087066,375141955,2397019876,2195017795,39524755,4263412759,3606471398,4103094121,3956131477,819655079,3639746924,747028115,2498279558,3690224118,2429214208,3890780335,2023569170,2358660611,3656940131,236930693,3257684774,1172677456,4178968907,2369604040,3474136778,2100478467,2237765500,4256391341,2711699982,2248492702,2317155257,2470825585,13754066,4186185426,2659170626,3993155186,774070870,4258087351,4023577192,4292804473,3372885594,812773593,562520313,2115818877,2460708954,169395998,1969793279,3694175841,2533132393,162891843,2035835513,3466322485,3966994405,1970628565,3114614487,2795779209,1068916249,1727193209,3990670569,28806090,2734748652,1576177135,1742313056,252415130,3303349618,1333153059,451199140,2245740980,1262442581,3497151543,2303362582,1695049784,2759060824,2619429141,2375777548,3078519388,1277702342,3270862751,1035729791,3688468762,4026795394,305631444,4180194336,1132694357,972027967,1686836817,3893243856,1020953401,1419445362,529032843,1418614286,489291026,1170201287,1838518243,38404994,4039998769,1765268449,2749749811,87491972,2747366931,3051137459,4191621175,1950899896,2241602777,683504538,2795711417,3201254697,3174343421,1013639422,2538317982,877170777,2225550138,1780685104,1246585020,788291908,871849582,2853366942,4159130071,1174267591,3025086951,2811272233,1452585421,1226254236,3517698637,3461196398,1712056477, + 2133313200,3808732241,3537541841,1455362643,1446513764,315667602,711526726,2980189606,1874122007,2832667256,4178969019,3602180647,3214131604,1032664333,1998633854,1844624335,1267000656,3086070896,3640035378,297066739,585352820,2940240339,4018523222,3233856093,281073464,1362574504,3224634106,870497067,634223067,2170523469,2795346829,781876831,2288476032,2434268432,2300555794,3682155555,2586268196,1250206037,4011913077,2727104039,3584359960,1568875931,4094898362,2352754443,1310066360,1945409165,3366580846,3715422220,4207372848,1673069729,438483488,4198417969,2742965891,965273811,704026214,688456935,3105456216,3830682775,3414111257,1015585655,1230299260,300611421,71718837,3948639427,2802198704,4263738971,4146198146,576843186,672171108,1262442709,554807910,1655159990,3269221992,2850661911,2744929034,3717614714,1768931914,1823403195,1144625838,4201678555,3218927120,2525555681,2893180638,1611428641,2964234564,233767831,1588867603,1187504967,717997048,895949849,1693735530,1032634727,4236450809,3436278013,161628494,2986146890,1132677536,843004969,3396337218,2679751779,2926820819,2302039861,1690169702,2774138419,3713688500,3601960263,2760269348,3062136162,224431388,4160682028,3612017550,74534668,4263010189,3369659153,3767761234,670801634,2896169873,4080982757,2281658193,3278528806,1869971160,4270078237,1781584078,552344480,878913563,1607027565,1595850925,2349943407, + 1185257808,3890564369,889335486,3124913651,3242089753,1272661173,1151558294,1253682935,4210832776,971010617,2760740058,3522095657,3333000139,2601913898,1848241182,3964331902,1582723904,3920583577,1141827497,3414878783,1123447097,1750797509,394099264,3280491991,4227983592,1155967911,4279508067,360615991,3265897916,1053949276,2534871038,2730801422,1961699354,633502389,2440713354,3831577523,3914681523,4012125203,354243254,3866532087,1485835677,1797365449,4123747450,460959850,3485071977,2503617975,297020229,319174238,2793930816,3855202816,2812641936,2239983275,4118396534,2694159381,2418461833,781754023,1005435223,2802309064,2928029303,1815432107,94229548,3916746429,966054109,2478534191,967707711,3860952273,3117345313,221289629,1079033155,3286334757,3558165398,2837632493,318907136,3020304441,3859493721,2747320523,3545313964,2128835964,4055123086,303223406,3083616064,3235505649,4177866850,2472373489,521494369,3776402450,2337566934,2580947175,1148475828,1267700457,1371661018,3730593498,950378858,3012447741,1095865982,3080881343,112313182,1030145983,1076378940,3403388463,487947507,1742800880,3933557997,1427450936,1747693753,1277150995,707613285,4131434635,2404567436,1380242797,4150972558,3211765919,1031210239,3619056080,3099405922,4066007202,910137043,3154309684,68005199,2878213607,2459848568,3415175683,4228098141,528638276,2252151612,1364075367,207327374,2595019775, + 1854503774,4090467423,1346068116,1767846659,3331859550,2173165221,809356426,3062195703,2133737464,3273258665,1335972986,3705467307,1149981060,3587938251,1151554190,46686511,3847782912,273318752,946342434,954932675,1298351476,2646688432,2478881954,1568129959,3703377000,191469800,3303790922,1911014521,1868292284,3498449320,2575197802,3315039640,2103565648,1641414128,2537016610,3083433890,87530452,1907571639,762139894,3307437335,3687252295,285063574,782377418,4279991579,2013435980,3796589181,851731100,2632035020,2268357500,3801147185,1483554703,3701435107,1030777827,3072083429,150257028,3972756950,866202232,1484716473,1797420681,3016768360,150498716,1440959677,1101971678,2058558054,387014400,2656877201,1479369842,4224337362,1450503920,1321480722,2859570406,3465869207,4146474008,2409214569,3220496168,3947762168,4099482092,3146906731,1098906150,1645208975,4286003935,2703695297,2836805857,3609575539,287514340,1448235540,3935385622,2287153456,3866303304,3225880982,1121814901,2859570422,2611182748,2138426981,749979620,2533628900,4037590832,2289281952,3079609466,869598515,2801533305,99050597,699816198,2476766279,2203964680,1920147554,2374921482,4236200877,2515676764,3481341004,3754299486,2885476846,1596656681,1168416711,1307009650,1383859651,2604496291,3901711573,2018846294,3829457734,3866057412,443516695,593599970,1183506897,2233152786,1081208461,3491517021,481176381, + 558976144,3634477105,3303184706,646837427,2990904468,2216392148,2667714710,1922471111,451233512,3750555590,1136332713,1242544715,3578280155,1363333837,2638564718,223668479 }; const MAPBucket map_buckets[MAP_BUCKETS] = { { - (const Bit8u*)"lW\5X\324\351\326?\347=\223\60\311\4\323\335ALa\213\t(\26\240\64ba\267\242kw\267\262\355\332\275\326\332\272\335\335e\267\327\265\275\272u\255\317\235\377\363\334\372\356\217\231a\342=\235/N\333\33\331\16\377\4\33V\24|\33\222(x\317\322\203\373N\335Q\234\233|GN\236|\16\224\265u\376\0C\246\6>g\243\246\204-Xv\315y\200z\214tL\203!\217\3\327h\302\247\231C\260\356\264\177,\204v\247\335\"W{\371\217\344\373]\331\207\212F\330\16A\305\6\327Y\n\367I\373\16\253\204n\vY\363d\2\f\357M\253g\306\v\322&l\350\317\301\231\60\366lx\32f\265V\275\7\242\341t\225\32\255L\317\242\241{\2o\261\201,\220\240\350\27\232\376,\262F\353\241\374\3\346\34\234\324:\353\20\233\270\61\273\20\246\177\32u\241\264\267`&U)\\\27qvv\314\1}w\370\25\30\337\252\255\247\214\317T5\344\34 _\305\212v\332\7\200\63,\337\6\203G\4^\302y\277\307\7`\361p\373\22\32~/\270\b\371\263\231\206\271\245\212I,|Hu\1{\234t\34\207^&\357a\234\361g\264;\224\71\234\273\300gW6b\366\22yS\222\66\23\224C\317#" - "\336\b\346\277e\36\305\61\60\235Q\212Q=M\34\305\274n\246\255T\335\304]\302\354Q\271\220\26\376-~\24e\327\5\277@\257\26\336\37\211z\343\4\310|F]\210\213\333%ns~.\273\346\312\244\t\201\314\70\v5U\225R\351N\307=\364\16R|\207\213\357\347\250\261\331@\335LXZ\224\323\200\361o\265\233XMo\257\21:\36\260\274\217\236\343\212\227H9U8\23\372\226\373\21\243+5)\224\276Z\374\204iJ<\275A|\214WC\306:\275\227\62\337R}A\202\221\354(\311\236\23|\216\63\67F\227\320\304\346\231\237\300?\201\23\304\231\263qb(\253-e^R]g\362F\332\246\230?\307\\\301\24(|\6\23\235\265\237\262\361\257e\236\244\266u\306\1TY\357Z\310\346\367\215\337'\361\65\336`\326\364e\335\327\324;\327\273\207\346\372c5$M\21\330\231\241A\262\230\r\257\f>a\202\\\366\7\263\214\222\251`QA\342-\346\277\236\346\202\24?o\25\212\244\264\204\315^\22\333\200\35T\26\67y\347)~\203!_\5\316\240\356a\312Y\202k\320\33}\247\225~\26~\254\346\243\244\210\177\vf\273b\351\\:\262\365\330\204\362\277\63\347\301\177\301X,y" - "\213;R\374\330>\22\232\221n\7\313^\245Y\201\335~\264\355\242Z\245g)N\236\233=\224\214uF\21\214N\v=\342\16\373\312\224Z\210\177\240\275\6\266\207\262\227Y\213\61\372\267!\365}\376\v\330\357G\277\233\361\344\270\23$r\376\5h\363\233\361gh\365\255\341\27\312;m\372\221\351\267\246\36\241\230D\263\232\n\35\226}\330\272\310\260\27\rY\251\247\260\244\211\375\37\314\224!\355\203%R\373\317T\375\245{\r\270^\221?J\276P\217W\34/\260\332t\357[\324Qe\351@\306\270$\6\341\215\252\201\f.\303(*\233\357\254\301T\35\357\26\16\30\342?\b\345o\273\6A\244A3\6\331k\350\1\371\33\302\34\346\63)_`\302\357ybl\362\276.\3\206u\16\66\2\351\66\301nJ\314\326\356\246\21\301\340z\250\327\205\367\340\304\376Y]\223\322(\266]\313h\252?{\17j\362\305\375\70\243\247\16\313\376\236\246\307\"\263a\206\65\232A\322\333\202-0\263u\264\17\226\337uy\330lu\254\3\324\17\n\377\216\323\307G\31\23\276J\177P\23L\337\317\206\205\202;h\331\204\234&\340J\221\177\211\340\4\1k!\323?\213S\346e\377\306" - "\26\37\311\31\217\321\237\64E\320\336m\272\b-\217\30\6\62q\202\67\223D\245t\22\362\317Y\324I\341\311P\200nF\312\27\350f\362\253\60\352X\350\265\370V\217\330\265\231M\n\1\207\362<\33\370(0\25\nUV1\210\33x\315\70\212\216\315,\203\231\261\225\24\222`\371\327-\204\375b\276\67\230\300\305>\206$\206\316\r\6\31F`\26\263\177,\37\3\5nK\2\310\205\345\320]\354\30\tE*\273\2\270s-\203k3\350p\300\262\202\225Lp\264\4\354\3\353!\357g\363$\316h\371D!\200r\205\360\36\325\276\344\345A\335\r\377f\232u:\312\375\212S\367F\272C\22\235\326Z\227@V\245z-\214>\22n\5It\337\340\330\201\351\247R\32\221\341\273\324\213\220:\220\237\200\236\61\257\202\322\375\342\343\330\346w\343\4rT\310+\220\215\202?\251\363m\353\64\320\245\245\364\246f\271\272\4)\253C\257\303BeCb/g\371\320\351\201\215\177\321\346\243G\253\360\261\236\235\275\317\261\354w5\333 \t\343[R\t\374'X\231\317\371\4x+\360\30\312\252\24\37@\22\305i\366\311T\177\66<\206\361W\261\22l\336Mw\212X3L\243>\203|\26\262?+\373\235\315z-\326\214iJ\304\307`F\233h3\322\216\27\277\304i\340\271\256\330I\271;\r\22h\374\233\316\1\374i\370\230\365\373\322?\215Ft\r\36 \367\337\24\71`\277i(`}\216\370~\2\376\36\26\345\202R\325\331\35\206T)\357\7\64\36\227\374\235\25|fi\2\301/\323\372&k\220\233~\276\350\363\266\257\201\r\230\354\377\7\345\316\325\177E\342k\346\223\224iTm\2" - "\376\64\376,\262\256\223\5Y\307\37\254@%\217\354wh^]l\37y\16+\226\260\252r\367\27\\\365\360\327\272\337\4\303)I=u\331i=\216\365\33\302\237`\313\210~*\32GYF\343S\305;\262\32\271\347*\215\332\35\352\17\205\307\255m0v[\233N\331\373\302) |H5\230\310\321\276\16\202k\354}\350=\337\67\f\27l\213_\5x\21\n\260\343v\313\f\350\266\306v\211\2\5\312\235\20\26\250\374d\357+;\304\4\263\302C\t\237\207[\250\31&~\352t\207&\233\315\271\23\7*\273\352\234\313\250\17\16\203\242\71\366,\210-\320\16\206\246\345\272\376\70l~p\324S\227\330\253\250He[\305\272Imk\241\346\240\347\65\310\64\252[\200\241B\"F\303Q\211\216\306\217\315\350\305\0l\363\223\263\2\215y\222\31T\254\263\3\364\24x>\307\271o\307\376\244v\273M\36\230\377r\374\23\266`fb\24\327F\260\34\16\202I-5\263\247+\335\307\334\374h;\317\224\203\65N\217\216\362&\233\346\261\340'\252F\24Y\241\376,\331A\240\305}\375vLk*\262\23Y\261\26'|\227%c\355\64\246\32\250\334\346n\317J?t\276\237\254\17\66\374P\250\33\316\361" - "\304F@\22\274\37\361\"\210:\323'T\325\327\215L\261D\370>s\35Ut\306h\245\206G\346\347\245\213(u\16_\4\6E\352-n\b\267\31`|\236\341+p\5\222\350p\326\362\62W[\203\236\4\206\263\202\307\226V\30\356\235\326\215\365\270\345\34\304&\250\262\312\261\245P\337\16\345\343\205^\320\5R\6\61\363\3\351\r\206\17\341W\350<\300\372\65\226\306\235V\370/\304\372k\213\223\3\227,\251\322\335\320k\221OC\255O\32\326\302\222\302\234!L\330\226\346\374\333aw\255\"\217\324\21\321\70(\335\351\334\300\351\62#+\232\3\377\4M\236\227m\307\376\366\214\r\377\335\256\323\366\210*\270#\336\335J\6I$$\332\337\260\342\241k5\225\336s\212Y\341|\253\31\27\256K\324\261\370'\351>\360K\224\vY\361vGZr\232\262\66_\30\277\6\343\2\311\71V\177 S\310f\354\214\16\245r\273\363yHBhb\337s\354\23y\332g\321\336`\367\376\233p\347f\371\37\314}Fq\203\373X\325\310}\b\376\27\314G\244\357\60}f\352p2\24\247\316f\255CF;\264v\30\265\70\341\305\314_\376\355\\\227\226\326\373P\263\314\363\n\16<\23\260\221\350" - "k^:f\317T\227\261^\223}!fj\220.`\23\247d\335a\371V\177\rt\277\344\70\202S\257D\372\241\343xh,\213\35\322\236\246\202\331\346\303\30,T~\304\246M\215*\240\245W\177\21\"\367\64\337P\337n\276\251P\270\330\32\207\234>\351\3Xi\300\271\224\306\237\317\70\205\213\215\211sT\27\360]\201\352\306\356;8\377X\234\263\234k\207\315\277\327\375\6\377\4\216x5\224I)\223x\333@sF\274\3\353\353\303/s\343\270\305a}i\362\35z\266*\6S\375\246p\35v\352j\325\260\341\317\206l\230eT\35cSx\21-\314>\31\353\307\211\324XEg`\272\66\362\71\32\356Jj\261s\245u\30\64k\320q\227\263\344~\5y\353\315\375\230s\266\374nr\33\206\340\246\264\326\234\32\266\205\262RVz\333y\36\207\355\nN\240\212\235\256\246\34Y\237\63\276\70\361\253\231\225\252\327\273WA\323\253\272\6\66\241q\326h\230:=\22K.\23 n\315\v`\333+\306{\230z\207\277\225\233o\213v%\216\303\344\323\331\223`\361\223\234\20\244\277\222b\304\376\253\375+h\302\310\314\216\324\345+\353\65Hk*N\347\204\307\266ie\254\335\71\323T\350Tn" - "\235\360\327U\241\25\313\314T\217c\356\71\212}\311\5\234\371\332\251\373p\336\230\61>\332\221r\257\32,\260xn\216\214SR\342T\325'i\271\345IQ'\\\225\374!\331\377\320\325\66\220\307F\337\17\367\300q\225\31\315a\212-{\1.t&\224\360O\340\270\3\31\7\241\367\36\337Rj\273\336\70\217LW\244\345X\330\306r\210\245\374\215_\207\322\24A\f\345\245B#\271w(\f\30\220(\247`\241\300\262\35%\333\5)T:\300\361E\322\"\226Z\315\377\6Z\337\62\226\60\60\202\237\6M\361\237\205\36\365\216\307`\24Kv\301\244&Y\333h\340\313\376\235\324\63\327\343\307i\321\310\30L\231\316\333\17\31\345\252]\250\330*\34\16\355>0\255\304\242\200\355$k\352\321-%\363W\322\27`\324\345\320\35\354\365\273\367\64\366>\340sQ\33\227\341,8R\345i0\327\33\273\221\234\203\240~^\364w\356~T\260\305\374\36\264+3\215b\301\347TJ\f_O[\221\214\7yf*\312\331\340\331\201\37\251~j\270\226\306}\35\336\312\242M\264\35P0\235m\300Y/G\357\243\372\241\70\37\254cd\tVY\353\256f\242|^\224\245\277\235\362\22\5\37\245\345${I" - "\262\272\241\371\"\275\24\7v\362\337\204\251\207\"y\24l\257\274\215O\363JM\313\307\344,\346bT\371\211\353\27n\323j\31\61T\261\334N\206\261\234\237\225\351\302\303\230\241H\333\317\64%\272#\320\344c]W\264\357\223\235\345\352c\354\312\f-+\272o\337\310F|\34ZB\362cB\r\374\23\254h\234\275\230\213\252@\301V@\357\62_+j=\305\260\200Iv\bV%\27W\312NW\17\241\212\245.\5\366|\325\363\3\344\336\67L\301\332\366^\37\351!e\27\33\265\65\234`1\217\366 \253z\317cc\303\204\301\347\250\327\17\336\365@\2\203\226\264R\361H\22e\320A\20\216'\5L\333\37i\200\214\265\252\343l\321\357\71\306\344%.\271\277\220\244\3\377 \31wH\326b\376\35\363B\20n\245L\30\270;\220\v]\326\333\302X\20\60og#\236\17\315\346.]\274o\361.\305\362\65\257\243s\244\374\31\354\237\353_\0Y\331\352i\324~\224\251\33\346\232\f\245(\334I\255\261\340\357\346?\376r\366:l\333\302\270\16\273\276m\353\bS\276\312\276\f\363\236\213w\245\251\337D\4\220h\226.\247\334b\375j\312\17\230\365(Z\313s0y#aWX\342\316\351" - "\311\374\37\246iY\371C\327\267\0\66 6\355\313\250\211r\370\332\367i\214\70\364\r\v\352\323f@\22\332\237\304W`\361\341\34\v\360Z\342r\214>\322\314\202\224\315\274\243\250_\225\362\20\240\v\264 \361z^\17\226]\240iCM>K\277E\266\345\262:.\0\302\71\364\65$\321hV\372\66\242\355\70\27\224'E\312\277\n\373%\220<\26\214\374\357I\322\372E\243\37J\332\70\314\224qW\325@s\256\305\332\20\346B\3\350\67\245\356\346Ft\362\234\343\244\374}\326\345\264\255/\365\276\341\375\203\315/\210\237\370/V(\270\300\256\261\341\246\340\247\311\217\334\16\322\325k\33\27\211C\260#de\345\374\37\333\325\271\336\70\16\3\365(\274^\275\327[\376)v\332f\263\311\331\271\372\17\226`\211\237(\302GRv\224\247\277\1\245\365\365\"\17@\20\4\201!\310\230\227\324s4\347\342\353\63\363\330\262\331$&\227ZS\356vd\203\232\234\231W\266b_\261Ibn\255s\305\27\237\303\340\62`f\361\325b\305\275\370\342\253\225\331\354\t6\227\266i\23\7U\374\"\301\325p\375d}S|m\316\311\71\254\4\7\226B\35\213\257u\212" - "\204\24\315#{o\241\200\327\367\315\215\257Z\206\360\364\265\271\337\355\26k\241\332\254\251R\37?,\256\305\261\271\263\336R\32\2\233+q\273\242\64\257u\315\236\240\20o.\\\217M\4\346T\224e\271\276\272~\253(\267\24\20cYqQ./\316Li\203YJ\277\245d.\372\301Q\222\240\203\321\310\316$\344\340\1\313\355l\5]\233\6\337|jj\313\346v\b\7~\v\272d\261\312f\330sX\6\211Q5\3\231\215T\25\303M\35;\351\212r\207\34\344|\376BPb\275\62%\252\272\267\200\241\17\62l\35cj\227,/\266\344\212\322\361\223\271\266Mc}\374`\316\334\306\213t\352\323Y\366\246\214\221\6\227f\351<0\327fa\36\345\310\341\377\306f|_\217\61\362\250\322\1\305m)t\21\202#\230I\250\71|\20\315\62\330\252\343\244j\36\315\222\24\211gc}\316\306\ns\314\227\377\243\373\252({zFa\314\35=#\265\257o\356\312%\262\333\63\34b\201\327<\244@\16\25=pL\266A\236\261\34\214\367\26\26\60(}\262\225\364{\354\275(A\201\326j-\220\37\362H!\6\27\312\31\33a\265\270\263\61Z\207U\300\262V\377+\312\207sH\230\214zy\255V\370\340\66\330" - "\364\254\1b\315\24\6l\17Z\30{\331\267\262\265\4\251\242\232\261\233\31\200\367\344\237\263\276\25?\235\200W\312&C\276>\355\24\303V\220V\211@\35y\261\365\t\230\233\233\63\263\346\3\373\206\225?+i1\326K\260]\236\377\263\355\220\241\311\363E\366\274\24\377\307\200\204\250\63o\247`D\327S\352\332\351\0aJ\236}NU\322\\\231+\362\r\354\300r\217\24^\311\36\25\344\370\226\252\206\200\370\67\313\233\33\263\272\277\277+f.\230\265m\342I\0\343\4\204\205\254\356\236p\314\356\267\354\354\223*\2\266\346H\7f\351\322\6\236\340W\253\242\34\222l%\305\f\352\201A\325#G\351\261\33\nN\371\260\351(\361Z*\244\351\t\353\370X\234/\226N\366uqN\344\360\331\216\346\245\250\345\2\201\353\316\256\61\35\372\n\31\222\274\315;\21\17\205s\210db\324%\371Dq\314\312\206zd\t\320\67\202\357\376\255\267\336\302O0W\320GE[R:)\22o~\326\36p\260.3\315G\253\236\313\365\217S\5\326\66\346*]\352\21\221^\247\214y\351\364\201\67\272\226\302\236\64T5_\322\236k\234\217!\222ri\36\273\224\300\207" - "\377\210\363\224\231X\32\333l\240+\353\26\17\66k\222c\315\360\t\357$\344\34\224Q\333\336\254\274\361\221\253t\22\357ryfi\356RP\206d\311a\305\223aK\307.\232/~\370\372\313Y\221\33\354\33\234hv\241\t>\37\240\n\230\310\224\242\272\\S\303\220\70\34%\364\0\341\257\63\260\361\324\351XLo\326\316x\331R\277G~ck\367\346\226\2%5J\332\371VL5\266\215\354\344\66\204zi\212\334\210\26\247\227\300R\366\305\271\335:\354\272\306\311\321^\36\241@T\262E\335V\301\36xq\343\263\352\61\333v\352\224\16\f(\310X\243`\177.{s\243 \210\266\317O\n\260\247\177\v\211\251Z\353\271E\f\320Xl\342\201q`\260\17;w\373\254\356F\363\25\0\210\273\0Q\314\27\212\245\236\276(\227\347\21x`P\321U\342\315\227/>/\20\36F\2y>\303\356\371@H\241e\235\212\1\315\313\65\365S\245 \37\342\314\355-D0\36\323\32EH\34\362\6\24\223h\27\356\267f\351\6\65\32\\\235\267\31\333\251\253 4\354\265FF\346\6\243\66z\21\377.~\306\271\224\264\265\232\277\200\374\240\256[\315\353*P#\36:\246N\206d\336R\230\222\271\36" - "\234\63\327p\314\243\371\341\33(\321\372\217\24\0\6\370}\305\370\337\36\324\331Pu\b\240\1E@\354\7\355\66Z|\254,=\6k\351fb\237h\270\331\333`\23\306\372\375\70}\21\367|\32N\247y\b\360\370h{V\350e\370\27\211\64\352\371\262\207\301\363\63\205\32\273\203\327%\325 \16U1sre\275D\32B\234\237,\\\t\264KJT\271\61\366\260v\26\211\363\226\314C\220\351\225\200\243\234\310z\275\367m\205\364\232\205\276`*\245^\215\364bF\32OF\253\321S/'\361\322>?C\b\346\375\211\232A\5O\r\343\67&:\322\70\37\376\373P\303\23N\207^\343y\320\201$\210\3\30\301i\251\361`R\241j\315\7\27\375\204\316\314\315\316\374&\3v\340\337\202\n\v\370|$\257@\322\277\313\267A\20\307*\323\365g\16\321\316\264\\^\227w\17\346V|3C<`\26\f\357\177\317\355+A!\326\203\367\34t 8\313H\303\4\307\314T4\355\243\207B\306\5\210\260\270Dun\7\337\0\350+&X\301D\33+1\327L\t;.\235\373\353\262\177\20g\301 \315\22\n\210\314\70\246\240K9\253\254\244\320\351[cz\252m\3\363\374\334\304=\315Z\6\30\315-\22Q\370n\372\232\362" - "\305\303\213\213\27*\f\265\271\5+\320\263#\304\261\346\277\35\212\245l\311\210>Lt\203H\t45?e\362y28IW\224\20Z\30Q,\207\301\276'\257'\355\226\31\347\336,\224\303\"\236kxQ\34\377m\363\65l\300\262\300\247\6x\217\240\35\377\333\356\207\63\363\317\36\215\63i}v\267\247?\314UP\366n\34\365f9\354g\355bu\277\311p@&~\231\26\367\344\365\333\340f\326/\260>\31\202\4E1\205az\204j\227\271\210\25\355\71\232]\220\36\205qNMR \374\210\233\36\222\200!\330Z\202\301[>\367c}\222\221\322\7CQ\317\303\246\345`w\273\223(\256\266\34\316\314C\34\253\26\n\304\225\307\4i\237mN\235[O\222\204\255\255k\366s\247(\226Ao\367\25\370\244\360yD\"\354\23 \363\36\64\243\330\26\363\243\323\374\360\235\302\236a\314\240\207$\220w\234U\363\337\22\263\364\v\16\2\340\344s\340\323\346\346\333\331,0\33\234hP\245\254l\241\233\216\240\362|\256\276\321\343\24O\322\35\241\f\203\367\371\311!\222\266\244\t\34\267\34\266c\307Q\313\336R-\307\314\351`~^O\203w\324\360Y~\32:\r\321\224G\352X\235L\303j" - "\254HR\20\17\20\254\63y`?(\265\237%\277~7\226A\336U\261\372\354\212=\7JZ\217\25\71\356\346?\26 x\264\311\60*h8\310\20\347\277l\"4\201\27+>X\247\60+\16\66*\255\214r\311q\342\371\317*\214\34\233\235\206\t4j\37\301\301\33\224\263\205\336\322n\324\275MBj\201\235\33g\274\71J\250'\234B\216G\313\247\177\346a\363\367\373\71d\254\7\350m5D\30\354\61ou\4\r9\250\30\71$\215\331vJ\223\65\203/\376\315\243\357jp;5\331\223\rE\336\212yE\36\vZ\352\305\327zZ\266\310\31dP\351\21\1\214\177\203S\367\310\304X\200\255\7-\340\211\221\260\323\253\70\324\346K\254\372F\310\256\32\263\32\232\374{\223\336\302o\354\340\4|T\350\31W\26\306u\rr\34\347\246\376\243>\326\365\231\246\27\211\206\367\f>\343N\f\326W\247\203\376\233\70\334\325\16\71zi\36\206\335\16\216~\26W\21\362\242\257\310\234\r}\235\257d\310\317\236\6\221N\302\351\256~s\371\261\271p\266\267>?TTY\331\64\232\237\66e1\31\316\67\355,]\272QQ\327\21\214\327\27\345\335\6\371=]h\253X\265\270\212\337\2\0\27!#4|P\215\327" - "\370\364\200 \226x\354B\211\356\310\27\27\324\270\334\\-\22\6)\244\366\324-&Q\337\207\346\245\355\315\237u[iW\343\270\322\326O\361]\231\71\347\r\247\367{\341[\232f\35\b\\\240\241\207oJ,\22\r\266\224\261d\300\375\353\337\347)\311Jx\227\273\304U%Y\310R\251\226\247\324\37\300G\254\243:\344\311g\254\24TJq$\224\377f\232\376\325\250C:\t_\325\6\247\rj\347!\340\212\330\250\35\266\262\67\216\22\263\220\64\304\327\303\310p\341\256<\323;Hl\304/#\250\246\36c\t\376uHl\354\3\372\271%8\333X\317\270\26\353\302a+8\260\271o\324\241[\370\236n\6\224i\7\4\70\316\4\320\221\vt\270\346\337\261N\16\376a\337A\227\265+A\t\272\361\313\237\261a\213(\v\360j\26=)l(\30d\7\26\33\211\325\254\366\336}\201\0\177e\334\71\244\32E;n;\213X\364\b\nT\267\276UG\357\267B\321#\6H\221\71\30\217X\376\272\214\0\210\256\251#fj\370\355:\335Y\332Z\276Z]:\243\216N\217\246\311\205:9\213\272\31q\b1\235;\263\235\63\17\63\6\256\63\22\71\235.\370\322\365\341\375\364\374|\237\371\21\242\324\335\61" - "`f\267\200\343\252\333\276\323\26\34\202p=\271\201\"\224Q\233\21iQ\243\265\254\216\33\337\r\205\345\230\32\266\n\333\203\211\326\233\357\244\r\336\236z\246'\357\253\333\357\327_/\301\277B\371\35_\375\230\363p\330n\361\361M2\215\b\327\334\23Z|\253\t#!\215\354;\252Z0\374\303\251\331\347\63\233\234N\16\20\330\204m\357m\0e4\362\361\35\350\6\343\377#\304\230|Y\32\352z\220\240\",z\203\320\27\272\332\257)7?1'<\35\267\242\303~\303f\336\23l\272\332=\330\315\21.\33\326\350\335w\v\217\251\374(\256\353x\302(\337\4|\376\251:\336\275D8s\261\253\216u\275\64\f\241\316}\210\314\214\31\22C\332\60\22Z\244\30\242\360\257 ZD\34\314\61\71\b\366Q\303r2\246y\241\226\200\352\35\372\307\324\212\250Y\b\3E\264\223\17J\234\v\203\322\276\256\65>\360\34\371\70LW\\\261\305/,\341\220\375\234aR_\v\274\303\330\246w\\\371\343\25\246\71\357\331#\310\330\226q\325\215\25\201:vD\3\b\17a\312\236\331\7\225\0d]\235\365\315_@4\264\17\323W6\273\372\5\357*\211\204\230dq\b\211\210" - "\262\350\212\350\304\207m\346\300v\213\336F\212\236-\326\22\204\321DQ\260\373A\272\232%<\177'\310HB\270F\260-\351\321\367&\332V\307\204\26n\35\274\343\336\266\36\277\3\f\352Pr\335\34\31\210\237\234b\320%\364\2\177\364dr\333\361\1e\1\342\266cH\266sIg$\352\2\273^\17\364_\333)\255\370 \246\fP\271\67\fWQ\370\23\35y\374\236\204\23\263\371\271\220\271\23\224Q\333 \270\211~\366\v\212\32\323\362\334\315\r\fe\344&$\341\60a\24P\7\357\344\303\5:\215\36\376\27\363\264\350c\364\363\220\201\317\314\\\30|+h\250\343\312/A4\262\37O\362\4\333\31\350#\237\336\360\375W~74\233\31\317I\262\251\222\320?j\20)\251<7\264\276e\231)/\332\261!\351\230\213\362\317\314\v\374g\367\304v\214\360m7e\"`\335Rl;\250\365\332p\250 \277\61\254|\304\363\231\34\177#-\303%\377B\277\364\370\201.\4\4\366\377\204z\234\fk\223\20\305\277\250SA=#\214\373\26\352y:\275Q\247\7\227\263\375\215\243O\231\4\303\271\323v=\205\272\251SW\213\316\237\361,\213\256p\201\217\250U\324\223\b\317\31mNG3B" - "\314C\373\177\274\27G\313\226\343\326j\362\177\274\364\210\211$\243'\306}\275\322\1b( >)\341\23\223\61%\313\330\rT\256\361\217Q:\245.\211<\367\35\250g|8Y\36L\"\374\310\370\343NH 6QvQ\25u\6=\f\f\350\340\30\301\70K\263}\346\ri\37\354\223\2\215\t@]\253\211\304\321-A^\353\376\320l\241\3\253\315\206\202\366\202\351\352\354c\276\332\256\336\347\36M\274\233p\253\316\272]\311Si+\316$F\341o+\234C\f\222\303Fp\235\16\201^\232H\354o\4\204e!\17\374.8\267d\352\246\22\372$)\"i\347\237\371\210\31K \375\323\64\352\67\354\270|\356\307\r\271\367\5t\35\230\371\375f\206\240\70\204\244\322\325\373w`b\34\270\300\22\4+\212\67y'\330\320z\247\373\250\200;\7\352:\323e8\25\254zo\1\375\342\263o\337\2uP\347\20\f\372q\375S(]KxU\363\20S\214\357?\337\235\356\26H\366\374\363\365\201:\327\370\\\354\237\306XK\244\333I\20\64\354^\210]b{ \r\214\262r8I\331!b\353\32\206Z/;<)97\3\374\227\364\313\310\264W\305!\200\252\207\257\375\22\317'Z\372g\374\364\70(\246\201\21\330h\357\354" - "\353\224i\336\340\37\37\3\272\66\2\262\64\36\247\36\334\332\342\247\323D\230\37\364\202\203\7\246a\3\223e\6^LpA$T\23)>h\306\356\342$\251\217\222\364~P[`\205\0R\20\264\30\64Ad\34\201\335\357a\317\63\6e\273\316w\233\215\22\313r\vC\7\212\1\342\344\215#`x\327\64\262\205\347\275\323\235\244\35\230D\346n\365\23\32\220\367\62y\272\320\65F\177\245\213d\311\205\36\26z\236\71\30\217\61\324#\317\4\4Dc\231f}\370\330A\325\305\237\f\374\200\16\213\352\236\23\366CS\5\243\305\351\342\20\255|#O\216n\235\314\242\243/\6\16\300}&k=J.5q@\273\23\362\331\330,\6{\204U+\36\16Y\220i \b\1+Z\0\7\225\243\4\31\277\60\276\17|w\250\65<\351\237=\f\311\205!\236\372o<\27\253l\246@/5c\327\5l?\230&\326\60\361 \34=\0:\221\304\342\361\301\304\\p\331\0\216\f\327\347\34\215y\37\337B,\327~\356\t\201\232\261\367E\37\261'\231\271N\231\272y\204\332o\342\33\311c\330\303x~M\b\362q'\37\60e\254\272\224\263" - "Hu>\300\246\342\355\5\224\252a\27Fu\203`\266\177\300X\202o\305\30e%\214\234\203u\365\\\376\30I\6\302\357>\355%\306N\256\372\30Au\230TI\302\311\266\32X\313\231\211c\330\270\345>9\273b\f\311\261\371\230\352\346\235\347O4?\373\226\201]\312\256E4TWC\\y\7)\362C\356\262DQ|\311\273\27\335\260\252H\34\233yj\262\64\325i\21\360\25\226\\\212\240\344G\27\227\267\212\333\315\267a\275\211\60\221`^\267X%!\372\316\347\352\"ll\373E\337\266\326\4<\303\252\363\276\255\250\243Z\245]\252\256\240y\275uh\36\22^A\212\5\277T\331\34\71\4)\263\351\205\232i\304\327\31jT\263\203\351\364\r|\314\\\0\36\235S\225\306\375\22\1E:k\313\364\350\310\367\330\22\64_'Xxf\320\326I\34MZ\314\323\354\350\234\307\252\303J\317\261\313\202\316\323O\314N\316\313\343_j\6\17\62p(nY\372\35Ui\\\260\352\227\347\217\273\357~\315\215\67+\v\7-\376\62\375B9\347s\33\361\7O\257\61Y\272z\27\340\67[\26m\336`\341\63\17\333\276'\266.os\202\207;\366z\365N:\304\216\304\357%0P\263\301D\205:\37\35\377" - "\227=u\331X,\25\34A\250\366`\316\246L\31,<\230\272ly6\361\332_@BKi\334\267\327\362\222\70\307\367\65F\231J\242\202w\347\260C\30\t\17\265\1\202&\25A_\27\62DU\32Xo\277\201.\267[\242\231Y\307\336\31u\t\220y\347b\7\303\223\64\35q\7\230\"&;\311\331\230\370\27\341\344\342\1\211\206i\245\350\220\30Vu\365\351_\343YB\266\37\25\364\16g\356\335;!\256\16\30\206$Ud\206;*e\256\360W\247\201\306\67\24>\35\63\262O\255t\253k\"Y \350\65\277y\314-m\354W\355_\255\366\260\223~n\377\264\375\257\350\262\346\f\6\20\330\271\306\322\243\220N\345b\22\61\25aI[\330U\r\310\6\265\272\275wI0\241\0\215\7#nQ\250\352\323\356;rWX\202\271\177\25\222G/?7\26<@\204\222\371\23\326\221E7rGb\212H\245\323\5\352\353\345\375\71\366j\304Y\350\375\370\346\306\17\\\31\206y\307\210\2AFC@`\335\351\361\232\6u\377j\205\317\361\253\235 N\26,lp\250v\366\366\324\25NEc\250L\1t;\271\322\370\177\337\252\361D|\374\66\271;\270.\354\33\70\373\306\304\322p\332\300YB\30\212D\\e\341\356-\213Cy\243m\234d" - "\303I\372\61\245Nc\202\221\353'l\t\321\257\321\2\222I\362=5\22\272N\253\315\7\274)\21t\323$\326{\354\277\177\362\310\221Z\2\266\315>\\Z\365\177]@\271\202\214\201\235\345W\310\370\236\61d\312\263 \227*\361\225\216\2l\210\61\312(\3\32_\370\65|\22cx\237\t\272\211D\326\35K\345\tjT\33\304\221\365\355-\366\212\361\200\206\300\27S\r\32IDH\230P\336\270\342T\330\372\7v\277\242V\326\66`\350`'\237\211\254Rk\5A\326\16\273\337\317\263\246\365M\320\230 \0=\241\215\342\24'\374\241\373c\"D\267ht\307\232\37\253\71\26\203\360C^\325\222\3\344U)\f\244\22\347\346:M\211\334 {MyeN\262\327\36A\301\260\16\370Kv\341\21~D\20\341MT\30\303\377\6aS\325\206;\315\266'\2\255\276f?:\34n\204\242&\24\370\216\303\34\300h|\24\252E\\H /M\341\233\27\314\256\345\37H\177O:\321\246\356\303\60\375\373\23Xj\204#(\345\33\v\351\271Y\342k\306\t\335\360\63q \32\236\272\0\323(/Ln\32\250\203\220;3\214\313R\212p\206\337\343\361\370\251\222\24[\226B\360\353\276\235\203\27\261u\371\261\254\230\317\27\346\332;7\b\347K&\367\225U2\374z0\35\7\357\321\200\273#\327}\200\355\277\1\274y\371\375V\335h|\224\376\303$\302\364\202B\336L\217\366\307\222\250\\w2\265D\367\354e]\262\n\4\352\236\203\245\250a\25q\245yy\2\272\6\1\322\274\22\354~\0O" - "\277xc\364\v\324\1O\300j\f\16o\32\242[,\337\66\372u\250\62$\201\366\241\365=5\335\4\350\fmr3\274\20\362\310\305\272\337\34G\16\231\315\313\235\275\201\215\320\241&7\225\23\237wHnf\364Ap\4\276n\232&\254\260\364 m\t\316\301\364v\325\377\\\365\232[j5\372\362\246\313\357x\351\325\22\256\272\261\260\301\222\336\232a\3\7B\334@\313h\236A\266\225x!P]\232\372\223\225?[\210\352\3\311$\31\16\4\1\222\312\61\224\342\214\217\275/\325\243\241\27b\337\224U\376\223\267p\214i\225\\\330\351\322#\360\321=\342\327\256\311\b\222\237\240\237\20\351\246s\261\227\326\202[\310\260\214\62\337\62\177 (\2n\375b\343j|rf,\325GE\0\203\330\225\331P\325\301\267\314\224\332x\20A\271\223W\370rm3\363bF\23\375\242I\30Ss\265h}\240\252Q\347\232\22\373\263:\305\253\245\246\313\fT\223\224\363=\237\210`\363\235\251|\305\24\203-\200\t\367\215\f<\324l\211\222\bU\357\367\351\234W\362\371\266\63\224\227\302\361\325AfYS\367\215\60T\32B\n\311\246\346\33v\311\213\320,\234\244B\370a\273\316" - "\203\245\35'\261\360\255<\37\307\226\245\216\231h\370\r\211\244\221N$ \217W!\376\244/\23\352\205\177\373\3H\250\246FA\37Tg\266\22\307l\234R\375\250\250w\356T*\334\231\277\366\254\220\262\373\314\274\306jS\206f\7NH\236\217F\36O[;Z\375\202[(\327\227\27\325am\331\377\327\334\3\177>S\35\25T\335\364\363\310\262\225cZ\0\256mM\276\266'=\201\226\335\230\245U\242\214[&\275\244\60\271\205`\370_2}\220\237\371\60e\333\225\205y{\336\360\65\214Yfo\r\346\66\266=`q\275K\314\234s/\1p\222-0\314\333\332Z\222\23W\f\252\234\37\226\324\362\205*E\224\71\375yR\37\360K\330\32\17\330\263\250n\215nq\356~\366O\26\364X'\24$\374\254\257\227-\254\4\234\323\300\266N0\265\271\21\232\261\3\237\350K\v\265\352,#\312\300\4\331\215\r\331\304\215\267\214\2\344!\246\313J\325\244\334\243\336\226\26}=\240/I1T^\37J7E\f\216\375\346\362Tj\317\67\177\337\366\233\316np\v\25g\374M\237t@\231w\321-\224\301\362\325!|\24\246\264\vw\352\333\r\270\372\27\216\220\223\320\261\246\230D\375\62\340" - "\7\316\214E}3\221\33\66f\253\352\"\275\66\67\300r\361$$\261\244K\235\7\272\360\222e\\\362\352s5)\7\71\303\247lJ$&%\261\270\210\304\337\337\323\b\316|5\3\223\244\276)^}\372\23\261k\32\372\204\67\254\23\325\273\24\235\61\260\272\\D?O\343\21\364\t\336\215\b\345x\r(\325\1J\21\224+\307\v\334ET\220\206,xq-g\310\216I\202\246\344M\310\21B1\35ql\342\266\2\256\20\342\247\331\353h\270\244\223\304\274\354rb\250\340\202\201\225i\344P%]<\310\25\207$o\372\245\354\fi\337\67B$k~g\240\364:!\220\335:-\310F\355\367K\240(rn\342~\276\313D\227\236\352y\365\300VI\324\312Tt\354R\316\203\67\310\333\216\310\16\365\372\304\367\30\366-@\370\25\363e\307\\5\346\376\310!=tK\353\230\345\246\202n\330\177{\24\376\337\27\250\277\371\225\222je\360\201\247\f\301BgFAH&\361\203\"f\302\372B\266\3de\r\317\245\263\215}\372;\254\200\363B?\353\5\235~B\2$\177\216\367\244\325-\203\322t\204\275\205\233\265u^\20\337\342#\316L\327\r\244[\271si\273\300*\350F\340`\372\341M\212\200\366\324{" - "Wx\224\365\327\360\233\205?\366\35o[J\277j\254.\227V\251\250\325\64\"Et\16d+\24.\341\252\33\376F\367t\354\205\215\320r\263igz\n\307M\36X`\t\327\217\344\362\64\205\3\64\34\61n\b@9\v\210_\n\377\350\261\226\62\352=\346\314U`\234\60\336\317\274e\234\270\367\236O\bhbs2\f\t\17\f\336]72\267W\273\20\263\202\21x\327\211\62*%\227\200\24\257\344b\t\256\247\17\340\f\340N\332y\224=\rX\237@\"P\375\22'.\364\60l8\36\364\343\0\262\337g\ng\363\277\250e`\21\254`\315\61\346\300\211\342\305\273*\205)\373\233\257\22\3e`|\312?\341\370~x\264\205w\346B\253\332\254\207\257\7\302\346/\241\310\212\303\207\63\376\274\221\2\337d\352\200\234)\b\266Y\272\251\357n\341\345\232A\4\211t\316`\315\273\201\227!\226+\7&\215\343:\3gx7\271\247\201\271\323\216F\0\232\373c4J\220\275\62\257\275\63\60t)\372\271;\236\246\322| 9\311u\34\271\221~g\335\300<\20QS\310\327\30Y\210\200\334\303\33\227\310\6\374\263E\315ja}\37\360\\S\344\7\372\5\336\360LI\312\362m\376G\310u\255\356\256a\246" - "\60U)\32\337'\255\272\67;\235\221\243\365\27\232\376r\243\70\251g7\240\203\225j=|v\0\23\200\225\60\4\357\324=\206\344\326)\250[]\256\343Q\367\350\217\236\r\25\372A\273!AC\224[\335\362\333\243\63\235(\373\23\223O\256\335V<5\345%\222vx+\226h.\207\274c\244%=h=\322\275\233\302\226r\302\375\351\315e5^\373V\t&\243\256\376\314\64\246@O\253X<3\274~a\35\63O\211\27\337\242\351\351\37n\25\347\233{\340\333E\367R\374\215\1sC\256\300n\217\220[\244\254\236i\1\66\252\243\364\357%\360~\347\312\305]\257\307\241\356mmROu\337\31\236\305\220\bNG\16\344\375\375QU.keGR\361\214\253\37\260\261\336\341\21\365\253\372\221/\270\b\341$\322b\31jN'\250~\\\26\320\360\207w\26\275\61Q\312o\324\17\331\206\261\365w\277\\\371\277T\351\241\36P\234\275\336\335\227+\370\351\216H$rlYk2\1S\300\241Q\17\200r\243\347\255\32\355\300\254\327\32\337g\353\237*\7\235\17\246\251uZK\304S\17\250\216\302\306\252\207\207[\365\337", - 11212, - 19353, - (const Bit8u*)"\214XgW\33\331\262U\"IB$\251\261\211\"\210\350$\244fD0\327xl\204g\210F\302\1\243\t\362\344\31\7\71\317\30O\37\244\316\335\22R\223s\362\367\227\314\362\232?\360\362\227\233~\317\253n\251\301\241\373\256\347H\250S\247j\237\252]\273(Z\250\t\205\323\206\251\351\304@\210\34\nS\355S\264o\232@\245\341x\251\237\301\216F\212\65\277\37\305\231H\0!\327\337\2,\252\377k\0l\347'\274\34\230W\34\233\243v#\211.\230)\324m\242Q\277\205@\227\303Ld\6\241\211\20\213B5\34\272\353\342\321\63\247\60_V+\316\327V\244\276\367\307K+\300If\276#\257@\232\357\316/,;v5\177\71\237\234\37.\244\346\307\n\350\371P\21\61\177{\206\201\277h\376\253\60\373\275\237\203\33x\270I\200[\304\371\247y\361R#\370Ia\27\35\v\363/e\17\335G\340#\356\b\221\361j\210\377\b\22\70\232&\342\236\0\23\357\350Fqo\t\17\37\213\360\27\262`\261\21)>85m\315\35\275q+\21\237.'\343\337`D\264\232\217\340\331D)\314\231\263\252\211=J\33\36?I\304\237\200\367\347a*>7E'L\323D\344\36\223(\274\17\326\b{\353\264kB" - "\30\33e\346\302\302\\X\214\215\306KG\21`w\222p\242\304E&Z\353\210\304 \316$>\263\241\304l/\213\314^.\361\235\221O\334\63\t\211'f1\361\322\222\213\6\216fH3\240F\226\345\33\312\64/\213|\311\220\356\31\31,\322\215A\36\2\351\271$\222\27\6\343\245\70R\216\367\205\302\22\371\351\324t\371\361qr\254\235$ovR\344\327\35\64\371\363\31\202|\352a\310\337[\20U\324\312R\25m\34U\333\313S\255}\2\325U'R\375\301\24\25\314\241\223\241\246p\277N\30\70C\375dA\324\375\2\66\356\311\343\250\247~\5\323\177\253\231\237\360\bXg\206\232\63\32$\272\330d:)#\352\247f\222n\7\21\71\202,\32\333\21\177\67\300\362/<\34\377\252E\20*p\21\352#\33\f\217\71\337+c-\300\352\231\310\177\4\220\340\351e\205\16\234\23|.A\270h\24\201\6\262.R\340B\270\22\64H\302\235\246fm\b\204\207\70#\274\262#\321\354P\312\3\343\60{\251N\361p\242\325\310\3\71\t@N\"\220\23\20\23\1\364%\347x\302r:\0\366\61b\351_\246\71\340\23\36\370D\20k\275\271V\325n,\261\21gD_\b\211\375~V\34z\23\346\304\233\177\301y\361\273\277\343\202\370\354MXLZ\336\204\217s<\1'Yq\212L\236\256\242\222\365\247\351\244\247\234Hv\226\62\311\363M(\331U'\307\237\34h\344\223Cn!9Z)&\247\213\343\245.\350\226" - "\24\66\222I\316V\33J\263\317T\341L$\177\362\220\311X+\225|\321B\304l\314\234\v\245\f8\233\262{\271T\315\22\316\247Zy\\\230s\211\61\233\22\201\17\230\71\367\304\265\316D\352\302]2\25\210R\251O\33\351\324\370i\"5\333\300D*Q\24\227\357O}\335\314\247~\36\26S\317\200\233\235\20\274\0w\247\346\214fi\301j\262\70\64\221X\250\f\1\257f\35\310\315\6\237\307KM\362h*\321\264\207.\215\340h.\314.4\270\201H\324\376\304\365OD\341D\200]8\353\347\26\274A~\341\312\65\1Mt\213lUo\266\204\255\v\vSaC\332\60y\375\243\251\20\275\231}\203\354\\Ug\307@\214\34zD\265?\246}O\210\310\233{\f\365\24\365\252\217*_\276\356{#/=0\t\322s\\\355\2\0Y{z\260\322\357\3\34\260\274:\24F\364\265 \314\30\271\266\201j9>`\342\27\255fa\261\362D\7\332\240\314\63\213\315V\203Mo\204F\272\21\0\225\rI;\36\225\25\201\221\340C\36>\4k\355\376]\354\272\7\\}\356\244\315OF\222C\357\265\244\256\353h10\311.\376i\214[\34\32\347\27'\307\262y\353\240\243\324\66T\223C\341D\233n\271D\2\n3\4r\221\374\277\304\252\263<'|\307\306O\24\363\30\355\33\227\271fq\346\6Z\214\315\260KV7\267Tb\347\227\252\213" - "\205\245\16\277\270t\301\241\316\26/\350b\275T\227\372\256\63\213\223\223h\351\312\4\273\70\64\306-\215\315\34On\207N\252\200\71p\241\t\270\320(,M\267(\270t2\330\305\"m0]\214\322D\305Z%\237\35M\352 jQ\30\301S\256G\227\300jKw:\270\245\37`\214.=\371\373\311\\P\231d\331\4ch\331a\262\350w!~\254\222\312T\354?\332\212\240`\230\345*?\2\346c\227\375\247\270\345\253\70\17\237\v\313\337D\305\345\307w\301\203,JV\314y^\v\21\303\305\230\254\223\22\272/\216#Y\345\257\70\24:~o\33[\251\362\223+\255\70%\366\227\323+\275\325\304\312\345n(\274\0Z\31\356e#3\334\312\370,\277\362\345\27\302J\354\206\270\232w+\265z\332\235\323\321\253\36\247[Z\35\251\254\260\353\360\bZ\375\322\f\205\306\257\376\"\v\34\6\363Z\323\6\254\222j\307\344\t\25Q\346\370\352s#\277\226o\22\326\234f\360\232x\267\235\221\271\203\202\246\242\241\251\210\265\352\267S\314\232\347m\b\255\371\337\206\331\265?\275\235\346\326>\37\347\1\33\1\342\6\71\231\v\212\4H\326\356T4\227\345\212u8xR\254@\323Ab" - "\355\307\26f\355a\v\240\332\312\256=i\203\271.\256\347\365\344\266T8\274\356\300\354J\245\26\351\341\230y\25\322m\254uw/\263\356)\203\26\374cP\321D\365:5p\35 \236@+\227'\343\245\23,\346\327\353gf\275\303#\254\237oW\313E\317\20\26V\17\216\326?\361+\206\36\26;W\242\353q\360\257`\371\371\337\24\370\327o\277\231\342\341\237\351l\371\n\362\266\242\311^\321\277\316\60\221{h\375K\234[\377\351/3\374\372\223\277\317\34\357\26\305\332G\356\261\33\6/\267Qx\344\346\67\252\217\252U\346\323\331\231\"!\325\340\4[\215a\1\33P\237\212\6^\224-\274z\267Zx\365\264\317MD\32\342\245\36\30\\%zXmtv\313D\311\303\377\302\306\371Aq\243\347\222\352\322\243\23\\\17\263q\265O\335\347\264M\24@\371\27\347\371\215\221va\343f\207:\241\234z\34,n|\357Us\366\200Q\344f\332p\373Nb B\16\335\244\332o\323\276;9FW\215\234\25\232\236\66\36]c6\213\202h\263\246\357\243n\225\321\317\36ga\332mv\265wH\233c\35\235:)t\177x^\275Y{\231\313&\354\311R&\1\315\263\371c{\247\264\371\262\243\275P" - "\273\352e\212\322\276:\356\251g\266\334\215h\253\263\201\335\362\66\361[}\356\343\236,\323\21 h\353r\t\273\5&\37-S\376\17\347+\b\344NY\321\221C\235\252\242;\303l\315vh\34M\310G\267\276\313\63\70\64_$\32a\266\236\340h\353\267:h\204Y\350\203/\262qJ\333\346\331/N\336g\373\224\221\334>g\246\266\257\232\350\355\33\26b\373a1\263=\207\243\235\202J\220\207U\334\216\275\226\337\251\202\341\210\301Y\20>\25\342N\233M\346\363\235.\330\376v&\363\v\355:Y\313\362{'V+\356\274\254\2\64\341i\216\31\323\322\225W\222?\\\20$v\vpf\267\334\217X\253\203\335mqr\273\27\352\370\335^WvP\251\363Xw!\360\263 \311v/\277\35\343w?\377\337\361\177\\\305\334n\370.\277\33\215\n\273\217\277\4\307\304{[(\b-\22\264\30\5\272\214\6]\6\305\374\61\334\350\337\232\230\335WF\264\347\62\261\62\360{\35E\6I\26e\232\25\244\\\201\353\312%\330\334A\260\215\301\362u\35\226\257\361\343\272\7(\353\\\312,\30\250\3\232\310M\202X\235:\364\353\342\245Mrc\37\357\255\26c\236\71\337T`\311\355\254{\1" - "\234\335\273l\342\366nZT\221\0\372\261\214\307\312u\305\311\336w~n\357\247\20\277\367kXL\331\217;Xo\v\252c\"n\205]\374\16=\322\332\267\65\"X|\330\375R\234\337\257mR\336\245\225\303\316\2\313\331\353\345\345/1`'\207\352s\373_\244\213\211\366\242\375\306bv\377L\276|\373\376%/\367^S\350\274\276\235\331\277Z\2\332\n a\241\34\367\307\232\\\322~\244\330\240\257ez\270\375X6\301#[y\332\320\337\253\262\66\261\377\322\305\34\330+\321A}\23\313\17\342\334AG#\177\200\237\22\16\6K\304\203\221\372\354\342N\35L5\320\7\21{J\216\356\340\333\323e\322\241\261\22+\205'\313eU\367^V\211\302S\320@\347\270\303\312v\376\260\243C8\274\330\222\5\330\223\35\tV=r>\274\346\310n+\332c\341p\302\305\34\336\302\224\345\360\60\352\342\17\177\301\344\234\16\237\273\20|Izmsa:\312\262\33mt\6\300\266D\17!\20T\b\4\25\373\332}\364\66\314\261UGa\36\325\37\311G\262?\267(\321\"\32\364\272\325\312\276\366\67k0\224B\266#E\232\242k1\0\34k\235\237\250\372\7\262\31\26\267\63\374\353+\216" - "\24\374\257\266w\247\366.\30\265\61\352\b\302\21\366\177\204Z\345_\33\333\233\217\1\205\b\220\220\241\320\"\245\21\2%\267\220I\232\vu\201r+X\241\356\275\356\271.t\231_I2\372\341\7Yw\305]RZ\334\251\353\276\336\377b_\357\63gfH\273\315\341\276HC\207\341\214\234G\276\362d'\265\253\312+B\256\362\260\247\242E\f\21\310\202\21\33\200\66H\260\312jIH\255\fVV+B\252\27@\316D\23\5\216\1\363_\365b\341\21#0>\202\371\257Kv\372\277\276r\260\360\315\301\267\242l`H `p\245a\237\304\220X\324\215;\325Z\270\311\267\240@\247Q\35\354\314\322\206;\355\32\31\nP\235\245\25h\333;}$'\354-\343e\335\20\272s\b\16\233\360\354\20TX/'1.\273|?\360\277\64L'\247\333\233sE\20\376n\217\365\"\310Vj\214\335\344\1\270\311*m\250\263V\23\356<\257\23k2h\nl\347\215|\256\363\313\324;i\371\35\235\277@\233\350\322#+\304\220\327\332\225[\37\354*\252\tu\221\226p\327A\304\341\341G\16~\344\341\260\0\277\276\223\366\277\250\4u\235rS]\27J\30\342\215R\200\311my\343\321\233\20\25\34\363\233\246I" - "\327\67\352`\327\217\332P\267F\23\356\66\353\350n;Iu\27K\342J\350\363\62Q\237\351&+\204\356C69b\273\353\22\332\272o%!l\215W9t\177\252\65\320\204\61\326\323\310\204\234\304\302$\221.\320\335\277\24P=\252,\246\307@\276\203s\210\223f\223\335\242\67\30pJ\236l\250\234\221#\313\30\267j\336\64\322\177\351\327S\177u\232`z\262\313\24\0\362\6W\352)\326\4{\366\350B=G\264\341\236\232\204\226\233\244(\21\366\\,czn\30Y!\207\340z\276\66\361\275\232\24\241\327$\213RbS\357\315N\334\22\351-KJ\306\326\b\0\326\300\6N3\221\262:\266\367\203:\256\367L\275\214+z\257\326\325\247n\"\335\365~oQ\264\7\276\367wB\350\333R\200\332\31NF\374\212\356K\377\232\357\333Z\213\336D\311\37F\201\217\202\232\22Gm\351s\373C}\345\316p\337\61\207d#\30(\330w\264\377}\347\234\\\337g\251o\342\215\216\276\357\vL\221~\275\312\202}\226\376\\;\325\357s0\375\307\235|\377E\267\20\251*\335\200\200\361\365\274\376/\341\257\276#\251\277/\262\61 \366\304\1\257oI\332\375\277e\5\7,\231\241\201\202" - "\355\341\1\217M\212\nj\240\22\25}\0Iy\0\222rc7-m\335@\203We\302\274\31\20{\241\366\227\203\340\353e\341\36\300,,\220\323\5+\273\b{\275\33\64\307\260\t\217\30\270\361\252\211\23\377A\30\17\342\25\257\67S\3\237\371\244\n\344\205v\345d\210\22L\22$\202\351\244\343\341#\4\22\321\346\237\304q\\`\223b\364[ \341\25\257\355G\"\370WE\247B\3\1cx\340\347\275-\203\311jz0OC\r\372\264\314\340>\35;x\264\fI\344\36\241\343\66\331\66X]\210\236rD\337\61\330`wD\6?w\25\245\341\256\65\224\364\267jj(\355\257\65\314\320\326\177\325\262C\5\177\243\343\206\\\221\4~\310\375W\211\302\220\357\317Ih#Ob8\5\364\v\201\362\215v\323\61\234\342Pa\21\350\277\27 \333\31\276\70\370@\357\221D\36\34k\207k\371\250\341\34\271\322\210\0X\254\261\212\26g\n\200n\241\344\355pi\16=\274\317F\rW\32\30\310\f\260\352\216\200Swt\303\250#\333\206\353,\177\32\376\330\31\31\321" - "\35\71\212AA>`\317\200;|\24\341\304*\16#Y$\344\303\6\240*\25\203\300\232\213\374n\310\357\340H\36\21\32)\256\n\217\274\177\274e\244\332O\217\64y\251\221\17\v\230\221_L\354\250V\317\301\61~\324zK\30\315\277)'\321\250\313\t\252\312\231FT\371\225\220\252\253\217\351\62uaO}\313\250\377\32=ZOP\243\327I\6\362\210\5\17@|\373\243\337\350@\343\327\266\215\376\256\226\v\311Xrn\36Z*\376\6\6\254\64\264\331\61\207\344\62\215\225\332\271\261\n\7\337\234+\4\254\33I\215\1\341\244\234\231\265\223\321Z\210V\3!\367\207\230\253\362\t\211p\354\330\21\65\67\326\250\341;\325f\300\260\212\234;\366\261\61;2\366\255-/\326.\306U\231\301\361\f24^p<<\356\257\22_\357x\315Vj\374B93~\223`\307\233\317s\23\306\377\21\237\322&Lde\265M\24dK@\272\264c\202\274<\241\22\337Y\371\375\206&\303&\n\365\304\61\257\22>n\274W\335(R\263-\270\202\63Q\355\300\200[9s\222\67U2M\270N3q\376k1\35&\256\71\270\211kNEZ\215b\353\16*v\245\6\374\305\230\211/w\310J+n\33\243\32XF\215\60\v`\375\370m" - "\236'\0\231\376\v\1\235\215`\243\251\377Lp\321\254\277\316\347\243\266\277\266\n\321\335\177\235\tW`\b\273\1\220\216?\344\362\205=~\360\306|\340\215\371\371\350\276z!ZU\243\224\23o\254{\246\266Fk\n\202\240C\206\242\347M\341\350\365,\320d\351\350\307$\25\375\312\312\300a\16~F\32\255\214)\314j\255E\243\63\306*l\364\7\217<;s71\227\271\233A\262\360\r0jC\327\334D?\277r\212\275[\244\346\340\303\303G\200\217Du\220\27\4y\2\371\v\354\367\35\203Dq/d\223\4X\6,\241\205%d\223\4\65\300\273nB\5;b!\333Uz\3\32\224 C.}\330c@Z\270\205\272\273\227D\214\3\342/\333\204\337\71\376\356\341R\341\337\316Mf\240\347\231\214JR\371\335\32\177KF|\343\237i/V\307\374\243\4\251/\242\275\237\264\311v&\26\227SZ\273\0\200Y.\332\70\5\356\356G\210\r\375\355\65\70\221\220\65q9\216\357\376\352\vNjSC\223[n\205'\267\335\24cyr\367\327\324\344\236tf\362H\16;y\312\316M\236u\360\223\327\235\302\344g\205m\223?\310*[\324\332q/\1\324\377{\260\267\230\32\354W\260\224\335$m\314N[\353~k\260" - "\62\67\344\332\31\366\330\342\16\7\354\24\305\265{;\262U\230\312\345\335Pi\f`^\356U\1M\363\265\356\337\213\230\232\17&\6\300\274\224N\321\7\305\205\334\342\35\356Uip\253\301(\207<8\202g\375\322zn\n'J\302\63\320\367Nh(x\6\6\236\201\205\200\342 \376x\210=\1bP\256\305\320O\357\325%\247!\305'\266\316\275k\366\340\275/\337\v\335kv\204C_;\245\246\274\213\272\237R\314\334\337Y\304\336\337[\302\335?Y\f\255\357\270\20\250j\223\243\342\275\216\373\27]\205\221\373\277\225\270S\305h\227U\236+\325\364@\300CM\351R\230\251d5;\245\327pSF-?\225\252\23\246\322\23$\317\241c\312\2\370|*3)9\375\r\345\71\t4\214DP\236\23@yNj\21U\377+y\324\324\66\33;\225o\340\246<\4?uL/L\325\211m\205\21\327\270\244RC%\260`\f+\364\367~\204\64\1\253A^\307\202\23\217.e4\t\262\64\226\70L\375X\b\244\322\5\v\357\2Ar\262\1\24\311I\0\215v\200\202&\36\16\306-\246\340-\275OO\253%!=\25e\342t\242\252,\276\71\66\235g\246\247\213\322\67\24\362?b\f\323\276Z(\254\247\244\363\361\362\67IO\37\371o" - "\271\345b\355\266\351j?(>^f\272\326\316N_rp\323\237\71\371\351\333\205\302\214\331\365\206u?c/\332\25\231\71V\254\322\343\335=\245k\330\343w\366\200\201n&\250\266\237\274\354\314\245\6n\346R\23\337L\b\1\203\334Y%\nX\217nO\330\353\b\316\\\257\bE\366\214\226\207g~J\207\351?\272\347b#5k\361\62\240\34\260\177\233u\223\273r\213\237\265\221\302l\361\36\71\316g\17^\356\230\375\240fJ\325\b|\356\354y\314+\251\220+\234\4(\340$S~\273*3\253u\277)X\231\37re\206=Y-\221\262\n\340\250\271\300\224%\332\215'e\v?G\33E\21\203\1\247\230]T\311)\306\241\24\303\212\236J\202e\307\335\t\21\64\260p'\213\311\62\34m!H\275\324\316+\17(\355\274\62\354\71\300,\22nv\261\310\311-\356-B\356\205\vG\274@\335Ss\213g41\27\24\223\206\340\7+L\5\67\247\265x\325K\3\270\243\0\334\211\301\2I[ \3O|\304\203zS\310,~\267\213o>%\4j\245\274\242\t7l\206\337\27r\371\1HH\311g\243\226\64\5\334\222\t\0\17!\22\352\245\355\346\354\310\222\327j\212\377`K\365^z\351\274\62o\"\303\177\374k\207\27\216%\313K\327\220\257\242\324" - "\344\f\271]\231-\312\62\346\260\307\2\255\315\313,}Al\304\375\37\v\\\364\262*\252\350\311\330\240\220\341\247Cvk\361r\f\"\375eP1\322\60\373\7\34\234\244\226Sn2\377\271\357\6\273\274\365\26\267\354\252\25\226K\345\211\27^J~\31\261/\373\16\213o\375\317%\351\324\362\21\243\210\r\227\253l\374\362\351<\1\214D4*\234!\277\314#G\225\333=\22\366\34E\367\232\325\202\r\"\37d\234_\252\370\24\356ib\200\333\3c5\233\246\n\234\3;\267\17+h\365m\261\277\275\37\261 \\n0\313\205h\371#\33\263\374mf\274B\4\217i\306E\305\362m\22j{\31\273b\316\343V\n\362\370f\357\306\237\61DQ\307\212\bvW\16kT\6\321\4\256\22M\n\230\331\223\35\212\216\333U\364\225jj\345\202\227Y\371\210\224\346gP\363\301\16\377\0\254\245\0\232\63\0kY\200\265\34\300Z\36`\255\0\260\26\256\211\252\335\312o[R\"\242\217\211]d5i+\232\306Y5:\337\325,\241\337\70D\336\265jq\221\270V\3\343\257z\30\177\65\210v:\6\362P\315Vv\325Mp\253{\f\262g)\265&$\300\64\241\340\n}^\22\\=\234\23Z=\231\32^m\332\332\262z\303J" - "\257~\225\213d\374\221_\34\354JA\271(\343\257\376~TX3\220\33s\\ \346\324\344\306\304\34\305\20X\333f\17\256\271\34\241\265=\316\360\332\241Bq\342\n\206,)\30\262D\260\b\351\71~\36\344Ra\355dR[\373AE\317Yk\364E\221\70\204M\320-\364\225\\%=o\306\"\7Ls1r\326>\204Az/\263\26\330\311\256\375\205\232[\207a\242u\243VX\317\320\311\214\7+\277\241>\314\257o\223G\324\336\206>\353E\5r\\\2q\207'0p\353{\375\261\21\375\67i\317\372aWp\375\203\202\320\372\271\242\360\372\215\323-\201[t\363M\320\225If=P\306\256\337\266s\17\222\35\374\3\253Sx\220_\250\274\306\222\216\7\305zC\344\301\71+a\306A\270\207I\26\352\241\331\4\205\242\224\205\336\205\246\235\36\332R\5\370\216\361\247\207e5\365F\\r<\254\207\1f\237Dqe\341\1pUEC\273\252\251\261u\177E\260\262!\344j\n{\32a\372\206~\370a&\365\60\220\303<\274\r\245\375\fT\6\226pu<2n\337\26y\264\63+;\rO\267!\375$\b\361ho\26\327\347.\27\36\235\317\226\213\31\34\305\305\260\362\322qAN\322\217>.\215\271\65\362)\217\276\260\5\333" - "\213M!PT\302\217~\261\"\347<\217z\234bG7\360\70\323\311=\366\70x\2g\302\221\322i\7.s\217\253\257\362\217\17\234\25\36W\237\337 \317\233\214\316>n\364\211\335\251\367w\351Eb\372n@$m\314\343[^\366\361\227$\7\337B@\302\65\31\246\230\320\363\370g{\370Ijq\vc\366RO\n\n\231'\305.\366\311A\7w\205\344\237\324\330\205'7\n\225\242\347\336\224~\253%`\232\214\300\243h\314\2\200\224\275YE\20\b\"\342\202\365\201\1\n\263O\276\335\316=\371\325\304?UG\235\302SC!\"\tn\32j\233X\204\236\346\246h\"\342<\243\61\36k\202e\0f\26I\212\216\236\6j\370\264\250xW\344iuI!\266\366=\375\61\203z\226`\0\353\224\210\353\327\234\4\235\303\256\222w\2#+\266\67\177\ruR\34\337}f\261\21o\331\222\317\212\325\301g\244\66\364l\237&\374\254R\327\362\254\306D?\273\224O=\373\\bgp\\)C\360\353\66\70]b\35\250\376\244\301Jr\324\334\61]\1qZ\211\233OH\232J\363S\317U~\204!C\237\37\223\27\221^\263\0\34'\356\275>7\331\351\347\205\16\352\371Q'\363\374\252\213}\376\345\327\334\225\257\340\212\274" - "\334gR\360\33\214F\203\356\333c\373\367\374\227C\301\27\351\7C/\n\217\206_\34\70\202\252\323E\212Iid^4z\241k\326C\327\254\341\233/\276e_\275\270Ty,\362\62\311\356\210\255\363r\253\61\370\322\225\21z\271\333\24~\271?\253\345eC>\375\362\63\202z\245\62\63\257\222\267\262\257\262\274b,\276\332}Px\265\373P\333\253\275\b;\276:\232\335\361\352\372\r[\344u\202\325\220\216wY\251\327\271^\346\365N\222\205o\16>\377\217Ol6;\7\214\205\177]\224-\274>\355\336HIs\374<>\375\177\214\\uT\33k\233O\202]\\\23\334\2\61 \351\27\222IS\250@\5\273\227\336\32\\\303\352\355\366,\364\203\353\232\71\247IF\17\37\241\353\356\356\vW\327\345\237u\301\335\335\335\272\373\314L\254{\362\346\356\37\365\222a\336y\346y\177\317O^\342\277\357\30\301\211\371:\371\337m\30\325#J\244{d\321@\b\375\333\233l\353\277\65\360W\373\226\277\377\236\2y\256\267k\1*\260\347B\4\17]\301\207\210ni=\257bd\317[Fdc\355\271\213\341=\217\364\244K\371\327Q\310m\246\232\350i\275&@)\247c\1\371\241\257\232 " - "\361\346d\267Q/.\321\363\221\2\247?\322\223\277Z\22\344\323\34\22\316\243\220\236\317\263\344\235\275RY<\334BB\272\300\62&X\313\322\5\226\321\322\20\317\371\310zu\234\261\343e\263\\\30\302\314\311\67\6\264ly\227\357\217\35\17\314N\323\0\305#S\244l\n\316\211X\4\63e${\213\65To\265\231\351\255\275\313\366>\341\304-\242\367S5\336\27\255\242\271o\265/\351\25Ig_U`\260\37\24\216\367}a\"\311\24N\21\325!\241+/l\213\235\264\20\342\263\360\376\b\31W\234\317\303\262\350\376\70\61\323\237-a\373\365\1\256\325H\210F\26\21\206\367\227\230\310\376\327\62\251\376\32\370\332\267\235\30\206\201\242F46p\243\264\220\375\215\321\24\374\312\364\67\313\331\376O\5\327\254\2\377\275Wt\364\377g\226\241\6\"J\350\201\224R\376\261\312Q\v\304\f\250\364\36\320\203\66k\212=m|\340\324;\326\1s\223}\240T\317{1\362\215 }\27\223_\6\307Q\3\320\306\7\336ld\6n\277\301\16\374\330[\356 \254c\240\355\365\334\316\301\210\33W\221\212\216\65K/d\224p\276!\312r\302\320iK\301c\32\356Mc\204(" - "\5R\305m\222M\260\311\60\27*=\363\265w\266\367k\370\240\257k\t[\213\21\37T\362p\5\366\2\245{/0\252`/P\270\364\206\37\70\6\215R\1\343\306\n\305\223\221)\24\217\313\332\224\205\17V\252\311\301:\r5\330\"\246\7[$\314`K\0;\330\22\350Z\326(\307\340\27\321\242x\177\354+9$;E\r\311\265\314o\\V\260C\205*\376K1|\250HM\17U)\371\267x\250\16\f\265C\315y\5>\373&\267\207\17\213\222)\370A\17G\244\63\303\311\t\256uB\246\275x\311y8[I\16kU\302\177\246\240\210Q]y\370\214\202\32\276\254\244\207\257\251\230\341:5;\374H\343\251\233\357\23\7\362p\231\316\217\307\201\366$;\275P\312\360\273b\353\360\247\1\266\221@\211}$\"\320\362\317\6#1\222\360:>\242\270A\376D\236\212\302\257Us\272\360HQ\21;rV\323>R\251p\302\17\307\310\r\260D\215\334\t\326\204v\210r+l\232\\\273\241\2\222%2\360\337I\361\221\247I\344\363\353\211\374\210\227\360\n\332N\23\371\f\204\61\373\310\347\231\274\200\201\233\374\b\30\230\20\260\6h\207f3FC\345\344hf\20\65\252\313\241G\317\3j\17cd)\341~\234\7n" - "\237\201\277-\266\375\3.8\334\4{\376x\rl\372\343\267\274\271\320v\231\316\67\370\35\255\322\201\20)\246F\257+\351\321\333\5\f\260Rl\357\247\0\370\64\60qr\340m\264E\202\22\230\17\353\364\361(\326{\354\214\221\30{\355\236\373\306=\205;V/\266\216=\t\260\215}\24h\37\17\221\360\71#\263\31\37\227\232\204m\267P(^O\355\214gc\326q]\272m\374t\226}\374J\202e\374Z\"\1\264\t>^\233C\216\327\311\250\361\246\24z\374~*3\336\32\307\216\277\357J&\215\177\242rL\4\224ftNDI\225H\362iBm\302'\316\24\222@\336\70\215\214n\23\233\7t\226\5\332\1`z\261\"\347\20\303\315\67\305n\232/\306\317&6Q\201\221\255&j\242FAOUot\276t\r\225\344\324\35\225\233\235\232\372\240\202\235\16)\367b\271\247\343\225\332\370\2]\24\"\375\267\332\6=\177\265\225\273\215\351t\5\214\1\374mkq\4#,L\266\24d\5\4'\25g\305\211@\221y\323\247\61\334-\n\220`\227CQ\230\323%2j\372\252\202\236\276W\300\200\3Xh\235Y\4\310'\323\37\313\262;gN\313\223P#\211\253`eh\275\322\223j\213\367\304\257f\32\252\255\63\r\327l3\r\327\355\63\17\256\2/\4rY\6\fd]I$\30\212\250\231V\347DV\fF\237`/b\bh\246\33\374\26\f\25\221\224\335!\222\347<;\237d-\313\266i\344vC\16\334\215\217\323=\b\344\"U\273zd\265\300: Q\354s\210\276\315\270\202\250$J\276\4\223<`\t\31\16?x\375\27\1\376g\203\314\4\240PP\37L\36\217\27|b\264\274C\224\224\362\354|\264\265Ln\323$\331\r)\\\217\231\r5\271W\360\225\16Qp\210M\23l7\204X\32\302\300I\343\334" - "q\236y_j6\376+\265e6\263\220\230\65\24Q\263eFz\366\32\366\62o\252Ge\363\250\331w\24\364\260V\t\203\264\260 \321\250\342\2w#>\vq\206\331\326\22zN\302!K\347}8\346\"\363D\261\36b\303q\326l\205\37\266\271T\203\275\363C^\266\377\227\327\305\370\234ZB\316aA\340\220\f\244\177\277-\200\231\273\30\316\316]\313\20\230\316\316\271\206\374\2\337K\fR\3\370\26RH\341\250\b\334\33\66\317}.\265\316Ge\331\346\323\243\355\363y\251\226\357\304\315\360\334Z\360y\263\234{\277\346K\305\364|\225\204\231\277\31\300\316\327\5\266C\245;\3\342\363\367\357\335\365\355\213mm&>ka>ka[\233\275\65\351\210\fh\227\262g\363\37\245[\27\2\"A\371\272\4\312\327e\313BT&\261 7\342\v\230\230\\\270 \241\240\ni\250B\6\252\220\5\220\0W\203\300\305W\347\332\1,8\26*\243\365\276\27w\241\361\36\261(\256\246\346\315w\350\305\202p\340RT\354\357\276\253t]_\217J^\v\377\1=|\350\211\305\323\30\265xEL/\326J\230\305\207\1\354\342\207\0L\365\360\256G\341H\337\251\t\377\211\332\"Xm#\275\24j\346" - "\331b#\362\204\237\245\30\63\271\224f\242\341\207\377\363>\310%\265\17\303;\277y\204\242\266\332%-\367\241\21Ha\273\b_*\202M#U\b\367\304\372~\234\255\304gm\300E4\223KeJ\nt}\32~\317|\326\306\266\266\n\363:p\21A?J\213\5>+\326Z\306I)6!\331'\313\4\260\17yB\31o\27\3\260\237\5\30\62\27\322\311q\220N\316\201tr,\275t3\225/^\35\5\350/\306Onb\351-\32\243\376F\v[\360\337dw\t\306'\3\310$^\246\61\224_a\351>\206\333\337\227r(\31~\v\304\206\300\340c\224L\217x&\205\34\334\\\372q#\271\34`\240\226#\271\271\236~\251\17C\257\265-\353J\354\313\347K,\313\327\256\22\313\365\327q \263\370Ih\371\241\330\65\t-\267J\332W\304aN\376\20\326\304\323\207}>\21\252\303 \243\377\362Q.\263\22\251ugS\342\20M\7\0\66\276\222\"&W\362$\324Jq\0\275R\355\365\312\210\341\221\70V\352\340\4\7NA\361\307\67\257<\302\70\34F\221r\5\263\362\303\33\354\312gNG\36\215\352\303\61<|p\236\63\0\227\22\260\3b\7\370\352\7f|5\4#W\23\f\276\323\67\355\60#|\357\61-\30\364l\263\333\253\b\223\234B\5\223" - "\234R\215\330>\335|\270@\f\"\304\303\"\342\313`\5\276\232\254!W\201b[5\212\351\325r\t\263\372v\200\v\27\276\346\233\210\\mn&\276\313l!W?.\344\70y!\20\346\323\314\203\b\201\70\351\70tpC\370\17z\217\205\316a\350\316\204\355\240;\303\266\26\236o_\313.\260\254\231\233\211\265R\256KwG\223kU\335\nj\255\246;\205^\273\327\235\315\254\275\337\235\305\376u\\w\\\373z`\236\360\355u\207;\326\23\301<\276^\243\352\26)}?\255\357\304&bC\204\341\33\61]&rCu\236\332\60t\231x\353\303\352\307f\347]\322\33g\203\332\67*\203\35\33\65 \5n<\5\327%zp\205\332\352\252!7#\273n\271\5s4%q\313iN\364\324\334\246Tj\331\314\f'6\363e\377\347\24\254J^5:\347\330\274,*\362<\334\347e\377\215Y\177\342r\17f\333|\263\17\263o6\366b\\\345\374D\361\0\206s\177\3\63\353\30Fm>\256\247\67\337od\376Z\364_\30\273\25\70\202\t\311\6\317\222@\310\323\n\217\326\266\25Ua\337J+\27\20+\37\377\334R\346P[\206\fz\353\274\224\201X( \203\366\255\362h'\302\332\272\226\224\b\276\fY\222\373\33\262n=\251\261" - "\301\345\354p9\200\320\60:\177{\23\337z\372m-I\224\335\242\236_\377\327bz\353\343\177+f~\242\370?\212\331\355\240\377,\346\rt\t\235\333\321o\274\205xc1x\237\212p\340\213H&\257\232\332\326e\320\333\245\231\f\344\254\\%\253\217\352\20U_\263i\252\355\206k\226\177\324\351\210\355\32-7Al\337\21S\333\17%\364vK\0\3\177\305\302?\301\233\313\331\365\266\337\305\70\253W\32\326!JM\177v>\315Z\6\302G\252\335\220nY\nM#v\202\22\310\235\4\320i(\251p\276\202\263bwr\362\255?\322\252l\277\24\222g\337Q\253\271u\376\267\240\237\340\205\220\235S\357P;\347\352\351\35\20\205\376\376\222\202\335\251U\362K\\\340\330\251\323\212\374\215\342\320\345;\f*\252\1(so\344\245m\367K}P;\217\343\351\235\26\330\22\336'@\253B\224v&\261\363^\26\276\363q\"\271+\222Q\273QR\372ya\6ow\314\202\272.dd\205\221\350\63*\340\266\334\371W\276\243D\372\311\23\357&~\225\306\356\252\277\2\323N3\7\\\242\276\207\336av\261\257d\360\60p\1\" \17$\370\62\270H\30\325\235<\23\62s\261[*\307w_\315!wk\24" - "\324O7I\350\337}7\200\331\275\35\310O\220\351,\264\317\335\66\243\314\267v\200_3\22\177-\302\250\275P1\275\247\222\60{W\2\330\275\33\201\2dD\17\63\177\356qr\b\30\217\27\266\62xaK\6AS\376\5\377\323b\317\234\211\70!E\0\32{\215\271\344\336C%L\207-0\35z\3\r}\373\336\247:\307~ XS\367\325*-\322\217a{\37\363\357\b\345\312\6\226\6\"\323\2\303\207\330\277l\357\363\25\275\177\71\213\332\277!\246\367\337\226\60\373w\344\354\376{9\316\36}\20$\345\204\221\203\360\354\304\316\3mR42\331\177\0&g\370\301\34\64)\205\210\"D\257=\327.O\301\217o&\223\307\rJ\341H\204'\215.\245C\211\330i\335C1XJ\365.\375L\341\201\322\307m\201<\231s\"\n\22\356\207\353\263'Q\22\241\317\n7'\204\16\354\262\24\317\67v\222^a=\321\226\333N\316e\333O\256\312\5J\25\303O\232\342\310\223\247i\364\311\27R\346ED\254\253\33\205\373\311\231\340p\346'\371\"\313\71\334x\252\376E\201\306\372\242$\337\366\242&\317\376\342I\201\345\177D\377K\331u\6\66qt[\333\62\20l\313\242\330r!\266\205mI\356\200\221\214c\221\204\36\b\35\354\220J3-\5\223\336It\300*\273\253\305\330\242\367Nz71\275\177\257\367\336\373\257\367\353\365\376\362\316\354\312*\261F_^*\340\235\231\235\331;wn9\367\214\63\374C\221\v?\324\273\225\37\36\21\314\227^\236\371\336\310\365g\275:\377\215\255\340\17\253\233\305\271\337e\350\341\211R\32\315\37\236bg/" - "\260\263\367\335\n\374\205\t\36\315\324\336\354E\211\316\322+T\370\35N\241\4\310\273\71\322\na\250\327-:\360\30\35\374\177I=%/#\361\345<\306\26\366J\267\rI0\205{O\377&^\232\273D\252\374\340O$h\30\36\241\234\f;[q\240ZN\257={b,\211_\\b\324\253\221\366\60\370\253\323\347\206~u\372<>h\244\361\341\237\252\227*\312{\vLP\322C\206\337\3\377\254\321}\360/J\300\222\226\255\224{=\342\200\373\333Y\6\237\205\271+\345eM\24(n\v\201\313\227t\5\377\312\204\351`Z\321\266\314\371\365\21\271u\305\236$\243\360\257\251\16\300\377|e\20\376\267\253B@\241#\6I\2D\346\vMV\25\350\360i\300b*\212X\371 \261\6L\34\333\7\200\315\316\311Q\354\32S\230%\t?\bc\337\304{\264\346I\274\24\343{t\204\245\234\224\377\330\350\374\221p\266Q8g$\210bESCH\245hU\354\232\354S\316\273\235*v\271[4\361\273\bvMk\210\275[\n&\344\233\227-\1\354\362\216\16b\227o\24\33.4|\232\4\"\315\247c\327\312\\A#h\16\36b\3\277h\20\26\r~Tv\205]O_\355dw\33\257v\5\317u_]\35:\267\375\252A\312\211]/yU\354\36\225\243" - "aw\231%\202\335-\271:v?:\312\60\223\274\343F\222\37\357^aD\252\25\354^\223a%\374\346\16\363X\270\233b\207\207\214\31\206\336\265\261\360=l\206\f\30\362\b\241\301:\241\301\306\0M\334\237Iu\276\330\275\215\302\263\373\215EA\364f\315\r\241\67\237\333\346!n\33\207\271p7j\213T\364\26wh\350\255h\217\240\327\311\305\353m\341\316\351\235\221\210\333.]\301E#\275\256\214JI)\237\221\310s\311!\341\35@\357\202\66#H\374\273\65^\355\277\246\314!\264\274RW&\310+9\223\323\213\264\313)\rI\21\20\364\256\30\37@\357\223\16?z7z\303\350}\251\25\177\267e\245!\fJ\365\242\341\b\bz\337\344|\2cb\363\t\366\213\357\24\310\317\345\304V\255\310D\r\326\303\245\67r\231\t\331\63\60\226\333h\240\61\227\203z8\350\64\61(\2>K\"\362\62\66=\372\252}\270\334 7oT\316\350\354\61\26\377\253\265\324\251FA\37\277\261*(\1^\255\325\371'\273\307\325j\362\220\233/niY\31\375\262\227\216\60r\367\317s\204\21\230[\2\4\226Z\25\4VW\362\345\327\25h\b" - "\274\20\213\254Fd\211\254W\275\61\245E\333\370\367\274\64\216\177\327T[\211\0\273\264zT\237\271\203\364\326\365I\314\212\254\332 s\205\63\21\362\373\206,\24\177\367\252\205\313\365\26?R07W\264\353\336\1\4\213\272\224[\323\32U\4+\212\65\4]\371\21\4\233]:\202\35\316a\341iJ\357\330\363\230\231\240\23\355aF)%\365\65\244s\241o\354\3\202\213<)4\v\243\330\70\220\303\216F\r\341fwB\241xw!<_8'\3\b\257\241\360\"\374|]\275p\301\r\27k\204\\A\31S\22\206RX\n(\305\24,\245\242P\205\342\264iP\232\312D\240J\17\276I\205f5\342\265E\322\274\71\224V\337p\244-\225\245\4\212\217\332VYD\tQ\326\344\b\226g(\233\35\200\362\212\271\5\357O\230+\226\0j\256G\277_=/a\324@-]0\337\314>IFM\313:\266DN\226\372\366D\243" - "\312\324;N\202\257\2+\264\24\250\v'\251PWf\223\347%'\322?\335E\232\337\22C%4\323W\225\313\25\25\363\66[l\t\344p\16\6\17=\200\372\\\253\301\226\1\225\310\25h\331f\305\211V\23Iv)\241\25\325\6\240\225\331\202\320\252&\204\240\65Y\343\240\321r\25Zk\t\233>\\$J\21\270Y\354\246\354\v\274D\37\227\302,\205\207\266\260\66;\365kh]\365\354tci\360\306\254F\366\331\323\24\313\6\306\231c\222\341\231\36K\37%-\246\205\215O!\1\241\26\360@\261k\257\266G\222\352\242\246\311\374?1\5h\37\24F\20\311\353\326\21\231D\343g\22\225\237\64\355La\347\263\215\205|\366!\263\212\246P\306\343e:\34\225\231\bc\207\246\266\205\21\231g\242\344\342y\36\311\243b\275c\301j\311'u\262\263\345.\243\32\t\221\265\315\32\"[[\370\266\257\24\305)\22\323\353\230D\200P\233-4s\5\25sy\204\277\67\354\311\34\23\253\71\0]\324\62C/\316\361d\300J2\"aat _J\321\2\275\251\25\320\333\272\204\245*U\251\"eR\0\350\263ZY\370n\325\350 \232zR\221\325\247D[\275\202Z\313$@o\223\263l\210OXd\26M9\215\n\307\"Y" - "\177\"\336\351\31\326\316\323R\316q\350\217\333\2\320WV\4\241?A\273H\337\62\317\17\375U\256\277\376a3Y\375(T{\362V\252\330\63n\31\5\230+\311P\253\257\357\263\355\61\361M\20`H|\4*\316=\305\"\372/\5N\237\333\376\20\316u\267q\234\252\16\216\323X\255a\317\fw\4{\346S\214\367t\n\256~QU\200=\335%\264\337\367|`\227\25*\266\20u\27\363\265\62`-\310%\344\324\265v3\364\323\302\27\33\233\16T\24\277\7AJ'\202\276\262\"\240o\262MA_S\231Q\256\267$5+\25\210\64x\202\350\363pU\373\346\316K\301\7\240o\365t\226\241,H5\315\372\326\217p\322\362\323&\356\320\367F-_\340\355\t@\337{5\354\355\203\361*\223w\205\22,{R\212(BX\374pN\243Y\232\250<2J\4\bR-\314\222\237ba\356\315\36\323\207\275\343\207-L\354u\347\204\372\227$Y\230\17H\375io\6\6\330\16\34\235\337\226\320\202\22Q\23I\251\260|\267D\260\327\323\314W\\\334\"wG\343\233\177\6\"\244$\304\336M\255*\366\276\274T\303\336\367\274q^;YF)\374j{\202< U\24\320_\220\27D\377\244Y!\364\273g\23>\261,\214~\357J.\242]A\377\303^\25" - "\375\v\22\66s\177\27\227\261\177mb\217\25Wf8\262\321\377\212-\214\1Ka\4\3E\366\341m^\24\305\300\224Y\263\37\20\325ae\2\224\21XP\26Cd\4\34e\206\307%\237\bs\221\30x\246\313\224\224B\202\241:\262D\271\344\310 qG\230\21e\fl\237\246\255mMb\23b\33\331\266\31x\343\31 j\311\21[\221\236\214\316\272k\36\5\2w6L\310\323Q\325\213\250\325\31\350\337\351\16\"Z\354\n!Z\305\262+;\267\217\303\265\177Il\275\332\204\330\215\352C\324t\324\372WX\22J\311*' \367\2\321\331]J\254\344\b\321\345\242\206H&\203@t][\344\67\327\231Z\303\35\226PQ\251\210n\317\326\20}#'\202\350NK\314\321\65\270\33\307\23\252^Rh$\345+\214\212\367B\223\254\334\204\251\377$\315!\374\253\221\232c\337(\316}\337\70\316\335nj\216\21V.\366\225:\2\330W[\23\304\276F{\b\373Zm\f\314\363@oG\300\341e\35\255S\305>_\261\206}\263\255\21\354[Z\313N\237(\30\266\302\367\255\25G\345\276\236\234E\351w\v\366\275\347Q\260\177L\"\220F\27_7\335\374\260\335e\370\370l\271\320\244Q\304\376rk\0\373'?\30\344" - "\345\32&!W5\260\277\376\61v1\275\\\305\376\331\216\bK\365\364\237m\254\62&\364pHn\301\260m-[0\31\200\375O\323\330\313\63Q\b\322\302 m\366R\216\262\361\31\266y\345\71\266\371`]\4\7\362\327\350\70PN\350\306\5N\367\374\264\60C\306}8PW?\200\3\215b\342\7\346\346\344\312\342\r\246\tu`m\241N\202\274\230\313\232/{\366\274;^\272\353\225$\301]a\34x\301\tZq^\5\7^kRq0\227\223;h\243\70\35,\267\350\70\350l1N\303\372\304\34qpZy\0\7\37\266\7qpqQ\210\266\273\237\323+\n\343\340*\33pp\235]\301\301\355\325\354\351\335\32\r\207,\216\b\221G:\16\345U\367\341P\211\21H'Fa@\220\272Gq\250\306\62*\321\363_\324\26\6phJi0\330Z\23\n\316\254\365\263F,\214C\336\22\340\220\317\241\340\320\342\361*V0n\235\27\301\241UU\354ts\225\251\60\330\365\333\263\271\t\213*\242\70<\266\270\322F\5b\317\62\16&\34np\7p\370\221\372 \16/\253\v\341pw\203\177m~\230\37\303\n\34~\275J\301\221\254\2u\360)\207\206#\243ip\272\314[\222\306\377(\354\25\304\221\242\237\22\361\n\360\331\220x\226'\371" - "\217\270\265p\344Ag\200F\216\233}\271]\241\177{\277.\251\316\7G\332\233i=\n\267~\260\63\265\322'\205\310}Z\340\336\226zv0\267\201\243\254h4nVi7J\227p\344\331f^\366\324f\32M)\324{\31k\243\274R\353\245{r\30G\266W\263:\301\241\334\313:59\236\307\347\343\326\22#\274\361\210\65\260\300\244\241/\365\257\265\220V\315\202\301\247vY4\300e5\255_\206%2\206\264e\34\346\236\30\17\256<\364\331}\251\63|\256{p5\316m\37|B!\321\216\212\243Y\203\334gG\255\203\334hG'\rr\247\35m\30|*\276\16\222\b\331(z=\331,\201\312Up\264\243\205\275,\313a'O[\330\307V\257~\251\307\23\307\71I\263\256\70\272\263\2\70f5\360\324*U\274\206c\345\305\21\376F\307\261\332i\211O)\325h\304\270P\26\217\265\210\0\346\225b\252\265\253\245\fa\236\260\63\206\371K%\361|f\246Hn{\30\307\226t\20z\326\26\301\261\347&r\340\27\314\201\213\225\224\250\351\261\267)\206\307\307\264\4\271Y]!\34\257\230.\320\60\70\356\66\234R\34\237Y=\22f6\330\331G|\230\204\216\207\247\267\207\t\352\66\266]\342Sq\374\351" - "\16Q\365\26|\261\232\f\206\246\r\323\236\262v8\276v\2\337\340\303\342 N8\nC8\321\342\60]\352\16\340\304\222\22\5'\326\330T\234\330\264P\303\211\67\37\33\216\212M\37\300\311\261Y\223\242\70Y]f\225\326\35\330%\376\335\317\311\301\210um\347\32=\220C\2\220\321\264:F\5qr\216\63\204\223\235.?Nn\237\33\306\311\267\347\1\247rg+85n\16Wh\fWh,W(\233+\304\203\327m\2\264\245\304p\375\26g~\306{{\314\17\234>\352\21m\355\241C\265\203QQH\357\25\20\310M\234\252\330!>\342\205\215\365*N\325Tk8\325\314\260\242Ph\262cB\r\274\231\255\5>\24P.\366-\5\230\307\242TN\366\330\346J0\353H6\304*.\322r\v_\341\311l6\330\234cF\333N\355\250\355\303\251wK\223\22\23\70=n\371*Iu\352\216\60NW\367\250\341\25\16\r\247\335\342\5m\322\270h\247\241\2\351jDvv&q\303\25\25d\342b>\335\326\62\34\350)M{\342\22\t\273\b\335\217\t\277\70\201\71\226\21B\306f\225\34\213\304\351\316\206\0N?\333\24\304\351M\215!\234~\251\71\226\24\305\351\327Yp\364\272S\375\263\\\226\4\275\357\216\374YA\235\216" - "\63\17\324\213\27\2\257\3\62\"gg\306\265L\215\222z|J\226\f\354\220\204\371/\262J/\232*\6\316L\347\276:\343\343\312\24\213\225\221Y\342\203\363\207\272X\32\62\324\71L1\342\224:I8\263\334Ke\37\233\267\24\267\215\63Ov\205\377~\354\63\342z\1S\245[)g\322\300\232A\302\213\63\335n\rg^\251\217\60\n\223\257#\262\266\300\304M\320\203\312\204\70\373\275\305\355\312\340S]\346fT\355M\222A|\b8~\357w|\34\346\203\337\361i8[\360\373\276\b\316N\372\235\337\363\351\70\353\376\375\337\363\231\340\212Z\216&\243\315\66\260\321\355\234\320\63\231X\26\365\231\277\347\65\71\177\7;\315\65J\222\215\263\236\372\0\316>J\331\70\373\70\17\363\263]MbU\273;\31\250oSpv}\207\212\263/8\371zo\270\"8\227\345\326q.\277.)\254z\316\336\274\"\212s\315-Y\343S\241\251\t\247\257{\31\315x\323g\306\271\331q`*\316-\316\211W\265'R#y\351\351\357\275lK\343\334\64\66\223\216\221s\333J\3\70\367\232=\210s\37XC8?\266\334\337=\217'\1eb\272\212\363Eta\317\327\254H\4\264\211?r)I\246\6\225\254\225" - "\256]\t];;];\332\17\203\63\303\70\337\332\252\212\377hkg\232\325\32\343 \17\211\250\377\274\221\200\266\35\243t\234\237\65\332\264&l2\f3\343\225;_c\221\345\16-Q\300\340Qy\250I\31-\316/nQon\250\325\304/\"8\277\301fF\220\313\214\335\326:\200\363/LwGq\241\324\351\222\373\236\27\332\376H\260Q\323>\301\205y\203\353T\\X\372\224\206\vk\326\31UDEI\34\256\270\260\341\201 .\274\274,\204\213\331\313G\220\270\342\342\304\24\26W\\|0;\366\r\371G\t*\327q\31\202\224&%\314`\327\b\33S\261\17IXa\264\251\234\304Ew;X\231\246\340\242\307\303\27y\324\245\341\342\22w\4\27\237t\352\270\270%.\224K\242\270\370\372\254\331\205Rc\362\243I5qcR\303G\255\t*%\216n{P`\20G:\374\66\346\341\n\201\217\4\222\351\243\245^\266{\246\70\202\217zJuR\230\33\21}\223\275\3\37O\250\255\216\342\343)\331\71\205\351\17\61\203\21r\367\316\211\344\37-\342\267\214UUe\360\241\274\n>\356\260\23Z\310\307\244\241\343\60>\236_\b|\274\322\312\247\327\225P&\255\32>\356\251\245`\232\5GN\177\352\306" - "\371\370\215\354\0>\311\267\4\361\311\244\234\20>in2D\345\223\5\365\300'+\32\24|\262\245Q\305';\235\32>\265p\357\177:\316\255\343\323\7\353\314\352?\233\374\316\327Z\340S\267\205\223L\331t\371\252\324\2w\32\261\0y\34\f\237\266\232\6-iS\214\251\374\\\n\22\247\364\256\25\336_9\342\66\31\271_2\214\225\376Q\6\270\65pm\305\324 >}\264%\204O\227\264\370\361\351\323uTq3M\307l\360);\35\63\252\71\257\251\346>\335:\232\216\231\230\244\31\323\312\67cZ\351_\21\237\356\350\341\204\337\333\21\71\372\300\220Q+n\226xH\271\320x7%\360Y\276\270\305i\31\223\226\313#\370\314\266R\307g\345\202n^RS(\256q\250\244>X\310=\355Q\367\373\366Wj\367\262\64\257a\241I/C2\301o\273W\244\242\337\314\265\34kR\22TV\231\224\4\361\353\"\210\312la\314Hz\343\2>s\265)\370\254\261E\305gs:5|\366x\327\260)\344N4\302g\235.\252B>\275\336F\3\277\200-z\34l\261s\274\206\317s\271\v?\37\357\324\361y\215\67\316-%\245&'Q\t\360y\233\225\350g\33\313ZK\330\301\354\242\bk\276\330~y\241I\370$+\340\\*" - "\316\366\277[\333J\243\373\317\274\264\272\377\302K\263\373\17\274\264\273\377(\236\373\66LQ[\251X\212\221W]\215\343\320\235c\f\23\366\363\215\26\16\375Z.\337\375\303l\35_\330x\22Z\342\326\350\27U\243\307Js\243Jy[\316r\224r\301\67\276\312w\5\360UI]\220\277r\207\370\237zS\361\304\221\30_\325z4|\325bZ\32\374\271\63S\352\267-\214\252v(\345<\215\226\322Y\214\21\267%\216\242\277\333r\242\212\303\265\317\344p\213*9\334\323U\206^\372\352%;\202/.!\271|\253JP\254\221x\376\352\335b\216\367a~\337\260I\34\305\327\243\304KKt\226O\354\21\323r\226/\317\327\305\355\300\327\223<\n\276n\232\240\212_\361\252\263+\235\221x\316Q\227F\25z\302\67\67\354" - "`\343\207]\312\277\324\70\325\223c\352\65\252\213\272\b\276\236\337\240\357m6\213\271[\6\360\365bw\223\264r\31_\257\363\262\217\35\274c\16\337\344Y\325\340\216:\r\337\224uE\360M\213y\376\273tay\313\v\237\361\315\334\256\224\253\253\345\17.\23\274\216m*\276Y3\364\34Gy~h]\204\200\f\235\200\214\304\375\33\370\346\375,O\332kv\314\214v\275\212o\355n\r\337\66r\246\337\316r\352\370vI\314_4\313\234\323\264T\351\33\363.F7\357b\254\213aE\362\322=\27'\22 \265\266\220\327\370C\1|\273\316\313\324\255\30|\213K#0\204c\277\343\326\361\335\304:\223\212\316&\273I\6\337\65\267\200\257ml\"\376Z\334bH\260\0[\231i\227\244\1\374\335\261\61\276\353\360\244\33cb\372\61\234\34c\261\v\370\356\t\267L\223\213\265\355\267\64\r\210\32\250\250\250\333\312K\35x\360\251f1r\346A\361\335\372\306\0\276{\255)\310Dfs\210\211L\236\217\203\243K\303\30,.\6\233\262\213r\25\203\225n\r\203^~\235\301%\365:\6\267\30@?\\\312*4\214\250K\23\n\262\242\270\64\305.!\1\305\245%\353\303\270" - "\264&])\"hFJ\317\177\323\375\343f\373\371\307\177\242FJjL4\22\0?.lO/O,\370\66ijOT\231\210\316<3\247Y]c\346\64\343e\317\206\367l\250~i=8\321\313\t\367\237\212?C\231\274\227\353\262\65\7\270\364\206E\301\367\226B\25\337\27\333\65|\357(\215\340\373\251u:\276_\340\356\303\367\317T\230\235\231eo\370\376\235\321\25\234\205\325\316\243k\216\21O\265\33\247\370\34\177w!\257\210\216\347\267F\6\244\31wN\37\220\26\311)\312tJD\232\17\17G\244m2\226\70\fU,@\367\374\b\35\333\341c\325;\200\241\6\226\333a\350QWV\372\70M\267\341[\355k\27DbJ\354>\240\312\270\33Y\31s#\217\70\362\303W'YM\270\314\320\252\231I\227Ne\256\314\275dV\361\245\242_\206\66.\r`\350\265\25A\\\316]\25\302\345\222\345~\32\207a\\n\360\0\227\333\327+\270<\253C%\335\265q2\\^@A\277\334\345\214\335\363\212\313[6u\313O%\246\30Y\321 \240\34\302Qb4\251\303\254\340\315L#\342\345\220o\271\331\250\205\215\232\177D\325\305\25_M\242\310\256\316\336GV\7\26<\21\254\357\nM\357\24K\301:\201\325\254\23\350d" - "\235@\27\353\4\314[\371\270\v\257\214\262dGq\245\330d\21\221\6~\332L\247Df\275_\251\365\1W\246z\214[Npe6\355\212+\313cvE\304\70\365\312D\246\237\224\323e\303\231\376\311F\35\240 ~\305\225\265N6\332\324\314Fo\266\260\20\260\316\364\203 \276\b\256\346O\231\232\311\27\240>\341\267\223h\203X\365\"Q\205\316X\220_D\204\362R\271\305\216\316oUp\325\353\242\303VI\207\255\70\206\330\235\70\2\375\33\337\177\233x\340.e\233\307\235#\356\264b9\370\60\270<\245\340T^\26\336c\346\315\322\237C\335K)\357&\261\357\360\315\337U\223\223.N\235LV#\305\254.[\221A\275\340\352\32~\245\253\33\332\342\334gN3\340&-\327\305\325\27\275\214a\304\n\376\342Wr\214\260x\243\255\35\214\27\v\203\71\237\353`\345:Tr\35\34q-V \273\323\227\v?P\327\212\70-\246\t\tIw\273\202y\17\364\360\265\365\365?\215\346U\300\361p-;G\37\266\321(\206\204\270\211\264\347\265\302\234\254\364\200>\\\253\250\b\343\232\317&\352\241h\362qS'\227\205\321\277]\221v\315b7R$a\264\375\322L\227/L\254(1\37\63\"q" - "\326\0\236\33ra\303\265\225\36\276\323\263\v\200k\333|\n\256g{\31\17\254\327p\275xQ\4\327\353\346\353\270\336nn\265zQ\374\210\353\213F5Dq}]\276M\352m3\364\67d1\317\244vU\16\346\245\224\33\211\232\340\233y\244\234\344z\336\20\351\7\325b\226&J\r\311\33\23D\253D\t\262*U\35&\271IZPf\371\0nL^\266Rz\333E\300\341\311\b\207\352Pq\343\221\347\370\312K\315\275\211\33\317<%:NY\352\33/\331\2\270\361nE\220\66K(\344s\370\277&-\7n\346\225\210\357\317\370\360\245\211*nV\232\25q\270YW\240\343f[m_\300\61\335t\332\255\254\211\243~\377:\227\260y\371\251\236D\260\22_\347\340\213C\265\1\350\257^\232\34\304\315\271W\26\205ps\345\"\177\250\272\214\243\257\253\6n\276X\255\340\346\33\245D\325M\247\235\330G\2z+\273\211\30Mt\334\32\63y\27n\25\271\314\232<\1\333\227\261\323\245\271\231\204\67H\272\342\245\337\t\23)\31\21u\253\222\207\336\255F\36z\267:V\306p\32U\2\242\222`\200\71\357H@zn\315\177\224o\270\"\35\7\214T\376\242o\307\344/\26\225\223J\323\255'\274\300\255g\v" - "\4\206UR\331o\234\23\267\266to\32\237\226\\<\226R\272E\267\23\267\307W\363\200i\321\367\67\24\366\341v\265 \202\17'\223;\30\260\347\70\61w\245I\314\355\307m\17\345\342\266\317\243\34\335\346Uq{\201\235=\255\261Ep{k\211\216\333\357\v^+\374\350\366\342\7'\324\62\312\370\340H\370\364\235q\342\324\30Om9\221\222YCm\31;(\303\322\204\33\356T\366\204\21|f\207A~\fu\341\320$\35wj\354q\223Mz\363\300\375\352\333\233p\277\372V\367\260c\266$S\236J\237i\37\216;x\342|\357\234A>gP\314\31L\344\fL\346\0\63D\237\26\223\207;\323la\334yh\34pgv\231\202;\v\313U\334\341\204qg\315\244\b\356\254m1\351kts\272R\"F}\246\241C\330,N\204\317\26\322k\353qg{%\307y\327>\f~tK\201\222z\205G%X\247F#N'\356\1$%\215\357f5\4p\267\240>\210\273\356\306\20\356\266\64\371q\267\315\35\306\335Uu\300\335\365\315\n\374\"\236uw\263S\303\335\267],\205[\256\277\272,F\205\213{\23\34\366\304\7\241\270\6(\252A\212l\210>\230\b\250\350\24c3\207\220\360\303&H\261\302\367\346\273\200{\313\362d.]_r7" - "2\324\233\212{\235\23\f\324Qs\246\333]\376\245f\370\376Pd\210U\3\367\66\330c5\342a\373\220$,\201{/\265\361\355{\332y\306\307\"6\367^\256\324p\357\235\252\224b\246\206\276\fu\353*\356\347\24h\270_h\272'\315\211\241~cy]\0\367'9\203\270\357t\207p\177\6\67z\25\325m%p\177\225\303\60Di[\220\274\250#\202\373\317U\353\270\277\325\26\317i\25\244\277b,\6\fK\r\35KB6\276\60\356\277V\316\301\336\21th|\305\17\v\"\370Y\201U\307\317\312\212M\246Q\325\376\177lY\351b\33\253\222\346!\346\1\370\67kN_\311\316\66\377\264x\313\361v-9\231\271\377pwI\342\232\6\r\320vt\236~jA\270\263\234\223\250\213\202n\240\252\370\352+\362/7\341\5\364\65lr\363`\267\273\254V\331\304\254\356\315\220@q\337\343\276Y\206W\257\352@\221dt\31!O\36\366\367\301f\235\203^\333\354@\235\333\b\352\313\320\357\325\231\317\20\365\237pP\263\266\5\7\321dP\363h\236A]\371w\27\246\7}\3~P\313\241}V\253=\264\326\70=\251\322T\341\253z\242\371q\302\277\242:U\367\316\264\240\347\61\274:\210jf{\265\264" - "\233\215m\7\227\17\372O\333\245q{\326\233\fC\34\253\356c\330@J6x\217\63\251k0\333\1\64~\365\240\356\366\340\365\34?l\375\226g{\337\320\357G\226?\260\374IdU\345\322\373Y=@\36\242Wg=\304-\370\366\300\366A\v\276\200\223o\211\325\316C|5\261k\346\6\67>\326H\203\325\363\320?\241g\242\331\200Z\37\366\240\215^\201\317\370Ul\343$\342@\226\304/\367\266}F\277\350\273\247\177B\213\315!\313\354\245\215\36cg\261;\345\r\362\24\232t\261\63~\v\370u\207\343\240\323W\31z\374\320o\365\342pz\261yL\240\226\61\354\177\34\300*\221x\374D\36Sy\234\310\343T\36\357\33~|\224\326\207\346\66\344\35Y}\225\303^\255\\x\325\253\60\370N\235\233\224\213x\214\314Q\364\276g\277AL\352c\225>T\351S\225&ER\323\252:\251\322i\225\350\313\372\334\331\275\30I\304\265u\231\r.\22\367\210\270 \237\304\261\334\\\233\301\267;\364\242s\352\306\354\351x\345!)1\223Z\204\366yos\335\354W\v\257\342K\226\344\323\327\306w\330\251/\300D\365m\7\316i97\213\320\367\203\267\255\311\66\240\37\234\331'\365" - "\200_\204\234\324\243\377\247\351\217^\313\273\221\347.\6\217'\2\352\31\\\207\355\326\201\236\rhh\353B\376E\321\314l\224\31\305\36\17C\327A\24\203\227\206ZG\343\323&\304:\345\"\270\20\245!1\274\215\354\263\325\16=9w\270Jua\5;na\310\321\70[?\0c\312\214\61i\301\362\274\206\25\1CC\260\233\222F3\340\374h\326Kp{\t8\224:\275\352M\314-\316\230T\31\231\203\276\205\214s<\253\207\301k\205g\\\316\362l\350l`(\277\f)\23\346\266\331\276\230\214A\266\263\370\255:\357\334\370g\tg\226\304^\2\327\6\r\340A}3\26\215\t\373\20\263\0\274B\27b\204\234\33\376\360\352\331\356" - "\213\201\233\373!\355\32J%\2U\30\306\230\70^\300g\262\312\237h\225\6\375\225i$\365\253{:w\30\272\275\70\254\66\313*\306/\240)L\367\64\344\334\254\330\242\264\220s\376\275\344\337\v\376\275R\377\vI\335\6u3\270l\v\216\227tB\317\277\310\20\350\323l|Vg\337\367P\266\364\245\232\343|\302F;?\221\307\224\37\22\335r\270/\2\37\25m\275\344BR&AY\21\321\357\263\256\323\63OF\353\206\26H\304>\212\63}c\34\34\345s\350\251\365\315\270\347\267\4\241j\202`\361)\260\373'\214\65'\232\33Sn\234j\212\201\202\17\262@Zk\242\20P\367\21^l\30\222~\263\376-|\317o\315J\33j\370\275\206\202\250\372&t\240\356<\374\320^B\37T\31\334T&Q\3\33\217\321\236\351\310\3\244lb=\336\222\4\356m\312\1\261\365\335\344\203z\374\313\22\300\344\355\200oG\363\212j\350\354\263\315?\34\365\204q\371\327_!<\33u\21\301\233\16\217\216\267\33 \4\355!6\34\230\245\247Y\36\274A\b\0\305\347Cs\"\376G\b\275\276\33\262\bW8\27\275gh\313\"\311\372E\226\370\27\271\330\376\22\63xL{\323\202\22\300\242\255v\241" - "\347p\327d\0\221\36\320\211\326\243QX\227(\376\320\246\34\272\262\241\221\315\257\274&\16\245\304V\264\334\200\6\325\253\66\6\307\354er/\306\236\226\347\335\236\263\306\355\320\23\30\353;_S\374\36\240Sl\\-\203\70\214\377V\335\211\26\16Y\315r6\4\342\246#d\274\304\215i>c\"\312\32\215s\204\322\5\310\213\371+Z\374\254\277\tQ\bc\322\327&A,r\1JLm\246\63Qf\227|z\35^e\"\22d\362%l\300'P\262\t^\312\22\262\261.\251\325\253m\363\216\335Qdq\207\340N3\342\225,\237\36\201}\t)[\317\71V\343\37J\342\67h\234\254\215\276\245lM\321\262\60\276\5\367\233\241\215^\354\206^\226\203\335m\4s\\\35:\257\64\205X2\326\361\361\317\201g\21\244\27\376T\301\267\251\326S_\302\20\t\310e\347\5\61\227\326l\203\67dw\331\352X!\373\255\232\302G7?\253d\330\2C\335d\t\226{\210\211\373k\300\341\n\275\331Bl\306\303\350\63>\240\r\332\324H\350$\f\314\224\343\320J\203\34\222\332\20!\251\63\223\16\315\227pH\231\217\301\347$\274?apD\323\356\206\fLD\336(\t\5b\345X$\24vaZt\206q\354\212\37[\372\312r9']\347`\362@(\37\66za\272\316\302\216\262\312\35\235\177t\24nd\23\242\204\202T\325\325\205\227\306w\262\336\302\23\70\322\372=\5\315\316\36\357\33*K\236\17\207\342\245Z\322\216\232\262\241yp\31\35a\221\252\336\207\222\35\331\36\270\20!\236!\242\321\367\7-\304\221\206\260_\324\32\234p\330\333\360b[hf\335\v9\273\23\36h\201\344\272rr\242\224\365\25\313\305y\24\220\346'\225l\343\226l5\17~H\32\313\177\202\26o\23\342\236E5\375h\356S\377\323\306\220\222\372\n1\247\35\232&\252o\340\332@\203B\330:&\315\315\243wT\324P\265d\361\270\341\244\246\203L\"\206\211\333\24m\301\236#$\353\373\311\257\252\251\0\254\304\62\261\263\241\247\34\260\225h at\265@:\221DY\310\234\16Q\37\61\265\216kF\343\226f\273\205X6 \234\257\254\204\323\357\r\362\356\343\221\302:\302\31\71\316\302\v\270\\e\360\327\363!\347\340K\31?V\215\23\224zKo\223\221|2\222\247\352\222\226z" - "EnA_\321EB\260>\253\23y&5=\n\247E\30\321\335\21\23N\352}\351o>\26A} \201U\237\212\212hz\204,\341)2E\256HbR\221\253Q;\330X/\220R\33t@bp\22:k\246V7\357\246\247z\361\307\354\217o\177P\321b\6\227ua\316\330wrJ\333A`{r\302*\276\332\24b\rW\212y\244&buU\253d\256\350\22\346R\v^/)\275\316\345\365\242:\316\203\70\350\361\275\202,\205\314#\230T\30-\20Z\226-\246\200\250\25\303\307\312 \362MG\362\351H>\31\311\357\325\"\206\241\335\21sw\225d>\340\3L~\313\60\343\317\376m$OF\362\207\346M\376\64\322\177\34\351?\253U\6I#\"\211G\252\262\31)+7\32\241\333<\244\304n;\246\t\37\362\16\242\226f\tV\341'3\271J)\226\273\34\60\63\2[\350\306Db\362\315\335fS{\301t\216&M\245\326\200\230\344+t\235H\35\r\232$\352\257\360ZK0\251-\250\20$\342GKL\4\304\321\274\303\220\322\253\326\370\67\375M\264\242\241\237\244Q\251\347\66\274\273\61)\361\325]\322\34;\374\65\255\204\327\27F?\276h\"#\264\304)1l\216g\375f\217uD\277S\25pJ@\340T\21\300\63\247\322\62Vn\255\365\231\337Z\17\5\211*" - "\336\"m\362\364\374\2yO\250{\26M\242A.\b\327\376\361\322\207<:)Y\\O\306Z=-j\t\277\32m\247\212Mu>8'F+\254\222\33\304\250\22\24\275\24\201\23\351(\255)\267\30\373\236,\335z\231!Z\203\321O\316\212\301\"M\211D\316\325\335\66\202\232\365\1\207u\\\376\241q\205\25\334\333\272\372u\244\35R\356\226\351\305\271$\t\30\212\16\335.bq\301X&\216\\MW\276Z\34&\0\"(M\216LGO&)i\273\210TX\336)\30\333\214\270lNr)\210\277\375>$\233\201\350\211\25\"W\356\325\232\321\275\332\215\331\332V\315\66\31ah\210\36b\251y\357\243\355M<\224\326\n\332\340;l\313\272\244\263\64j\237\334CW\240\22\66Y-#\327T\350\326\177\373\273\66\276\323g\377\256.\303\v\b\313\21\221AW\314S\234\213z\327\225r\t\34\220\217s\20\226\260\264\211\356\321\352\335;a\345\231?6oL\213\246\345T\314\34\206^\243\247\\&X\257\271\314m\270\25\206,\315r\353\235\1\"\7\33O,\322#Mhz\334(q\375\247'\210z\362\213f*\345\26\325U|%2\364\315\331\367\34\241\7\61\315\245e\214\200\310lh\224\356\36SuhU\n\306\375\254\255\271\336" - "\313\316\63\37\177\215\234\20\207\232\330\356\350\346\61\6.=6\241L\364@@\266\243H\221\204}\36\350\316Sd4\220\224Mc+\211\246\f\243`i\350\337\213\210k\220\331)\375']\256\330\345.\262\254SB\17\215\377L\267\321\361\231\270e\336Q\365\264U\327\26\17\206\301\327\202\7ES\313\6Y\222M\235\201{\n\257\242.\262t\334\233\255T`\"\241/\346\21\314sG\232\7hC\354\222\334\334\251\205\33r\273\343\253\325}V\27AnW\277\223S\315\266\332\370x\307\r\231Z\245\32:\2\24%\7\342?\365x\n9\344;\203\246p\250\237ho\35Y\356\22\32\366v\211\304k\343\62g\234\65\263\350\35Q|zy\265\3\241\31?\251d\243%\353?z\202OT\205\250\256\253\264\240\60\275\353\254\27i\275\v\261H\207\"\234G8\30\262\215d,\204\362\b\310\273Z\2\333\206\37'\322\232J\353\224\357\251\353>\bpq`\201\337\242\225\346\224\f4\325\245L\250\267\342\224]pq-\271\\\250\341\222`\252Y\232l\24%L\252\330I#\234nk\34W+z\204h3\374\324\21\3\33-e\331Jj\f|A\340\244\241\2C\306\b\nA7\6\327\6K\303\324\360Z$WK\25z \312\355\324? \6\65QSu\242N" - "\325{\365\241\371\244>6\237\271LBS\345h(\200\61\b\2\206\374\36\24\36]\360\335XS\321\342f\177\304\21\24\253}V\257FH\310\221K\251kN\1DI\270\356\257#o\315\213\335\232\f\365\n\232\257\333\250.\226\201\315\32\203\315\1\33\262)A\305\251j'\220;Q\267\304hJ\"\24\252{Lq3\227!z\251m\342\344\67\272\62\16%M\234y\341B\202\67\325D\237\27\300nJ\323\205 \n\265\62\31\355\370\377}\\y\177\333F\226\344G\301?{\257\7!\251\\\177\345'\305\226\225\211\234hmew\366^H\204,\214@\202\1@\307\312\247\337WU(vC\234\337\70\261\321\335\70\b\364\361\216z\365\272\31uy\2\236\233\366TP%U$v\371\315\27D\252\250+=\31\336\35\206\346^j\373\r~\217\320\223\260T\277)\345\\|\331%`V\17\30G\217-\224<,r\341\206\347\374\200\253\247(a\366\222\245bv\34F\16\216\345I\4\"\312\313u\4 \312\313\63\341+\31:T,\344Fi\36\375[\263\3P#\203_\324\200d\35\32c\312\255\7\306\25J\340.\216\31f-\364\327m\6\341\371\245\221\363\335" - "\357QK}Y\262\304/\25\274\71+K<\357bM\307\224\237^\267\370\376\0I\2\204\376\63\241\303j\3\371\352\272m\216d\25\206B@os\"@v\301k\6\7\200\220\203\225\t\327\200Q\360\351k\23s\340\64\274I5\223\273y\311\305\177\363\371\276\212B\327\17i\322\253\347\34\"\236\214\22\30\23\230\374\325o\v\16\310F\276iy\25Si\324s\343\251O;\320\35>nB\205\303a|_\177l\6\211\25\215\365\271\16\27\370\276\301p\6\324\37\64\335\341n\30\233\361\300\66\2\250\\\337\34XO\22@\344c\274\325Q\7@\237>\340\370\357\220X\350\65\333\345a[\214!\372\66\233\26\242\251q|&\307n\334\4X\333]K\217O\352\nw\205\7\362\210nM\1&kC\f\243\313o\307\252\214\277E`2\33\250\214o\277Z.\346\365\204\20M\301\310\213\272\332\346N~9\205H\nQ6J\6\67\26\227\4\226\227\67\345\352\346\b\374\67\323\70\227\211\273B\304\f2O\5Y\210v\261\26R\324\34\203\256\17`\357\22/\300\25\66\216-\315\3\227u'\277\214\372\204\303\270HE\32^\264\357\342I5\254\35\326\70\325R\215\v!c\nL\356\311\327@\342(\300\32![\16\367s,\204\333\71\350\316\312R" - "\207\225\16k\35\316\320i\bf\32W\271h\236\352\277\203\21\37\202F\376+\257\213\270\314\216\312\65\241Y\230M\200\354\353O\361nP\340\315}\267\37k\tk\332\205v\325&}\323\320\265\355\253\311\372%\246E\243\3\342;:\253\332\302H\"\350\231=\355\32\20E\371\262\25\23\32\323\25!\376!?A\301r\332l\227\274\336Q\16\f\360\27\341\66m\266\265\35R\30\0x\263\360\264Za\300o\351\201\322|\350K4\300\63V5\367=\340\327\227\356\220\207\317\276j\351\302\332\205\225\vg\376\4N8W\240\374\252\201\321\373\22\363\274\24\5\206_\310\331\252\326\344\353\341\65\207mU\0\20\37J\5\215\34\214\nr\\\325\273\63\7\232\336>\367\341\260\243\215\60\224T\277\70\225@\274jW\267\71\374\32\363%\24it\211\300\n,\261Wp\350\302\305\t5s\332\354\313\351\266\317\257>m\25\220(\210\261\70\337\374\371\60\214\211g\227\65\362>\221\215F\331OC)\367\21\310}\330\237a\376S\5\206\364\271\t\340\20\312\273\337\246\230\64k\230d\321\17Ca6\1\261\216\361\221w><\330\306\241\rr\30!/\332\272\336\223\321U\5\6\370qGi\232\356\272l1\277\343\362\247{p\303\"(\220\373\206\27\35\71\67\5V\354E5F\321t#\335\rm4 \330;\351\331\71K,\274\343\347\270}K\222C!?\263\353\361\333\274\371|\363P\376\333c\334hj\6\225\264>\300\206\26\344\6\206\226\202V\320bL\334_\17\br\0r\375m\303\220\337\70\30\211\264^p\257\311\246\365/\370\254}\264y+" - "\244\16\336\260\240\26G|\355]\315\350\352$\346\216\344\260\200`m\262\250\243\310#\224\17\303)A\223\233\242\60h\25\335\30\300\7\334\375l\321^@\246\20\220\30\310\322k\24\307\206\36\203\32c\307R\214&\337\210\263\31AN\177\352%\312\200<\342/\244\246M\31\362\25\334Hi\310\6\63.\236B\255\210PDwu\b \336\347 \305\353\220\62\fuB1\374\245v\363eb\351\361\347\303\30\216\247\216\206\62\312\323\63\206\66d\376\273\313 Qm\343|+18\250\32\316\214\353\357\252@\321\16\333t\272\331\301\377@p\232\61\3\230\71\327\r\374! 31~\r\341\327\210\b\354\202\310\332\364\33\206\255\310\237\371c@\24\325.\325\3\256\372\64\5\22\16\203k!\214\260\34\207{\32`\361w\37\262\345K\27\276p\fJ\363\301\315_\273\360\255\vK\27\326\16\362c\335\17\245\226\211\24\314\61\352\257S\254\236\203w\220D'g'\205\5\347\177\311\242\202\251\311\252\206\234/\226\253\323\246\63\17\253B\242\343@\330\215Wt\231h\220\205q\"$$\327\363\375\307;\17\322M\205\325\203`L\26\26\336\324aI\320f\212\203\274\373\t&\255\232\320f @\306J\203\351\234 \303\334C\365O\263\t\337\344kD\276\236\325\326\263\332\331\254\266\232\244\302\371~\337\212e\314\71\336\f\300\f\237'as\350\21\326\261\351\330\307\244\343\25\212\237\7\26R\323R\256\341\35\365\204\213\310k\240\242k\300\237\215\326\253\303\216\316\22\205\60\21o\212?L\366X\226U\373\\P\r4c\3\71c0\237\302*}\254\375\325[\371\266\67!;\223\373\16\347\351c\36-\303\315#\335\3\22\343\302C\373\f\210\253\37_\275\347\270\b\211\201\67[\250\1\245\253\232\202\236\347$Q\377\352\5I\260\216#\240\62\312-s\341n+h\25" - "\16\21dZ\265\247\221x\234\4\22\3\305\355\247\350R\212\210\232\363\247\36\33S \22\65\336s\tp`\337\30\n{C\213\335\264\274\256wG\275\270\314\23\331Wr\"\253\f\233\355\241\371X^~{\354\307\244\17-g\377\243\332\v\261\360%\34\304\370\301m\b\267\320\325E.\301\316\177\213\vNZ=\200\324/\263\20~\231!\247{\30\v\260\271\347A~\0S\3\335a\337\303\26[y\276\354\227\35\200\222\235\3\244x\240\4\305\61\356\374\330\rcx\377\317tK\371I\t\350\31\356}\31\255\321\371\314\243\355\350&\276\b\31d\272\222\305\367\241?\32\71\22P Fa\334\365\256\203\306\240\242|\21\217\257\341d\275\265e\335#\26\226i\246\361[\265\244\3\314\67z;t\212\217\265\365\353\230\257\303`\22d\31u\320,]\367\203L\300\312\353 \266\62\234h\343F\332\332\65+\355\243\222qa\345\302\332\205\263\23\202,m\204\26q\227\60\240\215g\243x\323\2p0\256I\224SX\263\201\61\322\300'\312&L\16\272f(\1\354\205{\22\252\253\331%\370\237\371\6\347\33!\26d0&T\252$\226\366\256AX\n\355}7\265\313\67%\227\224\36\200\275\266\17\7\250s" - "\\\222\fT\232:\36\234\221\367[\324\246\206\325\313\206\365\313\206\263\230-Q\254\25\366\244y\270\314\312\21\334\330\377\357\227\63\30w1\35)^r\227q\301\364\na\245\232\270\310\32\211n\251\27\223\271\370\267E@v\3\264\234\274\317\307\246o\3\27\331\210\5\6\"\23\331\377ta\f\253\266\335\335\335\263Y\347\220\325\264\230\314aM-\30-\240,\244X!8W\276fTX\210\360\241\67\237\37\f\214\61\351(\236\362\312b\202\301\64\310\205Su\246\241.R\306\16\32\326\345\4\355\321\64\"q\267\244\315\351\214\255\257Kec\231\310m\311\17-\346\362/\31\370\331\266Ct]\333\322\274*@\216Z\220\366\250$\32\260\323\6\200E\275\206\355m\267\371=\214\367*k\212h\330\343\256\36\362\253~\204\375\373c\240#\212\241\310OY\234\304Z\20\65\340bw\347S\325\234\264J\277\210\20R,]X\301\376\277\177\344\225I\f\363\301\240\357 \316\236Z\340\360A\365\16\254\271\333Ey,I6\343\17bE\360'\177\206\353M\t64\\!\371i\257\224t\372\305\335\37\232\r\26e\375\342\256\233\36\275Dzi\nZ(\n\27AR\222G\207\211=:\230\247" - "\316\311\356K\26|B1\271\247\377\21\262\320e\215\346O\217\355\324P\276\251\362Sp\271\236}\n~\235O\302\367\35[e$Hn\307\354\252{\300C\315n\336M\206\201\352>E\317\362d/\366\311fA\336,MM\263L\341\305%\2\60jT\16J=\261n\340\60J)\253\324 4\363\303\216\206&\221xN`\26\371\b\204\34\30\316\243\323b\254\203\25c\306\244\334\321ry{@\225\310?\213P\32*%*\6\237\237\370\30\252k\261\342\235\340\252\363\272y\223\256u\20\220\252\235\324\203\305y\270\321\260ZIA\260t\266\246s\317\336\b1NRE\236\310-\262X\200\230\35\366S\234\301t(\276hN\355s\205\20\v\371U9\r\250X\342_f96\261\344I\226\64\265\\\203\204\276\202\254\64n\225\202\34|E\347\265)r/\354\204(\336\371v\333\251D\v\342\r\230\n\rsJ\223\7\354\226\224\n\353\250}\371\241K)\211\204\324\324u\313\304\237Y\235\236]%\302|j,\326y\345\214\332\255\211\267\244\365\7\375\247\60B\375Hq\377\211U-(\233\206\345\354RO%\232\2\34a^Ce\345\232\r&\332\215\314\64\241\67\271\322\21`\334\0\272e\204\250\234\376\232\226\320u\363\t0\332\35\"y" - "\311s\265\1x\\\207y\362\347\315\275\256q\337 \25v\200\233p\364\275\226\245\273\313\200p\36\265\263\376i\372\227\324/z\nn\274\256\253O\242t\213a\33\16\317\b \277\351|\275\4\370\314\34\30\344\264\202\273\22\24\271\355A\332\235z\333\274G\250\303)4\372\346\271.\272\235\177\320\263\276<\346\211\374{5e\203\242\220qi\327\240\233@\340\360 \255R\210\247\254\344\234,t~\215\207\263\210\b\347s\221\352\214\247X\362].#\36\274@T\370la!u\224OGy\300&\25\65f\363\244 \275\243\312\22\16\2SA\253J\361uO\27\350\31\217\217\202\341f\203z\360\222 \220\207\25BuV\367\223R0,5\250\303\330\25\25\302\371am@\215\315\353\32\231X\275\254\373n\271\70\323R\7\277\"\f\246\253\220\244)\273\270\274E\\cY\254^;\317\330m\305\32\215_\35\33\v\265\256\320\372\315\213K\317\320\350e?\265-\213\365\353\305\352\305\205+4\256_\376\20\32\317^>\22\215\\G'\17>}\352\351#O\237\7\301\321W\\\310\24\247/\203\b\222\242w(\34\306\226\254\317m\307 ?\24G=\334\203\227\337W\17#]0r\372\31\67\261%9o\365\200" - "\237\264\23\365\366\354\230b\207\230\205$\264\230\366\210<\322\1\353\215wK\276\350\314\314\367\265p\311i\232\261\260\357\223\375\302U\357\231\375\272\333\20\375\337\65B \341V\275o\36\332\232:7\246L\\\24M\356\227\205[8\265\260zx\364\222\351\307\224\223WLX\366\260\340G\"HTQ\264\321\20b\33:~{\322\370\272n\343J\252R5\334>\326n\240\225\\\314r\320\351\214^4\350\233\355\1\16\26\20\227\275\34S\322<\4\270\262H\264\325Iv\323\361\234!Q\346\222\312\302\251\373#;\257\344\243h\301\210\215f\323\237G|u\362\b\b\364\220\177\347\364\312\342\370\274\363\317\b\6\67-:Nt\361+8\272\227\325\237\33tJ\365D\6B_o6(\354\33\324M/\207I\243$\270\311\260\t\311\375<\265H\17\62\372\251\242\270\203H6\34\253vr\247\257^\344d\333b\2.\300o`\1\202\220\316\65\357\r\225\332\326\20\371\256\322\340\273\327\315\361\362\65\362\23\357\0\207\335\305B\222p\206\234\236\201\302\303d\216\302^\340\324T\365\207!\354\367\230\376\367l\324\65\264\242\363\213\230\342\306\206\370\351(a\305\321\341R" - "\351\242\253\324\6\7\342\251~VY\224\370\302\314-y\"\266^*\7\2D\212\t\300\355\271\260L\224\336\6\323\35S\322\272\376@\7'm\372\361\256\262/\3\250+4!7h`)\311n\216C\270myUl\313\245\16\253\311w]\352\350\372\232g\327\213\177\215W\354\233\337A\313\372l`6\256\315k\353Ym\345\317\306\313\300\242\337#K<1\300\"z:\306p\vl5\276qt\r\v\237\305w\225\231\367\70;\261\260\65\222\322=l|\314(\36\341A\222\317\221 eSw\352\315\261\211I-\267A\253\200\6$\263\r\33\210\220\334\t2s2e\22\214lZ/\235\346\231\23\300\212-\276\304\253\"\255VTy\r)\6\310^\230\32\316_\324\235\262\243\271\220XOYf\320b\236\323\353\64b\27\320\261!Wk\22\231\372\356c\37\322\r/o\260\263T\200A\6\351\66\276(~;g\337D\302\376\61\272\245Q\260P\337\314\307K\216\332\323\6\233\322\370\67\277\374\345\334\266\26sU`\233\350\37\341\4w\361\241SE\335\342\63\360\24Z\207M\343\23D>\274n\352\303\30\322R\211\376\65H;/\250\330/9\330A<\214\325" - "\373\21\\\274\0\310\252\210PU\241\3\206\221Yv\227\207\230B\327\221q\33\302|\277\270\332OY\224I\22\377\62\66-\303n\220c\177OY3\374\203\62\67\212)\331^|H:\361\321>M\210!o&\t\307g,C\260\274\\\206\26\25\253P]\210\6p\352\261\22k\305\334nv\17\25>\253x\215\23q-s\365\266\301\324ye\312$\365\70\220F7P\314\31V\326\373:\370\346\221\366\351$\314N['zf\237x\36\336\340!\321\341>\"\320C\214\22\256NL\301\266\33\273\0\377C\\LXt\265\243tP\215q\31r\303\256\341\262\342\62\347\262\63p5x\215:\247NJ\317\231\63\216\345N\307\325t\\\3\34{\365\363\253w\315\250\b\376]\325'\332\0\332\344\330}h(\205\354\t.H@^\310\32\253{#\326\354&\357\264\200\260\375\260,J\36\327\205\352\253\242d >\207K\310-\245$\365v\17\312\245\64_\7\272\270\331\27\360\326\325\257\177\27}\2\230\353h\347\6f\22X\320\376\260\270\341\222^\352\210\315\206\202v\321\16\66\33\265\242y\256\37\\\351\306\343K\357w\305\24\310\23\177" - "\320\265\313/\231\255\v\252Ap\316B\346\306\300b\340`\177t\335\216s\247\356K^3\24\377\21\243\325h8jX|5p\372\356\256#\310M\5\372:l\343\276\341\254\"\321[sF\36\256\212\202L\243\1N\fb\r4\237\0\335\221\213\200\376\346\257\31C&x^\313ED\332\360\276\336t\236i\372\26\32\5ai\324\303P\267G\374q\312\364G\212B\232i\224\200\323\t\341\254\314\240\226\5\4\253\246m\275\353\1+x\233_(q\322\22a\306\333\7h\352$\20\335\204\64\312\r\234,\270\17a1\367\302\71\317wx[\372\274\251.\261\226 wt\244\374\313\324\306o?\271\346\305\215\23\243@\331J\342p\323\37|\232\346\253\307\372\35\"tOg\241\65*g\256\361_\244x9\0\226\262\245\\<\357c\351\270B_)\273\236\217\241]\365\256\271\17y\320w\230\224]o/A\237\343J\362\365\323&\r\251:\337x\210\333PxL\25D\340\365.\363b\217\25\305\265nl a\301\333\31\222\340;\177\340\4P\272U\332\21\212&\255\220\342\246\25\vE\231\232!\177\357Z\314zN\257\24\243un\350$5u/9\346\341%\16\\\rW]nrk\276q\257\4\264zF\223\30\214\233\223\216\313\261\342\371\276C\36\bC" - "\32o\356\267\v\221#\36\236\315d\344\216L\232t\257\256\60\353\30j\210i\26\321\346\241\241\202\64\275Pw\30\301\320\36Ef\215\317hI\365&\273\266Wz\311\"\277`V\341\330\314[4B\6\221\377\bh~\350v~em0\241J\311\16q_\210\224a\215\312\316\203\216^\272\37L8\213I\32\21|\234`\250\233H\247\351\232,\263Y\16\223\333U\271\355C\302\205\237uP4\1\32\231\5\377\346\t\24\36\267cd =s\222\371\245Cn\31\263\312\221c\337Z\\Br:\221\252\344\361\270\361`\266\27\6\215l\221\66\307.\2\60\16\213\320\304\243\275a\306\307t\374f1g\202|\353m\375\272'\274\71\33\7\263Fx\4\231\245\234\n+\267,\215\b(\371\222y\246\333x5\307\343\22S%\301\302\67M}oN\253I\32|O\225\v\302\341!5\247Y\341\232\27x\210Z\357\271\250r\306\373\325\246y\251\370u*~\225\212\337p\366\260\234\32\227\251\270J\305u*\236\245\342\267\345-\351j\207\210\0\365\331#\322v@W]H\224*\f\265\210\311\267\33\25=\3\311\247\347,\265\367\rm\246\"\263\233\70^\305\233\241zV\221\30F\322 $\224%\355\301\252\237m\232\37\330\65\3\304\220v\337" - "\252\67\304@!F\230g\264p4\320\220\276h\222\210\353\230+]r \347m\v\270\333\257\340\313\321\345\6o-\270\357o\236U\217\354\223\272\346\364\353\21\30\362\376a\316\36\374\70\250\204\366\305\r\304p\27/_Cl\245\335\270\330\1\355s\266)\227[\336v\35\314\341\357\"\352\23\273\370M\331\220\334\325c\354\310\235>\32\224\3\363\313\37-\361~<\364\243\313:\24\212\304\204\273\62\214\335\326\347f5i\333yS\316\r\354z\30\234\211\22E\36R\252\332\327\244\253\211nJ\235t)\337\0\323\243i\231\236&K\7\341U\266\305\27\361\242yK\300\371\33Cc%\350\377?\217\217\64K\252\221\71\33K\363\261\241O\224D\365\376p\27\302\373_\240\313\270\337f\325nTc&l\254\64W\345%\333\337dfA\260\3\272\276\253 \372~=T\233\36\266\34\266\304\350aq\376\32\243\222\34\260\34\316VN\202\365\302dKI\237\307\7\331(\366l\222f\335\317\324N7\0\371\312\71!M\257\236\244\225\67U\353\372\23\252'n\f3\320N\200`\247\27{z)m\0\32$\301\370\276\362\261\333+\354q\333m'*t\fk\363\244!\236\267\314M>\277T\366.\326\200\6\373\232\21\274\207\323FR\25J\346)\301\356\351\364n\27-,v\354\r\251\267\234|\311\233\347\361\61\204\6;\363\364'\306g\231O\247\277\343\63\336\254T\17H9\243\342\35" - "\321\262QV\256\212\357\301\350\364\317@\242?\332\33k\242 q\210\316y0\321\37\215\63\267\322\3UM\367z\247\316\322[w\372\212i\341\220\233\260C2\241\"J\204\241O\6]\244\316\304\372\324\\\225-\27/\361\4;\215\v;U%\204r_\210\240\325\274e\242g\375\205-\0I\335?i\264\334\26\71\245\337(\241*\32\67\325\363\337\r\224\227\212\346`\256\260D\273\333\252\30V\5m\30n\5\235\357IUL\304\235\227\274\34\206un\252\215q\202BTz\235\65\306^h\27\346i\307\0\bL\310&\374\f\312\356C\222\324\360\b[\343s\2\261" - "\302\345$\340\341\"\322X\273\350\1H\33\364\201#s\303B\315\5\267a\271A\246\211v\370c\342\355\206\276$\243\r\16_5\307\250Ly\332\264\370\341n{\354\336\264\227\265\2\247~?\256\331\322\65\355\300\246\205\234&%\314$\276\64lY\332\354\335\216u\2o\266~\262@\205\312\244\301\247\37\nr\222S^)\243\210\215\253d\270d:2\215+-\237\313\276\376\325+G51?'\272I\332\307\233\16\4\363\314&\370v\21kbp\200\61m\25\304\270'\r\2\6\262]\241\370\61\b/$xp\32\6\3\rX\225\60X\272^y\3\224Zb\224\71\203:\337\375\211\313\20b\374\220\260\361\213f\212\211\272a\365\32\354e\265h\23\n\322^\270\376\1\212\356\341k\233B\346\6g\332\240\216\250'\364\313\221\320\233mm\314\4\324z<\354\247\21\65\207\t\354Dj\243|\214\271\7\301t|7\371|i\357\37\24!B\224&\244\275\1\6\nIe\360\244\271\17`%F;\313\263D\352[Hi\36\230h\266\346\344\344*\276\354\60\235\322\245\357\215\253\261\366\303\37^\377\1\33>`\266\325\233\324~\271\342\n \2\202\325\234\316\220oe\376\233\"\304\236\366\t\256\325" - "Mau\336)\305\200h\363\240|\331\331\276\5\v\321\344\310\r>_\\,\256\217|=\27\354!T\215E\n\b\16\25s\275\6N\37^b9\4\37lPK\246\62C\270o\20\254\360\246\363\224r0+\20\374\37j\226\274\360\256\32Q\215\"\231\330K2f\352\21\36\177\263\241\64\226\307\365\37\277\217\213\377\7", - 27110, - 62130, - 36751, + (const Bit8u*)"<\227\5x\323\t\326\365\257\64i\222\66.M\32\255\245\26Oji\352\305i\213\273\273\267\270\273\224\201\nZ\334a\34w\306\5\6\6_f\7\207a\334y\227\301e\371\272\351\363|q\371\373=\367\374\316\245\234\343\372\367\241\327\233I=\271\241G\316\3|\3\3\23X{R\274\226\272\212\22.R\333+\326\62\334Z\223\367&\233WG\317\341^;\23?@\217\\\363\27\317\273\354\363\"\0\0\226\34\62\375\205\372\331\351)0.\333i\244f1\346f0*1\355\71\365NJ\372\225fUz'\323\62C\366\22\36\262\"\345W\352eL\332\312Co\246\306\243\260\5]\343\221\342\264\nX\347\314m\205\333o\347\237\200\314\227\61\361\260\363^A![;J\177\242~w\223\347S\307\223\361\71\340/\327\306\263\250\204?\207\265\375\203w\330\277M\363\f6\355\v\365\4\341b\341\20\b\34\321.\242)O\335\267\241J\340hA\321O\204\315\261\277.Y\215\261\375\242\236B\277\67\34qX\364\251)\207\vu\261\243\330\22\220\266d\vG\237C\237U\333\0\322D\301\65nk\265\254\206\270\323\352L\252R:.\363\362\221\331\66\336\336>\357[\266\265\221\315\345-\325\241s\264\375n" + "\376}X.\313^\316k\16\5+\270\333\226\204\241\254z,\332\200\205\2\243\31J4&#-\375&\343\377(x\333\240\340I\6W\27\356\327\332.\204\377\177\343\342\37\215C\233>\206\32\f\335\251\271\315<\26\373\177\231<\236\"\327\363\4\22\33Sgq\344}^J\222\326\21\17\250\264\233Y\204\275+\223\366r\305xk\3\365\357\236\274\207\252F;n \26A=\245\31T\375\270\227#q\7\212\210\17A\350\224a\22\251\27\213u\350T\252\337$\276\211?C\207Yq\2\32\361w\272\216S\7*g\203S\250z\304c\336J\337\201\246.\321\233i\360\335\324a\260l_v\33\352p:\356Lx\363(\316\211\250d\313p\351\70\356\370{\234\207\332,\262\374M%F\323\6\312\374*f9L\366\270\221\373o\266\257\342\231\253=\337q\37]\322<\256\376\320\177\201\7\37HYA\25\337\330\312\261,\323\272\b\27\71\374\307\61\343\263\230\71(\235-\274BEc\214\67\61\352\220\374W\354\364M\374)\350s5\351[\230=\306\273\23\343\357)\262\270fMF\210;O\211\217\207A\366\24\5dt\322\376\300\316~\252\203\214g\340\1\266\277\27g\305\250+\202\317y\365\206\234M\260\336\222\273\201" + "\64\203\305\23 \372#\301\tL;\251:\217#\27\246}\217\225\357;\306\200M\33\377\210\345/#\267p\373Ol=\320\275C\363)\326\265\314\352\202q\323\344\265\60\301\343\22B\307\356qcQ\363\37\361\357P\371\231#\vg\377\343\375\22\270\0\27CQy\354\367\274\64\71\260\17\25[Ev\236\370\302\345\203i\357z\372\1\336\200\203a\375\341\226\337\362FP\212G\25\t\276x\315u\354\360\177q\177c\326\3}\21w\257H8\1\342\353\21\363\241\237\324n\7\36\215[p\322\v\327\r\262.\226\35\307\271{}9\320b\241\271\236;\225\307\r\304\244T%\301\242\305\376/i\261>0\203\246\326f\276\215\212f\221\217\250[F\242\23\342\247\311\207B\246D\327\205\222\327*\257\262\273\273\272\222\312\365\326;\\\343\n\274&{\252\262\210'-w}E~\267\366[\30\65\63]@\263\37y\277GA\1\365Go\262\66\23\7\65\244\234\300\271\355}\346p\343`t\272\340\1\257\33\36\374\tW\254\311\311\245\350B\301yj\276\312\274\215\26\377\20\330H\243\265\351Wi\345\236\234;\310+<\17y\373\343\374lh^`n\17#\32\322zq\355\220\214\367q\331\316\354\\\360\33" + "\264z\356]\227T\204\325\t\376'\240\373Eb\242\226#,%\\\365\310\61\203\307\232\35\353\271\353\361\4;\265\356k\251\203\374\22\303\337(\334G\367q~;\337i*\273c\275\4;\224\371\333x\347\215\374\317Pq_TJ\332R\361\71\220\241\260\6r{\351/\263\362s\221\7ZH\315#9\7c*y\356\21\357%X\263!8\34\235\317\64r(\337c}\23\342[\312K!\305\245\214\3\261\226\377\302A\31)=pP\327\224i\230\326\302\275\20c&K\346\362(S\332!\32\362\60\365H\255m\226\71\70\301\351|L\353\376\311}\4\5\25\261\265\350\370'TL[F\346\255\205\351\353<\307@\265PT\305\305b\243\b\353'g\35a\372\21W\343V[\336\322\360K\223\263\16\250J\336\304\31\373\264\247\70\242\220$\264mn\376:\250\31\223\361\21\f\253N]\305\372C\222\61\220-\215Y\2\66\277\254\216\7\325\244Dpl\357(\306\302\323\306\276X\363Qf<[" + "\37\313Zb\357\37\223\316#\336\206\333\20\325VP\300%=M*\236Q\355\251\305\365\33r\177\346]\236\374_\310z@\267\235'\277\347\372\5%\353\4\211`\233!\333I\375\352\223;\323\364\301\236S$\34\225\366\21\274q-\360\61F\36\343\235\354r\250=\220\335\63\346\30\340@\230\211\35j\\K\271hr\354\65\220K\"\333\363\262\263Y\277sT\276`6W\4\254S\303z\201\206\17\203=@\366\226\360!j>\21\237\"W\272\372\17n\256\67k!\263\\\267\6\26\366\362\17A\201\321?\223Z\326X\206\302\342\223\201\21\20\267L\366\30<\343\65E\b\317\241+j\207I\324\230 Q\224\362\300\7\311\237\362\334J\357q\266\260\324\306\331\342\30\ruH\210\353J\271\253\fsx\352?\356]\320\367\235\244\277y\325\245\234\371\24\367Z~\242\311\214R\244J-e\337\321\17\307i\373=%\\\371\334\221\212\3\253R\334\\\333\220q\1W\257\r\306`V\221>\v\6;S\206B\325)\307{\254M\26\267\344\332\302\214U\270\356\367\334#\34\71\204\v9a\245|/\367\273e\37\200E#L)X\25\347\330Fc\37\70\3\274\305\25\252\205\1m\223[\202z\237\350\32N\225\271\327\205\r\236" + "\67\\\315\275K\31#\315\227`\353\232\274Y\250i&~\223\266\225\345WAr'\305\63\364\237\322M\205\354\377\306\334\344\231w\274\34>>\246s8\36Z\275o\231\2\201\273\332\363\324l\211\271\17v\334\25\337\37\332M\261\245\66BSr\237\205\71\264\7\25SE\6PZ\"\257\204\375\0\233\357\60\277\v\356\6\365\265F='\335\305\341-\322l\264`\273\277c\343\316c\244\341\356\6\243!\352h\243\263F\255\246\372k\331#0\341\200b\34Zg\311Nq\235!3\0}\26'}\316\233\365!\17\226\337\263%\322\306\370P0|\351\70\263F\347'H\0\21t\371-\241\71\216\375\312\251\2EA\344!L\233\252z\277\221\361\266\337iXv\232\377\177\200|\204\322\240\360\4\247l\361\r\344\325\232\234U8\343\17\257\202#\257\360\320\60\f\303/M\210\256\357\235\255$[k\271\33&\227\271\305\220\23\214yE\21}\360\25\bJI\317\216RU\7\322\304\213\207\205\203\3N\263\272\237\340\264\277=\243\303\353\66\365\264!6\312JYWc~\242\356\67\23\367`\224K\260\34\207\326\245\276\205\362#\316\177A\253>\226\236\64\352I\372a\32~>\355]pU\253\227\220ay\324t\352;" + "\305\276\227T\1\273\2\272~\222\60\1j\324\31\213\250\333\274\304\22\334`\r\t(\367\250\341M\316\331\354\227q\336\37\206u\324\243g\342}\234\334\331\365\210F\36N\357\4\215\6\365\1\227\244\33\177#\333/\362A\224T\241\370\5R\257*\177\306\200Yw\34f+\275\353a*\271\337\347\320;\372\207\354\233\245\351\v\321\263\4\7q\325\362\234\367\310t<\372-\212\257Q0\217\370.\255\71\264\350a\236\215\355Z\330\32p\330\323\64\3U\237\r\f\240\361G]z\344\t\26\v\33\377\33\255\v\343\16J\377c\272\216CJRcp\364\346\364=<\375\252\247=\33UQ\273H\25\60\f\301\316\237't\246\26\353-\210)kT\nV?\26}\337\30]\354\243\320\225\256\61S\332H\325T\350`\266]\246\300E\335^\350?\317\337\17\362\245\206\357\71\330>\346\\\223\326j\317g\312\240\366PV4\213u\21yM\231\306\62C\332\227\274{\265\315hxY\332,\36 \260\177\0\355\223m\323!\343\210\256\24\213kLsy\331\306\254\357y\215!\230\t\25B\353\307\330xF\233Q\362\251\240eSik\256d\36\r'\36\354\367\203\375kj{\300\352\4\232\216.\364o\324\r\302\65\233\203\33" + "\271\303q\333i\354\231\221x\27\206\335I\335\7\215\211\"\226\326t\310\225\203yr\364`\20\375\315\337S\377\355\311?6\225{\351\247\31\23\240\274\275\265\67\366\374 \311\203\355_\307\225\200`b\326^\236\263\323;\17\327>\313\r\220* \233F}\276\261\327\360\372\312\334\5\30}_8\203:\274\31\367\21P&\274\244\274\352X\27h\226\210s\321\374\243\214\300\377\223v \17k\223\232I\235\37%\364\245\36\63\222\224\260`\256\357!N\251rw\243q6\347@\234x\322\265\203*z\4\322\232\370\233\372H\371\222W\36\314\61\301\252\243\71\7hz3\317{\240m%\236E\275\337\262\233\211\33\360Z\230\215P\322\307\344E\205>\362\347&;\fG\227p\314\233q\327\33$\201\204\62\310X\20]\316\351\271\252\4r\17\327t\341v.w\333p\212l\322\263\363\37\365g8\16\234\t,\275,|\233;7\304;id \275\30\27\374\344/\304\322\345f7\27\354\212-ei\204\320\200\301\351\206\222\60\33i\300\351\224|\22\277\214\370\210\253N:z\206m\t|e\232\357!\324\312\20\302\5\357\370\23\270fRF\22\327\353\262\354<\241\310YI\t\325\212v\250\213\224$p" + "\212H)A}w\311\207\354\273\251\371\32F\334K\33\16\243\37\245\257\247\361\16\347M\316J\321U1\325`i\270\3\302t\1I\307\210\375,\277\37\271\22=}\264b^\376\62{*\257\34\231\375\35-\277\221\323\201\246tw\37\202N\322\270_qdy\332It^R?\247\371\377\366\3\254\25\5\337\243\65+r\355\234\273T?\211:-\212\377\20\67\274\23\212b\371\274\310APS\237q'\354z\314Z<\202\344\306,\\\334%\320\35\247\274\343\36\311\222\252\210\227\264\361\335\320\2\330Z\234\247\203m;\362U`\375]\326\251)\265D\35r/\345\300d\265\213\351D#li\337r\253Q\26uXM\215\f\260\334\345y\354}\305\3Z${\260\334d\375\35\307\277\343\234\202\375\346\330\67ri\265\251=\347\214\211YGi\33U\353\240\377~\373\3h\254Vu\330\372\250\273;q\"\v\337\243{\260\264*\243;m\271\227w\f\343v\310w\342\266\256y\257\271 !6\242\321c=\261\220\376\231\252\65\244oU\271\261C\337\270\31\234\347\67X vC\224\232\372L\264O\1}\271d<\265(4\37\0\351\34a&&~\257\270L\262x\341O\234o4\34@\276\206\177\363\322G\201\333\260\350O\377\267\fFpp\351;\246\276\70\365\224\373\"\254v\6\221\32z\7\347\374o\352\310\7\272\216\5\250L\23\265\306a\206\324\217a\354o\216\373T\226g\255\242u\205\271\237\363\312\270\354\257\271];\353#\336\60\63\367\2\17\61\245\334\"\363\237\322\177\363\254\351\336\224\246QAx\214\276@CQ\224\23:e\307=\307\252E\216c\340\f\251\365a\371\360\34\207\267ux5\230\265\313\333\213\346\245" + "\373&\340\242'\376\37\260l\252\365\60\354\304\2!\356\70W\240\345\351\245\36y8d\205]\236:m\211\377\27\r\210N~J\325\375\2\25\341\34\v\353\vr\337\207\242+F\25\364z\230T\311\342\67#\266\263\263Fu\263\61\357f3\252\343\305\242\60>\233jn\316\225\326Q\300\244+\207\226\23\315\277\205\225\310\275\205\211/\320\321B=\4\352\237e=e\365e\321i\36\210\311\3i\316\25_*\251\2\242%\340\335\241\331\5\325c\2\231\341c\241\341\v\322\352q\331\251\354\236\250\373B\322\236+\353\322\177f\327ku))\316\210\220\374gt*\264\327*\307\262z\246\350=J\\\241\70\310\363\317\370fA\355\365,\37l2\205\254l\352\37]\204\233\356\207v\206\207\63\62\25D\217\207\312\224\364\307\350\352\244\t\242-I.\7n\300\223\324&`\371\4g_\363\356\301\236\222\304\223\220\373\207\1\60\266_t\35\f\361\247<\205\t\233\\i\34\274R\220\302\203\377L\371\202v<*\310\nk\227\373m\265\27s\331\327\226\347\341\\\2=d\211\203QqA\224\5\306_\242n\240\367\210v$\300/PNI\251\212\233d\337\252l\214V\n\343\25*\\k,\r;:\306\357Q\244R" + "\371\25\233\5\335\343\64\323!X\241\37\213}\213\355\25\217\327\377\223\273\263i\243\351\17S\252\302]A\223?sO\242\r{CZ\334T\26\232\310[\253\362\30mc\345A\352\332?\221\303d" + "\372_Ts\263u\257\314M\366)\312\36\24\205\202\366@B\270H\25GlY\320Lm\372\16\212\267\31w\322\310g\351\203Hp\236fRh\215\341\nk\232\213\36c\350\355X#\365\252O:\36\276\210\\\344\210=\313u\237g~\37\36K\233z\241\367\334\244\307\64a\266\253\24\226\217\316\336\205u/\262\226\322\204\257]\37\65\226\314\242\16c\"\234\364\233\316\355\215\355\201Zl\370\63\330\217\66\313B\17\261\303\305\274\34\334z1\357$\351\337\226\234GXo\33\326\310\5\253\271Qu\361[\241\323\227\361m\310\352\221M@\201\221\62\270\313\375\370\333h\355!{\27K\357\231s\250\341x\360\f\b\326P)F\267\23JA\264]~\17gv\366\372\330\236\251\230G\322\323\302\257pl\251\343{\330\64/T\326\4\360\264\226\236$\32r9\365\64\212{D,oJ\36o\334\v\f@\331\271\310I\234]\20S\f\303\273\247~\3\3'&\377\233q;|\4+fe\277\242\334\366\206\266\240?/Y\2\323\203\236\365(\363F\252\260\352\240\343+,\37f\213\202\216_\306\355\201\255}\362:QF}\214\37\267\255\312\217m\332\233\343\240j\24\311\207G.i<\264D\r\212~\211\320\260U(\335\203\23" + "f\272d\330\327h\367\363\274\327\276R\232w\302\267\1\343\25\362\v\260\344\267\f%\344.\324\377\326\244\210\340\234\230G\374\306\346\300\0^\361y\366\61\266|-]\17\253g\4e<\300n\377\236\327\356\t.\207\241\333R\335\344\25he\270dU\340\fmK\316\357\311q\25\262k0\374n\32\60\30\23\4\20\234\257\237\7;\232\347\277\207+\273\346\214\347]\335\363\237\360\366\232\274g\260\363X\201\213\304\306\210\346\60\357m\337b\220\234\213\370\225\222+\225\7\311\362\263l\30\33NJ\356`\306\350\230\276\244\353+qs\207\321\266]\250\61\211\27`\v\221\371S2UGoF\321\61~\2\223\26\271.C\263\335\346d\20\365\341\365\244\60D\236\6\315\357\342\336$I\212\70\305\241E\372\273l\277\244\70\215k\353\203\17\302n\313\221^v\361\326_\363\242)\351/K2t\233\226\360;h\255y\277sV\205n.v\224\307\313\33A\25\371\61u\335\227\30e\366e\300\377c\303\272\332\33\327q(_\267L\357m?\336^\235\351-o\256\211\247f\343\334\372FK\260\315\65E\370\222Tb\347\327\357\1%g\312\356-\36\26\20\4\16\16@hn\377\364Z]}\360\340" + "\271~e*\212\272\307\276\334\325G\v\322\223D\306\245\205\356\316f\306\6u\5\62\273\372\215-\310\27\244\23\353\327\326\71u\351\341\3\210\214\2\316\252s\217;\3\252\330\253[\217\7\272\277\231R8\250\213e\236\275\241\252\262~\36\365o\326'\n\316\370R\335\305\372de\240ld\347\v\254\252\353X\371\215\203+a\305\32\342\352\306\23\335\63\316\301*\334eM(\243\272\376\244\263G\251\63N\352\352\23\71\317!E}D\336\333\250.?\201-\337\352\261/\26$\263\365\23\375~6\353\34\262)\365\241)D\343\265\347\272\317\216CT\347^v\366\331\221~k\275\65\251\16\244\367\330\315\324\225\256~'\346T\6+\354\365\320U@\"\20%u\271\333\355\36\356\355\177\241nu\247&\300\317\233\335\202\324\305n\177\270\253\273\66@q55I\17\253\332\231\304p\7\333Q\363L'\240y\200\373g\266\300\331b\221j?\377Y\227\226\364\353:\34\323\27\352n\267o\7\360\"\5xq\243[\4\216\311\256E6Y\261\241\16\254'\\\24\24\364\313g\333\345vE\335\331N\353\25\205>\216\306,Q\233\255\300\355n\31\227\274\204k3\240\234c\373\233\tp\7\66wS2" + "\305R\\\262\330\t\\O\35E\370\344h\255\367\355|n}\374\256\215\311\304\63/)@\324Y\362\272\33\243\251]\2\by\332\3D\245\356\350#>\241p\266y\343\243\315\355\301\367\345&F\332\250\253\230\36\203f\v\23\226Q$\235\201$\207\222\302wQ\367\203-\226\0\375<\326i\243\373&+cO\332\372\f\350\0\307\364#\271\376\363\305\307\220\254\314\251\204\373\\;\320o\315)\251k\335w\343\267\335>\242U\21\324\343\272wT\247`\34(sL\200|\216\270\341rH\257,$\f\274\364\311\26\\\255\34I8\300\262\205\225\340\2+\343\227\262\222\314\234\375F\375S\4;BV\33q\242\363\326\306h\35\1\363\203\36\66WP\0\nx[ \32\341\273\327\301\246S1\30\27\247P\303c\330\26L\261\360\274Z\360\324\32p'\24\246$8x\251\35!1\215?5\320\30\212\205]\221\303\305\21\360`\306\276\311\330\67B\\\215\334:\303\2\0\4\313\300\237#\342\35\226\306\263-\241\242\35\351\361xW\37\322\61\371\71\tQ\7\274\20\261\212\203]f\35\277\332%\320k\264\17\263\366>\373\277j`%\21\v\336\212\205\360\210\363\255\310\25\333$3\16\345\363=S$\1R\357\31?" + "\227{\221hF\335\353N\372\343\261\36\274\177\377\26\207\33\252\350C;\217\340r;\3\25\31t\206\65\61\5\70\340LL\230\336\314S\334\21\b\374I\214\242\302X\254q\227\4\nQ\261'\6\251`\327\211\310#\216\213\377\260\\\f\t\236r\2\b2*kr\210\335/G\23\335\311\256\375\342\222\255L\242\234\351\61\2\22\60u\6\243+\302\211\23\212\\\301\177\23\234\266P\276\204\344!\27\222Pk\330\351\243\322\275N\337\361\252Twz;\335\235\301\316nc\260\225\64?#\215e\217\342\64 xP\27\62S\267\1\17p\346\f\325[\306\312\27\302 \34nH;2\240W\334\250\353\262:7\225\200}\265\7$Y\335\352\231\325\27_|\241\256\364L\310v\306<\234\32a\255\372\21C\334\366\253\324\216c\353\62\243}l\256\354\36\376;\307\23\200\307\34\364\221$'W\242\62}\347s\301U\227\61\256\214o\341\351\233\25\225\310\310:\232R\352I\273\71\342@\307\230_m\346Y+\334\70\266\244\376\205\245\344\250\t\324\255v2\343\220=\355F\224\347\63\221\261\217T 27\233y[/apH\326\70\335\r\22\265foaN\226Q?|\371\344\21\200\316+\271\376o\217N\222\201qy,\350" + "\365j\254\205\bL\311\244\\\207\17\315\234 @\24N8T\352\\\217\302\207t\231x\263$@\215\370lm\310\343\376\302T+@\27\221t\372\265\t\b>\354\241\4:\"\230\246\204\327\300\"\227\266/\0\205 \342\66\250\235\362l\365y\5\343\354\324\301\351\22Y&\317L\304\35\26\326\361\24a\31\4\224\300\316\330\303\26\254\35A\374b\317.E\263\71F\361\70{\366\300\350\366U\1\232\226\201$<\271\321\263\253\36\257\364\370\303h\f\367\234\251\276\0|(\22\236\26d@J,\265\216L)@+\340)\233\212x\273\31\37\20\243@}\270\4F;\20\274\3\326\350\207\70 \23\256\223hb.\341\245\374\201P{\224\361k\230\254a\225\253\21n\343\np\356\321\316\3,\263~\5zG\26JE\232\32\351\26\340\65\216\5\343i\27\366\320\261A\204,\341\216\233\330\311\230\357\233*g\372-Y8\216mjLa);\376\bE\370*~\343\311\375\356wuW\376\214\22JD}\216T\220y}j\234\230\201\334\305\205s\21\346\243`\243\254\305\4\263DH\367]=U\347{\\\273\62\303\36\27\352\302\307\263\246D\302\177`^\"bm\265\24mk\375\336m\300\215\2\270\4\304\vwO%\324\203 o\2<\bd\226" + "\263@\350\21\362\20\b\352/\200\201\274l'\6\375\1Fkx\216_\375x\267y\277\35\317\241\17;\\,P5q\247\201\67(\30\250\356\204\377A\227(G\352\322\70\340Z\226N\362\253\356\325\360\1\315\26,\235\203\363\310\333\3\7\220\63\223\377\4\2\320Q\227\274\334&\351\66\271&+\33l\302u\265\20\62\263\343\207^m\305y9Q\255\360\260\365\352\0\225G\266\"\300\\\7\317\365g9!\356n\333\253\273}\3\372\231`u\277\236RD\275\272\321\67\336\263\67%\251K}q\32?(\203\231\370Av\203\67s\370\320\7E\315\211\331\264%\347}(I<$\351@\344P*\26\273z<\323\177p\255\241\362\vu\241o\240\301\347\304\6W>]\330\263\36\345\371\243\205\327\201O\261\60\310\224\376\25\20\331\226\247\267\341\213\365\b\253ikr\177\277\373\366@\277f?\337\216\321\272u\250R\27?\361Z\232\305\6\314=\304\26\220p\35\342\207v\257i\231:(\301\256\256\340\216\20\376\200\62=z\270j\241\316\177\242\355\r\227(\310\265\367\31\223\5\350\212\v\364+\vG\262\205()Ym\337\361\211Ww\260\22\253m\25\237\241\25\356C\t\310\211u\347\62=\261\302\233\16" + "(\323\31!^\257\321pb m_\260\34\20\246E=\225gC?\36\300\310\201\rT4\235O\37Y~\255oc\301z\37na\23\375\327\207~\351\200\235\5\25%\206\210\70\301\66g\321\66\300^y\234a\35`\277\212?\352R\277\6\37J\256\"d\30F\315Q^@\r\204R\332\357\246\255?\233\324\71\345\357\310,F\264\272T\4J\b\227\200\347#4rU\31/)\371\232\b%\tf\201\302\314\236J\315^\306\310\352\317\204\236@\250Q\264\215\311\373`\nG\377#\370\264\245\34\372\36\60\261,\331o\253\247\372\341\63\321\227\273\372\323W\ny\337\360\23-\242\371\vT\200p\366\23@\256\324\271f\271\63x?\1\70\322\277!\270\354g\316\314\203\311l;\217\351\234uO~\5(\357\21\210 \237\62\30\247`D3\273\206M\352\253>#|%\0{\261\213\340\71al!1\215\372\373\203\300\211\323fE?\bl\261\302\306d\201\240\315f\37\346\354JK\1<\214\33\270\227OB?6\31\201o\204>\24X\200\62\342\60\265eI\276-&\352\313~0'n\323\71 d\363=LN7:\327\260;m\267\256_>G\260\202\5\343\7LQ\277\343\204\354\331l\327~C>\342\306\300'\b\2~\5\216P\323\326\277\333\333\16Cwp\22)9G\360\262" + "\310Z\344\67\61\31\247%\247\321'n\247\350\324\261\207\304\311\375\22s\312\357\314\255\374\365\71\335,)\n\v\26\246\344\223L\330\240\177=lw\255\321\217\244\371\215u\b\224s\277\335x\v\26\354\346\356\331\345\216\267{b\226$\372a\212\354g\342_\301\220S\310\5c\23\254\323ykU\373%\242~\312\301\346.\224\244\262\r\324\265\301\375=\362\324\306\374\372\300\70Z\266_^\330\66\276\7\23\66\352<\256\244\316\200\320\260\341\204\t\20\231\23\322'\17\337\262\330\227\207\277\311g\352\235\17\366eF\331\"5\333\21\364Y\202\314;G;\243\35u\5K)\212\272c[\342\5\61\345\64w.\b8\312\26yQ\217\255(t\325\302VG\211\266\237\323\60\364d>\223;\324M\351t\334\246\301P]\306,-\364\4]T\211+d\222\202\70si@\264\312\37\365@\360\375\252\365\30\212\61\364\266\250\243(Z\341\350\340\204\234\243\220\347Q\272\260Icv\7\1\1\373\374\266)\336\253\341\353\65\310$\2\330\33i>?j\240\365@\202,M\361\300\232*\367\63\62`_FY\302sx\4\263\66P0\36u\36\352\67&R\373\341\6\271\271\36\247/\324\71\fP\273D\334s\316%u" + "a`\343R\367\203\264\2\67\6\366\24$\307s\32\254/\316\322\376\17v\313\31\376W\177\37p9\247\\\315\240\n\325\217\66\371\351\200_\314\263Z\220\347\260\314\215\36\31\324\302\273\203\374\205-\221\365\t863\t<\320\306\344\254{\220\366\246\255K\23S\4*\201\20{Ba\330>\267\244\207\316V\326\233\304\60_V\v\233\66\372\227I\27\227f\35\333\347\375F3\205\25o\214\r\32\217\340!>\274.6\253#\267A\b\203Y.M\0\203\242\300\214\23\322K\354\327>AW\215\270\274\303O\245n\16M(m\314Q:fW\347\30\240J\24xo\206&\1Pu{X\304\204\250\27F\232\321KC\251\36\322\32\2\211\241\0\355\244@>\206\270<*\254KB\n\327\276du}\350\244\364I-,7\352N;\3i\360\346\310\327\63t9\233\bj\334\261\r\246\305\246\375\66\306K&&H\243\347\312\306\356+\303\312:\vuu\202\237\65!\272x\t\247\354\266;\300\325\27\v:\325\277\302\330\200\371\207\342\255\316\17}\301\320B\1\226x\252\66h\274\0>\214\224n\357\26~a\226\365\271\326\334\30\326\1\374\66\376CW\4\271\65\25\31\36p\34\362k\236\332:\2\234\337\17\332o\351u!\t\340\23" + "\274\3\\\254\356\16\327+*-V\0\266~\371\340\231\272\66B\vPV\\\251\253 \357\23}\304Ua\20\314\321\303\217\372\364+\243'\17\364A\35bm\323\207e\234\0?\242\336\331\331AZ5\255\362\255\221\0\225\30\321\220L\275\326~[\266\215J\246\271\272\71\62\t,9\222b\36\61\373?\337\200\360\256\6\314\70O\316\256q?\205\0\364\204\5r9\32\35\60y\4V\316\35a\327\6\312]\371\270@!\304\354\303\337\365]\315\263}|\321\65\27\254K\n[\302S\301>\337\205\n\tJ\215\306\207\303\337\272o\336\354ji\336\216\343\316\366}\306\26\224\234X_\312\235!\2\2S\325\301XL\235\21\272A\302Q],\364A_\235\37\271\355_\354\341v\307\70\67G\306\303\230({\33\30\350PL\36m\26\213\65(\303u~\355\253\63\2v\323\177\323\375\243\303H\260 \234)+|a\17\71\234,\303\334\303\350\36\16\247\354\6L" + "\346\21Dz\303\362\371\346\34\3t6D\23\216\271CD\245\36\215\232p=`\302\60)\260\244\215\355\215\331\355g>E6\231\250B\324\232E\333u\b#\214\277\225\235u\31;3\203\351\213\235\215\316\306\213\215\203\215dy'\300\271\244\340\355c\r\t\327\60\25\177\311\365\212\346}\315Y\356\275 \306\234\3SI\261$\347)\263\257w\20\355\201\33\341\345\217EV.\362\340\35\365\5\353\35\241[\363\63a\35q\310\342XS-\35\222\263\210;\361\331\263\265N\315v\n\254x\276\303E\277\246?\346\25\341{j\201\241\23\70\247#\372,212\347K\30\333\32\321\371\323\202\347\35\311r\334\316\212\63\216\233&\330\240\222\0\316\220\227DVf\356\336\32(U)\270\16:e,:N/P\264P{" + "\221\r\216\303\66x\360\346<,\346\310\370\34{\271G\313\361\310\24\337\235z\312D\247-\212\62\323\313d\7\315)\324\311\306\356z\337\224\245]^\327\342.\333\rL\374\25\27\340\1\366\376\300,L\354\r\35\302.\27\303\254\303,\377*Y\25e\220\330\257\311#\322 \301\353\246\312\bU\320\f\r\332\257\"\273I\37YI\203\64\374=u$\36\354x7\345\216_\306\vB\37aW\353/\323\224CQ2\326v\230\217H\333\246^\331\67Y\332M\v)\303\364\2\254\364\335n\372\16\361e\202\230i\302\366\374\60\247\205)\213V\232,\362q\330\236\304\273\231\350N\236\355\302j\326:<$\361\4\21\62m%\230dY\33\70t\36\224\212\250\315H\227T\"j\36\177\241\200)\36\351\227!\4?\n\347\346X\333\64`\340\334\343=L\257\321J\0|\237\357\262\66\31&\251^\34\373\31y\207\347\272\22tZ_ h\365;\367J\26vk.\200ys`\210-k\375\214\354I5\325\305\70+8#\275\364=\3\350+^\317\34@\277\262\267\325K\236\300\340i\212A\263\267\335\71\334\\{-\210\270\5\374\272R\236\27\366\320\60\262\306\4\325\366oJ\364\262\332\251\35c\362t\357\212\203\224\215\204\3'" + "X\371\241\351\217v\231\366\306\240\322\334\254\254\202Q\357\345\303Z\212n\30\331\274\355!\356\345\347\214i\rD\224!\247*\263\323\226\347\226Mm\327l\245\232r\27\255h\22K\4\25\311\354<\f\3-\5\234\356\303\364)W\362\300$\340\333\365\216R\21\330F\273\355\267\354 e>\264-\257\262A\262\350l\332\346\352\366\60\312\345\313\365?2zZ\20\20\266v\310~\215B]~\345\210\201\66\350\307\177\254\311\7\245Ft\377\27\333\365\21\306\220<\376\240\361\233\\j_\225\16\255\30(\305\221\7q\320\354\"\367\261\302\310\233\225R\276\265\r\213/\203@\205\f;\226\257\v\375\367\307\352\375\273F\341UE\240\202\213,\271G\"\223\304{\31\271\71\20\261\314\256(N\253\261\216\210/,\17E\372eV\6\70p\215\62\256Q\251-\r\3UC\360\234\250\36\273\6\301i\242B\310\262\4\243\233:^Z2\333x)\37\333u\340\246qkxv\250\364\336\61%9\366e\270\211\0W\22a\252]\fg*\200\66vS\"w=\346\353\35+,6\f\252\71\260\371q{\361j\275\254s\24\21\3\"[\302M\215\344\36\244y\22J\224\\\307u\r\263H\36\70q\5S&\225\307\277\223U\276\67)" + "\312\300\253P\205\211\374Z\217_q\36r.\312\3\325\246\177\246F\223\306Ow\337\357&\200OZ\322b\24\60\224_\305\200\66\322\277\t\203\200\22%Sa\16S\\z\25\v)\222\356\b\324\16.\274\"\301)\320\34\356\35\270\264\373\70\30n\335!\373A\206{\200\213\227B\v\26\241w\255A\306\3\312\343\bV\31\364tU\260\237NS\244\257\351\334\356\327\211t\27\6\305\24\66`@a\212\241\375\340\226\63\374\357~\30N\201\6\223o\367\21\354H\233\b:Y\343\347uCj{*4\345\t\4\0Sn\246h\306uC\332\217\"P\261\345w\263J6\313~\270\261}\bc7\261\226`x\230\204|\243\331\373\373\60\5\236\365\276\261\273\273\363`\330\352\34a\350gr\307X^\37\16\237,\357\307\252.?\364\341\264 \30U\353<\250\367|\230\311\v\344d_8\377\243\3^\373X\225\63;\202#V\350\366\335\321(\r%\327\64y. \0\25\224R\303\312W\240\263\63\322\323\263\60\200\337\33\311\233o\264\347Gd\200\222Pe\273\60\266\177`\6\206\16\212G\253\27\233,\221u\31G^FEW \351\270\220\345\267\315E\267\v8\243\231\"z\33`GK\253/#K\200;%\312r\336\241\244)\330p\7\222\1\r\205" + "\203{\250\331V\227:\277i\262@\222\354\313X\344\342\355\34\212x\325\27\7\250n\343zlz\333\260\320N\337\325\262\31\345\237\257\230oz\21\\\263\340\306/\212b\\7\311\345\375\207}b\336(\273\33\254\312\262\322\225\71\241v\266\30\62\35\213\317\357\306\213\231\20d+\322\334w\34i\277!G> \212\273s\36Q$l\307\334\16\326\255\250\256\303\62\351y*]\252\261\304\261H\253K\265\250R\204\n3\223P\22/y\211;1\\c\33\335\334\214\364\374\332\2\237\312\374-\241\b\377h<\257\350\375\214m\32\331Nf)\215t\253\247\6\215\377\5\va/\262\221\3\23\177\2[\351Z\262\63pc\251?\16\254\333}\277\313\226\233c\373\274\362t\201Y\361\313\357\254\372!T\266~TW<\20\222\322\65Z\304M\303!i\3\b\35\334\265\61\224\346\224\2&Z\226-\3\323\24\355\260w\202\256\b\267\352\224\255\212\371X>hc\310\375P\304\253A\32\1]\311\217T\342\327U\325\344\36\351*\275A\364\317\361\237E2\353\61\263\231\t$EI\bx\232\71U\224\274\16#\324\n\325,\302\371\71m\261\231\344\231\324\20\236\343~\fgQ\311r\233\333OQ'P\2\63\353\250\250x" + "\367l\245,\240\221bFL\334\367\302\271\271\16t2\177q\vy\31Q\216\253\224\352Y>\232:\236\b Jmf\306\265\331\206`]\244`\bl\22\307QJ\b`\357Q\241\274\25\b\377s\0\333\316\344\306\347\f\352\362\262\300)\"\211\236\5\346\210\312\252\207\235\r\335\377p\204\210\254(\306$/\364\376V>\254\320M]\351:\312\322\263\264-\367\320\7\256\232\223\222\206\207\341\357\277R,\330\303?\266\214y\201\217Blom\275/{\361\217]\245n\204\334?\334\356\272\334_=DKw\313kB\312-\243\317\16\323\312^\345\62\211\353\210\302\376z\255\273\265\275\326\245\355\224L\31\67\61\210\353\230ck\16\21\245h^\276Z1B\212\202\335}}\227\245a\bK[\262\360\27z\314p\364y\272w)'\303\203\303,\377\213\355\262\17\345\203A\6\363\372\374p\257\273\265\251\70\6\344y\212\232\246'<\357\23\242AT\34\311U.]\267\340=s\212\323\264b\344\210\377O\3\64\221/\17\17\205-\304\265\37\177H\236\223\224\fO\36w\6\251\330\310o\277'O:\3A@\205C\34\235l4\266\363[\352\214\62\366\22~^\256\375\16\244\273%s1\3\325\246\201\373\347\232@\230G" + "\235\261\330\30\"\350\31\355\307z\211\243\60\235\337\376\305\216P\276\67\23\6\334\62\203\230\356\6\30\360t\316'Y\356\344\26\27\305\221\245\323\230\243\331\335\202\234\353l)\302\273\264X!.E[\242\330\240\36S\6\310\271\315;L\321\205\362\224)\25\60\22\314\16.B)\\\266ABO#\245\213b\306\342\67\324\7\254\\\22iaWwt\307u\257W\375\262\353A(o}'\0D6\227^\211\253\61\211\225#\274\217\211\7\240\3\303\336\216\260~\200\22]\345\205\367@\23\320\3\247'\240b\30\331C\246D\375-\370\256R\311sUp\373\265_\270& q\232\213\3iP\5\211\360t\213\320D\235\361\246\231\253\324s98lHG\6\341\371?\340_\234Q\b\354\365\343\355.U" + "\235n\300\233\373\r-h\255\5\266{iu\333\362\210+R\v\347i2\334\206\232\37\352$\273\221\335\254\21\333L_2\233\226qz\r\214dl\204\375\347\351V\36\60\300\204\4\252PyL\332\34=\315{Y\204\254\316)\340\202\246\270\353\376\363h\377\217\3\16\16\v\241SW\234=B\7\262\314l\316\342\311\344L]YR\255\265Wn\207Sqr\26\v\\\37$\322\251\364\203UO\311\357}\2\223\345\311\232;\211\273I=1\3\325-\r\177\344R\251Z\337\5/\274\367\254\326^\304k-\222\201t\376\356ON\36\33\61,\342\30\305\324\322,\232\374\345\26\276\267x\30\352\265\364\21u\262\300|\212\330B\272\"\334\233\306\225\256Ge(\20s5\0\227\210\64\371\376\b\1\"G\255\344\270\ts\223\377\300\245\322\25\322\240W\254\230\24\341\67U%\22P\357I=N\270\v%\240\345Nw\353\240\267\205\226\331\r\223l\330\6\17.t\203\201l8\236U\267\272\\\357\3\215=\"\245+\246\332S\356\7\337\64\214\306Z\255\372\217\245\62\6\351\310\\f\f,{3\f\20\235J\231w\255\324\375\23\345\200\337S\222y\212H\264\351\\\360$\273\251\240y\324F\320D\305c\250\312\230\367\226\36g\300,__\232STZ\317\67\352?\346\357kq\255\7\313\203\16V\\\273\272\rl\252+\316\307\355$\346:\347Iy\233,w\341MH\357\212Uf\343\252P\f\250\260\21)\316\317\70\215\70\b\204\65\360\211Z\270\350\250\255p\210\252\357\234r0\25F;\266\361T\241R\27\356\253\334\204A\374\343\27\357\0\35\357\234w\342\250\333\212\2\\L\236,)\365\325!-e\272&\377!2e\217\374\253\r.\265D\247\272\206s\340\325\22]\256}\225\177\265\326\372\337\226\274\207\201\260\0w\33j\24\303\230\334\34\277+\312\343\6\335\223\316\243\342\67B\320%CH\312?\350\306\232\n\4|\321x\32F\274C\252\261\2~\277\312\33\37\352bo}\246A,\365\300\305;o" + "\372\311\343^ \306\1=~\246S\356\324\71\233\r$\16\272\245\310\32SAG\312\301\fnu\355\237\350*\24\310J\36W/\374m\201)\376\275\345\271\313\275\263z\20\216\375\264g\376\212@\20\246\254\243\65\347\265\346C\231Y\221w)m\"\202\356\220\276\66\335\256\207\262\244\260\60\347\321\34\225\263\\T\377\217\275I\322\20_\f\215\307\252!X\251!\316H\255\nag\230\373t\315\321\32\366\270\227\276\215y\366\226i\246\323q\254\61\17\344\210\257\"W\210\27x\35#@\233;\304\333\307y\17z\\\23\365\313\67\277\270\fY\362\35\251kV\321FB\263\261:\243\250:1*\260\221\201u\276Sv\370\262>?\37\245\223ZZe8O\325\177\235]\326\67\227\60\"E\214\323i)\324\351_4{\227\311;\372\220\32\243\352fn\237XY6\220?\337}\250\376\234\376\237|\341\330\275l\230\312/Gw\244d\231p\354Yak\\r\200^F\314\224\263\274\62\67C\301\365\324\364\256\62Cz\300k\356\221&\305n]\241\267\314\70d\363\230\266\247r\342s\266\4\345\206\v9\257\337\253\325T;\346*\245\357\324\25\307@=\341\272\275\21P\263\355R\34\302D\30\365\247\336(" + "\233H\223\327\334\306\221k\336\306{\367\264\371K\26\177\330\70UVfT\246`C\322\305\71\227'\317&)\217\255\27-\b\352$\344y@\334\240\250\316\30\30\255\342\25,\"'D\362\367_h\27G\360\377\213\"Z2\216\215Q\275J\247\311\227\220\177\353\262\271\213'\277\362%%\367{qr\235U\227l\356F/\2\311\210\25'\213\356\334 \230]F\232\"\264\317\347l\306\207V\332\274\304\373Ny\340\25Ks\322\271\306\35'vj9\221\305\267\235&\364:\f\355\311;m\366\62K\21\61w\1\37y\206\355\213w\325\32\302O\214\322\276\362p\212\71o\22\vU\316\7A\36\344I5E\341*&\245\221)\fV\242\306z@C\25\317y\246\311\303\212$H5x\226\237\230?\220T\21k.\321d\224\tF\271\226\347@O\273b\240\36o\265\331\212e\345\230F\310=q\211\324\n\266\246\210\341\333\244\207\234\70\306\62\313\27\310\r\3!5\16\357\210\201QJ\333Sz\17\377\226\274\367\232\327\32\346'\346_\241\210\266\354L\372\71\71\305\232\207\352\234\247r\341Yhl\344)\177F\321;\343?\254\317\254\226\66v[\242\240\315\354F\260p\322\331\271N\333\267|\321\277\32a\325\222\214" + "\366\325\357\277\62\\-?\311\34\272\362\300s:\251'\301#\353\35\63\360?2x4\305S\317\372'\210\221\214'4C\317h\377+\342$~\300\257N\231\226\21\273A\232i\336T=\314\6\3E78\325B\303Nbc\360f=}\312\356\306|\326\313\200\305\314\315\337[\337\372\301\351\302\330u\205F<\233\267\335 \356\34*b\252\345\25\250]\262\221\365\250\257\211O\372\317\336\311V\367\31%\212\227\361\5\260\21\254p\212\246w\351\257\220\33\60i\240\261/\372\341\f?=7\221\62\356\345\324\300\223\321\374\254\36+\212ev\203\224\64\b\346n?L&R\333\373\2Z{\365M}\225Q3\r\332\306kw&\353\22\253B\212\207\276\325El\266\256\315\331\31}*\270\302\215\35\vk{:K\277\340\245\\\213*\212 G<\375\276\350ow\366;\335\344\63\343m\223\233\344A\303\344\364\215#R\377\251T\7\227Q\37\307\331X\350\356\254\312#\306\364\350\4\"\365p\250\70\tc\272\325\n\226\372M\314]&L\317\251L\234\217$\357gjQ\177{\350\242r\233Y^\241\275\320\206l\256\375,\217\372\317s\273x\327C1\330\363&\216\346\211\345LS3\377" + "\246\23d]\356\303\230Fu\"\336Hd\332!\204\272\367l^\256\377\253i\256\347\205\217\n[\21nS\335\65\25Rg\34\257\255\247\326\277\305N\211\312\25\363#\r\241u\310Y\227\356\302\340\375F\300He\314\241\357V\303\63\34\251\271\337\322\255\32n9)\260\366\260\375_R]\350j\365\63\314\214\333\377\220\64\221\206>\33C\334\335eP\372\26\t\342B\370;^\36\4w\231\237i\223WV\330\345\326\5\202P|\262OT\221\243T\223\31\240\325E\343\307\267\362\334\243v\323k\233\373\5gz\351\333bF\34\267\210\244k\362\250\261^\322\3\364)\345\34\\Wn%\247\220-\310E\203\337\354\362\223U\221^\356$e\310\223\64+\204\262\177Xs\376\356?\261\222\61\357Z\257\255M\373\303\355\247#\256/\270\217\375\23M\5~\16=\321,E\236\331\262\65\240|?\373\355\205\333l\215\216{*0n\314\364\32\7a\333\316'\362%u\212\240\71\240\377{h\274\361\201\27\71\370\232\7\332x\220H\331\232\262\324U_:y7\360\34W\352g3\27\61\213\333{\321\312`(\305i\316\242^#\255!\31[\212\246_2&\347\322\334\213\242\241\314\304\221xKE'\324\316\237\237B" + "\317i\315\v\220~\310\370VS\325\316\331\35\17;\31\310\336\341\2\206\234\317\253\16?1C\26d\303\206\365\304qk&\314b4\310\32\3\346\v\303*\25\267\320\346\260\27h\310\300\312i~\206\270jrw\242\320\235`\242E\346\240\330\307\247\v\233x\23\357\361\243\342\231\311Z~\272x.{?h\273o\351\306C\321f\364B-\243\250\235\5L\25%\3(\237\f\361C\304@\234\224&Z~\6\325Y\351\307\242\326\375\213\60\t\16\303\377\221\261\371A,K\n\372\237\316\376=\311\225\212\204>\r\305\372[\34x\301\377\237\327\267\230:\361;\252\22\312S\343je*E\20DK%yt\334y\357\f\304\360\313\31\4\310\371t\267NYH\221\r\352\312b\312Z&_D\275\370\202Ux\270G\337\242\305\2M\344\301\373(,\204lp\307\333\65\60\262g\324\0\277\236\4h\222\237\205\16\61\371\326\365\3\300\27v\262A,\370\36\230\263sJ\345c\177q\345\346\374[\273\326\206~\336\237Z8\256\203co6z\33\273\204\306n\316 \334\271\351P\370\342\317\71h\336\303\62\340_o\376\354\330\23)\215\177\267\216FE*\312Iu\315\273i3g\17\217Fy\206\22\\\206\221\253tL\314\243'g\341m" + "\255\231\221M\230\357\362\361\b>\260pb\27V\307{\202\346a\347\271z\222V#\262\61:N\330\224gdp\313\340\367\227T\302,\23\244}\222a\277\356K7\364\244+\215jk\377]\32\267\254t\233vev\306\64Y\216\314O\307,\223\25#oR%`\227m\304\275\35\314\60|\224\255P\2\17\320iDX?\263\250\67\253wXW\260y7\243\332\177\205b\231i>\223\27\261\306%u\262\327\353\70\363\23\371\220i\330N.\301|\207\266\354\307\37\207G\370\223\62\275\70h\260\305\217\253\64\240\351\252\27\331r\271\271\27\4(\243\30?\236\317\365\232\f\355\261\227\316O\234\20\307kg`\1\36\374\327\315\251\23\214\\w\364X\313\61\257\266\310\365Z!\252\313)A-\270-\220\246L\256\0,kv\307\377\222}\357\4y+\1n|\212M\250\71\274'''\177\262G2'\v\23\211\34\342[\356\240<\235o\327\17Rsj\\r\252\5\311Yw\372\323e\262\350\245:\211\276\234\241t\371>\274U" + "\322Q\232\307\334b\224\344\n\36\230;p\345m\252\220\265\237\274\231[\211\255\257\221\322LS\301uK\353\f\345\213[\364v2\212\245\271\375\337\352|\33\365\237\31\240\235q\350\247\204Cty\314\22k\316\\\b\344\311d\337\311\352\213\265\31SwN\303\344\253\224\260\336\231\242\377\371i\232ZMG0\276\70MG\303\320\\\320d\365\64s\331\332*'d\301\371\222\245\323X\351\202@\22\372`\301\321\247\247\375\344\377", + 13139, + 21497, + (const Bit8u*)"|U\345b\342\352\26M\335\235@\215\66)\304\277PH\23\206S;\207;U\306r\206\204\221\372\270\273{\202;\363\30\307\336e\374y\356&T\256\204\371Au\353Zk\257\257+\320\257\351~,\32\363J\32\65\253\323\356(\303\304\270\273\62\62p\334\263\64\62\265\23\330\215\4O\16\35F\31c\335\224\61\61I\33\36\234\61X\27a\370\234\254q\214&\215\5\216\63\302\37\366,5@\205\351\210c\306\330\356\236\224\214k\270\253\377\250\324C\234\62^M\20\317\65\326h\324I\263\305\315\231.\205\207?\t\360/\4\177\23\237k\236%\31*\320P\301\34\303'\372\355\246=,0\255\b\360\371\257D.\342\220Le\314\63p\230h\316\267R\346\277\332is\255\215\61Ow\20\246\266\301\302\207\64\67tX\233\67\37\64\n\346\263&d\276i\26\343\215-\7\v,\364\6\342\355\232\376\0\v\6\241F|T\243\342\214~\315\35\214^g\202\61\302\b\207\330x H\306C}\2\374,\302\7\332s\221\223R|-\32\353\261\35Z\205\224-\245\212t\374V@\214?\240 \203\214\240A\253\217\37[[\365\306\337\312T\242O\245\23\343\307\231\204\260D" + "\350\70\233\230SH\323%\335L\254\7\65>\261\61!$n\204P\342\351\234\230xy\332\263\4s\16\317$\333\317\234\375Y\333jK>9\332\203\222\236I\317\222\2\333\261\21\7\304~\376\342\307\276~\363J\237\251\331/\264\373+\303|#\324\357\\R@V\220\357\6\250\0H\324t 1\32\33\f\364\373|~\314\347\363J>j\326G\273}\f\343#T\236M\6\33H\200\220\3\by\200P\0\b\21 .\2\332\260\337\375j\221\344|{\247\224\\\353\300\372l\233&c\337Y\365\7\231\334\32\343\214\366\0\237\274\346\26\222w\207,\36zQ$\320]g+\326\b\313d\362\221d\321\356\3\332\253@n\237\367c\27\67\275\311\267\"\225jGtjh\232I\271\375D\212\335cS\342\6\231:\26\342R\307\5>ufNPe\224\332\270,\246\256]\231N\335\7.h\0FJ\275=\245v\4\372\273\235~\fwy\245nj\326I\273q\206q\21\352|M_\266 \263\351A'\231\236\304y\370\b\360s-\224\250;\274\314\246\205\71.\355\27j\201\240\202\237\352<\275\240\360\351uRHk}\377\245\365\233\200n\237}\207a6\275\343\"\323\17h\356\"\305\247\237o\t\231\366\35\224\31='f\304\v\220\371\63\251d\302\203(s\272\267\326" + "\2\244\322W\217\200\214.\377\231\331R\344\213\177e\256+\362\346\337\231G\212|\376\237\347\212\\\35o/\22r<\316\274\r\205\272\234\366\5\262\270\316fG\25.K6\360Y\256Q\310\6\232P\366\227f1\33n\251\246\303j\366\340\351!6\273\256\220w\345\232\226-\342\17\342\262[3T\366\356\0\235k\354\253\16\230sHd\216\224\271\234\310\337\312l\315Fog\256\317\306P\346\321e\361\371\225Z\366tnY\234\311]\30\30\223\362\315\2\252\303\326\4\233\227u\224\34m=`\313Q\7\276\r\224\237\367\210\371p?\4Z\347\223\217\340\204\224\217Ma\235u0\254MQ\215\205%\272p?\326\323\353\225\272\250Y\234v\367\60L\357\256\32T\330\374\25\216\314?\nU\211,\264\321\250\60\256\210\246\313[\233E\210\70\216nt\310\36\257\311\33\352Z\210,\370f\271\302\214\302\27\346q\241\260\62\201\n\247\32Dp0\253\214\345\327\5m\25\223\nw<^{\24\212\r\n[\354\355&\213C\275\\\25{'\37\351\266\25\255\345\66\301\6\1L\1\201)\210`\np\313\4\70\257\5Iq\264\245M*\322\255\355u0\234\273Q\224\242\61\336\360D\5\203\215\241\342\257\1" + "\300\250\252\206\1\373\261\226\300\b|\32Y\324\345\233\305\35E\277U|\30Un\227\260\230r\247\324\257\350wKnE?\334\261\267\16\v|\tQB\t\321\250\204\30\261\204\330\3\351\237\264\245\355\340\270OJ\246\322\357\351?\262o\360i\272$\375\306\224\26\303\204~\232-\254\374N\226N(US\23\324\20*i\262X\272\264\317\333\221i\357\363\356vxKw\257P\245\247\227\351\62\66\305\224\273G\210\362(\311\252.R\267\216\262<\351\25\312\334\232X\226\341\241q@\5\24\71\71S\236mh\222\312\253\215\315\366\213\225\65\313>j\25,\343\200\277x\226\32o\1\232]\366Z\321X5D\226\267A\227!\350a[\226+\337\33\342\313\317\32\204\n\326\210*\235Mb\305AXK\r\355\326X\332\367`x\b(x\4hx\f\30x~wUE\207\243\345*S\213|\305\7\331A\310^\204\354\23 \17\205\205m*g;:-H\353\36\313\1-\366\322\321\25V\35\346*\333N\361\"\330\371X\355R\273\2\225+\230\345\346GV\16\201\371y\247\245\342\361\251\35\352\n\214]\317\17\331\352\304\317\210\3\71\302\244d$p\244\304\217m=\324\307\177\363a\325\215\211kK\34Y\341\25\251`\273li" + "\223B\222\23\301BB\355\372e\255\232\336\245\256\353z\335\335\377y\216\273\365\353<\27\366\363\274I\202\254p^\275pdrf~2\307K\322\351\231\277\336O\263\211\0\221\26\27P\372\315i2\275>\305\246\367}\\\372I\220\317\230F\205\214C\16e\310\tx\202[\307\t\7\250\242\313\206g\340\1)\304\63Q\203\210\25\300\314\365\4\220\2\237\331\222`]\343J\317HLM\7\63\367)*\363\261Dg\276I0Y\333,\221\235\234C\331\300<\t\377\263\360?\227\345\266yx\rj\342$\4\257\367\0\22{\301Fd\343\61bSB\331\71\212\374\235$\263\331\327\31.{\203\346\263'H\310~2\26\312~\21\0dSK\230bR\22d\366\353T(g\2\4\253:bSS\261\250\326\6\265\260H\373\367\30\346\0(\23\345&v\310\334\205nr\203]TY\373e$\36Q\v;\275\321\7 \372{\344\357^\331\277\235\224\3\340\266\206\327\375&\205\24\232\314M3\0=\236\317\261(\264\247\n-\7\377a\"\235E\271\327\346\331\334UJ\217\302\206\253\257\\J\322\212K\206,NC%L\f\35\230\333\231A\271\303Q\210Sfs\267.\276(\277\201\344\230f\213r\367\r\322G\271/Eq\301\60\202EcW!\306q5\220\267_\4\356" + "\233P)\"\357\266\363\271\324\270\0\370\f\345\375\243\232\201rF\226\234pH\262\212\200\vAQ\356\201\340\302I~\306\343}\220\217\273=7\363\227=^vS\346\362;F>\177h\202y\302\63\20\243!\323\fd\32,\257\314\2\257\277\350\227\365\23\3\f\341\252@bA\20\373\320\205\7q\372\243\206\311\313A\321I-\370i\377$\303\\&\24\r\221d\376\226\213\315\277\367\274\35\310\177\253Z\362\b\360C\301f\225\360\256\36\66\1\260j\21\376\352\63\361\205\200Y(D\7\216\336\n\331\212\27^\35\61Xq\246BI\350\304\207/\0\70\t\4'A\302Y\303\237\274V\376\322p#\375S\244\3\322\25\326W{\336I;p\271.,\277C\376\272\265\301\26\224\65\256\260\275\316\27n\255\351\311\307R\5(Kh\317\241\351\201\25\341`Xx\222@\205\217\347\364PT!\35\31>ly\21\25\276\222\364a\203\272.\32\34T\321N\320E\337E\246\310\271\341\301\256\201!\t\222\305\350\f[|U\342\212I\231\377\223\64\vLr5\364\371\365\201\233(*\376\270\5\323c\4\222\235\341\61\24\357\353~D@K\262\5#\275\304\222d\31>\371}IM\207.\247NW\317F9\31\306E|n\5!t\v\360\35\372" + "\334\252[}r\211\232\300\201j3\305\26?\341\36\225\214`%J\366\255A\203)w\217\60^\362\201\362\226h\323\231\321g\273\304\222h&K\257iy\341JWM\274\242\266jS\241\322\332\231Hi\333\250\37\16\5\203\350n\237h\326E\355\216n\377\374\223Z\334\245\303\0]\272?\316\224\276\30Sc)[\347\311\262s\225-OMpe\376\22_\236\r\n\345$\320\220/\220t\303z@\277\316\324\346\304\63\356\357L\374,}N<\317\20\345\r\2\225\357\222d\371\263i\b)\314U\316\313|e\\z\256\205x\37l\272\223C\23,\216\32e\225n\331\312\305X\327\323\16Lf\205\222\250\212(\323@?L\345\362%\242\360U\2jx\216\254\254.\260\312\376\213\254\27\251\244\210\256\367\251\234\270\b\261z\336\353\264\rM\26lY\275d\6F\343\253H\265\216h)6\22\65x\274\264\337\3\352\335mR\252q#_}\323$T\327\315\260*\310\306\200\31~\264p=\322:\251n\315\335xP=\231K\335\254\276?\267\371\260\372\325\334\26W;\267\316\203\201\26 n\360\352\335\240(\250\331\232\327\31\34\37\330\271n\317O\373\257\61\314U\242F\321\250&\320\320\214\63l-\212xE\16\201f\350\223" + "\71\230\374\253\305c\323\222\372\33\334\71\202\30\2H\7\236\271\366\206\221\252\275a\246ko\230\30MiS\250\266vL\326\16\16\271\332\303\253|\335tM\250\373\2\241zL\365\214j\253'\326\257o\357\302Q\250\352\271\300\60\213jy\324O$0'\v`N\26\365\362\f.\271\60\24\367\16dG!\v_m\4\222\n\273$amE\375}\n\256\n\330n\263\3\3\207i\361\213\351\325\220)c\326\234C \36d\375\23\235](v)\214\353)\37\324\277K\311\67\33\26\315\262>jx\345\33\217\341\307\226\376hO\340\f\34\303\70\345d\23\256t\224\16\331\360\313\217\32\350\306\376\343\206\270\265\337o\17\273U\6\31\325\253L\317\247\222\350\67\270\3n\266\343\61\340\341\32\257\256\361\215+\353\32\362$\264\24\36\252\311l\232\rp\r\205\340\33\273>\241q\354\200\321\221_\3\61m\257Q\2T\254q\317?)6-\36?\366\254\232\376D\337\4\222K2\16\227\350'\257\64`\244\61\f\327\242\315\247l3\340\347\224\16\257t\204f\324\30j&M:\311\202\"\342\372X\25a\315\35\23\17\337\232z\232\321\22\205q\345\363\250yw\261\333\260;\360\236\226\333\213\360\315'" + "\254\320\374\202\353\337AY\261\367\2-\213\334+\277\341\27\34/w\230\322\313\35\346\360\"k\371dhr\330V4&\354Q\241\326\234\255\277\223\330\272v\373\216\65jxeUu\27\4d\22\244\276\357yZ\17\314B\353A\317Q\0\355\366\201\336\277\32Ud!\315R]G\204+Vb\363_ \363\35-\305\35@\3\320\333\263\5\330\233\361\343%+\\\273\272am'\254\355\"ZO:`\341\237\336l}\322y\252\n\214\276\213\332\312\331\206\336Wm\332\20\324m\333$\351\203)\16~\331\260\66s\26lm\377v\343\377Y\244\266]\206\241\63\307\254\35\273\226\246\177B\333\353\31X\216\201h\274\320\25\22\355\31\31\265\243\34\331\236Gl\373\365\330\213y\215\264W\302\267\223g\303\252l\264\67\240en\337b(+\246\22\201ef\373\254\205\261\324\260\333\207^}\320\b\36\354\222\206p\310_\227\371\372&\270\375\65B\247gi\362t\214\31\302\200\320\25XA\212\260\355\203bU\211D\353:Ev)6:|\234\7\235\372\66\310S\322\307\235\306e\376t\r\202\211\315\34GU\5\210\237>$\f\300;\356)\235\317\334\324\377\370\264\352\306\264\335\65\n\363-\264\330\320\26J(\361" + "\244t)a\224\271{\205\37\235\273\273\273\376s\335\335\35w\31\305\277\306\275\237\347>I\220I\262nm\320\227\367}\364\234\363\20v\367\352\31h\305\277\70bA\177l\221\262-6J01\247\226\215\341+\270\30\17-\22\223(Gl;\256Q\253'll\236\350\227D|\370\242\330m-\6\316\300\301)\4\\\305\302\23{\200\311\5\n=L\232\6\250CX\355\334\37r\365%\313\330[D\f\3\300\34n\300\34Cm\277\207\17\315zG$\34>x\300\334\267\360*\317j\335\32d\355\210'\216\210\225\215G\343\26\247\264@\334\71\303\304\321c\260\300I\356\305yi\1\243x\26\263\317m\272v\331\334k\327'N\371\342\224\t\213\207\254x\374 \4\377\30\340/-\3\207\372\23\17\24bd\245?\276\330\303_\4\334\"\341\21\24\236\241\340E3\361\363\356\t\251q\253\204}\0\"Z\362m\b\21\65M\325W\305\337H5+1\216@\n\r\3\36P\6\226\360;\360\304\66=\221\70f\363$.X\311\304-\37\232xb\246\222\253F\350\244Q\313$\275\26\66\71\265\201K\356r\301\22~0\265\27*\315Lr\316\343\341\223\27\65\332\36\250uO\364;\230\233 &D7'\357;\230\344k/\233Zg\346R\26\210\254\215\27E," + "\251XvR\336\377\222)\346\177\n\34n\240kr\237\350\375P\6\303P\204\242P\204\226<\251\200\205L\355\265\241\251\23\223\300\346\4:u\331\313\244\356\331\331\324+=\227^5!+Rx\32A\211\264U'EZ\332\355\60\362\351Y\233Um\26\202\246\347\243R\1\236\336\324\217\272i\225\234\r\365\352\35\t\27\265\271\5sO\6\27\334\347dK9\25\277\177\374\f\231>\36@\323o\fT\6\31\5 \rn\33\65\17\241_\306\275\2\313\260\253\360\214\260\222\310l[\355Y\222\61}\346\250V\306\364a.\23Y\333\333v\346\334\32\64s}\35\60T\300\200\26\267\24J\346OYA\346\231\17\313j\303E\266\376\235\317\242xx\342\202\6\303\n+\t\274\260\6'\n\353I\317B\370fAw.|\251\240\273\20\276U\30\17G\25\272\222\224\217\5\234b\370\302\24\255\61\253\217\323\202ha\26\243\n{p\272p,\304\300/[\210\20\\\341,\331\367)7S\270..\363\222fUz\327\220\302\24\67\\f\212\226\253\34\214\240\206\303*\345)W\21\345\250\177\335\354\243,\355\347\312\22\331S\4\325\372\71\330\353?\27B\301\5\362\360v\225\322,\f\341\222XAT^\25\4P8@@z\245\354\0\202\v\322\0ri\t\221Zl\221\322\62\305M+$\177\315\260\207\267\251m\20\272\271[\36a\250\253\314/6\243/6s/6\17\70\213\272\372\1\350\342\333\226\277\263 \364f\321:\265\310-\316\n\227\212\363g\242=\303\320\207\247\326\253\317\247\310O\7l\305S>\f:\32^\274\346 \212\357\214\22(\24\320\222a\v\365\223\215:\372w\366\21\246\64\21dK\1/W\332\335\303\177OJ\207\2!\215\215/\335\327" + "\20\303rp\32\303Jo\b\274\274\2\27\317_^7\217\226\35\21\252<\265H\227gtLy\277\235-\37qr\345\205\215\260\310\r1\200\313W,\32\276\374~r\24Q\221\257\60\262\302\20\200\257\b\351\360\234\376\33\343{\264\62-\327\336\312\66\267X{+{y\256\62?!\355wR\235\304S\225\263\6\311\7\230y\20\37\225;\363X\345N\4\257j\347\210\252v\321S\35\207\30\231B\253S\234\364\1\325\331\0S\375.\314V\317\35\344\252\347\16Hdj\225\37\262x\246z?\32\342?\"\337\35\37\222\204^\267\305a\330\0\220_V\242B\303\340\25\25\314\217;\374\323\217?\336\305B\32r\230\310\65\243\36\3\213\341\65\324J\324p\223\247\66%\240\265p\200\252\35\24\350Z4\314\324\316oak\267\334\\\355\311A?<6\344\275\265\367\32AJ.\375\67\312\264\"\204\203\34\31U\317#\24\232\31\365\273\250@\377\375\201\17\276\36\341\25\337\263l\332\244\70\376\227El=\272\354\nP\313\323Vzy\237\361\356\362\205\320\230\f\271,\f\210?\212\311\270\204\f\304\361u*\260\1\236\65\0\67\232\20\271\321W\306]~\346!\227?\270\321:2B\325\255\b]\237\264\62u" + "\332\0\357a\301\62u\36#\370z\b\327\300)\215c\323\32\347\270\217\67b\341\61\334\345$\210qq\317\365=<\260C\266>\347\342\352Kfi#\24\b\33\252\232b\375\264Ud\223 8\321\365\313>\6\356\262\365\7\243\334_\307L2z\222\252t\375\305\350U\325\251wc\255\200\202\306\6\64) %\355'\325\264\241w\340\r\247\231h`>y\356\35\220\242\257\21\270\302\64\366\\\375\314s\327D!\251\21\321\256P\351Y{`\254\277W\302\366\372\276\26\66L\240\1z\3\rx\1mj\5\252i&h\270\315\364\213\247h\274\246\23\303\371\346\16\r\253\322\375-\20Vn\264\31\tSq\213@7\317\7\231?\361!\26\36\343^X\6\360A\305\353Q\340\316rUr*w\262\346M\v\331|\352\272\324|\35\264J\326\6\35\261\265\306\316\376\316n\345ZF\220n\254 \304\300\372OZ\256`\320ny\334\332\21\f\272\234:EN\5\246l\235\261\302\227L\306\271\326uq\354C}:\362i=F\261\366\n\33\336\66\214\20\355\t\v\f\331\4`\350\1\264\355\347\251\366V=\335^\334\303\264/\355e\333\217\242\\\356\340\322\20\30\265\237c\270\252\372\326\61\364\31\273\234\362\"\224\24\267\6\f\7h" + "\21\326\261Z\361\216\367\0\321\231>\350\351\354\f\221\235c\2\332\71\353\245:\17G\351\316k\204\201\307\330\256\356*\327\265]\351}`\327C\0\60\215.\r\201)|\356bd\350\322E\202\210x\272\376\213d\367\220\25\355\236\fP\220\261\242|\255H\237\206t\311<\310\346?\322\70\326\275A\340\335{\f\1\267\305S\374j;{\251\373r\313\377\t\267\252\307\64\272,\236\20\252\64$\245HK\214I\30\237!\311\fC(\244.\221\257$$\r\251\273\373\347.\353\356\376\264\376\264\356\373\22\1\342\356\336\374/{\356\bCw\347\262\365\302\350\275\347\234{~rE\266\337->\356\247Bq\276\277>$\364\67\263\317\372\333\342,\2\71\375W<\265\375\267j\345\376\7\f)\365\177V\346\304/A\b\212\227\242o\264\317@\346!\6\34w\331\313=\206\f#\fx\3\342\0S\252\31\227\202\355\312\236B\272}\36\70\33\220}\344@K\230\32H\265\322\3O\324\t\37\264\35$\6Kc\354\240\327\313\r6\\z2x\374\6\32\206\240\70x\356P\375`\312\257\301\374\306\267\6\37\\S\212Ro~\261\65\26C0\3\317\230\f\276\257W\\\250\16\345\230w\204\36!\314\16~Lr\351\35" + "\24\237v\322B\332\307\210\351@\216\203\305\252\305@\324:r\365\\J\263E!,\205\t\305\347\37`\265I7\333`y\5F\240\370!N\v\312a\0\350\66\260\312\344\267SZ\365uX\337\360\37\241\334\332c\212`\352\202c}\305\364)\35z\300\\\347\1\261t\347\t2}\355\70\5\30\212N?\n f\340V\372\35\345\340\253\22KL\314\354\335U\237q\352\61\32\310T\225\310\31R\17y\353\61\317(a&s\2)\r>\325\320\220I\24\363\231K60A\226hm\0\252\307\226b\322M\350\377\36f\36z\24T\211\36g\336\70\240<\311|\344F\203\241\265\\x\253\23\377\225+&dpXV\234\354N\324\230\4\201\"B\210\224\301\32\310P\1\216\20\331\32\335\250\301\266\323\230\364\321\230,7\26\304|\376\4\216i5\37\276\233\371\313\241\4\361\227\335=\352\250\303\277y\370\267^\356\361\330G\213\16\6g\226\312\322ML\266\61\212\322\203\315\66\305rB\n\206C\216\241\226;\31\343\223\61\361\313~F\207\250\30\301\1\t\316O\277rE\212\201\271/\246\346kcy ?\254\324J\n\216!*{\344\24\235=\242\32-\263m\325\b\222C\37{6?\260\262\35{\353\177\362\332\61\275\370e{;\272" + "\324\240\62\314\241\321\350\371^\0\366w\350\354\375\273\352\351pe.\373\\\247\t\342b\366=\233alp\253'\26\364\266\204\260)\t3\236\203\345N-r\352\202F\344\324\321t\320\322uU\7\305N\36*\362\27\341\301\223vM\250/C\245\315E -E\202R\263\252.E\300\212\305|\371M}\32It\241*\320<\207\370\"\33<\200\4\307Id,\2y\36A\275\246\331g\266*\"\374\66\373LJ\353\63#\16<_l\252\30\226\326K\365:~Dl\25*\263C\261\36\26j\22\226\332\65\17T\237\314\231Km\223h/ED;\370\224\252\321`\16\245*\370\241\333\1\341t)\4\234\7z\264\207\350\371\254m)\327\341\353W`\22p:\344\320\213\0\65\364Y+=\364Y\vJ\264\341r?\1=\b<\243\213\33\366\373\370a\266\366\351p\323\225\324\263\367PQ\360\202\341X\36>]Z%\r\337\b;\261U\204\275\354\7F\3k\315\64\7u\370=\6\240\20\v\t+\200\"\26\5\25M\212\302\2H\242\252\"\300\207\226w\0\66\342\60\62\246jb\325-\303\177d-\251\217\330\\\314H\351~\243x\220&[a=\323#\207\222P0\23\271G7\7\vHX\362\363Mv\352g\222\215\36\241JPq\33\251\17\3\206P8\370\315\303\307\2|-\302W\365p" + "\250I&\310#G\217\341\330\354\360\303\221\363)T\373\n)\375\232+JaG.\221\334\310=\212\37y\213\26Fw1\342h\5kJ\27\362h\210\23\244\321\16\36n\205\267\26\30j\35Yn)\306\274\267\17\16\362\22\337\r+\334\350\275\363\374\350\275^\1\376/\276\247kO,\276\366*\314\350c\27\61\372N%\262\360\215\25\337\21\307\312u\353*\324\312B\306\332\36b\254\346\n\367\213{w\21\0\23\306\202\32\210\364\260\260\26\340U\272\\\315\306\221\f\320\250(\304\230\210Pi\204\327\330\277\310^\274?8\242\2\211\6g!\26p\354p\230\35;Vi\202\24\256\275\261\34\23\236\n3\326\26\271\65vU\211\260c\317\243\217\307\336W\242O\306wG{\305\361\62m(\33p\206q \b\272\300\337\222$\306\275\335X>\312\264\203\375\260\262\205\30\257\f\262\343d+\237l\23\306C\207\305\361\270\232\30\377z\341\3\350U\300\23\335I\214\267\344y,4X(\217_\351I\355\303i\264\343OW\321\364\216\177\0Xp\5\365\374\330\3?]%&v\223\354\204\273\21PW\24I\272\23\265\21\21>\316\361\306f\36Z\277\334D(\305\374\326\23&&\24\205\235\350p\231N&\267\0Kdq" + "\211\313f\267\34\300\233\23\227\243Af\342\271\352%\235\370$\240\316,Z\333\343\236\206I\273\267((\305\325\244\360\"w\373\244\27\355Z\340\204_60\342d\r\312&\272\235\222'C\361\"',4J\221\246e(\232\220\201\242\34\2v\7\61yd\217f-V\375\30\215\362db\367\36i\362\266}\347\36l\227Z\214\226\5k 8\371\256\302L\355\354$\246\312;P=\207\277x\370\257\0\200[\234:\4\321R\247\216WB\236\252>\340\226\246\"\336\200\245Z\vEB\325]\321[O\235n\324\71as\220\v\22\334S\t\5\270\350\307S\335J\352\t\374\321\363_\316\233\b\226\241#\276\356O>\376jM\362\374\223\257\272\222\b\270\274\71u%\231\304\341\214$*c\21b\352\355\34\320 \255\63N\33\350+\334\264\275\216\237vV\251G\313\20o\360&$\265\337rm\233\256>\314L\37\215\23\323\17\232\270\31\273\302\317\324\64\t3\241Vq\246\271\305\60s\234\223f^\253\254\262\66 \314V\200\3a\205\205\33s\263\224\304\317*\16\243&\v\362\354\31`\237f\273%\207\243\20\301cW\217\366[7z0\231\b\337\317\276A\30\200%\254\367\325g\217\31\335\321Y\232>\306\316~\32\342" + "\346\\4?\27\344T\6\217\305\1*n\256\271\230\237k\261\345\310gL\265L\0\362\n\33\7\65Z\17\367\\\267\302@z\21\220^\252\335`\356~\355\377ksQ\332\60\354\334[\2\204JB|/\251\25\20\60\233\200-!\32\241\252\242\320\230ie&H\314\333j\371yg\0\362\5\232Ky\276\322\345\227\346\25\217\23S\376\236*\310\5\250&M\324\354\266p\343\16#\216[Ya\320+\271\371nT1\230<\23\304\335\371kJ\317\275\371{JJ\357\263\346_ (\3\375\37\203\335\4\63\377\231\"\30\346\230\20\201\343|\340u\27\366\206u\n\275\20\255\33\0b`a?J9$F\345\301\316\5\237n\266\307\251\207\26\252\211\6\232\334\360\70\216}A\311\255>\216\203\246\367\5Rn\204}\211\5&\f#\300\266\67\340\243W_Qoa\27\232\5\21^\255)\301.\234h\344\26:i~\341\2#,\334\245E\370[}zJZx\356\fXN\23\\ZW{\255\201\337\242\335\251\275\304\36|\337\255Y=\nr\253G\210v'\326~:\26$_\365P\231A\275\350r\345\66/\265\5\331E\322gI#\223\320\7\342J\332\242\24&\376\275K\342\26\317\326\360_\351\254\201\363\224\274M~\234\274\330\vpd\361\261\255H\365\225\267\240%\205" + "\214\265\350K\312\17?ja\222m\304\222Ma\227\234h\22\fcy9\266e\372c\2\216\255KBq\244yH\357%\260J-El\372N&i\251\271\243\263\274\340\2\1\231\376\277\b\f\361Q\205\224\37n\251\313\303/]\252\26\226n\237\22\227n\237\226\227\236\267\264\276\271\364Y<\276g/\226\"\\\256r\1\304\325;a\2\353\202\247\230\345:\232X\16\223\334\362\251\60\277\334\5\306\35\350/\212\241\3T\221p\257\216\204Er\371v\25\265\374\264\214^~\367``\305\346aV\234*\24\6N\221\202\235r1\204eW*O\213+B\330\350\62\324\375+H\352\306\331\231W\342\325\314Jk\r\273\322\323\310\255\334\t\360+o\22\342\312g\36}\371\334\203C\355\232\302U\300ZD\300\246?v\265\234\324vir\330\235X\260iA\226U\37\322j\265\323l\346\261 tU\f\23\253\221\62U:r\27\234g\315\32G\363\360[X=\303\212\253waE!\365i.\304\326\344\v9n\254L\260V\242n\364Z\333W\314\257\371J\236\256\311\21Z\\;\343\314\225Hy\255\v\302~\355\232\315\276\27\315\237AT\253\220u\355Q\0|\357ej\3\345\300;\362Sq8\370\316i2\256Q(\345x\254\f\371\247\351dk\357\36\342\327" + "\17\304\304\365\32\277\316\373\300\247y|\312\272\330I\256\207\23\346\306\325\66\346\353\236\16\215\251C\214\310\372\21\203P\1\71\331^\17\4In\33Tw\22\27F\271>\nN}\245j\340w\203\301L\256C_\272~\315\315\256\3!\276\341\270\306ox\363\253:\n\335\215\332\203\230m\305\33GI\250\355\24\261q\226\206\226\205\341\66\332Y~\243\223\23~\337\312\213)A\227\322q\206\26v#E\b\33W\217\213\33\267O\350~!\264\370`gz(\26&6\36I\354\306G\24\267\271\267\230\337t\333\204\315\352\22\303\210\347@\367\222\66\31\334\256D\260\341\240\71\337d\230\64\4\22\334N@\227\202\34raa\234K\340JN\303>z\222&\23\36\21\f\371s\tA\350\312h\374\304hh\370<-\217\330\31\3\207\264\274\355\61#\24\356\342\271d\304gG#<\305\217\64\4\322\324v\327\366DB\270\275\203\202\353\353\322/\314#\315\24\67\262\33\241\221D\200\377\275\263B\30\71\353\26G\356z\244\221O\225\313\243\216\255&\256\64Gr\316\231\334\263jY`\270\f\215\372+TM" + "\32\226\346\222c'R\327uT\266\322\243Mvf\264;\213\35=f\3`\303%\32\321\350\225\60\377\253xT\367\234\300%\311\254q\236'\343\244(p\320\246\367\224\254\301b\321_\30\275K\351'\225L\236B\215c\275Vu\214z\264\365\353c\362kYj\245\245\263\331\\F\235h\343&\222,cz\"Fd76\276\235\20\67BB\334\bm)\356\207\321\350\23\65\264a!a\314\205\344.\v\v\tm\b\342u\241\61\273n\\- \271F5\266\r\324'\270\276\36J\343\357\"Nx\222\346EU#%\237\250\315\341\n\231\242\364\311t\360\372w_\226\7\205\t\306*N\204mj\323\27\267+#?\367\275k\274\370\277\33\265\320r\202\225'vp\6\370g`\37\16\34\"\f\326\0\200*}\26$\247\27\350\213W\325\364b\2\310\206\211Sni\342\206h\32\260kp\26?i)" + "\260)\223.\253\235\310\331|\243\r\327\316\204\65\0\344\320\223\252\314\376,\4\363'\211\331\1\210\203\356`N\t;\22\4\302\5\201]\6\331\213\325\224\337\60\216\330\320$o\341\225\311\250,\244_c&\367\356\343&\217\341:&i\362\6'O>\223\314\261\345$\345;SyQ\364\63W\204\237*\211KS\1F\306#>\252\302\66\232\264\373\327\301\v`L\210*!\316\276\225\24M\t\f3\245\344Q\311}\334T\23\253\306\341\324.N\230:t\320Xb\247\316\346\342%\226\236\272fc\247neW\3\300\253\232z\234\223j\16Q\230\376lx\205) \340\365\350\305\27\273\314\247E$\320T>=\"\341\334\202\302\215\61\63?]\310\250\232\64@I\t\240&\234F\354e2\17\313z17\272\362I\375[\244\241kjD\365d\23\320j\236\212%\340PL\20D\354\231\222\254D\253\25\352\302\261\352\343\301\36\201U6\275\274\\uKa\\Q\203q.\354\256\317\1\70W\335]\37\313:@\367\343V\353\312\321j\v\305\257\356w\n\253\311vX\35R?\177\264z)\216r,\252+\264" + "\253\63-\322\5#\202\37\214\b\1\340V1\35~\203|D/\324:e}\304\324 b:\335\fyE\4\301M\200\233\250\367\251+\344\341\373$\364\360\257:J\374W\324+\255\345h\347\265Z\205Tk\256R\v\211N\307\240qMa\305\265\66NZ\333c\324\64a\23\225_\215z?\244\270h-\311\340\223\272v\301*\256\335\261Ik\217Yy=\37\346Q^\245\4#\241u?m)\1\206\303\17\f\207;\270\256\370\350\365\346b`8v\0\303\261\223Z\357\fp\353\247\302h\375\256\225_\177n\23 \277\24!\277\224 \35\225!\25\305Mw6l\261\226ZHMC\33\271NB\355\272vv\313\177\274\341+\367\37\306\360\17p\264JF\324\177L\247\203\331\236N?d6x\7\267\321Z\211`\364\343\343\33i(\26\67\366VI\33\211m2<\377hw1\264\221\244\205\215\353qi\343y\245\274Y\300\231E\266\251\302\276M*Ho\306\252\361\340\334\334\263\25m\36\367\361\233@\331n\276\n\210o\\~@T'\344g\347j\241u\26\374\366*&\0\240\203\216\326;\307G\275\241\233u\351$H\220N\370\67\312\7\355\70\64\34M\222Z\334\377'\355*\200\342\310\272\65\63\304\311@~`\200\0\201i\230\366nH\306v2\220\332\20!!\6!C\204,\33" + "\67\222\335\215\324\376\321\225/\356\36\210\242q\335\262'e\317\376\347.\277\227\373\323\222\347!\362\316\355nz ;w\236U\25Z=-\367\336\276\347\234\357|\347;4(6\222\303\336s\327\7N\263\232_\177\264V\351\t\255\23z\224\16\227\354\62\205\257\253\302\306\357\365\307\262N_\306\353\65\206\371z\217jm9\322\250\262s\232n~\345=+`\240\352\324@\225\64\224\355\223\207|y,\355;D\314\272!\305\243\rEF\211\23\325\16\65\70\212\244\301\276\355U\342\320\202behi \314\304\1BC+\306\373\323O\331\320\272\65J\327\306O\204\241\355\253\324\256U\355\372\320^\302\265\333\255Q\210\373\330\b8\317\276\277\206\354\276)\f\35X\253\262\324\v\375\64\366\327\230\364/\227\362\231\307\243\214\275\311\215\n\247\367\372i8t\372\225&\230\t\323\330\353\224\63%!6%o\212\"\352\33#\254\275\211\61U<\235\274\202\321\352soV\315\226\337l\233\35xsp\231\362v\334r\246\fe\271\23o\247\270\205\253o\313\274\265o\265I\266[\317\306\222\fy&XO{\33+\322\377|k\320x;\327t\213K\363y\341\34M\305\333\26\217\372v" + "\275W{\273'[\177\227\235z\177\31N$\206\337\345\223;\305\4A3\245\235\336UD\325_\35\37!\337C4\336\311\255\346\273p\263}i\235gq\346Y\260\336\273Y\36\375\335|\257\303m/\340\30H\342\260\305\205w\224\355}\327\36N_>[KR\22\377\255P!\251\201\225\304\335\350\210\360\rQ&|CRxU\210\243\313\31\71\357H\202\322B\242\360\216^\243w;\350y\16y\364\367>\257\361>\220=\354\66,I\217\333\277\217\374X\371]\357O\324\367\263C\206\203\16\375\207\67\r-\223[\35i\363\200\271\f\214\341\3fL!\376VN\226sDj\336\337/\367\253\355\246\366~\203\244\277\337\241\20pQc\276\377\212\274\t\323N\30\205\361\355\224\b\247\364\24\337\nQ\5\337&\342\2\276]T\241\341\333\215\61\35\337\356K\30\200'`\2\71\225\316\323\250@~c- 5Q\226\234\226,\20\232;/\275ssJ\217)\300\352\350\6`{4\326i}g\232\246&\360Mh\370t<\232!\216\26F\24\34-\243\33:\252\62\\V\303\321\32\211\242fix\21\22\377\353\350\274\346\326\311\1Z=t\344J\257@\313G\245\345\243\321b\327i\261\33d\244L\302N\35q\247\24:\352\256\336\315\70\332\221Hn" + "\301\321\255\211\266\255\70\272'\261b\33\216\36I\260%@\246\274E\305\261\t\254\250\214a,\n/{\320V\261\35\307\362*YIT\245=\213\1\37\303\1\276\227<\330_\247\300\333$\340Xy\304\240_\314\375\16\332\236\231\fJ\236\215\225=\210s-\33\25\232\325\321\235V\371\214\177\324\302\346g#\345hR\256\61\216I%\"\216\325\231\1\34k\f)8\266.B\237\331)j8v\240\301\212\255\217\217\365\230\70^\340M\21\306q<\240\251!\34\237\257\33|h\302\256d\367\n\2137\215(q\325\344\311\212\340|U\330\211\27\367\341\323D\"\331\266\27[\255\242\311 m7\22\333n,;J/^\6\63\272\205; D\335\332\216\363FLt\6\327\312\325\234O4\267\222\223\352\17\322\26Zn\221C\202\326\26Z\36 \274T!\254T \314T%\274T\303\371\205~\272\307\226r\3\347\327T\230\70\277)\230\242\"\340\374\347jfp\334\241\340\371x\276&\271\261d\236\211\205\361\261\263%P$\305s(\323\304hl\324R\370\32\316\37\31cm\344\270\60q\254Sy\302l\r.\24{]ccG\22\223\350\276\344E\245>\36|Fb\t\266*\364\5i\232S\204\316\345)\332\372\323+H\177z\245\61\230[b" + "\342B\230\216/\342\tD;\242\20?1\355\"\364\277\330\322\252\377EG\263\223\217M\341n\270\60G\25qa\211NO\263R\223qa\275\21\300\205NQ\301\205\303\222\200\213>Y\305\305J\305\205\202\177oK\324\244\257\324\344PUY\333\210\327\370\342\214\377\377\351,\327<\355\71/\316\377\177\235\223\263\331]L\322\271.v\260smc\347\332\23\312|\256\17B\7\\\312\316\23q)w\206\204K\345!\31\227\24\177\0\227fF\25\\Z\22\21piM\221\212K\237\245\213\375\351\204\374\304h\271\302\302\f~\305TL\303\245}\242\201\313\36\325\304\345\34\315\265\337\205!\\.\266\bk\215M\266\357\322(&\232\34\337\245\255\221\255\212\33\276\210N_\\a[;\225I\252\251\32}\271\272\27y#\270\216l\303\310\334u\302\366\271q\271vB\26\335\320\254\211Y<\35sQ\303e\252\373\305\345v/=\315\346l\23W\262\307\fg\30q\245ll\326D\362*\313-\177\262<@\245O\n\256\314\221,V\215HE\245\376\340\242\31|7\360J\v\v\361-p\25W:|\356\266\33\265\343\330\20\256l\23\263\n\206\tlc\222c\333\306\255\30\357\252#\340\352\244\270\212\253\305\214&5" + "\215\fs\241\245\217@_)\n.\256\6)\344\304\325zI\311\265U\225\t\5\370\255\355\225\201\241\355EJ\327*\237\60D\345^]\33+\264?(\312\325q\265-\307\300\325u\223M\\\375\254\70%\5\221as\23~\276\210\211h2\224\227\233\262O\320=\36\210:\311`\201\67\34\377\344\25\323du>r\213D\335\342\360\b\27C\373e{\235\372h\202\250\341\332\244\32\235\376\60p\255P\263\3\244\234\374\17\64x\305'K\306I\270V2\366\373b\274u\243\305xe::@G+\354\350\321<\324\315\270&\326Q\200v\315\254\243\0\355\332Gu\24\240]k\250c\35\n\350\350%Q\272\223-^\35\327\16f\33\270\236;\306\304\365J\206N\tD\250\345\371\335*\256O\317\60\b\1\373%\217\344\361\240\1\\o\210i\270\336R\242\343\372\312 +\27\243\253n*H\251\26\271E\311#\251 q\242\202\304\31&\37\241\204\360R\242\306\204\231v-\5\34\356\347\370\251f\342E\263r\n\347\376\\x`\262o\330\251\237,\313>\233}l\203.|\242\224\235\17\210;\335Z\370F\320\361\23iPw\24\333=`x\324\33;m1\215\6\343p\251\355:\7\62h/\22\60L\352)9\16\332\321\311\305\207Z\"V\215#nd)*n\224" + "\250\32nh\242\216\33\63%\3\67\232e\23\67:\224\332?8X\343\360Lp\343\240f\204p\343\33\335\344\301\236\2\272\306\352\304p0\265\376%\252NYU\3]S$\23]\245\4\220\220\262e\245B\200\32\267\364\236Ur\242KL\252\350\62\233\65t\315\364\350\350\232\353\245s,[F\347X\235\355Z\b\33\224\310\350\263umr2\377\374\322\17\277\275K\223\243-\253#\331\255\f\220\260\366\265\256\37\266Y\354\33tg\223O\334M\310\"\272\213\351~\272\211\273\214nq\214}\1\221G\315\337\37W\320m\204\324\256j\321\334\357\342g\321\377N\1?\207\23p\5\25\64T\23\311\213nbV\201\355\375qZ\351D\207K\362:o\217o\213\356\274\375\203\244\23\232\247\62e\271\34\67\226^\234\237\b\350\236\257\246\252%Y!\250\231i\31\223\267O\243\323\314Fg5\33\235-4Q^>Y\223\251\203\306\354$D\352\376\237\346\64\213\277\275\265UF\367\347\246\245\242\334}8di+\21\253C\243\346-:\375\64\376eO\275\315\341\211Z\340I\246\326>\235\270\71.\21\322q\263:D\207\333\224\237q)=\351\224p-?n\304\315z\32\310\233\355\212\200\233\273\327\252\270\65" + "\316\327\211[\205\177\372\223\235\270U\366'?6H\36\333\304-\331\16\r\214Z\334\252\327\303\270\225\24g\204p\353\320\346M\37pA\316\207##\233]Q_\32{\313\276]\34\246\312\223\306a\314\32\267\203ckq{\206\347C\31\206\264\257\215\2\277I\34J\253P\243Z\327q{\246\234jW\21\255\302\355\345l\243\b\343\366&\6\"\336\376RQ\323\357\270\217\252\342\304\233\214\tG\223VI\31\356\24\350&\303\n\354\322\254\252\324\320\23\253\320\351[\300@\317\234\361\346w^\273R\211v:\16\220\203\236\5q\5=\255\63\207\257\25\315P\333_\221\251U\306@i\214N\264n\264z]\372\223\61k\233r\37\370\234\36\335\221\202\22\t\321+\240Ap5H\326\243\247\63^\264\35\275\236x\25G\367\256\351\373z$\374\266r\275\305\221\235\27\215\250\213\256d\242\65\21\234\225M\200\22\327m=\313\66\201\336Y\242\206\336&YG\357J\311\345\210\371\370\67\260\205\374\377\336\235\21\3}^g\364\370\275n(\177=Y@\337\224\20\301\240>\235\274,\327\303\342\t%F\t\266\215\331\215\265b\31\244\245\324\366B\273\306Y\264\rE\206\252<\r}\324r\205\276e\333\370\232\260(?\375\321\224\236\332q\241-\236\277\v}\201\270\360YWu\274hX\265\67>\342\325G_\215(\242\357cYB\337bIF\337j%%F\30\243h" + "(\376\241\30\341$.0\331\267\71A\303\263\233y\32\274\366n\326\236B]+\364\226\n\247*\212?\341\326\206\213\276o\350q\373'\322\343V\363\361\37\307\350\22d\"\332\311#\333\342\246\227\352_\337\362cv0\213\254\177\242S\246\312@\177A\251\211\376\217jj\321\277\330\34.\262\355\377\244\271(\255\b\215M\32'\273\306_\327\3\23i\7\32\370A\236\212\201rb\334O\323x<)\f\4G\304ey\234\241\265\356v R\255\223o\343'\320\300IU\355\303@]2\26#\220o`)\263^>\376\375l\f\262\341\241\316\224\66\230d\203\345i{/\216\314\356\32\204\231\227\17\347#\315\f\253r\3\6\266\227%\351i\217D\\\305\24>\201;\242X\254J\203\232\\.m\tbp\302\350\224\t\6s\333Xv\33\203\242\251\236\232\265\\c\277\350-\272\201\301\232*\23\203\263\305\341\306\241N\342\4\203M\343\262F\370Q\203\253t\21\203\33M\t\203\237k2\6\17\253d[\311\343!\307\362\376xQ\305}5\252\341~C\215\216\373;$\247Ga-\356\37vb\365\21]\376\334\351\377\213\216\315\342_l\331$\341\301\304i2\36\24\24\6\272\65A\301\203\212\22\1\17\304\251\226\236" + ">\36\324\344\62\\\360\267\267\316\65\237\346\70\276\301\27\267\223\261@\30\17\"\325\301\20\36\264v\254\343\251A+h\250\267\261D\201\357\352*\337\65&\5b\277\32\364e\322\357\66\63l\"\307\235p@\315\377\216q\34\246\342\224\17\234E<\330\61I\242d\231LI3\ng\227\321\223\36X.\374]k\221\212\207Y4x\17'\272\354a<,\31_\213\207\202\343\60\272\302\334\234\325\210\207\221<\5\17\33\351\255{\270\252\310\345[\205\360p\357\354\206\t\254\274|*#\256\211\211\251\16k\355\\\375T\233o\303\265\367N\337\34<\252\210\350\377r\250\304\300#%\327\374\307\345.\235\206\257e\205G\321\230\340V\352\361S\264!\232\234\34\203 \325\352y!\233\272\304o\223J\0\257J8\243W#\304\221\232|\255\366\31\277I\215*ot\224\332\376Y-or\361\250>I7\264\260m\7\36%\343\212\326\236\71\311\303\300\21k#\252\263v:)/C\332\215\312\vkR:\364\251zy~\271\225\206G[=:\36}\356\245\321\374a\366\60(\21\345\225\fh\307:k\350\360\257E\3\217\313$\23\217C2}\206\237y\272fV*\4\361\24\v\204\366\370U\202\177&[\tA\312\357" + "\217\314\b2n\310FN#\313\64[\320\343\331m\321\35x\274\62i/k\221\264\226\71C\375\270\63\252Q\366\253\210\t|1\327\331yQBx\274\333W\223\303\27\t\376\261\362\231\353\252d\204\363\360$+bk\230N\316p\307\324\352\324\301\363\330\332\33\341V?\231\20\224\360\244\274H\356\333>\211\35KEA\304\3-T\361D\253\327\360d6\231\317\210\325S\tO\346\63R\234Hs]Ks]E\363\236\352\227\305\263\301\244\331ZIg\241\306\71x\262\216\324\\*\271\261\200M\21\302\23\212\5\60A\244\317\34\364\352x\232\225m\340\351\370f\23O\213[G\231z\212\301\253D{\361\235o\305\312d\362\277\30\273\n\250\70\266e\v\f1\30\371\fN\220\31B{7\220a\206\67\67\304\210\273On\2q{\t7\\\227'\221\265\237/\371\356\356nqwO\200\b\311L\334\226\177[\376\227|\257\323N\356\34\356\177\22\357\356\323\247\317\251S\265k\327\256RN\350\336+\343P\363R\347\260\22\202\243\210\371\340Pb\242u\214+\213\22\21\316\301L\bm.N\272)\324\303\272\205zX/\320q\250\63e\374r33.\312h\347\313\241%\r\364\204\r\214)e6\263\300\241=\225\254\263" + "\7\16}6\331\371\236\314A\16\331\216]\310\347\330\205\350\362\375\245\364\330*\n]\202>\262\70g\220}8\\\234\216\351\70\34f`\337\b\365\n\34f{\340\260\"\212\70\234\224H\230\262\213\211.\371\2\301\64\5\202Vd\333!-2\323\r]V\257Q>\277/C#\263S6y\251\234V$\334\240R\305\263\206\303s*i`\213\32\215\337Y\332\344\253\373\346\343\203TM\324\274y\233\274\250\62\357bw{\316Z\310\202\257\330\0\207W\206\350M{\233\351M\267\267\332\214v\34\376\70\244\340\360\276\250\212#%\t\rG\32\223:\216tV\31\70\62;\322v\302\t\327%\26E\34Y\36j\346\312;\271\20\27\277\356\231\351\232\341\310V\215\270\241\222\23\37j\21^\355:\205\234S)\344L8u\353\372\177~\332h\374\347\247\61\257\236!/}\200.\313\321eY\327\260z.\260\267\204q\344\63E\240\16\263\261\257\262\362/&sdV\206\367\340\310\367s\303}8:>K\240\344\321\212\\\366\357\376\363\323ln\330\310X\254\26A\\$\360\234\27\313?b\236\322\327\272\35\342h<\"\340\350\324\271\16K\344\350\374X^\226\310\321L\320b\211\340\350\356y6M\344\350g6M$\344" + "\320D\216MX0?\?\234\366S-K%\34\271\70\216\65?V\350\207'\372\37\317\20\254\221\253~>gt\264\r\177L\24\351\332\311r\37\216-\246\36z8\266\66\265\366\357.\177\222*]\375\367\227\277\237*eV\306L!\36\243vZ\t\34o\350\236\351\63\331D\316\23p\274G\26q|\207(\341g\222\342\232\376\343\375\325\n\216\37\214Q\34\236\244\70<\365n_'\216ku\242\244D\306\211\232\262xO]\276\36\262m8\321\22\265\356aq\263\31K8\304\271U\307\2\232\236\205\361\314|\6ax\26\203\207\0\330K\331_{\206\23\323T\1'\346\352\"N,\325$\234\310\30\216\213tbcR\301\211O\4\25'\276+j8Y(\351\70\71A6p\262L1\301\343\223\265\345&\262zRimO\340dW\33O\201\324\355\341\307\307z~\252\65RZ\252\211\344\204R\32\375\337Y\350\355l\253\7\253\30\370\313\66\323\311%\1\1'{\306\210\70\271\273\330\315h\342\344\227nJ\23\247\212\307\266\341T\324Ij\262Kb\354\22\231]Bq\17O\246\20\247\32S2Ni\24\276%\351\275OMKx\347\220E~\353\67\241\311S\214\333\214S\357\213\5\371\345MqjO-\335\347\343\272\70N}\25\241\33\35$\214\366\364\270\62\r" + "\247#\23Y\253d\335\257K9\212\217j\315\31\27\224b\253\360tU:\316|\6\27\27+\373&\216\33\375\353\254\262b$\263\315\202\\O7Hr\2\247\337S\324R\36&\343\357\340{zs\201\300\361\20\311#\233\"\233\35\335\212\3\355\5\205E-\211baJ@l(\224\244\242\330_-\17\310+\212\225\37\366\211\366i\215\323\375\206\352\67hQ\336\231L\364\215,\325\360\212\nN\177ORqf\202\240\343L\335\16\3gd[\337_\373\67\65\354\271\327e#Bf7Z\266\272\321[\v\347\314\f\267\26\0g\26\26\71\351:_\35@\211k\311\331GnrA\30\272vM\320\66\214\276s\367\314\256\32\1g>\251\22qf_H\302\331qu\261\314\34yE\222\344\216;T\234\215.\325p6\276\302\327\61\234\326\225\342\207\314\60\61D\337\255\232\276[\225\4\271\206\24\230\247\312\70\333\236P\331\17T\320dKx\363a6\326\273:@O\231^\254\377\372\306\61\6\316\316\37ky\354\36\376\362\343\375\202\200\263\253D\221\62V\22\rr\203\354,\217\201\245Y\5g\367\260\264`v\230\322\202\331\7\356Jq+7qv\237\242&p\256:Z\36\342w\211\213\343\234lQ\374\254:\313>>u\272S\305\271\367\24\r\347" + "\346\210\26/\375\\\206N\322\301\321\221a\242\336\314g\241\274cY\204>\366!\374\231\"\2\30\4\234\333\21\26qn\357$\t\347\366\5]\203\361\263LZ\243v7v\257\233\244\23=\v|\215|\307\350\223x\37\315M*Cs\343I\230\332v7m\356T\342^/[N\227\232\334\353e\222\264\334V2XCbz+\371\261\251_\363`\364\177\305\356e\276\365\244\321\271\221\215\246\316~\33\213\260\276Aj\215\372\331\313\70_\234&N\302\24\5\347\313\222*\316\327\213\32\316+\222\216\363)\301\300\371\331\262\353\275&p~\345\314n~_\307\245\361\177X\336\251P&\326*\341\341\271\330\273q\376;\351\314V\\\b\244\327\356\301\205\360\232\264\212\v5\253X#\230~\\P\n\331g\325h\225\363\333}\325\310\270\60\275\322\235\254\16\\X\250h\t\223\204\20\316\357\240\232\312\360\230T\256A\256 X\201\225E\333\6\215\353\232\342\302\362*k1r\361_\32FO8\216\v\273B\364\257?\257\246\375\27\322p1\320\242\23\246d\371*#\263a\270XR(\340b, \342b{\221\204\213\263t3v\270\330\253\304qq\247\252\340\342\367\65\6V\n\32.EE\35\227\232$\3\227\64\331" + "\322l\343`\320\226|\4.u\262n\321#\fL\251\245\216\35\255\267\252\2\242\302\24\213\305\325@\305]A*\356\252\242\342\256R*\356\252TO\216\253\326(\230\r\321#\273\27\321\323\f\376\376\263@h\201@h\v\314\37U{\311\365;\202\334\274\352\245U\314\257\33\331\260\220\37\367:\205:\376\336\202&.z}}\273\210K\353[%\\\332\325\32\243B\n\231\214\375Ts\343\223\340\274\335\b\323\262\367\227>\37K\344'\233\3B\6\277\324BE\363\17\21\227\366ee\\\36\237\333\213\313\65\351\211.\311\213\227b0\321\263\30C\317\32\225!S\321\312\26\337\341w[\213\363qb\6\223\254\341\347bR\fD\300e\255S\301\345\344\24\r\227\247f<\220?\357N\260%_Z\271\205g\304(\353d==T\\\236\223\241;.Y6\262\370l\17/\343O\351\313|^-\205w[\270J\205\270\274\256\222&ws$\376\357\313\312\224\37\177ZGO\375 LO\375~\251\216+5\315\6\256H.\371\223WSf+\352\263\3U\36\25\62\261\246\232\273\341i\252E\267\275\304\210\365E\342\255\2\21_\252E\\IuK\270\262pf\fW6\322\310\257\364G\334\243\345\237\277m\252\4\222X\22\215\372\200\326" + "\206\253\21\201\231j\\\255\226:p\265\276\274\200O\326\210\341j{\212-\234J\266p\252\314y$\304\365\235\211L\222\r\366\"\203w\362\2O\246\25\213\224\33(\224\236L\33c{:\236\233|\265+\340\270\311O\246\215\245\241\315\263\313\214\\\"\322,<$\345r\237\215\177\270\277P\300\243\232\200\210GR\221\223\20y\224lP\360hJL\305\243\325\315\246{\32\227X6\345\321\246\242\342\4\262\23\2c\306s\350\222\235\224\204J\23K\236\365\305KH\322T\217%\37\342\223c[(q\230V\\Z>O\326\305\222L\241\367Zm|\265\326\325o\33\245p\277\313\64\211\310\266\213:\262\323%\3\331U2\277p?\312\331\60]\264a\210\233\222\335\325E\322\360j\202\344\220\363\354\234\66d?.\354@\366\273\343\307\362\201\257\246\370/n\262\63\213\\50\344\202V\261{O\235\206\\-\263W\4\"\360\227-rrRF\256c^\34\271\31]\nr\353R\352\300\34\205\256%\205>\344\16\316\65\360\70b\351\352)\246\34\303\343\330\30\65\201\307\235\245\21N\254\375xCY\34\217?\220\224\337\374Hxw;\320yg\31E\303\246f\362\203\236\307_\320\341\374\244 i\346\225\377`sX\303\223p\213\216'u\25\6\236\350\66@R\312\253\357\360j\367\363\367\327\242\n\275\65\251\335\4Bd\314\316\242\256\232R\376\334\0\236tg\251\71q\216\210\336\224%|\262\370\211sV\322xV\353mx\322[\352\20\7\377" + "\244\213\64\25\210\215\331\263!\312\315\371>\331\262L\305\223\376e\32\373A\307o\30\242\201\247\221\326\66|\22\21\360lU\203\210g\333&Kx\266\67\26;[\225\220\361\274\240\332\237i}^a\327\343\343\271\30\64\360<\331\322\206\347\335\23}\231\326\35\333\23x\276d\301\374\240/\327\260\211\276\353:\32k\17\215u\303\226\25][v\343\371\266L\357V\312\364o2\v\n'\363\311\323\214\353\363\374\v\217\4\27\342i\30$I\r\271\"\216\27\5\254td/^D\323\314!\354\33\251\206\212\27\302R\1/\22+D\274\350^i\25\301\64\21|\21\363\32g\340\305\22\217\324\370b\365\214\66\274\330T\370.\200\21\342\215\225\272eS\361F\312m\372\244\62\64\234\257\65H\343\335\21\244]\232_\24\311\354G\201\27\37n\337\61\236c\312,\264\230\357\315\341e\241@\331\216V\343\67\325p\33^\326\306M@\216\64\310_j\315\274\64*" + "\273j\272\240\341e\267\350\211\316E[XY\356\327k\223^\316a\333\273\214\266w9m\357I\264\275\347{\213\67\177q\327\277\216\315\312\224d7\325\321\367\376xcz\242\201\227\253\252\\\352?\317\353\331\375\223\345\335;\266\376d\371\314\355\16Ms\t\237\200\303\242\374*\307\213IN\310\323y\264\234\306\317\20\5>9\326\353\"l\361\265*\311y\312\243\342Is\260%%\343e_\202\210\261V\302\317'\340\211\227\204\377\342\225#\253+\222\332\277\204W\301bO\313\223\333\242\360g\254\2\356\225\375\364t\251BM\n\271;\344UK\212\376m\302l\331\213W\v\212\64\274\332\30\320\361\352\223\61\6^\7\213\333\360:V\350\224O\276ng{\364\365&I\235\340\321\334\274\34\332\312\26\177\346x\4\64I`v@\240\37\306\210\364C1I\227V\306\360\372`B\306\233\222\26\27\377\243\277r\367\317\223i\344\334\277)\367\266O\351h\35\214\230F\316\233\352B\roZ\213t\274\231\21\60\360fm\261\213\352sL\251@\217\357\25\315\243\370\377\5e\362D\271\350\331;,\215\5\203\337\275\71)\377z\3{M\247+!\267\307\4\336|REv\310Vs\342\34" + "\222o\366u\322\340\17\260\66+\366\334\275-h\324\360vB\223\227Y\241\227W?\32\205\275M\327D\203tM\243\305Z7\362\263\351\250\r\252\202\267Z\222\302lR\347\345\24\227\23D\266\323z\267\235\24(\215Z\247\22\265\370`\366\247Ip\352p\273d\352\200\23\307\333N&\342Hc\234\32\324\361va\310\300\333\265\254\275\357\377\61f]\213\251\344LZ\217\242\253\315\273\275\266\317\304;\300\361\4\233\61>\361Nt\313\240AH\254\244\6s\236~\253>u\1\236?L\204RIV\250\360U\240\302\343\207\270\265\372\275}.\315\243[,\213\302\370\343\246\271\214\273\240\16\223\225z\265\242~c\331\254\230T\324\324\364\331\252k\227\254z\333\257\67\352\326\372\215\372\255wE\227\250\237\\\361V]\205b\223~g\367j\324\266\326\333d\212U\343dVV\335\205\377\276\61k\253?\330\320\253\321<\366E\321\31\330\36\27\300\331\330]\337\364t3\27lV\17\316\253q\\\317\325clW\266d\\G\6|Gy\310\311\3o\254I\230\253\4\246\237\342b\341\255\276\265\246\363\274(\253\17F\26\320\26'+g\313\30\213\372jss\37\25=D\377\210\317\237\361" + "\371\23>\177Q\217\266\364)\250\253\265M\v\33\332=\376\224\344\270\265\36+\316\361y\201\317\67\370\374\241J\363:\246\235I]36\355\352\25\247\16\300\236\225d\236\255z\332o\254\66zfC\241#hL'V=\202:\21\327lc[g\274\232\321\255\66\nB~\330\24\27CV\37\63M[o\333b;}W\354Z]\272\334\232\64\f\356\302\226\266\217i\217\215O\206u\367Q[\334\326\24\213\305\254\351v\245q\370(\305>tjl\262k\365\250\24\274\306,\216\203G\322\340\204o\236\\X\350O\316\356\324\373\30W,k|C\324S\223\363.\322\333g\264\263\353,\31C\370\327\242\277\305\270\206\314\316\252\344\33\376\374\337*yRJY\322\226j8\347m\334\347\342\210x\357\276\263\24\37\26\311\252[\222\\\312\33\323\222\261\246\30\n\316g\223\333Z\220\60\226J\341\235\225\34[\263VP\241\276\366{\262\261b\312\260\376:z\37w\225\276\267/E\177\266f\23\203\"\301\333\256\276\5$=\257\272\212\376\340rv\221-\325\373\252\64P8N\266>\35`\r\4\"\246\372h:\223\324\211\264e\202\f\227\310\310\344\323\232\234\313\367\335\302\306\240?D\26w\346\v\224>" + "\223\236\315\"\6\343\351N\330\374\25\243\36-\34\261\336\347?\262\352\262\273\360\34\323\332T\203z\264\33o\366\n\357\363\366\370>P\262\257\25\327?\334\271'Ci\206\301\354\371E]\246\270\31\236>\310\374l\370>\37\276/\206\357\67\303\367\17\370\233fJ\312\346\27<\314\177\267mQ\237\350#&\222\374\323\62\365\271\310y\37CgSkR\242\347\320%lJ\306\5]\325\310\326\63\331\267\336\212\26\337G6kC\236\\T\365\25=M\361\305\255]\331\377\201?\362\336\331\256\271\nv\275\377\273g5o\315Z\337\205\66\256\327l\370\7\61\321\23R\266\303nzb\212]\220\233\65\203\363\377\221\257\360J\30\23\211i\22Cq\241\267\360\200\21\274a\2z|\360\206\311\322\204\205<\bF\323\60\376\346\254\351\355t\23\343\25\33\257&\304\356\364lmRa\f\310jXT\242\276\267\205\\\21\216\253\201\32p\371Q\337\271\b8\237\244\330\267Ku\33s\261\351\b\f\263\245\243-\17\367\30\233\260\252\346\16\252\232\303\324\233\226\221\214\21]}6\256\260\21\305T*.6G\\\375\261\251HK\272$o\273\66\70j\266r\233A\374\315\264\317\313\6\241" + "\347\200T\352\35\211\252!}\25^\200\330\64\355C\273lFn\215\233\234\fq\235W\177\240\70 \314\373R\232\31\200\b^\314\241\1 D\212<\322\17\375\21\17)\352,\222\351\310I\343<\262q\204n G]\247G\201_\330\365\255\5yc\331@\310m\275\25\372\332\256y\364\331\370\325\21\326A\341\216 \347\21*;k\370\363Bcp\216\301\33\315z\253\16\66X\362Q\34\2\374\243\377\353\315\332\4}v\240\316\17\324\5\331K\214\331\352i\377\375;\335\343\276_{\362\1\350y\34w\236\65\371\201\264Mk\311\227\67e\251'K6P\365P\226\66\345\212\304\3*\317p\352\240\377\346\220\61\210\321\262{l\220\66<$~\371UX\270`y\223:\376dB\265\302M!d\335i\16^J\274BP\226\355U\\\t( 3\330\203\215\332\265qSl\252\fY\252\337\33\322\374\201\373D\26)\307NM2%\305\270\71\336\204P\316\204r\362\226{\263u\v\266q\27j\316\62\333\271\262\224\243ob\365\232\227R\303\276 \4b\304\215w\35\305\340 L\374\r\353\342\365\370\274\206\357\63|a\24\254&CUH\3\246\321\205B\302\16\254\232q,%\256\221gEr\7OV\311\200fZ[\27\60\233g\353:N_\350\35\252" + "\202\"\337\225w<re\362^\335r\320\277\215;~;\341\314^\202\211\276\217[\327Z\211\35\372\352\205T]^\207\243\303M\5>\353\333f\34l\207\4J\301\310\5\336\0\35\224_u\34\21n\351\22\32\330RI\314A\221\243\372\65V\230e\260\63.\r\370\60\361\321\254X\272\227v\253nz\327\221\211\322\301\373\314h[C>T\365\301\245\24]R\24N\326\66\221\270J2\272\346\321x\22\354\254y\264\271\355\1\302\224\b\207U`\307\203\206q\243K[\214\363\231\355\266-K\310QhH\260\346X\315\61S=\7\375\206\60\257\245\347\"\rgM7\17\33\33($\345\22=\213\212\256\337\223d\202{&\350@\376ti\366\365\362z\326\32o\1\230\257\30\37\303wf\221\266\66\61\206*o\354/\231\f\26#\267\222\210K\332\f\366\220Nb\375\265c\364$\4p[\233\220\313\263\332\277\331\24Oyx\350)#\35\252\2@\23(\266E\b\272D$T\222V \352I\370" + "k\16a\216\362\314>q\24\35\202\322\204J\22S\310E:\n76\345HsG\20\246\35\203Y\330\324\234,Cf\25\"'\253\271\21\220\276\v\271\244\276\305\0:\313mL6\303\264\33Ima\343\254\231y$\2#\233(i\331\221k\231\274T\17\364\316%\277\33CLT\277\307\216BWc\277\61\305R\32\266\263I\2\5A6\243\363}\324\267}\247\370\377O.\225\236\236\63!X\331\270B\231u)\236P\35\226\212\302\257\232\17\211\v#\310\33\311\312\62\246\242YU\242\267\272\360\357M@G\357cX\374\5\266l3If7$\323 +\373\65\246f\324\215\344\4\v\243Q7\336\270-\247]+K\353\332d\213\346\34\233\223\302k\374\61>\241\240\343[N\336H.\32\300\3\1\26\353~\323\27\233HX\34 \311\7\373\265%q\222\223\330P2\220\370\61\356Xc\231|\360\331\5\7(\201\24\20\340\32~!(\324\266Y\374\1\236-\30\305\1\64EO\250\226\316\376\16\357\\xg\323\346|:\354\300\351\7`\320\246|p\262d6K2:\365\264s\271\64\225[\23\245\367\206\1\212^\237,0~n\274g\243\254W\373l\22B\212\31\356u\311\362\63\\O\322\267\r\315]8\35\3*\207x\246\353\367\305pX-\211\352\246\344\217" + "\236\v\322g\244\266\25\210\261\272\221\204\1\366\274\345(:cg\220\353\324\310\5\210\237\222\372\372M\303_C\35\231\354\26\363\r:\22\\\341\306\255\35r\303\301I\361R\220\310Q@\261{\307\223\336\200\357PV\24\336\201\253\34\200\200~N\221R\307>\257\62#\221L\225%\245\333\313\350-M\265uj\342\255I\\\"\320]`cY\307 \322\222\20rRL\221E\332z\240>;\241\317O\350\213C\215|,|\273-{\".PK\375@\332KD\261\6\316(\270\273Rl\252\326_\373\24\254\305\307h\30;B7G\20\271\215)\f\221\211\276 .\365\272\264\"\221\25\210W\306\24Nb0\305b\27\336\222\277\25rc\27*\200\67\30\305\276\324\241\244\231c[v\326\6=6E\307\244\21\314 [v\236b\22\270\322\3 {\235\353'\266\254>!?\250\30\35C.\25\373\303J\303\212\246\21Bd\260F\362\16\nM\b\305\1K\303\337\371\t1I\272\241)\343\366\325\70\207nEJqW\31 \263\370\4\246\71!0IXu f\332\b!\211\17b\247dx\320\214\304\266qd\304\226\21\322\vYV3\216q_\n\247\207B\234\37\353\253\352\314$\373l^\263\6@\277\257 \22\372\254\271_\304)\244\313\4\372\216\330\374\241\61" + "\247\276\264)\346L\325r*yI\372O\352\263\365m\224;\"\24\67\37\203\347\232\227\213i\267\261-\35j:[\230l\330c\7\356\323\262O\231\no\343]gJ\265\303\231[\4S\372du|\256\214\66\271MQ\314?\35\223\272\271\273\366jI\277\261I\23\66\26N*\220\231\62\361)\372\326\204H\262\317\64=\341\333\317#\267k\236\275%f\350PMf\311'SE|\22SIq\317C\223V\32\205\347\340\226\314PR\310\r./~\312-\263\265!tM\311VH\270\356\275G\26\323\324\236\1\360B\224voil\276#\362\263\63\353\212#\342?\277\66\342\71\250\30\310r&\244\244d\324\330\206\256\362\305d\216\34@$\344B\361}ka\353B\241\66\211\364\16\267\236\303\310\201\rr\33\f\200\246\350\v\n\373UQB\231\275\367\f\6i_\333pw\34Gh\266\24\272FV\244\vz\346\0U\334\243{\315\70\64X5\222\5]\315\24\275\263?\262\340\317r\372\70\306L!\226\352\233\vuM\345\315\33\232\367\321P\377\344\305\307L\201\271\206z\24\364\327?4\350\t]\377x@:\251\232\264P\347\32\65\262\f/\16\23o\16\324\17\315@\374$\234\37\205\363s\365s\274\243\222\365\1jb6\205\261f\272\344hv6|" + "\237\37\240\276\66\324\232C\240\207Db\252xc;\267r\245\242V\r\27\61\35\63A\254\71\214N\333\250\34\205\326\304F\23\0E\222\337\353\317\256,\221\25\v\326V\24\237Y\223\332%\331tp\233\336\63\33'\305\4LZ5\247%\261\230\26\"\341\243\355b \17\210>&i4N\270\324\247T\300\nc\24\212k\205\tp\227\227\323}\2\345*9\333L\211/\22\312\200lnGR\344 c;r\315\376E\326#\366!jgQ\242L\325JY\342b#\334G\324Z\302V\327\336m*\304\v\272\177\63\224W\245\223\326\63\227B\265\245Ub\302\205\362\21\212\245\216\263m\f\235I{\270\355\337r\341\25\247.\v\tJG\334\246\24\271\356\207\247\64\307\6\372q\3.\235\237K\255q\271\322\317\372\216fj\236(=\316\241\345>]\323\365J\362\274X\37\273\213nm\244L\200\25\64\377p\346o\260\211P\215\214\361o\270\4\207}>\364\31\245v\220\214\261\31d\300\251\221T\362O\211\222\26V\21\33\237\272\313\241\230P$\330\215\215\367\242;\250\224\303\211/R\240\303\211\240-\370P%\261\200g*\205\231\203=\236\356\213FC\205 \211\357\206\342\177\332\272mLrj\326_c\237\6\347\253\335K" + "\206}\371\61C\362}\316^\214w\363d\212\315\207w\263\363\257jI>+\211A\6\64\270H\5\205]\7\224\245\333\320q\327D#\213=k\200Xb\304\360\342I\237rL\252V\262\210$`\217\343\356$A\360^ P\276\33\311k\344G\232\372\0x\271 \270\23\256t\256\216\271\66E\333\314\35\370\323\241\30tE\344\336\273\\SL\260\5\325\216\374c2q\250\\\36\255\351\326\342\30\202\362\63\367\335\36\366\260\71\372\276\270#\240\320\214\225R\26\335I]\321\35\236\303\261\370\370\203_L5l\363\243\274\36\332L\327\\\234z\276\32\312Rac\311q\256\301Xv\302\371\340`\277:\311\177\375\337\362\327\350\f\2#\237vQ*\37\361\301Q\"\207\266N\306r\344\60\272\n\370\355\356\270x\35\61\36=\27\233\346}\n\330\251\366\345G\201\204`\223F\337_\2\213\31lQ\306c\31_Rd\223m\321\246\31r\254ID=\215\324\362\364\230\332\303\25\337\307\350\4\255\20\252d\22\203\343\34\244\177\374\261Br~\223pn\355\306\323\315\376\355\67\270\316\325\277\253[N\364k<\7I\330'7\35\312}\342\373\232\223\220\21x\30]\211\b\321\362\313\241\324\3\300\316" + "\253 \303Y\f&)4M\253\342\70\256\220X\333d\236a\356\231}9\241\211\361\267s\n\vH(\225\220\37E\237b\332\330.r\277\266\310\340d\33\374 \202\317\261z\230g\233\266\70Z\223\373\254\232qr\335\302b\366\t\311\371#\372K\257\253\354j\325\223\370\377}]\7{\333H\222\345O\301\27.\237\27KJ\266g.\315g%{\262Na\322\305\246\bIXA\4\27 l\313\277\376\352\275W(\240\255\331\333`t7@\204\16\25^\275j\1\222\334\324~R\335\372\256\346\224\254\272\317C\245\327}\230\202y\374\364Yk\4i\267\233\231\235F\210W:\35\341\231\256\355\314\61\247\335\300\7Q'\336\323\252\22\246\330\242+XF\347p\tf>\230Z\374\62\204\341\312\223\201\236\352\35\376\177g\37\260\34\v\253\261p0\26\16\307\302\313X\351\263^\372\1\276j3\332\261\337a\231\207,\342\24S\234C\345\311\320\356\3\66\314\354\347\243\333;\353\213\336\60\22\242\210}\372\260\220\341\317\60\v\364\60\16\234\235']2y\257'\312NQ\231\336S)\344\205\257X\206P\363P\216\2<\32\17\226\64\6\354x\vn\21\332\266\256\246\65meC\260[\340[\350\206\322l\243\336" + "\4\31!G\225\65\242\32\30\366\352YW}\372\4\210\272~\304\v\343\300\27\366xQ\30\255a\263\222%\21\232D\324\212\250+X\277,y8\210\21`u\225![\201\224B\313\304\364]\235\227K\202?\217;\200y\206\3\3S\34:\"\4\307M\262\211v\334\232\373\ts\251\22\26\253\350\370\237\260\240\217M\272!4\360${\226\2\335\304,afx\177\67\237\207q\25\275)\341\177\241\33\1\244N\214\217\362$=\2\222\361\340\336wTC\227\373j'J\5\343v\204\63\312+\353\337F\200\33\343\271\2c?\231b}H6\16\320\376\241\336\217\355\237\266\21`3\205;;\v\4\372\344\324\334\223\350/V\254!hQu\374d\240g\277\323\346\327Y\211\360\t\307zjZ\26g.BK\257\66\326?:\177iwh\fb\321\345\361F\260xh\276\26\347\265E\277m\305$/\366\241\314\265\246b\1\251\312+\255\353{\231\36\2<\335nm\270\344[\306\66\352\375\274\357Fd\355\302\226\321\332\226\227b\232\3\341\337uI\243t\261\374\342\217&\b\215\17\201\71So\271>\240\224wf_C\314\246.`\210\200-b\316\311\234T\205\26\347\302\60T\270\367\267X<>\1f\34\37M\32\327]\362\207\tuIa\331\324m\200" + "\66Q\326\66CE\304\256\66\21'TO\37\243\253\24\322p\217Tz(C\311UQ\231\376}i\21+,\252\4\63\302L\265-\301\254\342\322b\235f\264R\276\367\23\315i\32\260t\227\33\271'\325\332\344\260Bf\263\313l)\365t\362/\357\323N\321\307\362\363\306\351\356Q\232p\242\60\n\356$\211XR\210\302^<`\370\363\301\324A\352\261\254\330o\214\253\32\316]\231V\352\t\345\20\270\340\222\223\373q\275\233sG\312\214T\2X\210h\202\226\221|6\310u\364\37\247_D\273\300\207\b\367\203b~Y2\0\257\356\71\32\340\235\374\316E\\\271\234\20\274:pI\310X\23\"6\221\253\307\35\5@jF\34R\347\262\33e\277\243g\221\66\366d\240\34\267\267\23~\311\246\270\26~\246\256\357\71\366\366*\367f\246\301\r\242~\320\317\346\227ad\236]\247\210\273I\364\364\260\340\277{\233\1\32\233\250\346n\214\60\212\374\332\362\263k\201\262\201\373\303q\214\351\205\211>\6\25\303\31\273\275\255o\206f\37\1HD\244\356:\372\304\362\331!\234$\332f\6n\30\364\206\244\336$+\264]\237E6C\326\271L\223\177\22\326\241\254\272\343\306\324/\235" + "\260\215\326V9\v\243\332#\20Ml\252\273\r\275P\240\37wu/:\27\3\365z\225\221\324\265\bR\27\24#,:kd]\"A\n\324!\326\363\264\255o2:\330\206\27\66X\367`mY?t\230\250\36\235\235\305\256)\207n\20C\263\337#\344\65<\322,f\345m\233(e\332\276\346\367L\305\205\313\210#\300\34\321W3(>\206)T\32`\352\332\302\371\325=\206h\222X\21\377\337\247\322\376_\30\202\265\201\276\377\362\325r\221\327'\256\232\223dH0\233\t\263\322\251\21\205zd\304\320\226PP\213\25\377u\320\255\253Hmd\221\342\6/\317#\205\302\351SU\240\343\360,\267C\312\200:/\201\323\264X\314X:e^\225\61\240\356\301\204\354\260*\233\312\31\70'O\333\4@8\4\64\20\203>`\355\252\202$t\315\"\327N\376\22\336\303,x\33\310\63y\\\367\262\261\60Q\242\314\311AS\363\364\317C\275\23\330\61\25\vR\f\206\272\331\304\250\361\235\24\60\23\314\35\241)\242\247V\223\311o\343\267\211\312\244\243\200\376\63\204 \220\330PY\263\377\70\36\311\36'^\233U\355\22\233a\222\270A\206pM\30\370B\204c\v\32\b\377\377\351\325\310\226\353\65" + "\266\322\356\253s\36i\241\220\302\"\273\344\233\252\332\331\7\244u\356\234\\$\233VZu\212\16_\r\267\267\366\61\70\224\366\ri\33\243D\311Al\342\255\201\204\177\373\256\352\332@\260\350\351\377\235\326\236\263\n\217M\312\323\371 bx\326\230\177\303\203\6\310g\273\274\225)\36~\321nJX;|\f\242\61\320[\202\354\4\310\64\320>p\333\245\360\v\204a\1\357\267n\232\253(\201\311\233|G\367\363F\200\233(-\27\234G\354\34Pu\367|m\340\245M\357\30\326\202f\nfMj\302Z\231\346P\206\340\342\272]\335\243\313\227QZE\351\300\231\215t5M\273\315j\210\307\230\230\250\206\316\244@{[\221\331\231\32\201\217\f\271b\262\204\27Oy\ny\5\25^ea\237R\342y\364n\217\341\263\203}\340\316\340\17v\260\311\311\37\206\353q\234\266\333v\33_7\347f\234\264\233\273\270\216>Q\261\314\253\7y\365\60\253\206\265\307\261\222\321F$3\277\352e\231U_\347g\277\310\317\276\242\317E\233\314\246\211`l\336\227\312\307\215\"\266(DF#\304\244,<\350\366\203\252\263\222L|U\210\374p\256(\336\365\266n`D\231\273I" + "\237E\276z\304\6\"4 i/\360+\365=\rR\271\246\223\37\217u\325?\202\61\320\230\252\243R\214%\235\356\206\24\224\62\2\257\361\253\313aK0\242/\251\177x*B\364\266\"\233y\210\304\204TmK\26\366\206]B\324\375\5\234usio\367\317\233\343r\302\71\371\325\317[\35\367\365\200\253\b\367\205\326HP\316\263F\374\36\255\366\30\331\362}9.\222\217;\5gF\322\337y\"K\316\0\262>\272\201\65\6\r\337&;*\b\207xR\217\271\204_\232XR\330\253\b\302\204\371%&\334\350\70&3\344\357\234\27\21\277:k0\375\355\362\207\33\3\242J\223\323s\367\327\275S\232\205\26H\266\342\310\300\325\257\241\204zZ\35Z\364x\354\343`zU\304e\347X\225&18/\311\33\306\263\65\371\67\267\345\317\367\366\303J\322\31d\361\316D\tp\234\21\271e\220R~\23g\250J\234\224\337\rk\323\216\366\17\255\37a\344\266\20\332\376\1\323\316\326\5\70\245\217\353\326z\312\312\25H)\324\261\225I\25P%\323G\213\70vu\353@\267\23,\341q\1\307\65\325\232F&\32\214\222\214\275\334G'\310e\242\241N1\377\342\252}\241\22\275\343\27GO/\316\25" + "\324\241*\371q[\376x\273\370\251\17Tx\324\37n\244\362I\6\217\357\351\\\322\361Q\211\227\205Y*V\v\\S\311\365\250\313\32\26\233'\316G5N\363\276)P\304\60\223aCe\265\203\254v\230\325V\4\24\215\222\373\336\231'\23\376\304\321\344$\347P\225*R\302\f\353}\275\27\310-\341\67\32\1\253\223\362\340D\337\t\vzS\265\232\24>\241\227\245\27\16\306\226\325\330r\210\205\1.5\216\231\254F\235\242\34EI\371a\207/\26\16\313\373_T\267C\325\320\336-\355\332\33+\vq\241\224q\16\27\312\264\36Uk\335P\345m\326\365C%\336]p\226\313\250\22\236\222\21ehE\25\31\v\254\241\337\354\235\\\33.\204\60G\225x\224\313\7u9\215\361\320m\264o\303.l`\257\243\227mE\355\355^v{X\236\360{A\375?\27\257\2R\333\233\344\265\204\217\205\357\367\210\337ez_\225*B\304\n2\242\351 4\204\336\345\b\206\274k\355-\303S\376\251\356k[\342\321\300P\23xO!\276\t\304\7\373gX\33\350\220\350\203F\300XtB\3\327\202\24\207\26Ol\221o\25\341\346\353Ou\4\241#\366\234\331d\375\342/\361\r\302S\340\354\r!\253xu\372D\361[?" + "\312\306\252\361\354\0\221h>\b\204e\361ZAR\23\245\217\325\36c]u\204\\\t\264j\34\305\330F\272VP\267\224O\345\337%\266\305=\230A'\355\260n\4$D\243p\3\301A\251\70\267\333\206\223\vUS\335M\311*\22R\210\234\214x\316Y\375Q.\36\35;\327\33\5U\16\347\377\36\"qq\332\337(\16\367RS^~\0\203\214\360V0)$\224k\260\24\1\343J\306\217\17\65>\373\32K\343\226*\371ys\4\212\234\1\312\313\262\b\345\217\261\0\235\222\363f,\34\205=\301Y\210\331\5\276\223\315\66\353\326\250\332T\fq!/\352\246\264o\267~\233\7baa\313E\22\230xd\230\364N\323\212\335=?'l\261I\201\25\60\16^\217\260\344)\244g!j\362\370\206\371\25\341\300\352\"\271^*\303h\271\65\370\373\354K\300/\357m\324\332\256\331xr\210\0\347~\234*#O0\330b\177]@\204\3G\2 \256\243\34\177\322(\254\23\234\365A\323\355\252}\372$\375\245\342\371\0G\16\216\f`\267\247\342\17\207\207\276\216\315Y.2\21\375!==o\365O\225,\313\244x9\213\300\355\260j0\360\271\234\207&\354\t\272\214\277Q\213[L\336(\362\265C\225\247\267\267\326\321\252" + "\20\340\354\27\24^f:~\34W\275\36,\375\226\267I\5\202\265\217e\nv\232\242\66\v\325t\332\313\372\271\324\242\231\v}\211\345}R5f\272\214FE\325\315\177Xf?\\.\16\26\253\305\341\b\222+\316}\16y\340e\222\272_\206\344y\25\245K\233\205\25I\1\221:\31\16L\\\344\215o\357\333~J\232\242Uf?\260*B\0\360\"\25wQ\204\66PS0c\27\234Vc\260\323\326\375\366N\bU\240[\345\333\230\312\63\221t\375\302>\223N\346$\204)\353[\22\227T\342\213S\234\264\205d\33\323T\351I\322\202\266N'{2\3\201>\317\246:\202\7\257\67\220^\341M2\310\232\255'\365\272\266\251^\236\336%\310&\bx\236\16\276nO'\377\367\32W\202\271\366\220\7\17\361\374\357\32\340\273f1\220\354\262\335\260x\336\0\246\b\24\376\254m\367R\207#\242'\374_\234~C=YZ\241\304\327\26'\343\33[\335f\"\6c&\364\210\231v\356\222\v\v\352\34C\35\205\230\347!\34\r\30\321\341!\247\206\24\307\350(\21$\212\321\254\210q\fTd\256\f\7\344\340\64 \21\61\364\27(i2\257\340\366\t3$k\227\206[d\201'\350~\330T\373\264\63\fuN\311\17\323x\"|]\232\25" + "\367\201\351\3l\244\267\70k\4\7\254\217\34\250ow\377\363\222}\213\317\310\224G?\327\36:#\335nv\246a\26\246p\303;\234\303\273z\205\246U\276\251\212\242A\260\267\370\322>rB\377\64v\305**g\374\367d1%\377\275.\25\375\376\316\303?,hi\313@zc~\303\226P\232\223\62\217\332\215\311\274\373\312f\200yu\\\26&\275O\223\211\263\264\25Bk\26[\327\240K\264Z\261\212\231\35H\v\0\342e\273\7\34\267^?\271\321!\303\22\242)fR\264pv\272^`\360\264$3B\214\317\243\241\333EV\245y\202\23\277\222\247\62\251\63V\230\215\350\375T,}\34\242\257b\\\320pP:\320j\353Z-\207\2+\261\276\324}\312\344v\214\63\213\70y\31\257\275<\317\320:\311+W\211\246\274\240\7\25\233\375\177\36\60\37\270\n7\24#\326\352\37\22h?\234\207\366\256\25y\211\250E\205\330\315\327\267\214\20\60\225@T\241\257\217\67\36\315_\372q\345\307\3\356\"\211\231\366\16z\304Vzj&\363\61N:\24_\234\245\315\274Y\22ATQ\246\315l\3!\34s\337\205IDjA\272Q\36U\311\336Q\0\345\272'_p\341[8d\264[\275\245$\320\270E\235\375\232\vF\253\304z\23\273\332\4\251/\266(TR\240\22\377\327M\212\275\377d8\255-\34'\356\236\16\7\320\321\231\357\361<\265\300\367\210zc\342\65\305fg#\241\257\327\327\301\323\2`\363\36\37\334\3c\257\f\314\32\266II\21U7\356MZF\242\bd\370^[v\264\205\210\253\270\1\36\5\205\371@\221eRx\335%\25\257h\305\262x\232\360E,\362k\35\37\300F\7\334r\241\215\325\31P\225C\324\4-\302\20\304\254\331\337\227\363\354\222\313m\275\363-\333\320\255j\234\354\255mM\f_\311\336\355\215\224kp\303" + "\372\62;\301\71DHu\34\264g\247\277\333o\376\246/\5\37\246=\304\216\300\315\311\6 \302\272\261sA\270ZFi\25\245\203(\5\263\217\264\362\71\251{1\323_c\200\60\65\344\3\264\366\26\205\351\363\275\301\322\351\261o\267V\375&}X#M\236\273\210\b\33\244\216\351j\0(\350J\370n]z\n\0\274J]\270\353\273]S\305\tC\340\215\205d\3\23M\330~g\302>\216\354\334\66!\264\25{@1O\212\217\274j\301\261\305ry\263E/bm\375X3\t\17\257\333\16\366\357\317U\317\235\317\260I/0\257]\7\332\333}\5\240\61\331\342n\357Fg$(\310\260\207#\4\27\233\34\225(e\33\64\342\25\224\274\364\r\356F\372\203\30\274\23\330|\1\355\334\207\20T\26kq\244\64\326\0\305\b(\321T\344^\nm'\223y\236\357\242\263\"o\216\226\206\70\234\214\211@\243\321q\305\232Y^\311\357e\214\200\261\272\275\215\232\1f\213\213\33\71\67\61m\31\36\251\306\244\343\36\353\f\1\341\202\333\256\305(\341.\16\231\207w\32\211\345:-\357n\304\351\276\337\371\66Z\363\247\227\376t\315\274\f\357\370I\204.\241\304\343\36f\363-\256T\316\67\260" + "\222\347\225l\254c\235\313\322$\233\62\247\63f\277\221\276\323\265\344PJ\233\306\27\215\67\223\332\34\66\233*\364&+\310\31\213}\330DU\343\207\201[\206\331\210\344@\202q\332EI_\240\242\347\267VtZ;\323l{>Y\276\206\274\306\200\31c\353V\276\250.a\16Cv\271\24\214Y\230 \301=;{5?\275\370!\302\23\227\17y\230\4:C\352G\342P'\311\236\b\244\234\230\217\33\226\261\201\305\266\307\340\343\347%\277\230\221\276\342\225\37\277\360\343k?~I\26\5\62\341\37 7\330\70\376f\351\307\225\37\17\374x\350\307\227\21w\210\35\2\364\273?\226^X\215-\313\211\37\306\375\206+\30\247\305AV{\231\325\16\263\332*\253\275R\215\231\303K\362\270 \273\271\3\312\5\370n\211\214}\311\207\210~\267&\262\331c!\267\316\352\306\375\304\260H\205{}\357\341h\5\243\255\252\343\273\70\352tb-\260\b\205\275\224{\254rlX\302\232\204\326\363\246`\rr\363k\364i\265\367=H\26\236\35\344\6\217\t\203\315\373z3\204\5\244\364/&P'\274(\321Tl\301\2W\21\347\30,~\327\332\375\22\330\7?\203\204\306b\266\367\232\226" + "\272,\31D&f\373^:\220}\332\307\306\224tb\303>\224\250\t\303PU\336;`\221\0\356,\202\333\366}m\36Vx^\357\235\235!\250YV5\2_`*\17\215\375.;_\306F\201\\\fA\20ujh\350\325\263\212[9i#i\271NaZ!\340\7\334.\340\277\335}\371\355\343=\247\62\340*\371Me\354\344\372sR\304\311\250<\320\364-\274\206\t\313\302#\252]\354\217\364\355\320\305\330\353\60\362\377\217\7\273\375c\234\213Z\314\213\254)\210\307\37bk\362z3\26\337\325c)`j'a\322#7[t\367\4\233o\357\215T\307\217\203\t\16lQt\366Z\233\227\210\30~1\254\353\276\370\367\201:\31On6\254\321F}\264_\217U9e6\331\231\273\6\361\364h\224\363\266k1\357\220\251\272\351\300\b\220\25mL\277?\233l\16/5\v\332\344\71\326\36uj;\247\357\212-\34\32\65h\274y\263\324\222\303y&\0\352f,S\352\33\323\324\212\4L4\210J*`\331\325\332\222p\207\366\376\24\343\n\321\332.\1\347\231\261b\277\302kE\6\354\244\b\24\244\70\346\266-\31A\210;X2M>\r\r\216\27rT\306\244Bm\325\355_\361\246\67\243\300rJ\310\242\207]^\215\345\313\247\255-\342z\343\224" + "\63b\226\261\207G\234\364\213\217\270Tb\331\211\305\64\333\345\300&\202\26\246\226m\336\66\217\7\336\326]\b\6\67\323\277\336\4\307U\362\16}\\u\346k\231\r\370b\371\312\331y\354\332I\306\243\23\34w\336\215{\373[\321.\356\253q\244N\332\256O1n\324\354^\306\344\217\212\370c\n1\22\70\302v\212gt{\31\345Th\363\250B\f\233?\211/\212X9\35\362\262\324\331\22\257Uuqv\301f\326Q-\3\23\322\62\211\330\254\217\65\256\231\33\347\221\r\250\313\363\r\225\241\374\271\7P\204\336.\300\\\262F\302\1U\307}\326\352-\367c#0Wu\302\310\264\267O\\\306})\30\303\31<\300\22\371\261\26c\20\323\370@\207C\35^\342\60\r\310\253\254\na\2\25\306\2u\32\205\204u5B9b\263\272\177\16d\261\336\223+\205}@i\224\367\264\211\305\0nU\346\7&/\277MM\325n\275\362\216\231CD\271\256\332G\361\67\361y\365\203P\250\274%KU\16s+\222+b\2\207\251\212w\323L\317\33\31q3/|;0\371J;\366\211\330\317-\315\205+\35\17&\331LF\t\306\316\372\310\25,G@\300\231\212\327;\2`\332PA\305\vS?\371\233\311\210\316wKx~&~\3'" + "\367\236\273\27\351\342\274)\7\342\343\nU\265\343\366\325\260\225`\243\7\363\210\202~%\b\354>5\360\246md\365\353\274\271\36\2\357aX\37A\212\301\336\221fg\374\340\331\231\60\376\312\60\377h\201\303\347\373\271\376\213\241\313\211v\231\232\220\30\364a\4}\207;#\363!2.\333\17*)\304\253\342\217\346\316i\376J\302GJ\17\267\65e\305&\335\320\331<\377\70\345v>Z\205N\241Z\202\354\213\305k\323b\27\71\20\344+\307\36|\356^\320\331\365\315^x\300\334`\1\263\231\5Mb}o\276C\303W_\311\230\17\71!!B\273\207\1\313\220^D\352\264\317\5\60\210F\363\r\237\264e6\32\335\200\254MtX\262eeDXO\225*\261\367TD\270c\203\240\361\313\347\224_F@\336\254\23\223\375=\260\61\322\357\244\5\363?4#\207;cH\275y|l\237u\17E\20\250\355]\325\315\267O\224\335\247\256Q\316@\31\177\366\300\237\65Q\363X\312\260\5\345-\267\320\202\233j\273\356\332\207\71@5\254\253m\340Y\37\315K\21(Ej+\35\"Fj\354\265a\277\242\33\336V1\205V6\235\201\336\332\301b\273\255\215Uyh\2B*\255\370\25\262\2R\344.\201!sm33\25#\303\254\264m\371\273a\7\212.\177\255=_A\31\263\254D\367\253P\373kTf\211\212B\312\257\322~\177\323\366\5\340\346\26\344\203z\247\f\315\263\261\363mF\251\357\61\227rr\332`}\21\tp\332\27@X\273\274\376\223\212Qd\226\203\317\226\70k\203\276\237S\340\65\3\311\b\306EP\227X\r5,\233\264\27f\241x\230\232\vn\263vn\244h\377+(\330/\201\16\344\215v>\321c\271\232\306\t\375\274\311\342\350\233V\342\30\326\222\252\\\217\27iWo\270\251\267\377u\215\240a\"h-\37\336\255\24Iz\21\71~" + "\337`\303R\4\375m\204\323F\266\201M\370Z\226\177;\376y\240\37c\27~\366<\346\215\362M#\206g\366MSak4\222D\341\262\t,V7\n\263\231\\\5\233+C\355\341\375-\327E\n\212\60\362\24\264\21\32\t\310w%<\276o\322Z\376\215\4%\372]%j\272\222\341\26ng\3\333\373\376\203\202}\300\334R\37;,5\17\330{\274\335\307\250\225\254\6\375q\372\203A\4i'\326`\16\322y\16x\314\23\314P\255c\351\61\346O\3\252\343\374EK\354\377\350Gf+k\217\16\305\210~\357\317I\25\363M\1c\303\237\330VyA^\204\347\314_\314\351\364\212w\270K\327\60 %\322{T\240\236#\220Fq\224\30\36;\306\214\343\25\332\317m\361s\v\202\227\25\247\274\241r\\^s\31W\310\246\344\236\351c;\263m}\303\302\306\346J\276\261\326\362\334hf\36B\37\311\244\274S\270 \221f\260\360)\224\360\27_\326/\302\343\222\215\314,H\345\371;\254+ \342\207!\366\255\22@\26R\236z\32a\317\304\354\366\227\177\304\252(\374\26\27f\216\66\276g\360\306\33e\345\345\223@\313\325\306`G-_?b\221\17\366\233\310\232?\276]!\264Yo\201\363L\256g<_\227\5\23\64o" + "\216\331\25\32w\332[\227\244\\\332TZ\202,\302\373Z\230\220_\374\62\246\371\63#\32\223\34\31\5\321\f\225\361!k\360E\357\327\361\37\337\221\261\217}\204\34\233\306\214\346z\260\264\311\305w\301\363\36\vn\f\342OAe}=9\22\375\202\301\220Q))\37\221\262a\224\367\302'~\373\264_\374\37", + 30485, + 71165, + 42269, }, { - (const Bit8u*)"tx\5\\\234\327\362\366\234\231\335E\326\215u_Va\205\335\b1B\211@\234\204\20!\356\2\301\23 \236@\322\22\242u\371\352\336\306\355\266\361J\334\335=\375\232\324\33\277\267i\377\364}\177\277\353\367\201\335}}\316\231y\316\314\63/\r\376\306\341\3\16\251\327\314\263@Y\"|\1\352V\206\322\200C\331|\377dL'U\2\267\307:|\246\177\v\263CF\"\335\316\204=\244}V\364\1\260\243\260\b\205m\331M\234fKk\2\377l\371f\26\355\252\372\221\246\364\365\371\231\264\265 \304\362\377\260\66Ra\271m$\266o\257\177\216\332O\323\335\2\361m\372\210F\324\71\217B`\235\"\203|\353\344\275X\354\211\372#\352\235nQ\263>C,W\231\252\255\360\t\16;\242\212a\267\301\346\327\250\356\245\364\261L\330\300vS\353\336\332V\254t\270\237X'\275\261\26\346\266\212\374\n\363\277\212\326\240\343}\311Afz\222\364\32S\314\27\226\262\342\363>#w\7\270'J\267\62\311Q\272\207\3&\331\307\320\260\267\235j\230\\\346]\216\375?\210u\247\21Jg9\25\271\34\355\310\366D\374\62\204M\252\367\310g\221\335\301\212\17\3" - "kq\214\301\275\235JG\372j\260\335\0\375X*&o\33fW\213\227aJ\247\204\315\200\3`\7Nn\360\251\240rZ\340,$>\304\63T\364\215c\6\270\223\245\253\240.5\375\377\303\310&\327\21\24\325\273\326\63a\211\255\220\325\v\243\373I|\215\306\263\214\1j\t,\316\214\217\204\66\35u\243\60\351%\22\303\354h\370\bK\33\242\30\203\213Z\306\25\20\233\240\336\314p?|\317\272\34\62u\"]\237\204I,[`8\310f\267\217X\241\317\62k6\365\254\67\377\302Z\247h{\262\361\216\324\321$M\26$\242\65*nI\23\254\251\v1\352T\217\302\376\23lM\254}\276>\314\24?\tk!\367\252\71\206\371q\353T\370\23Tx\327\366\32\374\35\314o\225\373\1\345\260\212\212z:\372\260\321\317\273%\220v]\331\r\247\26\244\215DG\201\244\201M\350\352!6l\271\63\b\243\253\335-\341\351_2\356\63\321\\,\374s\226o0h\6.\376,\276\224\365]l]\206U\272\340p\30Xo\337\216\225+\203\231\324\265\233)\202m\247\350\345\70j\265\333\17\65\257\247\335\245\245\243\343\3y\343u\333CJl\274\26gX\342\367\365B\331\64\301m(\267\372\227\361\364\221\344" - "\322c\326\357\222k,p\b\t\225\367\240\374\240\377:G\25\370;\310\243\226\245R\202\22K(\371*\271\251\362h\300\1\375\336\264\236\301F]l\17\214\356\357\266s\327a\177\263\255\216Y6\213\217p\273\34\377X\267\216\346N`iJ\236\17\36\222\365\202\256\314\364\377\240\262{\340}(\234j\273\317F\305][\240\340\3[O\354\331\325\374\210\"/\252\276\305Vo\247\204\241]7\275\7\372|i\35\17\303\343.)M\244\324\335\230\60\34?\242\242w\34\325l\300r\273\26\306z\335\267\301\375\272\364\62u4\353\257A\207N\372U(\276LG\250x\205w \260\24\350\217-\313\265%\224\362l\202\4Z~\240\365\261v\237\351\356\201\266Zt\210M\376\302\373\n\214\277\343i\201\375\277\261\375\310\22\243\270\6\323\326(\27\61\250\0;9t\336GX2\306\367\32\312\267\b'@\342\26\334\203e\343\374k\250f]Z/\30\377bh\25\26\36\266w`U\337\6C0\353\351\360,\210}\254\276\304\374\273\344\365\60\273\60\302p\366\255\310\35\326\245\334\344e\35/\33^AA\16\253a\305e\336\353\250\177\222\270\30g\331#\375!\303\241\256@_g\371G\370Lcl+46\305V" - " \216\202\213P\221\35\0\354Yk\21\262\316sM26\257&\232\305\226\352\342[\320\35\223%\242\70\221^eM\206\330/\330i\210q/f\216\321\265EO\245l\33\37\0\233Q\374\62tjk\334I\23\236N}\233\306>\355\36I\356W\244\233\370x(K\225-!\364P\265\2\222\277\245\b\f\354d_\7\342\257\224\237`\341\313v\27k\375\216\366e\232V\33\374\21\323\316)/\3\207\26\357k\26C\313\71\232s\177~\355G\311\30\201\207\325\266O\217\341\220/\335\271\4\7\241;pP\375!2R\374\276z?\366vY\236g\365\267\242\367\260\341nF\5\245\225)\356\260AE\366\375\330\260\63c$\f\377\325\325\235\312\276\364k(P#\277E\223w{\235l\306\374p\"GG\340\60;)\274\356O7mDo\33y\177\354\305,vha\326\344\203\354w\301e\32\71\307\325\236_=\345u\1\t\365ioi\202\t\235<\325\f6C\16S>/\\E\313\36\307_@a1{H\276\207r\236\331\350\376\\\226\203\364*\313a\216#\222\326\274\67,\233%y89\350=K\316\17%'(\363BJkn\30\64Z\343\332\207EW\34?\221,K\260\16[\355My\16&\224{\246C\351\373\276\273\315\267%\367\301.\317\232&a\315\212\364\323\360o\210vT\247" - "\261V\323\64\217\201\203k\217t1\244\207\225\265,|\\\371\4\362\v\254\365\330\67\313\272\t\5k\331\233\340\34,\371\v\244\237Vna\276d\331J\32\223\357\272\315\245W\324\257M\234\7*\211p#e\377h8I\271\5\246\32V\246\362\17\2\365,Q&\277\70\361\5\70@\203\363\354\274!\250T\5\226\2\207g\246\305\214\334\6\251\277\27\71\341\357`\236a\262\fH\370\20\353\321\261W\362\30\242\363\324-\370\23\245+\375V\20\254`C\230l\210\347;\226\227c\372\205dz\301L\352\367\273\365K(\177\333\177\24[\25k\277gl!L#\207.\236\206\332\227\23\322\310\327 \267\61\347S\222\61\60\261\334s\20\306NO\25\3\211B\177\200d\23\335\204\31\242\320-\322{\22\5|5xfo\306\tt\266\225&\343\374\204\350\2\324\26(u\314X\222\224\313\234\177\223lcu\376\364\257)\273\247\241\234\"ZU\r5u\212u`=\373\230OQd\265\352\1\324\237\212\376\273\237\231\377\35\335\353 ~\225fQk\247\326\200\375\322\254G\330\334\232(4\323\333\220@mf\246\254\344}\320\234\245\266\302?\320\352\220v1N\252\360\66\360\205%\274D\225M\203\66\333\27" - "\340\354A\221]\230%2\4`H\330q\341\237\fyU\262\71\224\245\326/\303\216\37\33~\304ak]Vt\35\225\336FmH\364=$\6\361=l\373P\337\22J\363}\273\301\335$\375\nm\213\304\267\361)\221\321\205\325\266\64`-\245\232\30\227Z\260\315q\335.\212U\251'\222i\234\365%\346\356\344\271\17\3\362\355]`\354\316\324B\312z\244?L\275\177\266T\322\210W]\217Qr^0\216:\337\65\376\204%g}\333X\365\356\340KX\220ek\201U\23\202ob\347\242\340n\264\v%F\364\274${\302F<\357\362\260\214Ej+\23l\n*\230\260\204\355\200\242\343\216#,\374\233\312\215\235~1\331\261C\17\375_\21\0\204`\271\236|\fd}\5[\250\375\317z\35\316VF\326S\366Z\303\66\34\64\307\221\3\345]\375\257\223p\37\212\331\302\357\62\266\202 \205\345\242d\201 \213\273\230M\\\340y\232\f\375\22\207s\25\226u\\f\250g\221\345\252\311\260\350A\354\33f\337/~\210\332\312\4\r\264\350\241)\202f\236^\305\254\323\206\267Xfi\312\20\256\202\241\365\260x\0\33\31s\325\342\340\227\35\213h\271(\376.\312[\353\276\307\241\33\235\317\62Cnb-\344\177c]" - "\306\373\336\326Q\354e\303;;\347\260|\255\325Lmz\247|\200\201\233J\302\344\257i8*_\23\36\207\351\237\206\336k&\203|\32x\274\262\342f\371a[\311\347\222\300,\205\203\231/'\335\345EL\342\217x\203\206\345;\36!@\322\35\236/\366\253\22\342d\0\244\27*\347R\360\211b\v\214\336\351\356\210\345\207\3al\243\320\225b\365\256\64%:_\226v\241\31\203B\215\330Il|\17\63\317\351&\301\200\250\335\307J\317\370[\263\304\276\370\71\233o\216N\244\5U\31!\26\275\255\372\r\215;\223VP\322\35\215\217\65N\211\25\203Q\221\224N\271\363L\vIyQ\270\0\342]4I\224s\330t\26\232\256\306\373\62\351(A\177\236\254\331\6\303p(jtl\3\341]v\207\214k\223\4\254\370M\237\224+\"\244\20\t\356\263\362.\376\227H?-QI\266\213\342\32\320\264\24\r\246n\313\314\5l\301\314\214\"X\274\60^G\265\247\322\316\260\66\371)\177\245\311\335=\333\371'\367y\313\262\217\253\215(\376\210\276`\236s\262\301L\327\230p\203K\207\70\353b\344y\262\245\212M\344\257\224/\303\254&\303R\226p\21_\201\61\62w\r\272~\223>\304\\" - "[\252\233\226\236\211W\343(\203[\5\34\246\37\v\35\240\61\353\334z\336\206x\1\r\244\247T\206\353\234\306\204\21\313]\305\64\366\211{\16\216\237\347\321\221\335%\336\4\235t\306\347ArR`\242\204\34\254\203\202\62\233\26+\247\4}l\320\36\207\34\215yIM4\366Kw\5%\354\300%\230{\310\254\207\5\333\63\212\61\232g\32My\307\315\2FuL\307%P&Q\323&\326,?Z\263\306{\261u,\262A\365\22,\355\33\277\310\347\373\266\271z\2\16\343:\246>\307I+t\307T1\310}\337\354\244\221\357\270\n\271y\320\270\273\356\307X8\310\16\64}k\310\214\303\26\272\364\254y\276Q6\274\312\271\206\352~I\337\310\362O[K\270l\201\335_3oc\256\\\311\25\354\221k\276\304\232\355\207\61T\247\272\f\275\276\266\24S\347\305\306\277P\277B\353G\314\272S,\304\61\23\335\247\251\303\32}_^\373\340\65\370\36\362F\231\213\241W\330\22\205A=\34\6\232\223\22\276E\263\247\204\337\202\302<\333A\322V\244\255bm\237\350\352a \330Kq\236\60\332\207\237L\v\213\346]\260m\21\277\r\34\324\31\242\60\253\35\235^@\201\353\n\1f&" - "\353|\\\2E\345N\341\17\360w\220yW\322\66\370W\260\366\277\353\353\331\320\r\316$j\273KW\304\n/\330N\222\345\347\344\301\64C\35*G\335\316\304\256\230\372\241\254\36\306}\226\272\32g\254\f\17`\3\206\331E4~jj\27\370_\240\314!\332M\34c\261\367\233V!\226{\375?\363\3\257O\213\336\370\247\353\360\34\374\r\376\16\224\317\22\216\344\267\300\4b\226\366X\261\233\372\214\266\254D\323\262\244\365\377t]\216\300\70\220t\220\320\vBa\225\356\317\255v\\e\"\215\322#c\311n|\210\215[b\347\261\"%\320\233\237e\336\62\323C\254\237\223a&\357j\331\373L6\304\375\6$\367 m3\213MW\331@\231\275\67\315y=\262\0\206\345:\213(\332\240F\356\66\216p\274x\357pN\317O\201\240\1b\20\324)\226\363\361\370WPNg\243\236*\231\177\17\324.N\257\307\231[\302_\220b\241\320\viUJ\7\224\327\372\67\262\346%\36\203\352W\203\307\200\303\320\221N+?\310\206\331\31\331 (c}H\372\223\240\32\234\177H\r\234\\\300\212\301\201\32nT8\260\312~\36'\\\360l`\302\22TP\215'-\231\327\7\203\357\70\66A\231\310\37" - "\202\344\231d\203\314\7\272\60\25\377\305;\6Z\314\323\214cS\6\372V\320\324\367\202\215\320\230\31\253\202%\233\343k8\207\341\304+\336\263\16j\260\327Q}e\264?\210>\307\247@{Y\364\33\327\247P\217R\363J^\4&'\340O\254\345^\315\213\254\262&\360\32\263\4\222\23Y\366\351\360$\30t\333Q\316\275\r\200\205#2\246a\361\30_\230\351\65\211\1(;\347\257\207\272A!\1jf\212\326r\235\27\353{\302\272\26\2\67\25E`\273$>\317\65XL$\304\64\320\375\220hf\363oE7\243=&\t\262\206\3\31\335\320\350I\232BU\373\2[9\332\302\323\23\63~D\307T\311'8\271\267\367G0\357NzB\242\27\304s\233;\21o\31L\231\347[OC\24\216\6j\225\243\231\216K\226\306\17\361\356\234\326\65=\211\265\320\250\177\342C;j\272\353=\246k\237p\226f\35\17\347\261\324\210\364\60t\230\254\337\2\331\343\214r\312\363" - "\232\16C\361l\37_:x\376q[\6gbO\4H\231\304?t\306o\341\n\252\26\6~\344w\235)\222\337\71Q\316\332|\253\353\t\241\243\252\\\324W'\226\200\177\260\374u\22\16eG\301wZ\376\"i;\213\306\262\314\16)\251\60\371o\336wyN&\356\304;X\367\\\350\"U\273\202\300\224\327\205_\260\211==\363 8Cq\222\345D\215\255\370Nx\304\17\256\6\224\267\216;\301\70=i6\372:\233\362Y\260\207\374\16\263\314Kn\311\254U\311\277rE\t\274\277\310\5\314\352K\276\200\303\255\256B\34\64\330\21\303\252\343\301\313\64\256\227{3*\356\v\337eY?\30l\30*P\255\207\t\267<\317b\327\376\246\355L\374\16\65\61\347\62I-\367~\203\33\25e\256O\21\203\255\233\270\7\314\234\31nEs\372F\312\270Z\v9\313\215\v\331\204\357=\331\30\235\240\256\341\210\316\351\b\246\60\n\213\20\37\60\21\247\371\241\276M\364\35\320\276/:G\363CQ\331\237\224\272\302*\v\2%4\377\335h\36\277\70\23\243\321\301$\270\304\326B\347\227L\231\274\263\65\253E]\270\372\306&\265\367\252\240\60h\333\310\344w\205](\347\256\261;\366y\331:\214\277" - "\316:#\371\26\277\345:)\235\301\302s\225\207I\347O\30\312&\244\246^G\213=y=ph\16\343I\220O\26\352\240\337\1\233\224\306\275\357\276Fs_\217\34\303\5\253\63^\240\262\273~\37\316\30\36n\7\255\v\264\207\271\33\370\\\"Xk\354\b\363_\214V\0\7U[I\26oM0\235\325c\337{\326\253\374\24\322\347*~\246%\265q\v\337\377ef\306 \36\211\264\216@$\362\177dX\327~\343\270\316\327\243\360\364\366%\277\235\262-w\256I\246drb\317\266;Z\202m\256)B\37H9Q\236\376\374AI\261g\366\302\"\0\202 Q\b\200\376\376\312|p%\205\222Lb\363\336y_\274\212\311\334\223D\16\346\336\205\215\5\351\315\305\334\254\355\306\323\252aI\261x37S\320\307\221D\241_j\33\315\244:RH\255\320\225Y\331\220\354?\242y\240X\266T\274\235\233{q\272\21o\263|g\213\311tf>r\250lg\356\334n\237\314\222\71\345\35'\233\252-\23\v\200\310\276M\364r\226I/\1CT8\232OG\22\263h\205\33\2\341p\201\237\231\244d\313\303\237\200'\7=\226*\234 \254\302\341\304&V\360\250\347\333\221YS\b\16\262\266\342J\33\314Z\254\363f\345\352\326" - "\367\214\67\27o\256\314z\337\206\212d\225\304\35\260\315\357\366\251\230x[\271\300\30\35\5\63\201\31\272\1\236\nQe.\314\232\37q\264I\214\266\365i\230\233Yh\361\2K\300\t\6\354\301\326\315\t[\223\324.\350\tF\202\70\317\273a\213X\344\375 A\345r \343\202I{2s+\7\363\272\230\324\366\231\362\327\205\235\371\330#\324+x\255\347V\301\21\64>\24\223\273\311\7=,V?P\231\332\372\344\304b\22v1]\341h\373\347\354I\320wJMV`\331\362\v\316\344.4\30\\\304\304\305G\27\243\363 K\271\207\3>{\230]\21\314m\371\t\220c\230\211#\240\232e\260\36\340\16\361p$%\263\376\314\355-\206\316\232\237\254;\26\203%\315\317P\nH\"aW\231[\230\255L\212\v_\314\271\322\3\252\373\241\331\23blj\253l&=\233z\306\36H\242\231\261\64\227=\355\301\226T\214'\177\2\4\341\370\4\222\322\246r\17X6\216t\200\"\340\253`\306+31\327b\217t\262\200\62t\34\60$\353\235\325\61y\314\v\5\213H\210{\27\20}#yJ\340\255Fl\306umOh\37\314#\366\263\330\264\37\221\337\70\214\23\253d\5\256\236\316\340\231\377\266\24\223" - "\331\302\222k'0\337\224(\355\31'\303\334\353P)\376\214\217\347\307\34%\17\314\t\250$\203]3e\25`\27\220 e.\356\250`\262\65\242\\\17:\360L6]\214\347\204\251\207\225\315\r{\260\273\215?3F\4a\207x\251\324\272\352-E\327\334`\204\235\255T\361\354\206)\255\313\361\367\336a\1A@P\1l>RP\347\0\254\270\316B\245\202\17\255\v\0\23\302\rZ \232)jFX%\"\257xL\\vQ\247\270\355\207{\335\63?ZQ\200e\347D\327\303\232\260\217\263=\30\377/\333\361\2j%\222`\325 \326#DaB\355\327\236\306\4>\267\16Iz\316\255F\344\r\343\230\247\231\0\272\257\t\220\236\210\333h\346Z\32]@\300\65\235h\366\200\374\255\70L\327\24\322\37\31\317|C\330\327\211M\204\330\273q\25q\373\65\277&m\27\17\335\330Y\346\236\347#s\350\241\25\26\365\320\317\314\25\352_F|>\5\374\276\365\256T\211)\260\253\"\200\243\323\62\360\236\263*\217\332\207\71M\202\363\371G\344\253\262\204\211\377\361\343w\205\6\221w\201\24H\373M\326E\200\224\256\316F\3H\315)9\221\232st\311\302J\332\367\f(\211=\260\"\213\24}\314\62\266%#\244\25 \r\334\21\310\353\227\332Kr\r\232?j\260j\325\357\235UR\223X\231k\220Q\264h\0\301\341\265\307\1\32\355\326\61\212\26\\" - "Z\364\326\355\273\35\300\r\211\335\270\70\202\25\253\235\350t)r\243\61w\26\22\253\\\261\200\354\262\312.\260Y\354v\261\207\336\5\271\314\236\266\241c\35 m\230\372\331f\250\361\214o,\361\201\257\373rX\344\352d.\316\236\4j\250_\331\37\266\370\25\271\215\203\322\237\336O\306\306\37\264\232\361\t\377H\310\245&w\275\212\36\250\33\206\301\207\314\276\313\322>\270\334\62\351Y\242m\5\322>},\206\bFH\320\v,\16y\26(4yh\253N-!vW\272\324\345\64\250\b\207\376\306\232\v,\355\314\233\221\370\201\245\32`\4\321\7\353P\21\27\261\204\25\340\71\256\315J\343\4\63}\r\33\70cv\254\267\365\v\1\311E;\1\357\t\354\60'\20w\264^:e8\34\254`\314\372\212\346m`\255\66^mH\200(\367\21\203 \340\7\62w\370\324g \342\22\30D\363Y\355[\\\256/\257\314\35k\33\203\352\n\345\357\\I}\226+\26eL6\271\322\352\322EUu\377\70{\333\201@}\310\305\2\345\241L\2!6\214\260&\247{\234\323\223R\216\371\251a\266j\215\33\362\36\264m\261\250\235wlV\271\f<\233\237\260\221\0\357\323\316\n\226)\26!\301" - "\376\305\242qe\261@|\202C\243}\260\255JS\37\237:\230\241\257\335p\202>A\v6\316\266\272\277\63\213\247$T\23R\264v\220\375\215.\372\16\333\6\363E\211\306\313\370u\261\70\262o\363\215^\270S\36_\213\263`\354\224\240\251\263\215\305\362\342\325[\263\346\32J\1\326\266\26\303o$\\,\21(\375\63%\203kA/D\350\363\201%\353OAR,I\2\16\240\226\227\344\340\16\33\17\224\206.\t\263-D\336.'_%\366A\377\334\321\235\302\6\70&\207\227\24\20!\363w\215\367\35%\370\277'\334\330\307C_u\237*\222\36\322\322\303\241\322\264\232\306\225h\262+\5\30\"\336{\373\250H\334\223\\\340\252\347\373\243L{n#\215\371\373|\376j\274\265\367\304\r\206\261M\356\37\210\313\234\305k+\4\20\21\326iz\f\317:\321)\327\332ic\253X|T\313r\31\61\307R\235^\33\320\347\366+R.\201\240=z\r',\20\33\16\360A\33\30Q?\345'\210\316\304\344\342\325\330\331d\273\b\341f\300\62Ri\327\65\244\352+\350\265!\37\317\237\344\201b\304<\347\f\272l\203" - "\271Q\3\24}\333`\7c\16O<}\305\255\254>\202\206yW\16S'\34\6\377\377\226\204\345DZ \216a\227\363ND\34D=\330\24G\352S\6v\326\374\370\66COn\30lx\1ta\217t\343\377&@k\r\336\376~\1\203\276X@\201\4Q3\327F\274\255pO\354.\21Z~\213\33\263\267!Xe\331\355\35\212\353^7X~\370\342\272\235\376\354\271\336sL\375\267\177\256\341\300\70\211\205\213FL\355\374\346\345_\212$}\tjH\362\273\254x\371O\3P\273\61\370\64\305u\260\333\266\270f\353U]\35\377\204/W]q}\217~L\34\262\347\251\317\31/N\377\252\377\25*\332\35\1\243\32\361\27\1\270\32h\333ae7\276g\364\r\22\223\365\232S\317Z\321\342\346b-:\\~\276|\270\374pY\334X\304\7\276\260V\225\243%A\363\275\306\207\252\263U#\217\271\242\364\232\225\222>\337u\201\262\353\235\306{\350\206\354\261\203spH\330W\3\t$\357Jn@\31\243\62\223\20Z\210N\200\302\24\207a\224\217\234U\22hO\4^l\374hO^\276\341\272o\342\347$\233\16hc\363\237G\1\240\b\vz\202z\343h\310\345i|\203a6\301*D\25\240#\t\342W\267h\177\67\370\361\243CY\201X~\f\35\210u\223" - "\264\224\254J\261\365\306+\33*\300\6\372\235 \203n\353\26\5S\v\375\24\352\20\374q\233\260\350\216\323\345\345\245\71=\250o\17V\334\30\350\361+4\367b?\271\334\306c{d\340[ov\352o2;\307%\233\312\231\65\64\244\220\270a\357\60\357\333\350r3\245\177\230\335\326\65\213\246\334\266\336\330\4\264a\330\30\207>O\1\267\241\264y\247\273\234a\263\235\363B\204\205K\35\346+\215d\225\37\315\267\337|\243\36\37\63\17\370\61\277u\376\177\205[ic\343\250\262\325OQ\277\375\336\373\334\263o\375-[oY;v\226\311\67\24\21\233\221\f~\200\332v~\375;\207B\270\235\331gDU!K \n8u\212dJr'\357\242\334\v\275\211D\34\325\376\62~\20\27\275f8\366\302>\325V\232(\353\374\213Zaow{\310\213j!B\353\313\225\266R\203\16kJ\346I\265\212\202\223(~\260o\270\v\376\246\37\211\326\217MA\215\325\30\7c+\375\351\347j\f\225F\347;\37\242\262Qb!.i\201\25\300kK\336\t\34\310\226\27o\374\20:\323\340\332\227}\224\20\274\372\b\17!P\351z5\204\377\226X\232\254\325\67?\223\210\22G?\7y\341\353\337E\337/\177{c{" - "\263\64\354\2k\261]IH\316\70\304\314m\272[\365(\254\211\216sNC\346\222\3W\314\220 T\37\65\372\203\377\357\310aQ\243_\242X\321\245?\32\273\251\360;\"\22\364\\\225\25\17F\253\26\370\4\236qDL\330q\372\177\3Q\366>\330\370\303@\342\357oyU}\304L\323>\25\277\351\230JR#g\200\340\1\265BX\261\207\325\251\352\34p3\312\245\351\300\27\v\0\204j\347\312;\7\301[\367\271:\325\6K\326-)\5\317\366\322\1F/;\305'\315\373$\242\17\257u\24\323\345\323S\r\356\274\200\255\235\343\225\352_~\206\334V\0\n\201C\207P\353\227\352\324\322\5\62`;u\210\353\353\331\263j\224\207\342\371\234\fe\361\312mu\352\207\220\226\224\335\256z:\254\225\211\205w?]\233\216\374\346\246:#\276'\317\301\231{\246\20^\206\350\274\301\4\266\256G\30\310\f\7\354-<\230\313\36\304\271z\302\246s\246\1~\5\373Bj9\236]T^\330\232\372\33\336\241\260\70\16\r\36\201\37\371\220\246\356]b!\264\207\5\376\311e8\3{\253\304tm\340\271\20\327\26\17\\\363F\255V\251 f\324\237M\302\37\5\252\321IQ\207\365\252MN\276\365*" - "\253\1e\\\220\n\302\3\34\332m\254f\360\225\272i\360\234\271\244k\316\334#\235\0F\327\352\374) \303sW\240f\317\20Sl\353\263\241\323\20\315\334\324\314P\30\17F\263'\320=\307nv\366\372\344uu\256Z\356H|8\305+e\350\177\257\240\314\211L\224_a>|;._\360I\277&\267\25x\203\325\321t\\u\273J&)\334e\333i\17\215\370\237\373jz\267\350\314\20\360\367\241\276}w \246a\205\22\206\357\216\253\314\7^\30\373\233\"\v\262P\255[\27\330\303\225\205\221\372x\333\235\243\367\17\273\37\66X\344\371br\374\\a9\342j\236,\33\210\325\271\6N\32\5F\315E\0\30\247\310HG\32\246\261\336\3\6\272y\n\311\370\b\35\265\33\213\21\346\236\233G\357F\232*\210\272\362\344\351vSI\254\301=E\264\376\21\315\357\235\315\266\1h<)\244\261c\272\265\377\254p\265.\252\317>T#\4\310e-D\34&\330\271\353\365C\225\243\"\306\t\v*Q?\17K\265#\300a\343\224\32\346!I\201\255Ll\201\247\301\253\247':c\277\235cZ\322\300h\344\324qkD4\234\365+,$\220\243\363\223srL\"7\246#{\333&\20|\36\314\241\302\257\60^\272\257)\342" - ".LS\3\264\277\201\264\f\312k\v!D&b.\16\246G\7\327\231j\302\207\277\70:)\257\24C\336\300\33\266K\204\300\262\30\202%\210=\263\226\330^\321\377\313\245\65\23F,\373|\34\250c\372a\353u\233&\24\365s\207\356,<\1\36\223\201h\321\305\364\303\361\t\ta|\367X\360\302%\271\240h\350\330C\217\316\1y\21\211$\"\261\26\322\30\67y\335s=\203\213\204\264\33JV4QF\250\214\16*\336\200H\335WL\316\62\253\234\204N\4k\252\313\rI\272\253\nD9\377\247\267\260\354\226R\nA\t\1\254\370\22e\347p\261\363t5\217\257PxN?\307\326\\\35\301\355\\\217R\206\233\302T\203\211xd7N\2@\254\353U\335\246lC\343\372\264\35\1\65+\322z\270\371\237\314\203UWL\216:L\272~\256RL\215\246:\354!K\345)\241>\22" - "\304r\262jk\211b\336\352\317|\373\2\262\nh\244\231\263\35[v@8\200z\217d\6H(\25o\323o\214\16\305r\345u?\264\272\350\5\323\222\n\265\v\225\312\210\255\273\b\311m\240\305'\334?\226\30\255z\"\216\230\63\35\254I\37\25|\233\252\345s\236\235\34N\253+\272\67\366\240T\4\250\214\271]0\t\306\321wqqs\325\70'\333\333\325\320c=\374\26\326\325\243\363\226\245\343b\17\301\333\64\340\222\352\221\354\341\225WkWw~m \352\226\220\226\277\365f\251\230p\305j\363\342,\0\36-\321\335\270\216\377\27\225L\222q}\314_\206\362\302\64\271\231\202A\261\313 \0\265\232\372j\241\37\267o\344\267\270\235\317\237\341M\252\225\333C\374\202\332\346,\372\271*\\}u\25\266HV\357\336\64\330n\233r`\20\3\263\251\36BD\216\20\305\363\63Z(\231\310\253-\304w\0\373\245\v\0\375\3F\336\20\250\263\253\333\276\372\364\317\206n\366\311tS\355\361\201>\r\314\267\356\322\266\7\375\344\223\322\255\222\246c\372\212\371\320`\327R\214\266\257_\37\274>\177]]\253\246\61\222\266\235\r>\366\32\226\266`\346" - "\64\1\366\200o\20\333\344\364\25\204\270\230\314\26\212B:\21p\255'g\16\17o\253DX\b\205~MD\17\354\321c\345\243b\365c7\36M\200\336k\213\227\206\200vb\33\n\332\356\361\202\330\351\6\357\265x\374\204,=7\313\274LF'\274c\336o84\231\21)\246\375\70\341\bc\337\243\3\304\212%\3\360B\345\343\305\360\331\4\264E\322h3:\302\66/j\277\347\342\336\324\222\36P\254\303\260&\312\277\2\271\321\70^\231\235J%\277\222\f\b6M\311\\\320L\22\35\213[\37\262F8#\242w\210\214\276\375\372\347\357+\231W\271\340\210\4\235\25\311\271Q\306\0\243)\222\306zT\255P\224\251\206On\347\251aK\357\330\64\307\275\33eT\t\vr\202Rs\33\\\7\70\303\367\337VS\325(\16\307\207g\353\346nha\340\246&\276\301\351\67\36\310\341A\35!\352a\2\252\300\65\242\307\323\243\17i\35Fl\316\4\252\207\60\64\352V\206\226J\213\355Gu\325T\253\65\241\250\244\235\350\341V\366\303L|\243Bw\311CS>\301ma\260\321\341\352W\20P\6\364\63\7\n\340\373tD\363&\357\334$\365\4\325\367\316\232\373\n\353@g\214\344F\361:\352\313!\260" - "X\223\v(D\340\64\245\355Xx\202\333\363\357!\32\353\32\203\322\253.M\243\64\333\240cO\303\71\26\202k\25R\247L\243\350\367\314\36\24\67\246\313\376I\5\236mZMx\ra.;\277\4\304\320{5\36\304\200\202%\244-4\321lA\362\276$\275U\17\322\224\367t5\21\360\332,\251DF\246\256W\n}\354T\324\254;6\32\212\251\31\276\355\23\271\60\17}/\257\223U\237\3p\353|\324\33\326Y\313\230\250\344|L\v\343\66\203\237@9\303\177\212$G`\303R[3\25\\\257\31\351M\37]\214\206\204\66\366|\213Z\255WkAK\323\245\":\234\217\7)\310tbr\303\314\235\314H\20\216\312\350\r}\240\341\346 \347K\322\65)\376)S\361<\363\1\261W\236\307zZ,,\231{\374\257=\227rv\313\351A\311EVN\327h\20\264\25[;f\203\207\270p\236\71\353\66m\20\250\366~\313@\260\22\316\201g\307\210g\16\235\177\332!_\251,\303\\t9D$\312\361\320\216\366w\203\362$uD-\251\177Q\331\177\27\263,\235\316rL#W:D\343\343@\327\27y\255\262pwy}\16Ikr\177!j\221\5\211g\312\260\4\322\364\251\\s/\367q\347\242\324\367\rg\323+\310\213tL\212\355\63-\3!" - "\335d\261aC\257>\\P\265n\210,#V\305\66\263\31\244\213tE^\302\353gB\243a\243\361@F\276\371H\306\325\221\250\230P\335\33t\221\320\204A`\201\221_\36\363\341\235\222\37\237\bC^\"\364R\263\223d\211\226\234\233\230\323A\237$\315U\24\341\234\201\324N\222y\260\237\21\32o\301\36QV\302\17/\365d\350\373\305`#\245M\332D \1-\311\265w>\353\333\232\225\\\266e^k\36Z\262s\320\376|\v\324\270\377XZF\336M24i\204\4\61\63\263\374\3e\2Y\226\333\r\256\334\373S\332GF\26\26\232\207f\360X\337\313\21\16XV\212\61\23\5\223c\r\363\261\345h+\r9\32\332;M\312\r$\37`\223(\300\330\30\242\263\232m`>\177\214r\230\367\324-\317f\311\215\316G\374:\214\357\275fV\250\63\271n\360\330)$k\305\271\222\254\71\263\305\254\314\22{L\261\5LMpX)|Tb\325\272[\23;\262\272\344Sd\263\252\312\261\256q}\337\31\246j\16\20\311\354\215\266\334\232\260\234\366\254.i\2Q,\300T\273\177\210\222\357\310d\33\357\331;\365A\235$bI\374\24\303\350\326\64\24\266P\22\327\203gJufb\252<\37r\232\\N\360\265m\257E\304\354\60)\272_\211>\330\224\240\305\327 \0\201\v\221\362\357\252\234\311X\5.\363\23\222\331H\322\b\5\313\67\336i\343\23\345\263w\343\36\324E\205\254\215\4\23\27z\235\226H\315\5R\252\206\334\322\335Y\350\67rd\220Q" - "\342\70\346\63l\371\345pt2\0\344P\340\241c\36\316\201Ea\24\353Se\272\354\v\\y 8\0\31\1hL\370\236\330\271\261)\361\355M\"U\363\231\357 g\276g\246\217\270,G\342\64P)\253\b5\213~\214g\341\30K\301\24\311WTh\21\36\373Q\3\214P.\270P\362\236lo>t$A=\f\313t\336\302x\332\213\201\353\6\"\b[\364\23\253cQrB\234'm\206P\254\357\34\371\v\225\366\5(\21K\331\37\327]m\201\235\354\37\377P\342?\37\377\244v\246\346\177R\301\370\370\17\253vO:K,yQ\1\243\335N\211\216Y\214\335\315\34\247\242\345t$u\273\305s0.!\250\342B`%g\351\20\n\37\356W\272u\371\20\201\234\312/u^Y\262\23q\234?i\233\27r\211\265\206\244\370\247\301\340\232&>L\216S\305'\311t\212\5:94\232\227!\1Y\341\273g\364\23\276C\266\302t\255/\207H\7\242&\307\361s\246ONi\311\6Z\315n3fx\263K\31!\336\356YY\242\27\274`\353\215\262\b8\277\376\272\272y{\271;\232X<\177\344\62n\254\341\366\255\372\214\250\60\227\tbC>\300Q\0s\271\257,#%I\266\363\364\33\254\243\353\1\63\350V\33\62,\273\23\16\267\6\37\rW?\204\304\362@d\242" - "\371\266W]u\207v4)l\207\350\361\376y\317\345\34\r\352\272d\333\332\264d\306\347n\227`\277x\177vu\300q\233\20\345\205\27w\275g@\315\303X\222\367`S\320'z\f\373r\207\200\361Uug\32\205\246\246\330b\360O\2m\251\316\353\335IQ\346\356[%\326\213!\312r\26c_\216&N;\371M\340\225\0\207\276P\224L\322\6\36^\201\213\341\275\313\204\355\276\307\r\253\23\67D\224\234y\237\265\fw:\214^\337\22\300\63\35\217\332\347\316\b\246\24\214\306\236\300\330\b\245W1\376\225C\321\224\264m\231\62\25\246\343\210\211\263Lt\320\264\4\203\357m\226\357R\246\204b\\l\1\312\361\215\30\200\247?(\300+$W\b\25\24\17\63S^\257\253;\216\353}!\224\356'\4\n(\316\61\214\367G\34\267\r\17]\220\vQ\375\310\70\337k\353l\272\256\34\374\376\336\254\26\16\5V\327\362'.\367\227g\227\25\3\373M\365\253!\341Q\237\16\331\353\360\25\222\347<\307Z\263\311\61\v\303'g\254Br\321&&\357UI\311G\325\\\362\65\6'\237\237E\311\367)9\371q\227\222\262x\325Tc\247\226\362\370\364T\307\331L\352\\315\37\310\247\316[\30g\266\315\341\313Y<\307\370K\16a\334'\372=R\360\30J\315:\345\67C\n\230V\301\254\6\346u0\235\242:\270T\254\1\247\36\67fh\270\376FM]!\365\242\266\276\65\233\372\222\4v\347\36\317\267F\4\336\35\25\371\23\213\22\357]\342\342\247\60\337\31B\250\215\226\371\201.\225e4>`\325\371\361*\303\5\205vC(\213K\316C\v\223\23<\37\v\t" - "\374{\363\"\377\351uIh\270\301\305=X8\301 \241gX\26\372\277\216(\302E\257*\334\32\325\204;c\272\20\233MQ\201\f}\340\330\61\250\323KF\f\210v;*\332\23O\205\260\330\71.\213\203L\351d\217\353(Pq\244N\20\347\33D1^\317\305\31,UM\201\315\200\312\222\320\302\272D\325f\244\240\325\270(I\347\253\220t\271Z\221&lG\241\266f\333\354\236\234\305\345\346\245\250U\220\242\66Q\212VIR\264\232\223\356\265B\302:e\211=\256H\313!\222v\351\235I=1\221\242\30\60\207\245\17\233\62tg]\316b\265\213~\253\24\264C\261\215\217x\22r\305h\342>,}>\212\260u\4|\222i7\0\307\343-\6r\311#\214{E\377\244\24\234\340p\235\35\343\246)\204\235\352\224\214\333\206\25\334\321\245\342\256n\r\367\366\350\270\277\327\210'\203\207\254y|\276\276\266Twx\26\276\325.\340E\227\210c'$~\340$i\t" - "\274\34B\370\335a\31'<\n\374o\204\21\326\23\243\207V\350\356\274l\351\262\34\345\341\222]\30\367\210~\227\24t\223\373\262\267\n\311\203\66Y\16W+\362\264U\225\243\65\332\212GO\330ST\r\271\17\261\376\312\1\371\376\276O\220_\177Y\224?\362JJ\275\217cG\261r\222\206DN\313J\357\260\242\204\34\244\70\312U\217\256\214\203\t\246hb\272\240L\217|\275\270D\225\223&\364\f\n\312\203ZQy\267FR>\253\343T;\203\325\23CH\355\b\312\352\200UQ/@\37\204\64\365Z\217\256Nug\324%\222\224\346\212\60\213\263\230e\20\337\351V\324\7\17U\365\365GF\340\5\365\371\303G&U\212\220\33Z-)'\24\251\261\362\241\v\206\35L\233\324\232e\312\200\300\264\273\251\362\31/\326\334>\244\235\2\230U\1N\275F;C\36\354\366\234\305\351*\26\3\340\345\224\202.N\33`\260\66\372\213\vi\327\177t*\344\37\225|k\270\1~\2\251E\242E&0qhT\326f\272R\324PR\273\327\205i\246\316\304m\323\244h\217G\212\17\373\266\23\321\201\26\263S\322\347!\244\275\305@\266g!\333s:?\320]\316\370\354\\\305d\32\237s\200\3\355\31u" - "\226:jo ,Q\373\350\212\244\333\256r\361Y\254S\vH?\306\224Z\\o\17\351\372P\247q\373W-m\22\27\326/\f\243\67C@%\355\212~\263I\325ouj\372\302I]_r\246\250\263\4\210\277\216J\217\331\4\375\255\32Q\377\240\232c\3\204\310\323\325\65\252~\263ZK7\333\364\264\7\310\327\6\265\317\247\333\254\226B\272\257\321\2\221\35?\223\263\264w\374\201\277Yo\t*_O;*R+\373\4\307\377\227@\351\213O\345\364\65RQ\5\370\320\34U\nXV\301\62\240\213\330\254\214-\240C\366\270\234\236\241\241\2P\365S\6\313\36\311gz\321#\244\357\265\213\351G\35R\372\265c\34H\35\221<\222!\220,\5$K\5\311\322@\262\364\364;5)\312\223\234\267g\0eD\254\n\351\347u\rM9KxL\364\207\245\340\30\311.\334+z\26\6\317\306\64\260\246\203\65\360\220\247\273\362\351\225A\vt\247\335Qf\30\307!\303\304\355\70C{\344L\7\243d\372\255jf\30\362Z\235\234w \272\311\274\71G\313\242a20\214\224\22NZ\311A\227\245\231\66\244\231c\303\0f\32e\302\16\71s\325\253d&\342j&\276\254g\276\f$\347\207\234]=\256\356\336\332l\266%l\341/\205" - "\341\260aM\240\247\211\362x\300\334\330\17\360\304\254/(d\373Cb\366|\263\224\235\360s\331\333\f\316\276\352DIj\201 T\311~\326\242\262\307\265\\\v\255g\302\236\22\335\272\1\250\221P\21\250&\262\370\0\247/\336\7+\261\24\365\325Y\231\236vT\244\346\204\35\257xJL\\\205\314a\20\201\341\201A\b\364&\347m/O\f\246M\222\33\372\231A\302\235\210\234;\377\23\243\344n~\265\250\302?KZ\326\27\325s\261P\211\262\3&\360\34\305\271\67G\264\334\273\203\245\22\r\231\272Ud\345\237\227\344\334'v%o\377\221Q\363\364/\f\330o\250L\343^\302*\360q\323\237\364E\276\303\252\346\373\253J\254\373\255\t\355\346\231\23\70?\325\214\362\261\16\71\377\204R\v6\7\351\71\310!\244\305u:gi\273\311_r\t\343\247E\177\233\24\274I\322\222\244hT\240\335r\241\303\252\24\2Uj\341\202M+\\\255\326\vS\320\32\326\f\20A\341\256=d\346\33f\t\355t\25s\362\265\7\330\263Ht\225SXx:\202\v\37\215\242Uk\270L\355f\204\216W\355\6\324\355\b\240\236\263x}\374\352\211Za\325W/\256v\325I0gro\206\360j\177-Z\35\265" - "\225\333\32\246\34M\212\36\266\265\325@%\370\302\306\312I\217\225\222>\17t\276\200V'n\227\\\231v\225\tl5\322%\254\276\325'\256~\344\227\326\352\317rk\356'x\355T\b\255t\310k\35=\312\332\5\253\272v\263J[\233\267\351k\261\352\314\332\362\367-09\202\225#\241j\254\334\1\61\274\366\71\224:FPM\346\342\303\7\256[\23\302zs\231\63\31\264~\334G\252\276\336\337\243\256\7z\264\365\363/\364D\"Eu%\347\273\240\365\v\353\227\375\335\246\231[\217\24u\4\342Bt\27\341&\17Q\234?p7\264\31;\214V<\362\372\203@\251\333\b;\233\220\323\b\200\24d\366\61)\35\376\265\234\254?\216\v\353\317\226\17q\277\376\345\210\274\341\f\27w\203\215\236C:\23\1D\33\301\252\352\302\306e[M\223\231Nh\356\247\372\306+]e\6\314o\334\357\262\230i\5\336x>\202\66>\363*\351\231*\225L#V\207\211\337x\263\36H\242-d\330\65F\323\323mE\326\331\244\317\212\233\355\255\322f\200\"&7o\\@\233\323\63\362\346\35\247\262\271|J\335|\326\251m\256\204t\230\67A$\f\236tF\242\256\305\245\262\326T\7k\272k\207\353z" - "\270\255\306v\274\345=\203\266^\362\25w\264\255+\214\272u+\244\255D\365D\244\304\220\337\272\235}\275.\177\277\211\253\243\230\35A[\267\303\206\254\221+\225y\224\350_L\337z\243\237\0b\353}{\303\237N\36\265\71\313\314\274\350\237\221\202\363\20$\221-\323\231m\6\343\246\371R\376\277\375\325\330e\302t7\345\355\272)e\333\303\250\333\203\207\367\0\32M\207S\16\231{\1\331\21@6\334\370\32\256|\rw<0\337\34\r\r\306lC\36Qy\352\22\7)\"\333\260p*\333\67N\252\333\367[\264\355\27n}\247\216.\302p\272\321d\270\207\60\213\255r\221\62\303\17^\36E;\356\21y\347LH\221\330\260\212\333\306t\370\336pM\243\247K2\362\313\302B\351\352\217\vR\360\227\5\216\275\r\22;\247\354\364\276\252\356\4\342\260\216\315\352;\341\345\314\316\365\307\305\313~B\202;\323\246\263*\203w^kQw\236\220\265\277\264B\336\317Y\36>*\326\370\276\350\177(\5\37q;\37\261x\347\213\230\272[\377\240x\216!\221\372\200\7\333I\244d\23\367J\301v\216=#\27\301\217\351\256F\23\65*\327\305^i\227\347\330a\274" - "\333\302\224\233\256\336\344\20\34\60\1M\214\20\325\256\257J\205\277E\322\265\201\63&m;\6\263\224\266;\20\60d\f\321&\222\267;v\f\357.\272\321\356\353'\344\335\217;\312\322\356\250\354\\X\343\7l:\311C#<:\277g\253\266\230OXen\204\377`\23yy\206\350\n\267w\232\214\207&:\2m_9\271\322\347S\30['\f\377\34dh\374\3\313\356u/\343\275\376\70\332;\327\242\355]?\"!\23\n`\224\275W\354\352\336\35\207\221!\300\221\335\321TYJ\30\62H\301\306{WO\260\245\261`\332Y6\v\23\256\0\356\213\60\345J\20!\301\335\336\362\217Q\264\227\370\61\"\247\316u+{+?2\32\4\254C\300\231}\273\261\312\f\250t\327\341\252\322\326P\237\263\324\326\361\227\32\204\361z\321_+\5\353\270x\3f\33\321\276\213l\332\265z\242.E\371\241\315d\272'\277\177\252\327R\330\37\260\230\300\20\246\4H\361\341\213.\323\1k\377\362H\21\316\243\6\26Mg\16\0\34\31\251\367'\215\367D\315\210\366\34\61\362pMK\355d\335\4\267?\307\340\375\373!\264~\276Y\336\177\342\6F\366\2#{\312\214\\Z\361\233\216\271\350\343\4\366^@\26" - "]D\226\267\210,B1\334\237-6\373\37?U\340\257\312>IQ\377O~3\333\354bg\201\bl\f\2[2\220F\250\\\310Q\277a\342\60(\232ot\214\304\241\272\300ooY\203\277M\33\310\337\236\233gC\273MT\310\320J\204\254\365t\250C\307\204\216+\331\320X\3\27\362\37\340C\217\16\303\22s`" - "\347\177@\212\230\17\275p8\276\f\357Q(uR)\262\331\345R\4\tZ\4qa\243\225\r;\232\271pO=\37\366\201W\31g\5\323T\365\252`\343\337\200\24\374{\225>u\217\234\242\273\345\262\214\252\231\220\307\302c\275\f\364\251,\364\251\220u:d@\201\350\34\344\360\v\337\372\335\303\301P>\374\300-\357v\254\372\350\360_}T\370\375\1\"\242\70NOc\25&\244G\217\356l\211\310>%\35\261\250\330H\233Z\30\314\335\62\243\321&@\241\362E\211\255\375vD\21\361\264\6\"\203\216`\344\362\31\62r\371\254\360\342\221\211.\231=a\200\330\224I\322\310\303\62\7+41\221\17\16X\300\203PX&\252\363RQ\213\217\6\253\61\360\65\v_K/\351\256\16\61\246q84\260+&\312d\252\32\301r\200\371\60\b\256\314[\20]\31\277\34^r\r\250\276\262\6\316\16\204I\203T\250p\306tP\213\266\252\70\b\26\214\266\272\305\212\206J&\321\243J6\352\225\n\264\273\26\5\225\243#\302\202N&z\341\n\33\275q\235\213\336;\f\307\64J7\241'\340\221\b\330\20\20\36\207\220\355\241\177\321\264\61\321\307\35l\364y\273\230z\266\v\33\321\317\f\201\5" - "\325\341\340\302\301Zr\241\307*LY\30\320B!\273D/\370[\231\205\251{\354\302\223)nQ5\301/6\334zYc\25\230\31\360\310\371\305v\207\371\313\305\261\301\241\255\2\7\324q\0h\343 \320\307$P\307\2\363\261\70\363\37/\261\70\363?/\275\370\242\350\377\343r\330\234\220<\27?o\357\374riO\207B\217\206\341\364R-\316\202=+\221c\20\254\253C\331\r\274\373\227\17qz\311b\222\261\n\212[\275\4\320\275\f\374\240\274\332\35\301v\273\200\343\226N\365\63K\347\334,\374\205\247@,\325VG\376\63\324\344}\241\356\vr\t\263t\351\36\273tk\212[z8\301/\275\200\363\271\341\226\272\201\301\330&#,\253U\201\345\372]\301\345Cjr\271w\267\240\227,\17\332\210\345\261\214\245\34.\275B\270,\277\355\345\227A\267Y~\252\254\220\216\327\257\212\361b@U\341\345\217\61\32\62\5\263\242q\262+F\27\267\322rDJ\301z\21\326\242\246\255\270=\"\\\351\21\273S\264AW\334\275\"\35\272r\2\227n\1M\35\256\214\366S+\327`\312\275|\277\34]\370~\304\v\210\324\242q\313\217V\36\265\6 \377\7W\236[\311UM\255\224{\210U" - "\233\217\6J\237Y\355\326\261\253X?\267:\336\314\257N\230\312\306Y\235\304\362\n\363\227kj\305\21\r\332\211*\240\332\260CG\4M\254\224\270\326jl\302M\254\231{\371\265f\273\70\267E\274\200\252\7\241\327\216\326\210\370\304Y_\311\"k\247\256\4\326N]\17\256\371/\223k\376k\263k\177\307\251\351\36b]\331-n\260\256\305X\240^\270u\327\30\277\356\32\25S\301\256\71\b\243\371\365\343~\317\227\353\376\33\67\365r`\377\221\351\205\245\304d#\37\312=\377j\337\321c_\276\302\235yE\333V\204\277\272m\b\374\354\262\4\177\356\64\221\257\376T'\310\215\304\253g\30\35S\340 5zAj\364q1\255\215\217\231\306\346\340g\25\66s>\326\244\300E\344i@g\323j0\205@rH^Zl\334\277\202cj`\7\204\37cT\f7\20\61\257\231\216\235jebCN6v\301U\351\2\367#`\272\4\270u;\364\361K\265\202\373:a \4e;\3_j\220dv\277TK`\317J\350\302\250\330\204)\20{`\17\306\236\333\310\270\252a6^\333H\305\17Z\210\270]O\307[k\231x'\316N\36\0k\266\200\65[e\372\262\16\"\327x\370\313\270Wq\266\262\226\354t\362\236q\200\306q" - "`t\342p1\220\0\230\204\302\303&v\343\\\242\356\f\377\354wY?K4\265\317'\216\71]_&\306\332:j%=oxD\326\363\206\311\276\221\331\311\301*(\225\2r\216\0\21\230~\3\251V\257\71\211\317\61*\251\31 \222F\37\235\264\367\61\311\216A6\211\375k\4\352\367q>y\32\227\353\67\342\216)\235\207\242\366V\2\255\7)\335@\326$?\275E'/M\310Z\231\220S\240jJjY\371\345F\307\345y\243d\337\370lrb\214J\276\323J\300H1\200dD\225|r\206O>9+\321\223s\246.\3\nP%?\261\21\251\335\300\61\f*\231\224I\5t\201\232\373\321\273\213O9vC\262\256Ge\310T;F\244\206\334tj\334\311\244nz\4\204\234\272\337\313\303\217\305K6\nT{\352!\360&\251\17\7\207\252\247\320\215\375\30\65\355'6\16\342\364\6\350\203\33\355g\330\215\1\341\215\301\247e\25\312\223\337\356\30y\230\227\7[Y@\213\62\23\33\343\6:\376\254\235\331\270\325\"l\277\361\270\354\24\274\310'9\232\202\355\16\262\257\tx\31=\263\361\274\t`\220\354k^\37\200iW \255\70\23Lk\332\311\264\255ov\372\n\224\234\353D\272\v\23\255\230>\255\22\226L\17" - "\357\345\323\267\366\315\245\247\266*\316\345k;\310\\\317\32\250\317lD\372!N\203\230\301\244\237:\331\364'.\356\63\33\377\254\242@\270u\302,i<4\211DF=\3\71\300_\271\270\214\336\301g\34:\251\374\374\323\204\357H\234\31\367\241\22\6\224z}\365gN\271\210s\231\316n>\343\351\24\27;\t\222\344\326\231\62\303\r\201\314\250#\230\31o&3\27\314\302\205C\f\21\20C4\304\20\3\61\304B\337\316A\317\316\3\323]>Z\346\222S\213\316\315\177\223\243\260\222NQ]xe\0\322\371\62\223\207\211\314C/\235\371\253\222\311|\256b\263\215j.;\260\213\317^\331\275%\364doy\277\363+\276\314\376\305\244\70\200\350\216\345\235\266\303\277\234\332\24\200\n\24\314\325]%sM\227fs\335\30\225\363\70\210\334\351z:w\316\315\344.:\331\334\304\21.7\345\342s\217\332\312\1\6g\233\317=\233\231\376\62o1\366\356\0\205\211|\177?\235?\213\227\351\30\324\355\21\207|\264Lw\b\30\4\221\63J\262\336\353\243\363\347K\30\223\177\373?%\214\315\277\363\277\22&W\7\243\246\352\207\34\362\177\25\n:$\344C\2h\246\4" - "A\t\255q\20\205=\270Dx\0\213\262\37}k\202!\21\217/\211\217\215\365\25\304X\320;\3\205\203G\202\205\326\66\262\320\343\232-\f(\251\302\230\212(L\214\213\200\255\360\350![xr\237+|d\342\177\332\327\60WT\34,\207`QW\323\362e\261\311\332\250C\360\252B?[\364\354f\213CR+q\220BA=\30\311\275\274\fU\215\300%\36\32\21\62^aI\340_'\275|q\262M&\262\360\252\66\243\201\16\206\354\233\202\241\217$\t)Y\3+\327\277!\253\3\230\303\202\305'\203d\361\311\220\fw\205\346\220\301F\200oP\311\315a\361\323\3s\344\247\247\313\7/\355*\347\36\375\266\344\b-\346\64Y2\316\b\323\305:\ty\\\232\16Tq[9\330\200M\337\t&\373\250\322!\\\256\71\\\251{\202/\365\337\252\b[\360A\5\257\7\224\330\300\210\247\"\355\6\221\246\302\351\322\231:\246t\321\314\225\256Y\371\322M\223\34c(\230\342\7s\"C\241t\267\1\64m\33h\332v\311\201\200R\260\331\365\250\236\264\4\371\264\364q\6\350{\\\227\275\bT+\\\276P\341kP\30hs\257\240k\366\63\233Z%\273iUq\233N5\277\331\327%\343\363ch\365\324Gl\216\342\364" - "\346\224\245\322L\355\244\264n\376\31\243\67\337\367JGe \236\245\23\330\35\362\t\304\6Kr\335\327j5\373Z\277\213{m\335\r\372\311\36\351\24\24\64\330\342g\345\2#\270\210Wa\340K\205\6\240\252\221\213)\352y\21\246\202\257\377\237q\253zh#\353\342\321Zp\302@\215\6\211`i\3\63\70\324\335\335\25\253\273kf\333d\274\22\272\276o\353\373\274\276\v\4\217\373\37\264g$R\271|\337C\334\357\234s\356\317\262XL?I8\265\b\321\35\354H\255\232\33\301\65\374\310F\255\60rP\226\354\376.\244\261\277\227d\201Pv\34\216\f4\270F\356\330\335\243\v\353\250\321\372\1\347(^A\217n*$G\17b\314h_=\313\342\270\24\211k\334%\334T\212\343\325\350\335\357;=c\25\200\312\306\272\255\266\242\314\360\35;S\357z\321\330\340\36\273RG\215=\264\301\0\26\365l\257\252\221\365\32,\234\267\322\312{\35}\202\327\321/\231\210\16:\333\65{\367eA\0\30\34\373\234\336ugh\357\t\214\364\302\302\276\354\251\226\233&+\322Q\217\225\r[\21\345\344\r{\353&I\372\362>\254r\215\227\66\213sv\274\222 \307W\231\231\361" - "\36\v\v\327\305P\23u\t\360\345\332t\231\33\377\227\220\65\276\225\240\307\217\64\63\364~s\216\232%\307\23\315\357\313B\343}\v`\350i`\350\351`\350\315s\216_k\246\307\237\30\310\t\303qfby)\373\326\320\"\366.\267\16\27~v\20\257&l\253\224_1A\224UJ\277\2M\30\361w6\314\211\65f\327\304\21\253{\342\262\205\232\324\331\234\223\305e\364\344\362:\322e\255\201H]=;i+\224\263h}\302\315\376W\223]J\311{&\267\64\325\rO\236)h(A3\34\261H'\37\30e\202#\213\65\344\224A\317\301bM\325\250\265\303S[5:T\206\21\272\355*3u\v\223\64#\343\334\321\255\64%B\vW\323*\202\231\66\64\347R-\26\313\331\313\247\313\t\327\264\335\342\236\356\65S\323{\255\316\351\263\225\364\214\246\214\234\251\306\230\231n\23;\263\355\63\214\233\71\276\202\237\271Z.\314dCy\16\317\254\326V?<\333Q\247R\332\250\274\"\335F\345TK\205hl\314\356\266\210\v\361\345\220\226\233=\245\341g/\324\n\263\367u\322r\330i\fA\244\350\371\4\355\323\343\31~Z\214\260l:hZ\335E\362g\377\301\301\315\376\v\377\210J$\177O" - "\204.\337F\177j\334L\372*j\31_\325\26\356\324V\336W\337!\370\332\272\62\222\346\216\71d\275\64#\204/\b\327\220\30\314\267^\206\312\276mf\356\233F\v\357;b\25^\356\264\311\255K\372\316\64\275\362\365\331=\276!\320\261|W\352\33\21\230h\37d3@\226Z\313\374\264~\17G.#\220s\324\335\204\223\276[\204\344\262\372aZC\n\4DjZ\22\251\221(\261\235\364\33\253Y\177\225\232\363\327kx\277CL\216\351\322\303\335\354\361w\232\255\303\376\3\252:\4\22U\234\t\31\37~\354\31\376~\202\366\337\336M\372\237\356\22k\1.8\270)B\n\341\237\35y\351X\333NO`~\251q8\260\2\63A\373\32\60\210\26\312\313\216I\321Bc\26R\211^U:\17\30;ZH\240\251\376k\262=\201\210<$\16\21i\216\206\226\370y\243\222\246\374?\326\303N\346\316\332\304@\275+q\275\321\235TY\251dA\203\62o\223KmL\322V\7\362o;\310\277\235\357\256\6\212\201\264\212\307\343\255\241\235\371\245\tc\223+\363\271dg3\237\334\244|3\1\364\35\204\213\5O@\354\250\307i\5?\25\222RL\2\253Aj\272\337=i#\223\203\35r\325\"\237\225\274\214\247\213\302a@t\33\3\325\255t\227\330\267\212\20[S\233\326\34j\250\226Zq\321\223\67*\0\202b\0\331\65l\362\251\344\253\247\364:!U\256}\5\67\225\21\266h\216,\203\324\365\16\204o\265\24\270wYzt\210T[\21;NU\212\35\24\275a\342R\325\20\202\304\240\203\346\370\223H\227\264z\337w\311\34\37\61\350q1#I\246V:`\250\311\277\234`\221DSF\315)\34c\177\356\226`\267R\33J\365\315a\361I\b" - "\vLN\16\314N\305`z\307KHu\326\272 PO\361G\v\234}gD,\225\332\234\16\17\271\341\242\b5\260~i:D\246\16\24\60\251\276\332\377\370\270\n\340\66\262\63,\263\255XFy\315\262\222\63\333!Qd\b3333\323Q`;]-7\240\316\r\367\206\271\f\327v\30;L\27\61\63%\31f\352\277o\245\225r\267O\3A\303\303\377}\377\7V\314\342\250\214\217r\200~?\334]\245\301\223X\360M\276\267r\256\276\35\274kJz\362\233$O\212\354F\1\252\244\24\302\321W\344R\350\243\212\357\3\205{`\0`c\203\346O\352v\340O\"}T\213>o\212\5^\36\372\343r'\252N\362\60\65V\300\b\277\267\2a\356\224\230\v\276\33\250\v^\217\22# Z\252R^\227\341hTp\242\314\220\271xs\241\205e]\v0\243]@c\333*/.E\350\261\274\230\353\260\rqb\377\36\1\213\330{\327\311\205\277\366hp2$\353\272\66\306\271\276\236\342\335M\323\202\273sFt\33f\213\207\235!pz8\1%\252W%\237\345\236\332O\271\315\207\344\3\2\330Y\16d\374n\255\266h\32\221\366\375\v\266i\224\372\207a\37\204\321\366B\30\355\0\70\271\31\367\372\36\322\275\317\312\272\317\230\300!\250" - "\260M\356\373#`\20\224o\341\222r\240\3k-r\203\265\310\215\254E%\261\30\37\\+\23\177\236\226\215\224g\351\6\207\307\276\205\366\354\337\374\372\321\71\346\305i0@\235`=W%K\352I\250\236\347\205\27\247\301\243S~K<\17\267muz\207\306\306\313\70\334\273\\Gy\327\351\35\336\255m\264\367p\377k\357\r#\343}E\220\276\236.\326\67\333\307\371\26Q;\357;\274A\364\35\336\370\306w\36Y\364|O\7\336\373\273.\215:\375\266\236\326*\355'\347\337\257/B\377V\325\323\204>\212\367\237\33S2F8B\214\361\337\261\221\376o\354l@k\22\24\327\n4: R\330m\216);m\266\1$C\222\372\36\34f&\225N\244\264\265k~BA-\23\25 \232\350\200q\337\353\313\363\240\212\330\311\300\214,\325\322k`c\347\20\17\30\230k~\3\6\245\"\247\361\343\313:\240\22\225\315\305\f\232\320\27\303:r\247\216#F\231\300\266\17\363d`\367\317\363l\340\210k\236\v\234t\27}\363\374\27\255\31\300)\n\240\224\3 \25\rpJ\372\16\201\213Ka\240\335\252\26\262%\222v\33\270\326\62\352\f|\253\35\251\222\71(\205\363\320.\230\301K[\305TYlM" - "\361\202)\33l\220*l\371\214A\310\220\nvu:\202\306et\320\324\373:\270\301\312\4\267\330\311\340\61\33\313\r\230\271\340\365y>\370lA\b5\36\26C\372c\345\363\32\62\232.9Cs\303\26\254\213\32\331gl%\373\f\374\246^;B\27\254L\350\5dB\302=\37\320|\303\263?\353\371\360:\267^x$\225Z\221\300z\177\20\242B\342\6nMXx\1\320\230uP\205:1\246Z\325\375Y\215\364S\242B:\305\372 \303\307LB\370J\233\370\317\31B)f\270:YB\271B\370\321\224\370\277\375\323\350\23&\231\177\316\214A\356\264\31\17\322\264X\5\234\220\357fk\25\24\310E\264Fed\25\205\63\322\271\221\212\214lp\200\227\213\216\314\30_G\326X\300Nh #\233d[J\5Q\17\234\243\22u\255\264\245\264V\211DF\216\33ZN#\303\b\326kJ\322Wll\344\322h\211B_\321\246Z`\341\236F\356\16rR89\362\242_\370\241\357\337\203@\215\0j\305'\336\30\335=x?\357\303\201*\315\34Gq0M\300E\351\26\310h\333N6:\260\235\217\216\255\24\242\253\307\304\350\372\211b!\213n\237|\23=>\376>z\23\250\236\350w\323\263\270\32V\242\364\260\300\213\71\67\247\200\242" - "jJ\"\23\323\335'/\177\276\257\230\324pq\r.\246\277_\326\370\312m1^\212@\254\4\256<\200\252Q\t\335\220C\7S\256\377{\335\216\354O\302\336\t>\326O\b\261\211\31\305\261\270B\262\222\304\326ik\235\261}5uX\r\360\207\63vP\302,\225v\245\352m\n\252m\255\270\226\31p\200\234R\250\203\302\0\20K}\226\261\353V&\366\260\235\214=\355\206\63>\304\305^\302\230\211\256\375\207\312W\26j\1\5u\300\1\365\200\206\262.\25\245xs\r\37\357\250\23\342C\rb|\242\5\276\1t\250\345\250\"F\275\64I\342%\210\241\20t\213\257\202\240\333_\367\376M\201\306\377\374\352\r1Vq\31\243\353\307\35q[\263\344M\213\257\237@\350%\276s\222cO\35,=r\361cM\322#G\305\317\327\322\222w\1<\f\277\211_n,\343\30u\5\20\354\67\\\374\216Q\21\324aG\365\303\262CV\17\21\64\331!+\255\37(v\320\272\214\261\361o\307\221\306\6\300I\0\257\204\370\337\22\4@\276\275D\355*\r|\211\266>\240\214\373\177\273\256\215\332\326\207(\343~\231[\3\22i\36\311\233\211\301>>1\332&$f\b1a\37\226\277}\371\200\376B-Ll\351r$\16o" - "\244\23\27\66\224\324\302\304m+\233xb\256,B\211\357\232\336$\233\177\345T\250\32?\201C<\240\272\60BR\327.\376aI7\372\250\21X\230\16\31\6m\336R\177\244\341h\343\341&tF/\313?\325 \331e\344\223\206y\331\350 \325\4X\ngrv\303F\365C\226\334A0\311}\275$\374\316%/\312\272.o@Yo\254\242\v\217\67\260\352\35\252\27=y\347\36\223|p\237L>\373\374\230Mi>?\342SKJ\325\201\253\224p\360\357\204Q^\n\325\361\262)}\247\220\32\357\20S\363\355\312\71q\246\366i\332\260\336\346\324U\33\227\256\37\343\323\355\255B\272\257[L/\225;\n3z\216\361\263\4\332X\272\236\60\22\365\312\222\236\336\313\244\315\7\330\64\210\27\351\235\6>}b\247\220\276\252\25\377\264\245\355M\372[\344\335\227\220S\246\261\251\305\231Y\332l\257\26\61\311,\352\345#\200Y\25\273R\345\324\277J\346\260Un\253'\20\62\255\274\255\231K\275T\346\226\321\221y\242\243\341\212J,B\346e\33\231m\350d\263m\35 s\355,\235\331l\177\363\233\354\262_=\234\235x6\322Bf\227\217\261\331-\343\\\366\354i>{\366\222\220\275tY\314" - ">\271\242\240/\f\225i@\325\275\262G\317\65\366Q9]\257#G\f\323\271\311\66Dk\21\\n\241\207\317m5\n/\210\222k\347\337r\322,w`LSU\261\222\361\326\36\\X\2jo-\227\273^\303\347\236\326\t\271\27\365b\276\241A\t>9\363:l.\305Z\251C\250 \n\324C\235 \177\324\354\4T\332\16\313k@$\303\211/Z\250\374\62\r\361\213\200?\225_\264\70\362{7\323\1\355\26)<\231?\273\bE\177\25\227\277e\225\366'\377lA\261\17\300\326\24\25\310r\2\265\320\70J\25\214_9\n\213\6\272\260\335\362\272pq\220)\334\66\222\205o[\331\217\335\335\\@{E\32G~\357e\361\343\274\351\r\212T\243m\376\270\267\263\307\371\361\336\216\355\235\30\36G\302G\237\372u\354\247\325\253\271O\377'\345*\302\324\350\262(\355\256H\264\275qZ\350\246\bC\23wwww\243\347\377\343I\275$4\245\261q\237Y\376\233q\237\336o\263\232\325\354\227\301\35\32\346\276*\n:\337\307\213.h\3^S\257\356\273r\356\71w\265\206\177w`\201\360nZ'\6\232\6`\37^\202\274 `\356\327}\220<\353\350,\303\17\201\225\3\276\300\216a:p\fTq\232\35(pn;\7?\363" - "\360\263\20\270\275[\f\266\356\221\272\fF\254\1\r\32\215\216\37\4\335f<\223c\341\340kUO\373\363\25\v}\33\6g\314=\376\311v\254?\f\36\323\242\340\345~\340\67vp\301\373\253\340\32\25\262\r\4\200P\243\373w\365*\330)\254I\251,\215\364?\354\205\366^\37\264\367\260y\261D\261Q\250\27h\227R\32\241\360\200He\230\7z \24\202\7\7\17\376\204G\256\241X\251!l\261A\363\331\5YT\213/d\325B\26\245\206,J\203K\267\20E!(\360\346O\311\t\355(\346\370\300\71\370+\327\216\355&th@\365\203\320\365ZU3\t\t\371\316\216\221\20b]\25\272/\33/\261\fa\302MN\24V+\314]\242\32\362W\7u\350W[\265\34>r\250\27\332\344\207E\357\311\227\221\353+0\256\6\67\254\1D\352\262<\275\207\216\334\363`\316\217\\\277\227c\177\264~\266\335\27\325\315.\204-_\0[\276\bo\325Y7d\0\36.j\232u\361?]7\353\206\303\361\23\217\370\277\346\331E\362\270\36" - "\366\275\64\265\363\3\324\335\250M.\363\25\25Dt\n\226\30\304\247+\272\371\354\271\226\262\361_r\310~s\220\205j\226\203\357\274\22\372}\20p\311\210\215\24J 7\200.\300\t\377\263f\7\3\254h\364L\325\307F\317\264s\321\233\333\371\230j\227\b\177\227\256[\242\234\234\250|\3b\335\207\231\330\222c(\246?\310\306\306\216\360\61\367\241g\235G\244\320\354\252\34\317\275^\346\321\64\264\27n\0\34\24\230\6<(\340\25\36aqy1\27fu\230\227\252\326\274V\265h\245I\1\232\31s\213\177R+\311\305)\220\213c\223\376\323\255\37Q<\376\242\350\306\353\261#\214\255\252{\23\333TU\367\203\330\376\352\332b\256\334\321\251\4\342\16\377\244$\262\216]\232@g=%\321=9\212~\257T8\226\343u\354\316\2\37\234'?4\236\260]T\350\335\343\351\0\322\24*@B0\t\31K\177\260\352\374\7\361\206\332zb\204\201\265>Zw\0X\337\213\342jI\322\25\357\323\363q\253A\210{\214\"\263\27\22\71}1\22\304\267\266\251\32\t\254R\310l\272Hx_\374\370M\24\277\202\211\211\24\27\377\276\221O\264\230\204\304\220^L\270\rJ\230" - "\321w(\35\335\371\63\275\350\23\315LbO?J\234v\260\211[\35\334w\27\227\362P\216\b?\271\255\26\23\367 \371\65\275IV\31\214\37\342\266\220d\30P\232\62P\242\"\346\332\62\16\36<<$\237\372O\315\17\222=vU\345kI\216\337`\222\236\233lr\243\205K\356\233\340\223\347\267\vXG\363\366\222\224\337%\247\261\253}\223\274k\265\225k\342Tw\177\235\265\336\322\60\242h\246\354\24\v\302B\222(\321`R\33\315\37\320u;\330TO?\227\262\235\345SS\347\300\277\270D\257[\261%\3\261$\364\237;'\244\66\217*\37\222\\\264\267\71\231\324!\n\245.\375\315\311\202\327\342\340\207\355\2N\22SO&\344w\333\371\264\246NL\367\67\274I\233\200\263\223^S]K&\260a\254\352o\373\331\267\266\277\355\373\30\335\315\rE\235\23\61U\222\67/j\356\240\245@\324\334\245\217\36E\351s\24\233\236\326\3}u7\220W\361\260\vrV\212\371z2\27\320\336\65\237Z\225i\32\361g\272G\351_Y\335L\246w\2e\212\376\61c\257V\350\220\277\271S\363\62\343\251*\215\223!W\205Et\267\230J\374\223\f\355r\216)6\263\261M\310l\235\24\225qSR" - "\245N\336J)\266V#]\25\201\373s\316\301\374\342\16\205\62{\rl\346\260\221\313\234\64\361\231\363&!s\325,fn[\344S\374&sg\347\236\362\373\177\274\317\342\313\326\331f\262mV\177V;\"q\"Z\0\63\314\366\376\227b\263\303z.;a\340\263+\215Bv\207I\314\36\307\222\67\314q\312^\35U\221\357\71\370\315\275\242\367\200\2?\20[\312p\325\325\22\273\363U\307\224\n\20\355e\317WLI\240\366\62\f\350e\357C\362b\360\351\b\206\212\273\356\340'\311]w\252\250\214\314\65\64\71~\220[\320\254j$aG9\275\263\262\311\0;Z&{\264\65\332\333+\227^\16L\333@\271\361_iY\360K\\\216\62\360\234C/)\21\310\304\350?x\235%\255\221t\26\313V\362\273\272V_n\225f&\267u\320\237\333\267\260H\365\310\235o\223\204\213\271;\24?\207I`u\260<\321R\346\324\24;\267\270_\356\370}\230\350C\261\177s\375\263\245\22G\b\306y\20\261OP\326\364b:\225\22TF[IR\34\260\247\342i\320\300+\211}\367R\rD\23\230I8\204U\200\223\351\71\275\64\220\21\275\247\305!D(\212&\345\313p-# !\325\203\204\324\240\224\351\316\212'\27\350" - "\63vn\316f\342\347\266\231\205\271k\26\61\337iU\336a'2]\362=S\212\207&JX\321\353K\32\371Ed.|~Xv+#e\206\356\374X)M\226\2e\326\"\330N\345\226*)\fx\216\177\3\357\313N\302;\261\323\222\211GE\274\323\375o)\225t\377\33\260\350\347\220q|2\325\205T\223\344\307`#\\\177\327\227\206\367h$_\324In\364\70>\246\276\312o *\346\367\61\b\n\213\374\221bhT\223u\25\20\240$\177/\241\340\371\v\6!\357u\210\205*c\271\376-4\230T?(h\315\252\362\340\275\202\245\312W\260\327\370\v\256j9\315\250\374\61\n+)\6\4\352\360|\265\341\203\355z\n\301\366\314o\331\27E\317\345l\255\260\301\354+\354\262\316\24\216X\374\205s6\272pC\317\24\236\30\20\242\273\214,\242\207L%\375!\242)J\304_\312W\0)\366\376\362\26 \332\375\225kIh@\205\5\21\275\343+W\254\260?\210>\256g\20}\1\257v\v\257v\177\342\223V+[\26B\255\35>\204\26\330g\20\322O\370\21\262ki\204\326P\fB\373\35\b\241\63:\26\241o\217VTTk\310\32\311\245\f\211\60\370#\215\v\340\2'\207\320C\275\200\236\66\233E\364Tc)\246O`\b\377g\354\272" - "\37\242:\332\65\305\206\224\225\266\213\260t\266\201l\342\272\v\b\326\24J\f\202\241hb>\22\3\351\tX\322\276|jx\324\335=\325U\260%\226\364\304\336!\n\366\336\275\275\376t\377\200\333{\277\357\231\263M\335\331\334\37Xp=3g\346\234\231w\336\362\274\317;\214\r%U\32\260\265\261Ew\30\67z\33[\202\16\343\336FZ\16\24\234w\313\364\243K\330\230\67\341C<\315\242\16\357\345\67Y.\321\217L?\241&\26=\251\70\223\207\344\301\206:\23M\344\231B\232\310\213\301t\32\21\33\226\26J\330\360\206Q\306\206\17\313\3\330\360\351\364!lLN\340\60\6\354\376\264\223\214\214.\221~K\364[\246\337\217\32\342\340\245\206\254n\25\326iL'4C\267\272\272\65d]\331\36\363u\377\311\200;L\234\213\215\331\271\2\66\226\350\356nl\234\61Z\"a\343\274\260\307[n\231\20\300\306\347\23\37\347\240\234\32O\375\362pY\361z<,\333\t\33[\335\"\314\63%\335\252\227\231\357\333@\260\335\262\362M\363\f\f\266[\346\237UN\243\323\300\322X[\22C\302\61\371\213\215}\23\23\206\261q\365$.2D\300\246\4\67\260\311H/b" - "\223\335B\320f\vA\233\255\312\360l\22]V\225\244\rw*E\324lN\27\65#\350\21\66\275\345f\374\245N\231x\215\370\216\32\355\320\257\227\217\255\16\236d\206G\203lE\335z\220-\247k\260\347o<\354\214\240\231\305\330P\"\27z\347\357\363D\316?\236\375\3lZ\245\315w\355\22\t\336\211\213ex\rmQZ\213\223\351\"f\3\321y\346\345\263'N\251\234y\376Y\371\203\233r\312\4x\363\213\1\257\243\210\355\252\61\247H\206@8$\1\357\\#]\361\242\1\360v\347\211\360\276ZL\267x?]\246\217\\2\263\236WW7\352\32m\226&e\340]WX6\f_\306\202\205Qr\320W\\\345\205\257\312\341\203\257v\206\377\17\327W\352\201b#\340\233k\21\341\353\260J\360\275e\223\341\353\267+\360}Z\246m\247\24\326\355\22\326\253?)-}\30\376\352\214\212L\356\271H\214\312\200\277\271B\204\277#\306\2J\24XG/\247$0\255\227\36v\26\321\301\25\24n\202\377m\265\323\v\377\300\316.\237\362\354\216\16\277R\267\253\33\360\377\326*B\230\34dP\341?x!\273\212\351I\20\212\34\62\204r\267&\17\254\332\4h\275\71)\322C\322\60\62h\357\322\331\336" - "\375\317\26\373 8<~\230\227\fB\250\245\r)\314\67\1BS\21\335\261\265D\372\253\364\327\345^\243\262\251\242]\305\264\240\361\26\340*\20\20:\335\212\320aS!\274l\17\347\371DV9\204w\262\65\t\7a\240\v\3533\36\266\6\322\304\61\227\f\251\314E\227\353q\353Ia\326\331pl\200\234\20\334X=\244\6\217\0\351e; \r,\27!OL\227 g\377\353\200\f9\377_\372\25\257\315\246B\266\6y\275\2\220\33\252\206 wXf\16C\376m_/\377h\320\302\240\352\264\340\271\240\30gQ\260\241\61t*@)\237\30\200\362t\342\343y\223\\c\27J]\35\306V\326\210\177\62@\353`\304\275\1\312|-M\217\213z" - "\352\365\0\312\242:\272\365KE\22\224\327\333\344\277\234\252-}\205\363@)\362\316\340\0P\326L\227\265\17\35\240\61\310\344{\266YW\37\310\221i\16\251\17\331\2\224u#\331\330\375\346\210Y\202:i\244H\206\232?R\314^D\272\310 4\251\214\f\354I|D\215\0\365\251}\243F@\255\33\315\25\241.\34M\225\376\251\276\216zX4J \234\32=1\230VN}\203\6Ac\271\235\272\315^\23\214\261\211\273\373\313Bt<\n\301\36Tf'\272\343\244\n\210j\267f\351\17F\323\273\201\276\363B\35\260\371\240~a\365cs\6y\317j4\350\67\71\274Dl\266\272%lvU\311\330\274\330\241`\363kv\25\233\177\67C_\232L\220\6\262+Mia\321\67/\213=\240\2r\272\353G\265\233B\36f\211~t\4s:]\331\314\256$c\300Kd\354\203$&K\4\245.\17\312\263F\221$'-\276@u\232\214@}\206\202@s\261\212\300+\24Q\342\322n\320\26].\322\17\65{/\221\232}F\2hK\"\t\240-S\265C\36<\327p\240\276K\350\211p\177DX\220\261%\307\352\305\226d\355\237L\351\213\302\16\n\346\f/\206rj|\344Q\362c\250\272ppw\216K\300\320\202T\354.5P\343\266bj\374!\213\264\352\71\247\1\177O(\325\33\303\311\26\373\60\206\363\255\66C\34*Z`\370\251\277\31\20\61\274\300*a\270\325.c\370u\207\372\235S\233\252b\254\216m\b`xM\314\254\265\275\317\232\365\214\65\225\275\342m\323\34qM\226\257\23j\304\336\272GS/g\362\b\301\5ls\325\3\333\346\325q\23\27z\212\230{h\317\224z9\30\252\177\361\327\200\361\330F\274\272\330\266\64Y\37\67mG^\266b\254J \354%\207<\21$n\"\256\247 \342\327\\\250#~\365\70\237t\263-G\301\266\25\vTl\v\362\252\224" - "\223\273\350W4\nl\373\202\343,\302\366\224\314\251SS'\352\261\321\310\300\261\335\264\330\213\355\345K|\330\376T\273\37\333\347\264\322\265-/\t\330\336\325\206]}\345\"\266\257\60H\330\336_,c\373\247\237(\330\61\301\243b\207\371\323\0vT\225\204\26\320\216\332\64\343\60v\264\344\232\262\271\354\312=\36rb\32A\230\1\21;z\314\22v|P c\307g\205\304\345\234\253b\347\304p\211\b\352pg\272\213l\231\235\323\27,\214\35\64\334\276\266\237^J\277\306hK\277\322\71\326A\253\360GO\265k\247\341\203`\216\216\207VM\nG@\350,X\\P\4\301B\351\260\356d\331\36\\\205i\247\253\206Ijgf<\372\247X\324O1h\237R\370<\"B|\257\277\216O\6\217\353wu\267\306\204\263\267\252C\304\316g\273\24\372#\344z\247]\245\207\262\370<0N:t\r\\\336\246\351\300\316\366vQ\373Pv\254\60\251;V\346\351\64e\364J\273f&\360\331\315<\22v\276\227!\23%\252B>\254\260J\313{\35\221\213x(.\5;?\241e\265k\262\266\254\70\207\316.\223\233\340\246\36`W9-\364]\366\n\212\352\65\313\330\365tC\230\320$;\304a\31\321\274S" - "\5Z\260\214\2\211\354O\t\273jz\251\311\63}l\31\257N\325[j\250\21\354ZDi\335\264\211\34NC\34h:\335\370#g\204\332\62\"/\370\31e$\273\n\224\261\267{\211\364\243\217\205Q\335\261\37,\276L*\26\360e\246\t\370\262\6\361\25\321\260\342\253\206jm\327\343\253V\v\265]a\223\361\325\200C\301W\353) 5\337\21Jh\246cgwZ\325XB\25\333mSbi~O\210\313\335%\271^\354~:\307\207\335\317e\370\261\373\25\306V\204\335\357\265\2\273\7\f\"\366$%JAJO\5{\f\23\324c\253\303,As\207\260\247\330U2\214=s\362\23\270$\267\330\323\222(c\17\235\35\330\263*Y\305\336D\35\5\237!h\202qo6\341\236\261\267\266r\6\27\200B\334\221\61\274(\\\250\330\352z\366N\366.\267h\t\320\22\366\366\333)\372\22\216\20+F\353d\215d;D\257]A\375\323KH$'" - "\322\344\210y\26\252\5\302\360\31\321\17l\357\307\26/\366%\330| \206!?\366\31\355z$s!\260\257\324D\326b\233\204}\263\363d\354{\241I\301\276\36\227\212}\253\234\1\"\4^\254WPH\35\302\327\246\342\234a|\335f\312\212\314`_j\245o\244\316\342\37\251\n%\256\377}J\263\370\367\331M\22\276Ik\221\361\215\261\361\321\334*G\272\216\265MM\vam\t\304\221\246\237\326\n\276)9c`\341\244\63\251B\220\357\231\357D\373\346\351\32\340\233\306\64\21\337,\263P\333\67{U|\263\252/\244\310\345pI1\31*\317J-\326\332\303\20\352T^\322\364\375I\21\274\307\324\230\225M\374}\271aD\37\7\243Q%\340\333$'\360mz5c\320\375=\343c\225^\334t\334F\260\323\361\370W\361\255\251\200\202B\314" - "\16\374O&\300\1w\255|\367\233r\340\273\367+Hd\333%\355\17Y\373\212Z)F\333\64\376\16\66\322h?\313\222\bI#\237\370]\211\202\357'\346\251\370>\303\250\7E\5\376\301\30\306Y\323\202\230\222\264\65a\302$\22\324\23\231\63\b\337\347X\374\370\336j\35\304\367\363\237\27\360\375\v\215\300\367\335\317\212\370\376\215gIbL&\211\221B\22#\221$\6)\271\225\301r]\370~\300f\347e\26\61\315\230\374@2\371\203\364|\6C8\263\347\361\3\302\277v\16!\21]\224@\231J\371\223\351\312?\325\27\251\377T_\22\261\364b\7\32)s\204\232\365\207.\213\346\310\t_\217\37\362\35^\"B\30\\\335/\b\37\f\200\252\203\210\370\241\354o\327H\370\201l\26\31?4\374m?\335\360o\376v\215\332\253\3\273,>\243\205\267\367$\212\37%\312\24?Jz\262\20\341\17\315\6\357\325\302\347}\370\241\367\204\313\217\37>+\31\324\274\277\204\344+\4~\234\224+\342GS\271\204\37\35i2~\234\343Q\360cs\243\212\37;\312\2\370\261g\232\356\16N\37\302\217\37-\\0\214\237&57M\343\346\314\b\223\7\200\237\212W\212\364\261Jy\320m\321\7N" - "\256\242\310\63\310\212\267c\177*\267R[\247]\302O\315\224\362\200\237:\250\270\317\231e#r\207z\346\215\21\271;\b\315\300O\257\331,\303\370\71\177\341\202\210\336JDE^\374\274\324\356\303\317+\254~\374\374\236#(g\361\363j\223H\0%\2#\271\t\214\344y\f\214\24\231\16\205\336\222\275\377\333\70\321\207\375\23&\370\377\367\225I\232|\300\376\f\217\250}H$\223V\313$\235\326(\332\323V\203O[[\7L\374\306\21\242\300~#ce\16K\\\256\221G\262}\254gR\b,\235\23\227\232\66\234 \315G\t\n\37\364\313\364\23\306\7\212<\351\201\375\5\36\232kEih\331\272\323\342\20\373\302\234\25!\373\60\304\224\365\330\357*\241\16g\227\322\344\27\344\321\23l\236.a\177{\276\214\375\313(\327\324\305Nj\27g~MBOKh~\266,\336\201\203\375\257\345\63G\354\376\67\23\251[\315\375t`r\262\212\3\306\t$v\202\233\17\7J\263\311\62;P\233\25\33\315C<\37\16U\355\326}\254\271\203F\17\265x1!\227Z\274j\257\346$\367\376M\204\364\366\21\62\221\314\362\255\t\371\346M\363\62\275\215\345>G\276\177\226y\260\247" - "\200\235\24\63\65\303Oy\331\1\243\223\225\351*b\303\370\303U\305^\34\370\250\304\207\203\251\351~\",.\37\364\332L\2\16\316p\0\7\237w\211\70\330Z#\365xd\252t\242\340\340\362>\25\7\337\350\r\340\340{\r\321)18\370Ek{\26\357\200\3>\351\207\327f\25q(\313&\341P\251E\301!\27uuhA\257\336\213\374\37\213\62\206ph)\1\335\264\22?|\222\333\272\260\266\314ei\305\241\336\34r\313\232\350n\253\v\351n\353\214\62\16O)Pp87\210\5\212\64\305a\333\231\f\37\16\327\332\374\70\274\204\351Y8\374~>$\267Kw\7\37^\373\222\214#\251m\n\216\344\323\206;RI\33\316\350\65\236\341{$)\211\30\70R\357\221p\244\261\203\332.\351V\250\227.\225z\321v\274\30\35\276\301\21\242\220\301\221wl>\34Yc\367\343\310z+\233\301\321\24'\343\214\304\321\352\361\266\60\357\37\216\316Y\252\342h\327\313L\6\221*~\364mGB:\277\224\1p\364sw\30\1E\370#>P\256F\302\261T\207\214cF\253\206BTq\314F.\252Ox\265\31\303\271\231M\301*\256![\207B\212\321\230?\34\253\61zo-\243'|\254\241\334\217c\213\322\364x\0\35\200" - "\264\236d\"\253\16\62U\273C\350\36\213\236\302\20yB\307:2\274\70\366\212\211\272x\273\202\272\370\70_\223\251\376\367\365\330\323\261/\322\242\210\361\351\333G\200UC8\236\351\260\16\343x\255\263\62\205\233d\225\274\1\307;92\211\252\302\nc+]\341E\227\316'\216\317\23p\374\255H`)B\254\305}|8\276\312M\\:\26\365\341*+K\204\225\247\201\313\30\346\226p|\355\2\31'\f\v\25\234(kVq\242.XjU\17e\237X\\?\226\62u\30'\336\323\22\33b\213NJ>\240\227E\311\273U*N\346U1l\205\205\357\334\251\23\242\25\256\307k\0\7S\26q\362\351d\352\64\202\61H\324\317\27=\270n\210\31\34\370\247\254\64B\234\33\tq\236J\210\363\\IYa\222\377>;]\301\311\206\27\350\t\252\374\65\247\23DY\210 \312\32\231|*\7\35\342\246\25\32VG\347r\211f\376\263\310\25Q\250\f\374\374\376'-D\217\20:z\271xo\234|\261\17\70\331\335+\341\344\353\211\62N\276\231D\323|7\231^\300\207\23\"'\330\20N\256\"\222+\234\\Wf\232\32\237\f\36\247Rf\246p\260_4\333\323\31\2\217/\247\207e\310\322Rcl\302\356(9t\252\330\342\305)" - "+\311\241S\325V?N\271uQx\252\241\25\70\325\334\316\354=\372\207\252\375#\254A\f\341T\7\255q\234ZQ\31\247TR\235.\36\300B\223\345\25:\325\f\30\22Q\vM\306\24H\334\"\233\323\6\343g\331\322hW\346\352\3\214t\214\323I\217\255\\\267\204\323)6\31\247\v\34\21\60\4?U>\fa\305i\347l\340\264\273V\304\351\331A\200\214&\364x\1\24j0\337M\r\332=\324\240\257\225\356\272n\246\254\375\223\232*\374v\304\214\367|\7FZ:\305\221&M\341\224\64a?b\350\350\36\306Hvg\302\264\70\363\337\377l\256\204\221B\213L\37V\205>l*}\330\365])\32\35\374\250$F\234&\1#\265y\300\310\202t\21#/dPO\235\6\352\351\65\212\206\232\66\264\37\235\251\360\31!\251\301\273A\367bt\345.v\33\214&/\217\370\274fS`\360\31`4m\271NhC\0\221Gh\251\333hX/1\265a4\177@\304h\271%\244.\367\373\214\36\322\67\332^\342E\237\364\264*]\36\216\326d\344\rc\364\375\234\252\354x\376\67\374\222\246\355m\226\63\201_\n,2~)\263*\370\305aS\361\313\323\372\203\323c\235\277\324:H\213\373\245\261\62a*?\371Q\333\241\374\222\24" - "\245t\273\256.x\227\226Pm\221oJ\351^k\334\264c\235\372~J\215g\350\273\365\242\215\6\256\245~f\n\275\257\63F\232\300\31m\2g\234\64\201\63\r4\201\202\340\372\316\342Ir\1g\232\232\200\63\335\315\f\\-\271\203U\260)\275\62-\340\253fz)\355>\215\343\64U\263\277\322\70|\37\233\347VSW\357V\321\315\7\264\233\257\267\7\331\225\231\266\26+\321\16g\323=\2\316\232*\311\307\343\220(\204\371XS\26\61\342\266\4\65\342xh\264)\217\277h\rD'\271\307\356\210\271W\343\367\24\240\236\242\374=\234\361TXi&N\v\353\212I<\22\f9\31\334\301Gf|vV\212\212\263\363\234a\36\346\254p#\234m\252\364\342l\247\335\207\263\257T\371qv\305\214\301\236j\272\317[N\272\217-\316\220\311W>\204\263\357[<\277:\2\233\366\314-\332\63\267\206G\20\256;J7_\353aG\301X\262]k c,[\307\246Tq\311p\30\5\225\256igsM\202\261\202>\21cey\22\306\234Z\257\317U*\30k\253R1\366\301\214\300\321EAJ\r`\354\263(\313\375W\252\23\306\345\377\213\370\245h\365f\224\206\323\377K\203\351\377\30OM\23\60nJ\5\306\211}\26\343" - "\32S\231\236+\317\311J\300x\255G\220\337\372\23\17\344W\377\220i&\332oY\373\206\71\253\242\"Z\177h\267x1\276\320\356\273R\310\34\3\266\240c@\370\300 \322\377I\364\265\254\375\177\224c\240\202\204N\354\252\363\201\372T\32\350\"\17\306z\222\264\273b|Y\242\274\327\232\304*o\357\255\232\20\222YtR\306\252&F\224\61\354\370u\351\71\226q\n\212D\270>8\232\2;\342\306\337\250\240Q\204i\26\34~v=?\222\261\351\255.\275c\221\347M\302\70\5\300q.\241&~\35k\n\210\353'N\261\246\25p\312:j\351\271V\5\347\246\6\321\5\374\322\201\70g\\Hw-\366H\332_\262\366\27\23\346|]\224\334\363\222\6\321\223\243\242O\26\236\376N];\32\201s3O7\212\70\67\337NwYd\241\201\365\22\200\244\225\321\61\331\206p\356\223\4'?\216x&c0^\256\23\316O\324k)\341|f\235\214\363\305\65\321|>\323\265\272\237\245\233p\336i\363\342|\35\211\224\363\317Y\374\70\337be\331h\302\344|\362PU\221\365W\255\n\346\31d\374\5\355\30\234owT\306\336x8\337?;\370T\331Z\345\227\242\303\303wF\r\324\277\205\306\266v4_" - "\306\205\324\321R\5\27\nGK\210\32a4K\307l\217\246\322\242\215\342\310\366\332\346x\337q\373\310\262\360\223e\301\246x\241\312E\b\331\64fBR\361\31\226F\317R\363\364\70\70.\314v\16\341B\213\216\315\260\331\262\343(\201}\304\20\370D\324'p\364\71[\b@N\310\3\221\220\7\217d\274x<\233\346i\24\357L\202J\17k\22\345/\337\326|p>\376\62\321\270G\245\177]\223*S*\267~ \246\342\221x\317\205\345\26/.\274=j\360\341\302GV?Mw\20\27SJ\4\\\314\62\260\230\334Es\266\204\213\216$\31\27\347%*\270\330\71A\305\305w\222\203\345\262\231rrq-\225\266\300\245\254\372\61\312-\346\n\335K\263\330\2\321\221Q\277\312j\270\250\223\22\227\273\302k(\346\365\272\227\344\322\274D\31\227Z\222\24\\\352$\21~\351\235\312P\334\233\377T\204\276\n\4\352\353\330x\370p\236pvS(\331\315\243\327<\310\214\363b\33\230\205\210K\237[\25\\\236bSq\331l\347V\24\312\212\223\265\352\201\220\65\356\21\5\263+\304b\246\220\311\257\222\271\37o\204[\237T\320\203\273\235m\340\70\70q{a\253\200\333M\f\252\204\344\60g\243e\nO\204\360};\313C\253?\346\302\277\275\264\214G*C\255n\277g\221q\373Ck\230\37\236\253\177\326\0\267Wz\350\342\317m\nU\273W\251\332}\230\350>J\232\335I\246\272\20\205\66\37\356\244X\375\270\223o\17\227\0\315\27\351{N:\373\264\250\16\34\255^\334\251_\314\216\313;M\263\230\204\216Y\236\200\341?qgIk\373\343\211\\w\326\71\274\270\233V\345\303\335\202J?\356V\316\320hUpw\266\207`a\323%\334m\241Y\337]fUp\367m\233\212\273\237\350\2q\272\276h\214\301\n\343\306H\205q!1_\300\275\211f\370\327\226\213\270\227\331Dp\347\2\331\273\264B\301=sP3#\257\37\317\247O\316\360:jf\365H\270W\373\33\31\367\32_\243\206\335KU\334\353\325\335p$Z\371O^\322\214\226\60\374\226\233\32\212{\253\334\277F\26\332 " - "\22\245\260\62Rg#\20\247=\22\202\301\275O\255\226G*\211\340\276\61\331K\37\23}\364\61\201H\226r\7q\277\310%\340\276\243\"\354\4\247\377\212H\253\373\256\311\217P\24\246\352t>\21\3\356qq\33\314\212\246\270>u4{\246\34\346\357\21\271\261\367\372`\300\231\207\2\335\276\326\5\334\177\301\"\302l\225~\316\264\311BG\245\302\212i\253\204\2\324\220\320\214s\324(\221\313Z\306\375.\v\r\273\337H\301\245`\242\1\347-T\213\204!0\207\312\257\350\310\232\354\270\325xjh\4n\231~+\270\277\252\232\356\262^c\317\225\310\254\r\20\4l\3\301\301\342\207\213\302]\341A\212f\307\310r{\361\240x\261\17\17f\265\373\361\340\305\227t\250\245\213\5~4'\b\36h\222\355\301*b\231J#\bU\204'|\b\17\326\225\32\206\361\320\321\332\306\21M\17\273\335\2\36\276U\3<\374\270N\304\303\317;e\374^\22)R\232\223\347\377\350\262\216\375\306q&\217G\301i\367\324?\216\344\311\67\5\313\356`[k\311\223n\220X\226\360\231\4\370\1\240\325\352\247\337\n dNw_\310B B\205\177\5\336\371W\320\237\340\71" - "U\217\366pLj\223LHjm\372\b\212\307\236\272j\351ON\225\211B\311\354t<\214\3\257\340\222\17g\265\351\300\274\340\227\311zW\346\351\367\tZ}\231t\375\331\264\326\345\356\225\17o\307\362\222\62\366\34\374\67\276S[:\314&\371\216\266\203\32\357\245g\316\266\206\66U\3\33\336\260\352\336\247\243u\207\352ry\274\236\236\360\363\212\237S~\376\250>\231\336\355\217zn\232\6\277R\177CTWK\375\207\205\23\257\247W\215\355\24/*\344\314\6\375\1\22\263\273\64d\323G\210}\213\307\354\273\0\61\352\253e\365v\361\367.\246\320\63\233\"\357\375\33?\177\340\347O\25=\177a\372g\246\177\25\301!\257N&\324\325\334\354_\360\242\252\\T\311\236k\273\177!)\337B\323\251\255?\34\32\320\263\224\f\366\336\371\32\364\344[\235S\26\321\6\32\330'\250\231\361ji\343\336\204\334(\2\220k\226\246\\\224\205\375:\210L\335\231\216T\v\27\337\366\301\351Y\360" - "\275\253\325\334D\273\317\273\342\224\303\245\361\330;\265\0\322\71\224P\346\264\367t\213\212\337|E^\212\5\312\224\354\273\265m\326\363y\237\22\252\333d \246j\341]\262\256\7\365\350\367/(\22a=\4]\351\367mg\32\bj\26Z\37p b\357\346\34\351\354\237h]G\347\270\351\35N]\7\237|:w\270\315\341\335TmN6\241\374\376\4\323y\247n\2\70S\303\333\245\357\r.\335\226\36\65\373\214\362?\372t\300;\336\33\333\320{\351\373]\3\250\4!@C\22V7`\202Z5&\200\22!\250%\24\303\273\376\17u|D~\252\65\255J\353y2\373\30\325\342h;\215m\224\276\251i\215\211ZM\325\352J\255~T+\23\204\231\357\243g\242\372\323\6`\212\231\23|\23\321\326D\377n\202\351\216v\37\325\235\215\321\66@\374\336\371AW\26\215'Am\366\306\71\274\346\365\347\4\301\231FV\315\246\205g\361>\"2\230=6ah^;h\317\245\361\337\336v\320\202\303\343\7\203J\263\7<8>D\374r\266\274\347'\24\233t<\372d\22\60\315\302\36u\260\"\340\372\306\35@oM8@\312+\344\233\236\367Hf\201-\355+\356\325\330v\307\372\364V\225\66\220\364\334\267;=" - "\371\1\ra\177i\377\64nN\244\275\b\346\324TO]\340\217\377\64\315K\205jL\30\32\223\236\331Z-\320\304u6Fl\4\263\263n\320Euk\\\255\263\366\250\217\316>\v\360\312\355\230\222C\225\316\252tfc\3\275n\314\31\2\355H\366\273\206\20=\211$\313\210?\375\275\332\36\203?\311\34\371\230I\336F$/\0\215@\305\256\4\261toM\243\262a\"\366\241t\311\236\365?\236a\370B?\364\310\365\340\373\375\261X?\302\321!\220=<\372\235'\216\272\232\311\"\36F\207k\23\317\352\16j\333\267\310\207P#\230<{\344`8\202\251\365\246E\276\225\326\334\36\n}\357\3\216\251?\0Q\207\327\220\16\364\b\35\204\304K\375^t\361\251I\301h\352+]$=\234l\223\276\365}d\347\21\316\214\257\63~.\370\71\347\347R0X1\6W\202\315\v\177\301kT\201T\26f\226\336\60\310\t\215N@\255\217&\302D^(\36\224C\37\23n\217\307\"\333\16@\375\367}\273\203\20\265\177\316\322\214\310\214\357\217\335xM\250\257m\226Zv\350\345 o\321\226\201s\16G\213\364=|N\232\361ad`\267\375N\335\"\262\205\330\241\tj\366\374yh\313\266\211\332\264\360m" - "\327'\b\305i\364\311\247\200\207\240\375\36\341\25\2\36\65_N,\255\270\6<\302I\243\335w\352\341\25X\204\334b \323>\240\363<\353{@\232{IQ\373\303\21\261\336\7\304\360\363\260\341f\357\3H\240\202\210A\200\301\36K0P\24YHQ\357\211\26\374W\323LD\324\330\27\22\17\200c\267\353K\337#\324\377\352\231\67=\374\253\353o\300\326\351_\235\177\36m\312\23\261\353\26\307\223g)\251O\310\222FOPY_\361\250\271\71\315\357\253\374\376\61\277\177\322Yw\363]\357z\364\220\325\233\340\253I\374^4)4Lm\216\366\231\373\304\242\n\256q\224\240$J\220\270\201NC^lk\273(q\"\265x_\361\"U\376\364\316\364\r\356\227\35\202^\33\207\63\226\246\65\7b>\261M\\\202G\366\5\v\317$\370{\216~6\27@\231\250E\37\242\17j\344\31\364l\27}\323'@\261l\322p\326\351}=\220W\217\205\374q \266\301\270\330\332\304\330\331#\346\301\177{@\355*\32?D@\334`\203 \254\265;\16\31?xt\343\26\273&(\217\240\246\374\314z\232]\253\60\241\312\216\217X\nM\215\357\27\333],\223\203J1\306\322\224\253\"\370{W\216\235\305\60" - "\356D\205zSs\234'\33\334\372\340p\264\63\66(2s4\214\301\214\365\303\216#\374u\237\330\70\206\366\22\222w&\1\316\213\311\67J\2k6Y^\230v\241\267\342x\314:1\340\212[\276O\322\34\"\357\71\244\223\270@6%\16D$\36\303\310\177\247\vk\266\30\311\62\303(\332\201\214;$\200&\203\217d\212'\37j\246\70\221\23\234\332\20x&\206\253\222\336c`\334\bn\346\214/\224x\224\311\230\323\355\27L\315\255\r\307C2-\353\363\275y\265\7\223\240DR\313\340;}\363\216E\370\336\311b9?\236\f\304T+J\6a_\214\240\330\362\270=\375W\373\n%\27^\310\34\367\220Q\211:\324\20F\27\367\17\61\232\3(\334\275\65\350\220C\310\220\265\352\233\206\361\274Zy\216F\330\242\311t\304\34$\363\27" - "\232\375\230~O\316\\=\270\222%lO\276@\332\237\244\63\71\301\226\267\324\20\354\63\62K\"70T?2\365Y}\360\326\61\305\232!\323M*\245\202\254\253\254\n\377\356\273\201$d\271!\273\220\232\262I\234^\342\217n\210\63\212\27x\222\244g\324\301w,=|\344\361$\356\32\247\203\350\333CBN6>T,\342|\34\71inU\243\26\32g\203\226[]\177\306C\332WB\6w\220\330x\365\23-\202\357\237\v\310l\222I}\314U\201bcx\35\337PPEF*Sv\234\337\237\25c\263\310of[\362\341|\207L\313\341\261\301w)C\322\312\203\250#\b\273:\327\24\350\246\326Es\32\27\25\312p\316\346/\365\210e\277\177)\t[\326'*\300\310\231P\301?\333\326\242w\270\263\16\242\254\216\353\344(\211\354e\201\66b\222\224\7p\244\0\306\254i,~1{\365\266&\224I\r\266\60\233\v\222\67\27\257B\213qD\355OMN\341\230f\267!\24\343\n\324\366\305&A')\4\372pI.xNi\361\204\\r\242\250\260\305\356|dN\315\65\355\210\351\306\237\66\35\351\4\5Z\345h\33\60\1-\347\316\70\333\365M\251<\342~\\\312d\251gu-\340\303\345\265\177L\327AxS\353\222\370\267\265" - "\270\266\17\352\326\272\24\vn\215cE\23\316\314\362\257{Y\35Ga\36\357\237\313p\20\202'\350bK\254.fwY\0\331kk\210\372=\266\331BJ\274\222\315s\335\342\241rF\241K\200\23l\313g2\316\34\230\201\325wG\276B(\204\226>V_\365\242\16\365q\210\276Kh>\244\32U\276\71\325\31\325\254\376O\217\342\337\16\251\345\373\350\222\301\235p\260C\330\312i\340\326\242\346K\251Hh\276\36S\243*\357\250\314\212ryF\200\307\232C_\327g<\16-(:x'\36\355\22\346'\310\71\300\327\255\231C\36\226\251\271I\245\336\65\5\307+\332\351\321R@\362\216\24\241\304U\336\322i\313\301\344\360oS\247\314\336J\324U\372\212,\307\236D\315\215{\31}U\230{\355\16\\s\303GKY\362P\345{\331w6q\203\330\35A\372\321\351D\324\21\f&M\0d\373*Xp5\301eW\375k\f\250|\307#\352\6\351\60\304\350\237\374N\b\16\313\204Dk\217G!\331\71m:\353\304\67\t\231/#\231\227\324\266\270\252\211\36\272\321[O6\230\vP\310\267\23\4)\355\213w*\365aU\324&\253Y\211\266\365@\375t\311\233\252\2u\31\t\271\2\244X\317H\333\16\24\322\342u\337" - "\261\260\271\202\241\326\330Kf\307o\336<\27\277\252\354\261Er\325\246\301\343\220\307t\300\276N\250u0\347\213\326\334\2K\272\250\215\264%\362\354|\300\217\32t\265(\306:+:*\n\20\36W\233\24\314\63(\316\243\27\20j\233\310\317\230\216C\276Xj8\354b\316\355\316\67\342\233\351\63\331\302\274@E|(,P\22\265\225\n7\31b\335\357\t\251\320\274<\352\272\71\34 \b\20#? \360\356\302\2\246\236:N\17\307\251\303\342\b\206\234l\215\274\255\355xP\202\257Q}C\315\324B\315\325Rq>\201\220\214 \345c\4\272R\350\240\366\331\233\226\252\303\244B5F-.\35\323*\253;\204\377\215\344l\367\340\312\340U\245st\347\363(\274\31\375\261\332\32\333\220\vp\20J\357O\203\3g\326T\34\376\27\344\21\377]<\276\350\60\377\261\352\33\243\226\330Lh~\215\0\343\254\256\v]\352\70Z-\214\333#O\36^\24\327\357$\31\201\375\321YTv\304\371x\336\37\221\63\310\311\326FZ\205\374Z\37 (\t%\220\361\303\216\225\364\260P\206>\256\204p\t*\300\253\365x\332\334!\331\"W\t\350\36AQ\"\265\353S*v\266\rd\200d\205\202" - "\245L\r?\27}\247Q\23YU|\320\\6\347\62c\360\344\335\263\363\316%z0\341\362\217L(^FH\334\227\215\345\243\243\276\322\\\6\n\335\350\336\270\353\203uI87\17`\320QO\7b\302h-x`\302\340\0>!S\331N\205`-e\222o\222{\363UDh\364\267h\240\277N\365\371\207\nYH\371\243\230\347\212\353]\5\370\362\5\302\20\252\341k\204\r\212\vg\34x\33\201%d\35\237\204\t>\307\333?~\250\71\255'G\n\262\335\345O\253\17YbF\317qm\354r\7\266f\354X[\330\203\342\363<\305\\\257|\b;n \206\b\315\3\250g\334B;F\31=\244#\224ZH\326L<*\344\263\346\252\37\252\23\262l\305~h\301 \320A\323d.\344\306\344\7v\353\t\242\232^\310\253\vI\233 \230\367\301\31\26&\267\67\326\r%\5\65\224q\327\340L\223\310\305%R\334g\b\200\22\213\222\355p&.\272#\b\330\7\34.\205\251Rf\244K4\215=\340X\256\7\311G\fJ\255\257\241\30l\217\322\21\230\233\355\361/T\370\367\317\242\354\177\313\312\27\215~\22\207x9\222&\244%\375\65I<\343\212FF\316\226\277^\240g\314=b\27\330S:$\236\37\317\221\262\60\241\250GE\333\371>\345\206\214\250" - "KIFJ\272X`e\236\216\312R\223j\372\365\337\4\234\310sn}S\347D\t\32\36I^\262\33\371\335[\222\67\216=\257\335\320\344\224\215\363\62\277\67\211kq< .S\20M\376\370WT\332\213\25BlT\243\313\241R\203\21\232\r\231\71\370\247\17u\224\364\33o\364\374\214\254\244\332nf\7~\236\245\244'\243\326\224\356O\273\231p\316rW\227\370F\234\224\240\273\374\363\253\30\274.\277\251\321z\337\375\364\243^\37=8\373\371\322O\241\300\211+\234\343\271\23\324\365Y\33\214i/\375xC)\376\355\270\366'\227X\34\361\22\5cJ)\265d\244\271&S\370\62\216\313.\377-\277T\v\23\202\205\254\202y\301\213\374G\376\265\312?)\360\23%?:\220\322\225Ly[\252c\274\240Y\362\3\303\270\232Q\3{\252\67x\370\311t\261\312\375\210\25f\227\367\221?u\22\243\347\373\344c\233\336\245K\226Rew\267\204\230\202?\347\350\62\226\366\314\71\337\343\214P\272\370'\261\205\310\356\247\222_i\271\354\\\315 X\323\344\326\350\327\5G\232\343q\376\215\335\65Pq\332\370\t\16x!)@\243\302\4\357\16\303\274Rz\353p!\206)\351`\266K" - ">\211]\216\301\211\3\356\344\271\263\234\370\221\1\vbu\271%\203\0\2w\255\377'\3\356\247\376s\37,\224{\362\22%\226\30x\270\66\r\244\4\362\263B\314\264\224\21\305\262\362\304{\24\277\270\251j\213\227\300k\362@\301\270\311@L3\221\63\260\334X7H\257\345\7\364D \242l\27\23\345W\253\337\376\277\216+mo\233\327\216\374)\352\276\246\214\344,\335['\216\223\373\64\316uc\307w\371\306W\242%6\24\251\207\20\275\375\372\236\301\f\16\t\373\276_D\0\204\270\1\70\313\234\71\60\2\301k\0\35\347\357\1s\234\377\63h$\200\223\242\4\314\b+\212t\21wp\240\270\336\66\321\264b\374\v\226\f\346\302\246\300\247\356L3\233\325\26\251\71^s\317(\301n\216\367%\"D\263u\354g;\217\\\207\322@\371\265-\36\310\21\314LFt\313\217C\35\215\345\233\312\374`,TN\330\253{\353\347>m4\367\226\f\240\320M\374\200\71\374';\305\251\321\337\336.b\357\364N\321\64\252\315\301\70\332\230Z\374!*Z\r\234\316e\27z\366?`l\300I\202)\360\333\333\331\200\243)\365\5\250\242\376a\17\223\316\36eg3\22\276u\\\370" - "\374\333\274[y\361\262\237\215K\\p\305R\320\323J\307/\366]\25\16CD\235\305\"\32\6{\373\210\370x<\353\21\346>\4\315\306h\312\306\310qq\332\5\263\316\26\247\251\360\61\25>Dc\244\262\201\335@\6&\213\203\70\314q\7\267\365\256\261uCCaL\30\34`&\307vh\334\352\204\234S\27\302X}\225\312\352\343\347\342\r\"\303\7\20ak`\225\253\310\250\344\233^\302U3o\242\252)\226\231\343\202\277\331\264)jA?0\277\bE\322\374\261\353mEx\351E\310\4\66$\324\7\4\20\26\203xb\321>% \254\202>5\21\314\202\200\71\355!\bx-\3\206\30\27\212.\302\275%\221\255\24\360\215!\2,\b\350\260\1\250\362\67!\6\32\r\254\351\66X\263\63JA(\30\371\17\246mA\306\30\367@\31X\371\334\307\371}\350C\23\365\374T\264y\305\265\273\342\321z\305\331\32\241\201\60\221\21}\32\235\206\237\200\363\260\60, \264\335\2g\330H\204\200a@\bC\221`jq\332\31T\365\245\242q\374\362\227=kTFq\4\206:\324\220\344\63\3\222,#\311\26\250\351\375\1\37/\342\32\203\71\214\340\214\305xeA\322DT~\262(\343\250\343\271\341\336\201_\323Fp" - "\364\274y\250\67z$FZ\351n\2P\242\356\334n\37E\200\1\5\2A4C\273}\202\206\371\354\r\6\205lDm\350\300\237\214P\363\251=\357B\310\5\274\310\256\357\330\6\263\63\235\0\351\20\222\303\16\232\60\36\266\203\334k\6\70\300p\275M\350\276\202\260\201@{\365C\220\242K\36\16\335E\245\251\0\334\354\330z<-\361\71\373\16\353*\247\n\316\375$J\350y\3\205\67\2A \323a-\365\3\251*'\357^\27\221|W\234\226\263\260\205F\t\366\35W\246\34\262\310\374\61R\t\253^rf\20+\220i\223\333\314\22\335e\347\260\204\200Q\303R'@2\267\236e`~m\2\203\32\331\373M\24\327\243-\346\272\223\322\307\210\274\372\336\303U\352o\217/\233Sw\372\24y\357\227\255\247\303\272\332p2\223s\273 8\352\314\317\254\21\177F+\f\342nc\3\25J\"\26\340E1\204\201\331>l\201k\201\353\3\322cHS\207\65\310\"CoCb\244\301\352\t\30f\232\263\245\226A\221\310@\245!\311\365!r$+\363\61\266\35\5\202=W\323\201[\331\2\271\365kDZcHX$\346|\6i\366=\342\214Q\t\"j`c\314\v9\221\215\3\303k\301\222\v\20\233Bg\360H\373\321`\224\70Y\202H" - "\234%\202\27\v\303\370\71\327\354I\250\v6\267\245\31\276\341 \263\307!\236\317}k\306\234Wi\243\23\210\25\37.\1+)\244G\17C\257\360u\374\305\346\215\375@\256\v\235\60K\266\17\6uS\312\332\252\62\204\316>\257\225\r+\204\224\241\67Tw\366\6\325\203\371\274\203]\236\262\235T\340\62z\374\27#\234\333\252#1\230\302]b_\352\n\276\312\32\256\2\"\207s\242N\23\231:\216b\355{\303\264\340\262\70\27\320\237\337)\201j\340\342\64\303\257\211\255\263\252H\267;\2@ZT\252a\261Ev\230\352\244\356:\33\r&\324\230\356P*4{\272mZ\272!_\20\20'\254\372y\304$\347\234-\1B\331I\260wh\253\375\266iK\5d?\330}\372\275\332A\254\324\t\332\373(\3\363\351\17\352H\370\23\200k\330A\334\35w\364\367\350\270}\257\366\270O\347|\23\332B\222\247\220\244\333\370*\324\305\374f'\356_'\20\314\340T\225\247\70o2\230`\213\270\314\231Gr\321\230@\361\211\255\240y\357a\223\214\226!\n\34\0d\222\201Y\216\224`\363\314\217\315q\304\345\222\320N1\17\255(\231\376\277\331\324\235\365t.\31\71H\361\322Z\361" - "\313R\205\223\324\262J-o\314\247\61\221F\26\26C\355\216\241\260F\20\n\243K\276\234i\242\26\bO\t;\376\352\366\241\270\\3\276V\17\251I\b\261\205\233mVcB]C\220\364-_\6\263_\376\220\215!:b\21\325\21\331\204\66\276KE\307\300?\335A\232i\315\376sAf\222i~[g\303q\254Z\316\24\235\177_\374xjR\345]fz\205\342\327b\363\256\36\35\17D\1z\7\21tQli?\261\202\363\326\337\3C>\203`\31p\2\241\350\23\245\370\301\300\242I\321}}\304T\307:\201vBH\205\257D\221\343({\265\355j\314\b07\200\257o\372\373\322\224\1\6\202\65D\b\367\20\177\207`3!\20\247@\370\337\36t_=\230\263\17\26r\365\v\370\275!\200\307IS\216\376\2\213?\20\371\\\217GL\203j\314\240\t\17~Lm|\315\274\315=?a\350_\232\200 \237><\327\237`\211\71J\313#\374\307T\\\245\302I*\274IY\0\247\251\360\301\243\25x\372h`\367#\fH8\276^\375\322\357}\356\223\206\265.\243\225W\314c\225\30f\242\244\4p>\330\327<\304\"?\330\374\34\62D\342\243\323\314>\366\36\336\5S\267\256(HJ{\331\346\310\20\215\246\17\216\270\21a-\330+d&\220us\335" - "?>\311$F\21\260H\23v\230\3`\342>.\376\351\315\233\364\302\360\214\7\346\305\300\v`s&\321\256\20\327\3\313\254m}\354\304\351\325\4\315[\f\372\60\60\225\313\361\262\231\270\367\366&\201\32#k\21#c\30\33\210\271N%(|\340\341pH$\237\236\307X\210\60\310\254[\352\270\322\361\304\247\317<\270\344\215z\2\237m\374l\2y\4\357\344:\235\214\206\5\257f6x\343f\2O\\\334\221=D\211\27d(b)\323]\304\250\375\312\31\217\23\360\225\210\277\253\33!\200\246\343\374\1\22\213\374\241P\310rH\36\205{E|Z7u\344jQ\363\355L\1\fG\370\230\325\240~\321/0\247\21\b\201\376\t\330\345g\275A\310\22\200\27\256\374\352\324\254\214\16!\330\320G\201}^\3\30\277\267\325\21\324z\354\351\302=o\344\350\342\343\322\237\257\207-\20\331\316z\315L*\335zB\242\252\0\61J\207F\215\370\377\267q\35\365\246\370\31\356\204SY\367\35\336\37\361\322Y\353'\224\6;\221E/r\20\tza\202\311n\306\26\301\65\307\310\252\315\272bH\367_=;\212F \343\264f\33\36\323\233\35{Wr/O\351\65\301\204\264\253>\325\345w\247r+\0" - "\62\201nX\n\245\255\1\237\364\16i|\236b\22Q\234\354D\31\204\220w\217\26f\36FO%\241\b\346=-\224a\202\26\332\213\\\n%\355\331\21\263\332|\255\266\r\320\66\240s\327!\363\32\375\201\20\240\362\312\245\315={\0MG\17\37.\275\264\312\251\32\360\177\67\205\346\177\212\247\371;\272Q3\327\262\343\340H\350E\345\26~Tg\315\355#\276b\326N]Y|\245\327\263@\324!\6\273\366v\353cu\260\61.HU\342\327N3\320\215\335\71\326\217F0\224\263FS=\320\25d\333\33$\316\ns\"\307H6\247\252\317\353\370\356@*\237\305\217\25\272\261\267\203\213f\22\240\305\352\247\216\240\246\346\310**CH\222v\353\302\263\16\341,\241a\226|\b\335\f\320\234\252\31%4\221\n\310\66\26\251\264\305\340\60\232\210\251\356\306\26\63\210\365SNVI\376yH\304b\21u\246A\242\270\26\274\304\234\3\254|\316\1\260\271\366vuE\371\340\352\354\373nl\366\342f\302\251\363\34\204\311\230\363)6\261>[R\300X\2mR\221NJ\34\64\2R\316XQU\301j\332\242\376\332\f\244x\252/\201Zc\325\227@\350\303\202Wv&\227\236\\\24\250O\225\352\260\303\220\346\n\241\360\23:@.\304\254r2?\263*\247\277.e\325\364R\216(\202\26\370@\322\273\341F\33%^\375\26\324\336(\b\200(\241\340\301\243+\16\345w\16\31\214g\245\231F\302\253t\316\347\21\243\274\201\260\204\3\16\374\303\356\216\337U\374=\211\277o\342\357\333\370\373\16\204 \330\24<\330\23\215\221\376\220$\312\31\304\215YS\244>\272\212#g[\265\357\315m[\253\2\277\b\312\321\253\325\323S\377\263JU1\271\250e\362\334J\31\305\2\b\234_\"p\300S\337|\202F\341\310)B$\32\247xa\24\275\r\0\310\246\66\254\r\367H\3 \206\222\225\305\216\221\305\241\347TM\36\246\376\4\22\20\237n!\25\346yE\177\373\351.r\n\315\373\2\365\343\357t^N\347\337\336l+\33\70\3\257\344\231\351\274\2\217" - "\213\277=\335X\206Oy\271\16r\30\277\365]\355}\230\252\372\243\373\331\365\367\242\344b\356x\274a2\365\256\315\323\201Vb\336\34\v\220\330zE\32\206TW\27\265R,$\266\340#@\214\366\33:\201\376\275\245\264\26\347\346kzcD>\227<\234\360\260\222_[\274u_\346\275\227\336y\351\237\275\264T\251\274\216!\330\345\224\322\241\226Uq\222\267\330\255\336Q\247\372-M\233\36+P\211\221\23\253>\210\320\257\177\212\212\33\203\3S\266\6B\262\200\65B\302\65\202\304\31D2KL\33e\231\271\245%+\320\201\320\305\310\270`N\242\254x\234`\221\356\371\7$\252\320mg\21V\34K\237M\353\212\210\341\16F\312c\201@/\345\265)\37\266\4\343\300\347\377\24\335\207%3\";\36\261\271z\256\71\345\220`\n*\371_\267ab\337\v\33Q\232\254\344\nVZh\31\207\341\24:%W\5\213\323\207&dx&\345\203\17U\336\252\265\f\366$\264x\263\366\361\66.\336?\277f\301\201A\351Q\24\351[\233\177\300\316\204\264" - "\275M\226W\25\242\353\263-\274\4h\343\20\f\27\61\345\3\254j\304\"\361\252\211\215\366\256r\n\f\20\214-\21pxT\35t[)\255\6\60\344\356\221\267 \313Qer\331\65\37z\300/\216\177\203\322\60T0&\247&Z\320!e\375\4r\205-\341\373\66ev\321nK\300tFFB!\313Z\207\217D\275\311\177\1\334\261\344\232~\275\33\240\337\t'R\242\317\23\212\61\235p\244x\322\265\270\302\334\264D\2\357U]\377T\216=\326*\7\217I W\310\234D\330\227ITK\36W\213\310\262X\306_\344\264\214a\247o\353\4\70\232\7\276\7\1*\314\330\373V\217G3\361XY\362\260\342\341\204\207\67\22\245\b\230\213\265-\211\303\353\200`\260\210\63\65FH\177\301\4\326t\325\64d\336\270\0\67&rs\236\213\21+\344l\316w4vW'\312\274\237$\252\345'4X\334N\4\374Ovb\212bq\r\277\301\221\231\364\235\1>\227\213\204\216\326;x\326u\236\342\n\255c\3\304\241\322\372\201!\25\30\257\200\2\216f\241\217Y\202\350\317\352_\220M\353\355\63\230\306D\364\210\227\200\377O{\207\340\1'\260h\310\252\301\264\263Ei\227\333\22'<{\264\30\337\253\v\303[\377kQ" - "\200\215\202\314\23b\341\276\335\313Y\37\nf\327r\272\360\335\334\244\341\207\20\324\232\301\315G|9 \203\214\340_\35\235\67\232\267e{\r\244|\257\213f\303\2$\257JX\260\5\243ei\361\360\62gU`Z\23]2\247\320\315\253\277\302\375#\307\215\257\222\323\371<\275\200\375\304\34B\222+\33\274\263Gv\323\65\25u\357mJ\217\301\246\351\321?\31\302\273wMh<\250\1\354\242j\332\231\247\351K\231\357\63_\330\177\352<\332\243\fB\274\261\262\321\17\254]Tj\306\230\243\0\362.\340\376.F\260\343\223\264\213\257:~\237\245\366\313\230\344\225\177\67T\6/v\325\201P\t\243\37\342,#\7\354\btx]\273\223\322\342# \206\226\361\342\67\270\224\301w\206\177\b\277\325\375\252\303\332\303\1\2\230)\6\346\316\220k\246c\357\71\b\264\64\234\230\25\303\337\360\200\314g\351\334t\6i\"\225\345?\231\275\214\347:\35\37\232\266\1\35\360z7\206\71\34\16K\203f\205;0\21)\t\317\222\325\377V!\31^\367\357\30\342\273\341\212\70\275\263!\205=U(\bKY\376\222\365,Z'\33\371\262\f\235]#uc\5\66\32I8\376J\236\26s" - "\271|\331\344\273\330D\315\t\243*\300T\337\344\321)\241J\240\207\225S8\37\370\r\347\25)Z\f\265\246(r\230\350\364^:\221\351\233@`U\205\0\323\27\25I\313\254-L\32jfM\257\177X\276\376\253T~\205\262<\244\254\302^trx\202e\266\23\23\225>\3\62\tL\245H\31Hx\231\342y\272\223\333\62jP7\306D\30\340\301\17&.\216\\\4\236\243\316\66\212+\375\345\32T\343c\301\3:y\231\335\364\1\341z\272\306\366\234[4*\35\27e\220\231\225\314\242@\335E\365\177\221\221\350VS2\337r0\204\214 ~\354\263\272\312 \370\347\220\374\fZX\304\365\203\r\177\220\306F\362w\312Q\0\255\23\f\26\26\244wb\202y\0\373b\243`\345\7\273\f|\202O\210u\232\206\310\67\206p\311\305\71\204\252b\251.\363\275\205\337N\306\f\373\33\254e\274\66H`\362H\210s]\326\3\224\37\232\253\70b\365@F\273\371Z1\200\2\366\f)\360\177S\17\304E\226\236\336~c\0\305a\344\66\60\r\354\235\315\"R\37\6\2{\214!\27\317\"\270\343P0\302\214\270W\304E\341\353\246\266\230\37\356=r\177]'=I\240d\201\261\277\326\254]\361V\32\233\"q\340\255" - "\317\275\"}\210\17\16\343v^\237\263\377\346\355\314\352\317\353\365\340\224t\247\341\224\336\302>\260\17\237\265,\363>\212\24\0[\\\307\271s\336 \232UD&\27\356\211\354iXh6\27-\231\236\305k\323\373\3\213\237*\310y\24\345TH\212\30\323\244\331fQ\204\363dbQ\273\301\206jz\231\232\\-\307]9\355\213\306\60\220v\215\303\340\261q2\345\272\6\213\234\30\325\327\64\362\316\273\tev\2\326\3\255.\6\177C\361\342\364\327\343\346oB\311\24\3p\302$\tgY\16Q\3\203\325\352\300\373\211\227\336\370Z\275\242\35;\267J\243\214\341\"\224b\204!@\373WzD!\264\370K\346\260\312 \16\303\2\30}\337\273\236)~,!\vR)N\324RnHko\16\307r\216\346\360\267\315\223+g\20\360\21\235U\346W\35\246\366\70\220\310w\224\220\321\252\313\377\220\272\307\30\226\257\226d\272\f\b\303\324\210\37\63q\356\246Fp\254\242?\354{S\350\31\27|5\347\324\341\355\274\2'\261\347\314" - "\261\307\31\32\276\34\371\225\372v\347\370\67rlR\4\311\327,\267\32\301\t\222\64\340w\211\215\316\62\233\211\323\263\235\225\27\227^\225\277z\351\33\6\225dK\213\344\316\3\305\60\313y>\24=$\v\31\356|\321(\365\37j\f2\4\373\232\204c\316\262\232\177\364C\323\366~9\345\335\241\313t\203\234e\304\210\37mNnw\7\254\204\33n0)\323\231\205z Wv\245[%x\37\301\4\262\266XAN\252LO\260\241\1\336F\307\21F\27\324\t\20\rRd\350\20\343:*Jw\325\321q\35`\37\342Y\22\353\70\337\202\262\234\233\250\352\342$e\357N\345fi\36@f^\234\275\236\237.\276\271\31\tx\234)\25wYF\b\334!\201Q\16\360%\222x\201\223&\4\225\247\306\20\337\205\322\375\277r\212](4\244\211u\221\2D~T\f\251\3o\376-\360\366;\250\35fbX\323\273\305W\331\216\210\30\335\274O\333\203 \240P\374\361\311\323\224\242\267*>\276\7\17\341\250\71\200\357\215\63 mc\376\6!\213\357\221\325\236\347\31\60,\364\261\215V\275/I5\177\332;\r\326\223\372!\273^:\334\256B\305\70\24'\255K\306f\260\0+\270+<2^[\322rN\302\347\17\325=\215F" - "\24\70e\304\220\326\226\17\366\246\233\273f\3f\21\33\b\204U\35\214+|wx!\321\301\205\255\210s]\2\371\226%~O\215e\334\213%8\25\v\204?\20\370\200\240\345\356\220\345lw" - "\310X>s$\r\313\r\n\203\33(\343\334\371\222\207\23\36V<\274Q\262\264\26\27l^\26y\372m\31\17\357Y\233\360\376\337\277\372^=R}q\24(*\26Sh\310\255\230)6$\364@\31O\5\214.:\"\236\343\346W\313\67\251\360\215\302\322l\276\303\204J\233\67\62\312\223u=--\223\377y6\233\35\20s\253\7e\225\367\367,\0\376\243\262E\23K\336\26w\352d?\224\250\f\34\6\341\366~\\\r\311\214\245\306\365Zb!\363\237B\177\71\375\331\363\17\346\362\371'2\226Ec\247\230\230e_\361r\214\71G\266\70\t\212\325\3AhZc\336\215\234^\304\304G!v\247-\20$L\235\363e\f\305\236\257x8\341\341\r\17o3V\300\371\273y\325\345\17\214\223\21\366\353|\23\60f\312\342\205\252\351\313:s':\357\332c4\306\270T\306{V*\177\256\332\272\357X\321\316\247\370\66\272>\254\177G\321\275\tK\242\237v\261p1\222U\231X\204\367\273\64\200\2\312t\306J\376\70\232Md\352\226A-z\307,\202\334h>}\242M\25\237[\233Q\361\27\333\275\305\364\177xrn]\226\322\244:\b\17\303\343b\4\300\272\210\317@\17\233zF.\245r\306\65`!z\210\241@M\210$\212\201" - "eD\34\231\264\31\242\214\b\224N\342\22H\221}\211l\321\350B0\276$\363\tSVE6c\"\263\25%\242\20\320\325\204\203h\330a(\355\236xY\356i\213\247v\270\317\263\227\345\322\21(\371\334X\304\244m\216O\305,\\\0L\7\351M\32W\240\263\212\205w1\251\321q\26\202J\234\35z\245\245\220\tO&\233\373\352\272\265[jT\37Z\347\374\372\216\310\377\304{R\233{\225@*\6\\%\347A\26b\257`\203S\357UzM=\305\205\342\276*\304\202\61\204\264q\304\226\231\265$rU\306\236g\302\275)\2\263\301\372\316\277\252\22\260g\0\356D7;x\31\36P\252\340+\302.>\354\352\365#F%\"\311\0\245$K\361\341\374+\376\bn\235\340\23q\233>o$\222\310V\232)\336\71oc_\266yJS\231\247\64\35\366=\320\363\224\225g\302\265\236\325\213\250\241,\312c\261\357\233Hi]\376\313\277\274Qq\365\372\65\266\242\355\266\366n\35%d<\301\335\230\62N\367\362\22\70\233\362FQ\373kT\254)\231\325\f\242_W\307\343\272\17\311\35\210\311\324$\265\302\6f\225h%\374\60P\f\321\216r\232V\316~rh,\347\25\202\325\200\210f\333\242\23\6\5y\211\r\4?" - "\254\325\t\345`\363\"\6\203.\261\351\31\3\353`\211F\324iM\n\262n\vQ\220t\352\313\246\271\313\213\25\63\"\240\204k\202\224 NB\352\263:+O\316\224\275e\317\250H\201o7\345\331\30\276\254^\376O\336\263\22\361 \211\346\251\327\274\326_\223\207?\?Q\274ha\22\21l \212\66\214\0h\\[\23d\324\247L\234\26D\364_\305\307\277\376]\34\341\326\346\306\233\327\317w\316/\310\265\355m\263$\346\60O>\261\271xc\243\340e\7\252*/\37-\35\20\224\vnTt\30\360\306 a \275\0`\205\204%\306\215%f\370\223\235qOGq\330aN\243`o\1)\251\24\370\26;\322\333d\362Q/Y\25B\257\357\350\310\206\357\37\321ANLHG\16o\b\350\366Y\7\304\223\350\254\254a$\313Iz\263\305\35P\35\221~\246p\30=40\353\351\70\242\244\305OG\235\273e\235\331\214\350=\222A\377\250\31\4\213\260\273\327\341\351\3v\333\220\0\6\223\231;\362}\323jM^g\f\327\365\267l\302V2&\240\353(Qn\232\65\6\r\233\210=\331\365\6\bY)K\366.\205\211\261\203\363\244\355\325\316\353=\16\316=s\32\64\246*\314\224\25\266\372*\275u\211*\333/w\217\5I>n5-" - "X\237\326\211\33E\313KK&&N\364m\264\227\206iv\325G,a\215\304\\wx\270\231\344\254\1\200\326|\313\232\321\310\356\336\360\277c-W\220\61\5\342Q\274\306\340dq\23\31\215UuR\0\231\247q\17\330\340\360m^}\237W\337\345\325\177~N\334\311O/\363\352*\257\236\344\325\67\234\67\64\67X\346\272\231x]\232\27\353\224$\210\231\16\270\255\321\256\232^\345L\344\332\373\301\223^\341)\302\303\224P\304\356!\35J5|%\16\305i\373_$e2\301\bE\330::\347\71\346\307\235 \n'\35{\262\b\210Ky.\307U#E$\35\64\213W\374\330\377\62\330<\255\264\223\35G^\6&\235>\305\347\351\4Q\t\377\251\23Z\\\371\231\26W\304_Xd'\247\300\371\26\70\227\222\336/\21h\217\7\22\355\323\205=0\250\360\30\233I!\213\312\254\207\355D\345\206?k\227\335\337!G\35}\"Xa\315\247\367\325\243\316\375?", - 27492, - 63444, - 36803, + (const Bit8u*)"$\230\5@\323\211\333\307\237`\33\261`\3\26\260`\275\221\3\66jlC%\4\305\4OQ\4\v\33\25,\260\273\25\273\213\63\256\357<\257\357\364<\273\273\275\60.\214\277^y]/\357X\367\236\374>\237\347\207\3&\330\16\322\264Q\256c\30\263Yt\214\227\64f~\211)s\242V\201\263*r4\214w%g\323\216\177\3\35\71\343D\364KX\375\266m6\30OJ\204(\271\27r\227\345K\5\337s\37\64\317\241d]T\34w\233od\214\350\316\17h|\337\344\205\\\7\t#(\271\70\312\210\202\307$`\305qao\250\255rHY\332#\344\64I\26\205\354\202u\337yo\361\216\261\376Fj\371\70\360\6\266;\24\367\n\354\272\27\370\25\213f\351va\330}\36\316sFeD\262\177\246\372\"V\354\r\334D\303\25\361\21\224\376%\350C\202\327\fG\260\337K\326!\354MR}\204\352\237\302\336\302\t\224<\26\65\313\303S@yX\364>d_R\365\203\206YIOa\312>\227\26\247/OSr\352\311\250t\256.\263^\303y\344~\21t\256\360GT\363\225\355\2\27.\326\316\240e\7\263\177\307\311wR\216\260fm\330\0\266o\226\331\311\331\254\224\261\262X\264\20\202'K\250TO\243c\224\62\310\367k>\f" + "\372F\302Q\316Wi\351\37\331\373\241\267\316\274\206\266.\362\7\202\237\r\376\62\345\246\251\213\311\333\220\221\36|\212\306.\222)P\372P\377\230w\365\b\214\202\260}\254\341\61\207\22g@y\266)\3\206\207\71~&\221\207vs\315,[i\253\323\346P\32<\321\341\340\211\371\311\257`\204\230?\242<\263\372\70q8<\3\265\65\364m\352?\301\266\4\r\225\356\4r\267W\n\220\365\b\350\30(\357I\372\"q%\346\34T\367E\353\3\331!\326\255M\226\221\241\257\270\21\246\232]>\224y\4\365\\:^\357\207\202\255\332<\202\65\220E\16\227\334\315\345Q\306\357\260k\274QC\346\363\322\367p\324\201\204\211d\354\220\342E\315\276\360\\\230\27\343\236\212\313\353\263\17\261\265@\332B\235\242\f=y\312\334\324\271<\345\247\324\275\254\347\210-\354\350%[\315#O;\247p\276O\363\62*M\242_y\330\337\216/P\366Pp\231\24n\367;\\\345\260\"\257\365\346\276\204\321\273d\325\301\244@\304\32\365GX\273\337\61\201F\276\233PI\366\314\310e\274\266&\367\33\336X\234g\343\260\64\226\223\344Y\310\247Xr\327@\330\251\306" + "\304\64zPb*O\274\231\374\210\5\275\361 \213\345!\210\243\315\t\273\261\351\\\352Z(\271\244\257\306\376\35lQ0yW\312\71\60\364\26\247p\227Y\361fjx?\271/\271\6E\217\202M\v|*\252\214\260<\301\22\213\276\231\267\210}\36\210\61\210\212\300>U\226J\31\247b>\301M\271>\3\354L\366\377\212aJ\26c\236E\23K\342\71!Z\360\314\217\371\202\2\226\330H\250\360\233\246c\251\320\20\305\365\303\223\\\320\364M\352\373\274\344j\346O\340~!\306\2\271-\252\317!)F\376\7\314i\311\330\214\303'8\333\361\322\316Y\205\254\220\b\325\340\333\247\376>h\1;\357E\236\345\36\243\215.\242\71p\201f\354K\273O\223U)WQ6L0\27\f\26\261\202\352\177KvpQ\243\366\67\254?\226\264\233\346H2\226c]K\342\222\240\315T3\304v\202\226\r\316\251\202\245of\27\266\6\66\264\205\332W\304\355\307\r\177\344ua\347\302\310**\275j\310\241m]\375\313Z\337\25\65\241\340\62\376C\355\36\307m\206\330\61a\333)-?\372P0\246$\251\rY\v\245\321\372Y\34~\212\67\243\343\276\274\231\66\27\370\226C#\245\334\343\316\273\r\303" + "\31r\300\314\221f\301^\202\372\224G\377\237\370\6\310\226\250T\234cS\205\202c\246\354\67Z;\333{\234&\216O\351M\375\332[O\202`\2.\200\360\335<=\330\6Pv >\35\372\337\260\336%\205[;\21\352\266%\374\206\205\33u/0@\354u\314j\247\232\2\25;L{h`\271}\34L\314I\376\5\4q8\35\63~S:aX\177\307k\350\261)\357\220\267A=\237\26Dz\366\322\252\333\271\23\320\262B\306\344l\226\177\4E\273t\35!\367o\265\16\3e\261\303\250\356H\342u\322\265D\374\212e\25\361G\240\252\310\32\200\310w\4\7h\374k\311\315T~\337\364%\227\\\321\313i\336\237\36+Fm\25\211\332\207\32\211\255\234\6\256\266\257\344\220\205\330\200N\211|;\217\355\225\270\213\262\2\252\22\232\207\356O\250\250X\327\214K\26eMc\341T\262r\372\216h!\213\277\n\361\267\252\31~N\355b\343^\340\376\333\254\7h\332\3\327\63J\357\32\375\20F\235M\310\201\25\362\234\f\260\316\227\336\340.'\343G\320\202\63\236\213" + "\224\260E\221\205\35o\351\207\361\v\37fK\340\305\375\201\35\330\324!5?\370.\312\317\n\227S\317I\246Jp&F\246p\326\7\312\0/\364x;a\364\356\204\305\254\71\26\66\241M\237+\213,\333)\243\331u\324\362U\340]\222\276&\260\323\0\261\355oN\231\244h\346d\267b8\224\335\217\257\304XW\370\320\340\214g\263Or\205\273\374\30\377\62\205\257\346\371$=/pq\247O\364Wpm\245\67\20\204\t\262\216\223\331\301\62R\332\t{-7\17\2\347\33\221\267Q!\26\356bY\225\240=\230\242%:\364H\225g\300rJZ\33\234\265\320P\221t\fMU\322H\\\320\305\63\221\372\305Y\337\240\331\33\62\252\241p\240\366=\\Z\233m\300" + "\332\321\216A\f\0B\232\337\323\63\fB\237\321u\206c\320\37f&\247\253\300\275*\246\204\254Oe\363i\\\377\244\351\324\334.\347'\310yY\265\5}\225\232:\230\254LY\300s\n\322\237\300\352\345\271\345\340?\253)\246\222\305\372\327i\331\242\354+\230`5\235\342\354\233\312\373,\231\32\62\37%\377\tD\24\26\340d\36\371\243s\36\214\331\222\270\236\252\17\333\336\343~e\226K\324\251\326\260\nS\236F]k\v]\25\333t4p\232\275\21\352#\223\206\343\254\356\351\257\342\230\344\304OYW\31\221\36\24\17l\25\320\303\20\377\235\370U\320\276\24~\206\307=NR\377\177\37\255%\211:d\"\317\373\301\275\30=\333\224\177\343Rq\326\247\64\371\265\324\60\312\21\250NQD\23\37\341\270\225\341\213\251\260\235.\26R\322\24\347y\305\241\354oH\356\25\n\203*EK\336\314\316`K\235\324\313\v~\365$r\373\342\70;\303t(\240\25o\344\\!\331\5\301fl\267\227\7W\333\323yZO\227\2u5\21gIQ!\334\312%^\335I\250\34b\251\245X_\370dJ\331\21\65\220\246\326\271\66\320\202\32\317A2\274-^K\306\375R\1v\210\326\16\300\16\317\264+8\213\225zH\23G}\313\331[\224\227Q=#\372\4O2\246\210\241\361\213T\33\364)5\237\bj;\207\236\247{\\zU_OK\344Y\357\60\246\302R\324n\213\250\300\254\71\252\265P\371\267\345" + "\24\310k\4\17\330\63\71\246\17\247\34Ql\241\260\32\316\6\177\255&\207d\303\5\303)i\251\342\70\210\256R3M\vq}\f\232@X/\356\27nY\5\315\217r\276\344\244\273\n\25\317\374\65m/\256y\344\225s\337\201\26}\20\305!g\202j\36\315\33\342\376\v\v\264\332C(\270L\375X\360!>k\243\\*\200Wh\256\327]\317\212%\302n<,\324\61\227\27\213=7\331^/\323s\363\237\71\333\251\302b\372\3R\317D\225\301\366\177\375\33ag\357\200\2\352\274\t\327)\376\rIg\310\235c\354\331\66g\372\356\264N\247\260@\226\b\222\332+B\240\213 \276\261\255\7G\257J,\203\251\203]\263\241\363O\206/\b\352\355\62\216]\20v\4\65\355\302\356\6\345\1\267'\370g\203\243\233\354\1\356\274\36\310\307\204bE\2\214x\337\71\224;>\321\35 \321\257t\0\235\215\362\233\\\370\223vO\333\67T\336V\201\350\330Q\237\216S\23]vr=\210\336\310\321/\n\177\205>_X\"q\346\320t1.\372\61s5\325\206:\266\202\"T\350\245\325\213r\237q\330\357<\21\26\r\362\334\345\226<\377w$\337,,\344J\265\371c\30\246r\254\6\257I\235\7i\205Q\317i\210\311" + "\221\333\26!\205[\371,\310W\20\"\300\344`1`\372k1/\263T\27\262\217\212\303t\257C\341\5\35`~S\\!N\34\234|\215\265\367\303\257c'\257\341\r\350\63\315\374\63\315\354\230^\206s\365n\t\316-p\267\203\252]\326\205\230[\246\36\301\213\356\265\226\5_\300\0,h\361l\242\65\36oo\330\222\341\33C\375\257\332\336\b\322\60\302{PA;D\1\302\231\352\264\217)d\35\216\346NF\375&J\270\246(\307\305\246\314\313(\\H\355\240Zh\375\23\62\17*7\7\363F\335n\31GA\357\363\346\67y\344\20\347\30P\r\feT\34\312\70A\5\211\332\r\354\177E##\213R\372]\220(p\312\213\251O\31@\374\67\26\16\323\245P\301\273\332\333X\265\301z\31\326}\342}\225\224\337\207\246rq\202\316\316\206\305\342.<~S\322\25\234\62-\365.o\256\366I9\306\36\23\302k\336\312\365aH\34\366\306!\351\366?\260{\245q%\267\312\341\66j\211\r4\4\307\16;\245\262\377\70w\246\252!\270G\341\234\207\31_\200\256<\"\2\7\351\354\375\61z\242\250\212\207\214\264\277G\3N\330\255m\30Z\272\326\220\200\203\327\331\17b\367\303\306\313\70*>!\237" + "\26\37\311\352\7q\203\303\373B\207]\266\24\26\346P$\244\366\217*\244^Vs/\32\366\236\263\214;\206\351f\343z\255\367G\216\330\301\67)\353F\334E\360\bc\232h\215\330\233E\253\232skaWs\340K\352\366\246q\0v_l\334\311\5\347\343\276\17N\27NR\313\37\202\370\277\220h\230\272\307\265\f\n\252\265\341\354\360\310\226\301\340\237\355o\361Fi\236\f\313\23L+\240\337P\253\235\66\231}\235(\324Agh\320\25\373%\22\370q\37\372\217\306\332x\330I\307y\224\275'\36\203\3\237\333{Q\322w\212_\310\321[\356\203Z\251\375\61\65\64$\347\223g\244r\17\255\334\225\353\204\255\65\276\277\250\342Us\"n\373\322_\305;\265\376w\333\366\243)\272TO\220\251)\277\64\16\203\n\314\343\372$\376\5\363M\356\37X\222\33\322\25\327-\361\356\3\303n\335`\312zO\325\352VA\340,\357~\24\370\226\352K\223\366\263\240\31\317a\304;\361Q\354\334\37\271\236\302\17\361\362\340\264j\33\340\336\356\36\304\300g\261{\271\370\254n<\352\7\213\7ru\243\365\21\232\213\244\v95I\361\230\0\0\332\366\356<\233:\255\r" + "\205\342B\302\17\7a\221{\216\60~\214.Y\364\62\350\354\61l\304\272\261\211\1p.\210|\221\306\207'OE\357C\365\257\254\236\23:\225\362\317\306e\4\201\64\270\36\266\355\20=~7\336\345\371\17\335\337\264=\235>\321\365'\271r\242\25\274\244o\346G\301\35\254M\271\246\236p\355d\367\341\350\313\70\372@\302\377p\321\271\314\221\264\304\233\365\65\216\32\220PJ\252\t\241\207\70r\212`\37/\370\304\23\3\315\366\234\267\202\340\n\235\216\31\346\361h_\202\32j>\262mG\356\212r.\331\253\273C\261\227\303\367\223g\277\362\20\366\314\62u\244I\345){\240ki\374}\262\214\65\332\270\372\240\315\nCw:\352\270\321\232\262\237*\26\230\365\330i\236\341\2$}\255\250#\361\365\220\"\36\241q\374\27\374\67\216\237-\236\ra\355\351?\352xD\337\25+jM\17\211\307\242\34\26n\367\\l\245\360\224i\374\302m\263\r\226\336\317.\307\215yy\v\320\376\215\\A\275\311|\r'iS,\24\261\227\237\301(\231\363\63\332\64\330WM\266J\331\217\60suz=\310?\25\374\201\333J\375.\214\326\212\272\260\272(tD0Lm7\v_\311" + "\354\36Tj\232\323+c\37j\317G\34\206\210\65\274\63\350\f\216\374\67!\234k\344\266\16\60+$\375\\\333tQ\316\r\215\345\272/\23\36\200\1\334C\333R\241j\311\212#\305s\341\23v}\26\325\253Mi\344\273\205\223\t_\207\265\70\373FF{Rl\25\236%c\7\331\b\230\377\211GG\315\247s\303\203\211o3cba\212\33Wir\325\270q\257/\4\66|\224\227\215\333\267\370\367p\332\320\250\6\366\275\243^\37\34\364\224\5\252,\354\325\307\234\313C\17\70:\203'5f\31\213sBD\\\276\310\370\63\f{\307\361$x\360\207\326k\362\\0x\211}f[\275$\313\25\245\30u\\d\303\272\254D;\367\275dY\310[\233|\347h\374\363\344\23d9/\223\301tp}\201c\37&\31pn\223\273\v)\334\1\17\315\272\231a\306fs\316$\352\360\201vX\360h\17\255\306\334\371\350Z\30\375>\332\336\213\364\5w\rR\377/l~\33Z\251\345\241^L\275\36\335\16{,5\211a\333s\277\223s\352Tz\254\n\267nnu_26\350\64d\326+3(\357_\215\231\35\333ew(3[\371+\215\70\354<\rM\311\251\65\60\350\63\273\22\233f\247\216\344\5\353<\322\66Z\32\67\61\251opO\346\264\355Q\37\241o\235" + "f!X\366J{\203\360/J\302\331\362\364\347 y;d(\214Hvf\260fpX\t\307e\205w\206\201\347l\255@u0\357\67l\311\b\364\341\371G\334Gx\335M\357 hMJ7h\351\30\350\312\273\366\5&a\313_\201\225\\6\306\360!\354\302\300\1\336\243\r<\345vWb\27\4\245\17m?E6B\247\315\206\316\255\362`\v\247Y\357e\20\226\35\217\277\212\274\n\215h\376Q\372k\220\61a\231/{\6\215*O\370\220!\16$SI\36\320ve\351\310s\374J\367\253\311\374Av\225\335\355\362a\376\4\23X\31\23XX\233\357\315\253\t;\273\306\274\216\210-\314>\222\221'\304\20S\220\336H\212\31\243l\222\224\260\372\274\255:\260\276\262q\256\305\267n\212\365\65\20\303\305\32e\177m@\223\332\34\210\261\300\17,\330\16Q\224\234]\36P\321\246L\211\321j\241\5\207h\206\22\226\277a\26\203\360\223\243\352\66\304\255[S\21T\314\34BC\370\315\1!\200\363\370\365\34rJ\371<\273>\240\60\261\254\326\1\266XS \303[\246ov\3\255\370\275\304\334\202E->\273\70\240D\16hoCH\16&\201=\241r\343\334\242\376=vi\307\7\f\363\"\273\332\251C)K\202~\243\323\273\246\274\326\251G\244$f\347:\365\37\361\274\361\64N\24\314C\0\30\66A\206\210\20\206H\326\177+\216\311L\221\323\23\33\70\302\63s\232\v\0c\362!\266\372\2\3g0f'\247&ie\212$l\301!\31@i\206\306\36T\2\244\272\32\5\273B+\r8Q\251\315\253\21tf\375I\35#\350}72p\310&\322" + "\343\224\32;CU\27\nOK\344\34t\20\262\314\276\34X\347h\"~\266A~CG\352\246M\16-\26\60\270\365\315\260\230#\360\230\203\21\310\5\262\36\201\304.\3\66X\233_\20\205\r\5\62O\326g\237\17lB\213$\300F\37r\324\62\32'f\227}\203\201\230$\257cB\242\234\344\v\314\243@T\232T\r\303\67\32%\232i\220\322\354\261s\200\357D\212S \217[\346\270*\227\v\353\347L\305{\255zi\240\24\276Y~\225\375\2im\275m\340\271j\271\24L\312\4\247u \317(\333qn\233+e\307\266\207\353\203\367\347\267\314A\345g\216\61z\27\243\354\1\t\305\376h\4j%\257\"8\227\242>\225\0\200\177H\215\326\b[\246\71\2\304G\3\313\276\36ne\215\272\25'\357\252\63\242\215\273\61-{\25\313\t\7\24\34\210\223S\207\330\264\17\312\345W_\201\337@\352)$;\265\71\262\327\352#Dl\36<\2\20\355.\231Nu\202S2{\25\272k\17\234qm^<\201\277`\301\37x\f\350\262\313\372\213\315\241V\223\211V\275\223\311\4\303\235&\372x;9\262gg5\"o\265\3\226%\205\242\206\313\n\245\364Z\20m\4\203\307z\4%$\25] \245\232\273H\377\212\31\301*\373jP\225\315}" + "\365\25\202D\256jd\251\217f.\300\270\336W\261\326\335\274\257M\213\23YB\336{\375\336\21\32\3\225Y\235\235\221\26\22Y\224\317\220\nZ\351\305\327\t[Ma\36S\255\341\337\304`ayN\330\365\26d-\3452|\276\325\34H]\360\220A3\216\364\367\30D\232S\250\332\63\26\307Lg\t\261\362z\t\231\35\64\227\204Z#\f\301\26\22\f\336\367\333w\302}\277\242\206\206+\230\213\24\254\304\354\363\241D\244\30\241W\221\n\245\276\33\30/\221\25\275\16\224\200jF\301\354H\310\31Z\320\vp$\247\36a\6\320\26\261W`F\305:\212s\35\254\224\244\320HQ\205\33\235`\272\356j\332\247\362\20\23\374\241>\273\67\"\30n\24\215i\323n\21}[#\353\332X\260Wq\306\336\346X\341g\34>\341\366Y\232w\207)\220\251\365)\241\274 I\230\331\340t\20\334\203PK\240B" + "\345\370k\323\61=P\224\70xRv\311\241\203@\272~\246\254\273+\36\5_\27\242\353.\217\310\272\32\64T\332:{\2\330\33\233\233#\362\230p%\310\202\b\204\350\26\63\242\25\177\230V\206k\253\4\376\200\206\262\5K\205&\372\377\v\366\250\362j\177D\276I\340\215\17\315\364\306\266qQ\277\375\312z7=N\201\71E\305\33\26f\214m\262\363Xb\365\226?\24\240\5\304S\17\350V\223\177{4:2c\311s\260\372\303\213\247\37\351\317\240\63\245\71\254\235\303]\334(\223`u/@B\t\274;0Y\211\334$d\233B\232c1,\0\261@\224*\215\231\314\310\256\264\365G<\315\305\243\253\317Abm\7x\357$u\262\203 \n)u\260\324\272w\b\362r+\217\321\260\372R\254N#M\255\340\322\360\350\341\377\264$kR\224\20^Y\334\n\344q\7\64\62\302o\340cG;\303y4k\204\231\202i\237x\225\334\62\333\353\24\232~\302\7/\206m\"8a\232Uh8\212\254\5\251\353\274\230\355\331,\202\3\25\17|\370M\23\67$_\213>\226\n\357\353\221]:\1\335\66\346\300\216\270M\373\262\242\253\360z`z\233\357\341\216\264\277\305-\246\370\217\240\17\314q5\235\2\62N\355" + "\234P\371\33\247\327\232o\215\22\324\276:\354o\276\207\341PJ\371_\335\346\371\320F\222\264\361\371~k\237\3\306\200\223|9\301z\361^X\177c1`\f\22\274\b\207\363\267AjP[\243i\335\4@\376\353\337\337S\323\32\304\345\263:M\347\256z\352\251\"\371\305\333\220\203]\250\v!\233Y\227\207^\270\272U\343\64<:\352\252\23\273\304\333\330R\272(\226C\222\231\252yx+k\n\\\7\334\"\304\245\266\336\33\344\211\235\201\274\306\372\366*\37\201\37nl\21\26\303\346\234\324C\315+\246\220\246\17\224\356g\334\212\312W\256U\361\306\1L\320;\255T[\322<\6(\n\323\v\217\343\254L21\261\267\360\6\257\223{Mi\211\330k\7\326K\"\343/\323L\262\221\26\343h\3\314\7\213\62$\252\372\207j1\226\330\60\211~%\255\271`\24=y\213\325\244\305\26\246\317\230H9\30\325\300L>\254\235\301\316\70\t\226\311\321\321\262f\250\36\377Lh\334\246\331O}\301\374\302\rT`\217\200n\302\260Ov6N7\336tzA0\32P\302&\365\200\256&\316\21\2\366\254n\244\372\232\345\231\352\244\363\336O\330\325{;{[\353'\30\250%m\265\225\6" + "\222\271\367Y}\215\315\270\223\351\32\371\312\250\215\332AQ,\357d\330\360\5\303i\360\230\321u;f\231\62\306)\232\260\5\245\265\274\24\21\260hPPx\316g\220\5\230\223sX\312<~\247\"_\325%\375H\206\356\240M\375@_\223\356\37\367\354\231\321q\304\214\253V\326\373y\253\263\345\vdv\356\204\277\227\33\61\304 f@2\351[\260\7\216k3\271\263s)f\210\62\232]\207a]bx\204\232\36\270\377\301N\371\230\331\372\322\r\33Y\260\264s=E\257\307\361\333\7\264z\342[-$&\5%\330\331]\377\342\n\336\357.\r$\251\37\354\242\313\314$\347\205\356\242\251\26n9\255\320\"\f\240\235\304\336\310%-\306\256\212\260\222o]=L\36\356z\4\34\244\200\304\333p(D\37\r\310\316\321\357\201\263\300\225\335\375\335\255\177\323Iq\33\326\314\30\270\271h\311S\23{\221\212`\2\236\v\363;\275\214\vW\351\232=\260\22\203\320j[\4j\17\262\364j\250\32)\347u\304\217\275\"5\34\t\340Eur\273\301\233\271\24\71\306\214\341'\232Y\221_\371\267\246}\270\233\0q!=U\230\250\277\273\233\305G\r\347\263\233q\257fZ~\376m\306j" + "\263\231z:\365\22\277\311\35\262\345\25\326\356\352n\30\224\63\362\214$\275\256QP\314c6\277\316\203v-\\\233n\266\322\20\5\24\320\344\333\254\25S\217UW\371\262\265*\265%O)\234u\16k_r\202:\310\316Q\255\255S\322\347v\4cf\207\351\244[\201hl\316\tm\\\f\205x\225\227Zz\303\60PB\345\"\245\226;\361\6\364`X\31\211\261[\27\203\0|i\314\24\303J\245\37\210\313a\343\f\316\261P\325I>\363\310\64I\346%\310?\250\322\270\250\310\222\310\246\351\247\242\20\222\7M\3\251\204\220\377\253\346\212\362Db\31$\231RPL\b\vR\231S\227\367\364\312\fo\205\263\300\"\224\65\276T\311\6\224\321\203K\v\331\n2G\366\\\256\27\315\t\"\31\353!O*\275\250\34\346X\312\343\32A*\301`\321\346b\344\201\24\344\223Ura\0\240@\205\306+\317x\355\326\230=P\347&\262\366\270\234\207\241\304\252]\332\33\361\233\334\267\237\262\363\373\36\226\314\31\67\vy\320\262\216\314=O\317\353de/0\237\237~dU$^\322\215\331\333&\266\226I#;\231R\30\242\265e\366q\346\62*\226\224v\363\267\250\252\200\32z\276w\f\326E" + "\363r\321\26\360\336&\35\334\344\376\372\352\25%\367\27J\"9\274,\272\314W\202d1\245\233\305\204t3\260\360\371\235\330\"\276\337\3\214\237\67\204\63\274\207j\374\4!\274\307\221\25\234\232\314Y/\263\60\260\272:\233\256\263\26\245\362w\340\245\265w\242{\364\343\316f\34\342z\355Y\205\273\250\223e\356\242\204\255\256d\25\2\352\300\347vSl\250\371\256\17\62\311\313J4YrWMi/a\204\355\373\210\254\23\374+\215uL/\303 yHY\341\35\226Cr_\rO\305(0\224K/gX\202\254\200\203o\260\222\344\376\271/\32\342\216\17YIkkJ\304\16\234\332\\\213\36|\307\214\256\322Y\313\272/\315\v\216S\264Lfd\212XO@\365\6\317\3\350\240\374\64\65\26\232\253Bz\266~\324\333\341\303Pp\315\31r\2\205\31\25P\325Z\351\337\275\v%\335?\344G4\376\233(\305\342\303\267\216*N\234\363Q\233\252\34\5\30\367w\365\327\16\377\17W\36\r\313~0\372\214\341knR\331\371\1Q\271\231<\333\27\242\373=2\337\241~\201o\373\25\262\247\27\252\215\215\215\b\345Lg\357_\344\336\236\363\375}\0\204\227\351\314\251\212\3\334" + "\317:\27\272A\256s\341\303 t\206\276s\312\362P\250a\312\351'+\373YVk\216\"\31\277\261\235\373\250\207\64\327\63C\234\264@\345P\212'\332kQ.D\207\206\236r\373\225\272,us\325\"\272-\324\212a\362s\24\n\4\36\t\237E\307\307\203\205L\v\343{\356\272\22\252J\326\366e\227\67\354A\251\334\242J\352\6\224\353g\372\275\255\250$\303\364*\347\212\373\337\252\315\217\264\240\63W\251\17\r\22\253\363\67R\324_\221\213N\254Sk\361&\277\24\332\31J=\254\316q\317\374\266u\353\n\21ov\253\tJ\273\206`\337\tG\2\212\341\f\215\357d\307\346'\322\30\235(\210,\234W,J\255\254\rGUf-\0\220A\316\256\242\341g\30A\257\346\353Y\332\277\344Q\351#\335O\21\261\230\231\\\t\246/\212\343\350\\\22\226/\357\274_\207\303\245\317\367\274\225\231X\226\274\205\263\317\336;f\354\344b\240NM\252\251^\345\222\0\334\1BM\246\335\261T\250Ii\243L\255r2\223\274\317Y\204\66*J#\240C\315Ar[\322\21;P\310\62C iJ\377\252e\232?\265*\4\356\244\6y_\234\241s\337\303\337\327)\233S\265\352E\353~/\207\317\bY\264\b" + "\237\376\273]\367\222\25\6\0+\275\327\320V\277g\17\371M\226\224\373\352\60i\225\20;v\350/\345ayr\0\315*\34\370\360 \315\34\f\305A}\346 \"\16\322\211\37\343u\212\350\366\356\1O\3\347DH\236\36\244\1\345{`H\352b\301(\247\7\347\21y\37E9\25Z\250\66#\236\17\237\271\261\63\251r\340Tu\210\223Eb\36\206\202\2\71!\231\n\202\315N\352\247\177\320\31\231\222q\301\313\"\221\16\334\254\244)\7\23\231\7K3\3\t'\340\333\62Y4T\203\350V\17\0E3\366%Z\225\317\16\244\337\311sc~b\356\271\204\236\35\242\372\f\205.A\304\375\310\216\31e\305\f\17\236'Q_\301\321\316}\201L\376\312\217e\251\\'K\207ig\247\234B\331\242\374\21$C\364\356az\221\236s\245\17\35tpK\212\17y\ra\214\66i\210>\4\30-R\4f}\346\371j\355\20\245!G\326\227t\0\372%W\332k\377dD\224+\324\0\21\32\t\222C\254/Wq\33\244_gp4\207\16\221\65\324\332\272\263B\275Y\276d2n2\221\67AM*\336u\347\64\232\362\61\373\311!\224\220\220\220\263L8\344|\201b\376a\363\65K#\301\263\4\235\220\32\3[k\366\64\2\315n\300\226\\\211\231\346" + "\241<\344.i$n\267\304\5\275^\4\31<\v\305\177\351\354s\33\\\t\313\311\4\262t\"-\203\\\331\374\341\207M\6\16\203\211^or\347\60\260[\221v|q\30.\314\37h:*yp\210T\227\266<\331\332n8\17&\32\302\364\33\263\tl\31\275\63\271\22\324U9\363CR\212d\366\315E\330\252\62\203\234F-1\"uQ\325\321\v6\241\243\227\32N\241\3$1&\264\244=\327\252\273\261\275!'\21\b\270\273\361a\343pcg#Y\355\246C\351k]\347G\244\351\310\353!\2}\310\t\324\364v\17\305\320,\346[\347\271 \373\304K\224\356\f\33\325\364}\27\315h\216\371\350\341%of\336\0d\304\371YV\323\211\256\v\306\37}\r\346\226\304\361\356\331\214\60\253=\355b\361\251\71\365\225\377\32\nqN\263\61\333\371\244\233ff\6l\276f\23\267\355v\316\32O.l\17\210S\342[`\26\6\31K\\+\23qhx\361Cn\23\216\336\302\27]!#\323\200\266gl\215\275\273\210\354\326b\356S\220\224\251%$\37\65Eg(R\201\1\270~:g\35n0\22\201\302]\247T\271\250\f\330\2w\221\212\236\247\67'k\356\304\300C\313B\335\242\262~A\23g\37\275\333\374\7\37\260J\333H\272\324C\311\344" + "\214\70\343\341\305y\375\71\352\204\376\330\313\216X\241\221\31\331\3\\\247r\222X\336.\376\61<)\314O]\260N\364\200\272c\3\270\\nQ\264\335\265\342\262.$?\330u\237]\246\352%\37\236\331dUT0\375ylBr\177\16~\236\306D\307xq\211\275'\363\222.\343\310\b~\275y\300\0\201\353\365\r\370\323:\3u<\210\355RS\236{5\227\255D\257M\\\213\200\245\300B\331i\304\35\263?:eZB\7\213B[\5\232>\264\256\222\34\242t\323\212\330\r\363\242\301,*\335\215,\362Se\216a\227\330\347\322\377\234\362$;}\355\261%9\322zR\202a\1v\21\1\34\63\333\332\f\207\256lK\31\331\350\322\220<\357\316\fTwg\212\60hb.\264\371\63\234\307\314\245\267\325MVz[\375\355\255\223\71\223\273*\22\342}:1\305\232\247\242>\332'\264\246:\251\264\16<\351Jo{k\353\215\351\373\271\246\64s\334\4\231|\330=W\\.:l\227z\216F\205\361J\311\362\342cM\36\367\336\35F\277#5\350$0\203P\314\3c\303\"\322\214\271\326\232\215\314E\347\17\227\257\67^\375\61\271c\265sn\224\321|\376U.9l2\344o\317#\205\342\31\222\63\356\232\0\204&\361" + "\211\367g\340/:\251[0/\371\365\321\217M\300\377\272\27j\6(\321!\306\32J\253\365\302%\27\352\337?\335\363\205\30\212\353\200\373Z-$\204i\373\317\5X\334\233\271\n\357\333\"\255\370\357\230\216+\246!\216\316`\221\230\362\321px\25\375X[\6\221(\230\225\16j\373\310\230\335O\346\336>\242\201y\375\356\34\345P\350\274\4\314w\223!\312s\303\361\5a:\330\313\225uu\324\353\357\277\335\221u\n\257Q\315q+\375\360tS\303\327\37\353\314\f\364}\341c\363,t\242G+y\330\266B\nexQ\217\n\177!_\346\362QQ\5IG\212\312\1R\347\71$C\347\367\335\337\343VgE\244Y\353\251lg\3\327\24!\30\33\366\323a\26\257*;\264\0\205\65%%A\222?\37'\17\344\374\353\242\5p\356ZR\246/\t\177.7\253\251\22F\234\27\304\340$\265\34\313HY\"a\352\335R\335\24\253\211_&0IVM\265\250\321\37\217\323q\335\321?\372\20\r\233<>Ny\307\20\212j^\350,\203\326\276D\306\313\23\201\275#\"\356\25\235l\317E\340\217\33\257\222\273d\205b\333\304\r\354/\351t\233\240\206q\345\364R_\322\363\266-\346\36\317X\24\306\213\343Qp9" + "\211\345\343\321\214\30\204\344\227\363\273~\313\25\326\227\263'\326D/\234\224\345\352\274hnZ\225\254\305OmXo\316\253\227\315\35ytLl\305\334\64\275\33\303\336\332D\303{\333\23\210~\335\344WTi\227\236\302H\225\223\24\273c\344b@\302c\212\344\26{x|\270\363s?yu\234\325z\263s\36\227r\323\263\210\v\375\224L2\214\313\60g\322\224\225_\6\316u\235+\362\4\312N+\260\4\235\354\376@\25\27\331\354\64\220\fi.\17\31O\214\321BFR\7y;\211\232\214A\315\273\240\302p\23\71Gf\344\317\32\211\366$\232\\\34\271\bZH\253g\307\305\267\331E\200\362: Q\372\224S)\375\372_;\247\64`\252\366VR,\345\357\217+@=\330\v8x\\g\245c[d\f\304\r-\231r\235\33\63\330\240\241e\351\271\300Frf\320km\304\4_\317\220){\202P\233\321\266\305\234\255\71g\317B\266.\34\63\0tN\374\60R\231\253dC\205\36G\251\247,R\302\34V\f@1,R3$\226H\227\274\273\205\270\241\255l\375\377R\266\320d\216$\203\25\303\276\2\37R\211\310e\tG\243,\341\1\223U\313u\355\275<\321f2\221\324s\371\354\231F5\236\254\234\230x\325o\226" + "\241\361d\4=R\234\336\240>\263\332i\25\4\310\267\251\216\362\r=\206_\371\n\331\203\31J\277\32i\306\245\342\327\245Y\313\224\374\22z1 \276T<\304)*Z\355\255|\367\325ep\205\316A\226\250\316\267tz\206\71\323\244e\356\344\247u\256\260\25j!tt\256\260\242\343\300\23gJ.s\342\373J\305s\\\351k\260\357\202\227\343\61\r\24\353r\342r\260\321\20\4\20\251\224\23\216N\227o)\312\371*D\307\205\304wd\31V\27D\371nat\21\313dp\213]jv~k\32\6X\325S9\344\27)wc&K\312\376\235\206\177\323\20\210\6\336L\331F\340\376@_l\207i\262\34\23\270\201\36)I\30c\24\327\32\357m\20?\242r\211|+3?\236\24{\363i\25\222;\372\215\266\302\253\177\374\310\"y\246\230\265\314JQ\261\61\247\243\203`\241Qk\16E/\322\245Q\243\26\364YZ\204\223\276\210\246\237\245\327\373\231\334\260\317\232\347\337\304B\334W\206;8\264I\305\310\36\373\210C\243\312\234\3 \4]\225\300W\337\64-Y\246<\301\6c\236 c\310k\210\311T\232\263\b\b\251\223p}\375\362%j\304\314\375\30\375\261]O\361\250p\274\274+L\232\376\306)vFo" + "\243\335\314~\312\6\244_\t\377\262\224\253\v\363S\365\245\30\244?-\262\344\262\364<\327>\331\253V\223\367\345\225TC\200)\375\246\225\370\260\376 \265\213P\320z \301\254\253CqLG\303\352N\237g\222~\264\233\247~\235\33k(\271\312\71\v\210\212\276\313\316%\362\311\241\333[rI+\322\346\267~\221\377U#\177\366\367\262\220\370\66\354\315\352\234\202\277&\337\365]1eP=\340\7\244/q\232\304\60\236\344.G<\251\221]\374\302n\247^\264Xt\267p\34;3\227lPuE\272uT\32\371+t\232!\337\4\340I\27\262\64\273?&\367\372\243pQ\347L\300\237\31k&\367l\373\334\0\336l\240\37\62\376\26\30\6\261\307\6\rm%\247B\331\354\230\317\322y\370\243\232\342\32\376\276/s8\342m+\273\214d\305\n\204\37b\236\250/%\363\365=\244\302\260I\243\254\221|\246\314|n|\31\342\272?N+Ia0\274t\320\363\376\270\26\26\345'\317\345\233\376\31\344\320B\333Ph\nm\345\355\276\30c<\213\60\225;AF/\265d\331\30\341\215u|%\326\246?\bU\345\345t\233r\2\64\224\373\367\312\0\253\62\"c:t\251\267\302QL\260\21\344v\373S\23" + "\270\371\230\37>\303\307\363\315s\210\271\251\364\345~\36\202E\306\351\341@\323\324gL\306N_\6\65\275\204q\0k0\230RgQ\20\37\225\0\27N?dab'{\340\364*\2KS?\354E\230\332\214#\327Z\243b\n\232EK@M\v\206\360\251%/\275\70\257\346\267c1\227\346}\263\255Y\220\255wT\320F\307j\247\236\251\304\66\267b{aB,?\27\34M&\22\363\361\353h\375\256(\243}\314B5ox\302MsqT\231\1\206\221\216\360\247\\\32\213j\345\26\25c\251OG'\335\344W\375\251\234>;&\313\354\335\371\34\v\304\230\362\306X\230\373\26Z\360F\303X\363\71\66\324\236J=\341\232\253\322\326\325\274fu\322\234\232\222g\271\362<}G2\327\231>&!\377\360B\234\331#\321\303\216;?-f_}~M\33EQ\v3/\221*ZI\260\274\230\323N\257X\301\211\305\262\255)-\236\306|Ngi\265\20\275\377\264\255k\321\320\303\233\242\217\222\303\255\21W\320\275m{\333\340\r\233*\370(\326\244E\376\345B\367\253\326T\224\26\327\306\334\203sJ\357&\206\342\235\67\252f\7/\266\226\254/\206R\6\66\314\5\275\253\fQBG\370\251\63\66\244\210z\f\331\356\71\251A\250" + "\305\2\251\31\317e\216\27`\265\226\255\0\3E\323\rW\242d}\306\266kG\220\30#>\343$*) \311k&<\241{\0\206%\243\236\260\261\370\177\341\24\264\234_\340\351,\265\275\344\201\301\32\32\214\6\266\205\233\215\205q\2\32~1o\230\370?\212\254\373(\245\347$\314\243\330\352$\f\351\273\365@\340O\214[\334\16\25\335\7Q\352\337\217\6\216je\222\350\222h~\321\351\374\250\311\211\210\266\365Z\356Tqlv}\265-\365\31\263R\250r\232\353)\326\223\320\371$)g\210\374EC\337lq\345\63\70\361&G\220\371DZ\355I\314ZpoD\211\313M\331\66\347=,\344r\211\371\240\353kI\b)\217\307\261\311\364B:\22\362\2\332\360w6\363\322c#\252\272\262r,\326\247)\215\62\36\320;Ri\354\271\275m\363\217\377c\273;\247\65\257n>[\266\200w\30\235%\255Oe\255\251\374\344\361&8\211z\31k\243\344e,\346j\340Q\265\314 L-\250\274\311\310\22\216\63\71\7\352q\fJ\302vQ\30S\2a\361\333Rs\5\325\207P\304c\264\201\215|\212\27\201U q\365\202O\327\273\16\303\346T\326\300\277#\243'\247\251\317\340\363J\215~\212Z0-\225<\260\244" + "\5(\336\301\277F\24\263\376\65\20L\303\347\312l\252F\372C\277\200\25\234\27\247i\211G\354\64\255!*+x\370S\347\362\364\242\245 \214A\321\36\n/3\27\316y\224VT\265a\352\314\325q\277\312\n\330\370\352\25\23B\361\233\370 QhIm\301G\207ZP\334\363\63U\245b\366\316\264\232\366o\21\350\37\247\304\272\364&\23\331\71\335>:<:a\346\256:\201\244Z\213l\353*5'\373\237\223\207\266/\361\17v\32\361*\v\332\340\323\4\16\300\307s\243(\24\355\337\271\335ou\225\246\22D,=U\21\336\6\273\247\35\336{\312\344S?\36{\353\337\344Y\24$d\323\312v\324<+6\244/\244\376\365&qzD\305\333:H\271\336^\17\313\356\305\314lz\36\202\"\1\324L\340Y\235\32\371N\fG<\t\30C0W\313\331\22\377\377\323\347?j\3\254]i*L\301\220\247~\242\241\362\241\64\204\62Qv\225-RYR\251\351.\246\352e\276\314\303\336\305\310Sm\266\61\377p\336a\202I\201?\267`[\311L\204\217\305\263\263e1\307\3\230\n\207\265\325\357f\323H:\266\215\242\252\210\61\71mSS<6\245\266\241\344\353B\203\30\245\301\275\20\240\376]$\344-V\352\0l\3\61`\276Y\261\33jA\22;\24\244\324\6\330\312\224\277UC\373\366T\255Q\34~\332a\253\65\16\310\263\375{\311\273P\367\203\321P\30\250e\330\237P" + "&\332D\215n\242\b\331w#\330\350h\232\t\23\b H\263\360{.\22\365\255\233rw\305\25\340D\374i\223]\226\300\372Y=\276$\231\227\352\234\353\316\323\306\65\323\34Z\362k\262\370\61Z`K\257\336\376\326P\272d\22\274f\216\60\37\273\214\71\60\63\320\2\342\353\344\250'\31d$\276\5\250C[\252\352v\21\63\263`\333a\343\313\340\273\2\7\257\24\21BU\16\222\37(\222\326\347\204\61\237fZo\311\264?F\265\373&\206B\331\274\327$%\271\27R\227\63\63f\326>\354\354n\231\7\16\27\7h\363\302\374\223+7{/b\220/\256\312\205B\271\62\240$\344\306\63\3l\301\257am\352Q\247\273\335=\374\374Q\0\20\242\221\275\234S'\257\177B\266\306\367\34_LK\331Y\203\30\277\265\205\"r\25c\346\3\343\241\366\225\266\27\344\322E\35\363a\32\275\332\f\336\371\240\320Xv\324%\277S\201\313&(;\314\1\306*\3V\nZ\311\235\356\277\246\20\377\370\r\2g\254\352Yn\n\240\372\66\236\265A=8}\216" + "\267\24D\271\256\27\205\212\273\325,\372\203\20\16O\315\211n\242\24\212Vh\312B\215>\211|\356\230T\220\370\33\362\257\27\v\360i\244\277\240Z\372\344\1\331\264qY\311\4\250\361\351D\fV\205\262\321\34\335X\224\332\263O\346\334yh?&\214\361\327\252}\314\356eAB\204<\353l\fSF\366\366\207e|\257q,C\217\2\30V\327\210+\271D\342\337Z)\211\0P\375\62\22x\30\303\263,\303$\343\337\4\265Y\v\243\210\261*-{\245\340o\v\377\263\222\310\210\250z\302\310\250)\331\234\277Q\326\354\257\327,\241@?k\t\346\276\345\273\302\261\237\346?\352\34\227\63n\353\320e\267\376\36\371\336\347V;?\376\fD\224\n\374\f\312\270N\36}vy\230*\270p\371\263\223C\363\273\317G7\236\203\317!\247h\355s?y\374\317\360\222\310-\367R!?\rUl\261\215\60\71\377\224\233@1h\3\257\277\66\372\222B\276\4\205J\312\357\361%\315Q\350w\277\244\327r\232=\377\342\262a:\17\27MV\276x\305\322\30\232\376\363\227\211\237Q\"\234\263I/\212\212K\226\277\314\6\66\205G_\276\234&\377\17", + 13106, + 21679, + (const Bit8u*)"tU\205\177\342h\20\5\352\204\342\324\241I\341\313\27E\2\341h\272\276\334v/k\354\225\272\260\225sw\27\264\270\375e\347\177\317M\310\372/\251\240\63\363\336\350\233I\270\363\333q\313\326ND\312#e\233\16na\274C\26\3\333\341l\352}5}\177\326\360\373m\231\311eN\213K\333\231\17\212\221|\6l\327\n\211\17\301\334\367\334\274\30\265\242bj\214.*6\\\274\61N\26\357l3\271C\252\230\317\263\305\275\25\256\370~\200/\376\344\27J\201\240X\242|\261OR\341\254\17\202$K\321\211)\251\244LNO\33!\3\322\23\200\361&\334\216\325\270%0\37\221\34HY\245\203\1\214\347\251\322\35/\373I\212\3d\36P\5@\27\1\71\234]#K[3Li\337\36S_\212\357M\224\n\32\300\356~\244\364\205D\227\307\217q9P \267\37\60el\245\312\t\33[\276:\306\225\37\315\362\71Y(\237\20b\371\343\361X\371G\247\236,\252L8\244\n\261\265\3\5\372\363\257\270\345\357\177\"\322\237H\371\213\16\376\215\361?d\205\374\227\251\260\377\351\266\224\352OV\244\374\266TQ\266v^T\b\370\241\312\233\23\64p\304\225{\223d\345\261\304Tv" + "\347\251\312\351\34[yw\221\253|\242\360\225\257\27\204\312\217V\261j\265\305\252\323O\261\223U\347\324\214T]\232\266\33w/\7\265\224\265\346\71\f\277\376\356\1S\264m\v\360/~\367 \234}pjj\271\235\247>I\261Uz.\234u\1.\243\"\257\61\340:S\215\275AU\225\r\266\70\235\340\252\233\210\257\36\320B\365\30\213\325\17\230g\244\277ay\251\66\303Y\b\363\221\242j\213\241p\326\n\346\236\204\233\b\304-\241\325\210D %@\7C\30\257\222\271\5\246F9\250Z\214dkI'\7\257\371\334\202PS\346\305\357\200\343\302Z\201\216\251\350E\205k\261\b\252\275\271H\327\336v\340\332\311\34Y\373\30\374\277tR\265\37\223\354\345\224\207\273\234]\204\346\202\377\r\361\273\233\261K:\360\224\352\345\33\201\65\351\362\355\273\233N\343te\346\362\243\71\352\362\307%\266>\265\310\327\227\62\342\1\32\271F!7\337\212N\333\207\224\225g\264\375L\235\224G\26\4\245.\31v\215\325\66@&\325\373v=s\237\377Y\346>\214\375\200\71\62\260B\17\b\23Rb\235\363\353\30\214\n\365{\26\245\236$P1\20\242\353i\37\256o" + "\370\311m\202\251\337\224\251\372\375\264\266,\365\307V\276~`\203\310g\5\217KP\227\222\365S\" i\17\332\202\350@\27\365/B\253\250\376\313\25\272\341\f\341\306*d\224a\32\211\71h\304}\266q]\342\32\367\240\21\31\241\261\27\20\33\307\4\344\1U\214\251\367\277l\234\247\323[;\356\227\32\"\242\306W\223tsl\2\67\275SdsMf\232\361(\325\\O\262\315\333V\256\231C|.%4\367\261\330|B\307\232\237h\303\3M8\331\213[\16\216\"\322\tR\366\350\340\1\306G\344\366\t\223\223a^\374\\\363\253c\276\371KA\357\235\324\232>.\20&\323\254y\264\202Z\235Y\325o76Z\327\343\60\352}\263:\353\235\32\331\370g\215mBL\213_\245ZR\204m\335\266\206\263!0\346T?\324\201 \342\26\257o\324Y\202\16z1\366\221\255\307\362\373\255\343\35\337i\353\375-\357\207\332\303G\332[\235\6\373\362\351\60!\224a[_\302\370E\327Z\277\"F\225\247Lh\233\26\245=\231\6\260\263B&B\251\t\227\241U\333\351\242\332\301\b\333\306N\256\35%a\344\375b\373\252\316qQ\273\64\36#7\252}g\226m\337[\342\332\271c\276}Z\20\332_\355\212" + "\235\311}p#;K\23P\342d'd\35\223:\234m\334a<\365N\246\266\350\32\25\334\71:\244\310a8\f\320\24\250\1\327I\257\361\235+^\210\17\261=f\273\333yK\322\317\32\311\1A\276\263\35\21\200\244\330\71\2\307\360hp\23\36\303\243\336\71\375W[\231\316{.\276\223\16\n\235\257\316\305\316\367\27\261\316/\313\341\254_\237\207d\327\25\264\30\327\360\273\321\370\301\325e\273A\22\316\216~\200\363\60J\232p:\r\21s\377jL\17\20\327e\227\205\356zT\354\276%\202\3\0\371\f1\272\273Q\246\373\315\3\266g\225_\227\301X\225v\217\332\234@\24\310\341\v\35\204\251\224qD\222\221\202\311\36!3\275ED\365R)\266w\3\277\22\243\26\243\365\261\177\27\350\276\30\312Y\363]\343z\233V\276\227\267\215\334\242\224*\276 \335;\17\240\336\7$\335\373l\r\367\276\231'{?\271\231\336oa-[\300\344\0\223\7L\1x\213 \221\341l\0\256Z\f\312\253\21\226\64\371\233\215[\224\r:\250`\274\241\365\24\374\264c\226V\370\372\306\206\0\321D\210\6\270\21\25%\373\66\321\342\64f9\307\344\346\301Qh\375\32\25\373\313hD\24Q" + "\352\65\273IR\232\274i\323\5Ov\323\274\65M\245T\347\213d\373\214\r\365c\343t?5\206\373\231\t\262\177Cf@\232\250\376\235\r\266\377P\342\372Gi\355z\366\317'\305\376\307W\340\352Y\365B'\373_\203\316\17,\323v\267\311\346\63\3\217<\222\334\301\312\r~\200n\352G\343Tk\320@<\331\223\6\267\17\216f\22\203\243\7\226\270E\214F\244\7tP\304\70J\346r\314\340c\231\32h\372\177\rVjs3n\271{\32\221\66\221\262I\7\357b|\252\25u\360+I\r'6\331\3/\360\341\324%\273\61\v\4\245\23G;'\33o\361w\4S\264\5\4\370\27\277\3q\260\1?S\225\33e0gz}\277\223 \324\66\320\201S \r\355\356\260\371\251'@\342\34\354\320\3!\23\204\t\32\67\244\242\20\f\226\"\f\302j7\331Av\310\372\264\374L4\203\35&$\275\360O \261\331\227\204\67\217\206\267\266Ax\267p}cg\4\7\v1|d\23\206\273\362\63\231\271f<\232\303\23\231\31\236\37\376O\250U\367\267\215lQS`\33pk\f9\321\70\26Ku\f\362\272\366\362\226\321I\352\364\255\263\345\274-3\363c\306\60\63\63'\37\343\361\347yw$[\356\357WM\367\17\207liF\27\316=\347LP\373M" + "Zh\177\305\2\342\266\251W\310\374\361\20\201\365)\4\312\256\3_\n\203\36\255\202@\314\rX\257\6\320\230\371u\24\304\270\216\262\70\352\360&\364AD\32?\\\7\212\345\270\215k\257J~\200\316\322\35\301b\246C)b\1l\250;Q\256#Y\210:\216Z\365\366\376s\225U\372sU\266\275\315*\354\272\60\270\267\352\340\336\232\233\364)\356w'\33Q\307\271\246\334VN\356%=bG[\nu\334\v\361\360\35\330aXcwW\345g8x\367 6\244gPGL\34n\216\3\250\327\301\207)\374/\fv\314\352\341Is\364\350\364\231@\247\345,\335i\207\273\235f\331\63\230\311vV\236C\235\r\255|\347QJ\350\222\320\32\t\331\371\221/C" + "\37\332\207*\\\345\221\261<4r\322$b>M'\304\34\237\226\270\221\v\202\301\245m\370\322\221\353\5&\242\211\61\362TA#\257k\r\\\214\274\200\30\265\231\351\321*+3\32\262\260\243\337\332\250\321\363e\334\350\r\5\265_\360\362\231*a\364\221O\34\63\227k-\6\334\322)\217\331U\265\64V\t\32o,^XL\20+\212\236\20\303\20\253~TH\257\236\17X]\252\225#\351\265V\265.\311\224q\354\\\224\377M0\254q\256}$q6v\255\22\215\335\255\22\306M\212\70^\35\225\306c\224<\376\205\v\210\210\377b\303\r\34\332\361F\n\207\326]\v\372\345H \354\246\23\265\252~9\202\31\316\70\204v\374\225js\r\334sh\215z\213L\2\261(\23\321D\21\17Q\1\216I\26x1m\333:\v`&\234\325\354\204\257\6\217\351\t\316\7\232\251\212\237\210\70\4\370\263\b\177\326\202\254V\302\304W\246\22\225u\227\341\"\252l0\325Q\37\0\334\63\304\365\60^4\221\256\224\237!U\234\320\f\17\256\246\356\306\5&2\36z\342\207}\314\304\35\63;\361\330BM\274\371\232\373\333W\24\32\273\346\206\326t\b\223{\24q\262r\17\314\223ry2P\252\256\17\365" + "\340\210L\362.\337\303\311d2\331\334b'ef\362\202\37\201 \345'\257\302M\356\327\313\31M\25s\302q\231\350\206>\vc\21\375,,?\v\347\340\320Ety\333\v\316\252\310\344\302#\213LdT1E\366\267\325\246\64~\b\250\311\311'a\1L\0\21L\0i\220\21tvu\375x\234\204jq)C\313\355H\7\337\6\303\7\300\b!O\25\306\363[\324\273\224\351\363\177\303v\273\217\301\366\270)G\5\232\362R\374\224\337%L\261~qJB\222ze\b\317\352\300\324\247<=uL\fN5\v\376\251\33Rd\352\61\315\206\247+\30\216\324\247\250?\210\227\304\333w\346\217-\246\217\71\350\351\237x\230\351\353~*]\215\265\316\364\3\33X\b\326\340\357Nfg\3;\375\306\302\315\24\25\240\277\305\213\370\31g\241\360\376\274\327;\333VV\340-\364\24U\344\b\360L}9?#\246\204\231\220CL%\263\\\326Y_\343\360\331\215\247\334\314\211\4\67\323\222\344!\346\2\374,\302\317\260>\30\222!\347\207\234d\346\212\306If^k\234\4\354\221\367\367>[\222\343&\263\236\2\32\366\235\337\60!u\nv\310`ii\226\16\221\65\260\316\320\61\360\344\315\67g\333U\343\272>\350" + "\341\301\62\23f\5\273\70\33\364\202\246\362\350\363\256\364=\201x\b\232\367\b4o-4o\35\225\376'\7\243d6\241\360\277\243\354\365\7m\340\232\220\320F\230=h\26g\317`\353\235\214\201\61n\266\65\16MM\v\263\227\316\210\263\327\233\244\331\207>9\243\372\374=\351r\4\357@W\237i\"\250\62\205\373\333\355\375`_p\302\354\33A\234+\346\341\201q\333\221\374\20\r*\255\332\71C\276\273\346\34fz\256\326\312\316\t\26\f\21\375\301\30\232\213ig=s\311\250\70w0,\201\237\205\367\4\354\205\201?;0\274)\r&\217/\0#\201\206\301\301\300X`ap\250\264}\356t\r^\tN\344D\230\36\22L\17\371\347QXu\217\377b9V\177s\337\27\233\302s7?i+'\253&~\356\215\"\302Rzo#\370e/\301\35\206\60\324\2,\267~HH\260.\0K%_/\363\60k\347K\255\314\274\333\302\316\327\332\60\335\311\70 W\24\344\n2JE\346Y\30\252\363\7\n\213\r\23\v\246M\224\317m\211\322\35\243X<\367\241\30\313\306\245\371\223\262\256\326\214=\263t\tv\213!\252Y\313\21\n\311\16\326\n\245\236(QT\252\215\233\317(\360Hu\302\374e\213\70\177\337*" + "\315\277\263\311\v\245Y3%\0'\235\v\325\300`\27\16\24}B\214\342\0\212\341\332\222\376\34\363\310\31\207\66'\210\320\275p\356\b\267p\351\230\256\357K?\322bz{\251\272\244\314\350\264\226J\227q\v7JP\27\362\360\v\367\303\272\302v\20\351\306\242\71\n\23\232F\213\305ac\322\201\357p\17\217\331E\347\36\254\321\35p\22W\355\v\204\35\352I\\5\313\372\250E\240\343\177<_\201\376x\335\303/\212eB{\201\"\302\253\376`\215\4\21[\214\230\242\371\365\27\17\5\350\271\203\16f\261\261\222]\274\261O-;\5-\276N\362p\334%\314g\312\304\245\222\230\264D\371\345\245\375Ylx\264\244D\343&ox)c\242K\310\265\253\307\220h\246t\237\372\237\264t-\245\272!\362\217\235\0\245\265\201\252\350\366Un\"\1&\262\60\2\205\245\67\tq\271(\371\36\21Yv\230\322Da\323\201\16@\345ek\30\323\254\34\210\327R\201e\246\224^\216\326\61P\231\354\362\267\345\370y\226\317\\B\313-Q~\371bXX~Ec,_)b\344\225\32\66\353u\255\60n\0\251\262\22\25\303\213\211\346\245\5/\3\355\213G\333J\342,\275\362u\232Y9\336\314" + "\256\64\303#\266\251\216\371\312\371j\36R\"@)\250\313\334I\312+\217\\\301\325\62m\263NX\346\312eX\206(\231\23\300\227\257\36t\231\361!)\231\236\302\32J\36\354\311\307\200\67W+\233[n\341/\331\3w\362aH\34\255\242X\226L\365\244Y\376\270L\350\237B\356\67\t\233\4/\371Y\241\232~\22\tR\240}q\333\274G\f\27\315\36\272\363\372)f\225/cW\203\237Q\253_\231\271\325\26\vZ\275c\345W\37\333\204\325Wa\355\340)\"\377\375Y4\270f\342\264\23\241\222\310\332\36\232\t\257\371y!/:\326\276p\323k-^f\355\256\207]/\254\300\262s\275\66\216\326\345\22~\375\363Ra\375\224\"\256\377\264LZ\177R.o\24\330\341F\301\r7\362o\310\376\310\306\341\312\272\360\306\323Z\212 \334p\262tLb6\231P\216wl\6\25~\363@TG\217\234C\261y\30\316\62\66[3\337\227\33\307L\301W\337\334\274\237Vnm\276<\253h\327\343\f\252`F6s\371-\213~b\376E^\347l\331\213\350\255\272B\26X$\16\363\226lF[q\v\277u\310*l5\332\304\255\266\2}\5\274C\206x\226\34\203\274k9,!\37\340D\21\34\305\250\222#D\370T\214[4\307ub\255\271<" + "\367M\361\70|.\353<\377\340\213\67_c\343\260d\5\264\243\27m=\266\363\277A\274\260m\253\307\t\337vf\t\253\254\232\203\24b|\24\313\"p\347\312\205\355Z\4\302\61WD\211d`\356 Co\213_1\333\61\236\335>\26\241\322g\270\237\273\233\320\366\71U\367\v\333\67-\352-\357\27\311;\266\342\340\316\236,[\203\326;\335\250\266\336>\343$\271!I\265h\7\16\254vjB\302\216D\213;1F\202\277\311\317\334Y\240 \6\62\252}`\366b<\226\62\354\61n\347\v\270w\252N\200\357\"|\307G\314\307\225\310\316U\237\tN\334\343\261\300\316;\226\336\265\213\314n5\307\16\62!8*\214\303QaL\332ehy7\301\250\237?I\300\246(\320\7\205 ~ha\267\71$\302K\202C0y\367\202\250\356\364s\356c\236L\32\353\6\262\274\204\\A\236\31\362\7\264\312\6`\"\377\37\315\356\255\230n\212\226\31\23\f7\236f\273\317JpV\377O\270U6\264\261m\321(\22A\233\244M!\311\0\343\63\4\206L:\300\65.\251\27\bmRw\227\264\327\335>>ww\367O\317\37Np\327\b\334_\363\366\231\231\b\217\236<*DG\316\71{\357\265\327ZGSh9\274\254\251W-P\335p\206\60b" + "\310\354b\207\34\272}\7\342\251c\310\343\362\71K\320\336\177\352\276\240\256\250!\376\"?\324\215\310!\34\341\304\374)\322\r(\226\312\61Sd\365\363\20\305\315\270\303\375\360\213g\374n\342/\217\334\217\207\216\373\334O\206\6\335\201\304\320U\267\353\351\320C\267\7\371>p7\20\355\376\325\267\255\361s\335\217\207\336\71\327\375d\330\f\r\214\346\211\300\322\333\361*4\200\177\212\250a\361\344o\276\30\232\226_\303\n\5\24\323n\303\345\354\341:\327\235\310\212\n\213\60\237\351\323&\16\253\361\3\364\33n\272O\f\213\62;,\335\374_D\33\34>\372\22\272rT\344\207\7\243}\322\360\203\227@\341\305\373a\240\3\203)C\300\235->\343\360gFr\244\332L\215\370M\17FZ\255a\230\263\207#/\204c\304\310QMq\36\31T\370\221+\341\304\310\233qE\374\36\21\177m\324\240\60:\n\32\265\205\303e\225o\216\62\341p\205\r\307\64\20\0`\331\321\236Fn\264/\316\217>\210\211c\25\215\371[\307\214M(/9\340\272x\240\304eh\371;\n\312\v~\t\252\340W\274\354\315\303\61\314\245:\230\61w5\322\327tJ\1l\"" + "\310\227\63\346ovIcA\247\241\32\7\244\306z\345\34\257'\214\305.\210c\327.\345A6\20\327]\320\24t\221]J \207\b),\225*\263\300`q\300\245\vc\17\16\211\305\275h%fn\265zQ\253\67b\207\33\367\225?]\204\3\375\244\16A\231o\177\244\64?\31K(\376\304\330'J\323\323\361\32\245\61/U\342h\t0\347\350\270\263\204\343*\347\376\70`A\34\235\306\316\301k\371\245vw\274Q\361\222\343\341\303\324\237\"\255\364x\217\244i*-P\26\275\354x\237\223\33\277\\\313\217?\256\6LtB|\357xp\374\3\17R\301n\270:&\234\"\5\260\200f\260N\255<\357\203S\340\300t\31b&|y=\241\275c\202\354\37\264?\227Q\234\200z>q\v5e\222Z\256\275\266\322\67\r!e\303\311M\371\205^\223\207'\23\t\216\274\314S\23\37\260\364d\31\243[\177&\35\2\67\351\241\370I\216\26&_\274#N\276\bJ6\251\315|\201Z)\b\320\203\64}\26\b\226\233X\202\245\230\34*\20+P\262O\36S\225\373\311~\202\234| \241\244;\371\246L$-$\233\254\245\70x\f\306<\335)\251/\326=\326\64\\\343\235l\274\362\177\302+\331\212\62h+\227<\"\361\311\30\233H^\n\323b" + "\362\276\\\230\271z\35\361 /aK\362\365\n2\371\261\211\232*\263\320S5e\201\251\303\22\63\305\332\211\251#W\330\251\223\365\334w\210\16\60\323\200\205\60$\202\71&8\25k\323ov\352\226\313\247\336l\t\373\304\236\244;\225 \311i\vMM\37\244\350\351\66&0\375\242\213\231>\311\302\374\67\263?\366p\334t\254\272\340/\bN?\20\264\23\1\226\26Yi\372\355*\276\256\24\t\5\351d\306y \17uQ\321$f\374V\36Fu\346\b\230\342f\256\231,\30]\365\315Zv\266\334\315\315\272\332\371\331\206\372\340W>\255\326\\3\17K\30yQ\250\302\225k\321\b\251^\301\222\2\263-H\206\341g\217\320\302l\17#\316FY\220dJy\204U\242\202\bi\224T;\213Qw\20\227\1\234M\b\222\263Gs\252\302\205\330U\307\f\206\214z8{\343\200|k\366\215\372\274\343\262\25d{\214\232\65g\360\60s\16\67\61w\320\311\316\321\366\307s\222\335\315\317\365\370\304\271\223:\272\24@\312\310\373K\366&C\344\270\30\4\307\305Yp\\\364\203\343b\200\233\213\366\ts\347Iq\356\1\225w^\340\327\r\30\362ZK\320\70\250\314\350\360\35\36U\225\30\306\257" + "\226u\261\303\242\244qZ\267\201>\245\71\274\343\203\231{_\21\0Kk\t\201\0\67\345|\31\360\310\363\16\212\301\301\17\36,\362:CZ\6\266\260\230\1\336\317;Z\357\301\253\70\2\355\371\344\231\2\205\30r\200\303\17\71\300\345\261\302\21e8\242\f\237\327\17gG\345\307\324f0\232\311.\23\325h\244is\0h\33\6h\33\2(\34\26\36\353\"\31N\243$\346\353^b\347\351\32\360\211\30\371\371\27L\302\374\t\263\70\37\265\240`Ew|\325j\320G\336b\315\215\274\205\246\255\201\250_\230\177V%\316\277\343\313\347Z\254\341c\301\250a\232\177\274\356\343\377\361\241kO\377\211\f\345\255\6\310\n\256\60\252\b\373\345\32\27\363\207\346\60\261\340lc\27\16\6\271\205\26\211_xQ\26\340\65\275\257\321\71\251\205~\201\227\26\36r\254\r\207\\\276\302k\20\33\343C\373\t\221n\216\244\201\256Dr\335\363%/YGN\370Z\250i\257\225\25m\206\262\362\26\251\222\354\252\240\32\313h\272<\20\257\4\223U\5 g\33\0m nX8\21w\212\301\221\37\240\342X9\370\307\303?\365\242\61Z\314\302'\375(\323\351\276\67U\315R^D\315\301" + "\242\305\25\220\26\275M\30y}Q>\0\354`/\261\330\25)\320P\30\344\216xL\31\5\202\270\330\243\343\276=\35\367\342i\27\271\30\v\320\213\327\232t*f\361~-\273\370V\\-b^T]\356\336A\376\fEiY\252%\311%\226\242\226^\244\351\245K\255\201\245D\200\201\327\210\245w\232@\372\361r\313\266v~\331\25\22\226\233}\342\62\243\367\b\315\301\345W\231B-\304\362j\313\347\340\213\327\250;\21\62\256\25\304\22\314\16\64\201\270\3A\323\361\t%,\277\326\232\257\220X\324\210\23\340q|D\210Y~G\326n\312O\0\302\300\317\376M@'\300\37\230\367\237\301\204\202f\371\243\23\305\336n\34;\242\373\356\300\217\350'\260\211\16\t\270\373O\23F\367\375\334H\321D\30n\245\32\374\63\230\65\263\342\213\63+\254F\233V\303\365jnRws9\244\221\62\65\201\224\201\370S\257\63P0\20Z\212ih\314\245\230\6D&G}l2&\243\64\23\\\221i}lWN\221\304\312\65\206[yD\361+\357\221\"\324\363U\273\337 \255\276\34\360\340n\20F]!V?P\223\20\277f\325\273\34\324Fj\347\355\215\344\316\333K\323\21\315\274^\3\301t\23+f\307;\301" + "\334\221\7^EH\21\264@\244\251Q\240\5\26\341\304:\25'\256\271\366\340\304\265\306\234\210X,\32\326\243\224~\274m\215;a\330\227\vu\216g\355\5\231]\353\tqk}\34\277v\215\332\233N\341Xko\203ao\275*\332\237\337\244b1Z\315e\246r\213f\25\226\211\365`\200]\357\64\t\360\30\271\357\20:\252\342 T\255\206\272\62C){&0e\310\236\211o\257\327\7t\b\304\200\324\200[\336P\232\b(M,\224)\16\324\5\36\324\5\1\324\b\21\224\b\335G\332\201v_I\353\327+\r\330\203\254'\16\242\252\311\256\277I\357_\275P\261)4\24\353\357\263!\\\306\346~\344\264\363?\362\70\340z\355\30\235\0\210\251\f\274\215j\377F}\213\333\216\241\234\204/re\32\304\f@\355\300H\205p\234=@{\203'\311\215N\212\372\335I\232\376\335#\6\21F\340\62'\300e\316\2\224\323\232\n\5<\6]\342\306\361\362\340\67\31\243\336\374\177\361V8\34\213\347Hx\374V&\233:\t^0\f\37:\274\177%\325\60\33\321&\330-\341e7\256\65s\33\217\215\374\306\33&a\343}\263\270\361\231\345N\244&\24\4zo\263\254\336\200\1\16!b\323U\215\342I\330\244\16" + "\210\233=\236B\262\354\330<\7\353o\363i\377 \266%\4Wd\37\273\325&\353,\2\316j@lui\275K\301k\320.&c\b\354\241\224\26(\356&\266\372\214\344V\314Lm]1\321[\267-\201\255G\22Z\352\240\265+\0\34B\334\326\33\240\234t\t[\237P\342v%\35\334v\345\366\315m75\324I\333\212\303\277\27_\205\20\276\252Uk\27\34\37\61\301w\241\5\274Sd\205&$\342\307\236(`\356v\16~Cd\303\376\254\70\354\317B\221\30\204\25\263=\30\213\353\231\1!\211\355\253\3\344\366\235>j;\321Ko\177\24\t\244\354\203\f\264\272\267R^\371\240\212\216R\301\374\214\247\224\262`*R`~\317Fu\3!\246\252\0YE\200\70\17\207\321\206T~\\\34\240\60\373W`\366m0\373\26\230\375\262\233\320 \333\36~\373N\314\212B\31[\336R1\37\223\272\345\7\nN5\0\300u\361\251\307\310\350%\24\233\376Ro\221d\352]\232J}@\321\251\217\231\300\257\36t2?}5t\v\316\241<\211v\306\22\251\317\224sO\323.\345\274\32!2\v\220\26\25-)M\233\255\365\270\270\233m\310\20?\277\\\255n\"Jw\270\370\364\313\315B\372X\35X\b\235\301t\314\255\261<\35\351\233\265" + "\36)ch\254*,\322Ls\214\314\210\36*\323\331Ng^l\bd^\t1\231\201>\30\231C\\&\36\341\63\67{\205\314\343N1\363\261\242\247oL\236B%`\277\341\f\361\243\271\335\256D\361nW\34\276\6\343P\230\310:\332\271\354a\222\317\22\224\220\245P%C\374V\226\67\260R\266\223\341\240*\272\334*\307\352\6\25HK\237-\5\3<\34\363k\336\302f_0\365\253<\234\71\f\205\n-\30x$~\315kS\277\307\262pq\334)2wa\30\25\235\313\36\205\253\211R\5\233\r\336?\255V\315B\240\26\6+{\303Lf\23&*\373\201\205\6cO`\307\31gv\16\221\304N\7\305\356\f\310\71UT\330\271\342\23w\356\235\314\263]\252\70\212\335\v\202RW\372!\316\233$\354\274N\352\276\364\332\22\335?\1\312%\233\374\370\30t\34\307\241\343\70\271\267Db\205I7\364\b\236\375\2<,\252\1XTgu^\375\233\t\rH\374\204\260i=\271\35Y2\212\"\35\322\67\371\257\223\375\20\351}\20\351\321@\334\307\354|\342\"v\35\62\273\353\225\300\216\234\217\363]\321\17nd\243\276\234\221\321D\363\341\340\302b7\234\341\340\37\37M\353\221[\201\7h\365\371Vs\367x\17\271{\343" + "\25j\367\335\b\375\271\263\67\360\336u\30\243+\220\31/\262\237\377\227\221\253\200n#\273\242f\22\263Q\236\221\65<\343\211G\32\67\61\205\311\65\310!\307\62\4\267\r-C\240\314\314\f\7{\270x\260\334\36\354\341\362\242\231\231\31O\337\37\311\63\1}m\263\233\210e\317\207\367\357}\367\276WV\16c\324\6ctE\204\347\244\373]\6\214xO>uRy/J\321F\220}\357\256\205z\357\243n\272;\335\312t;\n\210n\232`\273k\275d\367y'\327}'\237\357~\244\245\261z\34G\244\36\307Q\271\247D3\344\366\204\nC=\221\353A\245\347\65\217\71\351\264!d\323k\t\363p+\300\337\247\211\242\25/\25\363\200\22\305^w\241\324{\260\\\257\36u&f\333Mlo\3\250\202\367\233\271\336N\225\357\275\343\23\372Rl\367>_\325|\371\371\373\315]\32<\257\326F\240\317\33\bb5C\340\20\220\226\211\33+\222\26\f\\\260a\0:P\302 \371\265kg\270>\356$\337'\237\22\372*O\307\0\276\250\31i->\260\370\344\7\25\vU\345\243K\274\f\223\17\6\213\313`\260\350\0\203E\24\f\26]|_U\247\320w\372\212\330w\261U\352\273\330\366\63\370\221Dl\376" + "`\326r\322\20\336\246\376\352/d`x\210\276\233%l\337\313A\262\357\243\305\\\177N\21\240\246l@M\271\200\232R\1\65\245\313\61\256\31\4\64\206*\212\223y\214\64Y\314j9a\232\5\354>)\247\245`\246\270\232\235<\33\6\310\240r_\315j\324kn\\\t\177\16\234\246Z\246e\362\222\226iI\220\253\224\301\376\31\0&\23\232\354\314\310RPxO\214<'o\277\311N>zK\303\346\24\254\32\24.]z\356a\22\254?S\331\34=ec\231)\37\217\206p\252\64L\376\301\231\316\375\224>\300O)\224\60\325@\213\277\353b\244\251\27Y\355\33d\271^\16M}B\220\224i\233Xn\\\353ti*5-\245\323\323\325\31\314\364\331\64X\322\220\245\326\334\66Z\310Q\320\345>A\214\246[)P+iP+\31P+Yb\372\372Av\372\245J\362\317^\6\32\247\320<<\26\340\261^\244\34\3\222\265\312\364G\33#\211w\306\214\243\24X\200\37\26=\212\67I\v\36+X\214\373\\\374\354\65" + "\233\4E\355\332\273J\t\314&\274\32\251\252\326\341A\302\350\r\201\260\n!\23\1n\rOk\342_;\337\313\316\370}$\334\362\63\25\205\32\210\65\371\71H\372bt\263[\21\325C\316\324\250\267\277\330\240\232\356\314\64\253\256\273\63/\251(>B\223\32\f;\323\5\22\234\351\243\224\205\300\377c\331\317\375\270\213\324W\247\21\333\322\304/Z\33\205\305\342fqQ\250\224\26\325\203\362\247<-\361\337p\361\bW\256,6\210v\314pG\330\305\266F\360\375\236\343f\37\266\360p\37.\364\tV\375\"V\33^|Qe\227\62/\223KN\205_*K\25\226\216\244\211KM\351\261\342\275\320\322\207S.+K\37mm\263\353\343L-\273\303\364\357\205\343\314\357\253O\300d\220\313T\rD\321\3\374\262\242\242\237\272\\W\255;\216ad\343f\21#\3\270\334\24\244\226o\225\321+\31~f\305\26&V\270\"v%D\220+\307\314\334J\273\213\377}\365M\224c\375\275pCZMSd8\335\342c\260\352qx\224\325\312\63\247\61\260\277\b\5\214\325k\26n\365a\5\277\226\353\26\326\374>q\255\332+\255\265" + "\240\372?\31\n\0\326^&\274\232f\33Wk#yP\376\221\243g\342\354\373rp\306\205\314\213Y\347\263\265u\274\236\255\220\353d\5\17\267\360{\31F[\320\366L\334\23\232\320:\235\203\n\263\236\361\r\255\253\317\26fy)x\210\324\243\300z]\246\241\n\351\61\24r\270\36\310\341\372\210\365\6/\34\r>\362\333\67\362\271\365(\342\233&\340\233\26\275\67O|\250i\334bd\327\357\"wee\374\67\276\r\245o\211\307\357[\367\65!1J=[O\24\257c\16\255\177\234B:\263\63\250\327\203\4\343\365 \221bv\303\241\362\33\1\207\260Q\351\2&\212\32{\350S\276\1\312\361F;Ao\334\261\61\33\367\213\b\210l\354g[\336\"73\3(\300mZS\205M`\16\233D\272\264\311e\310#Qk\274q\317\246r\363\206m\37\"\353\223r\337\f\260\314\313m\236\252\274\33\61{E\270/\335\67\353\65\334\66\234\220\261\331hFW\267y\311#~\355A\376~=\362\346\265\24\267\262\371Q+\206\255n\205\220\245\3\371\3\23\237R1\327\n\205c\31\374\326\61N\330j\345\305\255\227\5i\333$\306\260z\342\"\346m\372\34\273-7kb\327vu+\17\213N\367\314$\363\377\376X\326" + "\372)\201c+\36\25\361\245!*\326{\264NBX\327\361\360\373\372F\251\\\234\207`\373\30ZjxOu\25\271\335\f_S\204\334S\270\6a\367\377\5\23\374o\310\22\276\311m\267\323\374D\253*\300}\21\236\223\356\377+\266\34!K\210\31\305[U\tu\356\324Xb\304\26\320~+P\334\251\355W2\351\355\217d\20\337\276\241\262;Y$\271\343\263r;\340\220\201[\1\36\213;j\252\264s\f\325\25\62\320fK\206\66[\1h\263e\370\23l\230\236\63m\340\200\352\0\7T+8\240\242 \247\\\26\376\206\270`\364\372\25\177\251X\37\266\277\317%\3\315x\363\337@3\336\374\227q\301\260s\255\60Z\360\373\273\334\7RL\36\255+\242\233.11\214\7\264\336XC4\17\262\237\356\64{\324\273\350\37\275\343J\26:jw\242\231\241\235\353\251\231\312\316\213z\217\70\233}\177)\333\30\306\216B\335n\232B^\254\321\273\3\341\63m\207\364\205b\240\214]\207\217\202\250\301 \32\2\232J\2\32\202\262\215\232\250\2t\204\204 \203\304\63\244\16)\210\226`\1\36|\227\221\350\305\32)\272\374\344.Y\212f~W\242\204\335C\264\270[\317H`\353\3\36\22\207\64" + "\273m\226\24\\3T\2\337\320\200\335\275\373\26\271\373\0\31\347U~/\215\21\366\nXq\257\202\222\366\316\320z\306\332\246\233\201\36\353\327\212\216\227\275\253\4\271\367bX\3[\277\70Y,\200f \356}\334\365?\312\256\62>\212\244\315G\b,\214\1\361@\222\356$\355\335\221\311\364\60L\b.\tKB\2\33\330%\254\344\305#\207\355\273\350o7\17\356\356\356\356p\372\351\334\375\356u\371vn\337\316\357\270\177wM3\223\315\324\354{\37\242\323U]]]\365\324#\377\347\377Xo\35\220\266\332\370v\254\254d\302Q\362|\341\360\232\250\360\236\300\64\235\244\343\313\300\27.w\204{\370\255\331\220\225\376Y\336N\373\216\372\366\375\357jo\227\350\372\333\25a\343\355\347m\246\223\371\371\37y.\360\221\6s\\)O\203\243\f3\251\263\374n@\310\63F\352\243\254\224\354\"h\31e\34\224WA\276\254\216W4\236\373\t\322-\256\343\v\232BB\2'\1\314\64(\306\252V\321\240\21+^M\203\221X\331\32\32l\216\226@\354\0\216\260r\335\177\344\305\362{ipnl\\\37\r.\212\206\372i\360\263h\301\0\r\366F\203u4\270\323\221\226" + "=D\243c\245\337\"*\210\5\66\23\t\321\230\20\332D\24\215\306\252\312\223\62\224\250\275R Z\25S\211\266\330\242\363\247N\273j\242&\355\nWX\264\253GH\314G\203\4\346\30\332=6.\206\70\257!\252\322\356:\273\207vO\263\243\32\355^\22\356u\177u\300,^\37\6\217\r\222\361\271a\36\253\61\217eC(\222D\254G\36\5\60\254\305\"\334\265\257F\244\335\33l\235\366d\305]\305dO\301\n\213\366\304\34\355\332Ay%m\214\364\357\342\361\272\360\332\377\375\62\374\301M\332\263<\274\270\353!\355\351\r/\351r\235\207\366X\316\316GZ\310\22\273\347h\317b{\335\231m]v/\355\331\374\201m\320\336l\33f0\0Y\266\354\304\64\270\364\266\61\215\366\346\v\372\257\214\237h8D\214\264\267:\333\242\275\341\234\365\264wZTa\202]uV\340\336\316\211B\230\366n\234\300\243niIfjb\315o\246}#cYUY\\\326d\317\365\257\323>\321g\320>\23Z\303\276\306\200\5!\224\364}kL$\245\270\277\71Q\204n\340\375?\5\336\377cG\235\300\17\3\177\242\277i\262E\373Z\275dM.UT\267F\373\272\307`$\253\262\61\222\315\71\336\62\341" + "\273\350\234\204]\34R\"\355\317\225\65\332?Z\321i\177H5h\177\241j\322\376\t\232E\373E\235\311\271F\332\257,\\\224\354\206\366\333\272D\373\233M\231\366\317\61\24\332\337f9\210`\332\277\244\v\213v\177w\227\215\16{$t\270^F\207;\25\223\16\370T\213\16\224i\256\312\214\16\17\250\265Y\31\310)\261l\27[[\226$\16)\26N\345\6\357\350\300\244|\203\16\64\303\375\360\207*p\304\234MU\251\322\201Y\202H\7Z\212\65:\320^\204v\313\v\341\34\251p\351\255\5g\272\302\346\374p>7\312\363{\361.F\370\71\314\f\377\203\365\26\344.x8\222\257y\f_\263c\276\237\361\374\247\307\30WI\332?\264\302\3e)\306?4\251\230\277M\232E\7\263tw\376\260\226\17\6\215\254\60\35\254\311\62\207\300\202`\220Jt0^\246\320\301\271%\2\201\362W\245\203k\212D:\270\305f\221\200\210\27\t@w;\363\352N\304\22\346\252L\207\2\271\215t(\337/dB\213T\200\337\311\206\267\277\322\374\67\61\234\371Lg\231\375\16\32\316\331Tb\352\241C\207t\277D\207\"\5\270\353\264*\205\16\265\224$\300\237t\350\243\200\313\250@\207" + "\372l\203\16mC\333?\205\345\346\32<\330\341Q\2\313'\375\246\370\360\272_\372$\346K\33 ^\317'\37q\0\364\25\tO\17\213n\370\223>D\346\217Nyd\7V\201\267\\\220)\4\207U\353!\276\244q\377\17\374\210@\207\307\273\350\21\247\347o$c\267\271\320\f<\214\5\326\4\t\254\t\262\27g\216\216\311\310\250\354\4!\323\236\377\360*!\334\362\335\64\243e3\220\221\223P\244\303\245\337c\230f\346\357\223\323\276h\204\3jE\307\207\253\n\363M&\215\270\30\331\323\342LF\242Y\331\303\365N\234L\322\375:\257\213\255\4\374\323\v\331p\t\177\235\313\201c\366\24\33G\272n\336\23\216\307?\350\332\264'\36\37J \177X\bIt\270\276J\246\303\63K\326\320\341\17\312F~F\207\327\330\201\265t$\267\374=\221\216\324\25\270\302\344H3f\356H;\246\356\310r\314\335\221OG\324\321\221o\345%nR\330HG\276\202!OG\253F\215\306\\v\303:\371hiM\270\333\265N>R\224\245B\307\24d*/\23\351h\333r\303\f\7uW\273\f\25\61g~\b\261\365\204\63\237\316\216\266\65:\33\22x\4\205\16\313`\230\316\226\217\314\nqq\355g\215\210Hgg4\240\243\305\222Ng\327H\6\235]/\233tv\v\316G\31(\30~vZ\5Z~\325\245\321\271|\254\207sZ\304-kPk\200\245\62\3\71\71\364\232\270\261Od\236\365\244\336,\323\271H\221B\347f\26\273\334\253t\256\375\3t\334\235\215\216W\344\30t\256\367k\254>5\251\324\357\271x\241\t\30\2\27\210\70\20a@\315\314\354" + "\273\66\356\274\241\313\63\311\344\236\f\4\321\210\217E\207f\244z\222\341\334WU\22\235\367\267\312t\276x\226B\347\253\260\3'c\7\n\"\235\67\361\312\316\333\5:\235\237\22\67\350\374lH\207\363\v\232,:\337\205]x\376\223d\34\247\315\301\310\264\314\343q\225\306U:?`\243\303\255X\312\27|\225\6](\231b\322\205\232\346:\272\20\351d\332\210\217\235\252\27\346\302\220J\213\206\243\v\33%\321\371\246\321\305\234a\210\70\17y2\265\221.\216\345Ui\241\213J\266J\27'\345\210tqVn&\242D\272\270\60\206+\227\261YK\211\352\321\305\36Y\242\213\375\212L\27\267H\n]\312\16`m\302\377\32\23\273*\340\240\301\23^*\211\32t\251\266\326\244K\223C\326\337.\255N\36$tiNM\3\317\300]\244\2\64.^\0X\214.-jG?\237d\243\237\265\71\26]\332\234\353)\17\5.at\312x.}\311ln\234\221\314\350\246\313\357ae\\\16\240\233\313c\323s\206\65\364\f\335r\\\344\373a\243Q\377\217<\t\211\272\n\207\222\200K\235\345\25\274\370\346k\231\26\200\65\331\224j\245\1_ \323\345\342:\205.k\21W\224_n\264\301T\334\212" + "\307\232\66\17\65[Z\234\343\nE{,\347\3o\212\261\202.\277?c:\237D\t\224\271U\306\357\264\24\232\300\272\63\17d`X\370\211%\2%cN\36\2\62-\30\370\273\320\330\276\343rz\372\334\243\303\273j%]\36\260?Y\265\257\264\313^M\227\67\333\213\327\320\345/m'\313g-]\31c/\355\241+%\366G\32]Q\"\275te\222\375q\37]\231k\177jBY\264\300\270\300\354X\316A\304\241-e\222\64Yd\"m\220\273\343;\216\301\262b\366w<\302\255T\327:?\334AW\226\330\30\354g\272\16\32?\3t~,\313\327\361d\16\215\305%\211\22\277\71\36\307jQ\341?\311P\34\17|\5\244JDD2\35\250$]\232]\260k\363iJ\300^\310V\325\270\264S\320\365\235?S\201\345r^\234c\265\352t\245\337\345\62\64\351\312\326\t\26]\315\256v\337\247U\307\321\276E\272\232o\273G\370\325*\23\327\353L[\327\370H\377\16hAW\303~\215\256F\337\271\32\33\323\366\355\71P\256N/5\234o\256*W+\340hK[\233\251+\177-]\235o\347\367\200\70db/]]lW\364\321\325\65v\245\273\317\3\232\213\17\361U8)\20\303\363\315\242\17\350\352\316\212hQ\17]\313\213\26\256\243k\301" + "\250\17\271\343\261>\272V\22\5\260\65\312$\16\26a\274\311\245!\2\337\207S\266$\246(\321\4\326\0\244\343U\36\25\244\211\71\265X\212v\206\4Q\355\350r\207%YHM\f\241k\325\222D\327\246(2][ +t\255\33n\357\250\233`\264/\36\323\350\332f\210\325k_\31\6]\237\240\231t\335T-\272\336b\342\31=\271z\375\63\275\330\237\216\63\217\345\22E\340\0\237\250\343\213\311\374\0\256lq\257D\356\255D\327\267\v@~\vC\250\365\350F\256\337\240\33c\203&\335\250\250\264\350F=\242\331<\355\351\306t\210\247\33(IE7\226Ih\265>\234\231g\20\33\320I\266\32\240\233#cAWu\362\65\260lH~\312\254N7\v\245\257\3\24\351f\225,\321\315zI\246\233\323\24\205n.P\231\330\266M\272\371\241m\321\315^/\272\310#\344\241\233;m\225n\215\216\213t\253\304\267nY\274u\230\367\216n\325\324\263\342B\337xf\320\255\306\16\364\26\353\324\350\326T\r\320R\365\35\67I\210\323`\201\233\60l\322\255\245\62\350\326\245\224\"0t\253\33\b\21\272\325\337\326\21\342:\35\351\326v\350\271\267\307\224:\223J\267+\4\353\277v\224" + "\61\367\222>\237\247\212K \203\223\331\336\277-[\6\335\256\253E\333\311\5\357\302\331<\356r\334\251\r\23\204o\206\363\315\r\26qA\342*\335^\333&v\254\324\336\241)\240\37\7\271\34\376\70\375\321\363\317e\33W6\346`4[\22g>_\257\373\251\206\307\277\223\27\26\351N\250\313\215?0:\n\177}V\365\34\327v\364\313\345\325\212\62\207\331\216=t\247\324o\257\243;\365>\234\227Ep\34\v\275\363cE<\7\3z\235S\254\321\235\316R\335\371f8\177\342&C\220\65g\326\6%\272\363i\324%T\244;[\313\205K\271a\225\356\372|\342\245\261!\215\356\226!\304s7\346 T\274:u\227\212\247yv\345\335vI\5\3\216\254p\226\306\335U\30\304\335\r\215\372\236\355\222\261g\273l\322\335\257\64\353\17\326\263\65U\313\243@\4\354\277\t\260\377\210\207\240h\30\342\1\306\270$\272WT.\323\275\t\263\24\250h\263\5\320\304\250\277\336j\201\220\34\7\353=\243S\247{\r\355\30\62h\20\220\300\333T\367S-\251\352&rCSd\327\275\250\204\16\347)\350\260SV~m\247\307\313\200\256>\251A\230)\206\60S\323\327\364\"<\374\275U" + "\26v\322\275\255u\274\235t\337g3\362\1\t\344\3x\366\373\16.X\32\262\334\350~\35\224\277\373\315\320\376\356/\200\366w\277{\204\353\31\272\337[e\320\375\317\203\0\230M\267\350A\226\303y\243\362q\326\342\25QqnE\17\306\253\306\62\t\304)\32\210StHi\225\237E\237\266V\245#\217=/\31\344r\322\3\33\370\331r\213\230\253\304\317\64\262\211\345\214\37\202\345\253ct%\5&=P\234'\212\62\26\237j\1p\260\f\373\311\61\243 \16\260\221r\206b\326\34\5\23\16\20/[t\bf\215\36\314i\4\34j.\224\25/\f\0s\347\301\242aN\207\364\n\241\263jUz\260\206-?\251ghY\321\7_\264K\364\60\247S\246\207\301\16\205\36Nh\23\350\241\272H\245\207\221\205\"\26c\265F\17\247\207tz\330Vi\320\303%\177h\322\303\25\266E\17w\374Q\35=\32#x;\347Q\221\277(L\217\324\302b\6\24NG\355\341\60\302\213E\342A\24\6\240G\315\23uz\364\376\4\203\36--\307\262.\264\376|\335\273B\207N\177+\303Y\350o\303\364\31\\\204\t=\36\355\30C)\223H\217\307\27K\364\270L\20\350q\215\215\vj\303\342\201\215\235\tTL\253\27F\271\237?" + "\252\216\36'\303(\217\333s\224\23\221\21\311\324\n\36o!\267@\302\341\217\333pNwh\364\270;\256\343\27\3\377\360x\245R\30p\377\240\260\25\303\353\215\340\226\337nQ\350I\366<\201\n\273Uz\22\304T?)i\327\350\211\214\315\362$\322i\320\223\251\213Lz\322\332a\335kmK1\327\236|\230\305\325\62\261><\"\367\264\376:\316\26\201\353\271\21\245\\\270\270\7z2\360\335\24\322\21\214j\213\217!*\274\210I\230\236\354\314\62\71\303\212{^D\216\355\260e\211\212\272\250G7/\326\350\251\277\313\304/\b#z\207\23\203\61\360\263\355j\5\234\250\\\214Q\251HOK;4\347\33DH1DH\211\33\327\306<>\255h\310P85\212\206\215]l9\6\221&\36\317r\264\315\341Y\365q\265#\254\71\352\266\321\1\262\376xf\315\2\363\17\234F\210\313!\22\344\205\250\234\64\271\213;:\fz:\247\315C\266\17+\25\"\323\323\371\21\205\236~\330\301\24L\347\21VK\211\245/\273\21\223\247\375\252\365x\251\302\312\270\4\63\330\301\270\323\27\221\341%\227\234\362\n\tfvQ\240gc\307kW6\242\342\313ZV\361\205\236\225\303\347\377L\317c" + "\375\303~\253\20yY:\353v\315EI\233\323-\345\375\364lJK|\0\\\330qw9\1<\357,\357q\345\365Y\305\301\232\360\70)^.\227\27+J\320\253)f\257\315LA\bS,9b\327C\36\314@J\320\244\321\263y\212\16\245\1\303_,\243\373L\225Z\350\331*[\7'\260ymY0\261\321\302\364\254/\220\305\365\330\241\24\250H\317\266\2\307\34s\227s\355\30n\307,1-\261y[Z]\273\352;\323\2\22=\317\233(\303\65\300\314\233*\221\236\7\346i\364\274\270L\247\347\222`\322\363h\205E\317gW\272\325J\232\25\216?\225\265\256A\233\16\354\376\347\37\346\260m/\316o\6Z)\26w-\250\270\320\301\374\212Q\274>\227\276\205'h\274\325\327\fY\237\235[\237\225\63\242\206\236\177&c\254\353\64\231\236o\35\241\320\213Q\272\0\27\200\212\360\225\210\60\226\206\20\226\216c\330\300\61l\322\213\2\311\242\27\345\62\313.q\23\273\350\205dF\302\364\242\311\312\nq^\30\274\325/:c\"\275X\336\252\241Z\v\360NM}\364\242wr\323;>\262\61\16\61\374\360c'\216\206\353\355\64\351\377\364bk\265D/\307L\220a7\227\256\241\227\345\261\20v[\221J/" + "\247\226\367\320\313\345\261\200F\257rD\235^\25\6\207\324\276c\307\24\322J*\204\264\70>\304+\335\312\5\227\212]\321yL\313\5\342\253\315\244W\n\343\206\225,\270\2R\225\300{\33s%z\25\311\223\351\325\24L\337\253\331#S\20\0\252\207Ww\217.\324\263\364\"\300\306\327\212\336\235k\23\244\303\233\362\345\177\231P\214>\26\5X@?*vu\203\23#\254\237\354odB\333\340:rl<\360'\245\375\364j=X\3\351\325\366\61\314\334W\351\365{yn\310\344u!\262\37\350uC\316\b,\264\2\354S\237\277&\\\340\356S\240\20\375\354\220\351\247\327\357\307Bn\21\344\230OM\224\226\344\273\321_wc\233\274\336\350\327\350M\256d\322\233\261\0\60\275\231\270\322\213\357\361P\257\242Jo\224*\340^\205u\364&.\210\311\220B\332T\352\216\\\\?;\267\347\321\262\234\\\343\371@\200e^k\334\354\203\b\343D\343B`\231\223\230\233\370\367\216Vhb\6/L\304\341\332\302c\267%\271xy>x\f~\331w\235\212 p\303cZ;QV53\251\2\67\305\5\271\265\210\214V\342\266\337\262{\21\35,\354Cx\260\244\377\377\70\273\252\300\66\222&m\fY" + "\20\262\344X\6\215\255\341\31{\5\343_\221\227\311\336\220\35cH\331u\300\33\306e\256cf\346\307\243\327\60\63\63\63\32\216\357\355^\357\353\31\215$\307n\35,\4\247{jf\272\253\252\253\276\372\n\274\r\201\315\250\255\315\61\"\330\305\265>\256\377\265\253(%\374Ju\213A\273f\314\62iW\235\23t\252T\363qc\264\313\20E\332\325\332$\321.\34Fh\327\307qlH\214]o\27\343\320\256\37\32^5\210\200\217\365\64\347\333P\332\355\303\34\273eY\242\335\363$v\353c\265X0\273\7\343*\355\336\341\337@\273\177L%t\332S\223\310\332\253O\307\200\250hO\313L\221\366\364WJ\264\347+\237L{'\205\35g4%\320\336HP\245\275\315\360p\367\276\336\256\323\336E\214L\325V'\361\70\355\35(\n\305h\357\67s\274<,u!\356\257?\27\336\317\206\235gdA\312\264\257\272J\244}\322\307\22\355KDd\332\367FE\230\366-\16+/\327\5\234\63\352>4\310\240}kf\353\367\314\31\6\355\333.\230\264\357\273\240\313\224D\373'-eMN\227;\1N\206*p\211J\235\300\350\257\316\257\323\360\277\376\253\363\353]\270\17\217\372\330\371\6" + "\373EQ\243\375\257K:\355\357\227\r\332\277Y1\351\300\64\265\231\16\310\235\31/\226\16\274\331\24\247\3}\232\21\243\3\353t\223c \17z\255\261\5\t\312<\223}\307\345\331K\227g/\rv*t\260n\261@\7\305\205*\35\64\221_8hu\350t\360\r\24iw\32,p~\360\375\4\370\210\n\343\203\60\264/\n\254\264\305J2\255\274\222\314\255\316\306\344\347\255-\301\361\271\62[\bYPS\202\340\62\36\0\352\373\66\244K\337\206t\253\25\334bsTg\277\65\361\347\245\267Y\210\30\375\214\370v\266\336!\346k@\v\310\274\67\17\322%\21\204K\22\210\227d\220.\345\272c6\252h\20\244\215\246=\270\307x\34m\234\16U\4\35^^\36g\272\0\256\364\t\334J\220\246\347\214\23\300\n\245\"\360\f\260\60\277\243\227\311@\36L\262\225\312\241\210\245\262\37\320]\353\32\272k]7\200o(6Y\356\6\63d\235(/\277\2K\240CF2G\311\311\317\32\327\215a\316\342\305J\234E\234e\347\367\25@\311\303\233\276\245\343\377\34>\236u\236\341v\246\256\204\244\321 \36v.>~e\241h\334?\26;'\245C\v\341,\35\352-1\350PZ5q\334\327\234\336]\312<\271Pf" + "\202\65\221\376}\201\215\377\34\353\371pY\227\253Qx<4=P\307, \334\353\60\5\25\\\362\200f\374\361fY\317U\227\25\314\243;T\243\263\355\247\71\\Y\vi\32\20R\364\262n\223<3\223O\326\346V\201\323a+b\322\341\17j\34\60\350T\346\235\272\225\377);A\200\257\237ri\214\262\232\356p\317r\221\16\177\322*\321\341-\313d:\374\365\212\60\35)\7\33\315\221@Z\240#\341\217U:\242/\321\350HK\277NG>\\j\242\372$\227V\244#\375u\210\1\34\331^\37\346\25\27\"\313\31\21\350\350\254\244\372{\202\250\321\321Fh\360\243\315m\6\35}\275\303\244\243\37v\271\273\210\3\17\243\243]\314XbdZ\304\310\235\222A\307Je\367\344>\233\177@\314\221Iq\1Wtl\326l\341\317\320Q\220\216\65 Vt\314\f\350t,\31\302\35>\310`\251\262C\327\320\261\376\244O\242c\237\312\62\35/Vl\247\350x\250\32\252\214\65zM\314\322c\257\262|\363x\302+\212t\242J\226\350D\243\"\323\211&\311~\200\23s\233" + "\220\221j]O'\322\255\35Y\342u:\261\251\337\244\223\345,qk\247\67O\6U\336\t\210-\214MtRkq\270R\235\336\302\23^\373IoO+\273\31\312\306\35J\n8V\311\274\242\272\377s\22/\202?\21QW\227K\344q\241\b6\214\60\351|r\316JK\254\243\223\311\244o\200N\276\233\254\303CM\240m\31q\351\326\61\261\65\204[}\"\235\\\34\224\350\344JX\372\223\233\252\331.\376%\200\222\251\304R\351\344\27\236<\303\205?\36\3m\215\323\251)\252\24\243SMM\32\7\266\1\253" + "\307\332\210\345cm\302\372\261\66c\1Y\271\357\17\373\341\257b\356\321\370\60\324t\334\333\234l\273\33\27ZKq\353\5e\6]XR\214{\257\203=/u\321/t\341\253IS\271\234\2\177\375\226h\376\242\333+z,4t_\351\f\221.\316\t\206ow$\24\272\250X\2]\214\317\266\33\274\375M\272R\247\213\357U\331=l\351bg\30\343%\246\354.\246\33\221\267\271\370\275\307\313\263|\n]\n\225\"\337\257\203;\241L\243KR\211N\227~Vl\340OL\366;'\253\4\372X\36\271'&\370\b\7\251K\375\360)/\r\226b\212/\253u\272\227db\224C\347R\213\24\272\65\251A\240[\323\2*\335\362\327\272\272\334\16hC\300E\35x\b[\300E\262\334\221\321\345=\32\266\5\273\224\327\v\302U_n\212*\317\234\316\314Ox\321\255\312\205\"\335\222:%\272\365\263.\231n\315\353\b\3\4\3\231" + "\322\t\310\264\361\23\310\264\23`\n\335\206j\321\255\257U\223n\263 c\302\216\211\336\236\263fu\1x\356\227)\233\246\1-L\261\232z\234\324<\240\30\377\3\275\237\245\322mM\306\250&\214\62_e#\306\2\354\356{\255\250\267'\22\353\26S}Rm\257,\367\260\24\17\220\377\335@\376\367\0\371\337\v\344\277\303#\261\0\62&K\213ct\273\275\244h\32\277\23\207\323y#?jp\273?$\322\355\201\260D\267w4\312t\373\307*\220\254[\312\337\244\223\2\335\361\247T\272S\235\260I\245\351N3V\371\235T\275]\36\345\362J7\305\351\316\373\325\361\30\335Y\262zM~a\305\335\242Z\221\356\6\203\22\335\215\274-\323]\353\235\60\335\375`\266Bw;#\2\335\35\360\253g\275\222\306\234d\373\215\337\335\332e\322\335\357;\232\351\336\324&\27\346s/\330\325\21\243{\321\316\231\70\36V\261lT\3\335\353\210Fl\257\333[\217\234\33\214\265\327\346\273\r\330\f\226\241u\240\330\16\r\240h4\20ZO\367\6B^\370\317\236\20\374g_\b\376s]\b\376s8\344|U\24\242Tf\nQ\274\16F\270\276\22.\220}\\\254\7\303\211\343v5\260\200\263" + "\307\256\205\245{\353lk\301D\360:h\344`\225\213F\16\"\347\307F\330\324\270\6\335\333i\232t\277\244\211\371\fv\323\6\313\2\365?\250N\231\342\327.\244\213\301\30\312|Y\211\33\245M\350\277\376\203\226\363\273\63^Z\275\340zi\20Q\0\21\252\375M\303\5\233\344\321\375\351I\205\356W\267\270\304\252\242\223\367\343c\335\357#J\237%\237\366\271\324\302\343\316\30|zaa^\236\345\241\373h\7M\367\61\220\356/h\222\351~\277\341\206\324\351\376ZI\35\231\254c\23ta\23t\344b\353nx\344\376vU\213\321\3\217(g%^\363\217z\252g\355\257\247S}\203\277\276.\325\375\351?\n\251^\4\206\65z 4\350\364 \356\260\260\312\bEL\270\21\320\276L\311o\337\316\7\345\234\367\65\240\346Dz\374Z\255D\217\337\216\312\364x^\30}\bau\36\257\f\n\277,U\252\364xG\243FO\312\346\350\260\262\226AO|\36\223\236\324D2\374s\b\362z\343\364D\205\361\241'\255\355m\23\314x\312Tid^\215\233\244v2\214\263\n\305\fG\272[ CBg\277\60hd\245i\242V~\32\6j\210\r\330\344\330\210\315\24f\f\317\315\265\221\235\350\306\346QG>SD\32-\26%\32\5\26\216Fkg\241m&^g\235@\243\311p\346t\32\321\377\364\333\224A\243\357\65\230\64\272\320\377?\321D\215ON;V\326\342\207\271w-\16\330\315\236itiT\243\321u\265:\215n6s\371\233(\277\216\63\245\320\350\67~\306\231r\324\23@O\304J\223\376\251\310\343\200\6m\370\337?\371\376\233\16+\353o$\305\341|\216}\342m\317\376U'\351so\333\271\272'I{\343\244\347x#U\262\315\230\202Z\240\222q\177\372\225P)\345\232\331\274\330\222\240\0]\177\t~\247\256\303#\350+X" + "\347\352\326n\266\231\371\373\256:\rO~\34dj2\203\377\313\264U61\253\245\351\23\250s\33A}\356\333N]\202\353\324\177z\233u\16\372\316f\7\352\314g\210\372;\330\253Y]\203\203h2\250y4;P\237\374\253\v\323\202\276\6\337\253\323\276\336\251U\7\265\65N\37=S\307\n?E\236~O\312/K\336\250\245\63\65\350y\fO\270\250\232\331V\235\332\365\332\326\275\313{\375\235m\322!?kq\333>\36\212\226\61\254!%\33\274\307\215\324\25\230M\17\32W\335\253/\35x=\307\205\255\337\224\335\336V\364\373\276\320\357\n\375\1O\237r\354\353\214\v\244\62\360\261\374\276f#\235\207\370dbS\315\r\252u\366\vZd\265\r]\265\2\347\252y\277Ww}\364df\224;\334\210\5lm\221\234\306\320\351k\353\201)\243\277\67\316\61}\21\315\243E\35\276\7\222\200i3DT\302~\203\250n!\307\200\247\17\t\205dGh\220K\314\365\35D}\323\357\312\232\36\306cT\343\376j\336\347\34\274>\22\342XIp\214A\303fa\203(T-d\264m\204b\16\334\324b \231T\203U\263\346\347>e\205\366\250A\25w\317\370o\216'M\300\v\275\257F\3~\250\330\214\213\340" + "\263\365=\340)HQ\323\5?\206P\331\5\311:\353\63\17q\263G\25\333\7u\275\241\275\243q\251\336\366F-{\227\340\325\225Id\226P\357 W\350\337\324\32\315\262k\233\222uP\335\204\274%W/m\275\243\60\347\225e\323k\323\251sg\"`D\301s\b_\31\337\340\67\372\2LT\337o\301\71\315Q\275\bm\333{[\363!\361\303.\r\233'E\207\254\356B\354\240\t\352\336\377lZ\265\330\32\277\1\235\267\240y[t\327E\217!u\27\66\33\207\326\352s\350\254\v\371\67\202jf\343\260g\t\244\333\276i \26\367\bSRS\257\62@4\17\16\320\70\321\354\365M\210\255qeL\"\351\325<\364\276\341hQw\321\370\264\306I\230\337)=\205\330`\0\224=\24\373~\331\373z[\225\264\377\16M\206\323b\326_<0qL\311Hx\202\177\f\26\v( \360\325\302\223hq\205\26a\301m\310&C\241K$N\4e?\261\321\235\211\33\20;\360\307\213}\355@\34uj\37\321\374\316\266\17%\256\17Cz\5\271D\210>z\215f\256G\376\355\224=b~\21\315\223\253\356\273X>\306\274\333U\267\275'\213\245\254g\266Q\v\203\376\226pY\30\264.\345)\273Y]bh\240a\301\233\6\r\344\355\232\321\221" + "\265#\212\17\65\n\253\3\341\fS\350\221qH\374w\254\226\20S\360\306\351Um\274\247D~\262\271\336\212\342\364\371_\253\273-b!\177\301K\21\311\233~\351(\30\31h1\353\b\273\5a1\f\233P\335E\304\310\215)ik\307\211}\vb|>PR\253\340\372\22\331g&\355Q\325\330\240\335\315\246\234\356\236\325\231\b\370(\")\361\300\223\246\242gPa\274\257\16\360\276b\274_\345\20\367\214\272\65\303\256\34\355S\206V]Cc\373\26\307\327\201\343S\315\372R\204Z\312\354\225#\323\230\64\330\227\342\353s\330\247\214\36\344\205\5\3dM\334\63\t\16\310L\306-F\324\262\340\310\243\246l\356?\334\"3s\20\363\37\253\331C\210\371\17\347\61l\376\250\207\321;\343w\177\344\342\71\324\304\342\30\6Z\f;\240\223\21\264T\247\66Y\277\246\355\211U\213>\246\20\365u\300\220\272\177E\221-\247\273\300M\266\302\\\233h\215\67\305p\263\362\273(\277\363\362{\252~\204\244n\2b\324X\274\60\340\263h/\271\265*h\260\264)\7\247\256_\35\275S\367\337,\301|\336\364\236\263\243\30|g\363$\5\23\252\26\r\306\373\334|\373\26" + "\302\316(I\3\304\301\26bE\345Ld\325\351\336\233\326f\204\245\326DN@\365S\b\255\376\322g&>\341f\364\235!8a\212\21\205\351\22H\"\237\366\62\242\320\345\276\203\230:S\203\302\374\350S&\335\233\320\222\327;2\7\316d\25p\263G\360C\220ir-\246Fg\372D\347\v\270\34&_\f\256\364\4\345\fGKv\307\61\377\17IV\n\364\200ac\260\235\255\311\225\211L\370\244o\340\27\214C\307\21\260p9:\242p\314\256Y\306\61(\331\315\355\6\67 \224\205Tu\356l\227\70\214\210\273\202Gp\3*\363G\34n\245j\251\2\244\70\67\367\211T\210\340'-\n3\324\247\60\252a\316J\363\305k\215ZL\345\370a\344\346/q=\35\350\241\252b\325\63\215\211\334\34\340\372\16{,T\276\24\214K\364\25S$*\7g\31\223\247\260\6\237\320cOa\300\235\301\302\36&<\271\237\62\217K\336P\243\70@XD$\352\337@\320\267P\207H%q\312J\240\260\307\4\71\277\2\342\241\0\34}t\206\241\241\7\32\323\272\317#^\30_\3\251f\32}M\265~i6%\2\351\237\17\300S\252\342\366Uh\214:\217\200j\352\363h!\341\16\355C\37\67\204\255\334\236\315\v\247nl\216\201@\270" + "\243\336*\364X\277\365\63fR*J\316\27\357\v\254\353\20\365\252\267\65*Y\252\267\304\22'Ii\240\272,F\344\5\n\222:0\361\267b\361<\347\346\t\325\5\275\204X\225\354x;e\357B\247'=\361E\320\71H\"5A,|\337\61\305\306\31;\320\203\16X&\260\370\311\246\254\250\203-\271q\357m&\374\245\t\251h\255\303\272\264O\337\207\350\232\61\303\364\334a9.\310\217G$\354\37;>5[g\266\264G\341\320Wp\266pl\353c!N\24V~a\336\bqtx\304j\22;\317\250v\31\\3\24\67p`\22\220\71\250TW\345\256\203\0_c@\351/\17?\243\265K\357\331w\\\313\212\265\277\307%c\201\333-\16\201gD\264^\227\264\252\n\207\201\310\254\334\245(\205\355C\234\324\267\3\247\240\275Z\312\366\257\66\365\306\245j(\361T\354\64&\235\365\226!\fg)\211\242\22\356X\21\326\31\321\2*\274\335\311a\251Q\264\236\222`\16\33\353=\320\61\62\304\26\32[\320\257y\244\310o\360\376\323A\304\257b\250\276\267\337\n\346\220;\306\344;\226\366\202\363\372.\4\252B\343e\215c\\\252\323\322\64\r\25)\373\rD4VbEH\243\371j\261\332Y\212\311\34\203\4" + "\276-\345\16\217N\373\225\257\250\247\217\354\235\255\24\276O\376\67\242\311\254\353>\331\232gMEt\367\302\242\356mkJ\16T\253\255iJ\347\321P}\251\350\237\252[%H:NU\245}\343D[\224\310=\205\34\274\311!bf\370\211?\365xm\36,X\215\67\363\2\"k\33a\270\271\212\215\347\275u\244G\312\61\354\325M\337>@Lb\367jN5\275\364\301\350\324\204\330dj\334\271ZP\362`\4\206\220\200\340M\312\vND}l&\35.\301\270\274\255\30\345\244\243)\207[Q\335-Y{\366\337\36]\221\3\247\64sw\201\333k\212(\236O\253\26E\26h\363\\\225M\314shL6\275\16\36\366e\306\314\262\343\245'&\0t\24\270|\22\211\220Kp\234k\231\62\257\303\65K\256\351u\304<\272\355\323.a\5\224!\306\223mp\200C5\17-0\317\36!\312\177\231\262\64\373\260^\17\350\71sx,H\tq?\351\340\251\326\2\370\321\376&qK\216Y\327\31\213\205\261\16\221\220\25\363\201\v\327y\b|\303\32\310e\237\266\334\325\63\66\222ft\263\26\237\317\36L\203\373Pm\312\212:\253\322\375F\16(u\257\351#L:\213~\31\376R\222\273\330\252\230^\22*X\22\16!H\267\30\272" + "\363Pq\16;*e\345\177\212\326\372\343kD\214\315x\307\22\t\202\227C\23\343v;\\\267\234\244\274\67\334\230G\273!\\\222\353\5!\262\64\276\347\275s\204s\30_\321&\322<\23\344\67{\374\311[\365%o\313\303F\203A\312\233\361\355o\274\63N\306f\356`\234e2\201\66\22\307\260\210\276\347\351\62ge28g3\214C2\267,\210\331\231\200\66\221\367\202g\b\357\271\343\20~H`@\264\253\321a@\367z\205\261\331\62ua\222\334\22\371\346H\255~\357k\326\25C\214:O\213\23(*\351\372NU?\"\340SAg\330\347\270\341\246\211ug\372\305\322\303G>{>\342\215\305G\b\356\304\344\70\230\227)\375K\225\206\360\16\317\252F\30f@\305\30>l\305\16\272\264\204a\343\33\t\33\376\347w#\273\6\315\27\270+0\364\300h\320\267\237\203\365L=\267\336\372\350\200>9\240\217\261?l\200\353\vB\323\70\"\205x\21\\\210\211\233e\311\71~\226\253\206\26\210k\b7\302\352\210\203^\235\360\177R\307B\274\21\342\355@T\357E\362\216\210\"\372 \242\25i\203\60D}8r[\v\256\221\306\354\226*\207>\236\262'\23v:\366v\312\276\253&\354\207" + "\351\350\373\351\350G\365|\21]\22h\23\61\313\271 W\240\22\350$\315\365\260\216d\277\\\272_\213\331\nJ\261\343\210\242\225\4r\306\327\334\373\4Z\256\200\27\321<\fh\32\342x\217\242\71#W&\20\330\327\273\2\362-\212\v\314\f\357\235\372{\233\267%1$o\270\30\256\300D\f\351k\343m\327;\24\363N\5\f\301\354*\272o\311\215D\216Y\336\241g\36\71\210\232\v\223@\r#\255\263rk(\244|\307\371\307\227\25\34(`\222j\360\215p\247PX\16m\206R\265\210\241\257\267\322+\363\313`I6\375\31\262.o\277_aK\31$\335\345\360\342m\342\216We\207\25!\351\306\324\314\306\332D}\25\60v#'\375\360\260\246\344a\255\20\244P!n\17!\235\366\177\205\373\253\362\20<\232\224Z;gK\211^blP\0?\320\63\240C\217P\247[\332\71\374\256+\357\326\321$\224\2\265#\204 \334(K\30R\23rTIC|(\325\307\">V\205?\341\277\67\5\221\v\332\17\317w\270pg\31c)M\23\24R\256\367G<0p\307\205\223\62/\35\224\354\377\202\374\344\5\371\361\v\362\67j*\220i\277\332f\\\346\254\5\64\212\257\367h\317\270C\353\361\223\354\70oz\214q\233\t" + "\377\366\205\343||I\335\327/\f\274\255\376\277\374\375\v\363\337\275\60\377\3\267eK\313\317\231\17\254\23\273\370.Rp\234\307\340\237\253\243\211\354\234\203\212\71\226iz\"\347x-\324}'A\212/(\307KYua\\\306TN\302SC\223\264p\210\vB^\231o\20\205\231\203i\237\317\5\261\265\245cN\"\222\267\b~\323\356\250|\256\234\241P\207fh\365\60\367K\344W\303\323\25\327x\210\215%x\177\62\235&\3$931z\265o\37\202c\24\240\317\70\363\320D\325\227\16|%P\200\237\7j\356h\230\22K\323\333S_\347P\232\277\320!\4l0\271\271\25*\257\364ti\246\312+]\22\237\206l\307\24\332n\356pv\322X\342!q\362O$\305\356\245P'\235C\271\ts\345\23t\37Z\177\35\326\5\347\322p?\344K\bI\244\235\236\274.\361\353\205<&pAI\325\62\302\243\rTN\227\225<\203\25;\311\205\210;\312Y\327\71P\363\b&o\271}(\257\364\250\r\23\254\240\310\252\3\231l \331H\247\20\232\272\26\66@\241X\361\63p\17\201\233:\241y\200\36o\260#f\274\34\71\36\344h\241\272\366\300\355xqH\7\316)\362\202\350\264\300zd2\253\211V$X\244o\344s\264" + "\16\365&\20\351^\235\17gT\7\64\351\324\232\215\255\211I\372\350W\374\311\204\327\377#\344J\272\33\327\255\246~\nW\311\252\17\236\344\241;\253\34\371u\353M=\235\266\63-i\t\266yL\221\16Az\372\365\251[(@\240\234|\337\306\304@R$q\307\272\5\257\f\f\253\247Q\0\16\205\254\372\206\234\243x\26\276?k\b\261T\21}\225)\366\336\61\36\244\200Q\256\b\370\245U\334\35\354,m\257S\367\64\206\270i\366\244J\23g\232\210\260\1M\275>\r\220E\223\25K\323\376d\225\325k\250\234\234\351\233\211\240\1\v\33:\244\r\325\347\346\321\64\324\267\336\24\24\316\370\261\331z7G\17\32o\355C\245\256\356|\313\324\276\26\260\61\tEBC\213j\217\207\213G\337\21\60\272\253\37\360\230zy\202C\246\273/\20\314Y|\310\b\363\266n\355\276\333\212\360\361nh\36U\302\371\310fYr\\\243J)3c8Wm\350G\356\353\210\27o0\214'zs[\305\243\205\t\275\302\62\265\236Kf\271\305\25\f\334\1\221#\216E\325\230O(R\3\";\326\251\352wg\342\313\227\252>\301\230\365B.\325\211\63E\tCU\211\365\65\327u\246\313K\227\1\232\214z" + "\330\211<\207\"\301\322O\217\232'\341G\346\26B\325c,\23\37\336\314\177p\254n\226\236\337\254\204\257\325F\371\rF\262\36R\315\227Y\325z\354\367\206S\233\71Z\3\205\17\260v\r\245\334\357\f\367\333\21\34\323\243\374\243\351\200\271\20\304\2\214\301\332\263\211\275r\274\267\256J\201`\34\304c)\314\251\226\263\336\212+\205\267\260G\223\62\26\21\v\r\23\227[\205\310h\305\16\b*\"\264wg\310-\356z\337\65\317\5\246\216\264\346\tO\354\207\371\271\313\325O`-\fu\275\317\343t\202D.\257#p\311\320\27\17qs#\23Ds\257'\226X+Q\324J*\236\32\206F\365X]X\2he\r\310\375\vB\4\33\212K\254l\343;kU\216\247\224\0\235\273h'X\24\226\302-s6'\t\27k#NP\223\71\234\317\0\310\235\306\365\313\310X__[o\320\31^JE\24\330\6?F\264\206\0\rT\355\231\v\32EN`\234\36X\"\231\273\204$T\334\250\f\205\347\b\315\37\273\261\"\341.\333\204\221+A\204\207\205\7\205E\222\6\306\3\300\17\344 \320\364\301\17\220\247\26\246\226\311/\262^+\247[\16I[\222\240\243\20\315\370\367\345\361\300Jj\251\70k\261Y\272" + "\315\311b\263r\233\323\303\n\27~\"\23 \\\t\340n\200\34\265\252M\254\201\21\330\373hL\265X-\311\241\260\341\355)\250 R\r%a\324wi)EA\2S\226\351\361\345\256{GHQqm1\22\203B\371\6\273\277K\305\272\356\25\275\30\36\21 gK\344\222\36^\301\263\332\243\310\302\336%6g\360q\34**\223\271\230Al\"\326\364\326]\260\324i\235\32?\247\306\5\223\317\32r\275\203.d\334\200I&\241\273O\335c\203\b\226Y(L\214\0\21\304]E\376J,R\23@m\3QE-\225C*X\253\255s\362\34\177`=\354\373\301\252\334m\177;eSj\376hhz)\237=#+\273Y\33t\247\337\0p\v\331 \322?\277Nid\371\244\376\266\246?\322}\n\325\244\325\7>h!E\326\234R\337\227\226Kg\3\317\212\234\200\3.\222\332\250Y\371W_\t\336\225P\231yU1\1Cf\306Xo\201\226RX\347\63\352\361\32\251gB\372\377^\17}3\205Do \264\357\64\227\315\207*\37\351\232\v?>\231A\32\357\342\365S\223\257GB\35\32\332\21\342\223\32\316\337\230@\204\332\254\257u\301#\360\356i_\31\337#p\266c\301\224KbH\272\317:\334\33\322\301\354\350rB\b\37\314\17\361k\222u\260\257\315\311" + "\63\345\330\313%P\315\344\67\20\224\ra\222\363\3Z\23{\236]\256\351\340\31\214\r%\212\ti\317\26\301l\376\376\301\336\17\220\351\"Rx\372N\301I\304\274\62\224\323\2\315\217\341y!\32\62\332\31\315\321\67\215A\273S\347\362\346\231\277m\213\345\271Z\354\345\60\62g\226\231\25\325\364J\361\276\372\t\221Y\33;\313xX\305\303I<\234\312\322\347\7\5\276S#*\374s\20m\357z\344\16\367>\3\223W\360{=`\375\321\267V\252{\354\27W\217@\25\207\300*=\200\302\235\317]\1:\220\350\223\217EgUv\276@\377\233k\203\71\63\344\311\366p\33c70r\370\322\243\212I\271E\365\277\35\b9\177\353\234e\242WM;\n\ve\233\257\316\326\234\276\7\221\271\365\231\305\30\202Y\303\203\304\225\371\206B\356\317PD;\241\64\330\205\317\273\34\341\343\340\0\"\20ey\330\273\37=\336\302J\325o\207\363\351\314\0\346g\277\35\325'\245R0\356\251\"\217\65\363z\313A\273X\212>FVhp*3 wEN\2\305$8pk\361\246\361\221p\377}&\312\250\7\347\343\312\222\20\212\n\201\66\217\1~\n\255,\357\177\230\fc\270l\275\177 \3\265FVv\33K\367\366\\\26\302\354\341\236\273\361p\217\310_\305\305\367[d]\26\273\224\fW\221\205\211+\\\324#\232/\272\221<\247\26\206\367\262z\357.\230\261U\200;g\274\6\200c\1" + "\353E\252\27\340\346\321G\274\313\217\61*\332\335\70\244\b\341A\34\36\205\217\212RYCehb\241\7\23<\334\317\377{\262\354\337\200\366\247]e\322\64\6\t_\326\247\234r\253\310\301\233\347YH\362\226\330\354l\224@&\36.\202\210V\335V\371\66\271 \262\232\220\324\337wF\366\233r9\344\35%\213\224\33\371\304o\35\25\335~\333*\310\fp\263x\364F%\360\60\236\263\302P\314\23\326\264)\4.\r\f\211\212\225\71\17_\375\23\345B\234Y\361\276\330\311\344/P\26\350\307\361)y\306l\200gesJzH\31\3#'\235\266\352\270\\H\373\365\5U\337\b\342\60\332F**{\370;\312\333\266\333\241%\321\"\235!\245\207V!\203\213\324\322\301\226\236m\216\22\216\323\260:\312^el\370 j\203\314\211+Z\274\205\30\6\66\240$\210\371\305b\375\354\355\23Kp\304\270\"" + "\342b\356\311%y\2\"\203\317\70\22\343\305\r\253\345\352\355\320ifY\23\242\302\2J\367\245i9P\303\225\351\302\224\342f\301\235g\7\311xH4~\333\371\16Wfz#\211x\245\21\0\316\244\306I\32YeL\262\4*\314\3Cq<\21\304\356\205\367\20\311(\266\tc\177\250>_\7\66Q.)\332\253\242}Z\264\317\331&t\273iZ\373\250)\246e\234\254x\227\t\2E\236r\305\300\204P\34\340\215:i\301\257\323\276\356\376\237\223T\343\317\324<\323\303\312hJf\252\315\70\1\62T|\306\233\350\64\n\205e\23M`\266\312\250\65\345;of\241\341\377\327t\216\301(e\307\323|nMe\233\351`\323\353\"\317\315\224\227\210\f,\24\372\v#\225\5\312\212L\367eO\3\26\314\355\265$\241LV5\2\63\320\266\2\5\64\204\362\32\276\0\276F\310\242(,%\352\27\321\362\212\207SF\215\347\342-\331>\4\307\330\216\f\346E\274\367R\307\23\35W:\236\n\16\374\202\317\342S\321\70\247\315\33D\305\4\262\374\336x\345\31\16};\343\322\336\t\tn.\232\350w\316\\<\276W\377\\\375\17e\226Z-g\275\223Y\357t\326[\25\5\71\201\301\n/\330\213U\263\260\260\350&\6" + "\275l\25\276\v?\325F\272\307C l\305\325\67\346\6\f\364\276~6\n\240\374\327;V\243\205\f\300\372\355\304I\261\326\257\336n\251\71\376\322\377u\202\36\200\374\301\210\364\375B?P\216|\33\256\233\362\24+'\r}\r\323\211\24\371\266\7C\313\64\24\263>2\216\35\351\213\224\32\321B\344\317\21?\17]\332\324\264N\215\213\\\335i{Q^\372\211\250\6\251w\352\376\332\357\263\231\212\f\317\255\333\64\317p\35q7ML\36\226\26\367\211=$x\265Q\30\351\b\220Ed,N1\6\177h_\214\272\65\5XI\374\371\330wf\354'\237MkNHsb\374\263\212S\276\315\16\236XffU\304\63\270\250\254\360\251\n\207\357\30\362m\301\303<&\375\27\344\61&\273\32.\2\376K\337!4\244\f\35T\"\322\352\311\375<\32Q\344\324-({\21v\325\202\263M\351P\23\341\344\274'\311l\33N\250\245\301\63\267\201E\377mh \333\37*\"[\0\252\303|\337\226\63h\247\26\207E\20oQ/!\6\252\264E\257Z\314\352N\263\310\326\302\343f{\200\221\20\34\355r\257 Vh\"\7\33\263_b'*\240\306I\202\244\27\27\235\214\372\34\255i\25\37lq\331\65)`\326\304\227\307(\3" + "\21\243\nJ\231\360sJ,q\237\377\65\303T\326\244Q\366\225\336M\247a\265\3)z\224\320Db\t\f\361\31?R\4\v\220\213\337:\7\375\342\27;*\367\235\231\354\321\354z=\350<\vO\326O\210\23\332\66_\371\31\241\224\325\306\"\336aw~\267F\344o<4<.\243\326\215\367\342\201\7\215\212I\352\216\7\177\344\217I\214\227>\310\b@\r\345Q\302\257\237\316\362\242=\201\70\255\313K\37\375\366\264e\334\225\231\270\345\344e\337\331\373\203LP\216~\262\326\200\tnx\254\66\344\203e$_'\26\231\60\37r\377\2\370\274\363\270\331`4\1\6\301HdF\374$\244\302\33\270\226\360\311\277\316yz\372i1\320\t\223\250\240B^T\316\23\360\376\211\272\313d\200A\342\261\1\310\365\353\304+\22\\^\23\30\315\24\243rP\26\61\361\232\313\276m\336!S$\245j\277\303\31\326\235z4\254\345%\313\34\362-\216\203\300\323\331& \265\344\334\27(i\240\274\20\242L)\215I\232\367\35\256\314@\f\202\307\37\241\273q\317\214(s\200\32\25\273\270\70Z\200L\230#r\314\23\230\266\217\r\24X\362\237\26\234\233\232$\333y\260 {\26\63Z\366" + "\320\4f\233G3L4%\200i\312\320|n\25V\24\203S[\352\327\350g\225\244\205\216op\334\205mo +\204\25\252\347z\27\313.\201\37\211\31\2L\216\337*9*\6\270\366e\377o\"\314_\371=J^\201\35Z4\353\320\f\211\337c\16\242F\310\6\356\332\324@=}\20\333\233\216\311\305]7A\257\221B\242\202V\22\0\240P\177\363\333}\355\367\270\243\302~\30\3K\215\247f\317\201\274\1A\226\214\\\273R\262\205n\211\312\301\333\262\245\275\343\254Y\342Q[\275\361\333\341bS\231\254\347w#\373\361\364\267\303:\235i\340\230\374\265\354\253\310I-7\227\343kY\5\276\277%\344\202\5\16\301'\267%\262=8\377\235\275R\330\326\17\344h\26\334\207\20\304\332R)\223\240kYa\200\305\241\24\32\254\33X\355O\3\fd\310\355\232\27\356|Y\270\343\362^ +\317\200\26r9\340\355\223x\t1\273\233\256-.\241\273\314\353\200{BT\254~Q\7ce\364\65\213)\261\\\b\226\347bFn\262\65\24Z\300\217\244\66\344\340\246\271E~\347\230\63\375 8%\362\302\327\233\326i\253\276\306?\327\243\311\234c\266\5\1k\230VIk\b\212\33|A'Z?\30\344\351\240\r" + "\331!;c\324\63V\207Mv\204Zl\243\210\312\234\33\200|w\323\b\177\267k\200,;b\210\226y\267X\177\336G\276\334J$5P\274\273\6?\36\67\35V\307\27\311|r\265tm\332\7|\357\311\326\211\367\312\335C\254\64\272\342\237'\244\207t\237\311\220\213\312\223#\273\262\70\21(\242\332<\200gP\224\214\365\331\66\202\64\266\3\65\223\341\34[\221\67\2\60\31\17\210d\275\272Fa\31\306r`\235\375\377?\347\37\36\265\242\376\246\65\377\267\67\60\61\66$G\202B\24\373\323\217\\2-\224\35L\340\246\242}\223\246\32\241\200\272\221\362\4Q\251\257\351\255|mW\354\374\61}\313\35\335\355x\37/\351\301\"\325\227\361m\326\60Fftb\332\372\251\221\310\207U\25\f2&\370\267\300\221\276\366)\273_\252\341\252\263/\335a\203\223\303\16s\364M\32\226\374\273\342\337\23\376=\345\337\63\376=\267\232\26\235\30\17\242\226\7\34\221\266\210IL\254\260\36k#\353\222\31\6J@\337\344\214S\373w\325\373\321\334\340\62u\214\62X|\31n\327\275\257\325\225\234\350'\323W!\263j\311\277+\356\325\60<6\4\242\230X\212\35\227" + "\226\372}\347}[\346\246\363$\366l\326;\237\365\336\347\37\323\321\225\263\37`\340kt~5\36a\206\301\332\366\5\62\266\235\302\177\332:\17\346\306qe\v\353\247\350\275\233\303\24\257\302\306\212\236<\263\311\233\267^EzH\257\270C\213*R\362\216\356\257\177\70\375\265\232\200\275\311\4@\bb\0\32\35N\37e\341\r5z\25\267\347\321Y=.\271\307s\246\305\325\373'\333O\222\26q\260\254\70\245<\1/\252\273qb\307\220\21OI\317\203\242\66g+\274\32\372\246\335\247\203t\21\204X@M#O\337\265\343\320\3\250\321[\23\230\230-9\342f\344\317.\33m\275y\235}6oa/\312[2\253\36\244Nh\302\27\31\341.W{mO\333[\205\316L\312|Ww\375\22\204\206\\Q\247\244\276\235\311\243\227\366'cR\241dG\274\352\v\207>\245?W/T\343\364\346z\261\275.\256\306Lb)\304c\207m\305\216i;\0\2/op\221W>\1\272=l\244+\262\326B\264\32\231\354o\n<*\22\237\65\vf\217\263\371\347\252g\207\23a\374~\\\25\211\204?\244\61\221\71v\256J\177\326\v\374\61\34\66\34\326a\363\342\325@\214\346u&i\204\32\213\206\b\336\16\22\206\312kE" + "\33\310\353\36r\270\272S=>\215b\201oc\361\266>\245\204\306\276\275(\212KC`Y\372\212#:>\211\322\307Q\372\64J+/-\326\321\264\211\322\66J\212\347\315c\206k9\304\234\205^\227\253y\24oY3Z\326\262a\324\254e\213\303\325t\2\6\16\367\231\271\346\7\364;\314\33\212\337\325\207\256\221\217#D\332\325\335\335`\322IVrd\357V\1\260\367\302\366\322\362\61\257<2\312We\35\300\237\242\35\311U\357\305\247c\22qOd\264h\301\276\260\277/\341Z\250\202k\301J\317\37\206\322\21\226\67*\234\216}=\305~\215\315\202\251\r\231\212_\16\333U\321\22\370\344\214\203\202\"N\250\20\60\350\316\322\257\356jKQ\232!\362zGYe\235W6\214\346\71\372\365H\211F\242\25\264R\24PH\373\242pB\24\324$\223wt\200W\224\323\254\375\67\356\215\204\244kM\262\233M!\341X\204\"&\30\205b\33x\20.\257\20\274\16\222\257L\337\277\222\276[\2\323\227W\37\272\311\241\257+?\256\375\270)ax\245\35V\266\"\241\321\325M\201\321\275\277\32\273\206t|!M\233\66Vt\335\237\224\362\334\214\307N`f3\215~\261\277\2\276\277\237" + "\223\2\236vC\272\337\273\23\21\332w\303\1\260-.\31|\201V\224C0\246\221e\341\324\315\205M\301\217W\226\270`\271\232\261\241\275\362%P\331\320\302(J\312+H,\230[\255\222,M\244# 9\362\64q\23\322#\313 D\261\221\305P\246\367G\354 k5|e\365\240!\362\271WUI\225\61[\323\71^m\366\356\267\22\342A\217@]8\356\367\255\227!P\360\7;C\37\262\335\315\212\bZ\212$\6\374\26P;\242\231\255\0\351XPS9\t\330\256Z@\306\71\272V\341b\354\315:\334,\232\33\250\22\260Q\325\332\373U$)\233\342*D\252\245\236\275\32\34\316dQD-\f\256\253\273\7\347\210'\16\27\25\3\330<\266\216\373\330\177t\25\270\231\263\0\242\32y\251p\203p\363V\214G\2!\7g\242\306If\377\233w\236\257\306\212\216\336Y\225\356\263\367\350\265\220\262\354\273\202\312\306\375\206@C\365\216\23\313u\bC\377\324\253\16\276\71_\350\213\377\253\215\64b\230\16\2\305\4>]\253\200\324\240\267\365MfNp\201e[\301\211\64D\210\244\241\240\233\361R[\337\237=\226\342\20\243\236a\236\327\223g\331\32h;P\344yU\237\350\223\367RF\22\366" + "\65\355ZN!U>0*\230\23s\221\5\0\353\312x\334\364`\366\64Dg\v6\344cN\30\"\303m\262\256\247\64e=\313\320p\243\67\303\275\31x\16\345\223\3\263\356\372\351\222\tJH(\302\350A\31\25\65V\376\343\363\326\36;\306\60\364!\240\251q\306\203.\327u\337\36\217\21\303\324\f%\310\217\246\370]{;\266\323\316\205@\314\0\263\315\260X\367\356\307\n\373\265\254\n\240\30=U\316C\22\203\31I\261<\242\305}\354xG\303\25SA\347dP\1&{\304)\235i\246\223\216\335'\27b\370Yz\275\ts*\340\345\225\30+\310_\32\360wS;\np\323\267\226\17V\213\367\340}\313\303\r\271\61\324\375\214\246\31[R\317\34cEA\252\241\214\"\1\32\224G\363\353\230\366v-\252\71[\335\7\313h\370\204\375\214\235k\221\21\36\326\275\226\216p\234\367$\225\202ta\17\321\360\222@\347\236y\360\270\71\343\310\323n\343e\237\234\212\305\325\62\314N\37\272\276S\266\304\17;\302A~\201\306\60FVo\304\300\215\264p\212\331\216\370\372;\252\223\217\373\17\304\357OhoW\367u\327K\210\\@\226e&\"\340\t\245\234\357\333\234\362\353}\236f\21^" + "+^qz\36\261\251\205\224\37\306\203\224\236\256g\265e\374\1\351r\n\204.\31-\212v\216\343\60f\321\330\330\320\342\61\215%8_q\2\275*]\212\374Uc\21\274t\365\v\347\360\252\250-7eu]V\267\260\346\330\335\201x\261\323\71m\231\323\342|wR\234\230o\215uK\17_T\227\252\257(\341^\215\356\1\222\211/\352\64\311\352Ja\6\313\363xy\32\317\2?^\374\336Cx\23\226\377Z\375\347/\227\362\23\225\335\221QT\350\205\33\202\23\224i\347\335\20\70\t\353t\241\34+\315\266\334&x\224LDCtC4\31\242m\241?Z\272:2\357U\302\364T\251@\314.\301\342\346\220\\/\323M\352A\274\344\240\352Q\243\263\370\250l\34`\\\356\357$v\353\310w\233\223PU\240Y\26\220\375\361\330\365\235\230K\245\26\374\35m\345\37\200\324\334\327S2\207\341\277@\235p;\230+\365\62W\212`\177\335\35\265\227Y\1fG_\255\364\345\234v{\353OQ\356\230;\275\25\276\"|69\257\253B\227\373\233\244\266h\363\311\271K\310\356K\317\351\267atk\331\204yd\300\346~|\322\36\207\61C\335Z\26\31\254>\300\217\244\"\243\327Q3|$\351\b\244\222\266" + "\355\373e\255(\217\240\220zO\367\65\\\254\306\20\324\240\260\352\2m\27x\232\372$\345\251\225\365\335\377^\237\225_{h\31\217e\24;\326)\200,i\225]\350\21\361H(\327.nB\322?l3l\271\206\270\266|h\334\343\337\332\21\27}\250\211\313\237\246e\362T,|\vC&G\315\314(KC[\371q\275p\202Q\371\6\357\352\331*\362U\27\325\310FLS1\350Yl\220a\234\62\342\274\317\263<\1l\250\341V\27\367\60\"ql\353\336\65p\277vc\260\261\334\24\315\0\377\216\\\363\177+\342\214)\325\25\274\63\64\307\f\1~\27\336\252Wc}H\232\315T\311\327\71\357\"\373S\335W\21\211\6\340\22\241\314\361\324\t\224C&\354\62\301\7\223\f\352j\1\242\62\222\204\\C\23\346\260\71\253g\320\336\335\244\215S\327*_\347W\357\222 }\277\365c\222\273Gc=\302\253j\257Y\0\357\343\20N\276YI\305Q\255\351\34\201`\242Wy4X\226\343rC*l\365:\rm\217\344\252\357\332\375d\306\27\335\322\322L\315/O\351%\210J2\250=\276\317\263@\271\376H\324\b\224\310\317cM\6k\30\255(T\366\27\313\223r\230\236\251\361]Zq\351\277S?\r#:\277E\233\2\\\344" + "\274s\334\221\317<\300\337?\36\"\226\65*\20\62VL\300Y\b\223M\24I\177\366\214\340\230IN\22\21m\210DMh\252@\367\352I\360\16\325\352\31\231!\252\30>\242\200s\266\303\34>\tm \272\377\234FJ\336\300\v \351\253\63{\377\310\tA\303\311v\276\200<\257,+%\231\4}\37].\351\22m\305\307Mup,q\212\362\241\63\226\364\31!\207d\304\356\233\376\314<+O\262\307q\6\370\344\355\371b\267\376\250\234\321\245\271\225\236\310[mA\252\264\25\356\353\376\330\226\250\242\356\303*\0\347@\323\66\6\310Cs\342\4\252\23\345\37~'\307\60<\253h_\303@7\212\f\313\23\327y\200+;AS\351\225\65H\254\216\27\2\275\27\365x\334\305\253\311\317\200\371\217\6\322\345\235\266W\206\64Y\276\324Y\340\224K\246\214\60\0\203&\312A4\246\267\214\325C\346\344\265Z\25\252\356{\371\332\274\376\374T\367,|\247%\204\344\36\244\306\227\265\61\230\23\202K\241\243]\0]\264\1!\7\nM3^9o<\334\1\371\\(\23\306\37\237\311R\355\273F\n\\\fb\34M\361\311\250\336\16Y\346CQO/\230\365\235k\320W\373_{^\35e\340\373\36Z\212\342f.n\347\342\332\361).L\203-~ 5\22\340\254;qS\224xL\256\62'\354\353\222\4\26u\255d\205\v\306\20\220up\301\305\27\5gd\230\303<`Eb\230\323i\357!_\222j(jm=\n\203\333\r\261\65G\36" + "\217\366\312f\"p%\27\351\30\322`fQ\250hqwU\344\204\33(\310\223\n\226!\364\204-\261\254Q\373\16\302(@\356\5-\33-\261\313\354\5\236\274\204|0\3gU\4Md\233?`)d@\316\251\310}\t\215\353\17z\30\225\314\22O\21\322\306\250\272\323\31\2\212\344\370\37S\356\315\371\202\f\356mdmb]/$\34\331\324y\v}\256\265\371X\323\233=}\212\226\4\312mf [\333.\311%z:\324GC\303\303\245\276F\7Af&\241\361\353N{LX\367sSX\370\302m\325}7\241\260G\307\242\65\372\352\345F\237\312jq\316\233\245\262\177\350\356\224\24\325\17\7E\t\376\240\71\344\267\0\65\205\374\6\376\243\5%\253\17]NCS\222\330YJ\252(\332\250\370\"\254\347\304\342\220\25\276O\352\215\375\320\35YyB\235Bg\216\250\243\210\244s\177\302\254\255f\232#a\6\16\63l\22\345\342E\17\242\306\336]P\206\243\326\326\313\357\204\257BA\367\25\314Vj\352\20\213\262\336\353-\325wf\222,\346X\257\236\302\265\71\311\323x\36\252\246\1@\224?:\22M$\215\262\272\244\21Qo\27O\236\352\244\61\222\30\366<\27g\267\323$\27\372\1:\25=4<\245\210\237" + "\214\320\5M\334+z\16\307\245\t\34R\252\277\36\264\7E]Z\314q\227\235\377\71\311\374\371\264(-\216\270yd\230\335\300\324\362J(8T\2\366\302\242\205\245,\245\261\221\276\276\33\226o&\333\303\2\246\223\3\310\f\n\347\20\70\236\nM\31L\216V\37p\322\353\330\35\63Ie9\352c\347\233\326\374;\31\n\24\f\2Jg\1\362\0\261\315AwpG\366V\210\20\255\362\312&\257\254/\25\342|\17\252\233\262\272-\253\37\225\325\217\313j|'&\225\242reC\214\36\r\353\222\30\362\212\303S\16\317<`\200w6bW\261uD\223\255\326\341\34\342 \304{Q\345I\363|Y<\202@\242\221[\265\fB\232l\20\31\260\336\236\34\364\311\33\344\231G\257\322\262;\352\257\224\253k\255H3`\346\237O\361\341\335&\327\245\352N\234\210\200\255\33\367\250B\200\243\":\2\334\235\16\223\315\222i\241\32\333\216\25'\312B\224 \202'[\241\23\262\321\215\256K~\230%\227\30\311\300\302!-x\4}g|q\350\246\241\221\347\351\260\253\243F8\237\232\361_\324Y\352\306X\217\301\201\\\346-\360\363\n\302\200\357$\363F\365\36\300.\254\70l9l8|\304\33" + "\305\211\354\316\177C\351g\0\211}{\244s0M\370\200A\"J\344#\"\"n\315P\265\215W\236\67a\232a\204\315\64+\344n\314\223\307\r!\221\371P\321\304\262\347\231Ff\263\315\214H/\217\1\251f\237\365\337\234\250\342G(\n_S\260\234W\260\227{\306!7\fk&\256YEZ\216\70d\202D\356]\375\344:u:u\373\214\16\220\223\263\r\354\316e\367K\241D\243\227\261c\220M\224\\O\7\5\24\207\273\372`\362\323\373\307\222\363zF\334W\264\244`\264n\37>\246)X\253\302[(=!\222?\343QD\3\317\b\277\373\265\26\222;\276\1\35\240\64\351\302#R~\325\v\335\321\360\332\243\246\71\301\7\375\342\312~U\336\317\276f\311\f\252\250DZ\324\354\201\252\342\207\17l\376n3b\342\331zc\327\f\343\r\6xQ;\253\7%-z \v\310b\300c\346o\366\30\1G\r\307c\260_\356\360\337\277\32\362\230\20\212\37eE\327\251\347L\247\63\t\205J\245\221\65['\0\342F\231\314\310Fs\26\23\304L\300\223\256\361p\226\203\205nR\201n\242\372:\3.\322MP\5\64.O\206\62\315\325\236\377RD \305#X\34\301\371\214cC*\250:\35w\204/\273\66i8\272\212\331\353H\263" + "\22\20d\342z\206\346G\225%\306\64\"\230\67\"\303`\337\353\2)P=n2l\2\361\314\24M\34m\326\66M\317\217\272D\rK\200n\222\244\v\302ZOJp\177\326\217\342-\354\373P\24-AZ\37S\336%\333\\@2H\276\361\26\66\63l\374\6\356\16\256\304\266DA\326\32\314,+\261\323;\31~\302^w\367\303\b\201\204\217\207\21\237*\2}\350\207z\264\1\354\217b1\224Q\24:\324\377\3", + 30876, + 72063, + 42212, }, { - (const Bit8u*)"lXu`Tw\326\275\62\63\311\270e\\2n\221Q\"\270\r!@\200\b\t\356$\270\273&\270;\324\r\251\267T\321\272 \333\342%\224\335:\362\325\r\257~\335\67\353\273\347\257\237=\273r\356\271\17\376\n^\330Tp\231tu\342\357p\341\301B;\374\3h\324J\376\374/S\375P\211\226:\24\232K |K]\1\2\342\355u&\350{\310-C\205\236Wr\365o\316\217x\374\371\340\357\30\315\323|@\206\32\375\233\60\371\361\360B\362\26)\216c\341\24\315t\266\325\333\372\241\332-\332\200\365A\277\204\224\275D%\324\363G\307\213\70\355\365\210\32\347\334\235\277\225x\f\34\245\261\327C!\230\335=\357=(\275ah\344y\237\24\244Y\371\235\310\203\35?5\217\202\356\337\332s\271vJ\356Q0\275\234u\216;\314\65\235\203\305\353biZ\262\66\326\f3wFnAx\267:\214\322\261\264\226\243\355\264\304e.\313\31\350\267\316\35\244\221\26\337\247\64\361\207\260\26V\227&\323\330\247o\356\223\60]\32\31\3\306\27\263t\34\370P9\235\212w\344\334\22\354\202M{\242W\21\177\201%\324\317\344n\201\343\36\17\376\210-f\351\215\340yS\276\36\305" - "\313p.\307\323\332\305\60\353\301<\27D\272\252\267c\240@Y@\0\241\30\64\306\242\210K\312b\v\320\336_\272\30\373\36s=\301\353F$\17\202&,\272\310\rG\375\233\271\321X8\34\274#\24\n\236\270\"44c\347\332..\17,\257\215\317\305Nk\315G\260\370\336\34\31\364\34\355\30\16\26Iv\257\314\221T\271\356I\342/P\302\375\237r\273yX\251\327\4\371Y\232\62l\227\60-\242\242\27s\206\362\262\227cWi\315\202\224\211zOs\266 \225\317\370\66\230k\263\355\334\3m\257\243gR\316[\31\357w>b\261P\205\302~\277\60\245\344E}\21{\22\362a\334\362\27\303x\236\224\23\32\7u\22\327$\316\235-\33\315\223\22\241\255\334\370^\341+\244\376@\334\202\327nN\366\302\62\225\345\27\354\23\310\335B\342W\360m\366OU\6\62\267\32\336\313{\21\4\64|\31\70\200S\277\v_\347\332\373]\304\325\307\234gY)\343\303\334\224S\370\25\255/L\315\373\327\60SH\20Gj\275\277P\345U\347>H/\260|\310\363\354\371'Y\361\34o\305\336\273\34\227\70\70H\371\"t:h\351(l\300?@Fs\326\64^\37N\336@\313\326\354\361P;\323\25\343\t\322d" - "\235\20\266d\334\220\265\204\233~\213N\245\16\375\314\235)lS\317\314\330@\266\207\21\r[%G\321\252\317~\223\375\250\270Mm\346\232&A\245\334\71\3\333\315\60mG\377\243J\35\27_\327_\23\342Y\210v\352z\334\26\5\367jy\210\313\317X\177\301\66\17\231\30\207\327y\307\363\330.A)\215\371\70x\234u\16\361$\b7\253\23X?\333\357\24\342\5\224\243D\331\64X\355\371Nx!t\234\223^c\375\24\361yv\267\220\375\300\301b\345v\304\363\320\236R\275\365#\251e\17\343\20\64\256\221\334\306q\177\tY\260\366\266\253\25J\333P[\212>\240\335\3\326\27\262\257\360\304X\250\202\355;\244s\310\364H\266\b\215}$\337\242\367n\371S<\347\371|=v\"\363\34\350>\337n\340\262n\226\253\334\367\t\327\62J<\240\373\215fl\211\374@m\17\232\356\245\26c\365_\341\310\216\276\34\30;0\370*\212\366\346\\\244%\7\342j\316s\251wA\347\17-\323x\245\61\276\233\225\243\370+\316/\325Ha\326\244<#\205\327\250\17\261LN'\251\344\r\303(\234\325*O\216\353#\251J\336\324#\265\5TaQ'\354\277\306=\21\66\4Rw\303\212\325\361" - "\237\320\336J:\36V\377\232|\24fS\336N\216\216\321\346P\342\33\275\4K\276\317y\200\26\65F=\360O\364\273\323\335\t\333\260\361\65\252\316\317E\36x\321\375\f\266\252\66\234\341\241Z\317Y*\373\321z\36\27--\\\210\211\347\264\227\62n\254\354\346TRp\216j%Hf\340\23T\251t\16\202\71\207\362w\323\222\261\261\303\224e\240\34r\37\225O\5C\215d\27\304~\326eA\275\324\277\17\226C|*\b\260\257\221\336\205\3\347\272\337\20f\334}\267\355a\20\60\332\32\270\304\366)\322*\36\250q\337\211\245\273\rfrT\310\254\60\377\245\202;\4\36\342\5\37\25\354\345\254\315\244F\251\201R\340DY\0'/\t\217as\217\254s\264\262mb/\344\265T\237\244\340\333\252\273\250\356!\327>\324n\23\67\302\232v\311#\360\307Z\f\223[t\23\63Q\254\274K\324\25U\3m\367r\336\377\251\17\303\352}\311\351\354s(\266Ql\207\256\25\365;\343\236\v]\27\332\64\320\362!\243\237\354\345\322\247Q3\\\354c\376\6\276\245r\243-M\305\234\63\232\247\254\17W\261|9O\345\21\217{\367\323\362v\361fZ\326%>\26Z\357\63^\205\1\26\367c" - "\231\247\215\365\6\257\b#\201\275iJ\257\360\61\20\320=h\373\26\207\257\366\256\26>\20\203\367+\17\263\254\214.\n\f\302\243b\276\4\65\274\37\4\356\71\327\376\16k\263\304\26X:0v\22{\256s \271\305\362\1\270\362l\242$\363\214\350\7\332\63\360\17`\323\354\350\221\177N\271\350\230\276\307\277\354\332\246J\365\350\363+l0\356\271\220\204\27\357\217\236\313P\275\177\213\262\17\347\375\252\376\r\272}l\373\204%i<\16\201\3\312\235B\372ej\217p\7\365\r\321\63,~\320\323\201\362\307j\276\205\36){\371\277p\204\370\"6\243\347B\370~\314\375@6\235,?f\277\313r?\233Y\336\225[\240o\270b\t\bh\345\67n\20\354'\314X\335S4\227;\357\260H\241!\32X\306\363\66\26\350\271~\215\357:k>\20\35\246\364\0\313}\324k\254\343\64L\32\37\372\26\376\35\64\373r\376OB\31\3I)n\347\232\373r\245\264\302\230\210R\345\3\316'@@\303\210\300\275B5\247r\17\b\372\200\254\323\262\177\205\202\250f;\24\212\65\267\251\376\271\200U \0\234wgA?T?+\272\23t\255\344\213(\224\316\321\n\236\26x\22K\257\32\212\240\346\223\334\265\2E\342\302\66\205$D\16\326\\\311\35\214\275&:\346\342\340O<\223\70tS\325@3?\316\373\32m\306\354\37\260C\231\71\"<\227\375A\305\357\264\362\316\304\333\330u\210\365\31\\x\255\360\4\344Wi\206\322\300\67\363\277\307tS`\27\352\236\21\177F\271\27-_\302\222\337c\273h\331\23\361\7\260\342w\373\26\354n\266m\202\365\323S\23xJ^\330\301\375\256\270>\3\1Y\225\370\1O\277;\302\302\f\225kD\26aDc:\6\247\362\370\276\301\17\4\317\b\351\202sF\344/" - "\341\312,'S\216Z2\236\226Dc\317PAX+\307\306\321Q\35\343dH\242\341\63\311\31(e\203\f\312\272[\267p\253\217\r\333`\304g\276\255\70*\333w\222Gw\363\237\300\321\17\7\336\6\367iy%\25>\240\35\216}v\346~\217\341\32U\35(~\343\v,Rc.vmo]\216sL\371\35x\336\220\374\217\261\343\16\363@pH\245\257\263\255\336\64\227\206\265\365>\313\r_\372wA\323C\321\257\261\373\343\266g\271j\277s\27\227\17\262~.00\251K|{\240c\271y5\206w\6G\241\256\225\370 \16\374\314\375\1\17\177\331\333\237\27Q\301U\336x*U\307\343>\v\336\235\371rs\233\254[\231l\214/\326\365\311\370mj\217\360\323\324\361Ms3\17\355\343\371\214\335\246\202'i\301\241\302\207\60\347\27\331bv\35\221\65c/\213\243\6\272\214\261:\240\376\353\200\376\217\247%\272p\277^\256{A@S\277\350~a h$L_\261\254\305\221\33}\343\60\262Mu\r\363\246\252'2\255\200\235\224\275\221\322\334f\257\361\71\316\377Y\323\7s\353eU\324\264*\346\241Ni\363\317\370\7\27\337\246\301+\274Zr\35\223\27g\362w\324`\337P\234Q\26y\34\315\r\331*\212Uk" - "\277\301\262\63\326\266\340.\221\253\240\343L\363~\232\372e$J\vE\205\235q\320*\217\17\202\r* \265Nt/\245\347[\236\304\1U\356&\232\177\246\340W\366h\375w\260\243\\\272\17\353\273\373\225\230\275\206l8_R0C\20\t4\344\202\67\n\235\66YR\340\177A9\226\246?\22y\1f\35\311\353\301k\307'\243\n\362\22\236#d\212P\250\310S/\377\31l\337I\207p}O\337\237y\364s\1\5v\373\336\266\22\307\212\n\212\311\v\212\215\250M\213\307\220\357\240r\b,>\34\353\17\351o\255FV\235\20U\223m\234\64\315m\214\306\35,\235M\v\310\265Jn\342\304\b\355m\30\330\340\321A\211\65g587\310\322\64\376\223\320*\236\375{^)O\31\36\216\343\224\363\341u<\353\207\310\25\252U\272\312\301\64:\353\4W\36vv\246\305\247c\353\320]/\373D\250\361\302\373\361\214S\221{\260\351\373\30\374\7\60V\257uf\206\5\213\64\257\343\222\231\261;pp\211\247+\231\"Y\237\201f\207\270\63\247\307[j\376\205\"\343\237\353\366\202\364S\272\63\63\315\335#;\312\25\177\261O" - "\246Am<\303\241\255\313\64\34\373\\s\345@E\330\336LM\351X\16U<\341P\321\250j\177\61N|7t\206\6\354u\177N\335\275\266[h+\223f\303\377\0\206jU\6*\231n\350\311\253\226&\230*\33\235\367BY\223\365\r\366\235T|\371\317\310\206\32Un\204*\316:2\305\21382\207\67<\237\n\201\200>\265\271\237B\373\231f7\321Vx\222V\\Ml\201\306/\243\235\260\360\250&\323V\261\365\227\354f\256\265\345>\200\363\37+\330M+\36M\364\26\370\217\64\305\342r\34v\330[N\346_\263\67\323\304\374\320%\214tW\235\303\245\367\306[\v\224\233q\324\244\266\241\333\360\7\301\317\22*;\256\177(5\230\365^\361\36(\215\31\374\254\70\316\217\343\310\67|\17Q\253\233\306\223\354|EV\204\r\367\371o`o\247\343\265\214`\236\71#o)D\37\326\216E\321^\\\232y\253\326R\243\1\22St\333pB~\250\216\0\304\333pv$o\4\366Xd\327@F\271Uk\267a\260\255rAF\345.ZU(\207\177@h" - "\342\60\376\205v\3I/\320-\350l\262\214\300\222\1\71=\241{\255]Byy\232\t\324\372\36\223\231r\26H\266g4M\366\r\212\bWpu\255\363\25\262\336\222F!]`\331H\375{\270\357\207\16\367\231k\321\261/P\5S\267\204?\311\224\317\370\363\332\327\260\t\242\243\250\252\235\363\70\317\231\233\367\213\263\237\313wA\311Q\3Rr\216\336\303\261\61\332\276B\7\216m\327\232zQ\203\63\260\t\246}\24\251\310\374\343Y\375y\342Q4\37\317.\306\376\275\335\3\61\n\232\275\320\345\274ux\246\375\312\233\257\321\1\317\203\203\320\362\33c\22m\27\224\305\70\252\331\367\263Pu)^\356=\317\342 \216\344\210K\255DM\7\261\214\206i\275\367\t\177\34`\342\341\320~\230;\273 \202-\357\64\314\342v\305\246\26\70\64\350\225\223\272\304\365\66\16\336\344\251\242\371\276\202\v\270B\26\177\36\346\67\26,\207\25\373\22f\254Q\346\332\5\361\216\356\223\362\30\305\267\352\36\202\236\367\71f\240\367\234\374,h\372\212\235\270\252,1\6f\177\231?\bV\335L\232Y\271\203\177\243u\7R\365\264~Lj}\306\222=\257\71\322\\y\323Y\307}f\345\366\2\1\355{\233\256S \255RaV\21\336\244\1\245\356\223\354\310\223\356\244\372\301\376/\340\337\201\232\357\304" - "\225\244\360\360~h\363\262\251\23\365p\332\363(\360\212*\r\303\336\366\316\317\34\371\343\r\222`)\316>\310#\257\370\304\340\335\252\350\17\213\277\216\r\303\242\255\372\373\62\214\331\372\242)\222\21c\371\357h\212\320\267G\261\227\253\272\70\307\341\212;\343\37\200\200.\33\255~\322]\223t\346\234\nI\17\201\372\62\336/\377\305V\232y\320\240|\217\244\60YR\364\377|X\7s\343\266\22\346OA\252\223\231\247\233\353/\347\251j.\347sy\226\257L\246B\344JB\4b\365\26\240l\372\327\277oAR\361\71\63/\205\330&`\261\35\66\213]\33\213W/_\276\64\227n\355\235-\336\232\5\227%\211Y\270\272\361\66\261\304\342\355\303[sG\266.\306\346\223\65S+Bb\213\361k32w\33\62\237}r\265Md\26\364\337\206\274\271c3\376|\267\370\7\67\t\305hn\311;Z\231S[S1\236L\315WW\221\371\312\342+\303+\350\303\222\242\231\360\203\v\353b<\275\370\301\\\332P\214\313\344\70\364\252\25\343\65\251\354L\354\232\301s\342\335*a\343X6\244hL\342\266\70y1.\306\276\264I\354#\200\212\217\242\31\307h\33\237\314o" - "\212\233\67\277\27\343O'\307Y\317\23\375\235\31W{\n\251\21\354\3k\204\24;\346\214\342\216Do1\261)yH\263\230\271\225\264\371A\5)\230\233\r/\235\355\221E\33*\341\232\200z3\343u4\247l\22\233\63\262\330^\251\324\302\216\251\30_B\247K\27\34\4\374\312\274\231\25\343\260\206\t\257\34A\374\206q\322\273\227/A\204f)\331rkn\246O\260\37\24V\3\351\252\306h\25p\17\305XJ\v\263~a=ii\275\317\224\300\256R \271\362\351Eo/^\274x\1\372\326\2\376d>\274/\306\61\221@\330\334\70\317IQa\341r[\214\233\304\245\330\270)\306{\27\365\362{\25K0\321\370~\325x\30\v~\3n\223\371b\327\210\206V\375B\365\322S4\26\326\v\370\367\207\247\277\273\312J=d\217\336\332\65\25\23\275f\342\314v\340B\r\202\254\32-\22,\365U`A\257\67Q\346=\313\66\"\23Z\304\226\34\17\336\210\306\5\63\16\66q\335B\314\223\333\263\67\60t\271Q\224\213\311\365\247\273o\0\353e\326$C$y\211jo\30o\255\247s\215\317n\227\35\303\215\257H\314\314F\335\344\1\356\v8SAb\375>6\20\26\262\333\225\20\1r\270\241.\325\232\314\31\66Q\331f\211T1S\301\231\3r\272\341\230\6\344\206w\0\221\6\267\214\275\243\31\r\266E\372\374\251\332@/s\326\4\330W\301u;h\1$\376\200/bbD-!\7\325\375" - "\232\255_\255\210c\225\220\300M2\323\215\5\203\3\242a\227\213\254\306\241\n\376\246!Kr\24!\302\256$D_\3\241\212uM\243\361\350\222\367TL-\312\61Kp6\207UDd\200&\336|\242{\27\217\264\24\202\255\341\4\320W\340\305\215\71\17{\v\333E\305\64\33.s\204\f\30\356\366\305\331`\217Q4wN8i)\277E\230\343f\220\331k\337\201\211\246\313u\322l\236\222^\37\221\337HB\343\n\301a\337\r\312Qp\351\261)\246g\343\313\33\350\346\265b\366\330\5#\\\206\213\353y\252\336\255\375\253\370\316\30Z\244\273\206p*dS>!R\354\345\373.6\322\262\333\324(\n9\362I\335\326G\26\66\23\357\310`\335!@\201\273\22J\230\17/\25\334\231\243+\4\217\247\276\225\365\236\213}#=T\354\34\273W\256\16\215WWd\23\341\367\254\311\345\254H]?\270\372\304\272\264\71~\36\370`\352\211*\36K\20a9\5I\22\222E\255\253X\22n\25r\266\326\256\247\375^-| \314\334z\375\204\177C)cj\7U\361\374d\364\ns.65w\26f\205\270\71O?\24\207\237\325\224\315d\256kZ[\340\201\315|\275\216\35\244\245\67C\212\307@\255\16\235\336V\225\203]\257\257/\363\307\274\236\25\63\26\313\310c\342u#\16h" - "\203:\321\317\264P\267\317\220\241\310=g\17\374\205-\205\252\256\315\342Dy\201^\b\33'\227\350\60\25\\\271\365&\325V\324\250e\347\65\235Q\274=\212\275\223\212~\337\273fk1\204\366(\330\237\254\223\357\61\63\235\215nq\215\357\210P\b\256ru\216\325\335s\236\62U\327\251\26Ku\341%BA\310V\275`?\25\0\331\346O?\307\f\372\17\65`*\355.\251\300#\5u\232\360\36\261\335\rSE\256\63C'\3\346\274\327\216\65\301\212\353\66\345\306\231_\315d\331l\267\r\320uT\242\36\204\235\357\315\321\274\66o\376\230\201\4Ss\310av!Tc\v\245\375e\37\212\271MGTk\270\315K\36a\f:\316E\332\302\314\320\206\274\31Kr%\27\363\252jq\322T!0&\276\201[\346\247\343\321-\273\n\220\247\275\205\v\0\354\235\330\336\211\375\264\236\237D\363\232\304\372\252\213#E\326\24\312v\30[@\331\71\241\341\215\366\341m1Gu\262\71{o\\\320j\r\n\325\255\321I\b\340\332\303\212\337w\364\305\216Jg!\307~\324\70\70cC\\\27s\261\330\250\230\343N;2+\341\32\234\240Mx\324W\202\371\342\346\312\\M\306f\354d\251#\236\371\360" - "\256\230\357mt\373\334\35\250\331\223\340\212\17\t\246\243\341\245U\334\272HCR\337\211\263\325 1t\346y;\360\273\31\267@\376\275\327\326\340QH\b\255\241\255\65\323\17\357:\255\37(\251'o_\232\33DT\343\322\337o\325\342$W:\223_Q@0\fRL\nX\16n\v Y\217W@MQ\341\rI\327\264\25\251m\350\375\61\205\t`4\\\37\202\330srnN\204 \204T\334\66(\241H\233\274|s\372\275\261\\\234\70\n\225\213\233,Xi\322\367\303\263\271>\312\257\216\23MB\222aEF\330\255\267\265\335\342\324\205\256\243]K\254r\301\372\301x=\326{\373P\306A\26\235\4\357u?ow\261tN\201\270Ybl\354/\361\37m\214y\322:\257`?\227Z\210\20%Tb\242\35\340\241*\0\304\374\375\362\365K\5\\\200\326N\247\16\215uX\272\372\333\270\346\375\213\227JZsJ\24:\303E%(\337\\XI\212\rc\357\23\20\323\375\t\302\313\202\235\255\223\v\255j\347pwn\322F\303gcS\262\1\22\254evXMW<\204\210\264w\374P\300\226\333\66\327\364\242\177\1Nq\361\350J}\351\300<\371\17\5\3\353P\253#(\217\217\255\352\\\27:\371A\354!\3\17p\241\2\236 \5\240\356\36s" - "\305\351d\374}\332\344B3\314C\367<\342\60\302R\344\341<\352\344v\312K\357t\17o+\227\203\361\224\255v\36\254:\3\352%\1z\255\vs\273\366\4$\34^]@\270j\361\25-\4\36KW4\363{\1\66*N\305j\263B\343\327?\t\230\327\317\te\371\224\322\347\26({\227\70\34\0\250\323\303m\237G\300\332\r7\241\352^\233\300s\341\213\7\340\60\255]\321=\254\220\312\315\23\326\361?8\256\306\236\r\211\220\60\274\353]\322\301\f\244V\377\330\64\24u\255\346\61Y\237k\355Xj\273F`@\317\63[\327(9g\332\35\64Jr\363~\253\240\70\22\363o@I\313\b^G\220I\346\253\216\61#\f\271\253\270a\351\337\352K\266\251\177\263\250\324^\343\5\372x \336K\236\23\0\n\241bc} \34\353F\327e\262\201\212\63\326\371\371F\277\200\327K\262\202\325\347Y\351:\363\71\252&:[\3\331\265\243\353\253\71\200\230p\205\343ar\357\313\65\350M\354}\250g\342\335\346iI\"H\201lr\27\0\240E\335\303\371\271\354H\204\324\232\361\321rt\321\267\261K\324f\247\207\67\241K\232\35\\e^\3\227\312S,\316\201]\270\b`\205Q\305\350\63,\376K\247[Nyt9_" - "\7\227\363\342|k\305\35:r\257mq^c\277T\234\207\212J\n\31\320\327\226\371\250C\305\301cwT\357<\345\21\214\271V\241vj\245\267\363\63\24G\200\262\"\t\214\65\fe6\2I ZU\306z\3co\251}F\274\344\304\346\333\63\342\365\216B~~}\227\224\317\204\236\327\311g\354>'@t+[\331\342\360\346<\217\332%\373'\370\200\335\220\70\17\204kJ\210\67\323\377\1\0\346\235\346?\226\b\327\331\206\335\370\t\272E\31=\372\360\62k\241\202\217\265\223\342\343h\342\244*>j]\316\25\32\240\323\201\320\1\200SX`e*>\22\355\20\313\220w\265\71\243\320\315\357\227\r\24z\362\67Is\305/\314\253cs\204\33\62\34\223\272L\262\22\334\336\372#\375q\327\25\372\204\315\357\276\277\347U\27\60\333\251P\335js\v,\bt\341\336.hV\215\236\37Z\206\377\372\66\5b>\363\64\374\25\351\2\66\300'm\254D\7" - "\210\34\32\311\27\213\335E\255\247W\353}\1\336\226\240(\326n*]\266\342B\332\0G\255\340\372\207\377\325m\245\215\215\243HT?E{\237\361\314\364\334\371\346\276\273s\256\355\34\333\337\344\b;\264e\360\2J\242\374\372}\257\240\"\367\265;#\252\n\5#\216\342\325+\246:\202C\241\23\251\177\377U\344\210'\326P@\334nT\26p\245;\22\301X\337R\363\313LfAvke\2J\270\177\344\70\212\331\317R\321\3\27\330\62UG}\340\260\310VnG\376\343\370\340dzZ\201f\277\4y\232\32\370\231\233\316F\b\317@\322\303\276\5\364Z\303\31X\314\361\24\256\322\202\326\35W<^xd\257\63\30fsX\251\364s\22\300\17\rt\340\311\366\to\331\356N\302\34\374\4\374\rj1\232\262Q\320\27h\367\340l<\314\226\321\355\261\347\30A\363\255!\241\352\370\ni\200\200\243cJ\262\22\216\f\26l8<\357\205\237\253\216{\273\266t!\374\320\365\255I\311\302\366\300\37;\231\274\230\220P\214\220.&/'s\220s\6\37s\261&\360\263!\r9\33P\301\373a\273n\205\256\304o\26gX\237\312\276\206\332\362D=}}\214\335\367\353\276:\362\27\307vk\t\221_" - "\265\266\374\315\32;\372\234\336'\305\254u\215D\206\0\t\320?\22\65\271\326\243(>\345\330\220\315\316U\\\200\303FzBj\200\263__8\376\0,!\237\364-\203e\252\326\313\327\313\70@\177@p\200\221\b\233\1\312\343\323\70\236\274<\252N\f\221\274\275\341\304Ai\255\301\246\306\324JC\210\64\321*6\260\306\205`^\22\\@\220\20\321w\t\253o|\353ZD\346$\214\263\17T\210h\215\bp\320\24\34\212\234D\231p\230m\247\203m\2\26\70\212d|\300\17[t\312tpR\241m\304\205d\340(\25\260\3h-}W\350\272\372_\205+\237oH=\363\235\340\365\360*8\242\307\216\23W\343\32\302\372\374N\354\3\3/(\33\202\266\264i\306\264\221\316\"*;e\376M\307\201\203\305\265\b\254\244\316\31\306\262\253D\221\354\340\230\337P\376\375\304\357$\354\370\361\31\306\332\273d@\307\66#\217H[\317.\311&\306\314EX\360g\205\254.J\277.\346s\262_\35\344\320\254Vh\205\247c:\0\62a=\351\66\23Rc]7\300i',5O$\210\252\336\301\214\206\370\245\31p\235`\6\310#\213\260\360[\222i'$\235j`&H\200%\360\342\247S\25\317\321\333\236\0\355d" - "\210\314\344\234\330\26\336\24c;+\220\372\334\342\30\327j\264xO\277\2\232\305z9\0N\247\363\27\323Y9\250a\217\210e\260h \335\31>\260\355\f|\375\251\301\304`\237\242\r\310a\313Qy\216\361\v\324\200/\250\317\223\1\252\342^{\341\61\313\60\356\23\207\271f_\331w\370\362*\375\355\351\333c\5\2\247p\275\203\f\6E\337\65}\264\220\20\313\t7e:\22\236\202$>\205\1\302p\324\214\212\262\250\370Kc\342\372\357w?N\276\377G\256dh\334a\373Bs\37\311Q[8\214}e\244_\n\221E\352\212\237+\307.\336\304\314\347\271\203\202(\305\272\215c\377E%\241\371\327\34\325@\273\343*A\343\214#}\375\303\367\325\351`\222<\352\37\17\367\t\36\365\310y\216\225\317\341\211\64\27\\\253\314\306\231\225!0\30\317\263\316\322y\223l\0~sCu\346\370\367X\3\f\202q^`la\212\b\337\"\17\213\61\"d\220jZ\277Eu\304\30s;\237Iz\223C\306\234\t\211m7\32\v\340\274\365\353\321$\311\244Q=\254s\32\26\177\24\227\26OvM\310'\223\376 Z\33\320]\221\b\334E\340aZ\235\37\374\364\253v\350\tv\234\67\67\234q)\317_\260\70\260" - "\356\200\f\23\345\223&\261`0\207r\343\353g(\334\332\343)\350\177\20C\340\330\373\35[{\301\211L\21\202:\254\237'\337S\343\276\324r\342v\364=\260\f\235\177\250\316-\3\204|r\353\322\225s_\225\237\366\225L\33\251*|E\n}\311\224\233\244\25\312\301\177\252\322\33\251\345]\327\365\22%\253\205co\33\325\362'A{|lr\4\255\351<9\33\251\1=` @\247\230\334p\327\v\227+8\32\223\334\360\23\375&z\254\256{\342'h\273\33\37\34K3\30n\206\234\265\63B\314W\347\bJe\245\ny\f\325\334ZfE\355f_\306\64CK\217\246c\312\r\262u\371P\303\340G\366?\370\225\211\61\243\377\v\366h\35\30v\225\323\\\336\224\371\b\376#\246\356\220\373*I\352l\335\260\217}\27\r\236\333\235\256\313\b\315\331\210\357\374\67\67/\264\300\220H\350\336\246\17<\6#\tY\255\230\67\70\201\b\235\7X\6_\363\301N\17\310\221\272\352?\240\24\340\240O-\331\201X\301\67\266\241y`" - "\271\61|\6:_'b\4$\230M\236O\336M\236\362\241h\207>\b\323i\357\230}\244\202`B\342g(\355\223\313\310\304\270BS\242\321\245\25\214t\302\306\211\332\24h\315\210.\t\350)\355\32\261\354\222g8\361\2\257i\v\205\330G\345@\34\67\63mNQRr\6\236]\376zm\240\257:\363\200\315e\35+\275\373\344\\V\376\364\25\343\1\211\355\217\353\37\71\311\64\254\61+Y\360>\216p\231\226\377\311y*\241\212$\374)\256\363A\326\365kj\0(\240\226!\5c\222\344\26T\26\34\214\300\25\200&\252M\260@fe\235\332\304\313\253\242w\30\313A\375\251YA\223\316\2\v\252\375v\273O]\26\303x\203F\2\353\62hEQ\260,\32\231\224\"\t\240\30\212rNJASy1\33\231pJ^\333\311\376+\313+\375;\311\346d\221n\202\35P\31h)+\221\223\245\237\323\207U-1T\24\231\vm\221y\307J\343'Dy\216\34\343\242\271\1\20\64\262}\260>\6e\226\307\217_`\306\304\211@r\371\221A\361\302\30\327\254\25\2\344\37$\247\220:\31\245\257\344S\27\364X\304H\24\61\330h\343\355t\1/t\227a\0\31\305J\376\350\200W\\E\224\233Y\"\215\367" - "\226\306\336\225\nx\v^\16\233.\207\30?1\t\34\71\65\360\6\64\347-]{\307\320\36\3\177\237/Pe\222\71\277\0\327\341\206\"\372\216^\27Q\373=#\374\34\202n\313\315\304\242\213wc_\17\301\6\61\244\377\254k\373Yl\246c\340\2\305\376J.\247\341\300\7:\331\303a\221I\213\226.\266\315\257\271\225x/QJnv1\354n}\371\36M\232\305\242m\331\302\347\313w\277\356\312\22Q+\367\226k\320\230\205k\31oR\345\274\63\r\\%f\330\342\r\375\342\367&E~\317\1\331\345\67\306\3\7\374\273\266\4O\371R\304tM\20/H\r\313I\217\316'\2\374\322nH\315\212\201\300\356\17\"\235\362\222\244q-\252\362U\26\256q\315e1\234\30\211s1\237\67\2l\245]\16\30SJ\245j\274\243\364\232\71<\261-\32\376(m\237\334\306\254\362\61\224|\17Z\r}\247\301:\276Zv\372\63\30<\27HN\204A\343\360\260\360\367e\305\344\320j\21\bU2j[\330\222c\202\204\203E.b\360\"Xg\262\254\367\245\240\361\254Z\34\235U\v\337\264xl\33\340\241\r\205\355 \327\372HX\246\250\6\336kQ\31\223\26\30\312\211\177\304c\211\t\374z\335\33^'\352L\372F\255O" - "\370v\255+\1\313\250\366;\233\30\307\354\375\371\211\357\214*2\17\200U{z\313\24\230\352\2\320Gm\336\364\67\332\272\222\355\232\250\35\255\251\21r_\rt(@}|\301\21\221\274&\v\320\312\255\273#x-0>\222Dp\255\274\0\td$\316\364\61\62\343J\362~\211\250\f\345n\334\24P\"\17Q\36[Px\25\341\325\r\21\213)\332\21y$@\222\303OS\317\257\315\266\351\214:\177\274\32\373\265\331X\\\215\267\17P\231\360A\323\273N\276t\360\314\32\20\227\202\316Z\350\n\t<\240\244P\244C\305E\366W\244\342\217\224\253\200i\7\r\274\70\372,\270\202;\201\226\35#\b\16\321\326\333.\33\214\334eF\344\3\325\257\377\300\347\307\306\261p\365\261Pn\274\310\306I\"\333\215\305\363C%<\360\370\225\252\367;J\256v\177\253\237\243\204\222\16\236\234\337e9B\17\367r\361\25\35%2\r\370\234A\0\327\305\204q\362trZ *\323%u\t\360Q9\237\274\235\274\236\240\5\271\21\275\237y\276x\365zZ\277\352\203\307E\300\272\\\234\251.^\237UOL\364x\353x\264}\233\373\274\300uN\204\376\300\233\325%o\230\65(\337L\353#L\331\245" - "\365\22! \224bHsc\16\v<%\241\27\341\1M\360x\tG,\236ApV>\217\307\373\374{\300\350r\246I\212\277\341\n\343e` |\325t\251\326\373g\322x\316\235\221[\335\240\66\34\21\356A\30\234x\340\364\270\31\224\204\375\232\21~\351\312$\16I\254\256\b/\344\336\260EX\206G\213I^\31J\235\5\263\244\307\257\336\313\220\212A/\310n\365\306~\376f\336\222\341\32\302\357l\245\txzN\327<\201V\227\300\17F\7\272\1\277\366\210#\212\332zD\302\237\251\365\273Ki\226q\217\60AJ,~\376\36\352A\315\32H\177\317\367\331\376!o\20\321P\240\7\312\20G\26\34\6\366\31\314\61z\f|\271a\273\b\210z\6X\351\315p\224Bz\224y\37/\331\223m\207\32Z\215-~\24M\263\356_\362\330e\36\265\206?d\223j\34\315Z\230\202j\217)\370~O\271\230Oy#,\33\204\360,2\323-\232\375\346\24D\320j5\262p\350C\0\275\246\254\310K\301,WW\257\225\213\333\n\vxm\353\377\372\276~o\253\353\263\3\305\234\327\302k_\313\260>\331\200\22B\365\241\331\341\246\34\213\b\260\215\362\341\1o~0]\333\350\222\250>\0&Y<\261\316\n;\5\305w\362\250\237" - "\241\b\235\335b\341~\371\237\261|\370\260\250\376\17", - 10671, - 18617, - (const Bit8u*)"|V\205v\333Z\26\65\204\fu\214*\4\vv\203\16Y\256K~\234v\315\70\354p\242\307\314\201\307\340kIW\227\24Y\316w\274Y\224t\365;\206g\372\63sd\7\6\254i\303:t\367\331{_u\325z\313\253\266geM+\226\365\331U<\274b\314\254U\24Y\215\346\2\256\217\344\352\342T\264\345\323\275\62\371y\25\241\250\314\341S\374\274j\356\225\241\22\204S)y\214\244\236\333\361\32\352s\362\326\67\65\64\61\215\321\303]\3\225\336\254 \305K\320\347>\204\276\367\323j(\314\252\261+\\\221Eu0dV\263mV\365Q\244YF\257>\231:\256.\255\254]i=\\\201T?\220\351G9Q\335\237\62\253\337\247!\vIc\211\213`\265\303\257\253\341v\254\306\333\f\365ZG\5E\247\211\332\177\25\251C\22U\307\257\63\65\367\200\253\17\257\t\365\25\257\251>\365Y\352\302Y\343\272\272\332\31\70V\337\356\n\206ZvV?\227\211\272\227k\6#\351Y)^\353\315fmO6\253\25\263\372l\26\17g\215\231lE\31!\352\67^\244\376\344\243\60\n\203\61\70\214#`\24S\363uB\266\5\251u\247\315\261\326\25\360t\327z\367\366m\317\301\241V\334\323g\367\361\360\201\61" - "sX\321\244/\210\362%\322\372z(\362O1-\323\307\265\361\204\32\365V\27#B\232\n\273\354\215h\323\71\244\335\233n\314\230\205\205\70\273P6l\317\326\216\246\275:\256kscX\333\230\60\264w&+\332\347o\23mo\33i?\25\250\336\65\312\364\344C\256\344\204>\370\256\251\217\276g\351\71@6\3'=\326_\235[\4\242\204%\333\223\272\252\25\303\372\254\204\207S\306\314\325\212\362\250\tF\304m\34}]B\372\7\67\250\276\177\235\343\216\202\211\303\351\346h\255\17\200c9\202\245\207\24\367\214\66\302\376\0\60\217u\267.~\215\340\314U\204\357e(\24e\270\270\313\361\302\233\2\277\275n\342\203M\230\311\205=\16s\230\321\25\27F\352l\355DJv\273\315o\364B\360\235\323\223-ndOOv\204q\377\364d\303\334;=)7X\367\bn+\271\301\200\214\235Bc\215\360\235\303\347y\337g%\227!\373a\217\3N\224\361n\204Jih\222\271{l|\32\31l\255\327w\35\275\22\251\324\222\266\350\243\34\65~\212\62\22\310CT\305\365\260yDz\n\0\16\207o\2\371\323&\31\220 \241\tP\342L\322\371g\220F\322\323:\31\216`\362\370" - "\251A\336xRQ\236{\t\231\227\21\374\235\222\235W\30\371\70\303\225\202 =\17M\362\243vvZK*\325\251\177a\271\241l\27\333\1i\235\334\256.>\16\266>e\201(\371f\261PK\315(\262\3\362%\270\261\226ehJ&\264\267\214h:N\351\304\351*\243\257\374I\346t\361\257\262\240o\235\256\232\364\363\323\325\363\221\223n\33e\270#\r\204\316\b\334q\327\304\35C\347MK\300\353P\312\366$\222Z1\244\317\246\360p\302\230IV\224\b\241\337u\3\270j4\322\360\216\64\304\235\311\262\250\350\263\33xx\313\230\331qN\300h\\\2Fo\236WC\262\60w\333M\363\303\316K\343\71\362\300e{\324\33\350\270D\342\350e\257~4\347\307G[m\306\321\207\216\177\223\243\203\b\262\274M\214\177\223]\337>\254\36\31Y#yaMI\27\357=\21\67\204q\354\305\16\262\362/\24f=z\261\301\255\67^(\215$/\225J\321\v]Y\277\353\326\255\215\b\266\336\37\64\254\303\347\311J\315\237\"\265+\327P\355\306\66\255\215\314\261\332\303\253\274\366D\22\316C\263Vv8e\271\355U\311" - "\321\332f\364BX\256\26V{g\205\327>\\\23\340\f&8\303yB\26\344\236\271k{\322CZ\355\363!\275\366}\6\333\235\303\206\235\30\251\274;B\224\61\240\341(\265\7df\217\216s61,\354\351,@f\202\270\354{\345\325c{ne\315\235pp\313\244\235W\0w\n\313`\225Id\177\220\244\64\235i\16\305\200\4@\317T\277\355\31\30\324\212)}\266\37\17\17\30\63\203\20\r\213\367\252Q_\203\300n\22\365\66\16&\5\335\32\332\237\346\377\337{\214}\270D\354_\346Q\275\353\n\255'B\254>\270\300\353\231\345f\312%9\377E\250u\266\245\221\256a\300\226\210\330\31{\27\224D]Q\6\211\244'k\331\265\267\364&^\333r6\205\364\356$2L\275<\1\215\275\367\36c\277\316\337\70\337\366\177\234\317\347\231w\30\310fy\315\7\372\314[\237\347~\356\373~\361\24\337ryN\\\241=\27\210nOg\6\343\271\237Ly\236\344\262\236\327)\234\67\301\2I\16\364\301!:\273z\1/\241\322\245\277o\322\272\275\271i\36\257\371\346e\257\267\346\372u\177\367.H,\32\222\314\rI&\205\234\27\70\204\367\256\225\365>7s}\21\26\276\217\250D\275\27\364\20\346" - "\370\240\265\320u\374\36\343pR}\231\367\1\r\376\211\211\352^\340.\201\214\324\242\245\203\305U\226N^\\\33\327Wh\344\373l\5\37b\r\fa\b\256#\372\32$F\34\211\313\226\276VX[\33E\220\230\232}\217\351\273\223\202&\243\245p1\321w\227`\372\36$S}oR\331\376#\271\201\240\360\27\202PCXA\270\61\242\320'N\372\365\365l\177\332\t\36\36\302\33\275\350\324*\267\324\305\227\224&\224\252bq\221\320\237[O\365\227\232\271\376\212J\276\277\316*\364\337\264\241`\5\302\336\177\257\350\230\367S\236\301xXAf^Y|\f\5\23\214\210}\276\226K\273!\342\243\312f\245M6w\271\325_\n{\210Dl\7\237\354>\206CR\360\362\67N\366\351\214\305\5\17\372S\275\326\375\351\226\16V\36Q\262ON\23\"\236@\315$J\366\351m\252\70p$\303Oo<\3q\361*Tw\264\230\375\243\\\307\375\65\32\237\261\3E\210\205\v\3\247J\2\352(\362\243\252\322N\233*\335\345vtM\203\5 \247\22 \307.\27\234\36\324`T\226_Ud)\252\302J\r\334 \240\30h\241\30\350\2|.\220j\3\277\264\270\6\356\66v\17\304\326+\23\370\16gI\304\206\364\340\215\373\312:\324\305\341\26m\260k\247\25\330\23\200\65\21$A\321\6\31\60C\260(C(\326\6\327e)\314\340\37\251\312\20\f\261\270q:\356\263\203\316\f\356\346=\376\346=a\360\235Z\34J\320\240\273\212(\2#\240\330\347$\323\327\200\210\215\242\346\206\n\242!u1\222\324\316\200R\27\316C\320\332\321`\310\310\177\17U\252\64\37U\352\20W\225\206\66\251\335\345!\220\24J5\202\320\350!\352\2\214\363[:\353(f\207\352\262\377\311f\315\357\233L\220Q\1B\33\\\345\f]#\201\364\260C\17\315\2\f^\34z\21\345\337'\357\360QGW\214\177p=\320\33\355~]\0\274D\3S\240\206M&\26z\343`\227\370a{\210\60l\17\25a`\350\366\315|\27Q\27\274\303\341\63\71\314pm6\324\216Lv\270=\227\33\356\314\343\207\377\314\222{\25\b\3\276R\326#\271POa\203\200\244\206\237\371\30\bV\277\216DX\241\31a$\326,\216$\27\2\214#\2\rh6\222S\240\212\303\321\207\21\262\230\33\71g" - "\340GZ\215\302H\347qq\344E\21\352\307\300\0d\214\36)0yGK\v\217a\206U\302\214^.\226 \212 c0q'\r\t\344\267\70\372[\222\242\60aH\243\177\2{\30}\322\332\201\221\177$3\246J\222\347\213]\21\356\7\213\254\232\242\225\b\242!T\334\20*\335c\221\205\314X\242\221\32\313*\370\326-@\215\356j!\360\242p]\337\324B\333\260\332P\264\313X\2\263\340\16\202\31\63\65Sc\245\251\334\330y\222\37\273aA\201Y\212\352\307\330\363lXqDbj\252\25\22S\343.\257\356v\350\231\361\f=P\36T\35\306\215\5\374x\231Z\30?\255\21\307\177\n\201=C~\321x\207Q\245\305L[\30\377\265@A\4c$\236{!\255\30\30;=\241IsOD\245K\363\233H\312\200\t\246\262\23\271\361\34|\315\303\327J=\202\316'~Pi\221\214\323I\371\221\202\230\302\304\305\66\327Du;\r\211\353\206\304\355v\346\60\375\372$j\242.Et\346\240m\235\63\262\204A\251R0\236q#\341\232h\216\243'.\253\335\23\267\64\335\23\277\235c&\236dSc&=\300\t\364\373\212\344'##\301\70\210\26'\365rfj{\211x\360\r\22\63\274\223\251\366\377\264v\304\340x\306\344\251\\j" - "\362\274\225\235\254\205F:\362dl\202A\24rD1\326\236r\226I\241\350,\23\235er R\330\352+\211\313\66\224\222\211R\2\5u0\344\25\353\206\237q;\305M^3\360\223\277\30\21\241\302\271?6j\322\331&\343\323C\277\235Q\212\63E\276\222\230:L\276\361\277\311\5\243\370\353<\303i\315\36\342\32\63\371\302BMe\306\262S%\340\221\351%\200W\266\21Bw\352\234\306\65\325\30JO]\16qO\335\16\203\245A\24c\352\276Zv}*\305\251'\21\276aO\253\302\251\351\243Gd\363G\237\211\250F\254\237\264\351\302\222\302\211\210d\37i\233N\216f\247\263\233\270ic<\177\323.\33\313\361y\351\t\31\61\1\240\232>\253wM\267$\272\351\250\370\356\351\316\\f\372_$5\375\334\300\316\204\31\271\31m\36?\223\232/\314\24\66\210\63d\343\207X\202\6\270\232\271\240\16\361\316\324kB\17ad\n\b\31\202\33\v3\267,\314\314\275FjV\325\2\232\244\214\203\331\362\263a$L\325&\316&X\3lj6Ce\215;\304\63\237\375\301\202t\352\354\205\2~\266\305\254x\347FY\245F\4\275s\340n\33\64\231\245\373\250\212\5v\236\345\252\322\321\246X" - "\211\235;\264\314\354\245(v\266\213\340f\357\351\371\331{I\342\354k\235\277\234\5\266\31\23\320VfN%\5\17\362\317\341%\300\256\276U\367sa$0\232$p1uh\247\347\242\b\36\276\23\346\322\222E\370\36\t\374\271\242\263\357\377&\362\3\24{\316\252v\315\235\t\241\347jB\335s\315\32\251g@\352\271\253\26n\316\341\340\347\236v\t\363aa(_\25\65\355\33J}S\317|t\215k>\257\232\236\257\320\272\347\253\364\335\363\35\26f\276\253\212\232\377\343Gv\376A>\267\20\2\204\357\232\60\360K\222\70pW\327\273\240\357\364Y\371\v9I:\24m\321X\266NR\vEV\226\256\260\360\1.#\355mt\260,R\314\177v\301l\16P\334\300\"\7\217\234\205\323$\263P\257\247\26\256H\320\301-\324\67\360\360\66\240\270\v\245\250Y\370\265X\345]xY\242\302l\324\327\256&\274\303n\347M\233\62\260\304\230\240\261\336k%\31\207\226r\360\250\316,\246\253\371\305|\331T+\27\210S\370\252k\312\204\213(\274[\r8ZA9+Dg\205\337\236\302\24h\340\343\243er\252Ea\256`\26\213Hj\361\374_m\276YsD\t\314&>\375\243*\r\374\242xWU:mJ\223" - "\374\242\305\272$f\261#\231Z\274C\260\213wu\34\370G<<\240D\v\204\331\263\370He\t\354\311RX\276\v\374^z).\305\275d\212\363m\377\322I;\273\364s\24\267tY\307/\335\262\nK\217s\305e\r\341\213\240\345\243\226}U\222w\271D\205\306\212W|\231\354\262\35i\202\345*\254\323\26\0\231\257u\205\302M\270\345\346J~\371\232\375\253\212\273\374\213\252\35\313\250\227_\236\220m\24\305\235T\320\71\63\273g\345H\224k\205\310\242\31C\276{\305\20-\215r\305|\233\32\317\260\260+\266\62n\245\315 \31\21+\267\215\342\312\23\37i\350]y\247\7x\326iQ\302\340O\v5\t\276\303$8\330[Mhs\255\246\266\323\253y\255\356\325\"\230b\27\3=R\253\326\64\26\26\232c\365\310\357X\255\262\213\253u\211\275\253\277\310\203M\200n:\357\34&8I\6ngW\235\373\205\310\241\66\37\2\247\354\352\333Hn-L\315\257\305i\204\265\254\20q\355x\250\317\326^+\353r\0_I\310\213\364\347\362\267t\305q\357PY\253l/]!\245\237A\201\7\342\30\236!Z`\221\365\354\332E\231\243\356k\243pDl\255V\17\360Gpkm\231\374\332\35I\v\4\367#" - "\326\376\224\222\232Z{F\262\203\177\354\223\334z\270\232_O\320\b\353\231>cZ$\352\260\7\270\310:\305\210\222\365\22\v4,\271\204\334\372\331D\336\17\275\24q\314\263^K\22q\1\316\246X\325\n5\201\330k\242\326\273Hv\375i\1\7\357y\5u\4@\262\365\67\6\243w#WU\204\331\65=\363&\223\332 +\331\215s`?\206X\371\215*\233\360&St\352\375\65\64\270\211\7fz\17!\37r\245&\4m{\243E\317l\334\314\240\66\272v\t\230X6\7\7Y\33\17\222\205\245\313\204\270\361\n\244\60\361\276)FB\333\317\21\326\335d\275\367\263\311\272\233\221\32\25\224\217C\20.\333\t\252\247\"]\234\224\2\227\4\302\37\300\222\317?\346\270>\267'\321\237\35:\367g\247\336W\35-\324\246\246\214\335\214\211\341\66\363/\360\233\226\213P\223\332\240&\265\7\330\301\346E\360\216\202OO\313\370x\210\32\251\365`\327\70\245k\250\67z\331@\n\201\354R\234-\360\362\f8\357\363\273'\215\r\260\241\215\354\346M\v\267\371\266\231\377\22\327\"\303T\320\253\231/\206L\352KE\26\7\257<\274B\343\335\4\351\371\362S\6V\231@\353\26\341" - "\313/FT@J0U\301\312\364\224\331\344t\307\320jiH\320U\234<\313\370\4e\226\361\356\362\4y\365\250\301\216D\305\351\374\362H#|y\21\"n\205\312FJJ\357!\265Kr`\266b\325\334\226^\303o\245\207\300\r\f\316\372\201\366\225\241\324aU\26k \321E\332\340\35n\345\220\177G{\306\207\366dd\360\353\213}\4\25\344\302W\34|\353\304\71\327V\365Yz\253\65\337\275u3\233\1\177\217\332\372c'\31\361\263\255w\32\205\211o\207G\364nG\252}\302d;%\304\263\235\3\214\5\17\300\333f\200\6;\345h\203[X\234\36\246b\353\31\232hB\3\333nB\300\261\217;\2\211\226\66\207\65X\244\221\361\333\225\377%et\334\5\63\26+\343\231\355Z@\204\377Y\220\320\302;`\310\201\303\260\210\236\62R\301\64\f\b~\374\245\205\331\276ROm\337kC\253\6\357yx\257\240\31\336\375C\273\213-\33\333\357*\230\235\243\66j\366\65\311\356\304T*\306s\342w\234<\354_:l\340\341\220`\340\224\7X\347!\365\312W\253\24\353\17{\330\37\305\f\334\210\201\320W\214\264\17\261y,@\324\216>O\357\335\61\350T\337\33\355ac\240vNT\262;\247\313" - "\374S\217\361\273yLZ)\275\363sB\367\316\225k\314\316\355+\324\316\243Kh\355w\303n\360\273\304-a\267\320\b\312\337$g\231\33m/6iw+\314(-\360\251\255L\16VO.pFd\fa\21\230\222\250\307\356Y5\267\333\254\341w\35\200\5\221\2\221\32\364\237/\250\271TI\351\37\306\r\373Z\333X\300\3\274g\245\\\270\373D\272\310?4 +Z +z +: +\0\344;\231\22\270\355\201\61\263\27\223-\304\352\300\315\203\fIdP\202\4\375'\301M\364sb\240n\1=s\355\245g\323{E5\356\275\242j)I\366N\245RP \21c\333\253N\342\367:r\205\275\256\277@\225\376\5y@\364\22\247<{\17u\31\336\375(K\264\356\220#\275\375|\33J\357\276V\322\247\241\60\33w\1\362\362\342\207\330\v`%RD\201\26\3.\225\0.\226\357E\260\r\232\262r\373\246z~\337\336 \354\67\65\212\373\235\315\376\224\17L{\353\235\332\265\377<\224\336\250\322\270\367\337\242\323\264\203\b\v\305\244\221\34\367\217\317\25ww\t\377\316\333g&\326\66'|\30\342\63\207=\347\254\275\366\332\353\f'8\207\223\64\256\341|\275m\270RM\17\233\343(\270+\314pc\25;\334\372\232\353}\5\235\213\263\302\263s\356\341\36\357\n\16\22E1T\5Z\321u\360\335\350 \224\33\276]\346\30~U\354\25\35FT$C\23%\354HR)7\222C\372D\7XaENm9\226\244\62oL08\322W\321Y\242\61\202W\230\65\320\t\245#I\215\224\240\311a\346$\345\304\214\305|h\336\213,\241\"d\"\361\375\63GM\314\310\251,\337?a\202$\222\204\231E$=Rg\246F\256\376\313\314\214<\260\260#\257\376e\341F#\377\333-\214\306K\322b\5\217\3]gr\33\355\66\267R\243\232\366\300\204\300\63m\222\306\305\261\327\344\33\251\244\276\225'\205nx\221\324hF>\320\326Rv\224\220s\243e\n~\224,\23C_NCj\375\301\350\71\353 \276S\0\277\356\311\27i\252&\264\2\370\307\b\261%%\266Y\256h\336%=\22\327\37\372\362" - "\211\324\367\243\267\265\62\373\351\23\"\26ja\304\364\350[d\345*\346\277{Z(\214)\212`\354.\255ah,\371\204,\366\323\326\215\rD\"\32\304\"\n\210\27\3\317\341\333\250~\305\65X\251\61\375if\214Lb\307\276'\347\306Z\24\374\330\65\245\60fUI\242\375\320\330\343\bY8\323\351\270\234d\341\340\340\370\320xJ\370+\16\225\211\310\210\227\237Y\376\33\\8\375\27\306\377\337n\256\327\214\fq\336\5\23F\231\32?\214\n\316\2v\334@p\343\26\3?~\321/\355\227\4J\237\361\266T\307x\237\336\71~?\317\65\376Fg\233\210&\351\t\265\234\232\310T\200\331/\353\343\6\207\373\337G\275\276\313\241\t\">\375\7\23\226\264\f,e\237\250\v\bI\361\230\305\225MO\\\311\241&z\365\374\304`\260\16\201s\265\335\61}<$\257+\3Zh\24\34H \236x\6J\355\304\327\n\25\216\tQ\223\61fa2C\355/\334\61_\224\312\267IC\34ZA.k,\203'\22RPP[k\262*]\6Y#A" - "\377^\246K\267\237Np\324\352\235E:Wu\272\355\216\tt&9\350Lg\230\311F=\v\217\34\274\6\250\326\t\317\22\334\223\35UbqY\371\203\311kr\5\326\221\203n\312\344\355|1)_\302\266\237'\237y\351q\16\5t\37\357r\353\227L\235\312O\203\252@\305\346\344\233z|4\203\364B\221\300[\240\365\5\227\323\340\232\7\37_\303O\274\65\300Ub\343\354\247\65\"t\304\272\252\343lV\r\252\177\250\251\70\324&a\264\25\7\225\273$\205\305\212\251d\222\236\312lb\246\210Jv\252\332\310M\235(\344\247\352\215\21Q\263o\23%C]\322A\311\177\346\210\221\203\203\237\213.\22\346\214\305\1;\0\16q!\376f4\32\377\215\212\370\376\\-\tt\201\224\260\323\1\277Eb\341\240\325+\26\16B\316\263\6\337\276*\352O\203\255\320d\251d\341\21\326\2\310b] \213\241\304\215\60\177\256\273\263+H\326\230\33hq\314\335ir\316=\275\340\232\227]\264\315'\265}(m\314\347\370\245\215\371\302H\367\274\311{\327AWno\25WS\230\263Y\33\350\367\267\232\245\223\301Y\331\371\213\201\223\65\252\334\177\64\177r\262d\\\334\347\273Hj\376\221\206Y\220'\260\vY7\270\5c0>" - "\272\241\1\261P\235\226\35\32\331\26Z\b@I\3\265\320cd\336\337*d\177\362\264\210[\270V\314\377\344~\211`EF\213\60r\225\205yg\312\345\27\6\316\n\v\267\317yufT\4\342\34\321`\277\63Q\v\217\252\230E\231\201]L\224s\213\351\n~1_\351o\267\305\242\213\375`\261\254\244\64\364\34\0\356\204f\316b\3\301-\266y\333\326\370M\b&:\270\364Z\354U;`q8\27o\306\331\26\37\244\322\213\317\362\250\305\67zf\361k\35\273\244\212\347\226b\322\370\245\244taI\233!\215\305\205\20i)+!\343\7K\325\361\262\300\62^\272H8\226:\214\316\245\317\n]KO\r\266e\31\310\355\331\322\304\314\26'f\371\320\262\256\250\344\7\313diq\350\310\271\213\221\333\371\303\256\tt\b\264\371\361\70\tx\271\303\354\65\353\371\255\1xk\205E\372N8(\207^\b\263\374\270\226]~[\307\255(\33\202\371\253\33\213\200\267\0]\212|\240J$cR4\312_+\261%\376\342\1Y\7V\262\v\203\274\65+\345E\305X\374\\\351\260\0\263\251<\300\261\266\362\214\24\257\363u!\273\252j\341V\343\332\371U\255AX5\2?5\212\27Y\255\226\225\375`\265\261" - "\250\70\220\224V\337\234s\254%\235u\256\31/\272\326N_\20Cq\r:\375]\314Z'\311\256]\253\347\326\36\324\361_]\v\16\205\272\250$\245\270\64\310\67\262\366e\223c]\335\352\\/\320\271\326+\365\266\365\v\371\364zc*\265\336\245a\326\37\231\330\365/\252\20\262l\310\254\302F\342\240x\236\341X\367O#\313\206\66\262a\303\311\306\331\242\240\242b\243\213pl\364\33\235\33\367\v]\33\257\f6\353q\4\317\233\362d\21_6\343,\334f\211\231\337<\225(\300\353\241\315\6\230U\233}\245\270\340\65AH\244y\330\24~'\21\265\371\262\34M\247\255\b\202\333\322\31\370\255\"\243\260\5TFR\260\260\371o\253\351\4\265\325_)\211\261\t\376\342\361\343f\226][Em=\310f\266^\351\331my,\267\35\33d\233L\304\21@gr\1X\323\353\231\277\364\326\260\333\332Zn\373p\235D \241\227\3s ^\367^\246M\263\237\216w\324\352\240\64tU\247A\317\365\62p\341\353\300\205\257B\317\265\227\335\316\275\301m\227\367\361\333'{\204\355\223\0}\377\374\235\336\317K\242\241RTE:\266\33\63\\`\366\262m\267\37\246\267\373\n\250" - "\355{Y\314\366\253L\240\225Q@+\17\1l\312\1\66\225n\366H\4*\36\221\331\17H\312\267`\277\vpX8\333\215+\320w\354\263\237\276\341\250\275\342,\352qU\367\321\243D<5Z\226\206\302\272#\277\301\355\34\352\343w\324=\302N\326\25\367\216\61\335+\325\357\220\351 k\246\352\177\260s!O\227\30\272>i\245\351/\232(\330<\362\351?\204\352\366\60\225\267\17\32p\31\32p\312\227@)x\300v\370wz\374\255\32\234\232r\34\235\312\357\270\214\245\340\351!|\227\2\21\331(\314\270C\363\204\235\301G\364\316\303\307\"\371\330yE\b\273\351\6\37\"\234\n\366\71\340\366\2A\231\264[\255\244v\317\350\231\335\246\234\220\226sr\bmx\374\301n{\f\306{\270\333\257\247w\357\345R\273/r\230\321x\35\273\247\320r{\352\64~/?U\330\253J\367AD@K\215\274\21\325\353\333\62\260w^'\222n\310\255)=W\2i`\257M\356\330\353S:\367\36\252\\{_\200\377\344\4\335{\214\362\34\62\61\310\233.\365\355\201\221\35\324\362\301\262\60i\343\234t\223\1\1B\22i\360\201\66\321\36\65\332C\320\n{\b\332|\365\b\21\207\253\220\234" - "\311\34Iy\262S\245\266 |3\21\237[\330__2\3\223\t\244\24\251v\307\366\276{\321\336R\326\3\273\252<\244\342\200Z\37*\265_\31\220\203\364o\231\357\222\362\200\bW\322\276m\276\30m\240\36\344\333:\306s\276\222\365\264\22\234\7<\244\236n\243\340\271\"\325m\310\27:\344\271\16\260\352\261\2\312\207\262v\204\334\261\220\tTGo\203\322\205\366\334\325P\342n\256\312 \267\21\306*\201\340\331\363\214`\367\25\6n_m\344\341\271\260\237W(\231\221ilF\367\331\354!\347\6\316\274_\25\347\334\257M\264Y3A\34\314\240\30`2\373=Z\26\16\224}\366\373u\2\70\322\274[\230\265r\321.\211\321\f\201-(i\354\275/\200\323\377\250\200\335\177(\347\366\277\220\66\352iS\202d|\275\3\202\363\177F\256\62\254\215l\r\7\327`\221R|!\23\234-\220I\203\325\5jt)\245-\365\255w\237z\273\316\66\323m\222\321'{\223\353\356\277\256\313\312u\377w\335hqww\277\337\71\63$\260\315\244\367\7\304G\316\371\316'\357\367\276\307z\325`\3\342\63\262\375\372\320D\n\30\357\314\335\213\317\300>\354v\25\272 X\246" - "\356B\317\363\312\243\t=]\37\233\215\274\n\272wW\353\344\375\315\271B}b:^\4Y\262yJ}\216\201\376B\224\206\272\60~KtO\232\30\31\265\233T\36\33\320J\25\33\225\244\360\247]\201\366\372\202\325&%P\305\370\237l\f\20\223y\327\331\352\67\307Y\352O\305[\353\337\252\262\325\277U\211*%\320iPOB\223\231'\311\5\354\223\374\227\270'\225\207\370'7/\bO\225\27\355O3r\305\303\271c\210\267\352\354\351~%\324(\22\260\300z\221s\235\251\202\246\316?k\230\247\265\271b!\34\343\343\247R\370\206\313\264\337i\340Z\255\232\62F;\322=#d\20z\260f\234-\307\232q\17\220\v*\330\61\301\16M\241\23\331}\270G/\376\364\362M\372\335\33\250\332sWwk\300\n@\",0\275\240\311?\4\232\374J\4Xx\230\21\27`a\215\226f\305\215VD\312qC\236\276f\242\33\2\214,\217H?\236G\272\251\350 \335\264\343\60\323\4\260l\323\361$\256\351J\5\337t?T\20\245\375\24\4\210\346\20X\375\315\351\276\376nJ\223\245yG\211\265\271\252\304\326|\325hn~\250\242\277\254'\250\226\310B\200\4\flK\374m\16\0\23\301%\340\1\324'\346\356=\325\375\7\362\265\337AQ\245![\202\267\350S\250\226\2\35\3\35w\266\245<\226k9\36\312\267\\(\27Z\356\355u\223\203Z}\302\25^\31\312\241\60\22\6\30\211 \0]\325\30nU\243\341AW\230\241\322$\206\311\64\262\16B0!" - "\327R\7\376\270\307\250\20\201;\243\204\332]0~<\340\266j \216\221\26\264h=\312\213.\204\203\36B<\250;\37lM\326XZ\263Ikki\262\255\265<\311\334Z}\232n\275`\240Zo\235`Z\353\216\261mA\33\270\266h-\337\226\32+\264\345\237\225\0\240\266-\27\317\71\333\316\236|\331eW\317,\7H\242\333\356TQmu\207\31*\352\20\333\36|\220k\327V\362\355\204Qh\177\321d\377\356.)\233r\264\27g\346\71\333\367\344Dy\234+\376\223I?*\6\255~\1\6\353\342\334\323\325~Dmi?\25am\277\246\263\265\337\327\242)\353P\250\250\16e\212\207D\304\336\21\v\213/\r\300\nG\7\221\252|\36O\242\300\235\265u\220ZK\307\356\24\224>\300\224v\324\346\263\35\327\325\\\307;)|g\244V\350$P\267\302\252\315ut\26\251\"\235\235\265\251J\317\216\250+\220\244Q\323X\302\264\303\326\203\321]\232`\217~\275K\267\316\257w\345\202_\327Z\340%\202\255\37u\231\2\326:x\351\264\220.j ]\334`\356\332\243\245m\247\20\377;\226\351\252&\201\306\34\306u]R\256\27\16?\326\352\345jd\272\353.\342V\30%\274\212\201\216f\264\fH\203\273" - "\22\210\"\17\241\216\203\241\347a\350\5\30z\261OC\301B\351\16 \24p\242\30\235+k\324I\204\340\63\ttw,\311vgFs\335e*\254\323P\313\226n\335U$\325}J\252\335I\304\274H\302\253.\311|\246\200\352~\33k\350{\202}\270\36\265/\337\23\237.\364l\202\354 \23\367\366IG\317nB\341\266\237\236\23\32K\317\305T\330W%\21\366U\211\60\367\334.\247{\336*\247\304Yb{\203p~\b\357\b\360\t6{\265\243\67\61\316\307\331\233\223\254\360\336!\301^\214\210\360\230\63\364\356\256\242{\17U\242\262\225\351\255=\306\276W-!8\234wF+\35\217\371N@\336\224\374\202<\341\227\224m\354\277W-]\336s\200\261\336\363\37\242}\20\214\330SH\34\345dw\342\200\375O\357\65\23\70\251b\312\32M2\275\367JY\370\343\340\265\0\257\305h\211\370\334\317\333:\204\300\320$\351\236o(K!\22y\226\354\371X\304\370\33\231\212\277\n\215\64Ko]\200\265/\320\337l;E\322}\321/P}\251\21L_A\24\v\217\34\274\346\373\266\371\b}\7\321~\n6\200\62\355\0c>\2\70\323\35\177=Wg}\265'\350\276\v\247\250\276\33\307\230\276\327jY:\376" - "\70\347H9\376nT\355\243\303_N\346\265\6/E\35u\6(\324\206\365mn\31\201z\277/\202\346\0\376#\0\376\323\v\375\31\5x4\362\235\375E\204\2P\0\35\270o\35\240\70\346\376\n-*\243\254\200\322&\244\304\310m\217\202\306\255\37(\264\375W|\270\376[\276|\377k\251\302@h\332\252\216^\355\30\210{a\203s\240\64\66\62\0\202\321^\34\214\366\212\215\177\257\364\252\201S\5\240: @u \"\v\205\214\266L)\7v\330\215&\260\b\4\236\344\261\3\347E\323\316\223\325\71\16\334>K\r\274s\232a^?\312\302#\7\257]D>\371%\346\202oL*W\272\370\331\32\203e0\214\264\2\66i\3l\322|\367&]w\v\20\313{\314`L\36dsG!\231\203&\334-\341\356Mw\364\36LJ\317r\16n\312\314\226\351GF\0YI\311\0/\217\205\366\65?\210(\342Z\354\273\17x\316S\7+n\322\203Go1\203\347\n\370\301;\270\224\31\362\203\353\\\303\7\222\355\16\17\5\247\340*nH\355\303\16\305\373rC:?~({U\254j\207\202\356\21h\217\34\250jv\"\265\254W\334\37\321\64\206\362}1+\326\235\261\372W\7\34\r<\22T\203H\311u\32j\250\204d\206\366\352Yx\344\340o\215\342" - "\376C\274\373\306\320\331\254l\347\320\333D\272\347k\36N&\351a\223\211\32.Ob\207\317\31\271\341;\305\374\360\303\24a$$Y\272qf$j\217}DW\341\30\331\4^`d\373\316]\236\r\301\252\65\322#WHj\344\265\237\32Y\364\17\253LG#\nV\217#\307\26\32M3\320\243Y&j\324\204!6v\264L\17\f;\t\377\342\340\26F\217TV\205\233\301\231\320P\242Q\20\220\30\310\5X\30R\16\374\f\17\365\265\0\365\231\264\4\334 \227{hG/\375\254\332\62z\363gG\255mu?;bk\273\363\63\230\253b\360\335\207\231\321\67T\330\f?\214\240ewjI\242\307\24_A\34\370d1`\245(\221\37}V\202YB\327U\300\346\7\340\65*\204\273\305\222\327\220\345I\224\273U)h7\210\61\245\311\234\252\210r\327wc\31\261\226\261\262\\\363Xy\1=v\336\300\214\335 \330\277\334\334\216\242\331\330\233>\302x\260\204\35!\231\335\270&+\323\71^\234\235\243\224a\344\62\343gC\331\361k>\334\370k\276\322tHD\353\244d\360\"\317`\332\353\220\267\bo=\235\211 #\v\177.%\2\343\5\312\232\320\22\320\5\325s\360\7_\26]\244\311\34!\307_7Amj\224\242\234\274\30\237" - "\377\314\253\71\370hY2f\31]\2\356\314\0\253\22\327\216\200\320\37\2\204\276Jti\200\265K\204\377\215q\253\16j\243\255\60\16*c#\234\235d'2\bn\242(\35Ly\323:?p\346\70\370\201\332S\356\65\65QAX\276Y\245\207\1L\207\1\314@\200\354De\4\365\355\232b\206&t,\220\63\221\254\322VtZ\270{\326>qI\342\237;&\356^\270\bGz\251\312u\244g\267y\"\251Ie>3\251!\236\305\345\60\255v2\361\242}R\377\262c\262\60$\326\71\271?4M\266\241A\277\205\250\26hj\345J&\32\342+\5\261\225\201\30\313B\253\220\203V!\17\255B\1Z\205(u\207\263\333\341\314\217\340\n\34\223\347\23\24\236\347z\362\265jz\312\247\206\232\212\70\302\302\37\7\317%F\273\334^\bg\212\261\311\25\343<\223\b\367H\324\263F'\301Lja!\206I\266&\257\316g\246\342 \245OE\375R9\314Gl\230\206{\1\246\20B\215i\200\362F\275Z\16\360S:8\237\32\231\252\214\214F\"\r\201\63\67\313\350\357\220\272\221\377\347\61\225\60\225\37)\301qX\353\256J\374\204\"a\367\343-*\313\236Dkf\202\255p\267\310C\22\313#\266|-\314\217u\221S\273\2\302d\211|" - "gN\2^y\24m5\367O\322\37\fR\314p\2\60 n\fY\263k\310\324\61\234\213HRn\\\214{\31,f\352\252\253c\241\217\220\337z\200\233\252+\24WR\236\244\207.\376\31\16\252\305?[\33V\247\203\"-\323\33R\255\323\231\261\266\351\222\317\7\232\247\17\375TIO_\377R05\243U\343\60\61\243\363\341fH_~f\247\237\60\263\307\337>S\21 \36X\343\230\271\f\345\324lHP\b\314\332I\230\374\23\307\36o9\211'\377\204\255\360\30l\234\b\34\265Zj\326pJ\260g\25\343\352>\237Y\v(\301\322\263\300\322C\255\60\33\200\336\346\331mZzv\217\216\232=\230\350\71\247\375\346O\242P\254Ea\307s\7\2\354{\366H);{a\v7{\277\214\237\v\330\376\350p2\255\215\224\261_\227<%?J\256\353\374\233\375\70G\230\323\22\334\234\356}5?W\372~\254\60w\356\375TL\226\204\301%\224\262]\261X~\336_\213\t8\322\214\311\223\371\346\243\r\354\274\232\340\346\223\260\214h-1n>'\323\62o\314\266\316o\313\262\315\357\313\61\377:\206\240\177\35\17@at:\323\20\237\341\302\240\346\253I\1\376\\\t\33fgc\234p\315\261N\254?\326< ~\363o\353" - "\251\205\210tf!\345\377\71\226\347\242\26R\20\212Ulb\26\n^t\35c\35pIK\307\220\333B\311\365\255\20\371DVv\33\272\205\322\bva\257\226[\250N\303\316A\347\276\341\205\263\21\226\205\353\341\326\205\353a\266\205\353J3(\262\351\357\236\337\t\264\271]8LI\364\230\205W\213\205\205\207A\366?\355Z\305\202\27\203\241\225\260\30\347\37\30\210\246g1\307\300`\222\204\16\255P\31w\206\354dq\263\17\267\270\303\227_\254\4\27\344+\33\326\201\212@\260\213\265\360\335+\360\335;~\302R\224\277D\233u,e\4(\300A\304\213\215\242\4LO\373'\251\247$\264\373\207\232\307^\24\243K\225\244\344w\330\245SJ\227\337!\305\222\331\271t\231P\250V\311 \356\f\27k\26\227CL\314\262\226\204\364?\21\322\177\65\322,\326%\271\272\221\216\345\64\"\335\271\\\242\317\210@\256\22\223I\226\253\223\315}7\264t\337kJ\252\257V\303\364]Hb\177\241\216\340\226O\207\361\313W\302\205\345\7\33\304\337\243R\324\33\265\373\63wN\212\324n\317;F^8\203\2\327\212B\342\215F@n \245\23I\311\242\231\254r\363R\220+" - "\5X\305C\b\7\217\25\273NY\371\355\200\\\313\302\303\27\255+1y\266\225\370M\346\63(\25)\206\275=H\346\63\257\230X\372\255_\224r+\272L\376[[\263\205o\225\347\270\330\210\216\225L}\214s\245\214Hw\27T .\261\254\34PZ\255\233\265\266o*\"Q\250mL\273E\255\34S\201>*\205]9\225\310\255<\210\340)\263z\243@\231\263t\366\307\211\30\224\177D\231\213\62\34\224\271bK\264\223\62\327\306i\271\243\320\320\224e\226`\210\33P\230\33\220x\302\233\313Z\200}k\242EL\322_\301\316z\251/\262\320`\353\375\251s\372 \366}\30\263\301\330\327\356\65]\6\70$q\365\35b!E\276\341\355}t\1\63\345\230\313\263\21tO\306\213\257\64\317#\224\266\331\305q\261?\331\33\302\376\254\371a\354/\363\v7\2\373\253\3\300\376\346\325\n\366/]\251^}c\225\330Z\261\277\243-*\376*\256T\211\375[\27/\222\347g\252\330\377]\271\366t\v'\343\300\214L\261-\312\60N\fd\305ga}\2\361\66a\216\213n\223\64\f\20\354\304\300\\\261=\233\276\231\224\323b\2\223\22\312\370\277\233\330\340\277?\257\354\224\235\0\227\304@u@\301\200\277Z\35Z\330\315gY\324\21#)\352\234\242\317B\334S\204/\245\60\267\271\311\362O\342\b\267\324*\31p\372A\222\r\351\34\252qkG\2" - "\251\251\b\6Ve\233\343/\343p\320M\20o\324\235j\330wM\21\347+\22\33'\223\235\275\233\301K\337O\267\346^\223<\375t4\337\60\334\344Aj\f|:\272\16\307gP\333\30\3{G\327j\bf\217\232Y\324\231\212\63\303\372\226sJ\251\342\260\206*\16]!\4\313\265\316\60\202\365\311\375W\337\360\33\224\333S\"\17%\330\332\244\"\270<\303\242\311\"\270:5\236&\27\7e\323\247^(F\34o\267\231!%%\31\213\344V?\321\26_l\246\362\312\204*\327\5\66?\365\363g\205j\20\334\344\217p\344\200\340\333\6\355\352\371@z%\245]E\340)N\35\221\346=\f\224rI\4\337O\346[\357\361\363\263\23\375|E\226\247k\211\254!\270w,\313\370\322ZB\35(\241[\256\302Z\236\266-\t\241\331\334UC>O\b\241f_\30\241\245\225<\222\4\20\240#\324\21\210\"\364v\34v\317\262\65\333\223\24D8%%\204p~r\30\341y\251\206\375\320\n\204\233\34*\302\213\\\32\302\257\213\363\303\330\61\303\233\322l\ny\b\177\\\307\326_\325\207\20I\251\t#\342\256\345\63\252\210\4<\32\"\257z\365\275\345\206F\303\250\5\0#\262\252\272*Gn\334\3\221\317<\n\224" - "\351|I\245\320\247A\251\254\324\241,\214e\366F%\\u\223\230\304\360\274\213m__\315\266k\335:\237\")\312\247H\241Wa\232jl\333\330<\360jcpEs?\224\267\306\234\21(_\214\225\343\327;^\224\227iZ\332\315R*\b\324\314v\364\356P\350\233Od\214H\265B\241\346;\25\250%\25*\324\306,\r\352\312\302X\376&\333B\220\244\324u\36\357\224\302\321\306\306m\313\226\202\372\213\342 \324]\231!\250\237\317\16\37\376\274\254\37\352\336-\21\252s\0Zz\271\2-\227\343\241\225l\323\240\325l\324\241-\334\36\205\366\372f\213\303\315!\321\66;\362\r7$]\312\373\n\345\356\"|\361\321\304\371\226-w(\250\300Y\314\273~\333\254B\317\211\t\5q\364sug\236lN+\320\v\223\255 \201\215u\n\335\343\tBo\246\241\240/\361\206\241w\304dZiN7\323\234\236\202\267\66\325y\246o\t(\361 \207\256\372MUZ\373\332\321ws\21D\247q\21D\263\271\b\242\256T1\215\31\315\326\20\255\313b\320}Q\24\321\205bx\22\61uO\354\364\211\33!\372F\245\220F\321\21\355\252b\273\267\230/\341\265\353)\33\237\227\237\325\370\274\374\314" - "\226\272\253#\213Mv\25G\361}~\375\204\200~\326\324\211\237N\25\337\373x\213\357_\251\237\20\360\263SQH\207\61\356e?,yL5\3\337w0\214\367\375[\1\r\337\277\377\27-\246lf\246<\325\213\r>\375\213\26\5\203\323\307b\210\22)\205\266\\\ta\266\\\367\254\tQT\"Lq\ta3]op\1\203\16S\335\r\203.q\264\232\247\300`m\332 \6\27?w\f\210\376$2\364\21Oe\4\203\35>\366\270-\213\217\321\347a\227_{\331\245\225\235d\331@\365C80\263\252\232:\255\65\265<\b\346\304\350\201s\342\312O\275\211\225\361\333x\356\232\201]K>\334Z\17\70PV\23\304\201\232\272\20\16\274T\35\306\201eU\334r\370\242\273\200\3\235\334\260\16\354\346*\373aV\275\206\37\32\275\226\214,~XV89\33;\276ti\250\354\240\354s\237\260\202K\303\300\316\202\376\37?\247K\362Cw\21\360\303\346\331\2Rc\237?\317\62\276\336+K\243\221\345\313\314\336\330\361\316\207eC\370\341\323y\25\303\30\312\333\266]F\0a\364\350e\332\20\346\242\225\302\200\367Y\324@\235\277^\347\277Q\376\332\314\t\312\225\355\263\30\252\22,\261\211\234\1" - "\f5\245G\377\337\33\"n\36\343\212\360\231Z\246\325J\354\220VKP\241@rX\v\333Xl\3R\23\321\20\300\333\35\335\275g\2\337\210\177\336\251%p0\264j$\300\7\337\244\5\204i\245b\350\335a-\240Qd\373\240\306\343q8mx\204\7\344\260\363\340\210\241\371\35\356\363(NoB#V,N\311v\326\310\217\236\256_[\301Y\324\b\246^$*\270B\370C!WM%oM{\372z\246~\337\61\217\317QYl\250\177\326\r\312\306\f\303u\311'\2\226\344\376\300o\353\232K\374\244\252:TU\25n\252\216\340`J5p0\253J\25?4\361[\343\312\206)#u\244\377\273I\377/$\375\337A\372\177\306\363\340\257_h\1\62\257\320f^eIX\302f\241\27\34,\362\251\24G\320q\260\302k\356Kr(\260\205\242\306\315|\334f\227)dJi8)r\362\257\351F\370\b\7\227\66\300\260\30V\255\66!\221U\301\25\253-HD\214^9;l_\311\7\331X\314\217\360N\31?\302\347\251:Ff\270\242\214\244\271\r\31\f\231\351\352" - "\242\344\224[\305\310\\\266\32Y@\321S7\357\225\320\307\31im\24\22-l\363z2\333t\245\360N\233:x\247\235\335\317\320-\204\233\27\24.^\210\276^\30#_\247\305N\27\34\232E\253\364\220\203\v\366\220+%\212C\25\251r\222\261|\223\24.\351\241\6+\264e\227\t\301\241\245\363\202\70\264\276$\204C;g\207q\350\343\261l\306*hc\35\316-\5\16\317\37\313Tpx\375\\\25\207wf\305\65\355\255\335[T\vr\225Mm\335\rV\357\216\20\66\276\264Cl\242\367\70\245t\25\277\5\354K!r\34\351\363\363e>*\237\340I\331\31M\352|G\204[\22p4\205G\357\321Y\16\365~N\271v\337Q\246\337\237S\30\305Q\207\0\22Bb\325\342\350\234W\247e\231 h\351rc\2Z\345\276\370Kc\324\216\372\71q\303MI" - "\226\321\66\217\343\66 \v\\\207\267n\211\340\350\222v\353\261<2\231\f\241\327\304G\353\366\306\257\224\36\\G\267\357RH=3\334\201\261.8_\315\233Z\3=\300K\177\21;\177\217~\350\321p,\305\253\343X\361\374(\216\65/\230J\304Sn\352\37\353v\n\242\25\345{\223(\337\233\254\363\327\354\245\307Tw{\205\240\322$S\n\307\266{\342\266\224\233&FY\314\226:\366a\25+m\325[\36\65\271\317\203\70\366y\355dS\212\307VQ\21\245$\350\347\24\5W\24YE\2\n)\367R\264?\347\340\3\301=\267R\27W\333R\27W\307\344\17\370\264K\24\34O+\345\364\246\222\363l\215C$\27\322\261\66\2\251M%8\213\300\361\f\323\252\360\344\305\r=\34\237\233\31\304\361\232\362\20\216\67\325\33\234\367\22^\271(\223w\177\63O\305\361\236F\r\307?\362\353\70\61\335\31\305\211\374\354\301\361\67\\\361\64x\234pg\226Ke\23\30v~A^\24\245@\224\337)e\315\231\36\341\17\30\7c\315\324W\342DC`r\261\223:\261\230\267L\\\272e\342\322\266\316\bN,\351\2N\254nWp\242k\215\212\23\233;4\234x\233\33u\247\316\5I?\301\377\"\261\22\266" - "\374\272\201n\316\250`\r\215Z\271\373f\206\357\254\204\264$\bG\3\245\261%\360\237\353\352B|\352\60\237\236\273\350\256\bN&\355\2N\316\250Tp2\267A\23\277\215\362\317Sv\31\1\205\5\351rc\305D\0\350,;\307l@\nN\272\350\71\235\364\320s:Y\233\34\246\220\346D!\215y\nu\231U\234l\312\340m\332\34\223\322V\207p\362\315B/mu_\245\204\372\344\1\353\7M\251!!\253\260\323\314\327{\247\205(@\253\320\351\347\255\367\304\366\336l\231y\374w\237\216\216l\300\337}0:\262V\354Q\306/4\343\17\215)\321\240\213\317=\225\3\26\351\265\22\267\210\243&\22\312\260\347\300\313\64\203\234\364\255\35\324\f*\214g\30\213u\302\255\211\247\31\357\213S\263x\234\235*\342qv\312\233js\255N\371'\316\62\234ZBh\373T\247\245\23!\332\364\213\66\21\321F\236\223\316k\266\6x\315{\353@\341&\5\247\276i$\315\344\317\327\222g\362\347\33LS=jl\360\247\177\306P\25N;\274\234\272S\355\232\234\371\263\305\314\237-f~\266\230\371\71b\346\347\212\231_\"\224B\364\337@Zz\235M\337\243@\n\242\343\264\257\5\212" - "C\354=V\364[\6\\\354\336\35\331\273\207\327~\244\364~dV\225\262\340\31\343\235\352}\225|\247\327\253\252\323e\336\206\265\336\215\313?\236\346\231)\rz\267F\344\220\17\203\33\25\300\351\357D\1\t\332pg\262Vi8S\274R\307\31_\307\4\204\237m\303\7:\370\26\335!\316\342\60\316\64t\321`d\17n\316l\207h\334%\32w\263\361+\334\27\317\254\21\207\244\334\35IgK\"p\351\306\24,\226\70eo\21\360\217\371\306R\330\372\352&q\306\212so\362\221\265?yA\\*\301\21\301\231\36\273\377\177\346\27\313\265^\227\61I\203\5+\6q\346\v\327\344\63\213o\356t\33\353\23g\366.\n\342\354\314Y\25\302\271oV\206q>\255\256\37\347\263[\"}\1\340\274\273\325\234\310\347+\233\65\234\367;-\313\274AN)\362C\361\264Nh\232\213R;.n\230Nc\303t\31\33\246\363\331\2\2\211\365\327\254\217gC\370fJ\254\\\263\334J\206\204T\336IRy\27I\345\355$\225\257\241\71\242rIH-k\234_\24\240\21\354\233@}\363e\265KB\271e\f\t\273H\242v\263\306\331\351\62~\246u\247\334F\231\3\234\337\66f\26\306\33\27e\211\206p\276/0Z\346\34\306\371o\2\243.\267\4x,3>\341\227Dj.8\347j\270\60\267\22\351\f\340\352\356\0\364\17\375\306\20\220\331\253\221\331\253\223\331\33\375\303\357\62m'\343\265\244L\306\313\256e\316\223(\17\343Z\t-\210k\265\236\4\66\245\35\315\66\304\201\223\344F}\233\70:\ri\336\66sA\344Jn\333\326\314\333.o\1\256\61!B\361\64P\255\251]\23\177\242\237q\264Fq\355\235.S\357\211\17\377~gw<,094\275\323\317~~\325\0\325_\257\234\330\351Uq=\203x\353uw\265\216\353\215\265Q\\\177\305\204\0|\2A\215\243\247S\247\213\213h A\347*\311\22\21\63\352\304\316\272gV\312\f\253\243 \256\257\n(l\254\61\215\330\f\33I5=\330\213\340\326\211\253\237g\215Y\334\374x\272\303\254g\356\301\371g\335F\204\320\372D\bm\207y\303)\337*\202\353\35ut\252=S\311?\230t&\\\337\61s\20\327?\250\264E\357\7\370\275B\244\265\31\311\31l\222 9CP\355\214\bi\374\205ya\220\27\205xq\230\27\362\231\215\357\312\367\246\36~;\365\360;m\5\223\305weOb\204\206q#" - "\245\275\63]::\342\315_$\350\302\t}\243Z\344\336N\350KM\355\222\351\5#\205\342\70\70Wt\312mV\312s\260R\236\210\65\237rGw\217\24\262\271(\234 \253\375\215\33-\342\364\351\267\27-CJ^P\357\311\356\247(\225x\212\215\305\212`\271\251\270\261\243\210f\230\216\33\237\70\243\177]\224eE\315\315\n\\q\367\33\67\366\322\223\275\231\236\32K\0\342H+\16\361`\371|\260\2+\377g\26#0\305!\322\n\237\257\4\324\225\34f5\240X%\240k_\233\305\321q\263\244B\303M\357j\235v\\\24\67[\354\33\304\315\325i<\343nn\230\356\215G\224p\363\303u|\214=\353C\270\371\355\332\60n\245\321\r\237nP\bp+\333\257\304f\236[\314<\227\1\27\246\v\345=\333q~\253dv\210\336\211\342y\230G\322\313\303\n\266\363\6\224\353\36\272\16\16\375~N\253\61i2\370\366)Iy\322A\274\325\346d\273\25\205F\226\5#h\32\313\332\351\270\265\66+\32\33\332&\276\201E\20\266\242\206\267z\30\211\274\365\16#\221\267>\252\r\17,\251g\236,\273\372\262\5\270\235\332i\260\313q;s\243\306\35f\233x\211\35\342%\372\4\331\24\267\363" - "\266o\36\306m\327\226i\322\\\33+Nn;\313\323E\222\rS\365\fh\324\305\316k\351\177\336^\272F\307\355\215\335Q\376\252\303\342\330\7~C\262\25\35)\313\303\242\376\245\215lE\327\353\5d+R4\2\244h\4,\310\336\240e\370\23\24\n\307\355\17\262L5\327\254\210\215&\237\272\61m\363\364M3z\354\210\333\355\257j\325\307\356:\273\363%\4\177\267L\223\333\371- \374\266K\v\26\270'\366\203|I\226\333\273\21\344\274\305'\331\364\274\274N\3p\247/M\301\235\335\334)\357|;k\bw\v)\201\200\273\363\223S_\224\b\331\4\247?~K\334]j\22\342qw\243\311\210\307\335_z\"\270\227\344\5\356\71}\n\356\325T\332\244\70Z\311\265i\263\"\333\367\26\325\305y\361\231\274\257(\335\354\340}\255\322\315\16S\362\273\234]\275\236aT\305\303\275\16c\266\342^\217@\266\363\31\367/,2RN\346\30B\274E\242\205QII\307\275\17\353\242\270\367M\275i\rdI>\323K\374L\vMz\363\230\33\367\347xX\350" - "\243\222\261\17\37\301\360\254DT\211\340rq\326\267j\342\27\226\203\341\221\353\177\227I\367x\332O\270?S\330\237&x\221\305/\374\63\t|\330,R^\247\377\60\255\361\345PUc\270\351\345x1\250x\337W>`\32\341\225\r\343\33BW\336f\32\341\225\67\307\311:iUq\277\270\\\303\375\332\2\343a}\21IR\222Y\2\324\237\230\30l\204)\357\277\22s\254\204\377\223\233\20\343^\250\340\376\312f\225\277\320\370\257\265\352\36\30\316\211dh\250(\313[l\360\322+\255&k\256\62\212\373[\253L\345\271~\251\36\360\277\256n\341\267|?\0<\230\321\252p\25r\203|P\330\34\35\177\243\306Z\344\342t\177\340u\271% \207C\240\222x\320\330`\316\232\234Df\353\177n\337\305\33-\363\233\b4\367r\r\17\272\tV=\350-\210\342\301\307%1)\3\71\n\362\300\233\250\314\331\377l\373\363\0]\317\277\60x\fF_U\212\263~\352J\336\30%zp\255m\27\353\21}\254`4\373\223\t\n\24F\vk\7\5o\303r.G\335L\n\304hC\317\326\n\302\267R\20\276M\347\37DG\34\201\70\23\2\343=^ie.\313\60K\262\321\323\306\337/\nb\374\213\212\20\203Ha\214\177\353$r\330M\344\260\3x<+N\16\260y{\203x\234\35\260\226\377\343\362yY\303x\354/\316\264\235\342\217\227\22\\z\334^\31\302\343-\304D\37\277\267\312Vn\25\217\367\210\244&\27\247\212C\347\37X\201\25>~\25\373\373.\263p\30O\362\235ES\263\27\361\244\222\261\242'\v\212\201'-\345\n\236\274\66O\237\240\64\253\346\260,^d>\306\223\25\\\341O6y\250\222\342\r\343\311;>\266\336U\21\301\323ic\245\350\33Kg\5\327\261L\201\234\65\232[\307`u{\24O3\304j\35\374\207\35U\373\310\21\32\302\323B\302\246\301%\255\343\22\275+\16\205\203C\341\64\227\244\r\267\373\343]]bN\304\303\33%\304\206\334\300\323\32\267\202\247K\253\211\254\254\346\214\240\311\337\306h\301\302A<\355\252\340\0\331\260\241U+\345\347\277\274\b\221\221S\207\247\333\32\310\367\66\312\354\304\262\264\344\265\257Z\271Eq\7z\372\201\350\67\63A}ye\240\264\304f7%\301\26\266\342\214m" - "\341\214m\17\341\351\27FH\36?\245\67\3?\25p\306\376\64\267R\305O\363\35\232\370\241\343\247E\334\377\177Z\343\263\2\362\17\v\246V\233\241\177\307^\266\64\260\203\367^e\7\237\234\352\321\370\363\364V6\204\345W\313\243\v\342\306_\4L^\264\64\272vg\275(\272G_\364\327\334\17\307\33J5\374:\257\356\377\370\264\262\66\307Q^\315O\341\352\354\375x\222\352Y\357\262\324\322=\265\344T\252\273\237\357\334\21\207$L\21\343\17\343\252I\377\372#\275\240\330\371\266\33\7a\300BH\257\26\62\334\330\63~=\204\67\253\357\355.U\317n\177Hj\235LLje\372\316*\274\373\322V\313\360\336\250\363\300\334\302h\31\221\177\61\354\177{\227t\n\372\305%o\325\215\213V}\356\217\255\272n\222\215\372w{R\263\272\266\336F\223\254\232G\363j\325\247\346\303\255\71Z\375`\233^\255\17!$\365\27\333U\217!/{\23\342\273\211\333jn\352W\365\22\366{_\206\276\364\261\1Gz\355\303\273?\241#3&=\313\30Z}o\232\255~p\215\315\244\321\337\214\367\271}\33\315\233K'\375\315\346\36\36c\217\206Xu\306\273\357\66" - "\252g\233b\320\363\20\272D\324\272\265v;P}k\343\207\307\236\366p\375'm\233xo\7\256\252\201\35\310A\323\344\232\226Uk\233\372Va\313Omr\241\351\24\311E_\341\371#\236\37\361\374I-i^\315C\350\313\216\316\300t\265uj\266\375\243\357h\321\20k\233\327\231\345\237\71\261\333\331\204\311?W\374\374\25\355_\320\376\201\205\233\324}\330\240s\202\347\64\17V\30L2O\7\327\354\325,%\226\366\347p\352\222\243\306\275\373NG\240\236\366\221\16-\34\67\352\356D[\357ZS\323\31\223\330\222\376\352\354\273\232m\370\300\320\304\271\240\5\t\344\346\334\232#\275y\263^\337\320\351<\207dR\31\177\23<\35Yn?\332?\23\35\211iCS$\16\325B\223\265\r:J'\332u,\231g\232\231\5\216\326X\340\311\332h6\336\322\324hN\372\61\304\243\361x''\377a\36\372f\233\227Vw\326\267\352w\336\357\312t\335Y\327L\253\346\276\337\356mh\364C`=\356\230\205\324wt>f\37\32\343\211+\260\60\356\0'C\17\366\60\f\32\272\60\214\214`\307\334eux\266\255\67'\205\35z;\354\20-Y\327\236\315H\30\355;WW\205X\357\376,\362e" - "\235`\201\311o\265\240=\270\246g\303\353R\354k|3\33\356E\317sO2\207xX\4d\b\306\65z\25:\307\257!\226\377\v\341Hs\362\357S\237\310\266\223{\343\63\375\224,\235t\b\257b\276\302\344\"\206\256\323w\306Eu\33mc\266\26\303\30f\360\233O\332zR\373rP}C\214\276\331&\205x\302\351T\253\30\22\275\257\200.\253\276\251\17\325\314\35!\241\201\314b\32O(\304\372=\20;+j\262.e\v,\330\203O@\6u\26\202Z\234jbz\370>\ri\325\342`\232=m%\370\20\31\252\324c\310\266\244\213\265\211\31-\335\276\372\322l\335>\367\253\307\376\350\3}\227(2\243w\317c\36\372\372p4\r\235g\233\16\232\226\216{\253\236\322\201\265\fF)\266\v\231\350\333\20\323A\210\7\23\235iL\36\247\60.\203H5\30\365Oh\377\222\367^8_\221v\331\b-\257^\310\320\275\25d\353c\227.`7\23\31{\335\321RW\253&e\1\262\6:\276i\241:\220\70\264\215\361^\16\34\32\304\234L\b$\315\321\65\5,\27\206\30\210a\307\n\276\350c\264\r\372\366A\255]\303\23\341\t\210\313\227\350\332vD/C\277\31\221+\232h\316\324\275a\320\26\200^ZC2}&S\272gehha]]" - "\263\350\"\235\71\320\b\240\257\63&M\252\61uu\361nZ\345\17\25\233\34}\260+\202\320\223\61q5&>\216\211)\231\322\256\247%\321\247\26\201\324\321\65l4K\327\261\335\353,\271\354^\232\360f4 \367\345\20\31\365\327\346\255(=\31\220\331\350\373\360\216\6\273\25\232\331j\234$\33{\177\264\231\300\253E0]\312\264\250\17\24\270\203'\204\177\304\331\321\32\261\265\333\0U\317F\4\313\2\315\260f\232\202\307\230\267>8\353\351s\306uV\210\365\253k\325\31e09\33\343\365_{\327\36\371\244'\352\v\215\27z\374f:j_\211\251\301<\227vgI\225n\274\205\306t!2j\224\26\70\312m\260+\375\370\60XU3G\312\35\335\253%`\335j\340\374\235\65\245E\356\346Ug\261\256Y;\366\205\230\263\301*\230eA\252Y\204F\217\320\212i\375\264\333U\5a\365\232\235\261\370'\16?X\361n\255\211\304\274i\273\34\367tD\270\226\361M\257!e\211\264\326\266\16\315\326\304\223>\207Oze\242\251\17}\262\27\240Z\201\200q\242\205\315VCS\345\3\251\362\251_76\356O$\313d\343E\320\245'\227\344T\221E76i\305aT\336\344\313{8\333" - "\371\314\247\vz\331\33\17B\361\364\242]\342\300\241\354@\272u\330\32\212\26,\211U\337DG\2\270\63\307MO\202\215]Vv=\7\245\36]\212\201U\270\r\t\212\24\3}\200X\362ja\232\232~^H\200El\253hk\327YO\220j\22\t\203=dH\360\244\254\62\256I42\321g\367\207\34\234\245\3)\271a\fy\346\223\243SK\350\16xC\313\275\271\320wgOGh\322u\f\331\243\201,+\326`\366\232\204\347\223_~\320K\273/\324\257 \240\205\227=8\23\336\226\373^\242\36\322\277\230\66\326\244\fPC\350\245G\361\200\270\223\22t\f\336\210\343\255>\201\231\17\17$\220x)z\212`\210lC\344\210\203@c\341\335q\3E\21\231\222\355\233\243\331[\326\357\256\260\364\320\67.\373\377\205mXSnz\357\363\253!\322C0\376\67\201^5\4z\331l\v\236L\31\271\b\244$\374\305\273\2\253\342$\316g\354\343\344\37\364M\225XV\210zM\"u\344h\212T\252!\367\310\fkr\355tN\226\f\217-\230@\227\230\20\257\324\221\246\347\323\373fb\313Gi\n'\24OEk\30\304\350\327\66\325\247\346\202\26\256&\253j\272\312+\220J\0\66\62\200<\330\255\353\217\343vA\220;2" - "\324q\23#\350\f{\337pt\352\274K\224\250\234\32st\311*\331\35\373f\4*\243\0\345\254\b\213pl{\336\352\247\277\16m\2yV \211[\305:9\350\330\260\225\206\35\330\346=\177s\215\250\n\201\302\321\331N\310\361AT\177\337w\365\17\306M\377\301\270\217\2\377lH${\244UA\t\302\215\362M\362y5\35`\t\355r\b\1a\345&\16\27\255\31\2\62\331\34\205\352\4\271\233?lR\342\65\71\344\324\273\30(\362\353\273\327\216\24T^\301\256\277\35\2[|_\347W\voM$$\363$\331\256#\33 \1\65r\366\"g\tg\307\321\71I\300\346/\353\311\250=\35\265\257\316\247\67\254\264}c\340\2'9\363kH)#\265\262\1\335\204P\234dn\256\372\356P\301n\200Y\320{\316\0E\351g\33\263%~\257\31\tH\254\nb\205\17\377\242y\2\205V\216\276W~:1\346\f\231j\21\315\273?\353Ip\374*[)A\";C\343_\207D\266\300\327\220\317J\17!\243O\354.\315\216sk\327\220\7\r\220\21r\342\247F\224p\354-\350;\b2\277\32\357\266&A$\314Vc\330hYK\321QG\327&\305\375\3\r\354\344\270k\334\225\35\7g\266\373\236\260\332\233\255\345\306\327\340k\323\204\22x!\353" - "\330\4NFw\336\252sE\240\223$$\222\315\356\rm\252K1\234\220\367\223Rv\226\70\240\1\254H\246\4\235\61\351g\6\60znM\24!\316\372\24\364\365\37\234d,\210\303\216\375\210!\355\251s\321\1\21\234\0\22\332\34\rp4\205\203\313\23\61\20l\310h\32\\\342M\341\23\7r&JTe\272S\305\320BL\357{ob\365\225\354I\243ge#k\256\316\326#Y\317o\325\252O\305\257\363Q\257\337]\242o-H\35\243Qs+\21\236h\333\320\203\324\33\342\247\345\337,\242\354s\vNK\261k\220\255\256\23\227T^\254\71r\263\315\255\24\316\251\361\236T\255\331f?1\21l!\235=\232x\22\362\34\16\61\340\362\251\365\235\312\16NO\244q%\215\217\322\230\"\300D\32*\36}p\234\250\60\f\244\314\371\61'\262\354S\211\65\227\214\37\262\\\327\214\373J^\b\353\240\4*\223\330\25ha\375\205\243\306\304A_\204\217\335\355Ja\302\370\267\0S\263\251+\223\307E\17h\323]`\\\204\353\256\262\353^\205}\20\377\5\207\220U\346F\240\251$\374`\253\264\177+\242\36\"\5\201$N\276\b\365:>\16\270\346\235\253\263+\34F *\230\224\337\351\31Ns\34R\345\24\203" - "\34\224%\331\204\20\261\67\250\tZ\343J\f8B\213\260J\264j(\t\362Q\261\317|u\t\271L\301\362\20\207\63\342\61\3\205\1%\270b\27\201\34\2r\24\21\346\310\27HV\212\201\344\365\322\1\345\204\245M\1\t\27\354lmM$\337\374`\32\327\366^\212\27\31q\311\273W,cYUXG\245hMZ\232\260\6\62\36\342.\305P\340\334\273V\340\234\233\62O\20\300x\211\203d\345\33\217\321\263\256&[\23jiA\346\340\276\204c\4e\204\v\31\302\220\32|\266I#\243\376j\17\256\356\275\25u\316\32b\342k^l\25\336m\314\235\330 Z3\27kC\31S Vb\6\66\352;\322\61\341\7\207y\256\255\fU\225\214z\370\376\7\372~N\270\7\271\262\263\367\271L\264\"4\240\350\302l\270\224\343\351\250d\337\354\370\63\n\376\220\177&\25\3YnO\253R\253\3u\5tC\233\f\\\2\263J\"6\265\354\331\241\227\364\326{\261\276\v\2\n\303\374\"t\225\304H*\22\62\203}\266\20T\240\31\232\341\30\211\353\f\177\25\62\341\353f\317\63\317\60?7\316s\rL\np%X\237\233\70T\305$V#\240\66\333c\21\205D\230zMiAU\272\310\266\202\357\223\33t\216\336X\223\20\v\261k\336" - "\224\242\264\272\v\221\v\303\65\215A\261l\250\257\207R\235\340]x\311\315\t\213\272\203\307!\336\321S\272\61dxW\201\226\225\300\6z\260^~\311\263?\224\331\342\4#\t\331\272N\350\313\267H?m3\f>\6\320\263]\262\221\322\300\6\301\1\20S\317\232\300\25\60D\247gx6:\37\207\320s\241\313\212HB^B\310\311\303k\353\22\242\236h\365\177,\355\7\71\204\377\314\371\37W\234\4$\v\5%\277\354*\352>'\301\244\216\20\331\333\16\243.{0\b\30\0\64\5\222_\"\351\270B\313n\254T\n\257*6\\4?V(# \343VR\250\66t\276#\310\20?}\317\212'fP\212\354v\333\327\222\301\221\311s\264U\333\22\345rG\307\0Z1VW\245\324\236Cm\327\245\340\325|\267'x\346\35\221\376\271\246\63\357J\"*\362v\\\231\340\37\240\201\304m\222\317\25\0\23S\241\275l\2Y\253\310q\326\220up\r\345\335uV:\27\322\201\n)Q\324\232\341\306!\267\37\303\33\231TU\202\346-\25\f[\33\235\345\366Y\244\337\16\256\25M\0\362s\6\347I2\\\211A\231pKv$\21O\361\315w\204\232\322\205\203D\217\344\334\177\327\61L\312\211\310\302D\273\353\275?\235k" - "\2\250\f\231\232\35\331K\354m\23F\35\213\350:\216\331\207\236\333\340\235I\7U\224\24\0%\272\61]U\223\25\217=\266\234}\323\356\270\22\335G\244\r\vo\334q\\*\\\327\306\333|\v\363\7_\257\241rJJr\202'\226\2h\205B\23\227A\353\277\275,\310\360U]\24\247\316\16\271\312e\1\375\234\253\7\v\337o\204g\334\227\30\256\336H\17\5}\256q\304\323Mo\275:\333\237\367\271\376\365w\303\356\335\33M\316\321\367\334|\377N\276\315\220\36 \262\220\302\305\202\36\301\347\314o(\177\324\221V\245\223\223\26\364QL\vY\34\303\212\65\352\305\371$\376\22m\330,\265\304\240\21\273\347'|\37{\243\304\222\226\345\236\355\61\310\325T\216+\30\230\271\0E\222\227\217\226\250\272\312\\#NT_\232W\346\352\66h\204p|)g\272\363\262\277\37)\242o\17\22IQRj\207\"\310\255=\363D\236\224\214)D\361\20\374J\224\22v\273\360\244\304\345++\227F\245|q!\264\222k6d\347(\374s>\311\67\177\325\332;\232^\nV\321Z\244\225\250\203\342z3\272\206B\260\236\f\270h\303\243\71\322\360U)\365\227_\322\v\266\241\27\323" - "\274\2\260rY\271\272\31*\314\363\320\364\35\264\200\366A\364\371\366x\200D\263\317\240&\262X\332\r\31L)s\377]\n\256\307w'R[\256F\367UH\203\b2]\244P\17\355\31\205\317\244\22\322\207\30b\351v;\16\222\206\17@\264\360\353\342\322\327\226\353\210\326\247\34/p\226\262\360\64\217\336\247xB\276\f\264\367\36(?\354\340\316\375;\327vY4\363hQ\220\233\367{\r_A\355k\303\247\314\26G\304m\210\264\200\321\345\27\301qE\337\33nW\206\213\25\260\267c\305\265\261\242\b\261v\32\367\344L\336\205\266\265\61\223\4\364{W\353\233\330;\\\363j\250\205\36\342\366:D\233\357~\253\341\306y\212\366\307A\322\305m\217e\273~7\22\3\213=#\t\271\260O\271\314\246\332*Ni\370\320\224\22\256w\331\26\230\34\312mX\7J\303\70\303n\305\324l4\221\31(\371\1\252\215.G\264\264>\"\256\216vh\266z\335\37\221,\202\270\r\306\263r\226\312m%\315\301=\241\246\334t|m\336i\271\200\314\211\230\316\236\226\23\332\340s\272K\303=\230L\1\261.\252U&\346\312S\235\262'\271n\204\274\r\1\21\30;\f\236\302\277\347" - "\354\21\206]I\202\231\311\34\310\251\227H\373#\t\226\232\60\177\0\300-\300pV\332\323E\25\262\204\20\243\177\r\240\375\323\71\341E\232\253>\7VD\270\n\305\260\366\306\v\306D\260\341m)\372H\365Q\340\6\fug\310\267\266\242\36\202\211\271%\3\251\304\372\240\251\243K@\271\1,E\24\362\226\33\327@\215L\303\222g\35$2YZ\235\321\370\b\230\245ui\353r>\362\217\203J\342\b|b\362\257_O\345\177(\242\212\271\324]\241\352}\343O\364\6?\360\27C\16\t\247\60\220\331\63d\257q>\214k\377f\337\21\64\34\202m\334\237\224\264o\331\34w\\L\355\233\344m\222j\304\271\4\241KJY\211E\361\244\212\363@$\261\204\265\236\326\227R\331\263\255\215\367\bJ\357\31?\331\b\364\255#\256\362\335\23\330,M\260\210E\356\211lY\20L\374\336\340%o\374f\242\221\233\336Z\n\223Q\357F\301\204\357\324\214\227*o\276wC\322|\231\323\323\270\326u\371.SZ\323s\353J\345\63\344\313\250D\226=\242h\324\354h\222\355\363\235\256\205\347\67\36Z\371I\363<\343\"\250\31\236s<\27x.\361\274\306\363\6\317[<\357\310.7!a" - "\375\256\272;mc\240\330a\227\350L,I5D9m\331\325]\177\64\215\350\212\220W\227\344\307Kr*d:\210\67\327\237\352\320\\\216\372\261\272 \177\276|\373\313\345\333\237\362M{\t rJ\214uQ(x\266&B\263\340w\240\221h!\252\261C\r}i9\2>\337\225\320\263\67{6-o\223E\356\325\61\230s\r\206f=\371\355\320W\34\367\302P\230U\311z\237MG,\274\364\233R\217\24\0\213\\\33^\321\322\314\0~\301\22\271,O*E\212\217\252\211$\310\0kIHK\242;\334; |\36\260J\347\367\271\316\277u\227\275dC4\320\66\32wJ\310\22><\7Nq\302.\375\203n\31\16\371]\216\376\373\336\\\201U3\376\227\24\264\313cV\336 \21R\230#\212\\\4\351\351\327\247\253?\24[\240|\223'\356\275\71\1{\350\241\252\32\n~#|\262\37\4\236qV\347n\330\65rYR\226\226~\236}\360[k\204H~} \f}\316N\252" - "\71\257\346Y5\201I\331\r\25\1\220g\366C\202`\335\27\234\264\334\324\375\220h\262(\244\365\r,\254\277\354\237\214\323rh>\257\321\27\65\372,\b\ve\220\312K#\33\22,\215\234\344\344\321\310\351\243\221\371\243\221\263\32!B\6\350\353fJ[|\202^\256Vk\342Z\4\23\321\342\310@\257k\353\322\302\304F\24\177\237\37\273\67j\371$?\342N~\252\360N\336$\374\66\371\207\220\61\223\v\232p\7\264\337Fh*.\271_pj>\202\26\252\301\200~\225!\232)\b\262\\0\311\64Eg\235\272\270\324U\374k\314id|\373\300\250\35\213\1\362\235\357w;\241\345n\234\216a\304\60#\221\322a\6\203z\362a\375\204V\316\356\223\363\357O\364*\302p\21q\302\333\373\366\355M\363i( \213\351\35/,\205=\310\220\nC\16'\t\345)\273Ck\252Bb^\24\251\262\f\325g1\230C\277\357n\275\215\250\363\20\204\351\216\271\236\270\343Io>\351\235U/\247D\346\343\66D\201\226\177\344\225\306^\231\261\251b\226\27\221Ys\22\2\346\253\216\204s2\200\314\365\305Isq\332\\\314\233\213\263\346\342\351\254\275x\336\\\177\247\265\65\4\230\216%\243[-\322W9M\300.\321:b\356:_e\272\302\377\347C\246\330L;\tU\5r\354\266rr\n\20M[\352G\370\30\350\226R\362\310\330#\256&h\262V\343\321\273\334\361\337}\333\221\62p\331\243\267u\335\274U\266\261\r\337\334\271\243\353\62\177\234\241T\27a&:\33GVI\27\341\221$Kle\250g\230\216\321v\17\364R\272\66\64\363C\326wvh\241V9\31_Oy\265`xB*\230\311[\324\5+f\216A\261\341\210R\262\361\300\202a\25\232\317\353@\t\245`6\273\30\250\333\35\331\376n+\211\312\353\341Z\331Xl\353\60$\313\273\205\250\r%\237 \201\313\273ttK\242\235\3\6\214\372\300\342\203\307\303\276\307\314\361,\255\231\334\322\333\337\333Q\364S\270~\277\260-{\351\306\71?\r\270\210XQy\326'\1\234[w\23\221i\330Ic\326s\35\62\322o\375\2\314\25\241K\304\266\n\207\373\260\214\306\200\336/\27\264\62\203\vQ\347\217x\341\255D\361\20Ni\377" - "\344&\352\27\200{C\311('\243\272Y\206\331<\26\213q\b\2\314\333\304\21\254\37>\220\33\375]\201\353\2r\212\374\312O\260\234\31\366\223\330\275\335^\rMe\330\311\204\271\217\230\272\240\250\345\17\33m\320\315\314\345>j\201g\26\301A\334X\223\316\177D\366\261\274\351i+\213\220l\365\276\227\342\313\22:b\271\327w\342\337eP5\227\230\327j\305\70\377\"m\336\300\357\63\200\346\331\23\66\320\365\254\312e\327\357\265\302\262\224M\346\307ob\345\225`\347\0\352W\355n\220\22\266?m\235\t\232F\205\253\307\347\264\321yC-\17>m/N~\231\375Y\240\325\305\v\260\227\66\324\300\312\200\302\330\365\203\351x:\227\235\16\246v{z\230\337{\332\212\4\202\330Y|\311\255\244\370]\313\217\26\335zB\362\356\260*m\2\341;\37\4\201*Z\252<\241\250\\\244<\234\242R\16\67\221U\352O\207U\304F\1f\306\n2v\276\334M\6\"H\221!\24\353\325'\355\305\350g\325EX\370:\216\275]\336\245\270\256[\265\f|XG\346+r\307\277-A\206\240\25!+\212\1\363\62\61\221\372\323\245\240\261\n-e`b\6E\23\254c\206z\241\326" - "\306U\376=t\201\367\377\323\261a\214\337\304\37\16\366\251\355(x\307l\357\177\374\210\354#\225\237\214O\271K\321\35Fn\223\227\231J\254lL\214\335\37XPG\227qAE\210>\30\254\220\267Za\326\352\16\353'9P8\272W\313\253\245H\315\327\267\235$\276a\23\374\266\265z\210\343~2x\nR\246\334k\370\275\200S\355*\227]\304\310\330\36\35\254\246I\266\246\235\312\252\2\325\314`0\250\360xe\23F\260\211UF\267\315\27\246\310\237R\333\366|\377\335~N\4aC\6\34,#\320\31G\365\353Re\1\326\16\352\200\177\23\2wH^Q#\7\66\325_{\275j \347\277\372\344\254)\230\356W\233\70\206t\24\62\250\363f\304\276\341\71me\260I\214\321\f\23\312\246\24^R\324T;a\256\305\257\257\231g\343\200\375*\7,\252\277\310\320\347\232\317\30\32\213|\374~X\252\266E\254p\337LE\253,\203s\rz\316@\264\65\66\221\5\206\"`tv\215(\235\226\222\215\317=\247G.\206{\vs\273^\336%\325v\337\303@\20~`>A\263\225\34\337" - "\306n3|kP\261\b\356\f\240=]\231\263\t\275\237\235\330#\237\202\210\316\323\256\236\25\202\17n\302\367\252V\347^Zde\342\222\304\204\60\207\214|\366i-B\221\377\16g\273\335\256\227\333d=\366\33'\376\220e\344\364\212\67\376i\26Q\373u2\242\v\234\214T>ek\355\30\307G\n\21\27^\371\274\277Q\240\227\207\62h\332\273d\325\257{e\277\373\230\315\357 \216\21]\220\1\5\333\243eF\305\25\16&\274H\373Z=\336\236\377\326\234\375\66\271\232L_\222\t\\\262\64\24\303\220\244\270:\306\3\\\372\361\f\360\261\243A>\n\227\64{\317\304\255t\t`^\315\233\254\222\371\254\355\37\221P \262Z)\34\354\177\316g\257\266\311\70{\340\371\361\300?\326\300\373\375U8\263\335~\222J\"`\vf\20\34\352\246\244\357c4t\27\31\215 \v)\32\376\257\317D\235\310\356\256>C\335\337lX\207w\337\66o\243\354\265\333\357\342\24\365\216g\202\246_\356\342\252\236\36\222\325\347\207\326\263C\353\205[)4\250" - "\17\267#\26W\26\300\351|\31\1'\366\363\243\221ysv4r\6(\243\205\223\350g\215\315\265\301\240S\2\244\20\1l\226\v\24\370|\4$\364\335\236\b\316\234\325s7\346\255\265\260\36\71\363\310\63\371\313/cQR\245\223c\223\35@'\243$\355Z9r+\7ZD=hy\306\313\263\332\255\354\34\276\236\67'\305\250\7I\363Q\25\316Th\205;\21e\24\236\216\70B\37\62,B\205,\321\323\354\365\315M\314\207\277Y\301\270\202P\240),yz9W\6\204\236z\223\351\351\27\t,\256\265\211\344A\333<\260\n \b\233\273\305\325~\7\242L\344\311E\367\vzL\244\232\366\270\351\350\61+\236n7^\204\305\356\276B\233G\265g[\214\245jX\266\313u\210\0\302\216\71%\3\16\220\320\v\213\23\226F\311\307fhK\336$\314\314\270\325(\343mK\353$\362\60\276\322w\303>\254\231h\316d9/#\372\334.\177X\266\344\356\202\276k[\3\32\351\363\62\64m\253~\327\246\316O\341\2\225\324\254\204\243@n\261(\227a\267Wa\325\23\245\355\256\231\310\251)\203.zNA\310t\204\252\t%\217\214\343#\313\344>\250\217\243\251\311@w\17p\f\342\334K\6\213\340g\230M\4n" - "\330\320\270\342\365\26\32\307\342\356\270\251\66\23\243h\34k\354\232\b&\273\330\326\63\312\16\220\227\"\257m-\257}\250^\204\315\211=\305%i\223U\241\25\231{\322\210h&g\347)\232\244\240\36s\326L$\233&\223tiD1\17d\202\32<\0\v\215\201\205U\0\23\23B\301\253\260(\31[\254lD\342\70T\27oW\6\357\373\31\305\343\263\265\60\355\377\352\62\t_\17\33\225_\312\357e\252L\241\317\232\22\17\255\310t\244\362?\257\1\225\206h\26\243\302c\327?\271\220\23\212\271d\352jKi\336\66T\"\304\374\23\266 \31`\365\24\234\252\66q\33\25%\343\341\366Y\204A\247\354\346\36\233\61\366nn\216\272*\263\367'\325\66\235G \32^F\223y<2\245\35O\216\372\363\243\376\351Q\377\214X\321\b\230:\354\t\265T\320Do\372\245\247\66s@\35\332)4\322Eb\371,\37\227e\275\214\357(0\t\317<\266f\27=\5:\361\rW\274>(}\315*A\n\212\365h\205M\374\324\320\306\257\254\31K#yx\243\216\356\305\t\302\354\32\70=\36\230\37\17\234\35\17\355\236N\273g\rj\207\34\64\212\355pC|Rl\336\241N \37\343\370\271\353\364Z\223\243\37\320T\241x\17s\37~K\22cUX|]dJ\34\243\204\210\334\344\207u\234\364N\376\65A\274\35\243\22\360\70> \376\0\v\326\366H\214\341N\331\350\rvL;\25\6\223\"2\310Ek\251\335\265\33\221xg\371$\220\202n\23^$~\353\336\232\265\22\253\275\352n\303g\265\61\311\253\354\225p7e\256\313\65\346<\302\4\355\26\32d\314a!\2s\333\30\352\301\240\330O\214\313\310\265\346]e\206\300\337w&\271y\3\306\226\66\25\25\\>\312\356\210\0\266\275\350\213\375\20w\271\253b\263\200\263\267Z\231\67\301\214V\355\362x\203\243\7\255" - "\217\205\303\210\3\330\17\242\241\272M\337*\247%\243U\225\267\274\254\67\6\365\371\26\325\65\277!\311@\204\201\350=/\300\33\245\245\353\215\2\377.g\265%&\242\335\4&z\177\25?\"qr\25bZ\243\256kp\221\334\367\230F\367?n4\251&\371]\206\227\277[\375\242\374'\37\230\214\244z\25\\\rZ$\25\246\221\350\365\235Y?\327\36\210\375\313Z\244\360\365\256 \1\276\352\7\245\330}\372\211\257\335w\325/l\372T\322\343ki\352j\312\27ZCa\310\256\364\240N\255\205\337\345i\202\35\21\243\1\342\360\207~\v\341\346\314g\230I;\260\331\307\25\205\316\352jU\325\2v\216\204D\356\305\24\371a9\324\236P\246y\25\6\305\70>\242\326\253\365\267\6\35\32/\363&&w\222?\350w\247#i\365\2@g\236\6\f\257\342\336\254\316\226\36z\b#\272T\34\275\277\357\266\26\356\216U{\355{\333~C\234\361\243\266\2\177\21\327?D_v\206\207\232H\321\247\333\61N\325]\33\31(\177\371*\16\372\24\311l\17H&\364p=Eg\257\347mP&\326\212\b\n\nt\331\211\357.\212c\2\225\251\342h\361]\237<\n\272\215\33G\211`\334\240\356A\245\7" - "\227\327A\0\376~6\276\316\233\334gAq\20\310B\371\275^\210\67\332\17q\205l\21,I.\221\203\220\250\fu\205n\30\250\343\"\21(\215w\372\337\25\31^B\235\362>!B0\34h\351\267c\30\"\35\63\202\212\213)\254\206\24\360\243\2\330\221~\230\211\374s\35\23D\245^\255\32~\277\211\5\365\60\237\61A\373!\16V\353\225\312\367N\377\336{\262I\367\203\222\263\240'\26\235\21\345]\346\205\261\216\253M(\214\207;y~\226B\373-\266\213\vS\24\62\227\263\b\353\377\207a\366\372{\334\330\65\263\352}\223\30\300\353\336\245]\3?\263\\\213\303\350~\367\\\203\232\0\200V\320\304\233\375\202\267Y\"C\241\227\233\31\70\\\277\255\177o\375\357\357)k\213\3\367f|\330\1/oL\247\230a\361k\276]\265%\265\212k\345O,ffQI\33\307\300f\2\257\325_*\250\337o#7\24Z[\221\230\230K\263CY\312\345\0\247.\334\306\247\23\66\254\210\302\321v\324\7\305\65\276\323\217\340\70g\224M\277q\201x\n\263\221/\271\362\336\2!\305D\272\64\336\351\237\1\21\264\357\22_\210\252\234P\235l\222\30\304\247\220\332\302\235\216\201\250\303U\7\246\216W\317\306\327\247^\204\232}O`\30\201~\25\306\214\354S'\33\24\246\n\231\207\230\273\206\351j}N\263~\271\325\203\330\62,#\250\340\343.V\305x\345}\4\64\254\203\211h\343z\37\272\201\304c?Et\326\177\313B\237\366}\270\211k\225\223m\206F\274\25\214Jd&\21@J\321\26O\344Y\371Y\20l\3\232\226En\342\214\222'\221MF\334\245\327w\250\b\225\210+\261\207\342\305\216\346\314\367\203\361\22\27\70\271v\227\256W\220\7\321\64\243\32&\206Mw\214\207\305\333\307\245\363\237\343OW]\352\336V\373\270\63\264G\355hy\206\323\27\277\374\22\327\23\330\323\242\315\360A\27\307&\35\23" - "\201\35\374L2\307\201\360\224[\311\216\223l\350\265\244\332n<4A!c\211\200,>]o\33?\332\243~\254\255!\377d\225oF\245\27V\270R\227\32{h\344n\4\274\322\267\0\371\317\213\346\343\217e\363()8\357\267\21\202D\230\376\344\344\231y\324I\361\177\346d\30\364\250v\31\36\370\242\313\n\354.U\270\236\221w\236\320W\353\355\20\277C\217\230\225\66\341\252;\344\244\34\63\245|y\326\210Tr\233\222\224\234\367\301R\361\25\337d1\r\31\262\267-\357\266\272\312~[\">\r\323W\267\314ZF\232\35?\300\357q\21t\373\223\"h\347\250\255\nL\7\227\340\5K\36\371X\336l\353|?\317X\4<\213v|V\201\60:o|\246\201\313\64\275\62b2zB\17\235\314\264\303\n|\253\"\231Utd0=\342G[e\330&]\227\221.U*\273\363\314\214\377\233" - "\274\3J\231\33\227\62\253a\252\321\353\301\205M\v\23\377\375\337\t\31\234_y#\361\374\207\213\330\33\216\334P\33\1\250KOy\267\60\71\275\241\361k\354\33Z.\314\210\265aG\32e`\265\252>\257\260\273Z\371\317\310\334\322O\325\36\301\21\277\352\343\232\375\321\311\230\3c\200\236\n\233\20\273\337S\221%I\301TLAi)C\357\274B\17$RP\211\376\304E\374\344\355\276'zf[\353\256\262\64\217\302\365\344&U\300\367(\200\243\356 o\25\304)r\177@\270a\35TB\220\231\214\177\216\371\342\r\211\225\315\264\231\";\231\235\276*Z\256\235\215\334\232F\217\31\270\331\374\325c\22N\203\217x8\r>\242\342\64\370\217\36l^\t;\254\7\35\35\246\273\365\23\313\352iz\344&\226`\322S\32\243\65u-\236C\256\322B@\321n5ST^f\200\311\236sU>\245{<\356%\235\332\225K\206\1\17\364\24\211\30\260O~\273\211c\322g9k|\271T\226\24\220\v,$\256{ z\365\261(\32}\24\16\221S\300\333\273 \200\5\345L\353\"\206\346\347\346Y\v\252G#:\205\61\353\340\202\213v\372h\31\214\224Z\365\364\334\255\366\20\211\375\27\341\16V" - "\277\265\312\301\251_0\232\307\306\303\246\6\216\30\234\260\312\377z\5\214\212\225\321\255\243\305\27yV\327\231\373Fq\330\372\373\317.\271\5\233\306X=\270\374\366X\320\305%XxcPc@$\200\364\357\335\367\335\177#\236\244\311\265\230\320\nK(\262\65\25\6\367(\301\344r\23\240\270\211w\267\222\33\307\b\1\354\237\27\275\rITd\364#\236\23\307\261}\277\277\275\215~\277\240Z^g]\\\200\261-\232d6\261\323\16{\235\236\275\23\67\303V\305\211\374\273\27\347|\233\63\350\354\362\247\243\343\367\211F\276\334vmb\257\362\212\v\212/\234\17I\361\340\2\f\206\22<\253\24\266\320JA6o\345\307[\v\361\377\244\307\332\6\351x\235\316\252\236-`V5\0\327\330\354\225s\325C\265\341\263\367\v\252\360HqP9\35=J\224\215S\244\351H\314\275\31_\377\304\323\372\336\360\362'\327\216H\217\305\306\236\300\311" - "\212\17\371oG\366\232\266\376F\347F[>\214\370\302\270\16\n, Z\35\374lp\344\360\315\245\222rt\225\260\266\20\302\372\7\300\257\361a\241\263\b3\226\266%\377@\320K\332\1p2RT\376\246\352!\343,\270,\202s\340\7\306\360\242\36\" O\376\364\34\347\257\373\337\t\16\315\217\67 tU{D>\22>b\373e\371E\221\25\213\310E5\377\v", - 26592, - 61034, - 36555, + (const Bit8u*)"$\227u@\233\207\26\305\257\204`q\201\240\1B\b\4K\b\304 \251;\25\254\356\2uw(\25\352\245\24h\313\250\257\245\363\332\326Www\357|\253\354Qw\235o\217\367\301\177Do\356=\367w\316\305\311\363\223\335\230\233\254\357H\375o\33{\323\32Q\346C\350\262.\262\67\367=o\230\302\37\212=\"\232\244J\266\240\344\205\372S\b7\373\177K\352\233\342\245T\36g\267C\306n\365U\32x6.\225\332L\f\35G\203\332\307\365\243\341\23\343\237any\322\v,\325YV\362\202,\233\205\223\217*\336C\267\337\242'Q\345<\307C\34Sl\356\217\225\277\71N\362\350\371\211\1\20W\353y\214u\5\336\365\320uA\324vh\22\22\364\3e\347D\4b\322\233\20\31\225\225\246\365\301\201\241\306\371\240\320\371\270\250*\314\231\313\211?*R(g\236>\4G>I(\344\64\37UwN\357\240z\3\v\247\331\352\271\375\266\60'\32\17\310nr\357\244\230\266l\272(\333\6\305\347S\37\300\314=\326\2\312\271\250\217\205\262wiY\210\207\241\30\23g)\363\31_\301j\316\372L{\22\233<\320!Ve;.\343\264\26)\227qRn\322y\32\63\304<\27\312Gg\334\2\0\0\62\274" + "\224\326\221*=\361=ty\24\271\210\306\317K<\306\213\232\331>\301\214{\232\225\64@b\\E\366PM\233\306\27\253J\304\32(\220DE\201\211d\313q\370\310\370S$\17\367\361ol\366\246\221\336\261X\364\215\351c\216\275*\r\207\231\16k4\f\314\66\66g\223H\326\236\206\316\211\357\314\5)\372J\210\333-\213\307\31\357,KI\363D\374\7\67\255\f\16&\277\307t\230\215\7\245[q\360_q#q\341\f[=\312\372\211\356\361\200\33\261\307\241\277\64\326@\261c\245O\260wq\314\5\354\337$v54\213\n\256E}\317\300\257xiH\306*\b\215\363;\212\375\276\212u\322\340\340\270\317 ~\223\\\201Ao\375\304\20\362\213\337\7\\\260'J&\24\t\315\326\6?\203\304\267\212e\b\253S\375x\366\30\253\v\365\312\300\65\254\277\31\330\223\6E\305\25\200w]\320f\234q\335\62\n\252W;\227c\376\226\250\361 \372\34\275\330=7\372g\212_&\377/\317\310K\375\231z\354\212iJ\221\233\3\v\271\317\275\230\333\30p\237\273\223\313\256\235\302\243*\22\2x\340*c\34\214\230\25\177\17G\314K,\346\351\243R\376\241\345\205\256P\234)\266\274\4m;" + "\361\17\30\63Ur\37\323f\253\213\205\322\32\n\2+L\371\66EE\v.\330\352)rb`G\34Pk\354\f\t\337\6\367\6\375GIId\357\241)\244e}\34\273\310\177\25\335\301\316\247\"\307\221\317R\274D\265e\231\201`\356\"?I\253\366e\316 \305\346\220%(\375W\264\21:\325G\234!Q:\352\250\246\334\355\206\r\331\236p\250k\355\35\200\321\307%k \373\\\370A\224jD\275\300\343\23\324\24\265i\276} \375\266\272=\16\332\33\27\n\23\307$}Bq=\255R\350\377(\266\nmy\352\37@;B\374\2&\177\236\334\33\f\37J\352\204J\331\63+H\314\335\177\212\36\2\315\37\352Z\n\323\2\347\62\315\367\f\340\33\310};\32\62i\366t\353W\\\366\314\372=u\252\210x\311]>\327\367\202\350\226\22f\371\27>\32\322\266\364\265\321dY\362*\f\376\314\317I!*\277\233\70\177\214\255C\343Op|\251\311\343\374\377\352\207a\345\60\307\247\260fS\346\227\334\352\213\220A\320\321\31\241\241\342\225\236\34\312\314\321\376\205\221\356\300f\274\361cO\25\304\232%\277B\317\33\61n\234\375\330\372\25\331\27hf\341\220\301q%\340i\32\324\16z\374'" + "\372\21w:\33\61\n\342\332J\177\343.\267\"\345\304\5\360/\215non\v\236\61A\243\261\335\221\260R\32\372\64~\35\64o\241\v\205y\336\264\335\330\366{oS*|k:\f\355\322Co\240j\262\270\25\206\211\2D\30\327O\36D#/%\334\245A\20\347\375\277\"\306\n\2\201\341~\361i\220\330J\21\202\356\217\202\224\350\363\230\b\v\25\246D\b\230F/\251\311\370\340N\334\372~\310\316\6\201\330\325\64\371B\362\337\274\370@zS\224 \337\241\65\213\62\377\6\355\237\276&H+Um\207\242\215\246|t4\323j\270\317\216\230\275<\361\327$\33\333\316\250.\361\340\213\306\177x\322\234\244*\b\331\351\67\257Q9\37\354ro\304\62\221\365>\252$>O!h\242o\ty\366\4]\247\220\61\376\200\303#\342K\33\67\245\307\240\30#\257ug~N\353\356g\335\204\342\376\251'\240\365\254\220;\20\270\213\253`\351X\373\0\254\356\343\234\fN\251\246\202`\274L\313\212{>\23h\303\bO\31l\252\365\246@\266:<\217\344\303|,\302\314\271V\352z\203>[\360G\322\235\360\253\240\346\207C\30\373M\213m\6\205\327Mj\302\353\60\207F\354J\350JU\5\316~" + "li\241\274\200\305\257S\257\302\334\253ik\1\342@D\35\322\303\23piW{K\350\66?\272'g\227\206\375\311\225\223\35\331\270xh\372J\350\372(Z\316-;\351\376\313\31\177\253\363\4\66\t\237\307+\357\271\322\60\341\230b5\30\377\226~C~S\350S\354{*\26\4DB\253\201!\263).Pv\237'\344'&\262\71X\36\7C\263L\305P\323\315\365\65\231C\24[\310WA\375x\322\371\244\243 \233'*\303\376\273c\353)\345W\225\16,F\345{6\f\223\314\"\355>\337\"\212\252\224\230\60\252\\b\203>\247\r]\321\260T\272\210\373+\r\277s\364\31I8L\333\225\252\204\311E\351Eh}\255\226\201y\234\374\6\347\224D\26\65V\232\266Cm\245\5\317mO\33\214@\271\215\346G\331\n\270}\323\320w\324{\244\241Z\320)\353\337\7\316\205\360c\1R\32s\306\274\b'\244$\256$\323~\371@l\237\33\366\4\262\332i\337a\216:\362\1\25\325\307GC\251\303\362=\306\334\225\312\251a\27\356qG}x?\312|\24\324\243\221>\346\235\362-X\362\231E\202\236G\301D1\257\244H~\7h7Kn\213l4mpj6\273od\375\202\t\225\n\17\324:\334\23\270a\351\22h^S\233\212\232\354" + "\f\36\17\71\303#\227S\377\246F5\315\70e\271\214\345\251\31;\331\272A\225\316F\251\324\3\60\16\344<,\307\264\r'rR\36\364yj\30\204\261\276\322\333<\275>U\217\26\271\252\216\302\367\5\330`F\244\245\35w\333\27\365\2J/[\356s\357\273\61%4\347\27\353[v\375Ws\2'\335I\366\347A=\214\223\251b\274c4U\274r\314\240\26\267B\332\243\350k,$\377\277\350O\320\201\357+\230bI\336\212\345\207\354\210\23\6%~%l<\264\251\17\315\245\226\273BjP\277-\360\30\16;\37_\210\323/\245V\242n\275\337\26\34\363\310<\35\27\222m'\227\346Z\f\264\250:\375,\17-2\215\206\252g\316T\250\373\301[\305\352\60\237;\215\66\1\253#\26qs[\360-\36[f\316\301u\242\254\66\60\60\302h\247\31+-u`\350+YJ\251u\252\211\30\272\325\377\34\246\337\321\330\70\222\3z\242|w\324<*\373\64m\24a\31\24\302\352\1\231YPs\320\365\214\"\34\1e\20\323V\322\26\334\227\265s\311\367\nM\243\244\"\345X\241\367\320\353Q\314J\350\60\70\354.v\315\214n\313\0\26`\331{\321\71\241k<~\256\371[X\330\331\366=\215\32d\16\303\245e\366" + "QP\34\236\372\21\71\376\322FbD}\300{\f\371\313\177\"\367S\33>e\373\367\352{0\341XR0\226\277\262GR\312i\225\b\226\313\235W)\320\314\23A\261\304'\237\305\214O0\333\31\241\247\332=\231a\330\272 \24!p\205~\37\271\356k\327\201\274\223\350\35\264<\32\342\21\270\206\216\327\332\26\334iSD&\214\355l\36\17\323\71\265\177#s\232\37\326\331\250\357\315\330E\234\276B\355'\304\31J\220*|\320\374XQ/p\rZl\326]$uO\361p\241\71\202\211p\360\22\337-\354\221j\237Q\347\342\310\4!2\301\344\277\223'\201:\\\234D\375rbw\342du\262\236\206\264\66\265\247E\7\323\353)}\256\306\217\247\rO\311AS\261\274\25fWG\264\307\314\315A%\264\374\261+\233-Z\345A\234\262%\371\34\362D\207\v\232\314\tz\r+\17\272J \256^\326\213$r>\313\301\16\337\65\24\331:\320\205\371\277E\225\300\304\277\223\276\343\376\177\306Z\300p^r\bW\376\353\332\206\35\v\"6A\347\263\21\277\340\264\352\224'hL\220}L5\351n\v\352\16\371\235ee?\237\265$\277\342\323\226&\377k?G\245\247,\177\n\31\t\322v\252Ns\266>\354\2" + "\317=\232\226\214\1\235X\204\311\353\224\67\320yL[\331\20D\24m\261b\277\375\25\254\362w\257\202\354\222\360\265T+q?a\311F~\213\323d)u\334\261i\370D\322y\374F\322\220\217L\275\300\264KvD\30-\233\232\312\206\263-YUC\35~\b\337B%;-VT\327\213?\1\323m\331%\362\271\24p\20G\217\65'b\244\246a\256\342W\24E\332\327\276\25\60\353\204\265\b\372\357\217\35C\361\17\344\377\374_\374\245\24\32\343?\v2\356\250_\220\376\333\300+\324\245<\362x\203\201\253\vq\342\307I\333I\33\342\33\302SO\247\210A\36 \272\216\255\364!7`\242%i\21+\276\362)D\217.h\227\60\274F\223\233\275\330\372\21I\27\211\206\221\241\217\324J\261n\351\31\324\275\366\253G\377\236t\5\355?h~\247$\215\62\225\242|\3\177\347\270M2\246\350\1\222\36\r1\305p\210F\313\315.\312\317\213\32\316\35\317\207?\304^?\305l\245Q\332\204W \374M/M\35\303\23N$\16\246\205s\323\303\270\325\342\220\274\206\267\31\17\260\350\2\216%\311\247\"-\350\213\3\r\310\325\272\"\350f\215\216duSq,7\351\26T\203\243\f\t\265\340\375-" + "\350,\210\306c\32v\217\214\336\0\343\322\314\265\60\365Z\312i\236)\263\f@u\214x\2W\265s\324b\325!g$\216\254NH\206\25+]\6\256\351\351\352\7\203\242\215[\310\23\23\264\4&J\222zsm\206\233\361\203\37\335\205\274\366V\346O\250\233\31\62\236\26\364\267]\301\265\237e\351\321\264V^\216\353\307d}F\355\332\204u\303\25\340RC\7i\330q\330p\335c\201\251#RFc\325\4\307-J\370Y1\227B7\371\237\243\17Ox^c\233#\241\33h\355\365\254\316\64\251,\271\23\25\265\67]\303\260\201\1\32\64\33\25{\301\224/[G\331\357\"r \347q\344O8\273\302\272\214ZT\207\244A\237\315\206\346\274b\254\363\65\17_\20\237\200\61}$\337a\373\370\260\357\4\376\301\246\b/\360\354Pk0\313jD\325\264\361\262\67\37\375\203\350<\304\277\224\353\251\367\66\303\16\352z5z\16\26\24F\35\342)\337$\177\324\260L\31\22\356\320\62lD\3\252\2\f\320\253ML\36\314omk\212\313\273\271\230\347\265K[\0\203\375\214\227\301\61I\343\245\225_\272\376\244\332\66\356\177\231\202\340\26\326tp\335\343\301\345\306G\24\261)\340\7aF" + "\354[MCa\312\227\311\257\220|\241\34C\232\371k\301o\223c=\347\34\211,F\361\17\224\313cF\230\1\7\244\33\375\33\225\223X\244\270\206\343T\346\363\64\345e\312v\214\374>\260\222\273\331\242*Y\231\346\263\214!,\352\62\317\63\246\25\263q\261\264\7\214\333k\276E\v\26\333\352q\221)]\302\366f\352\5\302\35\300k>\311\354\n\301\211\276w8\244\205_\33,mn\331I\353\222\263\212\60\70\324/\f6\316\362\\\21.\207F*O\33\222\362\rw\270\27\266\26\355\177i\271\61X\347\17\211*@X\255\351\r\3\nb\257bj\242\252\b\333t\n\235\317\335\23\243\35\240y,^K\375\61\366%\16\257\216\277L\262\5\242]\264t\260}\23g\337\to\207\372?%J\16w\372?\207.q\221\204\225-\35\345\364\301]\367e!\353a\177el\251`\"\260\240\211m\0-\316\313\350\16\30\17\35\261\375\354\360\30\320\354\20\257\240\274\316\372o!\325\245l\36\351\275\212u\257\275\337\361\370'\346\337!d\210\337tn;'T\322\340\227r;l\256\364\336\25l\207\33n\304\251X\353t74gzt'T\16\362\271\202}G\31Ns\304J\323\v\264tP\355\3\337\6\275r\213\331\272\1\274\374\17\347v\352\260\65\274\244\61\301\317RZ\373\67\236\202\203=q\373\61\367J\302d\310\37\250\177\t\222\36\374\25O}\222b\302!7M$\fJ\340\25\64{\247\223\360\234\317\255\223(\237\242\332b\221\335\264\b\252\177q\36\5\277\23T\303\23\246'6\241\365\367=\303\4\335\323\222\355\31/\270H\21\367=\301\370\360\60,\370\67:\241q\276S\256'\327\323\212m\256\17a\361\210\364=T{/\263%N\370&)J\b\4\224\223\243G\n:\343\373\b\246\375\234\352\1y\215O\234\220\tY[#\276 \f\217D\203\261\r\214[h>\204\313\262\35-\340\203\336\356\4\301\325\270\363\204\210j\356|2\342*D\237Uz\331\\(_\317\326S\252\316 \355,\312\304\266\333\303\302\220\253\225?\263\341\67\311N\262\275V" + "\357k,(\360?\32\63\214\234\21\377;\367\70\31\375\1\214\313\67o \270\tY\254\312\365\331\305S\343\222wAP\33\337\34R\207\210\7c\311\304\324_yv{kr\303\205\21S(\240\200Y\213\376\274\370vzwN~\241\364\207\305\376\351\305\\\236\222\21\332\230\263\275\357\202\346b\263\243\272q4nCb\6\215\314O\330\2\25\323\354\17\32\71>jH\302\67,z\212u\220yV{\211\203n\371N\242f'u\235`N\37\353\t\256>\356\370\3\253^8\233\201\312\352s\2\333\345\207\365\205\266q\241\303\5\334P\341(\323\32!Z\t,\206|\247~36\367\327]G\365T\361l\b4p[P\35\366\271\311\375\356\33.\241*S\234&p\rF\177c\226S\265\302y\27S\177W\225\363\302W\266\245\60oE\332\367Th6U@\350\63\377A\264\342\206\353\70z\373\5\307Cwo\364\22\256\275\357n\333\220@\335{\311Y\255u\v\347\b\327T\271F\243d\267\250\3\256\36\234\71\6\327\214\310\374\32\363&\350\377\346\366\34z\f\333\255\t\33\7\315G\350\334\340\227Hc \354K\377c\r\37`<\205\232p\361\35\201>\350\23FR\30^\23\337C0\33n{>4\1d\303E\223\5\255qN\227\310.P6\321\372/F\314\t\270" + "\fm\216\206ja\202!q\24\f\36h|'\234\322\274\350\256\255\236`<\204\377\337\317\207\64\272\275H\202&*Z\27\257\244E\177e$q\347\25\21;a\224:A\317\313\26\332\267\64\356\276\356\222\64\33\247f\246D\300S\374.\371s\312\323\352\347\b\341I !4\270t7\260\307kb\240E\211n:\255X\354Z\0\216\27\232\361B\16\303a\33\343\233\375?)\34\246\300[|\220\254}U\267\71\353\33\355w\\\372\211\245\31h\365\236\243,)\345\206&\276\211\262B\312[\345zL\314R\232\300]\226\30\311\65fW3\312%}s\250\70\356\210\201\71\301\326\3$j@\257\20a!\332\30\370\204\243\315\201?\323\354\70k-l\230\351\61\302\302\227\266\337\240\352?N\t\27L\325\337k\214y\306\355\322\3\330\354\266\256\202{]\213\261\64\350\336P\216\303[\306\357\245\22\215E\7\63\227[[\222\"\304\247'/\234h\233\t\235\226F\224p\371\241\214\331<\355r\312\1n\356\37|\23\273<\212\274\n" + "\241k\374\336\"\254V>@g\37\355\b\204?\240;\317\37\235v\226b\377\220\271\33\63\372\320\241\246S\274\276(\313\311\233\315^\27\272\376\325\326\263_\b\225\303\232\366\231u\274\71\327\333\23,9*\231\0F\254\233\345\335\16\243''<\24*\245V\177\205\274\241\272<\357\321\306i\r\37\26\357\346\370\214\340\377\b\332e\365\65q>D\376\20P\213S\n\222\227bx\327\0\63/kb\257D\363\b\305\31\22\377Dv\341\304\303\36\363b\"\260!mV\tg\237\0<\354\63\306\60\n\373\276\211Uc\331\354\264`^\366\273C\301\71\211\221\21<\257*\255\232\226\332\354\363A\275P\234\315\33\26d-\246q\327\23{r\337a\206v\34\260\212\345\260$&\243\35u\273\23}\"\324j\7u\212\315\371?\272\254\353\271\221\33y\317\273\263\25,\355:\340\342\372\252Lmt8\275Q\244\262\270\322Ir\250{\3g\232$\226\30\364\34\202V\243\277\376\367\65f(\255\\\365s\340\240\21;|\35\0\375\244\256\232\66\24\233/_\274x\241&fn\215.\266^\376\250&|C\352\210-\251\213twg\251\330y\365\342\315/\267\362Sl\276\36\253=m\255\332\263:D\2r\245\203\353)\232" + "\333h\216Z\264.R\271,\276|\243\256\270,\311\253+S'\253#\373Pl\277\31LX\306n\337\250k\322u\261\61TgZ\215\264\367\344u\361\365\360\225\32\250\353\5\322\247\215\246\326\221\324\25\375/\221U\327\254\206\277\242\300\373\363h\364\24\202\272$kh\246\16uM\330qo\244~7\25\251\337\331\333J\361\fb\262\217\1l\336\32\67/\326\206\243\323\277\250\211v\305\366\260\214\206]\317g\361t8'\231>\366z\316\256\370\24\244\213\352\327\253a\361\327\341\341\61\370\215\336\204\342\213\241\361Sh\0\253\215\267f\26qz(\23\25\353\240\3\246,)\257\331\34\332RG\257\357\300\221\255\370YP\303\20t\262Q}/\264z\375/luv\260\233\5:\220\245jX\335\340\304\344\251\370r\bc\270\30\272\321\61\205\206\274\310\273\247c\264\230\316^\355k\37\27\177\1\323\20\335\251\213\5O\215\206l\231\272j]\345\271&\241\255\32\363<\250CV\221\325\21\351\33\202h\350\246\26j\217\305\223\341\4\254M\214\63\230bg\352\365\30\202\270\71T\376\326\20V\\\b\16~|\361\2\314:\247\61\365\320\303l\337\16\35\330\215Q\227Ku1*\266" + "\36\310\277@/ D\275\237\241an\213\257\206\377KZ:\260\205/5\f\363\33\313\361Y\211\33\322\345\330T\271\25M\371H\t\227\247;;;\330\300/5\30\275\36\n2\261\247\272\60\226!\"h\317\236\313%D\213\\\33\307\70-E.\275\16\vpu#s#\24=|?K\26*\7L@\353\250~\323s\240\257\25\23S=\265\24\224\206\r\34\376\375\313_\300\311\375\302\267\"\301\372\236\250#r\356\71H\"\203\272\200\225\324\361q\261\361\377\217\35\313\302\n\16\305\\\25[p\256*\31\267\253.\223S3\366\230\354\212\257\320\213awW\254u\247CT'\313\334R\355\245\354\207O\366\64`\351\215\226\331h\32\70G\202\66\240\251\212l\261\211> ]v\367\246\334UC\261#\334\374\374\206\274\60\223'x]\246J\303\307\256\250\364\4#\232\20\304?^\26\333\30m\331\311\254\260\304\310\205\325-\317f\302n\6\344h\301M#.\324\323\277\3\255\213\342\223\236\372/;\270GG\204\310\276\6\213\244\21\30\244m\334\263\342\313=\252\254\256\325\367/\377\375\313/\377\302:0\245\264\353t{\345\364\222\212os\237" + "\320\17\202~\203\276\24\226-\366&\310\1;\35\31k\203\32q\3E\21\30\256\320\266\251v\241\370\256\247\177\7\310\311Ae\306\241\317\314\241\277\272\t\260\17\232\22?\340\212A\354\217\3\245'a\351'\322\272\346\6\307`\373\66\63qj*\baXM\310\351\222d\210\203\364\64{\334\210Q\241\32\v\223\307\5{G\231X\222\b\354hW\264\347(\202\222`\1N\255\356\1\33d\242q\313V\275\222n vp>\200\347\300\263w@\"|\31\n\35\234l\22M@Z\350|rP|\276\307SD=\347\310\203\v\256Z\301\323{\331\17\355\367\354\227\1^\327\352\71\371\335\225Y\203\62N\r\235\206G\264\330\220-\231\33\266\n\226)\27\60\64h\257e/\313\262\213\345\7\317\4\v\305\367{\347g\327\177\310x\216\375_\313\67\210\315\240\320y>\227k\371m\32\61\360\247{\234l\5\64\216u\310\233\337\252K\355\300M\261\216\66q\261\206\317]\252\1\64Oz9\363D\220\vH\5\337c\262\351\226\324~e$X\337w#Z\301\345@Ts\311V\31~\233 o\273_\365\252_X|\261\347SI\352\214\304\fi\n/\26\335L\247\242\307\355\276c\344\265\244\254\236:\\p\210\70\250\243.\270\1\377\t\356{" + "\311\340\70\250\301\312\200<\3\264!\346\23\210\254\216\222\23?\374\4\355\31i\254_Gk\336\256\344\374X\324\362\27\351\64\330iljr\331\b\340\66\301\212\3j\t!eK\320(\321\347w\355\275a\321k\362\216S\204\207i\214`\301\302\64\71Ca\343Rf~/\276H\376Y\20'4%\211\373$\314\252`\266\21\300\23\271X\37i$*\366\300\221`\274\203\320\332\7\235\27\236s\364/\266G\272\211\32\270\70\5\327\205\32\301Z\352\330\335h\230.\310\66A\334y\322e\376\347=\t-\374f\264\323\273\n\213\215\347(\271\356\222\200\225\71\302\nr\214.\201\r\365z0.>\33\351\33\311\347\320\316\306h:\217\71\212\215h\246m\n\350!\321 <6y\4sr\316\204\342\313\256s\6c\253+\344\21O\360\262\21\371\33c\260r\201\360\354L\274K\271m\34\216\325e\207\222\321\321pr\361\300\373\223\216>e\210\265\261\322\245\260\16g\206&\337\25\237?R\260(\243\313\275\207\236t\314<\5\n\375\202\276\262\30H\"K5\202hvj\22\264\364\356\363%v\363\326\220\230\255\201GC\333\vS\352\71\253\177\277\20^q\304\263\267p\6K}\365\320\303$\364\5\316\7\256f" + "\34\62q\355\222\25\vg\215\27\237\300\322u#\312\61\276L\241\263)D6\261U\347\63u\306A\360b\20\352\311A['X\271o\251Yh\311\322\16I6\200\37K\332\375\332`\225eGB\343\263\322\27H\236z-\237\34=\301\62\327\265v\342\301\247DN\255\312\264\\\204\250\375\333\306rEb\302\307\323\336<\344\222^s\347p4K\262\237\3\16<\303arS \261\215V\210>uE\231\4\264\375P\352\6:\230y\256Q\273X\344\61\314\211^7y\312\177\305i\321\303\266\263\b\0\317\336\3\371^\375\274\253\272RH$\22G\223y\241\26h\312\367\303:\3<\36\60\22fU\221\353=\33p\271\34^\35\25\337\214\274x\200\244FC\36\342I\21\206\22\20\337;)\237\62\260\244-\36)\241\274#\256\26\34q\236'j`\322\207\26\214\342M\210\265\226e\22\305(\242\242\201\6<\207\60\63\236\240\2\237\202X\0L\275e`\243f\340N\16nC\324V\211\377\210\245\245\312\26SB\203`2S\23\355\215#l,\224\224m\246\24\367\313\324\245\311N\260&\24$\25\27\220V\311\256KU\231\252x\36\372\5\357\265\27\67ka*\211Dw2#\3$\310\376\300s%q\26Mo\254\312+\232\344\226\305\306\70\203\230" + "\23\202\66\30\25\350\212\315\217\264\204\306JJ\300l\211/\306\332/WXVB\300|\\\5$\275m\241\310w\337\0\256s\215\320\26\37\217u\224*\21\62`g\323\245\361\7p\345J\275\370\64\17\301\302\331\313\327\307\272\25\207\5N\223\253$-\216IW\340\35Z\316-\330ii\b^\4\n \276B\226\254\212'\231\220\322\24\310)\265w:\"m\214\251\64\265\26\314\311\4j\4\60\371\346![A\277o5\322OUl\216iFr\326\n\355\7\332\304\305\356\237=\32\203\231SYlo\362\5$j\217\363\"LB\r\4\226\221\32\234&\270\7Z\354\372\342ZN\17%\271\256\244D[j\242K-\326\225%\241\321\306\27\337\366\327\205\251\201C\366\355\212\241\334/@D\317-y\341\364\301\323ry\366\327\61E\2}\3V\245H\257[L2\32gW\271\316\310@\371|\325\63\66s\30\32\213z\372\20\307ME\307\253\216\v\354\346q\274$\273k\370|\333i\1\250\257ip\305\20\333\315\37t\2\253\32\301\211\30\0[\253\343\370\27\b\336\235\261v\237+\325yMs-gd?\376\217\4\r\31v\34`\"\23\34\265\350\36Z]U\6y\345\276g\234\204\tmi\25]\363\312\\\\K\21\201\r\317\317'8\30\277\352\325\30\212\344" + "\30\30t\276\6\252\353\264\324r+Z\353h\354w&Z^\177DB;\20\320\324\331]\32h\356O\203\307\275\370\222E\304\376\23`\315\3\204\253]3(\16\254\256i\265q_\34\nuGN\364\351\371\6a\253+\300e\35\351\372\276Lx:\206'Z\321i.Q\205\1n\6\362\203\241T.\214\372\247\332\233\246\345\62a\b\205H+\335R\220\302}\336\253g\373\265z\375\213H\236\340\277=7\247\236j\311\\\33\373znIRz\206\331\227\373:>\243Z\0\370t\277\344\1\na\204\332Z\337\261\24\22\210\316\224A\365\60\230\23\234\334]!\5Y5\364\310?(M\366\313\20\65\232\272\330\336\257\252\26\374\215\240si\342\250\7`|\261/QY\252\335\200Q)Lj\206\16\352\251.>GN\273\321\360\26\264j\362\b\1e\273\252m\261?\222\271\247\325\23\304\277\337\24k\373\256\224\fHr-t\342\341\20\315\315\255v\325\343\342\352\252\201\267k\213-\\DF\5\177l\7\311\300f\v\342\32dc\312\325\26\340\311#\337\3\224]\252\312\231\n3\235TH\203>\304\255\177\70&a\341\241|\24\352\222\247\34WkB\361\315\376m\204\352\251\257\200\300w\233!s\304^\212\244\3`\266\252\271Fk\360" + "\262x~0\330\63\36\221\344@\227\204e\267\350\326^\375.\236\261u\200\343\305\367\20P\341\375 q\232\357\63\345\346\301\336\261:\360$K\211\252)f\241\217\334|\231\20\303\221\301\362\347\17#\277\27\232\261\372\370`\330\205(\227\3\241\266\275n\213\257\16\314|\21\5\32\7F\272\373\353x\261\336\221\347H8H\250 \356\227\210\276\255\305a\4\1\254nBiL\361\311\201%\212\b\303D\250\267\17\254lZkO\330\337\262\316O/?\240\325\64\255\312\"\257\35\330\64\373\v\30\263\255\340\376\332H\371\4X\202\r\346(\306\221\204\243\321+\241\17\1\273zx\210\372A\274\21\fB9\330\307\223\0P\242\217\204\5\343\300e\212\vY\275\320\61j\7n\21\215G\350\65\71\24y}\301\335\337E\244s\331\346\200\n\271\222oW @\333K2\372\370\0On\255\30\t\217,\207\332\352\374&\222\257\316\320\304}G\357\367\210\375\21\71\273\357\276-\266\244\65\327\2\367O\244y\v\373a\233\276\205U0\222\360\223\257\375\305\32\232\306Ie\333\337\265\357\37\374>?\324\371>\265}" + "\250o\274\261\32G \252\32Q\35\232\254\255\350\371\343C\226\212W\364Tltm\17\16\270R'\311\342\246#\261\225\220\271 \366F\337\316\241\4\347\262{\270g\177q\310\\\265\70\212\341\256`\25\237.X\346\233 ,\201\31^\370\273@\315!/Q\252,\301\304C\327\257\316\232\332D@\371i\356\225\305\263\250\344\201\7Q\345\360z\270\213\212\330U\354\212\347\30\277\61\21\255\65\264\332\205X\21*\24\20\177z\230\303\235\224\272\253\326}\221\373\226\336\213\5\312\5\306\222\233\2\214\70?\265\362zz\257\270\276@\313\221s\350k\300\256\222\23\67\216t]\223G1\213\230\334\265\7G\22\367\267\4n9\257\"2\335\267\345-\b\303\21\226B\36\36\240\230\237\205\5\373\376)GN\356o}\305W\250\206\r'\204\7\64,\224\351\251k\372\\\r`\177\362\4\244\24_\243\301\204B\345\210n\345\66\200\317\255\344\27t\230\301y\tx\23\346\300\331\254v]\335y\246\303}l\232H\265\316U\300:\234P)\310/G\362|J\332c\v\256)?T\215\301]+4<\361\320\330\n\337\301;b\\\24 6s0\342\364\22L?\353o\352O\216\322\324\340\211\357(!*\347\350\363" + "\364\276)5\361\26\250\316\27\33\330G\266\71\316\217N\273H\305\253\310\370\364\30#\247&\200;\264\360\200P\254\35\317P;t\217\203?H\31\316\61\327\22\333\307u\315^\352\347\204\314\21A;@\335\207d\262\244\260\70\320\363\365\261\323\256{V\316\230\300n\16\230wZ\235\260\243{\37\301\351uc\273\207\342|\371?vn\25Vq5x\34\"\217\30\261\240\5\177\217z\317\33r\371\212\371(\361`\247G\263.\323|\332\252\63\322sy\\~<\366\347\70*\274F3\323\225\306.\375\235W\275\374\367\317\277\24[ \215+\215xj\37\250\241\313\377\364\227xh\"\330\354I\4?\307)\270\70\346G0\317\365\352\351\231\274(\354\256\66\36\322\335\71\236s\302k\355\211\66Rj\231\342\353\23\35\32y\177\200\232\222w\324\2 '\372}\300\24\242&\307\234\257N(69\303\234\30kW\330:I.G\203\23#w;\27r\275\64I\200\307\303K8\234\217w\324\313]\365\f\242\62l\20;o\323\336\231\33m\237\25\333'\306\335\346\337V\260\327K\210MY\273\316\27\313]\304}\232\23b\1\226\366e\376\372\t\313+\220\256\0\301\236\355\325\343l\377\n!L\256.\270\62=\301" + ")~;\34\26OOR\205\315\306\222\21\212OOR\335\324\22\377\372\206:3\200\336_ q\362:\4)\24\264_\26[\247\260\223\311\b\32\361N\361\251\274\256h\317\\<=ER\326>H\236?%\203\254\363\33\66\331\367Y\27\27\236{Cc\3\24\322\22\16\324\353]\265\237<7\244\335\7\346\177z?\376\357\237\213'(\273\344\7\372\70\25\245\274|\201\315\235hF\356-\362Xy*Wa\247S\304B\277\4\236^\26\233\247\36\"J\216\223\274u\4y\t\253`\"\320\210\237\311\340\331>\354dLL\240\23\243s)\247.8`\342\366i\362\21K\263\263V\37\274\272\234\r&\303\267\305\372\231\206\347\241XS\25\331\325\237W\276E\347o\211l\304\230)\255\th\274\302_\242\212\315\63\224w\354\347\310\16\6\341hX\3\232\345#i\267r\210\352\377x#\361\255X\313=cl\267\333\25)}\215%\360\303\256/_\201\7\231\361\326\270w:\7\366\374\36\377^4\16\66dW\355J\200\341\214\340\340\236\340\62,\252\20\245\211\36\305Y!\r`\344\252\25\64\256\214E\26\225\213\205\t\202\201o\316\fX\1s\306\21\216\r\371}\361\314\60\202\356\231\211\6\202\233\33c!\236\301\262\206" + "\331\366w\2\256\233$\34Kb\306\2\326\25T\341\273\301\207\23\257\223<=\357qe\34\252\342\63\26s\273\342\223\63\256r\4vr\333:\343\371_Jm\301\2cr\303\rX\346Z\337\252\376\365\65\310\24G\371\362\334\355?1\336s\6{\276\367\312JnZ(\213\275\323\340\233c\n\177\376\233\333\203\35\60\355}~g\6C\270c!X\245%A\300d\346\31\354\202\207\371\202b4`$\335\212\222\326';\277\356\214w\256\360\n-\b\376u\16\241\306\306G\311\246\354\221\353\221qt\245ky\226\317y\2\64\200\200\70 \241O\326\353\n\\\343y\27~\220/\24\245\16P\256e\5EX\16j\246]\324\60\b\351\226\302\315;\263\224\25\357X.\360\25\263\357]\366\377\332\66\317\276Fre\215\367\7\230\300\62\201\60\341\347\71\71y6'^M\16\33\300\213\275\300\231w\2\67\266\216\333-N\207\1\317\247\277\377G\325\262\315\275w\3\226\324j\305R\251\352y\252\223\342\336\262g\270s\213Y^\251\237\322\237\61\203\222\314\37\23" + "\"\262\301\221\62Sj\314M\3YA\336\207\270\204q1\351H\5\f\"\310\206\257\243&z\24\313Z<<\22\365t.\212\350\62\236\1\225\\\241\357X\376j\306\265L\16\313w\216\331\352\306\63\326J\375}Z\212\315\35\355\204\6\210\371]S\31\37\333\330\335\354~L3\310\336\327&\4\346\253\240\206+\222\71l\201\16\7\257\244j'\331\266\245i\336\222\61\265\245\224\26\327R\202}\343\fv\225\373\220\267W*\307z\262\tS\257\353\315\314\336u?\211\242S\1`T\317CG 1\1\217!\v\b}\246N\371+\3\200\276HN]\216A\216\306w\245\214\t\363*\364\302Y\25\70\247\63\71:v\245`>\260\312~|\351\313\210\\\374\212\367\215d63\267\222\374\344Xd\233\354\337\270\177\30H\356\222\314\215\1\327\371J\224\231\346\315\302\204\377\260@\240=\344\203Lp\306\27d\310w\336\236\274\371)\263\t\364\t\373\341\242\207\301\265\207\313q\275\354\243\235\67\25.z\203E35\301\64\327\307P`=\245\343\304\313\337\264\234\270\30K\16\264\356\5#\304\20:?\27$\34\201T\26#\25$\237v\207\22\355\306\317A\306R\357k\6x\255`\204\251\20&\213e\275\1\227" + "\214zo9x\236>\265r\332m\rB\367H\205\250VO{b\204\220\274v>\367\271VJ\346\36\6%\332\206\344X\27\312\70R\243\247A\v\334\66\256C\246\36\304t\323]\305\273]n\300\212\264X\351\254\345\242\226K\244\275s\v\221\63\362\362\303\\\250t\204\350\266\377w\205Cs\363\230o~\226\257\236\217\302e\364\277\367\235,\262H\204\357;0\322\204\245\356\356?\37\276|~\230x\227\257\364\30\61\323\337\304G\337\211\351a\356\70\202\373\371)\316f\262Hx;G\346P\201\62\312\267\366\363\206+B/\344\272C$N\324x\367\v\327\67\17\275\350w\351\206\274\0\365\67\323\362\272\251\270C\35y\266\206\260RC\266\273\f\271lc_\35\232Cp\317\256\273\267r\t\204\364\332\261\212\210\253\331A:Z\321\260b\26\201\5\363\234\371\375\0\60\310\252\354\207\217\316\310\332\33JF\256fs\177!p\374\240o[~p\232\353(\177\367c\266)\323c(We\tI\335?\230b\274=\21\324\245{\214]/\221\305\235\203\202\65\230p&\355\27\363\b\307R\266\306\301\274\364}\231\370B:\352\334\226Y\235\224X\250-s\")(\323.\375\16\221\177\274,2\333c\32&\foYv" + "\324\26\321\210\24\17a \214Y\266\303\306\236\177\237\335;\250\224\70\30/\260c\26\266@\332\300\n\331\24@\250\325\265\373\340y9\233\62\317Zh\306\366\1\215UL\246m\f]\227QB\246p\227X\335\354\341\3\71\330\362\344X\6R?\243t\255\254\320\252GF\367LV,\375\177,}\266\65\350\177\363\275\340\230|\314\350\222\310\354\f\250\244\350\n~\373\276\354\v_\314n\222\231\351&\275?\0Z\254Ui\6\270K\23\354\276\303%a,\21\374\370\333\213\250r\2\67B8\365\377\365\355\337y\227%\207\16\344\347\223\353\311dL11\274}\321\"j\335:d7\264/\215\305S\360\360\245\f\240\354\26\277\203@b\227\304\60/\362\263\63\255\335k`\347\62\24nu|\243\205z\26.\\\357\257\270r\274\336\177\341f\314\b>\206\250\t\262o\"JN/\"(\301\n\7/\377!z?\333\30\274|qp\374\213v\213\326%r\\\7e\316\241\34\210Vc\200\21\366\314\66\311V\205\244\0C\221\365\311sy\372\370\227+\360nU\246\332\362\351B\235Kk\224\322\36ot\354x05c!\246*\27\246\353\312vU4B\357\321\342\224\v\250fJ?\222f\355\214\33\251\331\b?\357\17\34\377\303_\337" + "\356\224h\357\32\227\65\314\21\204\356\211M\241^\345\337\304\61x\371\350\251\350}Q\264\272FVE&3z\351\"\27\207\301\36\370J\0\25\273\342\233sj\330\371\66\356\317\61;^f\230\237>9\3\223>\33\b\371\222\5\65(\362\253\326\314?I\24\352\234\352Xt\25v\307\240h#\n\20]B\204\26\34\203M\t\221\5\257\215\177\277\207\bL\334i\b\352\315\341F\27\23'x\21\232\255\227\70\320\335\256b\23\240N\2\221Z\207\322\257KFt\231\377\350\353\345\235>\222t-\226N\376!\27\341\65V\240\276^\206\341\345 T\214\61u\354,\17g\v#OY\35\355\231\214z^\2\215\305)V\33/\25\267\304\212\250\21k\224m\322\17\213\300\334\v\256\376\230\65\207\346\246\322\322\273{x\315?|\243g\332[\304S\266\356\r\345\362F:Y\352{\303\262\352Z\267N\245e\255\2\60,\225\235HA$!\324\62iv\364\272\307\21>\f\215\233\201T\223:8a\234-\207\325aAp,g4\263\230\60\253\335\341\323\321\323\203\247\207\22\270\7Cw\352d\352&\340\211\247\216\21\346-\234\316\267" + "\331g)#_{k\210w\23x\345\371\233\275%1\\\315\203pK\303=v\206\272\377\322\375\252K\223\202F\26\366\t\376\242\302W\24\311\64D\35\62E\b\7\227\335\33\342}r{\224\364{F\33SE,A\232\71\5\3*\\\355\307/\376\376\267a8o\306\354\304\337\263?\360\210\231\352\316$\5Q\216\232\277FQ\357\256\347\354\300\231]\222m_\217\271\213a\253\355\351\334H}\36\342(\322\245\1\21[\313\254I\316uH\310\254DN\304\217_}\376\343\327)n\212\311\213#\213\302[\204\246\1d\217\274\300\202c\\zi\317\33T\270\320 SB=o(\315\25:\314k\311\220y\211\0\352y#\202\353m\350G*D\263\204\265\362\334 \246\306\223\304\332u\344\33\247\30\304\35\236\315\274\67\213U\363\270E\301\274\345\\\362\213\215\315\350\31|\v\177o\246\"\245\225\4\233_\365\226\217\351>\317\v6e\312\325\2\364\257\27}\263\264\227\36F\300\227w%\240\23FSk\223i\307s\203\212`\3\212]C\26\277A|\320\27\222\221\272\367nq\241;k!\177c\350'\313\363>lK&\357\v.\201\34\330\320\356\32\5\230\360\242E\256m\r\345GR\202\276\232\323\331\314]L\343\371\340\240" + "*H\243e\250n\302\26\316|O(\341u\22\215\336(\377\271s(\224\326U\351\271IH\3'd\267\370\345)\223\236\201\0\211&U\260\310i\214\305\330\242\254,\261Zi3\312\322\61\227\222\221\177\351\321\317\70M\32\224\324?\n\310\251\35\v\374\375L\211\4\1(\255\345\6\322 \211\20\325Z\7.a\30,\351y\31r\275\363\\\267\232\206j\26\361_\324z\236\317iSf\255\273JHQ9+\303%\32\265$\212\200\221p\266\246zk\300\354g>\306\35\242$).\n\31\31\61\"\202\207\354\250\64\365\251\304h;\6}\342J6\340I1mZ}\303\322\3\257\31\222\324\365\23\177\353\354\311\220N{\307S^\371k\nv\314v\355\200\30\177\"XMM\207Y\350#\257\331\237\225B\275\60S\350)o4\r\341\332\344\30\211|\204<\371\304{\322\275\361>\331\344i\230G\367\373g\f\345G\303\0\236ca.\371x\"\7\204\1#\206Zp\343\62?\267\313\"\321\242\67-\233\"\245\30\321\355\353%\35rh\205K(u\323\362\262\372\232\334rK\236\"f\316Z\35\222\256\261K\335\16\235-l\312\257\266|S\305\227\21\346.\354#\246\373l\344\223\256\\\323eq/tIG\21\257bNP\352X\2Vh\322\27\205\203Vyh" + "\277\362Qv\225\\t\244\302-\230\261\24\17\271\251\364G\220c~-\20\302\342\274S \332\r\242\372\274@\34\305\300\30\312\246\253\60\346\214?W\363\33\61\237\342W\244\360.|-\350\23\272\327\36\1^wo\31\315\226\355(\23'sW)\3\373w\225<\357\364\377\327\21m\266\222\n\317J\251\211Vw#\246\n\255\200\275\61\211\307\304\272\372\257\314/KF]\23\303tku\202\21\355*|\312\317\f\226z`\312\322\66I\205\312\245o\21,\214C\303\323\314+\353\312b>\6\201\363\221\62Ut\241nw\31\365\302\262\326\331\237\206\355\70\314\332\16\303-\307v:\356G1\217\354\62\304x\227\61\7\357\201\345\"3`I3\211e\370\32\323\224\365\254\334\220F\263O^\235\244f\206n\336\310\347\277\323e\203\260\357Z\261\304cc\26\314hz\222Z\327\362\214\265'\367,\337}<\261\323\345\350\"\215\366\303\207Q\327\311\71\242e\25\244\265\352\256T:\221A\262\342\351\f/\3\17\226\30\6\274ch9\b\251\300T7w\vf6#X \225\363\376\67\32-)\272\27v\264\36ero\344|\f[\355\6\177\375\350\355\310\64Z\35\317lCy\216Cz\24S\233\243\374lZ\6\213=\37aN\273" + "I\262\26\215u\220\315\335\24:\207\235\337\362\262\275\320\355\64\312#\4\357\313Ut\240\240(\302\344F\210\273\334(\201L\253\264\16Q\334\367\201\213\226\2\203\177=zy\360\313\301\241j5\212\3\212c\264\5\337\266\337\270\202\217G\357\236\217\270\222?\232%\31\331\267\33j\351\313o\23\361\277\243\254\242y\256\205g\31\253\275?|\317\61\33\63\230\365J\246(\242\33\177O\345\22>\223\306\230\65\71O\221\30\314\335\330\273\2\361\273\364\365\232q\277\251'de\355\226\362\270\331\277K\213k6\212\62\273m\330\325\334\276x\320\342[\301\242\367m\257\237\324kb\227\36F\323*\206\234\233MV\257MG1I\343I\213\204Z\267\257K\34\324\210W\306\334\25\255\203VE\227r\233\222\24\355g\266>H\246<\33,\231\354\201\36\246\350\212\332&\227L\355_\374y\276*\21l \306BP\211\263\5\304\222[\212\352\363O\304\336\325V.\275\31\35f9.\20\364\1/\320\236\300\242\326f\331\275X\364\336\346\1s\356_\310\215\274\210\26c\20\243RN\245\6e\34\276q~\310Q*H\301Q[\243d\232\231\67\213\215\245\22a\326p\345)\344A" + "\241\372\253@u\233\213\300'\246\317\261^\305\321)V\354\322W\263U|\362\35\3\321J8\17\365\256\64K/Q\251\274yL\207\316vh\30Z\364\263\245>bh\233\66\265\341\f[\337\365\63r\32\245\336\273\366\235\207\ru\264\334\254\275\364a\315p\252F4`\203n6cJ.\367^\202\1\233\0\70Y\351@C\2\231\321\322\204\26\276@>\266\215\355\b\275\357AX\24\b*\0\265\61\t44\205\324\325\330\4:\350\304j\27\245\v\220%^\22\364\364Fp\327\70\16\62 \305\351Z\272\333\205\243\326\335\307\37\61n):\354\264\345\213\206\22\376\32} x&\242\373\254\351\256eL\t\205\354\17#\30oN\261\332\17\63/;\325c\201\\9\206\306\200\246\356r\306,\230\274\205\207v\221\216\33\224\314c\200\235\257\364`\275D\250\230\253\346\253\222\356\233\243U\201b\332=N\351z\211\202\230\327\252\274\236\20\320\223\62]\264\26q\230\242'R1#\221\216r\261}2\r\213\376\377?\264-[5\376\376\314\263\22\253\356\23\0\261\314\33+\264VA\342\212\275\264^0\36_kb\350\332\350z\217\360\16\2\233\303\210\vYQ\243\200\vD\324l\374P\16\1\n\":^CS_\324\271j" + "\267\23\343.\250\210\323\357\70$\253O\26F\21\377JM\355\306\20\274\24\300\253\\i\372\354\1I}^\321\320-fO-\311\245\350\"\333$\253\323X\273\263J\235U^\334*\230\f\177-\324\177Ce\254n\275\no\337\245\210\376b\220\214\\\356{h\5?s\352\305\236\312NU\256\225\265\262\315on\237\234\231\27\252\33w*\334\251LtW;GO\264\61\210x$\363Gs!\5\302Q\376\25\25\\\341Q\222\63j>\305\267Z\220\237\374\61\255y\333\364MU\253\211\243\316\362\331[Z$#\250\266:/\327P\347;\277\343\61\v\7\375?\214\33\352\363\333\354!\305\225Cg\205\202\345N\21\67\367U\352iw\235\244N\366\306n\n\16[\342R\b\342\357\27B4^\351\216\335\346K\315\316\234\240\213o\262\7\204_\304\213\241\367<\262\220G\271\302U]\261df\357\36\71F\17\203w\224\373\30\311\"0&>\331\71\342DJ\240\307c\262] ht8\322\200\177\205\267\243\232\345VA\7\335\310K/\213*\267x\206\315#\17\t\243\37\5mm\256>\230\\\241\235\264\304\356\1\303\376\"\"\215^*\241P7\216\251\204O\23#\247\231\262\205\334\325\361\33\207\331LF\323q\376\327*\217\341\17Otm" + "\366b\374\264k\245\242,\326~\363x\32\320^\b\332\30\275d\270\316\351\251t\361\261 H\366Nn\300\71\365\274\30gZ\244he\36-\303\307\267\257\227+X\17\32)'\365\267\227\257\372\207\7\277\376={\20\253\354\267\215\6hlo\242\264pC\325C\331\254\207\71\355%.\254\300\366Q\323\304\n\31\272\261\321U\265\363\261\325\345\16\212\5h\310Y\r`!\263h*}a\33\275\253\32K\307P\222\31\257h\326\f\200]A\207;\307B\37\343\327\262\367\217\375\247\231\267\203bk\244\215\247\360\324`w*\254>*\24o\270\303(Q3\214\177\65Z\331\333\346Q9\305\37\331\23\241\71\262\1-g\301bQ\324\267\254\304B\334w\342\327\224\352\323(\320[\307\25 \246VNZ\222\336\217\337\254\0 \203\66u\361\265\234\327\223\276E\6\236\364\177\315\221\366\23\327\70h\356\223\274\f\272\322\262\373'o\276\375^\37\177\v<\256\305\230\346\225\227.K\247\70\257xi\365\261\303\211\277\222\34\b-[Rz\"\274\276\314\266N\260@\263['\241\4\226\271q\242}]\266p\373\337^(K\257\213&\312\36\257\345\t.b\321?\20n\352\20\66?\376\224m\220\251\365\1" + "\315\255\17\356\352J\204\305\7\30\17-\332\366\207\34\264\224;\367\303\34\30(|\344\t\27\34\6>\236\254\353}\221m\361\233\367\276\373\216\212@\362\264\373?", + 13082, + 21405, + (const Bit8u*)"tR\3\203\245@\34\357\265\266\255\332m\246\232\352\336K\207\265\355p\266m3\327\267[~\237\233\326\314\315\374\360W\251\\mZ9\302\260\31\305\4\275\26\354\60X\326\246\226u\336)\276\320\63\256=\233\275\70_w\0q\32\70\340\264\360\320\241Y\326\21\20\206q\216,\321\316@o\n\177\341,\203\336\227\316+\276Wt\213\201\344V\303\254\333\320\210E\272\335\326\21\325\225\312\273\24Woh:\307QK\201w\345\324\260Z\256\276s-G\334\270\305\270\303e\300\235m\200\256]\316\272\367\32)\367\245\316\271\357\232h\367w\5\302\267\200\277wi\374\254\252z%\265\355\212W_O\325\312\36\223Z\\\275\316x\27\25\350\215\336f=\343.\345=\316p\336'\222\366\211<\336\257-G~s\205\260\254\213>[&\371z~\326\37\253\334\325\2\376\242\254\370\327\f\273\346P\307\177m\2\377\235\5\375\317\6\353\377\260)\253\215\v\b\215v\350F\376\6HU\202\342\214\24t\220\273\nh\266\36\247j\330\245\207\2\201R\v\202\221FL\304\350]\24\304\250\324\246L\256.k\310\21\345\25 X\321\251\345N\24\330\31!x@\212\301\273<)\370\223" + "\277\213~\204\v\203\221\353\33\71bs\213Q\326A\357\6\354\330d\331-\312Z\347\226\267\351\260\0\313n\363\263r\305\231\365\375\332\307\71\244.\342[\372\332\327\63^\205\25\357c\305\232\3pX\325\0B\266\223\nGt.\234-\243\303\333iSe\24>\315\b\341\33R\f?\347I\341\257\275`\236`\252\32\345\25\24)QM!QsvG\357qn\303M\376\265\206\360\24\244%\212\250a)\22Fz\306\365\324\31\17\204i\355T\251\366\200\36]\344A4,\300h\26\261\221)R\321\35\300EO!\35\275g\371\350'\207\342\202^!\256\352\23\343\326N)f\246\262qv\257\224j\334\247k\347\204\241s\261\221O\307W\213\370\370N\1\212\37j8\226\207\343Z{\367] \316\nj\374\"C(\361\17\222<\34\363\330`@R\325\2\223\366r6\341\32\251\344b3\227\364W\322\361\35\225O\306kP2\333\222\346\223<\34\226\276\216d\377\23b\335}\251ck7`\227\346(`\5\22!\331;M!\20&\277\60}\254\71ETp\316\361\70\236\336\353\364\336;`\357\275\373y\356{\333\347\271O\22\205)\311\274\177X\331\311~\312z\326Z{\377\366,p\26\304o\337\4\272\245B\307\320`\275U$\260\210\324.\271," + "\203\314Gp!\251P\5%\r\253X\315\17%\t\204\343\304\320`L\n\320j\230\t\r!4H\26^s\341B\337\360\315\302\260k\230-\214K\\\341*\315\27\246\30\241p\35\211\205[\330\f\243\267p\327\221,<\253\257\265\36\264\242#\205\213^\275nz\27\274\345\65E\222FE\36\221\237\344\360o\267\363\324w\316\24[Lvq\305L\210/\276\335\t\300\311\213\237\344\340)Zc\334\326\205&q\361B\204*\216\207\331_\337I\300JNK8\241\374\325\260\211uc\250\342M\305\300\30\374\344\341\253\302\0\36\353'\302\370\327\351\210\276\252\370\300\313jt\262\370\202AR\251\336K6XW\25\262\224\261v\321\262\346\324\323\24[jo\342JL\32V\221\232\337g\275g\232*)\n\240\230\207\37\302w\300k\245W\202\360\0\4\212\65\177\213\61\340/\210t\332\200\215D\227\336\362\62\245\211!T\232\36\274\221U\34\270t_\246\340\377l\351\243\67\271\31'\303g\25\241\244d\236\316\370\253\225\263ni\27\223\63]#c\6\23\64\330P#\300\65\332}\375U\353\206\346\25\234M\233/\263\344\7\223\314\23\225\342Z\317\311\257\267e<\323\223\3Jk~8\363\262\234\177\64" + "\63<.?\236\271\62!?\231y \347\237\316|$\347\317B\266\253U>\7(NQ\263\204\314\315\326]\346g_\32\21'\31\363\31i\266\353\362\210\333>~j6\21\61\243\224\71\r\"\374]Yg\225\34=\333\237\277\27J\217\337G\351\t\\RT\243\244\263#47;)\363\263\317\24a\366\313\244\70\347\323%\344\326u5A\236\21\253%\356\270\271\16\7?\27u\ns\302eq\356\225Q3\276\33:#\315]\34\31s\375M\214s\23\0(\5V7\225\27\315\335\253\242\347>\254a\346\211j4\357k \263\t\235\360\346;k\370y\272Z\230\347\252\304\371\4\210B\25\206\66\317+\300\64\363\3\215\4\364\261\215\212\23d\367_d%\33\256\264\311\266\306Y\30\232\0lru\220\237\177\62,\314\177\221\26\213\27T\23\223\215\211\371o\362D\234\30\35\373\253d]\251\274\33*\343i\215\23\301\266\230\344\241\325V&\24D\250\215\\\360\311x!\330\255O\306B(-,p\242\371\322G\360\204\216\364\63l-\364\322\364\302\253\210Y\270\300\240\205\253\230\\x\350\301\v\317\376K-|\225b\27\353\335\334\242\337\305g\377#\24\63y\261\370v\356\371bD\351\214\366\241[\327\25or\21\7Z\245" + "\305\67X\256\331\216\253A2\270\305\313\16~1\347\24\26'\253\304\305\33\272\344P\213\367\32\330\305'\215\0\275\344\342\373 ;\213_\327\326[\223\304R\243\3/\205\234\324\22[\305\301\227\231\363C3g\227;N\264\370c\222\213V\335L\250\5!?\231w\341%9\300.\275)sK\232\203_\32\205nUw_wS\232\307e\337\0\363\255\224\346\267\36\311\363y\4\206\0\250\270\203q\"\320\32\223\334\264\32dB\1\204Z\311\254\n\\\31\244\226\256\272\331\245\33an\351\336m~\331yG\\\16'\272\257\367\264\320\250\231\301\265\320I\225\210I*,>\363%\232\321\205@\360\5\221\311\300\216\313=IzYM1\313\3^\264<\301\222\313\67e\274\374^3\365}`\324`\325\225F\37\237m\23V\302Aq\351j\240<\273@7\271\224\61\37\326\363\270\"\246\360\212\"\203\257)g\351\262\341\245\62\257\364@\246\315e\362Y\351s\320\320;\6z\210\240\177d\366?\370\327w\20\365}=fW\206yneL\340W&Y\220\224\177\212\237\374_/\264\66\n\255\265\357k\271\356?\21\62\5\310g\347&\310\262\317\262\23\375\7+\17\362\62Pw\356\341\312{9\371\321\312\67\362\370c\370" + "\66!,\367\344\305\325@\312Dv\257\226\260\21\63\5\257v\247\205UF\366\330D\256\23\310\352\224\203_\275\353\204U\306\300*v\342$s\253\317I~\365\323\16a\365\353Vq\255\241\305\210\66\252\217xr\355\245v\302\23'\302\21&\24F(B\256u7\341\65\336I\255\251U\334\332p\220_\273\34\23\326\362m\342\332d\300\340\315DSL\263\225j\16X\204\7\26\21\326\256\67\211k\267\243\347\370\356\201\372\63(N\320\70\266v\17\323k\357\63\314:\301\242u7G\346\71\234\25\240\3<\273\336&s\353\61\221\377>\300\n\353|\17d%\2\f\327\343\340\377\326\7\306'\354\347,\rDO\233\216\310\256Z\0\n?\365\375c?\373\35eJ\215\301V\215\246\177\212\220\347\376)\202\20\251\327v\322\21\355s\32<\t\236\273L\6\201\63\62\320\235\271\303\310+\330RF\363\372u\232^\377\220c6\234,\332h\211\222\33\221\377\340\r\6\274\277\263\233\335\20\21\267\321\347\340\67\262Na\343Z\225\270q\257\372\371\306s\325\7N\34^S\261" + "\270\215\226P\310^\303\233u\260\345\65\323\211\227\tvV\371?P\274\212|S\233\356\210\216\212\315\b\342\67i\4\314\252\17N\264\217\6\v\v\203'm\362,\343\262\203\361\346\33\347\362Oi\264\327L{h\360/\352\360\211\vg%\310)\300n\16%\4\370)~\342\62<\234\337\246=i\200\261\302\32\302\223\302Z\302z\16\315\363\232\7\316k\21v\363R\202\203\237<\374-lN\230\bJ\352@\330|L\204l\303\317\247\271-\247\337\210\36\272j\263h\313\7\204\253P\232\354\266C\311V(Mm\241\60\267\225r\362OS\320e{\320\311e\332\253\234\b\266T\232\336R\21\263\245\62hK\305\344\326\353\21\274u\211\244\266.Q\354\326T7\267uO\346\267\336K\t\333NE\334nV\317\270v\33;\222\333\311\321\61i{4\353p[\263\201\241x\324\366\327)\23\227\254\226h\262\313a\247\346\22\265\323\222\340v:T~\247\67-\354\274\251\353\220.m\311\235Q\201\223vki\346\357\354\313\214?U\266\211\226\340\327\61Vjo6\32J\327\305\t%\315\204\24\204\322\344yMb\232\337v\203\357\2g8\223)\370\361\7c\274\33N\321\360\305\354\n.\264\373\232\7:f\370\342\335" + "Q\326\320)0s\272/\336}\267C\334\275\37\252\350\324\356\213f\302\320);pP{.\271,\264\36{\317\b\361\5`\207\262\375\61\35\267\61\230\326\305\336\363\33\265\330\213\222\374^<\364d/\243J\342\336u)\332\327}\376\202\375:\222\360\376\r\344\257\1\344s\34|\361\360\273\271\261Ib\356H\331\fD\316\315@\232\332\357\nr\373\264\213\337O{*QZ\202\31\342\22\366\207\30q?+\200\251\2\2 \301\25\224\27\356O\216\321\373\327G\310\375\273~\274\377\350mj\377\203\26v\377\363$wP\323\307gSpb\275-~r\247\367\300w\26\22s\20\24\221\326\223< \33\336\224\16\344\306\67\354\204\36\37h\3\321\276K\346\245\201\335\34Vz\1\257\231\236\214\23\357^7\260>\311\204\336E\350:Y\274\71\215\17F\257\361\7\327\246\214y\226u\22\206r\204I\3\207\246N\1KS\254\61\241\200A\237M\5\370\203[^\341\340\323.\361\260\276\265w\177\250=\332\27\204\215I\300\314\241\247\305\325h3\332\347\341%\\\326m\220\360!U\31\376\6sH\"\344\371\220D\314\340\200v!2}\17\71N\\\36\61\366\220\231\320e\204F\214\336\37&r&[Y+\26x\30" + " }U\7\276h:\254\303\227\275\260\235\rse0\364{\215\207\261\312\30aA\315\16\65\302\31'\34U\264\352dB\16\204\252\240 \347\362\f\323\7\"\356\266\316O\25\300O\353\245m\204\4\222\207S\325\204\313\222\223~\177^\304e\207\245fb\207\37\327\322\207_\326\63G\316:\4\256\215|\232\302`\7(\260\3,Xv\16\354\36\177T_%\34\325W\213G\356\32x\201~\270=jn$|\345\240\365w0\245vD~\37pBj\324\21\311\332<\v\206$F\33g\367\264\32'2\257\304\244\64\255\252L(\203\320+\220\261yf\257(\254u\323\v\311a\\P\6\315\\\334z\22\177\21\276\265\374\35\274\66|\233:\222|0X\251\362\254\332\34Ve\30j\27\f\265\333\364f\322Q\277\313\355\261)#\5\324\16\63wE\374d\332\\\r\247\300\312\301\7\34\62\r\251\62\340\220\21TE\367\254G\323\343\371\233GO\306s\354\321'\314\243\243\257\307e\1\212#Bqz\217\335\246\275\21x\215\226\216\375MQ`\256\206\372\70Q[\27\223\32h\265\236\t\325\"TG\346\33p\266\221:\356\224a\337Z\361\223\272h\37\v\34\301j(y\34\305\204t\234\"h\273\373W\366x0j\336\370\376\277\3\236p[_4\374Gg" + "\247\343lH<\236\354\60\256^*\366\274Z\252\361\325\16\325\r\222\307we|\374\"E\25\63^\366\244\332\317\235x\303\374I[\240r\301\4;<\267\277\2J\261Y\371\321\t\251\\~|\302^\32\71+\253\215,q'\311;\374\311\233\267\205\223\261\33\360\342\33\177\270\373\200\322\323\0d\6J\217\0\324\220\335\237\317\235G}\216T\24\237L9\250\223\17\234\206\314\236\326\67\20\222\16h\373\v>\331eo\353\243}~#Z\301c{S9\235\342N\203m\374)c\336\61\331\37\61+N\245b\30\376|\360\2\370g\0\376\nu\252\312\334\326T\216?}#\177\216oHf\240\206\220Ns\265\4<\337\34\213\23\235]1\270\243VcL\250\23\241.\362\364\226\33\357w\371\250\323\373\315\20\372\377\30\265\252\265F\222(\214;\201I\350\340\220\16\251\366F:\351`\343\310\307\340.a\334]\326\335\335\257\326\256\326\343n\275\357\260\327\373<{*\25\31\253|\313\f\304Z\253N\375v\2\354t\4\330\311\242\374\365\342\220\352\255[\0*\4\212\66?\316\271\336\236J\344e\253\71\257P\305{Gj\4\257\273'G\357\336i;\220\257\352=\211\253\313\346\235\253e\275\313\365" + "\212w\253n\304\353i\260/.\347(\236V\224\205\tV\33\250\t_G\vE\316\b\336Kv|\351\177\335\250\6:\1\365K\233\32\311{\23\311\336\27\271\34\264/S\315\256\7=\321\242\30\310C\354\300\23\24\342}\267K\364\fK\276:Q\366uK\212O\341\260\253\207#\23\370\246\255,X\360&\254\273h\321\232o\202\21|\247\254\271\1\365-1\262o\307J\270\203\301jK\363]d\254\224\f4\227_\302\266\364\310n\302\315B\370\354\367\275\354\236\330\271\375\345\222{\347\216\357-w^-)\213\313\364Z\177L\364\373\353\30\344\357\352\340=f\233_\260\v~Mg\375\307\221\350_\342$\377\306\220\354\277\350P\374\367WU\377\233\260d\255\34\0w\240\261\262Z\vX\252j\236\357\304vt\325c\206M\301\211Q\323\343{\0Y-\212\34@\246\21x,T\212\334\374\374\3\202\277)\n\324\305\236\6\314\5\\\377\24\317Oc\32\373\252\273\nJ\4S\16\241\317\371\63\330\70;\264y4u\206\330g\f\317_8\365]6\340\334\21\3\23\30\250n\23<\31\4\223\335\16*a\20M\265r\375\355X%\300\311\2\247[\304\300\232U\n\34\60r\340\240S\r\334h-H\213\307Z\37\64o%\4\356\340d\34" + "\27\34\v\17\26\352\n\377iP\207\222\353\204$\275\65W\33\201\207V\31\336S\2\357v\251\360~.\\\t\266\237\264?\21\260\224\16\27\354iC\301\301~.8~\204\17.u\343E\23\334m\1\336Z\21\203\217\34\260\350\317\301\242\277\0\213~\17\26\375\301\320l\267\375B\363\210\7\71\203o\331:\265P\357\314\254\271H}p5\b\223;\340*\17\270\nZhG\370\362\322\241\30\32?.\301\331e\0W\5\256Z\205\253/\rDh\271\241B\vy\32\257\226\321\322'\267\331\17\26w\244_7\206\24bN\340\32\200\237Mt\247\3\375\7].\t\254\vmx\215\264\322\206z}\2\234\221.\206\356Y\v\241\22\rrW\204u,\234\211[\7\211\345\b[6Qxp\215\v\213\26>\254c\314\221\340\251\fO\25x[\205\217\257\314\376\223\243\314\360\351a6\274\246\212\377c\362\213\352+|mL\200\247O\200l\370a%\n\277R\315E\252\252\370\210\271F\210 \27\33\221\365\307}T\304\65\255FN9\310\315\330\"\33\265#\221\253\365\4d)@I\22Oa\261\265\304\326\256\332\376:\241\276\23\27D\344u;\33\255\350\26\243-\256\247\v\2\364\235\305\204\314\240\200(B\35f\254R\215\366T\217D\25\225D" + "+\230\204Me\246\"\252i\370f\344\350\61\235L\337\23\31\337'7\20\372\344e\236\373\344>\307\177\362\226\220\367\254\321\5Y\216\256)J\364<\247Fo\210\4l\201\63\234\261:\261\2:\224RE\251\342cL\25\212\261\65\\L\255\346c\223\265\266\35\27\340\2\370oM\214\315\265J?/X\345\330\246I\211]kRc\217*\v!a\207\63\366v]\203\26g\352\33\313\244vE\tC\200\b\321Y~\313!\376`\267I \270H9\263\0:e\215\373\200\30\325tR\23\64\367b\25\342jeNdX\341p\246\347\66\20w\30|\263q\247[\214\317\f(\36\263\32_\271H.\267\221Z\32U@2\24\346\304cGf\211\263_\20,\264\333\215\357sl\374.\312\325h\374\365\31\71\321\70[\30\252b\v,\301\324\tZB\343E\0\346\346\226\247E:\331\16\234n\333\363\356\35`bPH\254[\331\304a\213\2')E\376\324\265V\272\70\334\356J\334\233\20r\236m\254\215\346\177\23\257\267\261\211w:\305d\225CJ6 9\331\306\25\t\262L\363\21\66h\245O,4\245\65\202\362:\f\262(\301S\32&\300\326\252\207\200\37\311V\310F\311^+J\212\203\\r|\200O\316\63\266$|/!y\276\213M^1\211\311\233G\244\344\3]^o" + "\202~\371\20\364\313\35\205r6C\376\321\321\257%\337\251\70U8V13)\234\62e\321\205\24\17\241Y\233K\4`\221R\356\t95\255+\251\205\223\367^\335.4/S{\242\63u\35qZ\352\35Aj\247E\361iWW\345\245\364\61k\325\255\364\234\255\372vz\255\263\346Nz\327R{7}\310\324\335K_i\257\317yEJc2}\307%\244_\233d3\225\323b\246\305)e:g\356d\330\331yh\244\216\253\31E/\24\21%\232\372bvB\370\342\270\273\30\343S\277%\220\231r\211\231\323H\202G\322\335\237P_\235*QUf\225\253\60\321\64T\346\322\16\6\"x\220\341\227 \35\335\324O\300\271\334l\346\216V\252T3-\375\315\274\333/d\233\35l\266\243E\314\16\216IY~F\316\216\315\346\243\34\341\217\361\30\202\233%\b\222\262\327p\302\361:\247\346o7\273\341\251\264\325\rOq\\\232\32\214]\343\7\323~z\360:t\303+m\342\340\63\7.l\203\37s\311\203\37sv\16\71\355\253\26\260!\240\5t\254]O\274\376ZzH\326D\210D\351\302v\371_W\232\r\b\210\240\305\f\251[\32+\273#\201\236\250\204'\376x#.\f\365*ks\214e\244\374zl\227[e\207.5QC\17.\362C\317\317\323\303\256\263:\"\33\366_F\303\334Ui\270\213\225\207\217\bFlq\320M\311Y\205\245`\244[\201\221\16\32\321\7\30\254\65XKj*\303\347\325\353\303\17\65\37li2zB\17\241\355\270)\326\223.\365gq,\242G\305\341\267v4\342vH#\rNy$(\231\334\326\256\362P\24\2\233\37\211\70h(\237\2\224O\21\2\33A\36H\220\3\62\344\202\5FG\272<\365:\315g}\316\310\21\206\31" + "\311t\262#\267Y\16\274\f\6^\220\350\221\27H\30\365\212\342(\250\333\243*\202\256|D\356;\334\371\330H\321\316\310h\267\300+\243\67\345\216:\234u\253(\213R3\246\371t\342\355v\370\244\r^\203r\243_J\3\267\21\26B6\257\333\213\311\315\62\63\31\20\261\347\23\6\62\230\362\65\300\372H\234d$4\251j\353\347Y\201=\326\201\263!m\370\300i\226\231\334\227\270\363\255\63J\234\233<\323\200\355\320?\377d\206\236|\201? $N9o\242\324-i\252N\225\247\374\37YM\254)t\371\345\224\326\233\260e\224\251\243g\317{\337\t\4\365\222\f/\253\245v\331\2\333BJ-\23\247\330\226\0\307m\323\211\355o\332Z\201\270\60\216\227\330\20R)p\26f0rFSW\222\62\220\331z\377\367\22\312l\322\352\61\325\204W\200?B\303xO\236\272\207\r\22\6a\34\200%\6\351\220\22\200%\352J!M\201;\202\237z\31\65\f\203\64\31\62\350\261\264^y\230\372$P%<\f\324\330\63\230u\221,\211\251.>\353OX\220\235\260^u\375\250-\203a\207\70\246gC\252^\v\262\210A?B\254\224\355\342\344\237\251\374*u\235\335/wf{:\"\331#\2R\262'E\211\0\340\322|J\5\302b\277\360\327H\n}\206\326D\202u\7\262H\245\263\247\65\1\70=1\373\330\216\262\257\35p4x\347\311\225%\16J\206\276H\364\355\217i\355" + "\331O\204\305\234'L8J\243\234\371y\242m\204\61TD#{\211%E\23r\r\254\230\v\332Q\216wH\271\260S\316\305uG\"4\265\\\267\215%\23'X&\306\317\202\373\257\321x\26\334\177\215\360\254\321\315\377\7\201\272\30\67\267\211\65\363p\0\360\1\334\20\334\254\323\323\273\62C\30\216\314\367u\t\271\373Q\21~#\270m Y*\226u\250\351\20\367x\252\263\270\266\313\1&\367\266\231\375\366\371#\334\267\37\35\306\7\220wkt\276\276N\370\354\346\32\61\277#\212~}\273E\372\f\255\312\371\20\336\355N8\230\362\211\230\227Z\1SSt>\206\35CA\364\327\230o\r\243xW\351\315Xl\275o#\6\276\215\330\31\30\327\260]\332\320\356\f\241\210\360\5\335\230\2\r\211\371\23\f\312_a\245\374\3\316\4L\310\n\370|\237\217)\270)\266\320\320\306\25Z\3T\241C\343\277t\305N\177\351\256\3\302p\347\207\330\315\237&\31\243\36D\n\261\232mJ\341\370\326\355\304)\260p\301\352\237\65\204>\326\312\27\36\5\351\302sJ*\364\61\326\354\337DR\341\37\253\33\227\264jO\3\344B\303\rc\225\242\33t\224b\203\303E\342\32\350bKT\257{" + "\246\236O\364H\375K\361\323E\31\v\333\340\257\367\nd\b\270f\371\214\24\273\266\331\32\313Vh\20U\376\234\261\323\177>\276\27\272+%\302o\4\367\241m\5\344\276\332\316bZ1<\33J\361\202\335A\24\305\36\233\211B$R\212w4\372\207m\252\345\260\61\322\261\261\311LGH\270&\330zM(\276\360\257m\201\325,I\342\22\366&d\273\234\302\364&\247\211\f`\357+N~\323\215\247\205\351\26\r\204\nZ\232\26\375\362t\254e\r~(\323\7\267\326V\260]\31S3\24\214\212\236c8{\205>F\252VI yTz\372\306M\341\317\322\rq\372\331-T\262\247\344\222g\325\353\363H\337F\23\32\224j\17\350\354\247\257\201.\355\250\301\221V\n\206\244\22\33\224?\373\60\0o`\326\f0\335=\346r\273\71\256G_\353\66`b+\250\322\225\222 \223\204\276}\361z\t%/\n\377\221\23\306\264!\2\357A\272\246R|+=\370\61\277\16+J\7ZP\351D\235\4\367\345\322\231m\260Ll\24\210\224\256\324\370\352\312\37\213O\23K\217(T\372TP\232\251_\347\255\217\314\260`\0\233\71\276\177_\245\202z}\346A\342\264\60\363\214y0\363\311D\346!\276ga\"\243\246\66" + "\221\326\375\247O\251\342\254'\215~\346\350\65=\34\270k\300\254!\300\274\335\t\363\306\r\274\216\331\35N\267\62\313\271\66\225\367\220|3\214#Q\230\215\354\61i\f#m`\367\17k\206Dy\30\354G\246Dy}-\302\211u\n\326\265\306\255T`\371\340\65F?\260\366gv\257\310\314\36\223\330YX\331\354=d6\235\331\327\274\60\347\20\300\307\21\3\37G|#\263_K`\t1E(\376\312\353Gs\236j\223 \334\370\357\206s\315<3\27\t\262s\373Z\271\271\24E\315\335`\370\271g,=\357\342\204y\237,\316\323\355\330\325\66/\267\311\363\357\321\235\363G\r\212@\211\314_\221\220\62\377\\\20\267`\255\300T\21\256-x\265z\34\352\v\333\355h\201\301\356j\303\365\334\\S\326\244\377\223\240\35\266\313aA\254wJw\233\371T\253\231\363\67\255\322\262\20n\302\273\265\20\313\300Uk\302\302\301vq!\rK8\357\220\26\256\71\345\205\273.}\273\275\f\261\70\353\240GZxR[\316\35\270\360\211\66\363\60\26u\266\276\32-\372c\353\377ck]\230.\356\24\230\305P\33\273\250\210\334\342{'\251\276[\360\306\233\364\342\tUX<\257\210\213" + "\267\31\264\370\214\225\26?\316\311KU\274y\214rd\tT>ei\257\317\337H\202\332KO\232\350\245\17j\241\372\204EPU\20d\254\264\354\255\223\341\267\65Z/o\353M\327Y\232\303r\227\217Y\336K\261\313\7\333\f\261\367aT\0-^\\>\356~\364\353\v\231\350\343__=\35\205\302gP\22/\227/\236\316D\243\345\67\377\233\66\225\207\261\340/\377\272\342\363\371VUZ\353\262\227\357\370\231\345GA\26\262\210\203,\242\226\373\2\374\212\255\221^\361\0\335\370\252\345\303}\26\26lT\227\225Z\206SV\272Y\202Y\16\257z\345\316E\234\242\6*\254\bG\303\377\217\273J%q@\374\312\303\360\352\225Y\325u\345Y\210\371/!W\1\334\66\266Em\207c\252\23\307\341Fr#\226\232\32\353:)d\223-\244\343\262Sn7PnwJ\363\313\237\231\231\231\31\207\341\17\343\37\372`\207\231\231\31\346\337'\251V\301\317\333\335\66\61Jzz\227\316\71\367B;\34\r\204\"\363\277\27\71\320_\200@\201\210E\341\333\"\205\214\20\331I\213 +\216\237ex\225\267U]\24\"\241\313b\244\352\264\24\t\235U)L\25\65\214\277\336\221\263~\204\364G\256\253" + "\231\205\266\326\221\207\226+\221g \234\210\352\b&\272\305\n\267&\207\215\346\347\222\237:^\312\235+\340\243\305\16!\312\330!\332\230%\270\27e\362\322\71\234\321\62=\30\330\245\63``\227.\340\71\65\357k\"\272\350\356,\n {:Zm\"`3\261\260\221H\330P\\\364p.\37=n\26\242\247\363\304\350\305|)\332\240\324\311\306k\350\236FoX\n\334M:\263.\241\n\\\257\304\356\fh\304\361\351d\355\240\333\247JF\24rOi\311I\204>S|\223\255Hh*\260\334n\"\375\214\324$\262r\371\271\235\5\374\t!\252M{2\rn\224\302\305\367@\0\61\376#\235\227\305\220\1#\22m6\325\b\242\273\351\206\304\306\217\256\315\16\37\333\\p\236k.)\206\64\344P,!\215+\327\203\":\2\342\237\350\215\337\7\"Q\231\275py\232\305R\7&t\\\5j\204{\271E)\33\206\r@W\335\\-\360\315\247\365B\363e\203x\216\222\232\257\261h\261\324\300\333\374\210\343\261\31hKQ\0\262E\227z\336\70B\260\245\\^\334\226\3,\337\22:*\264\204O\210-\227i\251\345.\344\374\214|\220\226\347:\311\335j\347x\355\346\264VVR\255g\367\321\255w\253\231\266" + "\264*\305a\236\7\25b\230k\203\244\255\255\364\240\320\346; \302s\257\226L\331\234\220\305\213\257\220\244m\357\206\250\266\363\307\350\177\36\314e\332\356\20D\333G\266\261\355i9d\273\315\316\265\363^\240I\335\b\30n\337\331 \265\357oT\372\21\215e?}*y\332\303\220q\264?\342tZ\372\326a\242\250\216\\\206\356p\262L\207D\23\341 \262\250\216\200M\266\311\216\252\200\320Q\357\27;\36Z%x\354\351\324A\345\335\351\20\371\4\nC\276S\264k\310l\\\30\b\311\247;\313\251\230\211c3\340\316C~\262\263\66\300\375=\303-\2~\22+\330\322\64\351\224\374\266k&\260\336\322W\r\341\27\206\213\324\327\257^\246;\37\234f:_\234%\272\62\352\330\256\334=d\27u\236\353\332Q\317wU\204\204\256#^\261\353r\203\364/\301\23[\355\7]\267<\236\363\347\335\335)\345\357Xq\247\25.\204\22\362\24ptz\241;\317 vSIR\270\20\271^\365\f\356\302g\2\1\271\207\33\242\20\335\275}+\323\35,! \323e\273\17\344\223\240x\202\325\315\346\277\0Q\362\230\17\252K\277\364\323+\231e\337\67\301w\224\70\301\304\272\17" + "gz\225J3\256\0\34\370\315\356S97\272\317\371\235\"\374\"\247-9J\252\224\240=\27\335P\22\376\342\244\212\0&\227s\377H7(\364\tY\343\216o\261\335W#l\367\275h]\367\363h\344&\372G\6z}\tD\3/[\177\340\7\316\245r=\6T\214fkZ\276\303f\252\307j\243{\212\235LOY.\321\263\333\307\366T\6\310\236\223~\256\247\321\303\367\334\17\n\275\372r\261\327vR\352-\251\325\32\66z\5w\275\273\267\272\330k\303\24\300^\256\367\26\307\367\276\b\210}\251\rR_!2\20\266Od\311\276\275\314-d\270}\7\323\r\356\276\247\311\251\t\352 \262\277\314\17[\0I&\266c3\330/\353b\16\234\302Q1\344\17\274\16d3\375\25\204\320\177H/\366\237\61H\375\327\223T\225.\266\311\71\200\214\264\377\221\237\33H*\341\7L\204\60`\333\32#\6\263p,\351\27\3Qn\300a\345\341\247\70@9\245\1O\241\n3\177?\264]\250\261\177\260&\220\37\250\332'\f\34\257\224\371S'n\201\304\201K\257\264z\343U\263z\v\256\244\36\270\352W\223d\344\301\33\252\3\350,\353\22(\262\331\201[,9\360\234\341>_\315\251^\2\364L\230;\3\"J\243\217\34" + "\264\345(:\2\36\65y\340+0\376k7\374\302\61-\227\325\0\26e\225\337n\240\216\260\307\242\374`\221^\30d\r\261\367\307\347\256!\206\f\372\n\21\367\61\370n\376\355\357\233P\233\262]E\177\61\21\263\32\"\246\7\321\335ZQ\220\215\331\353\273\200\264('\7k\17q\203\365\7\204\301;e\342\357)J\32|\302\250K4\244g\313\206l\264gh\33\270\365!\37/\342\323BT\33`\205\311\341r\366\330\256XIgJ\264\62\337-\215\326\205#\321\30X\202\67\62\345\240<\b\32L\370`\3\376\63\326\326\240\255\302\320\1=5t4\211\36:m`\206.'\23\221\235^v\350\332Qr\350\361\t\230Y\301\360_}\26B\216w\330\34\224\206\255\\\331p\21\245\346\67\236a\n\364\251\303\276T\356\325I\34\4\5\325\63}\307\313\fW\31\220\243\34\256)&A\373\302=j|\v\256\373\316e\271\375\25Jl\255\254\66\341\307\333\260H/\250\341\375\326\370L\346A\327\365\217\277\347\252\255\373x\255\353$\22\207@\301)\301\17%\231\344k\214\330\70\65|&@\202\64\204\33n\364\363\360;\\s\314I$\356\277CbutB\270B\v@\351c\350\235\303w\34\2\200\347\342\360\243l" + "\205\323 \177z\320u\7y\321\221\324R\207{\204\310\313\211o\261#{}\354\310!+9\22\312\206e(\342Gj\301c8\262\217\236\320\256\5\320\n\nRT\32\370\b\6\200Ft\270\221\367\364\302\310\365$q\344a\212\64\362\221\f8I\2\352\71$'v\217\246\247e\304\335\275 \373T\234\221\7\217\30\5\265f\243\370k\t\253\375\252,\1NI\204SSd\tz\274`h\324\356cG\v\374\344(\27\340F\375^~\264\2\62\63\217\70z\350\270\64z\352H,hi\16{\264\236\242Fo2\364\350}\232\31}\312\"\203\31\63\370\310\261L/_M\t\260W\304\261\334\255\322\30]\242^\25\7N{\314\5\306;V\311\213\b\4\315\213\201\240y\n\b\252JZ\177V\23\224\245[c\307\363\204\261s\26q\254\316!\215\275\257\202\203\37\344\367\307\236\206\311\361T\305\365\31\341jq^ D\2\256\6\255\304\62\60\353\312B2\23o)\200\333\324g\356%\321\0p3\237y\226L\214\33)v<\233&\307\v\31\225\227\f\0/\271\vxI?\360\222/\211:\230$\343\31\337\226\342U$#8\37\1\220'9\356+\346`'\361\343\25.a\274\246\360\366H(xH\202NtX!\5\340\337\266E\311B\253\252\223O\245\204SO\246\311\361\"" + "\254\314D\31?J\b\343\347\203\252\206K\25j\270\307o\354\253\214\177\320/\273\340\243\247\310\211\24\37\214\247p\335\234\260y\203\302DIP\234`=\322DYPk\35JH\222L\4|\334D\265\351\346\257,a\337\255_\345\235z\225\346T>\236\211\67O\205\325\261\276,\326b\27\65\21\62\301\227;\0\4\63\2\b\246\27\341w\t\236\323\232\t\343j\315&j\vUj\303\b5f@\255\61\3Jn\r\364|\0\355{\305!(\265\246\31sf\344\304\5\253\302f\251b\226\211\273.]\242\371\2?\7\211\320\271$\245\345\370u\314\r\314\354\365\331\r\345\354dR\210\234\64\333\271I\7\21\27'\t\201\360N\353&\212\217\63L:}\257Y\360\344\16\247\64Y\231\257mk\317$v\370\212\"\n\233\274hW\256\17\227f\253W\217C`&\37\252#-\330\32\\\263\374y\24\324\246t.E\241\226\211\357qk\250\216\310\65\26\224BF\273,\201\262+\367\250\264\206\315\312)\306\350\30\263+\233\234\331O\274\311\332#@g\346\70l\235m\260\241=3\227\234\346\17Rr\271\255\332a\336wP3\37&@F\201v\372,\364\370\317n\263\v\263;\tq\366\240C\232\275\204\70\71\32@\330\331\373\331V\367\\\266\323\234P[\351\215%=\215H\331N\314\355u\263s'\203\374\334U\257\60w\367uJ\231R5\357wuuu\360mo%\215\215\320\371\335\200\334\320\334\263:\36~\5Y\207bg\"\216\253\232\67\240\6\7\344\213\22\v\23\202\354|\6E\316\347\322\334<\305\310c\237\260L>;_\206d\273\370/\233t*M\25`\276\363{\254p\17\24\60\200\27w\350\374\1\270(#5\177$\7.*\33.\312.\37\372\214\217\204\275\374\352M\234\277\247\16\33" + "\312\374\371eo\246\5\355\250\371g\244\316\275\260%Yg\216\353\n\36E`[FE\370+=\212\274t\365\224\5\337>\310/\24\347\240\221+*\321\341Y`\213\354\356\205\323\226m\332\206[\264\344P\213\371Nz\221*f\26\313,\304b\360 \273\370\356AR\271:~\361\270k\35\321\344kmSx\b\204\2t\20\"6\223D4\273]&\32\230\225\24\63\214+\202hq\223F\264\336\257\23m\365\32\240\221\200\314\t\322vOU\322\221\246\355e\265\65!\332.\371j\371\346\321PV\31\332\336V!\322\366i\254\272\346\225\274\261\2m\277\272J\245\355}cQ\5\326\fy\235*\263rIo\271\331\22\332\276 *\374\323\345\t[\315\323\366\225\21\235\266o\261\27\322`19?#\335b\\\1^7\23\3\300U\33\253\257\243\333\313C9\271\266\60\v\267{\35\303\336b\4<\16\373@Y\315\345b\333\371Jras\241\276\5\324\366i\370\347\302\276sP\254\341\371\352E\260pI:\376\71l_\233\377\227\36\313\253\314\343\244\24l.+\305I\234\266\301\251\215Ml\16\265\61&\251\211\30M\243\333\203v\305(sgy9\236~\210wW\237\60\243\276\202\357\215\255\245\333'\305\306\255\243\333;mX\341E\234\300X%?R\302\216\n.Y\20\363\261:\266HE\16\360'\226'\316\274F+7\333 \326gy\243pNi\302\\m\24\65xW\372\301\322\2\203n\277\251\220i\244z\233\347\214\356\250\214\370\270\33\350_E\375\2r\267x" + "\237T\362\224\1\316\262\207\1\25\344\272\5\344\272U\344\272\65\344\272u\344\272\r\344\272M\344\272mo\306f\214\201\61\333\b{\2\267m\36\307\t\6\320\35ql\255;\246\317\25\350\216\336>\315\376\320\355\377t\352\7x$/\300\341\262}\26w\322^\331\331\206v\205\375P\217>D\245\312R\v)\362\271\306\357\270\266\34F\24\333\63YA\26\336\205N\342\237_5f/U\324A-\361\267r\312K0\350\16;kY\355\4gx\306e2\364\22\340\330\364v\20\nSv\203\242\323\235\325\252AwF4\223\356\234\247\247\212\225'p\311\264\350\316emI\305\303\375\226\rk\254v\23\71\234b:\272s\255\343\362\231\25\71\254\64\327>s\263\352Y\336\227i$\340$\341\344\211\372\177\277F\2\321\243/E\364\270G\303:\233[\266\233\361x\177b\363v+\36\347\231\310Hy`\20\246\225\351\316AQ\247\273<\341\313F\32\232\63\241\273\312\253D\272k\\\243Dw\265\324\256\240\273\246\214)^Dw\365Y\25+\351\256\r\365%\2\335=\266\232\311\324\273\325|\235\356\216{\f\272\273\275\300\244\273\257*\f\322\335]\266\271\300\16|\230\356^\203\322+\332Q\311\251" + "\321g\202bGkl\254I;:\307\6i\307\300\270\244\205\213\213V\370j\323G\373\362\332\70\332\261\311\247\200-S\240\35\203\365\331\312\343NLo\216\214Hq]\361E\270\67\206\21n\216\273p\31n\202\23\202'U\225C;K%\203vz#&\355l\226\323\246\34\355\324@\347D;c\300\23\330\64d\31\4d\273\27\367\253\307z{\263\260\350\66\343mD\304A\204L\26\335\21<$\307\301Rg\35wv\212kh\347\302h\365Z\332\271%Z\273\216v\325D\33\31\301e\v\27\260\372o,K9\332n\333C\36\tw\313ulQ\30\253\322\256\266\250;-\34.x\332\65KTh\327\274\337\262\301\323\256\325\226i\177\270\323\303jj\230\332(\347\370\17m\251\253\223\276\70\63kF\377\rD\364,p\236AD\217q\234\300yZn#\352.\"\342.!\362.\323\256\r\nF\313\307h\36\214V\200\321\ns\217\226\340\t\bT*e\222\264eEwu\256\334\25\353\\\260\30\37\327\254Jt\366\257F\fr`\r>\346\257\245]\203\235\327\256\243\335\345\235\327;\304~\301\f\355\306\310\\h\267\277T\242\335bA\312\n\243\335\306\320\64\214+Wd\330\374\264{bAi\210v\317(\316+\377\63$\262n-c1S\235\273\373#*cvif\21T" + "\276\307\311\253\215\30\347\262fr/Z\250\341\237\216\177\356E\"\323I\26\257\350\31\f\346}`0\347p$\323\356\353S\267w\303\246\177\365cC\307f\354w\332\275\254\21s>\350\227\350\236\342\6\231\356\31\27H\202\63\21\370\264T\272'R\241\321=\323\332t\272\247\317\213\61`\227\272\370\242\16_\230\356Y'\n!\272\267\252\62\217\23\320\261\65\205\203#\vq\24qR\255\363m'\247\300\331ruW\222\2\300\337\220\322$\16\f9`+O\310\231,\"\b\32\240V\351\30\223\361\332\367\252\246H\367\206\202\22\335\333\326\"\323\275\323\307\243\\\36\341\237\270\260g\225\245\36\275>\266\372\336\352I\223t\272\267SE\371\215\216\362\33#M\313B\367\316\221F\341\255\227\213r\332;\6\354\7#\376\241B\332\61\340\223\201\367\261M\26\272/\357\222@\367\225\214V\351\276\212\200F\367\215\256\327\351>\243\322\240\373\256\252\63\351\276\305\315\16O9\236\220\356\333\250\204\351\376\274+F\206\350\376\221c\274\34\325{\277_P\350~-\260\212J\242\243\253\206\244\335\261\305\35\203|cbQ\317E\213\5\300\61\25Y\222'," + "\266\305\vq\244\265?\267\302\235\356\17OP\351\376+z\265\355s\273\364\355\213\272\63\67e\213\302M\337G\206\360\70\33\n\210\311\70\234\230lK\204Xx\337\315v\321\375\263|x\367\271U\2:c\340\366\213\32\64\272\177C\205\216\17/<\246\31\346\340L'Y1\212\255\321\3\371\365\215!z`\324\224\251\334J\266\335WM\374\63\240\277\236\30\333\23\364@S\224\361\221<\325n\351\364\200\71\rd\310~\320\314\247\351\315s\24\223\340\202\210\35jN\341\371\340\221\321\3SkDz`v @\17\364Y\n=pm\b\367X\341\20\250\357\356\233\355\64l\210\233\364\300\226\342 \355)L\326yK\264\247\304#\323\236\21\205\240R\231\323\303\360b\31{zO\255$\322\236&Yz_\27\345\375q\305\201\323\305\204\204_\245=-U\32\355\211Gu\332\203e\240=\213\275&\355\331\342\317P\355{\207\65W\204ho\335\350\21\351\251\270'\326*\236\7\24\236\366\266X2\t\275\1\332;\311\253\320\336\351\65\2\355\275\32\303\356\235\23\0\307\366\"=\341\63\356\314\353\61\311;'\235\17\275\254K\205)\2NA{\347\225\4\22\275\n^\266\vC,q,\16\332\273\326" + "\343\276\362\336\255\60\261\366y\360\312\23\330+\357+-\310hU\221\25\260\312\274\311!\25\372\205\371E\5\305\236a\205IA\230I\223TiG\351\207\347\361]\352}#C**\245\64\332\67N\323i\237\342\322(H\274k\30}\7\355\323e|\275M1h\337l\321\244}\363\245\\\324z\264oE\27\356\365\207\71\2\355/\304\302\357\367v\353\366\337\34\\2n\270PC|\216\247\6\\\236\374\26%\23g\204\316,\"\272\262H\350\316\"#\237\16\21\4\301y\t\203\67\312:~1h\377\370\26\246\203Z\330\216wE\327\376x\276H\373g\26H\264\377jl\260\375\363\31{~\342\22\236mU\2-/t\215\366o\366\352\264\177[\231A\7<\222I\7\252\304\324\336\61Js\261\232\327q'\r\241\66fk\36\360K\30\264I\306\240\206\222\\\310\64%\2\353oB\7B%\22\35\230\62E\246\3WO\5\330\334\336@\276\214\rt`Az\3\35X1,H\7\66&\317\f\366\216\267\306=)|\310\24=\230\67[\245\7\207\317b\200)\230\237\301\340\256\276\24j\212\36\34\255\350\266\265\361\240\2\344\5=x\265fT\360p2\250\b\20\200\200\4\375\241\226\242nt\315\244\313\363\334v\f.\213|\16\300bV\240\311X\365" + "\307\237oP@\17\256\213\t\27'F\325\217\306\242\305\220\5]\362\340\r\b\33\210\243\63\324C\5\342\65vI\212\17\361\232Z\246\232\16\346]BV\241^\245\203\243\307i\370E_0\306\240\203b\276I\7\r\17\334\342\224\\8\30\366\24\206\350\340\304\202\"\216\210t\b;m\233\375`[\263N\7g\214\306\70\363\275&p\216\30Fec\254n\362b\214?V\344\361\344$\236{t\343\365\r\n\227a\257\177%\35\252\264\372\235h\343j:T\203\316\ntH\265\34\22\233\n\265\243<\265g\306\325\67\377\353\5]\342\277\356\355]N\207&\225\365\310t\250\335\23\240C\375\21\5{\311\341\255;\264\70\fHX\271\273g\16\255\205\320\71\264-\275g o\370\34\340\203\266X7\7-\27\363\314\65\225#\240\332\220\323h\257\234\r\203\252\371p\b:\354\211(\vD\201\16\227\61l\355o\367\214\362\373\353M\204\65\63\267\v\307\303\322\366\242\252\370\207\221\36\223\16WG0\355\70\243\277S:\206\362\375\335\363\7\25=>j\241Ht\31\32\305\0\205\33*\355\375.\347\337\207\212{\334P\233\34\244\303\376\344\314\261I\253\342Q4\221\307+0\225\230I\317\64\\c\264-" + "\334\70\321\341\246\204J\207\303\36\203\16\317\362\341\241\273\233\223I\331\60\35Nxk\370F\312\341M>\\xSm\226\3v9\6\235\216\224B\0\36\251\203\0<\242B\0\36i-LV~\323\221\331^\215\216\314\365\353tdQ\203c\2\206\351\310\372\242\214\264'=Tl\212\364PU\213D\17\325a\302\36\262\f\26q|\350*Q\247\207\372%\274j#\220\24\230\353T\226\210\36\272NSGp\361\323\265\2=\\&\252\364\360\70I\243\207MY\247\207\257P\fz\270;\311\223\202\260\36S\204\216\22T\221\211\320\36\320<\370\326\242\202d\"\16\271\220\22\17\17k\vJ\206(\6_fA@a\324\215zR\223\360\2X\377\247(\242\322#E\23\214\177z\323\22\363\237\256Y\232\266\20\271\375t\36+[*\320#\243D\215\36\361\347\353\364\210\211\345{$\\`\322#m\205n\344\67L\217t\0\276C\217\\S\314\213\24>\262\66\242\330\372\265T\301\365[%\347\64\211|~\273F|\33\314\263h\217P\25H\206Oy\231Az\264\300R\350\321\312\210\366\332\266\1\375\265m\363P\340\71?\305\301\241\244!!\364h\375\30\221\36\25+$z\324\250\223\217\256\16\340\322\360B\5\330$\201\36\235\332" + "\250\322\243\263\260\330\217\366^\253\323\243\213\7\fzt\303\365&=\226\347\214U\306d\350cU\336\321NQ\23\27(\v\200/\"\227\351\204~\25\347\370\302\36\275\264\230\36\v]\204Z\177\354JI\243\307z\24\235\36[\242\342\236\67\332\223ct\230\331\5\65\35\305\v\237\235\332-\234\215u\331!\26\374\320\361\237\220R\343\30~\304Aq\322\321\200\232\323\251\204_\30U\23C\301\321\230d\236hk\244\243\323\370\4B=1D\240\243\2\tL\256,\301`Nany\216|\32\310\202-\267\232\324\67\202G}FG\257\266\204\377\274\315\257\356\356\213\201\37\65\16~T\277AG{\223\255u\314\314\363\177\231\373\224\204\253!/\206\v@\227DGoiqq^6\266\260\6\5\32\345\254\302\245\206\25h\224\7\22\25\nb\316\2\35\33\345S\23\25\232\375S\307\37\334Lk\230\216\215)\nUrH4\361\375+D\203\216\365\267\244\204\223\224\233c\336\305K;\363\313\261\23\217-\37\71|xY\221\323\216n$\367\24\330\276\344\230\254R\22\231r\5O~\203m\364\34\273E\313K\273\60\216Yv\274\254+\323,s\224D\332*;^\303\370\252\230\206=.\"\253x<\376\33\rk\17\311" + "\241\246\337\321\247(t\274]\26\350\370\334J\225\216_#b\310-\22\206L\327\66;&hK\230NxT\r\315$t#{\34\342\310\260\213x\246\213\366+\341G\5\307\371\355D\255c\217\323\210\314I\200[\334\235\335\23s\224v9?\217c\203?\242n\21\23\357\204\344\36\307\62\350D\235i\322\211\361\356\326\340\64\275\241\23\263#\266<\233.\320\211\271\246J'~\177\245F'\0\266\243\23\203\205\30\345&\217y`N\21\70\253-\7\203Q\316\7z7\nt\262\34\63~r\244\305 R\325\351\330=\230\335D\304\240\245\23pD\21\207\316\320\352t\262\271`\210^g'\331\37\246\223\301\341y|\n@K\341$\372\21\303`>\2\6\374\306\34\374\66\v\213B\5\277{\217\0s/\244\341#\203\354\222\317\377kit\262\255R\7\61\256\1F\22\67$P\306\347\313\217\246\277\310u$\377\315\302\205\230\307Y\36\346|\"\4`2\272\306\374T[;\33\240\34oh\246\223\275\242xo\265,\321\311\371\222L'\227(\201\204\17\347(\340\30['7\265\341\341\266%\315\255\250I'o\305\71:U\305\316\21\302\1\266o\334\237`'\251\202\337\35\321\22\350T]BM\326D\323)y\202\226\71\353tj\242\"" + "\321\251\251j`\320.d\21v,\361\251t\252[\323\350\324\\Q\247S\277\227\f:\265AvQ\35\"\243\274\344F\352\372mf+\\\261\265)7\267\27\334\346\261\306ceKLX\v\f\f\31\31\231\23?\244\323\351B\315\240\323\303%\223N\327()\25 \207\351t\223\16;\342t\364\67\22\352\243\261\21\211NO\277R\246\323}\323\207\n\250\323K\302\332\263\245\63]\27\340\364FL\354i\333\5\360\61\33\357LAWo\16\277\221\316\214\36\251\374\237\"\257@g\352\3*\235i\252\277<\356\230\304xb\260L\243\234\373\202i\374\217\363Z\277\33\311;\25v\337]4\267\325\350\214\232\245\21\253\332a?\274\225\27\342q;c&qi\227\307\205\353b#\264'\231\347\333\63\231\347\35Ipf\356,\274\336\242\61\270f}\0\325w~T\337\65`\222tvaE\200\365r\f$s@5\2\241\25\1\273\303\331\242\220NgG\224\31tvly\220\316J\25H}J\266&<\33n\36\35\242\263\355W\344q\253\230\17\66v\252tv\331B\fs\3\354\252s\371\327\33t\256r\300\244s\365\363\227L\227\20\345\23'(x\355 \235\323\325\60\235k\261\201*\347f\202\217\206\217\203\304\b\213+Mpm;1\6~\307\5\30R.i\213" + "\305\261/$\205\316!\364\r\271a\251t\356FC\203\273\1Q{~\230\307\240\363\243`\350\236\257\267M\206`GFY\21\235WaI\236\267|\22\235\277\262Z\306v\t\340\365\252\25:\337Q%\320\371\1\237J\347\227\65jt~s\23F\332\26\60\350\202\7\306\307\205\212\306 ]\30\303l\t\250\305\260M\273\23\262K\215J3Kbc\252\375,\332\305\225I\334>\277\253^\224A\f\376\311\244N\314IZ\214i\35RU\246\v\210\230PA\206*?\224\22Amx \251\60\370\257\252\223\232\\\264\277(%\373i\344,\201\370\7\375\254\271\200F\27\202\212\16\335\376\227\21E\365\264\271uo\n\257j\257\247\6\257\324)\320\205\326\36\310\24\37z\345\214@\257\234@\312\370\62r$Y/\\i\207_#>[\351\347\356&\304e\362g\270v\311\370n\271+\221x[\253\r\260\346\326t\23\317\254\261\314\35K\274\256\242\347\270W\272B\27f\267\340u\373M\366\314\250Q\313\304\226\263g\316D\261qE\365\367\313\35t\217\313\235c\367\376\264\33\260\241\377\247\333\203M\261\21\313\350\361\210\335x\235\327d\31\263j\247.\204\37\367\263\220l\31\305\341\26\300\303\257\251sP\f" + "\27\66\212:=>L2\350q\177\320\244\307\343\343\263\261\236\244\327\34g\244F\244\307\347\66J\364\370\312*\231\236\310\253\16\320\23\325\235\n=\21`m\217Tz\"\350\325\350\211\31\241$S!\306C\205/\267\202\5\337\37\220@\226\200\223\373\304\352B\264M\21\235\"\fn_@zbs\272W\327H\16\322\t\2:b\343B0\372\326\66\215\236\34\26\267\341\252;\372\32\321\20\325\271:\6Jj~\0\372\311\262&\201\236\254\263\331\372\25\315\376E\267\377\204'3:dn\270\3\nA\245'\245Q\32\226\n\337\17\7\fz\362w\265\254m\264SY\314\313p\362\222\314n~\333N\7\307p\337\22\264\322*,\206\257T$\321\223\63E\231\236\234'\5\350\311MW\342\211o\202\325\371T\311T\225\236\252\236\6Ob\30<\211Rx\22\371\360$ \217dg\277p9\242\217\227\360\16vd\345\356\253\22\16Z\36\273\334\315\350\271\273\204\23['\243G\241\247\204^\201\250\266\23\17eviD\25\335:\221\205\4E\17\202\35k\271q;\324p\303b\212\v\370\t\314l\fQ\233~\215\233\337q\0\65\231\305L\355\263@a\27N\31\36\235\266\341\321c\33\36\364T\274d1=5\305\252u\4\352S\v<\31" + "Y\36\230\36O-\371\215od\307\344\32\374\16\342\361\251\215\371\276e;\256+\360-\247\247\213=\276\25\364t]\261\17\230u/\2\2>F\360CO7\327\256\246\247cE>pF\25\372\214\243\327'\314\243\v\372\203{K*3\202s#\370\210\66\215\236\236!\353\273\372t'\4\376\364\34\311i(\n'0DO\257U5LB[+Pub\274\325\351\354\337*\260\304J+k\356\217Z\221\314\270=\364B\241H\317\250\245\322\355\323\272\344\333\373\272\177Cg\214\200n\t\363\30\360M\23\266,\302\366\317\304\322\223P\346\345\233\265\314\301\177\346\312\230\360J\236S\345H\317\364&\265D\25\347\254\237=;\325\362\316=v6fy\373\360\262\347\331/\27\330\37\235\220\222\275%\262\346#\223t\265\314D\345\201J\242\351/\345\"\341\337\25\366!\312\343\25\376\301M5\256c\302\211\242\321\63+#x\307\233%\24b\312\f\213\364\254\307\320\351\331\221\272A\317\66(\346\356\225j:\327\26\246g\305<5\253\330Zt~E,\261\22\274\240\375)RP\221\353\263\322\263\226\205)\215\376\231vt\364\354\25\16\345\70\244\70K\271F+p\30\271\335\202m\355\201\247\237-" + "\343\351\7T\3!\321\62\23\301Q\247\227\235\r\306\317\201.\26\350\331\245\61\365\225\274\204#E\264\16\203s\227\266c\333\275\211\276\266\325\364\354\346\276\266\65\364\\\336\334\266\307\351\271\252\276D\333\23\364\334\330\271\211\66'7\334\214\333\345\250\303C\271\n\336ha\16\246\370\225$$,[8\330\202\1O\304\357\t\344U\350\71\305\376\252\177\25=\327\342\367jO]W\354\330fzFR\20\362\264\33\201\300\71\22v\261L\317\265\366\242\33;\262\266\rX\6\257F\317\315\350\325\351\271\336\71\6=w\235\317\244\347\66\70T\261\274W(\303\225\60\37\312\330\62\217\341\310\254E*k\351\301\245(e\240d)\31d\277\314\237zq\332\370\241\376\24=\267-#\342\363\314\326\31z\217\237Y\211p\255\202\364|\211?KF\205\33/\311\224\353YK\237\276\261]\37\64\360Fx\367\222\336\323\231\266 \265\314\250\b=_\251\211\364\374\70C\242\347e]\246\347\343f \321\256\364\314\26\350\371Y\263\330Qz\276S\322\351\371\371\262A\317/SLz~\243\352\206\222R\276\71\6\372\37\v\226\212\377\343\367K\220\6\351\264\323 =\1" + "z\376\217\1e\27\222H\364Bi\30-N!\303^\250c1.z\241)j>\25\202\b{!\230\22a\364B\264?\201\6\31]\335|\222\205\0\276\70$\365C/t,\22w-\233/\321\v}\363\344\335\213[\\\34\324\v\363ZUza\311D\355K\317\200~\364\217\v.\267\237q\277\225v\240\356\205M\214&\267\244\210\251\353P\211\30/\222\352\ve\271\70\331$\266\bMbK\334\206|#\334\226\242\227'\235\222\250>\r\250>\375\261\262k2\372\341\33\231y\246\354\357\346\\\34q\30rx\26h\f_\211\352n;]\247|\216\37V\300s\263\270,zr\351\364\302\326J\203^\34Yc\322\213c\35K_bs\360\242*\253!zq\232\222\307\67O\v\32\351\305y\234\63\204\26\301\312\305\211!\367\211x\206\t\23j\350\63\245\323\213\253=x\222m\5&\275TY\230\266\7r\226L\274$Y\375*\275\24\326\235'\327:Z\270'\372\316\274P\332e\310\331\363G\311p\371\220\276k\300\276\365\333\373\66\20\370\367[\363\225\377\220\357\21\376Ci\1\356:\245P\243\227\332\213\320\242\307a}\267\273\211V\344\210cF\5z\251\247\301\321\36\350\351\351\316\210\3yzi~\273D/-\231%\323K\353\314\0\275\64\30" + "\263+\355\351e\247\333\254F/\217\210\352\364\362\70_\312\33\313l$\304\350\222^VF)\357WY\266\24\211\245\234MD\22\333\234x\27\263\215^\16\273\b\230\227\247xdzyfq\200^\356/\f\323\313\213<\305!z\371\206\302a#8\v%\320+U\226J\257\214\31\255\201\tN\247W\232j\fzE\257\67\201\323J\266\t\240W\306\7\70P\377\303\r,\343\222\\\201\314\260|i\256\2F\261<\207aJV\312\60\245\212.\230\243\253;b\\\6F\205^\271\302&\36\220\335\304\20\7\302\353cT\307\273b~\30\255\r\253OOi\b\254\241W\346\370\33\60\213\261u\364\312\302X\200\1\361\342\220\24\342\26ze\261e\5|\233\351\225\255\26Z$p\260f\257VC\311E*\25>u\b,w\247\\\v\31\344\b\317\241\341\370\250\311|xu\275\23y\252\26\343\365n\344\t\267E:\322\344\66\333\243W\353\243*\275\332\330\202z\310~\324C&\334X \257\374\231e\351\62\300%.f\252\305'\322\253\255U\22\275\332\36\224\351\325\201\361\1D#\225/K\227\b\364\352\362\0n\2\362{z\365\326\260-\344\361W;V\31\334\71\311\25\361\257U\24a\377\275\246y\nr\324\322\t\364\332\64\257\333>\205G" + "y\20\321\350\265~Y\247\327\226\253\256\24\371\363\360\217\66\205^\333\332\212;\334:Q\245\327\v;\377|\363\21\300\336\242\256\317\317\367B_\37\356\305\200\343<\32\275\36\362\350\364z[A\212\332\252\246\222\v\250\353kC\312m\"\2\315\226m\273\264\333\266\313\254$\6\206G\225\213;M\257\25>\215\215a\36\310\353\35U\270Ww\276A\257\317\365\230\364\372\265\270\253/h\237\321\327\227\346U\216\340?\355\315\235\2\275Q*A\273\353G\332\221\64xC\320\20pO3CU\16\tn\275\21\224Dz\243M\221\360\233,\343C\265k42\342]o\264Gtzc\216\343\240\341\377\213)\347\211\337$\n\272\271\\\335[b\341\272k\312\206\264\210r\254\223\372vg\247\327\213\361vg\247#VP\315\300\350}\n\343\276\232 \342\332\245\22\36~\225\214\233n\230\340\20\64\7\371\200J<\350\226%\270\350V\226\224\207V\v\r\341\251\374P\311\27A\34/\1\244\1\214\253Z\24\240\67\207\307\24z\263\6\"\375\315\306\224\315V\276\206\336\34\37\353_\373~U,\1\273\255!Ho\266\271\33\374\315)|d5\214\211&(\345\200\353\312\360P\224\27\321|\374" + "\222\260\275DR/\214\21\265\355kT\375\37\314R\fz\263W3\311\253\263\200U\vn5 \33\234L\346\233k,\323\201Q\342N*\20\246%\16u\t\373b,\243\274\60\206b\301r.c\25\313\64;M\315U^\374\6\210\314(\246hkL\240\267*0E\2\320\66\313:u\373/\306\33\355\330\fo\325\365:!64\224\350\231\63\232\207\355\262\271\310m\324\204\260;\277\5rR\322\350-\277\252\323[\23\64\203\336\232n`\234n\247u\214l\267KM\237\363\252\254\230z[|)\364\326\2\r\261FUC\300\4\203\254\220\61\310\215\212k\252\f\317v\245\313\205\201\250&\16\207\373\35\221\336.\262\330`\364v\271\244\203\277\315\240\267\33\60\342\333\255\212\323\317=\353\203\260\303\366v_\213\260@e\347\25\277\352=lm$\26\240\342\230=\364\366\"Q\245\267\67I\6\275\3\f9\275S\275\64\t\236\n\321;\222\64&+\3\207B\357\\a\nx\327,\254\27NP+@\357\364\225\6\351\235\5J\206\234\264\353M$X\251\356\233\363;\357,\303\3\60\\\6\277\241,\216'&\311Y\300w6c\37\274[\324\303\322\317\320h\311@-\306\262\227\60D\357\326u\366\224\361\226\217M\266[\203\300\315" + "\276\322\273S\242\231A\331\21\331\302\250\213\356\213yklC\22\60\344\6\247\21\277\27%\16\65kw.\361\67\254\33\364\326\340r\36(\331\216t\323\273]\371N/\345\34\356X:\320\311\213\31\341a\257a]\330\356\6\315\300\335+\274\306\361\222\200I\357\256\257\6\356\17]\307\302\377uD\300\6\374\371\20Qilj\16\371XD\245Q\226\233R|1.\245\64\257y\235\1Y\356>F\16\272 {\336n\362\b\364\336p\30\270\357\325Vj\364\236\346\323\351=\253\326\240\367f(&\275\267P\16\322{\33\353\63\23r\364~e\261\315\232S\201\371\365Ocy,\37\23\314\323\2\211J\245\247&\223\253b\341BgM\27\212\361\205\251\65}?\204\200\363\373\361+\34g:\r\362\244\367g\353\"\275\337oJ\364\376\265\206L\357\257h\261\271\331\351\375\315\220)\357\337\322\303<\320\17\206\r\350\20%\327\32\364A\371R\223>\30\273\304\16\332\323\7\332\365\363C\247g.\314+\37\237\227_(\321\7QH\356\17P\262b\377\246\320\7\313\361\222\37\334\224\257\332\177\323\350\303Q\205:}h\24%\31\6B\364\341LOQY\326\325J0\337\31\365\b\bv\255r\334\223r\277\273" + "\257\374\311\360\374A\330+\7gW8\200\346\17o\234\224\305\61\333\325'\212\364Qq\227D\37\371$y\377\\5@\37\211\61\345\363\325\255L\3\302+\366\240\357B\34}\27:\f\372hB\233I\37\305\225 \322\311\223S*\345\243)\371\260\231>\232_4\254\202OL\32A{\364|\264G\367\244\254\16#{\305'\302n\v$\343\342\312$.\214\277\241\350\243\365S\25`\36-\315\376M\267\177c\336)\277\0\371d\271\244\241\271\234\216\35\346r\\\361\274\f\345\265m3\27\323G\203\221\231*}\\\244h\364\361H\321\240\217U\315)s\322\355,\365\307\223\362Z\262\232\332Nh\252rQG\214\337f\212>\276\252M\240\217\7\"N\270\363\343\225\355:}|\343\254\314\336\200u\230\35?\332\1\325av\330>\26R\345\225*}R$j\364I\231\251\323'\365-\250\370\207\214\377<\31k\t\321'\241\340\370\34\364\340\314[Vx|\316I\232\2\240\304E'\26Xf\307\2y.\377\34\330\f]\260\31\272\215Wn\270\216\25#E\334\356\272\227c\342\234\322\240\325G\305\262\370\232\243\321\212\70\22\n~$\24\2\31M;ya\"\304\210\204\204SHx{\275\214\227\276F5\360\67s\360\33'\350\30" + "\344\240\2\61a\23\61a\255\311\372N\264\71K\210\352\301\331\212v\20\321K\4*\371\210\220\270\266G+\323\221+\263/E\200n\310\231A\331\216\270\214>Y\35\255\222\350\223AIF\31L\200>-\17(\364\251\267\212\t\344O\33Fk\364\251\341\321\351\323\251\60~?\35(4\351\323\65\5\316\214zYd\343\323[\227.\331L\237y\343q\20\276p%\362gQ\266C\222\324\304\234 t\214\265\337\247\317\246V\253\364YW\223F\237]\333\250\323g+\307\31\364\331\r\1\223>\317\253\t\322\347U]\251\23\373y#\242w\364\371\224%K\371\213\205\234\tF\riX.\35\253\65t\261\370\307\254\65\203A\316\304\235\326\212y\270\323MJ\6a5T\261\bU,A-\313\320\265\1\372\242\322\272\334\36H\303\203N\227\224\346\261\66z%\374\0L\205\233\315\242/\274#E\372B\256\301\250mU\350z\301\70\217\350\213\1\257F_,\r\350\364\305`\255\201\212%\23K\326\64}D\332\264\246/KD\21\37\262\204\17I\306\207\22\30d\304\213\66\201,}Ye\271\f\262Q\270\263\226\23m\v\323\227\rh\16\216O\r/\230\36\253E\24\201\260i\0\1\223\27\4L5\f\277\374eTV\351\313v\t\203" + "\315W.c\205hQ8\346+\350Qb\n}\271\22\327\177U\24W\377\273\215\231\373\312\33\65\350\253f\315|wm\262L|\r;\366_E\375\re\274\330\65\344\37}5\315&\245c\315\357\370a\271q\253\350\253\376h\363\352c\275\321\246\65\217\225E\353\223{\326\226\2\16\20\205\327\303\25N\1#\324\331\261d\270\223\203\375ju\301\222\351\303\v\230E\306\257v\370j\220]\305\222-V\322\327\345\246\36>\36\364e\331*HO\207\351\353\342\256^^@\r$S\311\330eY\216\360\346\70\201\276n\262c\351\352\220\303\376\265R%\322\327\321z\351\377\24!\244\377\365\314@\0\321\341\220B_/\250\21v\256\367\256\242\257\327\203\31\224\276\276\241N\247o\212-\203\276\31Un\322\67\201\346\340vo\330\321\5\25a\372\306\\\272$D\337Ln\237\225mh\372&\201\261\277\271>5\366\67\67]i\217\255\322\267\36\34\347o\253SC\177\33\306\320\337\16D\202\364\355\222\261\31cO\235b\217\335\325=t\354e\364\355\372h\355r\372\256`Bh\5}W\33m\f\320w2\212\342\277\263bU\31\343\177\327\235\34\37i\213'\245\64@\27\276\321\1b\370\326\61\235\206\331\230\203,\335\327\3\274\351?\330\230\256C.\303Q\30\212\\\371n\305_\206\\\301\27]\344J\306<|wK\223\210&\21\22}_Z#\323\367\265^`2l\343\275N\243\357\233\2:}\337Zm\320\367\355\65&}\277\320^|\247/\226gX\20\362\251\21\362)\335\34+c\320\357\227\213\"}\277A\306\250\177G\222\351b>\253\316\243\213\303\253\4\272XW\t\26\366\352\354\"-H\27#5a\272xe\365\270\20]Lx\353\230\354rC\373\36'\264\317\354\313\213\33{\0\3(\322\300\230\251\323\305\301Z\247\326\227gQ0\345x)\17\307\356\222\rZ\272TU\0{<\25u\242K\243\373\23\71\321<\t\234\300KB\233\226\210\350\366\317\241\311\b>\277D\272\255\25\26\376\362\22A\ri\363\221\22\t\212\214.p\1\272\244\364(t)\"\t\v&0\256+\272\64\305\315\231\343\367aA|8k\331\202\7n\357\356N&\315G\314t\320l\227k\250\301\231x\362\331\2\372U\301X\221\223Fj\233\201\377\66\377A\277\345>z\210.\335 \361;\206'uU~\25\217\337\35\251V\225~(\264\64\372\301\v\354\332\17\315\300\256\375\20\31\60\351\207" + "\251\363\377,f8\252\301\23O\367m\346\26\267\374\320\35\371s\275\24\332\30z\366\345\16\331\256\fP\322\n\222~HH\31\r\226\350\207\33\64\221~\314S%\372q\254.\323\217\215F\200~\324d\205~\234\251\b\364#@F\27\267a\362\177\234/\352\364\343Z\tj\250\333\34\354J\"\243\350\247\342\200ot\212r'\232\242\334\211\"\264\325fg\334 \250O\fV\2\221\25\3\"+j\200\342\313\244\237Z\205\240\235\32u\212\314D6\312L_M\210~\232\37\260\62\202\263\320\210\275\316\216p3\216\254\343g\203@?\255kP\1X\325R\305\262\7g\267\231\367V\267\6\351\347\242f\314KF\306\261}V\16\326J~\236\6\370\r\205~\36\71A@\226@E\236#i\242\363\351\"\343X<\277F?7\330\343V\344(\336P\367\66\214\205o#\352\364\263n\343\201\235\202v7\31\34\303\226\355\224\350\347h\v\36\21=\370\243\2\375\334\201\263\366\363\200\202\321\227yu\373\303\240\237o\224L\372\245\60\231\26X\1]\313\315\303\245V>SE\375\62\62\"\322/\376.\211~\t\365\310\364\313Us\354\273=T\25b\300i\326\366\214~Y\346\327\351\227\215\66\21l90\237\351\346Za" + "\372\345&\241*D\277*\235\335\331\235\262Dy\332FOgLrA'\320\336\324\315pp\342r\277\"\307A\277.mR\27\250\6\375\272E4\351\357\346K\316E \25\27W;\367\352\232\203{\365vw\376\177:\255\244\275q\\\327\362\247p\367V\335\352\70\251\351\355<\304IuW*yq\252\363\335\273\243-\330\346\r-\372\222T\245\334\277\376\1<\"#\367\260\261@j\"1\34\34@\366\337I\177\241mj\36\355n\237T\36\177;6\v\377\332\251z\22\322\331\25\70\346\313V\311\204\244\36L\37I-m \365k\177\70\252[rG\365\177\275M:y\375d\223#u\335%\n\372\67:\251\351fC\216\202I\244f\301\274\220\372\334\375tc\16\244\357\250\353\325\267H\352\376(\247\345\304w\352\222\17'\265:\222y\341;\223\365]\275N\177Nt\320o\27]\377\60\7\333\r\323K\37F\347\312#qn\33\374\337\334\247\236d1\253\344\217\362:jy\243z\332\331\203\221\227\252\242\227\221\276\36}2)\353\3\22\64\362\324\207\16\212\313\22.]\4_\257\32\337\214\v?w[\337\254^\254sxs3\357c\362\7\373\7A\323\274\227W\23\332ff6/\352\311\357vnPV}\227^9\377\352No\257\254\63\362f\375" + "\305t\255\276\263\35ah\364\263q\16\362M0\337m:\351g\302\214\\C\274g\n\326\70^AP\217\224\202\327\63\357#Ob\201o\243\236\365\372\323\327\376\205X\213\226_\272\367\307\267U5#\r\260\226\252\376\24\246\36\354\346E\264\67\354h\232\222\341\211;\337\222\276\370\273\311I\271C\337\257\377C\33~@\237\262\316\61\206{\252kGlX\275\262\255\70P\353}\320+\277\331\310bS Ju$\372\216\352\311\36\6+\314\367\246\333\221^\221\343gQ\vW\341\345\375\335Y\227\240\224,\345\63\20\347$q<\226\233/\246\357\66{=\23\227\272\63G\201\204\324G5\363\207\265\202N\324\334o^\216\66\325\235\375n\351\25\36\222%<_\234\224O\352\33\62A=\357\311\71\r|\230\373\303\241\357\354\6\201\270t\346\30\325#?\221RT\337\272\377\230C1Q\332\217\314t\323w\221]\271`Mu\250\236\3" + "\334:\237\376\62\321Lm\300\33\241\224\307\276m) \326\207\201\372\215\35P=\310~\25\273\272\27\344\213\221_o\217\342\372\354\330\246\65A-/\324r\242\226\227jy\305\226\vZ6\251>G\237\205\346\331\6\312RY\366\334;\37\312@b|\27\304\322\362\206W=s\236_yc\1\274_\251O\301\70\365\310>\36\4r\201\f\22\225\33k\\y\310\63\231\243\357\6\214\341\213\243\240tE\216>\332M3\fV\333\37\345|3\367]\262]/a\23S\350\63\330F\300\370\331\314c\337)\370\"C\203\261\235~\360\321\2\231\331\374\377\366\31\\q\274\357SF\355\357\5{\325\27\357_\n\240\225\25\315\203\217Q\337\32\33\324M\240\316\264\204\313\30s\363\261\6\233\30\65\333\240y\b>\261\235\33\231\205A\330|\7\370l\35\302\261\316n\300`\365\352\371\355\300\226\234\261\362\215\220pO\235lF\223\310?g\230\214A\6\346\371i\343`X\254\365\253\17\7\343\30vc\264\216\60\307\30lw\354\230\30\335\222\371~\252\27<\355\203\330[\302\346\241\377\343\17'(8\b\23\326\224\346[b\322\230\301\270\63\256\214e\5\315W\372\221\260\214Qv{6aO\246\325+^\214" + "\253\243\231\335U\31\v\255\303g\377\252~\247p\322\327&\236T\376\301\25\f\361G\nI\335\232\320\376o\215\345o.\5\243e\256N=\4\372n}\37G\253\220\245\215\206l\234J7\206\273\240\222)\16\63\366A]IA\366Af\20t8iy\266\250xF;\333u\24rjPO\301\330N\300\3#\337\207\216o\356\22\306\71\363\335\364\266\245\266j\233\25\240W\233@\324\225\240AH\232\256\363\235\226\365\375\352O1I\274?\222\63I\2p\210\272faw\342\341\323\326|7\335\206\32I}\212\251\215\276\310\277\223\374{\231\177\257\362\357\247\374\373K\376}\327\310\357\207,\277\317\362G8%\226QP[\200\245yb\253:*9\267\17\61\ra\0\200\200\306,_\274\67\221.p\20g\331\207>&6W\nF 0\220\314\177\355\17k\nQ\373m\5\377\317\335?\237\273\361\331\255\265\355F\\c\232_\214\350\234\21\233\255\205e\5\367\200s%\246o\373\265\272=\35)\304\243\331\220\226(*\247xW\254W\343\64\3\373\261O\24\306P\234\2\277T\334aP\266\36\66\303\313\332\b\35\360\7\300\32d\321\342\5\250\307\334\260\36\202\337\212q\347}\b\324\345\271\235\347\325\276\352\271" + "\20\223\373\357\4\27\317#Q\272\366\201\63\336I\177%\226\363\254Da\277\333\63\346\370\240f\375I\25\240\334\370@\0\303\207`x\375\4\337\312i\0\360\1\21Pq\301\346J\311wj2\bQ\325\335\336\366\7\323\251\205\r4\0\352\375q\0V\366i\241U5$*\"\327\34\216\227^\236\17\205(\250;jm\177\310LA\211\"\325\277(r\340\252\353\377\366\366\230c\341\"\223\346:\36\235\231\214\344\313!\36`\365\5mI<\315Q\326j\364AB\26\22p\31\62\260\22r)\26L\357(h\331C\360\fT\246#f\230\346`vT\"/\7\243\357\70\353Z\332\312\206\277\202\272\312/\274\373bx\276\70\63\5\1\274\314\30\246\353\350]\237\210\365\274J%\335M\276\266E\274|\254\342\325 \bFt\361 \366c\303\367\214\351\364\337\236bRy\237s\343\354:W\b5\354\205@\201=\5\360\30\61\363wrM1\327jo\311\265Q\230\344Q\315$\205\375F\325_rX,\373\16)c0hS\3.\207t\271\366\342\241\231<\224w`\265R\260tp\302E\260\335\v\347\330\374\240U\206O\311\244HQ\367\35i\1R\214\236^}\36\261\263\221\243\274\37\336Y\b'\344\336\25%\235\265\232\374\220\214\315\211\203<" + "\254\211\265\305\363y\314 \357|\24\270\363\35\256\312\374$\262\276\4q~\350\251sy>6sG&\324\261\370\357\201_.\23\343\247j)>\236\272\324\340\71%\335\314\203\357\231F\235\273\307\\\360\324\345J\f^ x\277\261\221\334I\315L\312$S\347\370\27e,\304i\22i!\366\335n\17\210J{A\230\265c\270\26\254j\36)\345i\237\317\324\324T8K5\334\350BI<\34\352\202\17\27\37\177\321\v\332\r\243Oy\200h\37\317\224\232\216\242\375cH$\267dBZ\223a^+\347\304\271\207ZF\252\275\200\252\262\6z)8\231\317\266\236\313\265\230`\325\271\177#^\214c\246\205\v\346\232\354\4\31\325\254\354-'m\344E\0\350\371\65x\254\220=\37\250\255\n8{G]\320\23\71:\372\220\30\246\314\316K\334}\3\37:\233\300\266W\254\t\333\2\34\7\324\260\262vg\17\353\234*\212\221\343\20\376\202\60q\320\323]\337Y\204\323PZ,{\347\6\26\25\370\266,\346\312\27\223\262\6\314\345\227\217\211\64\b\263\4^FA\npHyQ\354\215\213l\341\330\37HrF\324\331w,\334\210\257R\323\265\357\245\304\332\246W\23\250\221\275\344\333\23eJ\206\320~\265\61" + "\25\272,\251c\330y\r\357\332\27)\301\274\260\333\255\335\364.\235\212f\221\367\25\362~e\2`\6`\t\365\312\61:\300'\371\374\332\233\320j\264\63l\345\370\200\337q\203\1,\230C\303\37\314f\217\221\20\316V\rZ\310\205\205\316\363$u\324Qz8\222\64\370\375<\334K\212\257\t\250\254\251\356\224\331A\362\60\366Wz\305\352\340\304\234m\7\351\226\327\1\324]\243\252\342\27F\235\255\32QhE\365`\2/O\220\\\312>\350N$\211\205J\350\337\250|\245\16\362\302\363\221\376ls\"\304\251%\231\324\7\312\214fn\332\326\322^8\372}h)\360\372\307A\b\206Vw(\231U\213\23\2\243\61^%\6\61V<\346@\325\241AX\356\334\272u\364\314\205\341\270\232\252\301\223\67\212\315\235MU 1\255\276\300\341\22\207\t\16W\2,\216A\313%%m\27\314\276\303\341\3\16\357q\370(\210)\255\267\373\256\262JI\20\20\207\22dR<\265\272\326\303\305_\247&\3E)\321\r\b\314\302c\315\325\230\23\351\317\223\315hrav;\n\245`\325\223\61\367\323\327\271\215\303<\314G\201\352l^tWP\27\241\325\0y\360\22\270L\276\21\27\336\321\316\324" + "\253\67\373J\370QYbAu\200\65I\215\323H\5#\f\254w&4\31Je\246\364\34\37\351\310jS\213\276\24\214\302\36\363z\20d\322>$s\20\361\b)\371\262\343\\jumQ\353C\260\7\23Ne\270\242\215\27\337\2\6p\251\322Gvl\367\2\222mR\355h\224.\227\220\270?\317\335P*\342\240\317GADf\272\316\307\332\17\340\362\374O5\17S\230\220\320\200h\262\366\360\220\262\66\214\232\361\250\326\363\271h8\232V\334$\2\317\252\337#\242\206w c\255^m\22\323Qz%\352d\31\336\71\n\231\34\240c\264\66A2x\240\4\233B\26 \200\4\313A\256q\322\n\214\223\254\241\16*\343|:\35)\223\63\375Y&X\253\221\202\272\373ir\245\347?O\177~\376YMc4\275K\271w\263\353;>wy\305\334\332\277RX;\244\20\316\35>\324=\17Y\37N!\345\306\17{\260)\233\215\242\232:+\244\255\67\314\177p\373\60U\336\203\352R\1\373\212\245\304\221\341\363\325P(\4\200\360\31\252\220\314\25\327\360!\301\271\313\315=\333\322\34(\230b\322\7/\234\b\5dns\300z\225\327r\222\352#5%\270\207\26d5]\206\322\225\341<6\31\311W#\371r$\277S\271\255P\327\315\7\62" + "\351\255m\256G\327\376\62\222/F\362\373\346M\376\70\232\377\60\232\377\304\276\273\263\233\67\337\203;q\366[{~]8\300\316p5\250f\f\361\261t A\27*\t\304\262Q\302B>\257\63\232\322\62\263!x\33\324\371\360\317g\245\376C\317\273\302\333\365v+\1\364\326E^\330\270\21\37\336\62X\235\230\374\264\355I\1[\220\274\356@\363\337\352\204DG\265\240\277\35M;~{\275t\30\376J\214\60\222\352\226\322\356y\264\221\324\267\237dMX|\365\217\232\311A\273F5W\1\250\6\365\r\346\336Pjf\272\227\263\353j\245~\335\355\244\321\62\347\37Q\373f\340f\376eS4\337\214\210\337}\237\242m\245P2\201b\322\313`I\260\200Sf\363\247s\224;?r&\277xm\305\253M\37\254a\347\227\356@\360\266e\205\232\235\24N\273@jz\360|Y\233\233a\376\30\31\37;\n\306\241I\373\305\257!\200\2\211(n\34\367\20\361=\345h;t\304!\16A\204\64\250j\313\16*=\357{\324>\30\277\250\333\241\363\61\334>\334\7dBz\24L\212\345\201\21-\223\66\b\177\36:`\354\343\316\1\373D\2\362\225\7\"\226Kh\363l\212@\363\334[\21\206O|Mg\223\17o\317iD" + "\252Ezx\341*-\355\365\322\231\335\360\235!\21\5\364\350\5\210!};JO\236\34\357\253\366\336\324\224\rovt\326YVS5W3\265\20\236I\211\237\315<\307\307HQ\261\357\213\243G\340}\251\237\207\255`\331\274\236\27\222\342QZ@\271\250Yx\326\243e\213\30\244\331\32\274\nD\337\207-YN\262|\252F\335S\20eH\206\206\336\262\64\326\33\200\242\f\360\345\r\3\20\v\0@u\356?\vH9\311\305\367\f\200\201\255\323\62\366a=\245l\304;\313\224\330\t3\250\222\377\62\61\272\tf\230\233@\333\336\71\351p\273\227\267\257\312>\f\235ta\201^2c\267CC\301\350\7K\33\312\4j\346z^\\X\347\1\63\207,\343\204\274LF\34\6\306\351{\266f\30\70\263\26b3\321\3\275\251\315\271L]\27\36m\313L" + "\16\27\22\300\315\302$\223\3L \31!-v\335\31\227\211\255\36\305\372\224\37U\320\241A\213\16xw\335\361\r\247\234\362\33\351F\342\32`/\265c\0j\230\335\305&\257\5\220.\253\341[\204\275\71u\35L$\365o\n^]\250\211\272TW\352\235z\337|T\37\232O\231\\\230\315\320.\325\217\376H9\rv\355x\246\372\303\335\261x\n\213\65\215\254^\r\254X\23\314\334\365BS\274,p&\1`\202\245\230g\220\235m'\360\264\354\311\r\223\202\1\16-\301\277\\\366\205\325\24%\302M\206\206g\37\332\70|wMf\273U\342\217Q\201V\nXA\2\200\215\276PV\250\242\30\245\21\71\rd\352\36\306\327\241\243-\b.9;\231nSa\16m\1\240>\276\266Hr\357\4P6\246\346Yp\304\6Q\221\65&Q'\313A\355|\353\17\202t\261>\366\267\303\236\25\272/0\251\5n\313:\26$\37\257\352WBpF\200O\375\252\202&_vb\4\274\376\363\5%\332\232Jg\347\354Wf\370J\302`\342M[\3IH\226\264\356\243\270\241\324\"\300R\360=!\"\231\351H\203L\311\b\231E$D\252t\335\221\335\320\27\272\226\65\60\35N\32\361\214\206\213z\20#\360\212\344\bc\201\331\325\317 \371;o\375" + "\230\215\225\16=,\265\374\244\226\27\277\250\345\273f\371A-\337\67\313\217\352\226\234\320\375\314\36\316\320\t}\260\213\341\70\31\325\5\272\374\1\345-K\267\255\243\202g\27E\230\24\341\262\bW\203\351\304<\306:\315S(\257\232\363'\375n\234mE\241OAv>X\1\346\272\63\235=\366\216\317\2\266\252\21!\210\201l\227\27\363R4\307O\205\210RT>GI\263m\273e\254O\341\204\0T9\253!\321U\227\272\265\377\23\325,\310\373g\201\237(i\250\337\325b\345\332\310f\344;<\17n|\340\7\30=\34\63]i@f\222\t[\261\61\205f\32\67\33\253A}yx\353\217G\n\30\352L\331\365\62\364\26\234+\227$\272,\6_T\360\331\254y\373`6\311\362\325\210\351\203%d|\201\336\v6\210\315\262C\274u\314\f\32uo\17\235\210*c\351\236\337!\r\254\372uL6\365y\16\215\277\31\63q\336\243\263G$\211\22h\231\"Vng\376\60\241\35\\\b&V\231\224D\1C\303\70\371\332\310X\26m\216\24\7t\0-\251%0?Y\320\66\253\311n\345\370/r.\233\274\26e\327&\251\301y\362\307\305\341\21\305\354K\33\363~\5\24\361\317\35\371R(0\373\203\277J\346\217\222" + "\nl\274\231\62\242\371Pw\300\317\244\16\177\5\32\246D\336\212\212\253\63\373~-\363\304\236I\377\337\330\225u\267\315cI\376\24\276\314>n\264dg\231}b'n\347\313\322:\261\277\336\336h\tv\330\241H\35\202J\332\337\257\37\324\255\2@\352\270\373\314\213\211\205\222H,w\251[\27\16\304\362\2\326\253Z\34\34\225`\233\365\231\233\60)\363;P\207\303s\37\375o\205\366(9\201\256\210n\241\37.`)\3\250\256\200\242\27\216\260i\204\34\60!6\311\214?BE\311\3V`\0H\373nWC\26\303\4\t\bZx\334\207{(O\271M\341f\341\343|zJ\237\344\313\344\350\234\253\347\201OjV\5+ \361\316`\220\250\16\271\67o\250+C\22 \26\214\214\22\377Do\366\301G\274\300\321Y\202\311:L\35>\27#9.\32Kq\"\307GOo\t\356\364\210\217\366~\304j\200$V\225\330\270*\214\25\331\376\274\202\71h\305\34R\260\311\340\313\305\321\206~3-\355X\241\260\246E_,\32\210[\311\332\65\212\201ey?\211T\203\na8\321RXY\361\262\346\345\234\227\v\203A\233~JH\332e\264d\377!\0\253\331%\374\277;\306\355\301\333\343\64\365X*E\fl\216{\6p-" + "\374\17\71\337n\207\303\344\31u&\17\221\203J\16_*\177\216\364\266\307F\361\223\261\221u\v\332\27v\251\367p\t|\315\270\4\r\313\331W\177\304\374\271\323V\340\332\330\275?\342\3\206y\7U\340i3\207\270\4\364\214@\343\0\321B|5}\204\213\314\376\303\223\325\33\272\"qj\261@k\263\36G\207\6\30\251\254\332\216xc\177\257\354\357\245\341\364\260\340\336\354F\37\202b/\16a\30\272\62\f\221\263(\374\240 \7\321\200ng\260\336\252\26\301\245\347\6(\35\277\376\65\243\213\271o\366\241\323\256,\223!\270\315\331\251\314=\214\353\374\f\353\34ABs\213\324`Z\361LZQ\321~\231\61\r\234\277\273\21\340e;%-\315\373\240\26!\243\261\0F\330jV\276\363\30\r\330e\210\3Vs\254\377\v\243Zh*\301\rE\236\336\365;lv\213+r\rm\306aW\341\317q\233\66E|\257\357\355\226z\353}\215\357kZ\316\310[\373\373\316\376^\333\337\337\330\337\33\241T\233\270B\203\273y\332\215C\r\217\326\230\212\360W\nl*\361\217\325\277\33@k\363\r\34\343]\26\221\327c\322y\214\25I\307\335\36\367@b\22}\303]C\236\243\b\237-T" + "\246i\355\233#UeK\305\226~+#\262),p\25\255\262\71^d\341K\252\334\302\35\33\304\35\303\352\312x\353[o#\263\332Hr\350\232`\340\370\367\210M\366\66\316\337\344m\27\5<\230#P\360\333nW\332\344\1_5qI\271\364\375?5a\350\343\f\335+$\220\274\\,\371dH\362Ji\327\65\335\366\233\1\314\0\70\322\302\241F\322\220g\32\234\237\240\70D\207,\212\250f?c\215\273v\321\n9\23o\214CGa\214=|\6h\245B\24\361\271f\335\16\261~z\367i\253\0\341\352\315\237\217a\362\244\62!40o\330t\261\276`\r\324\262\255R\253\314\373\315\260\263\340[M\345\2\70\272\235L2n\261\207\23\1\22\201~|\f\260\333\375\323\374\303\63\200\64d\371A\234\234R\244T\351\233\17\337\16r5X'\372\312y\221\vK\247U\363P\350\334\253R\27>\345\232if\273\247T\365\342p\300\20\61\345:U\315\244\212\61\323T''\225\6!\267\325pL\277\227D\343\233\307\266#\361\345f\370\16[\301\36\362#\20\61\331y\327(\203f\210\340\66\266\231\226\r\321\7\65b\337\261A\357\61w\352\360L\1\200u\242\21\307\373\374\256\246\307\214\255\367l;9[C\3#\27\277ruDX!A\245\356\331\236\62:?\226\343*\264\224\246\346\277Q;\5UW\257S\375S\23\243d\307}\351n{l\323\270\340h c\200M!\336\"\272jTN\343r\276=\366\337\242\235\30u\24\254\65\343\22\377\64\214\273\246/ue/H6\252F\301\370.l\241\344@k\315\251\27W\330G?\20\23Q\3\344\355\66\65\2\262\320\206Q\346\0\245H\374\241R\241\350/,1\326\321W\b\201\343Ts\301\263l\34\361\350sf\227\23\256\t\354va" + "\32\357w\276\217}O\205\210\272\363\3\277L\216\315\312\251p\236Z\326\251\345\2\303\335\1\331\340\365\\\327\265\256\27\324\5ZK\220fl(+\216\215\377\223\232\355c\21\62\213\251\37\b\211Z5JH^_\251\376\322\321,0\363\243\226\323\2\23\242\367\223\320\21z!H\24\200[H\342\32\374\261\264\351%\37\236g\245\333\336R\345\272\331\371\240\36E\26\211\350\64\240\344[|\30p\307\320\331\340\322\322%\247\257kB\374R,\\\217\245\334\30\351\341\273\212\220\263M~\211WN<\335\276} \241\322A\334r\363%\330\fV\207\345\65\4d!\354\375\204\35\341G\362S\bT\tBT\215\333u\245\353\271\256k^\245\324\256\233\236\222=1\312\313\274D\355\314\60\207\212\374\330\v\307\353+\325_\252\376\32\317\301\375\215\2\60P(B\5\61\310\36cE8\b)f7\0\213H\230[\351\272\326\365\234\344\226\71.\252Q'\246\227\307\374\247!\16\t\310E\202\236\363\244\66\217\275\307\66\0\205\21\241\240]\34\327H0\204`d\255\212\261\333 \231(\4R\"\6\232\211\364~\250\353)T\202lE\\\21\275\66\342\300\337B\342\355\32\333\345'\333\365\20" + "zXww\bDR\301@\"4\7\217\356lv\360\207\353\273\357Uf\233 p\346\247v\351\336(\344~X`\212\4r\261\365\227\371\n;L\1<\36\364\346\b\21\241f<\273xZ\234\21\206\370\374\3Pp[\272\233v\312Z+\336\34 \227\227-\224\307\210|\266\1\372$\225\60\204\v/\273\274\347<\354U'\1\255\353Z\327\363S\243\230\341<\212V\23\251%aPw\32u\316\331Z@I\323\316P\336r/[\302X\376\1\276\r\205\246XV\343P\337y\37\22\3\207\225OM\202\202\315*\372\346YN,\27\223*\304\7\60\265\1\244\340\177\210J\304r\1\332P[\364Z\302" + "\300m\332\3\200\306)\324\346\375l} \24D\362\357?\204|#Z\245\4\251vc\237\331\177\272\241z\203\25E0I\310\342\222oZ\25\276)c$\rb$\320k\214\247\344\321\307\333ZD,\2\373\361\312U\211w\343^\267M\316\17,\300k\262W\337\354\b\207\201\201\62'\n\333\272\67\242\311\210\366qP;\21fc\351\203\263\235\275xYH\260\251\0u\v\267\3S\342\311\222?\335\333\241\240\302%@\204\307\354\23\363\b\257y\264@\220\364I\251K\321\0\304=\fC\237\367\215\"\373\222\206v\345\215x\365\342e\277\353;X\ft\1\245\35\70\260\337\343\62\324H\323\22\343\4\250\314@\361\274\272\270\65\221*\227\r\363[ \302\270\233\60\b\305\36t\vC\260X\36a2\370\224\24\347\371\\)\224>tf\213\226L\276>\6F\252\225\350\272\244\355\242\27\4\bR\263%h\230p\3\300\206\201\315b\363InB\240\262a\236\2\272\331\242\251\60>\352[\233w\30\217\237\232\255W\6\320\252:\341\262\227\34\66\314J\316m\323\234\372\303\24\325\360\266\331)\246\211\210\254cN\336\357=M\177lem\353\210X\267]JP\242\333-\346\23\276\67\341\255\276\344\r\r\3ER\220" + "\265\220\7\v\361aP/\353U\362\200\327\214\n\234\233:\270\250\62\16\223>\"$H ~\312\60\234W\337+\1\33/\".\6\25\350i\253\224(\315\210z\225\nk\370F\333\257\34\b\v\321\32\231\23o\2* \210\64\263\226\264\240Y\323\304qj\335g\f<\276\246\20\364A\206\350\203\317\324{\267\354\346..\335'\237FF3\f\350\223O\21\376\2s\311\225\320-}\370\70\263\16>g\320\334\205\334L\320,\305D\376\204\220\225\312\24(\237\277vjp\357\232y\27\244\333S\352\242\305\307\316\267O}\263o'\17\316s\200\35\226\327/l\22o,\323\266_\216\321<\335\f\220\5\331\350p\303T\272\34vOd\332\242\r\5\336\207\22y\260?\206\231\305\314Y\203\214W\t`D\\\22@{\30l\243\60b\21\216\303\217\201\234\272yV\252\263\n\324&j%\364\315v.\33\232\222\20{\276\177\204\366\20\300\360S\263\337\27\325\214\307\264X\215\367\277\220\252\311\226\64\35%\312\304p4\240W\23!E\333\26(R\210\240\344\207vB\211\30\316M/\16\301\255\61\6\b\225\276\331\357\7\303\267\5\253\24/;\265\224\3\32\\\22v\267C\250(\321\216\343\"]\205\t\206\34A\226\70*" + "\254\350\324\210\370\375\263mA\201\33R%=\376?\32-\300E\v\354\0f\331?\251_.\360?\376.R\271\243A\30\342\222\37\247c\323\245~E\16\376\361\315\256k\357\335f\33@\v\261\274\271\336\347{\30t$\323II\351\26 \315\321_f\315Z~\"vr\336wx\257y]\213\246\264P\311,[\n\345=\tp\331kI5r!\321\312\270\364\17\60Zm\323~\1s\0\374\230\255\257\251`\267O\206\355@\313\322\347Zm\234\234U\374\340\320E\305\342\336\241\306\356\363Mu\261Y<\215\303\353Z\354\275\345\362Rb\36\346C8Oi\340\243\237\216\0o;m\344\255Y\373\274\331\1\215\6\30\255\266\330x\232=P\234irG\252\217\330*\n\206\23{\240\377\361\311+eG\251\274w-\263T\206\35\254\207}S24\232\316O\23\201\201\334\70\217\351k\231\t\222\6\235P\36f\316\301\324\2\64`\354\272\215\177\361\203\177\343\36\313\244\230\335\3FT\375\367\365M\234\322\314Mqr\242K\262\246Z\326\206\202T\254\\\24\t\6\20L\250\361\242\221\211\250\377V\177\304A\7/y\221\301\b\327\366\334Z\334\242?\17\203\245\224\323\306'N\nG\30\312w{D\236}\363\60Y\f\333(|\26%\212\3" + "\216\350V\275l-\250\376I\273\6V\301Ul\f\322MDmAx-\340I\355s\224\360\354\61^u;\214\v^\365\202\225\375\5!\277\371Q\2\371\245\4(\275H\205W\251\360\62\25^\3\354\371A\222x\333\364\256p\242\200\377\341w\335\r\30\22r\301,~b\36\240o\30\231\255,Q\202{\364\1:~\304\250\26\22\"S\362\350*(\217\314\315\30\211\200\324\357\60`\307\321G\332\372\261\357\210X\354\207\21\31\201\304\324Ru\247\272\310\f\356\347\336\333C\301S\330\373\311EGp(!\6@\354\67\240\63\241\260i\372vK\255\232\331W\205G\34\321\216\307\252\224\336\300N\33\372tv\205\252`bu\26w\24\221\345\367pV\214\210\1\\\277\207E\345dK1a\30\23\311_9_\310_\354a\370\5\274b-\20\354G\225n9\266\236\70\23\234\343\224wCD\t\17\365\27_\245\354\213\317Q\22\342Z\4eUT.u\32\325,-\221\220\66\317\34\374\227\353\253\206nh\246\32h\1\"\301x\322e\v\237\31+-\222\200\306)\253\302\302Rw \7\330\301\3\324\320\267\310\31\6\273\206\371t+^\327\265)\366\225\375]+\347\343F\244\36g\313\353\272\371s;E\304\rj\nx\230\307\224\0\nG='\213\354" + "\220\345\277?\230\30\4\270\241l\357\267|5\212I\210\323Y\35oE\347\252\364\252\256\336\204\353\266?&\313\267=\232\252\255\315\2\210\352q\273l\340\335\254,\265?\270v\265y\257\360\65\342\306\244I\3\244\30a\277q2~}|k\330\315{|c\242\311g[\n\251\366\30s\24\350\37B>\333gG\205\303}\252B,C\354\321\273\241\325\263\4b(\271\270\260$\257X\323\36\330\264a\32:A\262\26\264\33\247`(\315[P\332\210\214\334\200d\31\353\367\20\316y\323\t\231\207\r\237X\\\357\204\b8V\337\207!\356\325\61e9\240\221&\372\374\246;\274\237\65\220\305<\21\67\65\272p(\231\177p\237\340GL%\301\23\6\300C\246\361\b\252[WkwQ\235\273\27b\25\223\220\335>\266\370\222\17\343\360\213y{\201\224\66\70\7\370\32\260\277\310Yp9\226g\220X\353Q\236\303\17F(\322\322\36\372\342;-Z\312\201Vi\233!\341I\203\255qP\307\357\206n\362g\221\71\256p^\351\321\335\230\201\203\71\371Mg\26\3w9b\370FM/\261f\232\226\63\277\266\330\227\267mg[\222pe\24\276\217>N\\7<\36\275c\355m\34\242\270:\315\22\341\276P\202\260*\313\30" + "\372\352\244~~R_\237\324/\270\33\345=\240B\274\230%\340X\250-?T\22\256\62+F\5\263@\24\7\362_a\372{{\335\370\31X\212q\243\251T+\305\325>\221\230\64*\240\t)\254t\7p\306\327!~Up\361[\6\265\301/\314\35\5\350\276^\321$+\r\353\323\206\363\323\206\213\323\206\27l\200/\257\63@\232\203\321\247\7\322\374\16\241\360?\347g\214\20*\333\214\321\0\233 \" Cb\354\5o\31\61n\17\310\334r\213 \263\3\255\v\215\264e\266C\217\225\325\334D\30>\244z\346\334b\335\322\257\207\323k\373\210y%@\307\70C\254\222\353\31D\243\344\262J9\352\322\250\204\230+cI\333\342\275\305\264\220\71\217\220<\353\33\314\3k\245\27\346^\351f\25+e\26^pd)\340\35\261\355\260\263e43d}\207<\254\65\314E\21nN\23\375\224\311\273lZk\26\244\301\23\5\212g\3\374\334\207\241\333y\35\62\240e8\227\205\256\354?\270\367\224f\214\177`\267Bh\375\2\242;\243\17X\373\326k\357g,\307\220\65(\30\f?v\346\tO9\0$\4dA=\342\303\270S\\\211\340H9\351\307h\265\23[\277\370m\316t\245\1\234\250V\306\360uom\276\307&\323Ohg(v\205" + "\63\232\316\256\232\251\71\0y\272\361}}j\265(\211\331Y\20pLg\232\220Z\6\60\252\35\b\264\300\334]\330\275v\254B\330\302y\260\252d\206U\300\b\344]\212\203Q\376\66A#\20f\315\244 \206e\36\223X\"2\212\260 m?\241\240;2q,\250A.\16\276\273y(l\32,*\21\333\226\234\334<^\264\200\71\365\300\255\271\34>\r\335\60\r1\226\326\36$\2S\260\202\65\62\b~FJ\342/\255\216p+\203\372\21\236\61>\212e\276\235,\356\3<_\1\235|\330\302\335waN\313\\M\241\343qI\27\227\202\206\234\356\326\370\n!\322\320\305)\f_\265\336\244\r.\207\376\30\324]\262J\323\253\363\23\271V\34\rh\312R\225\232\324\361!\242\25>E\246\343\331\247v\342\342G\276\63\201u\227\361t\34\377\301\260\254\235\255\2\332\374}\232=\210\354B\\;\335\17\20\220\273v\n\266\302\315\302%\327\351\37\374h\251&\331M\215(Y\4\376\16G\32_\230\275\303\1\202vU\212\353Rv\350\5\233(90\325\256_H\314Fo\316\1(\30\20T\23\341l\350\225\263\340" + "\354\236P\377\tI\23\\98\357q\353{\317\70\26Bl&\220\242\260\337\216\255=?\225\7\247\236\260>\32\70\376\322Q@A\200u\342}\370\30\267:\201F\214\7\274\b\242x\7\277\313AP{\1\254&\333\340`\345v\4\307K\336\315\354\200,\260\237\363F\241\\\345=X\303m\17\267\310\316\240\260\360I9\342\340\326\217\337}:\271q`\362\252J\213\364gd\247%\355\61\rFd]%\1Y\232o\243#0\245f\336\223\362\244\356\342\226q\331\\@\337\372\371\276\374\372Ss\337\362\0Q\265p\242\323\60\371P\332\315ZG^q\230\257\217j\371\201\371A\21g\364\3\61\37J\300\32\341,y\200\312F8\306Y8<\32\344\315_\332\240 G\255\323\335\364MY\212l\367\32A\31\251\30\304RQ\264\215\343X2\353\n\264F-y\315\204\30(]}}\306\221,\274\212\16\322\201\340$\212\344\307\62\233\211x\263\235\25e\200\360&\225uW4h\273\274\357\34\216\213p\327C\327\r\362\30-xs?\374\220\345\256\63\67p\276\345\64\350\360\270\374~j\305%5\221{~\351\233}\246\341\315V\23\301I\354\270S\334-9\375\306\64\266\63\201kY\2\324\313\357{\254=\254\66W\323d\363\221,\277" + "c@c8\302\326YtK=\246l\325\234\256\337\306C?9*s\346e\275p>\230\341\211\34J\312AhME\35\356\360\216\220\264\371\204\35\307S\276\64c@\v\273'\262\257\263\274\225\26\242,\26\256\256\\!\231T\22\222\324.,\327\332\\z&F\267\356\216<\326\246\324\4\300\376\300ff\227\312\352\70\64\312ZU\32\23\66\234\231\361\307Q\221|~Je\35V\271\3\26_\240\0\262\201\270Z\211ve\302i\203m3?\347\16\322\370\36\300h\27\352\22\f\215J\325^=T4MyCu[\377\251\71(\202'\367\33\232\235V\r\177\251\344h\334\36cX\327b\f\277\33\306\311\377\305\16pp\267\3\220\323+\34\36l.\1\214\33\220\206B|@\220;o\30\271\63\273\35@\rX\312\64m\321\331\356\264\63\354gt,\205\320H\205\237\23T\241j\2\244h\203\316\344h\26\243\32V\275=PX\250\211\305a\307\301Q\336\337\204\365\353\230|\303#L\35\321-\214\360\37\316\276\64Ox\300\304T/\301\210\34~)\321\210\344\5\62s\251\202\206&\1\67\16\363\64\364\330\v\315\342\234A\20\230\213KJ@\7f\377:\25\316+\256Q\333]\306\250X\361\262\346\245P\312h\212\301m\341\70\222\210\301(T9\30b\346\273D\340an\226o\277\22\334't\256\262\236\225n\205!\311x1\224p$s\217\340\fH\360\25\343\36\357P\322F|:(\264\304\355\256-AR\272\61\363\225\351\352\233\310\314\22\275G\301=\374X,\206\314s-\307}\361\260\203\r\230\371n\231\345\212\224\271r\354\243R\303" + "\205I\220\344\bw\264\234\333\334u\5\372\372\315\330F\\\267\375\5\246\310iS\271k\303^\26\67\276\331\16<6\275\334B\371\305\333J\225y\362\262|7O\21.\354\303\311\347\212\17X\276\342\371\236\224>\311/ f7\227\257\321\30\30\236\352r\346\333\t\274g\373\357\264%\25f\7u\303\255\315\24\262-\215\225\1\7S\360d\206\254\262\260\207\21\71\365)q\\\22\177v\236\324\262\211\252\363\231\333\334s\267q\265\222J\25\62\224\362\357\65\26\32\2\n\202`\247\311\3\317\302\36\201\221Co\f\272P({}\271\250]\345A,\3W\362iK\246-o\237u\1nac(w\315\33\341\204\2j\361\302\224\324^\177\4\257@'\327\375\315{\360\234\366\346\32_\371{ \341vT\367\340\310J\357\203\210\177r\214\343\234\265\200\335D\354\22=e%p\207,\317I\345\264*I\\\377S\0\276i\341o-Z\v\227k\331\263~\366\376\325\363\255\177\375[\376?\337\357\376\372\375\357\372\346\336\234\217p@\333\f\322\276\33\217\250\17 \b\f\3\17\n\345\60\t\231\272\370\303\5\327\61\311\367\70e\304x\214\345\70\314\323\63\62\313\330[p\t!\326\310t\352\271\62" + "A\36 \222#^-\25\305\nI\251Mt\30\222\327?\217'i\6\263\\\247}\257\315\310\270\363,\2\247\247\305\343 4\362\r\312\207\317\231\253\224\217s/B\33d\336\"\346\325\63\247\364F\333\375\231\306u\366\264\271i$\214I)PE\344\251\341\360\325o\237\260\62m\323\301Y\240*\345[k\b\346\247j\224\240\360\254\261\304\202\245\216\322\315\317\264}a[>\253\304\315\316*\301\6\332\17aF\345\0L3\253\333q\305<\350\301\376+@P\344E\225\317\260\27\232o\307\334w\360*~h\373\207T6LA\345D\334\222\5\257y~\265~8\204\223m\350N6i\256\62rA\233\300\351\63\313\326\212'dd<\236\310$^%\267\300\32\306\371s\3\244V\333g\310\26-\30\231y\33g\211(%@B\205\277\277\264\17ph\357\221=\333\323\367\3*\374\270\350\347\216*\r\30\23H\263\231\333@\270\216\315\371\371t\216\331,8\254\223\214\347-\346\355\314\33\256\233t.\\t'\343\312\244\351\b\377\60n\17o\307t`\225\246\bi Q\36\302\327\306\230\333\203\301\32\271\227\b\315G\312\200\341\354Z\312\205\300+\311L\277\24\16\6\231\16\357\357\367ys\224\244H\31\36" + "\205\272;N.\325\256\333\276\r_\1&*\200\234\255\335\222H\332\23\200\231\33\254<\370\240|'N,(g\376><\310\310\207\365\17Z\310\64\210X `\206\275\t\206\320\325Eg\251\330>y\21>{\236Y\r\24\371;\271\22\317<\230\313g\260\177z\330\225@\237\204\305<\343#\220*\216#\33\66~\334\37\247\323\356\4[c\25\352U\f1\251\371B\224\177\4\370x6\227\31\370\276\347\301+\2\367\364\264\311A\325\21\377\272S\356\271\"P\f\221p\0EI\20\222\243\211)C[\275{\262\303\273\325\256\240\271$\234\21\271\372v\302\261\275\362\f\224\221\255Z\200\246PY\234C\236\266T\216\207\210\262(\264Pb:\205\211H\30\22\320\271F!8\342\60[w\204\300\243@\307\321v/.T8\177\251\302\253\265\nH\362\v5\36[\361\217\35\254a\3n\35\264\\\34\20\36hj\330\23\17\27D\304\1\314\317\7o\236U\323\271\17\355.>|\354\365\307\321\245C\372\67\307I\207)T\372o\nK!\363\370\243\256\32\371\241hmD\263Z\274\350\24\357\270\25\367\263\370\"\231\266\342]\211\315\322B)\347Xj\207R\310\20\f\326\351\363\240\337\265[\351\211\277'\316^\316M\246{/t_\261t\321\262H!\27F,W\241\342\5\65\261F5\37\222\212\252\331\227\352HLn\2\341\\\244r\30\23\240\223\177k_\363\\\7\327\301iO\327\352\320c\26yS\346\331\326q\242\32\310\256\r\254\271\347!\366\224\355M\316\271\276\330)\37\\t\372\362{\303\21\241\273\241k\306v\302\36\33\27U\217C\301\356\237\306\266\237\276\"L\354\233\251\64\324\325\377\1", + 30550, + 70388, + 42081, }, { - (const Bit8u*)"lX\5X\224\371\366>1\311\4SL0\235\344\60\63\200Ac#\330\275\26&&\6\202\240\250\273\330\205w\355\270v\273\371W\267K\357\226\265\352v]\327n\267\214M\327\365\217\337\367<\267_z\346\27\247\336s\336\17\354lp\344S\351C\373w\334\262\306h\207\177\200\307]\f\266\343\351e\251'\341\337A\203O{\227\23\373p\252\370g\362Y\355'8b\224\357#\254\276\236\242\6\233L\371)\266\372\305\362\6\253+\371\361d\306\16\32\37\t\271\250\271\334H\354\323\253\367p\357\220k\tw\273\352\370" - "\36{\246\272\2\60\344M\357\67\324\363G\327\323\334\t\323\36\307\326\r\226_p\352\365\224\5\70\305\232\334\203fK3\36`\305\32\377\227\70\67'\362\2\333\233\305\235\301@0s.\207W\307\357\305\331{3~\206e\347\262w\222l\256\243\226\315}\345?\220E\246TP\306\337u\263\310\230&O\245\351_\247\177\304#\256\372\336\340\231\203\303-\204\3\270\64+\361i6-\222\267\200\256\243\35\347h\220\316\353\24\222\"Z\337g\252[G|\2\17\322\302u\261SDma?N0\207\236gI&^\244q\367BV\254Y\222\322\3\224V\356\r3\267\204O\363\214\71\351\333\330\373\243z;<\246r\37\246\66\25\326\277A\332\230\370AL\277c\224\264G\245Z\260\350\24_P\335\212\264m\244\34\316\373y\366\367\31\37a\213\343\206\357\305R\311\235ij\203C~\363\276\210\225\362\220\222;\371\62\277\20kc\304C\377>\361\267\321Y\201\233\60\377b\314\214q\335\371]\352w\304}\4|\375\343\257\t\371\305\230W7\31\222\226j+x\342\311\320i\266~\242l\216\r\355\63\366\323\304\333I5\324\313\345z\207g7d\274N\265\257\246%\362\360\2_\6Y\367+\217\262\327" - "\242.'\303\64\331\247\360?\200\321\233\272!\20\\\351\36A\321\236z?w\374#q\v\207ni[\212\6\5zi\226R\307\21v&\347\231\300Q\326\236\222,F~\210\313\60\321\30w\210s\346\31\237\244\242a\226 \366\354\346j\315e3\354\275\271o\33\327M*9\231\270\32j\306\246\f#\343\367\362\3\330S\352|@\t7\24\23\t\354\366C\334g\262\353#\30\366\225o=5\217\32\243\310\315\320\215);\214\307\251l\243\303\313\306\315\262w0pF\323\fZ}l\265r\353\307,\323(Z\255\217@l\266\276\35\233\62\345\300\231\205\372D\266W8\277\204\322\231\366\271M{\375\27\240$\222\330\237R\255\361%\334\345\220c6\214/\f\336\206`\221\246\nr~6\275O\232\377\223<\316\246\357\345\303\250\362\313\320\227\224\332\61~\fd=\245\277\305\65\265\311\237\340\364.i\7\270\364k{3\264\66*\247\342\214\257\302#\261i\351\27\60H\352\371\23Z\357\260>A\201'4_a\247M\16\31\314\261G\262(mt\374\66L=\242}\205\347\217\211\234\305^\323]\233\300\321G\225\335\24\361X\37nq\320\260\213\347\364\310\270AK[g\35\346\274\32\323\307\70oS\264\216\365" - "\7\245\353\251nX\332D~\262{v\26Y\16+'a\266O\177\22\346\247G\217\200\342\27\216P\313\267M\23\70\177h\302d!o(\225\343\17\220\375\206\241/\266k\260u\306\261O\5\307\362\340\361\236\333bz\312\306\331\357\241d5\236\26\22\305\372A\322\326\254\364\361D\n\236\325v\347!ox\247`\365\346\344\213\240\334U\t3\304;\274\253\325c\205\337\204\\\202\257N}\366_X;\243u\330\213\331\37\350\357R\361=\313\7\64\341HR\7\214=\243\333.\332\\\364\265\371:M\34\220\64\230r\276r\336d\217_m\345\216\37'6`\277\251\356i\344\254U\315\342\232\247\223\177\301jw\362A\232dM\232\211\215\366\254\327@@\377b\217\213dsi\207H\323\245\336\314\237\271\335x[\24f\344\206\215\350MW\227q\304\256\213\347\376\317\272\277\204\377\200\374\64}\203\206Q\262\345\\\220\235p\213y!nFC\236\254\23?\336.\303\b\212\211,\1\263Fa\244\t\333\223\22\340\37\20.\342\341g}m({\202a\34\331N\305}\f\306\363r\325\243\341\332\7\4Xw+7b\327\347\34\207\377s\314\326\237\rW\211\226>\2\246\317\217O\306\341\37\372\366Q\355\225\264\2\16\365\320\\\202\1?z6\341\310\276" - "\376\221\342Es\267F\206\222\246\253$\237\n\354\346\225\234\366 \276\7\216\t\5>\343\66\247\254\223\261\270\237\305D\35\16'\246C\316\373\246\32\310\265\230\276\0\272\0_b\327\273\216\17\260\312\235\364\34\250\347\363-\322WH\277\23\232\21y\217\252\257`\272)\336\212\31\233\343_\20\4\1D5\272c\302o\330\376y\333\201G\25\233\207\255>\267,\4\370;\24\b\215\7\252w\245X\240\64\327>\n)\4\213\321\367U\322f\264\274\246\370\203\233\65\63\250\60\377ks.\333\357\252\fX/Kw\341\314\346\341w\204\336)LD\220\266\241\70h~\333p\221\312]\336\335\64\274\213\357>\214H\367w\245\307\266{t4\313\223Q*\214T\341]\230\377d\364\6\217+\v\246P\351x\373\64\364\236V\327\363\302=19\366m\346\266\213\241\33\364\320\233\203YN}\31\347\177\236\320\310\266\r\312\375\330k\253\353\25\212\250u\377\307\205fs17{\305\20\303\22W\242\32\26f\307\306C\340\266\246\23\64\252\262\276\201\276\61w\7\230U\36\376\215\253 i\fM\215\244\226\202\200\370U\322\f\\\272#+D\212\20\17\206\177\200&K\223N\t\215\7\215" - "\331\262[<\246 0\35\347\70\"\375\204\376\307)\363\264kQ\277Z\372%+$t\225KG&\276.\260\207\245\307h(\350\255\322g\241\357tw%+{p\ruy\333q\370Qt\215\2\355\311\32R.\23\363QZe\267q\321a\363g\350\3\365b\32\361\232\177\66+6\263I\20O8jD \n\365#\322\27\221\341c\331m\202\246j\203\36\67]Y\20\272\253\355H\265\343R\17\342\354\217\"f\250<\32Z\16\363J\243\255y\301\246\350S4\277>\326\222\333\332\254\213\260k\251\343\0\224\334I\274\303\355\363m\325\270\244(s\"\r\375\301\267\244\311\360,+/O\316\336D\213,\231^\321\337\360\70]\16W*\203\237p\227xG7\261\b\263P\337\217\355\r*\205\240\360\204~@\363\23b.\314\317Ox\tZ\271-\273ph?\357-n\\\231\371\24\226W{;\200/E\375\67\36\320\331\375\3\374\23\256.\252\205\20\310\324x\250\377z\317\20\352v\326\271\6\250/\354\242\66{\255G\320\376\225f\3\204&j\v\241\350\236\245=\227\235\261o\341\66\223\255%\234\203{\376\351*\205\26\351\306\64^\272\"\263\37\214R\6\332S\361|K%\226?\343\355\203s\247E>F\335;\322\201\264\264.\33\260\354V\366:\261\377\351\246I[@Q?\363/\230\365@\277G`\24\304\267\223\\\204n\357\70gQ\263\235\206C\230\67\63\241\v\351\226I_\301\252uI\277s\305g\376\225\224\363kB%\314y7RK\276\67\65*\250\365\246\334\200y\353\242\375xq\373\330\"\34\251\360Gp\364\356\300\63\330\256!\333\217\243^\17\24A\223\63\17\250\375h\333\345G\352\360-(\336c\31\204\335.:\323Q\177Hz\16\353?L?HC\327\371\6\60!laM\34\337\246\221\177\4\230\273\316q\354\345\t\177\v\225\320\342\v\231\327\310\351Q\255\5\323m\371q4n\221;\21\v`\f\33\216\311\230L\37\310\257\302\370\255\301\373\324\345\216\343Sn\361\231\341e\202I\20\346\226\307\214\271\360\b\302\275T\361 0\4\232v\274\6\377\201\322s\366s\342\272\314\62\375E\352\63\301]\330\24&" - "\373\36\234\271/|\203\332\177d\373\3\373\207\335ga\342\315\244\60/8\27=\203\262\67h&\346\311\23\22x\361\266\330\263\220\317\346t\352\231\356\232\203\363\317G\177E\333*\345m\370\7\310`\225=/\326A\327\62\307vl\371\243\261\63<\321?c15\276\232=\33F\236\365\377.\256\233\306i\237\213\354\t/\327\365\5\335O\322\261\324{O\366\63\377r\324\360\271\376b\256\215\246T\212M\246\376\231p\21\374\3\\\331>x\31\\gU_\223mD\334~\312)6m\202n=\234\205\202v\304\205\255b\255\304m\335\202\316D6\327)X\340\71\260,\34'\36\257Y/\251!\335\1\351Q\252\177\30\336\315Y\311\372%\342\311m\277\265\236\344\261\373\3\267\241\373U\347\21A'\322\334\363\321!d\\,\357\211\232S\22\3t=\345\370S\\<\327\31I\347\61\37\5\66\300? \350\3\2;\0$\37\320\256\204\22J\314\1\314\207I0-'-\35z\16p\315\370\317)\324\262\332\324\v\376\3\3\327{\316P\253\65V\265 \317\301tL~\210j\256\245|L\326\32\345.AjP\364G}\35\332\336\213\333\302\235^\266\337\307\332\206Ts\23k\223\347S\346`\375\3\32\262\312\227\214p\37:@k" - "\262\266\6\357\1\365\354\246\20G\303\34\375Y\327H\356\266j\35\232_U\f\200\314c\372\303\\\365\227\244\305\330n\207m\21\305\267\324\325\376\213i\201\363\232\333\334?\340^'\372\353\272\256:\314MCI\364\227\r\17d\211B\234\205o\24\34\244\215By\37\357L\352\361\201\253\17\344\277l\236,t\25^v)k=\343\31\250\207\61g\203-@L@\265\244/O\r\245\344P\311\260\304rx\4A`\300\320\61>\7>\266\312\275\35\303\366\370J\30\347\bn\246\330*\375\213T\276\335\373\273\250\345y\27\316\27O\311Yl\272\306\v\272F\327Q\233\313\66/\345<\237\340\246\221\373\374\337\22\35\202\273\250}K\"\216|.0\233=0\371\273\244\v\224n\216?F\25\5\1\65T\215L6`\325\221\344$\356\345p\215\20\364\237\360L\307O\364\310h\22\220\37d/\342\214\335\361\367\61\247\320x\230\202\205Z\25u!V\242\200Qk\3+\205_\204Y\213}\217\270\7a]\357\324\211\64W\21" - "\371B4<\321\31\367\244\30]\311\257\244\27\247\225\244\20\367r\373\373\266=\240\255\221\254!\310\1\17\267\213\330\64h|]\336\16\273W;\347\222\346\v\311N\354\376\271\363%\356\71\323y\227\335\17\324r\30\320\302\263\230\332\275l;\212C\16y\267\320\250\27\2\257\303\324\357R\266\vbG\320\350\244@\316\243\324\347\342\247\363\254^\341\375\70\377`\364\16\204\70\360\16\247|\247}\32S'k\267Ag\271c0\215_\22\352O\301?\264\3`\242$t\201,\225J;u\374\253\335\317\31\303\342?\343\71\227#\204\255\26[\206Q\213\266\306\252&r\246\277'\332\227\274B;\35\226\216\317\352\317\276\5\352\17\300zB\371\26\267\360\30f\323\330g\202oA\267+\316\35\20yW\267\202t\25I\257C\301M\363~0\364\221u\340\206w2\366\t\272I\b\4\266vZn\303\274W\243\23aQm\354'Z\262\71\253\26\372\244\271\36\220\343\r\325 .\177\313[\4m\232[wS]|Z\7|\314\346\236\313E[\314\37R\7_\242\31\35\273U\371<\345\351d\5\66kmp\213U7\\\357\353\312\v\357\307\322X\266\206\326\221\306 \311\344\242\6\363\66\66\226\311\252\304\347" - "\205y\252\310<\301>q\307\344\325Ik9\241J\376\16\17\223zOC\365\261\224\22\61\215\265\177M\275\301\63Z\246W4\361(\336\7\246u\362FA\306\v\232\37\62ju\305\324\343\236k\202 \33\5\252\t\375\212Fk\3\347\271\272(y,\206fh\256\323\264\233\351\3x\310\35\357\"\316\236\242\377\2\313\277\367\216\1\311\244p\214;ax=\245\214\210W`\335\224\324\331B1p?\207\333/\264W\341<\214\335\320}\n\266\33qG18PS(VN\356O\t\347 \266K_\1\271\305\t\32\36\325\306\377\16Wt\361\217\3\223V^\b\246\231\362)\240\254\346\231\70\262\336_\5c\33\202\363D-5S\223~\r\363_5\353\5Q\364H\260\\\246\336G\335\62\32V\343;\b\356D\325\65Z\320?6\7\227\315\312\236L\355\357'\312\241\377{\236\346\334\341%\333\307\342\24\222\355\242\343XU\235\364#D\33u?@\336\306\204\317\304A\360\370\225\214z\360lQ\347\240{\263\352.5^\317^\16\217 \374\217\202\32Gf\367\7\1\vO\307^\20\3\333\352\262\265\205\360p\213S[\247L\347\22\271\355\7\321\337\306qY\227\304\275\3\66x\222\305\246o\211(\256SJ{\355m\310\257\66w\24c\260\360N" - "\246\21*\35\241\24n\366\320\220\17\272\303\322\336\354p\252,l\351\246\230\7\243W\6\245\60A\31\332$.\26X\266d[\346\353 @\323J\"y\244\207^\22u\342\264\242t56\277dX\317\215\337d\36\21ij~C\341a{\205?W\220j\242A\177\371K\366~\350\372\320\251\214F[\344z\376\237\f\353Zl#\327\241\363)\334^\225\355\315o*n\353\270\\\313[\337\240!$1\342\20Z\26\311\343\257\277\7CKi\273\ty\0bX\16\n\251\274t-\207\226M\26s\345\274o\276\373\66\257\315Y\244\216\233\357\315\31\245l~4\377Hi~\230\231\tyo&\36:\216\203,\335\242\242\v\352T\371Y2c\273\343\220KdU\337\271\260\300\67\200\27\34\245\371q\244\337<\272\260j\306\213\316%\223\327\214\365%@\354S2\262\64w\24,w\22\\\351\232\61v\365\275\266:\200.)N\346\302\255\326'\346\1\237>\304\302f\354\242\231\25\366f\356\272\342)K\204Y\306\244\346\f\206\231\217\342_\22\61\247\245nX\366\206\367f\274b\363\27\305\350$\32\27\314\203\353\60\335\22\237\f\20\266;\2\63\26\266\31f\251\71\236m\330\352\204\71{~U\300\337\211\231o\330s\226\220t\"\235" - "\177\352%qn\306\313\350Z\n\346\236\234\345\230F\337~\327\324\25&%\6t\227\227\r\16\60\220\244\275@\t\333\260\342\250r\312\321m\260\221\337A\354\377\n'\314\347\255`\337\344\302\0\337$\34\n~\34\326\36{\317\253\312\204w\34\314\70gj7\317\302\255\357\273\255k\323\263x\357v\34+V\225\4>\234`FQ\277\301f\331\342\260\244\253w\364\4\357\231\227L1(8\247\16d\374\345\362\32\273\356;\n\203\t\310\236\7\332\60\4\301\24!\273\221\206\216K\331\265\243k\227\222\363\30\333JK\276\337&p%{\210[\317\352~\327\66\343\377\nm\327\262p\324\214c\273\346\330\17\275\204\352\366\227\352W\203@9nS\207\61\267\271\226\35'\bn\247_n(\210\263\0A\274\305\324\276S\317\n\210\307\256C6\347\342\227\315\70%*>#\226D\266\312\204\306\261{<1\267\220h\b\234s\316\264t\217:\24e4\23\273\342\212[)\1\326\32\f\323\310\251\305\244\251\216d\227\233\312\272\301\4 \221\34\246.y\203}\355X\335\253=6\326L^\214_\314^\234\324\264\2\245_\233q\bn\355|]\373S3cLXZ\225\232\tY3\317\221\71\233I\244\275\307\64J\254 " - "\356\0r\366\232*\3+\247\221\16\252H-7\203\377\320\306\327\304U\27M\34b\\\314\re\362*yoN\341*\311\31\261u3\236O\307\367f\272\306\"\330u\35w\24m\2\22s\315A\347\6\204\327\340\305\256\303\334r\220\357\304\273:\32e!:\335\204\222\312\333\211l5\360'^\371\371W\2W\230\327\22+\266\307\274Ti\303\70\64\254NL\rS=#|gu,e\335\235\226\241*q\374\240\2i\373\224\1E\20\274\342<\333\241p\230\71\342H\374\363\200\324H?\203\240\337\27\66\327\4\327k\231\71\20y\36\231\262\356F\307#@\337\324\262\207Y\25\"\t\264\1\222\254\331\240`\347\264\333~\206\232\23\341=\257R6si[\216\200\305[\216\210\333\264\6\v'\346^\332\315R\242\5A\367<\4\307[6Pv\264\71\352\20\321\nC\353teZ8N\220\37\71\302n\301\336\17a\22]\273I\350\212%\17#k=\253\224!\215\220\b\373\341tg%\366\7\355|+1's\206C\f\265hR\26\v\317\70\331\320\221Ob\226\340\241D\254\252\265,,do.\223\207\277\23\214'\5M\273\301Q\20\331I\327\300\bg\254\2\367J\207Ak\373(I\201\324$\36\307a\370\306\205W\244\241\263\240\374\1\206\227K\362b4" - "\314>\323\272\202\274\375\213\23\270[\313\36\243+S\271W\270\254\21]\34\326\235\71$t\302\321u\5\357{|;\234\b\273\325\372\220U\35)h\213\r\36\257\260*j\255\7Ly4\36i\1\251\345\25\232\214u=u\37|\240\33{zB\330\203K$\366\24\65`\225\320]S\226fJ`\f\255%$4z|A\321\231iYpzG4\337\253\242\305wA\201\203\327\203\243ZD\241\330f\254\253\\\270\26\201aFz\v\267Z\331-|\v\363\334\37\215\256(\254 D\375\353%\325\16\207\306\330\23\204\364\\\t\256\242\250\230\251\5m\0;F\206\232?V\353\321\341\22P]|N)\27\66\315\224\207+^@\352\30B\310n\313\226\315\347\227\223\353/>\377\356\267_\177\370\2\332\270s\256\231^\214\257\357\314\321\244\312\70\213\247GG\215&\345V\35\62\304@\361\305\277\241[\273\355P\v4\324\336\326jIF|\34\363n*%\246c2\352\25\356-\210\371S|\351\330\334jM\270\343\32\252L\355Z'\213C\343\35\327\333\1a\t\5K\370l\245\271\372\f\35t\30\201\321\351\nD\272\330\226\244\327\244\22>\204\321\324\23\245\23\24\337\210R\32\62\247-?9\322+\fCn\207\365(n8j\215\324\333h\21\231\261" - "\261\32\331\303\24\203Wa\253\27\352e\330\221\345\70H\33\264\275\345\267.\356\251,\"\325\326\234\227\201\tH\310p\216\2\200#\317\300F\227\24{^\361\20\226*H\350\315\367\277\2\301\255\255>:f\212!h\361\270b\16fT\273\372\375\273\203?\34\206\257\21\375H\"\376\340]\213\37a1\347\66r>\270\340\26\24y~\327\356g\330\325\342\f\26QE{-M\275\231\273\254\25\371]\353_\6\27\3\367\351\71J-\265\216\336\60\373\33f\7Q\314iX\17\17\61h\302\322\323\252\336\313*\375\247\217\"\5\331\205R\224\23\31\212\231\352R'`Y{\327\276&[\323J\342\302Y\313\241\226)\330Fz\302f\v\3\311\36MIk\216\350\373\244\305Qs\4\334\225\205\313\350\372\5GG\207\336|\217\2\316\251\304\310\365\212\236!\202z_\22\300\206\242\371\361\361G\240\270\321\267f\252h:l\244\257\302_\bxE{\27\64$\"\7\202\270C\374\v#\266J~R\321Y}r\331\5+\235\260Cr\200\352\347\21\235\342\350&]'\344f\6k\217#!\302\223\nym\36d\317\261b\315;\4eK1Pf\350\226\254\254\3\370L\346O\355w\32\302\363L\21vX\263\345m\26\65Hm\235\376\370&\321\24Y" - "\364\357k\314\367\320\355\b\4\16\37:$/f\7@E.+\355W\34\207Nb\257\275\3\325z\312U\341cq\200>\310\320$*\21\23ge\31\354\350)[|&v\245\326j)\233\r\361\302\215VZP\203%hd\251~\270\275\275\6\216\33\360V\323\0\322>\254\235\367o\324\207\315\31\333\303\333\374\66x\27\30\32\266\v\375\215svy6~~i\231\337~~[\374\245\71s\272" - "\350mD&\3G\306\363\372\262\345\n\225\25\270b\305\317CW\312\202\242\17\320j=\30a\263-\237<\277 \315\244h<\r\277\236\316<\227vm\356\246@z\33t\24\31P\266[\324A\27-p\257\177\3R\n\234\4\254 \321\276\376\301j~z\361m3\374\344\266\332\205\r\207\224\331\5\bL\233\244\235\265\275\321m\0;K\375\341\345Z\237`P\26\227\315\234<\1\27\357\315\65k6\375\16F8C\23\314g7\317\277\325\220\333\345\221\241\213\375!\\\201\243\326\t\275\273\21b\217x|\324\2=g\212\70\327Rb\375\245.)+yj\271\335rD\27W\322{\306r\326\361N\375\211\25\241F\fx,|\356\20Q8\262\372s\356\221\365\347^\4\343\262\350(\240\263\330\1\26*Z|TLh\316\345\203\17\314m\211C\361\201\354\361n\307t\346\273\27\337U\351\332\5\256\3\34\264P\340\204\220\2\336g\236\237\236\0\305\366\315y\4-\32]\217\346\217\340]\347\62\333\252\324\203-Q&K\26x\377\374a\214<\222`%\350\360\216m\255K\212]\246\3\220\0N\200\231\207\271\235]\252\233\71j\342C\354\270\71\177\60\367\244or\r\263\363\302`\324{\322\337\r\220\64}]\353]B\272}6\214{" - "\273\221\30\314\351\343\66rJ\34\240\n\v\241\254}\247\276k.\250\353\352\217\f\300\b\22(\233keW%\255x\346\307#\304\346.\217\302\7\315\5S\314C \2z\247\327\327\0\244$\355\275\321\250\36\320\22\240\376\0SI\314u|\1\322\70\71p\213\217\61\305\236z85G\321E\240\321\307(\366\210\211\304\363\350\62\214n\3\253K\34iq\34\336o\30\2\r\347\316[\364\243W\f\362\276\207n?z\330\v\262\6zC\346^\177\22b\253e%\315E\277U*G\307\177/\252\232\266o=\242\362Ro\351\376\4T\233\7\16\301A\323bI\4\320\245\177\345:\342\272\304HU[BRm oF\333\236\5&\312q\376\177\335V\326\327\70\356l\375Q\314\313\335\303\237\316\354\274\261O\263\346Gh`\346M`%q\307\261|\265\64\230O\177\317)\225c\350\351\373bU\225\24[k-\247\24o7u =K>\244Z|\31YL\310t\223St\214\321\337\326]\304\350QaZ\274<\22\215a\324Fk\211G\245F\0T\"8c\32\1\315\250\332\305N\266\242\225 \5z\320\312l\224\357\375\333\357\32\335\246\345S?\32\241\37\325\252E\374X\245\32-\v;\27\244\332\345\270\337,\33K\257\224~\21\375NFE\303A\277Jq<\220\0\7" - "\202\214\232\1\332g\217VW\206\323\370\70\271!\345^\214\200b\330L\337\372\254O\n\r\370\344W\202Q\355@4b\16\360-0\243h\330c\227\357m;\371\326\272\245KUq>\201.DaV\370m\rW\20\245z\364\37b\200\71\320\237\260B;\252\253\231\303\221\235\242[G\16s\17\21H\356\35\260l\201\203\215\242\255\251D\317\235\5\375\22\360x{\23\335\347\315\323\23\33X\214\331F\206\223M\217m\254~z6\6\247\236\316\243\365l\325\341\67,\25v;G\373al\347\251]6\24m\312\v\4\305\234\342\31\255\0\225*\247\t\212\340\334\31\231i`Q0\22\265]\322\274\b\320\362\342\70nv\317\201\303\324\226S\220\255YA\365lR^h\n\332>\243|\373\345\21\303\236\355\262\231\336\264\3 \22\320\60\254\222\321w\217\250\317\271\365\65,\23\252\351\314\337\237\35\24\347\211\336\321\61\215\307{z8e\220m\272\22 \305!J0\372`\204x\t\263\26v\212B\3\300g\241_\334\60e$n\353\334,\4n\343^\375\212PF\32\322J\v\302\370\221\303\17>\n\30_\344Er\321a\22B\20\312c\305\303\nd\n\334\4\236^.\1[\220\273X\27\230\3\374\"P\312\20\340\n\253N\277\240\242c\35\237\\\363^B\353\b\360@\fqv\274\324&3\374\303'0\30_\363\344^8G\356\22x$J\354G<9\307t\342\262\321\f\224H\322\243\256\340\245\21te\0\347\66\203W\251\365\71\360'\207-\30\212k\363\355\253\215,zM\227\\\37\36\224\60\245\357\63#'UM\5\310*\261\5\345\37\277\24\327\320\245\215\31\316\2X[12\300J\202\372\37\352\212" - "\342\372\317\313\362Oh^\333\313\17\350J\323\207P\350\216^\276D+\202\230\21EV\222\366\305z\320\321\62r\242-\275v\30E\35QnL\205'\201\4\356\332\353\4\237\320x\321\370\241\270yb\b\352E\265\300|x\207\266\67\265 \307\fW5\323\65\70\"\364T\347\321v\252W\310O\234\70\260\205\344z\236\271\243\1\353 \6\314\202(\2\202$K\373N\2G\333\323a\30%\367\251\21\257\360\306\223\273\251\372\20,\26\344G1TVf\7\355zU\334 .\306[R\314QP\255\353\232%-|\344\313\223+2\215y)?\375\201\260\1\364mj\213\33\30\v\311\324b\303M\316L.\271CP\32\300\5\226\304z#\202%}\243\267\4\n\226/\213\326\251\344\3T\v3x\346\260b\33\273Cv\351\370|3%\355\261&j!\301\60\231d\355h\366\310&\314\257\216\261\230\35\334\36\234\335\\C\214\251\320\f\32\350`\261-\215xE\263#\r\322@\351\201(\177B\270\v\16\356\61\213\231ci\rM\201\213\300\301\0\351FK\311\363j\300l\310\371\206S\217\345\1\3\254\207\30\270\1\331.S\335*\272\245\236\r\301\222\21\216\232\363\333\65\372\247\341\262n\326,\n; \202+\377\266\336\201B\24\231" - "\363\304\63\32,\327\242\264\257I\263\315\365\6\17\6\211\331\341\237\271\265\315\363\356\334\322<9WN\b\311\314R\3u=\205\264\233|\351X\330\336\222g\17\211\30,b\246C\303\300l\346\335\344{\324\v\262\257\0{&\217\244\272\225}\356\313O\272\235\356\353\265\330\254\25\302(\326F\366\321\277\365K\7\200\340\2D\200zA\27\202\305\263\345#\306^\\j4\357\31\361\326\340\247\372\266\61\214!\242\206\6\36F\241*\245{\344\210+\343}\360\354`\361\"\313\265\315\317\375\362\244\303\274A\245\375\202w\215\371\227\301\0\316h\255\304\231\345\326\207\v\31\202\255[H\352\65\353\207\250\277\274\25\27\235r\2)\267\246R?\227\364\322\312\311\250\251E\246\314\220:\207\265\203\315\260\375\377\224\22\312[l54l_\267\263SY'n\23\244\35F\242\331]p\337\314\22Bk*B!\267\256i\310\64[uFf\23P\0k\267p\321\204D\346\204Ek\231b\262\226\303h\271A!l\352W<\303s\302\321\271\305q\321\200\310\245\0vt\335%\314\205\210\243+yxi\341q\342\226;BQD4#G4]\301\236\363\247\344\243H\243\223B\35\275\275\337\177\6" - "\213\257\261a\20\322\306q\f\231%D7r\274L\360=\27\224\305\220\362Y \33\20\n\374;V\322\300\224Vl\261\351\30\61zG:rA\346\223i1\337\275\333\375\262{\275;\364|n\320\71\233\337\323\335\24\254-\177\31\337UV\215\361\34*\330\233\272\270S\367'\243H\252+\356`\260\236W&X\17\22Z\203\71BR\342m\31O\263\314\224O\315\310\37\362v=\236pai\254r\205\22]\307\32\373\274j\35\247\34$\26\67D\30\361\275=0\30-3v\270G\3&\350F\340\341b\317\350>\t\0A\372\343\255\303\273\232\323]N4uF\375\62\f/i{\275\244\67\357\270\361\351\241\252\330\312U\304q\351\b\324\250\235\36\60\232\341\233r\37\213\271\36\341\30\215\343A\215\r\17\334N\16\275\301\364\353\4\20\21\256\366\355\24_\232:`\34\322\237\264*\257\216\256.\37\357\351\265\315x\204\247\203\275\370\351\217\270\32\20O\335\215c\300\316\6\232c?\200e\260\221\257\363\6J\306\61\216\30 \310/\30\37\226+ j(o\271\70\60\217\220\22\204\306<|\231\17\227/\220\20\374\271\270G\247\313O\377\232\202\0h\3M\1\35\314-xo\275\350\252-\260~ocD\\\215\34\26\343\25\277\206\244\66_y\257].OyW\36S/b3s\273\240rY\3\327\301\273\34q\346\306\301\267/\206\216\22\366\4\343cr\301\221H|\333\233\fXM?\302\67\330E\247\316.\331Em+\224\256r\256\274\244\337S<\30\70\205\b\35,\226\23\f\17\61\232>\330\r\266H\377\61U" - "\373\200\252\27\274C\224\245^\315\203\24\252C1$j\256\nO\34\7\210\21\21\341\351\312|\377\203WhGX\204\241\224~\224\64\315NNb\306A_1\272c\250g=\311\345\350\224d?]\256\2\f\vNE\242\315\256S\204N\327\30f\b\312\21{I\355x;\370{C\272?\344k\33\23\202\344\251l\24\353\253-\263\1\6\363&\16;o\246\351U\26\372f\357\177\313\31#J<\bS\207\325m8?jx\203\326\360\215J\17\306\341\337\207\237\345\375\252\64\65\202d\334\225\207\311d\256\367\354s\361\340Mdf&\203\354`-^S\361\306b9\v=\26\247\262\315\373+\202\271\205\270\367\62\212\207S\316\20\202D\232\247\24,%\303\315n\361\263\367\377\341M>N\256x\371\62\343t\36\244.\301At\33\255\34.\331\234\342\33\37\23\364!\267\310\325\31\271\nl1\376c\242x4\321\274\26\217\266\205*F\365p\373\62k&\321\30\250d\352U\236\345\64\277k\274\354K\27\37\237\71\375\345\267\275=\320\314\"1,Bc*\315w\270\330_5\7V^\300m9M@\"\376r;L\264\357\360\276m\314Zb\345\2\272\374\27c\224!\234\7\227\277\210\223^\7LpyC\200\260\370\33\32\300\0\1\66$[\363\214\347" - "\353+v\317\337X\0\350\3\224\335\252\367\305\337\233\272/`\6M\222\30\315\7\21Z\232\21PtVD\261i\tm\206\344\375^\345\275?GX\263\67\303*\351)\243\270}TC\17\274>\342\70\322S/\213\62#\314\373\4\336O\"\364\355\260\220\265\323\"\374D\202\337\310\373I\345}\"GP\340\317\201\177\226\360\216\270\216\\\263S!6\273\60\303e\243\323|\366\314,\223\246\361sJ\310n\222bv\333/e_{\344\354o\2J\256+\230#<\20\0\221?\\-\347\372\346\26\264\334\344\374b\367Q\230\323\tv=\311\315\304\371H\212I/C2L^u\24\207\336\177(Y>~\312\237~\317\256\177\340f>\362\221OL.\272\213sg2\6\36\324\250'\221\204z\342\251\236\342\220\315[\262\330\35ln\223f\322#b\356\232U\312\335kQr\317\332\f\363.q\267\234\377\312+\1Z~0>\267\347\260.7\37\361\0\237\204\347\24\24\16\35n\336\235\64\255p\333\236F\30\33&\303}GQ\20ac\271'#\260\36nX\17\17\363\310\206\271\227\64\342>E!\242\310}k\225\370\326\226FKKN\231\34(\363=6\257\246\177\60\311Ca~ vH;\200k\202\6\363\63\24X!\362\252\313\324\342\4%\360'\255\"\177\255E\342\357\267\312\374\253\66\205\177\327\256c1(\315\357uX4\334>8\331cB\b\5\333\7\201\254\230\64\203Aa\334G\3\f\35\251\333\f\7\366\365\3\205\t\21\207\254\22^h" - "\221q\244U\1,\272\33^\355V\361\231\236\254\276\n\370R{\247\206out\21\315\321Duz\342\235^\1?z+\341\17\357\0\\ G\254@-\"\324\202\277\276q\333d\207Vp:\212\360\243%}5\240\32\221\214\270\213B\227n\271\271\221\27\6\22\254\20\2\333M>\262\301\b\341\223XX\243\221\260\271$\b\267\"\242\360\250CJ\257\310B&\246\b\37\36\30SQ\311\253e\341\273\353\267\64\321\21O9\233\246\24'h,\316$\220HQ\202x\312*B\325\222x\256\265\321\371%\231\274\332\327\334k\235\306h\22\274n\203\327\366\237\223\242\270\373WZ\22\367\377A\313\222\343\317IE\32\370s\362\20\202\347\177\325*\315\214\36\325\n\271\214Z\243?\200\355Q\265?\200\371\17),d\326`\227\227\4\351D@\224b\264$\335X\221\245\235\210\"\275\245\32\231~\t3\244\247Q\250C\17c$\224\276\v\260rW\210\223\335gyy\350\234\276;\362TP\224\251)}\227\345\363IE\276\222\320\344\370f\312\336T\4\345\317\273\230\373\224Q\344\357\303F9\232\322q\375\206\315D\0\33S\177D\33\223\356\65QU]%\201\16\242\62\70(+s\213\212\22[h\360\326\323\234\224\312\326" - "\"V\236]\23\224\17\364\177\262R\5\246\66P\375>\240\263\363\230\225\220\332\341+YH\177\376\264\203]\367q3$\37\361\63\312>\215\vm\23z\376\202-*\27\374z^\235\222\300h\235e\7h\v\303\1\266\60\27\342\n\253A\276\260\61\315\24\356\70pa;\203\n\257\300\357\263]T[lRzWV\35\215\336\251\252\367'\330\273P\366\346O\275eu\304\353\323\324\350\314\254\303d\277t\231A\376\270\204\206SFn\f\271\217\31\246^t\260jb\234S\277\372\314\253O\177\230d\324\314\32V\277\214\242\242}D(\372\7\304\342\314\224T<\343\224\213Wh\245\230v5\212\377\241W%\177\360\330\315\63\36g*\27\337X\226\314,q\251#\252\17F*\271uBYA\254\f\32\301Y)M\5\330\322\t\212+\255F\371\322\326\62S\272\267\202K\17W\21|/\300\367b\351\331\35\t~&\357?T\340\307\207\304\17\33l<\312Wz\33f\36Q\270\364)\0\247\213\26J\337\207\304\62\21\224\312\303\323r9L(ez\22\266\216%\257\232\250m\24\225W\22J\371\f0\21\252\201\212\313\67,\261\222\345\376\66\273\36\343f\356\363\221m&\375\0\227\177}\27\225\237\321\207\327\375*\210&1" - "\331k\"\211\250\274\33\23\312\337\375\353\341\371\275\23b\233 X\306Z\307\252\240\71\3Ft\273\331m\326\206(C\361h\30\317(\"\303\315u_\33\233\300Z\300\211\264YZ\320~\325/j\324\216\244]\372J\326\356\334Q\264\227\367r\4\241\352C\323\276X(\255B,\375a\315\322c\272x\264\61\345>\263\341\n\37\372A\254\\:\1+S\16I\33\352\223+\363n\245B9\33J\347VI74\211&K\26/l\r\315\256\223\334\214W\337\232\312j\315\207+\227\253$\252l\327|\302#Z\254d\254R\345\243~'A\36\217\246\313\301\by\30!\203\242\264\200C\206\220\342\310\361);~n\351\224:x\243\300\6\343\312\67-\250\332\325*V}\244T\35\232\222\253\223~\245:\355\65\246A\344\33W\323>\n\300|\371\323vv}\264\1\314\307h\263$\256.\320\250z:,T\257\7\240{6\350\236\3\272\67\2\335\33\313\21A]\375\253\17z\254\232\336\301\36\263KU}\326\350]5\23&Lx\207\253\337\376-\n\224\375GR\310\202p\325\332\377\26\227j\316\277\245\344\332@@\251\r\7\201\217\252)g\242\30EW\216\236\246N\23Q\324_\310\320@\261\66f\225j\321\226\343}\330E\272B\34y!\"\301" - "\"w\222\3\21\341AD\230\332\345]\\KfP\355\241_\250\275\354\27k\37\301\377\213M\256w\267)\365>\307\321\25l\16N\331\217\202\"\256\374\277\27\f\367)\206\345\317\224avL\345z\177/[\17\216q\365H?\217w\274L\375\302&\256oM\241\372\235\t\241\376\230\22\353\257h\251\276\267,\357o(\357\267\216\216a\271\276?\34\351\62i\3\324\333\34\302o=\321F\204yL\322\346\357L\n(\274\363\0$!\235?\275\303\376\223/\253`O$\331\242@\307];\236\20i\bq\1\206\227\254\307G3\31\37\306\311\272\214\273Q\331t\323\372\345\233\254AB\224\20\227\347\366\243\336ox\267\252\233\300l\250\215KWU\367\225s\316=\f{\t*\334\360\7\253\t\360\6\33\257+\301\326\33j\320yU\v~\344%(r\222\202\206\375jp\314\206\261&\6\236\\~\"7\7/3(8\351\"\2>\370\275E\327\35\265Z\360Q\312L\360\265Y\177V\36.\22\330\223\4\3\343\324\26b8>\304\330\205\20c\v\204\230f\177(\243N\f\261V\24b\353\245\20\327 \207:]J\250\317\251\206Nx\264\220\267\317\b[\350\276y6\364\352\354\304Os\225\343f\270\345\33\227\61\356M\177t\203\37\276l@" - "\37\206\235\26/\232\33\201\202\307\223\b\270\24\2\270\24\3\270\64\2\270\214\376X\320\0(\\\224\310\205\21\227\231\217|\300\b\221\1K r.0\311\376\71.\262\37\31\227\270=\261K\334\201^\217\272U\321\36\353\301\223\311\361\3\374z\220s b\r\t\0\271\317\7\63\301J\314\4\253\377\306\244\70\373%NO\235\274e\267([nF\335\32J\321\266&\f\37}\232\355\236\335\272\235\226\361\323\326\333\364\314<\32\323Cxa{N\335\256a\241-t\217-\33Q9\323I\356\366\217c\254\334\370\207Gg\231\"*\273\312\rN $\16m7\366\320\355\23\360\203\faE\267\373\214\276\213\315\255T^\203\60B\373Y\345\231/\32c\317H\241J\341\61'nw\330!\260v\362\24\355T\n\206\354l\367\272\245\355\201Z\25B\247m\237\272\245\337G&\205\16\360\250\272}\231\243\250.'\354\247\253\63\333\324x3\265\37\266\277\265\241\355\267\372l\262\223\63\240H\276A=\6\361\371f\247:\255\371\247\235?\331\35\31\357L\331\71\277wQ\16\253\356\275\71r\347R\7\277s\317.\354f6\7v\33\332\375\273\375\66qw\254\r\355^j\221v\277\353\222\367\314ux \333+`\265\275j\35k\32g\366\232:g\367\372Jk\t\30S\314\36l\306\345\243\275\363Ni\357KV\336{U\250\356\263" - "\330CvB{\224*lw\26\275\366\365hRx\27J\314U\20\263\312\216:E\267\254\342~[-\332\367\344J\373\3\331\362\376\70\253\354_*\200\65*\20\310\376M\240\253\375\317mX]\25V\275\63U\202\360(\344\207\253\4G%\b\17|\317\373\367z\20\24\327\376\313\32\355\300RLn\304!\261\35T\376>Hg\341zRa\7\371M\n\374\252\36T\347\301\300\210\265~\254\224\17\232\362&\251\257\216\200\61\207\324'n\340g'\351\365\4P:pV\b\7\37\27\7\16\216\67\341\263f\177p\222\354\37\\\361)\7_M&f\237\307\223\366\301S\263\205B\22\3\342^5\266\21\20\233\237\367\177\306\255\372\257\221k\213\23\201\355\222\6O\202\7K\202\227@f\b\244\316>v+8\254/l\335\273\356\306\355k\222\321\17mR{\356nX\360\305]\26K\336\337\363\316\235\211\320\317\346\362y?\4\317\310\235s\317\371\32\321\347\31\305<\350\342\372\315\1\212\357\257\362S\322\261\361\323\306p\227(\313\201w\334o\17;\220/F.\274\377'G\234\375]q\356\376w\252\245E\262)P\377u%;\240Pq\3Z5?\220\27\33>\201\354\255\307\223\r6\331R$b\356\201*\33\32p\340#\221\245 \32\346" - "\231=\214j1t\324\345J8\4\213\21\3\215\351\356\201\67-\275\3\347\354\340sRh\340\303\2v\340~\2\67\30\247\341\341g\302`\372\273\342`\341;\241K\305N\33\214.\262\323\326\235\307\f\226\33\21\64\71v\260\332\314\r6Z\370\301\256\\q\260[\6h\225\251\341\345d.\230\235\203\37Z\\\203\237\227\271\341k\274R\203w\312\321P\334d\5;TP\301\r\331\376\355\340\207^\250\24\206^/\21\207NM\226`\312\71\364\221\356\213\241K\5\236\241\33\305&\357\260\66\61\341(\31\26\60\4\274/\341\221\341\214\2~\270@'\f\227j#\230\220$n0\303\326(,\37W\7\tIq\303\265\n~\370%\245t\354\27\30=\351\320&n\370\270\225\207\227\60\334^!\376\345~\231\274J \200\222\331\7\7\214\271\300\276\203\363\65\355;x\337\271\377" - ":\344\306\\\304\300&\302\216\23\355l\244{\257\326\63\276\217\355\254\357\22\315\215h\254<|-^\255\217\70\34\244\334\2\346\222\362n#t\243\246\60C'L\273w\231\21\313\373h\244\232bGj/>\5@G^\177\21\37\0w\326\221\223\255M\336\221O_|\221\254|P\b\321\5\260\346XAe\17\236qT\255p\216\246\251\\\243EJ\367h\215\223\306\213>\372\312H'\32}]\226\274GO\332\371\321\213\264\60z+`\27\307b\273\372\306\264c\241\344\312\230\201\36\211;\352\35\243\350\221g\342I\322\62v\350\330\261\346\34n\354l\27?v\275S\34\327\345\204o\235(\0\217\27\322\350\333\17t\354\37\264v\36^\21\r\210\304\360\303I\34\0\246\372\302\320tok\217x\353m\356\232\366\336\361\322\213\314\370\61=\32\357\260\261\260$\334\370\333J\211y\245\251\305\37\322T}\343\237\5\231W\204f%\21\27\65\1\215\337\245\270\t\205A\0\245\61\22C\341\241=N\304\305\247\20\365\325\211|3\232\250\64\260\23v\v7q\302\306O\234\316\21\36\244\213\23\27\251\260DM\336\20\66\364\7K=;\361auhI\322\b\32K=3q\243\26M\36\221\37\343d\372\30\315" - "\203\26!L>g\23\377^IG0f\2\271h\244\310\303d]&&\327?\22\355\253\351/_\254\306\233c\262\225F\223\347m\334\344\307\365\374\344u\207\60\371\210\22\341\325\7\257HdlJ\23Ck\16w3e\371L\215q\246\214\60\341\207\221\"\235\62\216e:\247\354Y.\256\275\322=\325\200\307)\214\362\"\30y\231\354T\213\226\233:\237\314O}\232\by\245\23\342\325\343}S\367\f\22\301\325y\36'V\230\275\217\363,\305\232C\250n\250\30G\b\255\362\373\6\33\363\230\ng\177\254\236\307\317\67\267i\242\302\342\307\237\322\314\343\333\24\316nH\263\70\363p\23\367\240\237a\314\v\273\2\323\252\6\367\264Jr\5 \301\204\274\331\24\204\21\34\234\347\363V\331\25\250\27\247\23\343\373\246\63B\245\32\266\5\222\211,\35\233E]\330\320\235\316\273\300O\227\365\b>\373)\321\367\252L\202\323\210\5\327mc\247k\213\271\351\6\223\60\335Z\31Z\250\62\334\200\341\346\263s\244\236\7\67\237\355\256\311\221\31\211\64Q\247\317\244\310\23\225\202NJ\246A\262\325\60\375~Mt\22D\311\251\65\317\364\345\370\230\3\336\311\364\243f" - "\347L\\\233\353\253g[\335\63\211\312^\0\204\f\254\34\232\311\242\330\231\242\32n\346\71]h\231fj\300\243\v\357h\366\36\350\252d\327g\346U\212\231i\267c>\30\224\211\201\256\24\303p\217\375j\246\207\212\1\243\\\306\23N\0\247a\364\62s\211\302\276\313\254\352\22\232M\214egK\254\334l\235\202\237}])\314\236Q\211\263\37\252\345\221\242q\202\366\343\231\275m2K\274YC\30\32\221R\224\272\30\221\267\316\225\330\70\34\337\230{\336\"\314\65\26\213s]\0\213\314x\v\35\66\2\276\274n\223\357\312\312\22\36\270\304\267\177\231\207m\t\203\334\320(hh\30\23iIcn\356\335o(4w\323\33N\237TrDMa>\326\300\314'\353\321|\216\226\235/\327p\363\265\274\236\237o\314\25\347\233\203\tCAo\r\353(O!\355\371\256\66\346\273\217\333\321|w3;\377a\v\367\207\324&a\376\232I\\P\7\325\f\236(K\327\61\v\272\377#\275\7\61\214/\376\223\215\345\215T\222y\277Px\t-T\230\330\205:+\367\375kvl\261-\34\247E\370q\250\245Ft\35\302\354X\350\350b\26\316\332\320B\17\305.\334N\t\231l\300\225\4P\r\24\252T" - "\245:\16j\256\23j\256\63\34\353q\342U%\270O\0c\242\310[v\330|\221\270/i<\263\213j3\267\230\242\340\27\263\224\302b\221J\\\254P\313\240\326\273H\307\230\311l\336\4\263\226\334p\272\220\357cYH\\\204\310\34\17\37:\177L\324I\245\332}\16\375\"\251\225\373\343\255\235\16\376O\252\35L\330\275\213\357\265\356\220\242\270\335\70\235D\243\305\207\301\315\303\36\64j\227\22\f\316\245\364\64\327/^:\341\376E\373q\274\17\226L\24Z\252Jd!\31\303-9hH,\346\b0\346\304\245cv\314,`VF\337uKo\346B:.\17-\235\266\263\337~`\344\227\336\t\226,G\2pK\237)\230\245\33J\264\364@\305.\307\252\243\353\217\270\301-kM\226\37G\227d\5\64\335\330\313\227\330\230\345\202\63h\271\342\24\273\\k\345\226\33\316\362\313\255\347\205\345\356\v\342\362G=p\f\234\264J\r?\244\345\33%\316\25e\31d\0\333!\3\330\322\273b\310dV\nth\205JdWN\224r05\1\356\204\6\345\312i\323O\341\365\305\300}s\244fSH\313\274\362\216\2\255\\\241XP\331\271\225\33J~U\255\22VS\324\342j^l\260\303\256V\200\340\266\332x\344" - "\350!\323\36\255\366tA\223`a\253F\335b\220@d \211\30\332\253U$j\205V?m\n\7\257\306\22\30\240\317\330\277t\225\324\273k\34\22\275IG\253\367m\354\232\326\312\255\25v\360k\16(%=\361hx\7\255uZ\304\265\17\314Ri\303\325\221UI\366\332\253\20\30\205\361Nb\212D\255Y\23\65\336\324\255g\326\256)\244}\256GD\222H\341i\271vG\305\256+T\221\236\241\20\210\222\67\315Fs\245i\6\67\300\250k/\351\355\334\272\266\4\221(\323rA\27\263\374Q'\34X\306\333(\210\267\217|\35\243\216s\225\250\335\65q\300\253S\303\211<\271\62CHA\27B\n\271\354\177\224\224\260\236\235\320\267^h\t.\316\272\335\204\326\337(\346\326O\231\371\365\367L\"\0\307\365;\306\30\357FE\236\201\f\243$\350H\304\313M\214\317z\16m|\260u\216]\273\346\b\245Z(\2\62ob6n\246\243\37\322\364,\214An\343a\16\277\371L\242\0\337\213\233)\31\270\71`\262\265\231\251\325%\34\342\206\200\266{\260\321!\t\237k\215\70\241\372\324@\273\252e\36\30Q\277y\314\310\366W\215i\271\315\342\357\354\374f\335\17\20\256\64\212W\265A6\n" - "\341\312H\203\201\212wn\276aqm\236\65\273\67?)\226NJ!Wc\21\273y\275\4\244\253\\P\256t\302\3\352@\247\65y\266b\365\61\336\255B#\376\17\203Z;l\23\200\357\265\316F\273\264Yh\314\203\267\352\355\341\32\325JxG\276=*\264\66\235 \321\331 \22C\1\17o\5\36\336&\377\71\6CQK\351\353\63\222\211\17A\267(\1s\214\22\20\6\25\244\355\263\325\250\343\267\232s\205\255S\r\342\326\251c\236\255w\216\237\360n]wL\36\215\327\220\6\63{\355\22\326\366`\374>I)\322GV\354Ii\261\363\311kF\327\223\223\271\356'\357\347\365>\271mb\266\343\314h;\323\302n\227Up\333\265\205|\267M\330n(\20\267\333\363\373\266{d\234[\355\331\276^^\346\335\71RR\232\20\311X\357\344+\234;V\225k\347\25%V\324\0s\"xI\fk\247\315\306\207\262*nB\377\bM\363xi\245\63\223\276\216\311\310z\272*\222\230\235\263\5\350A&\273\363A!\267\3)\277\235{JaW\251\22w\217\302\342}\5uHyv\223Rc\222HI\327]c\242\224M\330\255J\23w\337\60DP\245g\367\2`\340\335[\315mD\252\3nU\23\273WO\205\312\227\220\31C{\307\260\16[\31jD\200\30" - "\255 \26\207r\260\275\7\207\342\336)\205s\257[\345\332{O\351\336\373T\335+\274Q\215\213\266Ok\7^c\343\366\256\231x\260&\367\36\231\305}\215\245o\337\20\222\27\366\213\262S\274\373\365\317\32\23#\17\0\224?\347~G\236\v\324\277\336_\30(\210\227\321\354\257\37)\271\375\63\261\302\376G\1Z\334\377\334OCW\224\37\202g\377zg\200&\220O\237\325\6\23\335\301\272\316\177\373-\236\345\210\250.|\177\253\16\2w!\374x\260A\357?R8\375G\224.\277^\345\366\353\325\275\335'\200\230\32\321\367\267\250\203M\200=H\322!H\352\364\27Z\\\20&u\373\315\305\60\342\353\30\177\211\r\375\302\20\0\64\71\336)\370\253\306:D\177\343\330I\351\66(\26P\234\377\264R\355\365\277\253\212%\302\322o\312/!\377\345DI\203\367\337\324\361\1e\241\20\70\232\"\2\r\353\v\30\364\262\62\341\t\24&\33\274\201\206\234\204H\351\4\336\357t\6\376\307\310U\206\265\225\245a\334CZ$\r\f\r!%\t\301v\2\271i\nu7\352\324hS\367\26\346A\306\331\311\235\235$W\207\347!\353\356\273\177\326\267<\343\356\363o%P\301\335" - "\235\266\350~\347\336\344\206Nsx\366G\210\220\\9\347;\237\274\337\373\236gV8\376\373\262\321\351\16H\261\271\203M\224;\256\b\346\66\211q+\267\262\356U[8w\316\32\336\275\301\313\35\305tL1Z\22X\352\2\335\b\370KP;c\325$\276 \347\336o&\335\305F\306}Q\313\272\257\353\70w\231\330\211J\250uW\6\30\\\365A\31\231\341\340\241\22!;N\264\325\307&R\365\340\260\353\223\305\322\314\67\201!\307BO\204\37\207\30\1\305\341Y\262^W\"\341\21\330&\204\310\350\361\31\276\357\66\353\263\203\355\365k\202\34\365\333C\234\220\376\0\354QL\325\237\324\222\365\225:\32\240\16\t\376hX\246\342\33\222%\2\254\21A\37\305Q\230\71\23\340UD\256\253\275{-T\357\272\27\23\246\215Y\242\321z\257\60\332\247\255\220a\234g 8\317 \362\243}\301\f<\274K\237\210\301u\243\356\355\330\272\210}h\\\212T\16\23\347\1\374\342}pJ\331i;\265\346\214\343\336\221c\316{\326\23\266{\327\317Q\367\236_O~f-\241\357\207\235g\356\307\25\261\367\323M\334}\342\2\377\365\225|\37\375\365\376\246\374\177\224\224\270\356\227\24n\306E`\210\366G\0\312\td\337;\21\304\335/\r\26;\332\336s\273-\26AB\b\"\3\307\375\347T\316\306\340T\33\250\f\250\306eI$\250\f`\2\343\241\66\216A\23H\227\231y\252\"\252\246\61\1\272\236\251\257B2\322\250\217\62\t3\27+\316\\\252\332\33!SQc\277<\232j|:\221n4\327i8x\301\227\303\270'\n\371\202v\211\246\3\262\31\22\36\70.\22x\345B\372\253\224 1\364\222\212<\377K\252qs)\325XTF6\36\37.e\320\37\341\276\27!\221\215\326@{\343\265`GcE\220\263)" - "\200@,\21\30\4\1\66i\nU<\1\322\303W\320\260CN\322\24\177\361\202\253\311|\240\b\263\226`v\303\260\224\234\246M\4\24\304\250\36>,eir\277\225\204\243\252\0|B\336\223\2\t<\362!\365\30\305/\341\370\216\250\226\0\230\233m\332\243\20\233\272\b$\361\177\265\207\b\252\351\274\211n\216\320\372\215\7FA^\330\254\212ZL?\305\204\265\346Ue`QZ\272\331\244c\232\267\351\331\346\23\31\234H\353E\365A\363%c\254P8Gb\334\230X\312\371\rW\340\303M\24\360!Hh\317z|\270\312\343\303SE\37\236\344\363\341\246\345\370\2\204A\244\17 \177p\315/\37\344[d\207\204{\224\tJ\347\226TP\363\264X.\\\\\366\377\64I[\366YP\223\224\203f\251\304d\303\21\247s\241\345\233\203\".r\374\70\341\342G\305\251T\313a\200\333\240\336j9\223\310|t5\232\375\376\365\30\256\345&\301\267Ti\304\362\"\266F`!$k\320J\f;\30^l+O\246\252\65\\\265\206/\207q>\204z\\K\301<\257+\243\205\244\243\345\5\31\333\32\224\362\30\310\203m\217\335\66\372t\275pp\245Z\24\64+\355\333\325\242X\b\234\351np\246ItkD\24\327\232 " - "\342{\4\331\252\321\63\255\31\31\2y\252\265\0XO\255{3\263\243\375k$\254\276\326\302\342d\264\325\272\312\336z9\335\321\372\254\332\331\26\250\260\265\311\223\251\266\344\30\262\232\240\333\322\224L[\366s\254\365Y\0H\322\370rMM\233E&\36\242\266m[\334JW\333\215X9\336\324\b\n\347\242\254%R\303+|\21\207\t\310K0t\250\262D\203\34\351\227\334l\365\264\32\61\201:\225\262\252$\326\222\377@\334\36a\244\332e\177;J\266+\377v\30\231\fT;<<\211?c\24\321r\\\fh\327X\310\37\354\62\321\355\271f\6^\263^|\232[\262\272a~\376J0\232Y,\n\334\276\32\16\275\245.\211l\337W\227\16?`\201'\302\265\37\273\310\267\237\273 \270\226h\6\207\201\264\337*\242\332\237/A\1\271#*\203\357PfK3,\307\5\207\16\203\231\374\262\202\240;\362\v\270\317W\350xdwf\224\210`\233\324\205T\307F\23\320Q\b\0\372<]Z\6w\2\30H\22\307\224\16\244\260k\347\207\325\4\325Qd&;N\201\\\242\330\304t\\\3\245J>\327\361\354A\276\63p\237\24\252\227\356\232\371\230\34\236/\1\226g\7,\317\321)\327;;\223\62l\235\351" - "\26\252\63\317L\376&[Ow\256\327\61\360\236\205\367`\335\27\370\362\213\336\263\254su\356.:\200\71U\21\t\b\212@\372\316\245\26\247(\237\304i!\25\323;>\311\311p~\362\224\316\203\355\71\n\304t&_\216\227\307+\311\316\63\241\f<\243\364\240\272\220\357|\306\2\260;\215\243\277\270\62\213\245\305\203onH\335\7\264\16\242\360\212\63Qh\"\303.&5\t\332.\272+:\315\317\264w%$\331\273t\361\216\256\325\211\316\256=j[W\261\214\352:\265\202\204\7\234\335\263Y\2\20\263E\214i)\374\260\353\212Z\340%\344b\333\222]\267\364\36\355\f.G\377\370$\201\f\17\326\216\340y\204>\242\350?\204>bw\240\332\321\35\236\346\354V\344\240Vp\267!\232d\r\4\375\203]2\246;\317\302v\257\65s\335;b\371\327\217\245\327t\237\360u\310\212\16\210\215D\237M\211\355s\351\322J\311\356s\"\336\321}\313\4\315\217\232\236\240\300\340Rqz\342\312+\342+\253\260\66\333\23\355\233\"\314\215\243\225\315\366$\33\245\316a\354\n12\304\n\322nq\253\v9\td~\341\213\351\71\\\217Q\317\367l\316\20\16\374g3\5\37\61" - "\n\335\342\6\214\320\246\335\276\343\265\236CZ{\317!\235\255<\221\252V\1\366`f\30M\36\v\340\rW\255\342\313=X\276\3\5\226\236K\372\fW\317K\206L\234\35yC\27\226\5\343\3\\0`z*\325\233l&{s-t\357\246\237\253\231\336#*\266\367\254\232\353\275\225\307\367\276\374\306\ni\375\273\372d*\365\242\5\336\247\v\264\367e\4;\372\62\203\234}\331!\266\276\\3\325Wh!\373v\20\210\206\315\300{\26\336\373\372\365(K\352\333\vB\203\276\243a\1r\34\331\242\357\254\220\336\365]\227\261}\225\351\\\177\0\\A\n\202v\373\243\262\262\375;\361\376\2\202\352?p\234\354?\235\307\364\227\6\262\3\321A\334@\222\247N\250\35\310\v8\356\32\330\1\232\67\351\307\3gV\331\7*b\34\3\257\244\71\7e+m\345\233\250\32\331Fr0EC\203&\232\201,\232\35\64&\2\321\354 \20\315<\36\20\32\24\206\332\301\265\t\n\327\340)Y\16\256\265\347\31\355_\\\201\32!'\6\233\337\22\344`\205\205\36|\336\210&^\244O\212\35\374\220#\241\305a\207\303\5\367\64\24\221G\202\346\217\201g\326\272\330\64\336\210\246%_p\256\25\16" - "\377\4\r\360\"5\244\271\200\226\344\220\341\34\3/Y\353E\321Gs\270%<\364\64b\346J\5 \266#V@\r\255\326\222C\333t\364\320a\344\26\30\260<\\\221?t\32A\220\370\203\r\335D\347\24\302\356\320\213\300\251_%\212\67E\317!\215Dy\fU\255\240\207\243\314\254\225Sp\325\n\276<\306[B\20\270\275\36\274\271\276\37\265\236\337&\242\224\63aQ\340\341\345\6vX\227\311\ro\314\342\207Of\213G\205\241\214K\1\265\314JA-\223\"\250eV\242\375o\300\212\300jQF\v\265\64\66\376\fWi@\335m\242G\302\215\202ddD\t\276\303\0\321\r\313-\2(\233\0(\33\245Bhh\261{\325\300\324\v\230B\216\320.\307\351\236\254\204\264s\220\30`\264\376%\276#\272\22\352\373\362\63\344\367CO\303\67E\376-\26\62\23\253\263\221\\=\v\17ndg6?rV\324x\350H\350\16\371?Ay\201\337\366P \212\217\370\330%\234\350\345`o\35\235\37\201V\321\67\27\203\60\24\204\rk\204\243!9\324hB.\7\317<<\213$\24\254xa4}?9\232\277\217\201\7\v\257=\33\240\324\216n\312\325\272FKtz\277\347\20Z\317\243/\4\261c\221\236\350f\303\61\245\30\215pWcI" - "z\26\36\334X\266\201\37[\223-\16\37\62\343\261C\1\n\327\330\225\234\334%\360!f<@X\307\257+\363)\305:\270\25\231Z\332\223D\355\331\223\344\243b3\320\27,$<\323\360\374\204\32:\1S\310\34\204T\364\200\370-|\205Ax\321\251\204\307d\306\351\366O\v\237\220\31\217G\335V\322\343\251\371\314x\366v/Uf|}X\315\370\236\r\337\244\312\304K\227\64\244\61\331k\316\20\216\361\243;\235\343Wv\330\312\255\210UT#;N\217?\227\v\215\247\23\320x:\303U\227\360\345V\37\322\64\21\254\317tM$\32\262p\365\2\332D\300kK\311\376\71\364\23\206\62j\242\260\224\206:\235\233\330\216d#0\312\b/\363\371\27,/\232\321\24\370@\353\305\204\177\b\226\216\211\343\33\235\23W7R\360\32\5\320\307\5\376\5 \304J\252\231x\321\v;\376!4\330\366\303\312PaP\244\240n\237\fzc\205c2\372\215d\347dB\235R\324\f]\244'W\276\21\317L\352\336X\316N\346\325\311\271\311\215u\t\374\344n\330\273e\362\24\252\352\311\311ko$\275:Y\371\206\254v*\300\374\206Z\356\232R\230\337\320\254\364\371\214\251\334T\333\324\66\v" - "5u\214 \341\65\363 \304\314=\210S\361\17\66\251=\267oW\30]\17\236)H\363\277h\376\250\62S\17\345\4\371\60\365\266\231~h\316c\320\v\324n\365\374\232\305\71H\0\337\252\23a2W\301d&s\325\"\372&\265\61\245\36\244\376q\231\343\17\266(\250\357\354L'\37\356!\230\207%\5(p>,\273\300?\212\277\350\361\227>\240'\6\323\211\311\243\36\255\376\373\21\362\321\246\277\377\273\230~\264\377\357\356bA\6@`\311\227\216*7R\f\374\233\240?*\376/\301<:\376\37\202}t\231\340\37=\17X\301m\235\30v\361\254p\4<\370\206`:@f\237\16_!\310\v\256an\227\344\23\346\212Bk\376\20\352\361\t\216\71kp\355\334\305\30\365R[I\250\4i\v\243I\345~z9O\22\377b\31\36\277(V\221\177\\\207\312 I: l\275#h\231\34\206hg~\f\f\3\63\367R<;\37\232\0h\311k\370\203\t\266\70\277,\223\233\317\250{+\221\257\265,n\361c\345/\213\65)\330Bm\336\b\236\373\71\271h\307\210+\206\307\275\62\204\63\372\7\4P*4\277Z\315\314o\213c\347w'p\360\340\347\221\62\224\20\343\65>\262\317\337\320\261\v\1zN\310sL\266\305z\241\205\70\243\375\247\352\34\7\24\211\316\5m6\32\325\205\34\23\t\37\1\6\222\313,l\320\262\v\333u\334B\221\236_8\202Z\315\330-s\\\231(\264\303\325\355B\213\25\7\236\203d\303\303w\301'<\v%\253(\253\206^8o\222t\373r\34\246\272ps\7" - "\271\360\355\235\fC\361\362\7\360\27e\5\340\257\255\b\302?\247P\204\277\363H\252\37\376\247F\355\22\374C\307\323\0\324\344\33w\22\240\347\34Xn\323\200\65I:\260>9\4lL1\315\222\320\32\260\223\220\370\330]L\260\62\v\341%a\367\62\33{~\be\247\20\312N\305\356\236\244(\365\323\272\237<\316>\270I\240\26\3\350\62\332\330jj\277x\215\255\201\353A*\vL[\263\200\312\61e\345\303\363\n\214rL\231\330\\\356\307\356\307\35\4Q\20\200\335\317\65\311\330\275%]\303\356A\227\216\335\177rG|\261\202\67\323\352T\274)\314\b\341Mw}\30" - "o\372<5#xsC\365\304\312r\354\26\374\v\222\225\373\27\366\65\232\70\263P\307\233\333)\3$\334\345*0\234Z\23\300pv]\20\303E\265\"\206\253\352\375\30npI\30\236\357\6\206Wyd\fo\250\216\225\255\61\274\331\247\263\17+rc\205k\243\264\222\301\211\231\333\243\243\243*$4\242\355ASx\201Ma\333\4S\240\252K\vU]fY\304\1\243\354b\314 7\316\350\220+\200@\212'\210\200\335-\"\340\250fF\23\231Q\33\63\232\304\214&On\264\227\227tc\20\226\330\346\65gb\250m\7U\327n<\16\372\330(\17\334\350Q\202\257\335X\253\322\307z\r\201\222\33}:\2M7\b\225\331a^E\313\27\222\377\243\211?2\225&\376hRTh7\320}w\342\70Z:\21Yl\33\350K\232:\202\300\213\251\t\274m\207\245.\30Y\325\63\271\271\17'\20\330\345\223\21L\263\251\b\n\202\361\242\244+\264\67\264\30\27~\362\302\22M\7\64\35\231\246\243\320\234U\312c\353\4\327\217\224(\302\b\226\247%\214 \370\360\324\4\316\212\337n\356\375\370\331\177V\225\37\30\65\66\254\b\316\367\320tVy4\4\7\32\364\177\264m\206\225\n\311\342\251\362!\270\245\25\b" - "\16U\262\325C\203\230\366\260\16\61\323\35\313\327r\256\26\35M$e\t\210e6\32\64#\311\322\65\310zhoBa\321}\371\34\210m\16\t\342\22\1\20W\246\313\20\67dD\217\301A\33B|f\25\215\370c' \356\354\226!%\257\214\216\360\331\371\64>@\312n\223\221\64\226gb\247\62\25\302\300s\302\344\62\251\277\24\357\71\235d\274ZP \315\354R!\315\352\210\226e\274a\n\245\\n\336\3\216\377\334\327\24\267M,\26h\301\252\250\264\222>\2C#B\332PC\272\243u\264\v`,\330\3>\3\213(\204 \275\20\211_\302\220\263h{\by\355\300\246I\220!\22\67\v\323&Aq\264(P\252\nU(\265U\32\371\177\35\312\254\274X\324\21\5|\265\216\307g\240\307i\370\370\32\377\217\257\260\242{\207<\374j3\205\347:\205n\261qF$\306%\25\211\222p\315\312\377(q\251\373\352#X\"\304\323\327\222\23S\222RmS\222\315\325\65N\34!\223m\376\247%pcn\350K\t\1\260\321\245@_U\253B\357k\210Zw\363\306\30X7\350Oz\350\353\177\254&i[\27I\333\262\65H2\247\317U;\336\26\307\70S\214\210m\351\n\266\325\262^\302\245\322\320\n@\377S\265\214=\31e\364\26.\243\267p\211\66\264B\37\\\32\273\256\26\346\366\254}\264?0\374\322\337\362\5\257\225\215\256\26\257\325\215\262\"\215\204=9\243k\201=\245\243\353\311N\203W\301\236y\243}*\366t\214>\241QNQ\247\334\242\271!J\343\22<\22\271gO\224\3\203~\204=}n\r{\236\366\350\24}UG\226T\213zi\354\252HK7-H\373L\221\366\233\376\1\247DO\244\20\323S\304\236\235\261\275\25B\251SB\beY\305(G\201\371\70r\320V\263%" - "\212J\201P\351\n\31\241\232e\4\23p\221\221\246\207CR_\24k\366\277[\252U\346LC\v\b+\200\320\246\332z;oq 4(\bGDJ=\354\324\356\325\277\304[)\256\0\336\312\361\4\361V\231[\304[\r\f\270\351\223\330E\7\273\350r\360\265\321\36\252b\264\251x\213jkxkU+\301ak\342\336\204\267\236jL\310\213S\21\260\223\273) w#\220\273)4\356\331[[\266\2{\23Kd\354\315.V\330\337T\302\272h\330[\221\250co\215\215j\213Qc{g\22 \24{\275I)\34,\273)\36\305\234\354\336\326*\25{\27\345\221\235\65\16\235\224N\310\214l\330x\266\322A6\266\333\23\270\371\263\221\324\226\330\332\312\227\210\342g&\343\212\325d\201\243\f\337\"\r\265\262\267\202\236\365^z\326\211'D\fk\353\270\71\\\202u8\335\r\204\363=2\302%.\5a\2\206 \334T\243!<\237.X\270\313f<\341ua\204\237\256\367Z\7G\370\225\324\0F\22R\202\30\311L\22\61R\226l\316\22$\213c\356IF\32\22U\214\264\263Z\206\306\370\\#\217M\241`l\344\205\264i\274\224\16\260/\251\316,0g\304\200\34\330\67-/\200}\271\313\202\377\246\251X\354_\242b_q\242\206}\r6" - "\35\373\226\233\b\301L?\371\311\211N\321L\306\301p2\344\347\242\331\270i\n\217v\202}\217\367H\330\267\251W\6I\366j\244\263+\350\330\237]\25\251\7\205\261_\240\256\17\334\371\357o\22d\354\237[\310\343\256\320\355\263\22&V\375\177\272[$\f\200\341^\367\377a\5\341\66#/\364\34\235\376;D_3\16\337\64I\216\344\315\26\7\265t`3\350\332o\301\246e^\356\1-.\232\347\6&\225Pg,9>\36\350\317\274p\306w\\\264\273\315\343\305\206mt\350m+\24\366\241\262\217\311\202\27Z\301\330\305:\220\331\257\340@\361\337\272\343Tq\240\376o\375m\247\206\3s\357\364\353\70\260\364o\367\33\265\375FnZ&\274\245U\306\201.\27\31\330\350\241\341\317\273c\227\230\25^2\366&T.1\316\204\22>\225b\363\222\bh\0\7vh>\31\7\263T\237\261\337\33/S\204q\301\272\237\373\266\332\3\373^-\n\222\254\62s\226\364O\320_e\372\325\4(<\221QLq\260J(\261\363\204M\242L,\205\334\205J\356\302r\271\223H\"*\344\b\314\275\270\t_\200\220;\361\267\31\352N\351\36\317\325pp\366x\271\216\203\313\306\315\222\330\f\246" - "\222\26\267\360\36\354q\5pp\263'\210\203[\335\342\371\67\252#\376\35\7\337\250\242\25\243\225V\214\366\273\t7\264\336\37J\232\221\60\202C\302\303\t\366I\244?\241tG\20\337\27\"\240\r\256^\372\307\305^e\377\263\243\261Z\255\300\325\217\306\241\32\n\264k\234\62\221C\251\260\337F\205}\247\206C\r3b\5yVx. \264]\6\1\330\rXC\251\221\325\263\223\vJ\307x\212 \17\330\25\372C\245\177\232c\214%\350\320\254\24\216\234;\16m\250\243\303\276\354\221/t\233\16\307\305Gz\342\320\256\70\226q\326$\304\61b\20\250\377p\213#RS5\270\244\207\247\365\214\265\364\216\340p1[\3\370\302\222\223=!\300\341\306\243=2\16/\361F\371X\371\234]\4\213\277\315\235J}\303\336\204\216\256a\34^uwJ\31\207\327\366\22+\216ln\231A\312\271\253\24\366\27\265\277N\303\341\355\25:\216LuEa\336\221\344\62\351-r\2\301\177\63\247\3\377\246\251K\306\221\334\66\205\376\242\322/L\231\5Gv\256Rq4\251[\303" - "\321\314.\375\235e\35q\221\300\321\222\204F\236\37\211.Xto\370\253\332\375/4U\320X\341\221\277\365i\251\0\216\66e\312\70:\213yc%\336\257\222\274[\200\64]\203\312\\\233H\272\256\226\343y\267;)\336\363\30\67\313I\363\377\3W\224\314+\rl\320\206z\364\301^s\357t\27\364\22G\327T\6p\264\277\61\210\243\317zD\34\335\342a/3%8\201\243\257\371\344\354\351\n\216%\26\62\66\26\216ex\215W\272\222\214\204\30\242\347XAn\303\b\216\325f&\360\5\71L\271\276\177\377\244W\375\361\225B\262\61\67\223\345\6\204X\270\315e~\340\330\37Z`\24@|&]\207\207\37\0e\275\271\344\316L\36j\212fE\305\244.\25\307VuX\345\244{\222\66A\34[\343\25qlS\227Y\27m\1\216\r\272\"\233\67\67\273\17\70\266\243Z\307q\233'\242El\255\334\307\323\253\203\70\356\250\361\17n\221\372\267B\251\20\330\372X\253\340x\245K\375\341\65\267v\376\r\217>\30!\325\6\310\267\231\330\227\322\62S\275\302\204\336O\370`%\372\343\245J\355\334\204<\216?\334\240\342\270\317\245\341x\267\233f\371\274\307L\314O\262\35b\201" - "\266\345U\214\\\337$\310\3:\304v\227\372_\337pG\327\340\271\34\324\370\177\366\21\213\225\tA\323\210?\273T\342Yi\304\267\322\211k\25\255\277\64r\232cX\317\21\333Q\231\270\237\273\345rp\"\275*\210\23\245\2\275(\323\330wG\33Y\330\230/\343\304\214\71\312\177\332\326\306\36^\302\62\351\70\261\330N\6\2\244y\21\"\315\213\335\224D\v\343Dgb\322\b\343rQ9\247\265-X\323*6\267Q\312\314\70P\213\331\277B\340h*Z\332\20si6\211$\264lK\246\331<\356\16\340\304@\rMi0Y\304\311\304Z?e\354$:(\350\200\62\35X\241\372\232J\231=\r'3]:N\26\270\215E\255\301\340\262\342di\275w\4'}3\22\262\70\233\254Y\22N>\332\212o\35+d\234\\\343S\16noWq\362\311\213\355\61\275\206iL\334\361~8T\33\r\334le\333\247Z\251{&:0\336\351S\304\231V\302>\223\317}\361\201\202\203\16#\333G\f\246\350\273\354~\260F\177;_\243\177\62@\373?\232ih\200(8\271\245Z\335\235Q}7\242=\237\333@\314j\276\62\316\240O\351\216\311BN\6\1j\244\324\221k\2.\5N\356(\17\340T\306\364 N\225\b\"N5f\262\25\201\212\344\300\251" - "\66z\324N\315OTp\352Q\233\212S\353\222\64\234\"\274\61N\355L1]\177Hh\b\343\364\224*\367\bN\347e9&m\253\225o\210\336\230\367\357\264\217\326\346\323\355B\20\247\27f\210\70\275\324\316\16\212\323\217\272@U>\231a\264qz#\341\17\4\305tN\374d\316\351M\305V\343\214(\333\67\237\272\t\255\376\333==\323x\205@\3\222^l\202\247\256?\321\226@\257\b\321\224\315\267\244\205\315\205X\6\62\365\61\321\250\362\343\260\264\5\211\363\307\327\250\360Q\251\230n\230=\202\253\267\307\341\352\355\22\316$\246#\334J\215H\236\315\260\324Py\374b\5g\322\306\313\64\234\311\315\63w\35q\33\312\63\245\256\0\316\314p\7q\246\325C\304\222vC#\301\252B\264R\25\302\204)6\213\202Q)i7V;\256Zu\370\331^\304\332\60d\361\71M%\n]\24\25g\226;hb\235N\35gzK'\345\223Y\350\203\354\335]OK\2\277\333\31Z\36\211\276\274.\253\30\202\63\33\v\351T\237{\202N\365\365*\21g\376\234\356\307\331\274\62\tg\213\5\3\70\201\263U\271\nin\250\337\267\347h8\333P\256\223\bG\224<\217\263\263\327\317\243w}\203\231" - "\37\232\267\201\16\31\21\346\62\23d\341-N\205~\324\360\226R\32\63\251/\366R\226\366o\231\36\vg\327\335K1\342>\243\337\364v\21)f\25\221b:\210\24\323\251\220\220\f\221b\210\265\323E\217\251\306M\n\323:/\21\271\n\214\271\62\374\22E\246\243=|\200Gdq\224\254\222(\245g\277\317l\216\200\261:\b\214\325\305\300X8\373D\32pv\363h\241\231\r;\373\347\273\220\6\70\227v\237v\21C1\225:\315\307\356\234\3B\0-o\nA\234\253\333-\210\70\67/(\20\\\321A\231R\201\21ZpnE\241\202s}\1\201\232\263\f\v\332\235-\275\372\235\347{B{^\317\64\355\232\2g\374\25\215\6\277\340Q\245\276:3\271vn;y\17\23\354]=\202\267s\f\210t\373\354\341y\355\201\245\263\375\203\355\322\320l\260\274\353l}\220\211-\4\205\370d \211[\7\360v\347\324 \336\356\353\24\361\366\226\225\367\211\261\341\235\204\264\250\16\66)^\207\360\316T\353\2\244;\214\331\246\363S\361\321\253\316\253\317\274\223\357\223\360N\271\207\255\66Q\251\331F\205\313\262\350\222\372;Lu\221t\320\232n\237L\256D3\213\305\367\240\322" - "\370\361\305\377\231\325K\246\247\216\347gM\6I\304;\215\211*\336\231m\323\360\316\302\32\35\357\254\257\65&T-\t\236,~\\\205\363\63\31\322\237\215\247\207\33\357l\357\216\2\221y\270\373\36Zq\274\60\251\26\364\306M\326\302\221^\33\274\233\346Q\373;\342\35#\267(f\304\344\371\306\311\274+\224\250x\267\222P+v\362w\274\247.\276\4\31\23\27\300\273-U:\336]Zld\364\32\247\306u\225\352o\213\335\316\66#\226\310\317\265V\253w{7\4\360\356S\355A\274\273\365q\21\357\356\332\350\307{\251\375\22\336+\350\3\336+\177B\306{\365\353\24\274\67k\255\212\367\226\255\327\217=cq\234\302xo\235\63a\4\357\r\226\226qJ\253\16\t\357\347\263R\221S\306\373E'\34Jpc\252\31\323\360\245\250\230$p\24\6b\242\65\27.\210\65\345\304\373\256\262 }\330E\274__G\302\3Mt\204Y\5t\r\233\351\bK\262\24\274\277\272\317\330\v\274\377b\206\216\17\22\275\241(L!3\214\17r{z\357\255\340|P\232\25\300\7\215\225A|\360h\235\210\17\326\324\373\361\301\253\245\22>\264\225\1\37N/\227\361\241\267Z\301\207" - "\235N\303\356\207OT\350\370pGU\b\37e\305\n~\37\71;W\21\27\241\253{\342s:\264\216\221\347#M\274 \360\322\n\276\70X\223\216\217\326\227\232\260\25\62\377\\\205c\4\37\355H\260[\tr\306e\302\307S\334l_\343\21\361q\16%~\6\245\241m\244+\265E\306\307N\37%\177\376\363\66\312\376\374\347Amh\233>8\30\247\232\215\217\33kjG\360\361c\271yV\244\207\217\373j\311\342\213\365A|\374:]\211O\246\22\63f\271\324\277\2\370DXfnbv\17\272U|R\354\321\360Iu\265\216O\232c\t\374\206sd\370\361\31\365\233\301gu\266\330v\340\343\342V\25\237\315vj\370lA\223\216\317\36\365\232L\353\20>[\227\22\306g\317$\231:\2\17\202\34\66NL\270&P\24\225\241\4\302\374\66jD\205\265\242\217\370\306\304|\217\25_2\263\26\201\363\266\\\t\347\355>:\211\326\310\236\206\22\61\355\214Lo\6\6\347\363\243\325[\234/\267\211\70\357I\365\343\274/9\214\363\vm\251#8\337\233<\205W\216\211*\357r\331\16F\241\65\26\373q\365vp\376\217>9\312Sve\376?\20\244\307f\365\352\70?\324d:J\216\341Q\262\374y\204\24\323\300}H\211A\365o\346\224Q\302\316)\343\363lS3\374\1\372\331\17l\345\302Om\343\363R\37\315\312C\353p\261]\376\240YP\377\356Jf\222\v7\241\b\221\276\337\70[\303\347\363j\36XA3v\326\221G!\223/N\2|\336Q(\377W\367X+!\225\354V?S^\370Bn\251\303\270\331n\351\301\247\316\333\250vP\343\23\27\321\205#\271\223\273q=\27\266\347\4\360y\177\201\377o\347z\351|_fS\334\221/S\376C\301\27i\16\25_\344\27\322C\233\251\343\213\362\62\23\\\34\306\27\r" - "\225\302\b\276\350\314\260\347p\367\36_\274\224DY\225:\342\264%\223\245\355\66\25\27\322\22\65\372\215\316\376\25\335\350\372\270j8\270P\264\25\270Pm\223qaV\222\202\v\313\213\310\304\206r\r\27^)\324qaWVd]\307h\322\270\343\301\335\276%Co\316)c\364\241^sI\214\363\260\243\365Q\244\333\350\202\373\301v\243+=4\354\251\311\300v\26\324\215\23x\31\224\305o\37\317 \271$\237\212\321m\351\361\234E\305\350z]\262\334Dl\227\4\226.\217DF\341\326|\263\205F\265\21~\215\376\r\227\212\61\233[\303\330\24\217Nr?\24\377\232\256\215\17\231\32\263\17\320\230\207\214l%\306\252\232\356\352\226\362\335\364\304\0\251\260\4I\221E$E\26?\306ZZ%\214-n\1\306:}\21\315\356\f\32\277q\274G\243\345l\274W\227\7JC\30{6\346\6\307^\242\234\342\204\274w}(\207\332U\346\222\251\241\351\62\276L.\216\235,\247*\370e\272O\277\320m\26\376k$\241!\215\222\b\255\21\25\263\326\30t\222T1\3\274\64\271Z\323!\rxe\352 \31\253$\245M\204\2\64K\34\326\236\370^Y[|\371\220G\302\227\225\r8\361\347\32\216" - "\264-k\343\33\306\227\325\336\4\353%\240\361\1\32\37$[\342?q\272\375\64Rb;[\320P\231\206\322\23\344\243'\310\247\221\t\235\16jB\227\331\303\343\263\2.:T\200\276\33\244\61\"}\217\34\30\250\337\17{\0\310$] \227\311\360\n3\224\375\b\276l\233\62\65oB\244#[\222b\363\247YL\320\240\204\316q\251+t\227-;\347\336t\273\350\36\16\270\65|\371\352\200\216\361\324M\21\210\340\b\306\v\335EVS\275\347\274Vk\331\361\231.\t\343\v\335\300x\247G\306\370\323\325\n\306_\257Qqqj-\211\336\326\221\350-c\377S\376'v\227\2\270\350\364\61\317J\23\247\357\271\30\217x\230n\325D\375\364\b\303r_\23\66\372]\244\6I\6@\27,\326Z\217\3\221xon\217\374\323\23\261d~>\317Y\262\276Squ\364\342'V\357M\350\243\306\245O\4\226\256\16\326\364\261\306\245\375^\312\371w)\364C)d\253H\200\7\367\t\212\306\204\27I\225\26\27\333\335\24\23\266PL\350\273'q\31\306\305\16\322\31\305\305\227\335\234l/.Mi\225p)\247\35\4\201\226q\251\270E\301%\327V\25\227fDJ\7\332\344{C\\\362\65E5\b9\372g\26L+:d\221\213" - "\206,\247!\313\356\31\222\233\22\67O\\Z\221\30\300\245\265IA\\\332l3R\223\227\6\233@\301u\207\221l\333\235Aw\374rB\213\206\313\331\265\361\"||\257\327\30k\240\267!\322\267i\203\325\267\t\227]\33d\\\236\61\317\214;3X\360g\6~\376\376D*\36\333\60t2\203\276\60G\320\350/:./k\212\65\307\310\34\306\345\16W\0\227{\252\203\270\274\301#\342\362\323\65\306\224/?\337\5\\~\255C\301\225D\27m\203<\261\223\r\343J\26\253Y_q6\304UYp\245\201\354\\\361y\202\270\62\327-\342\312#\325\376\377\\\321)\341Jg\5p\245[\220qemI\254\276\25'\23\331\307\306\365u\322\270\227\335\342\217\5\65~\\y\243U\"!;\303\217\320\6\305FE\316\66*r\376A\303\325\264v\35Ws\252CT3\212\62\0q\265 \221\2\311\253\63S\246\330\371\371Go\264]\233\31TB\250\317\341w\262\262\3W\227d\310\201\327\62\25\\]\235\245^z\262M\33*\320\7\v\255\334:'\6\227X\214tu\223\213 \37\356\70\30\302\304t\311\36\5\365\211*\256\16\332\350\314\336H\262\332\214\361\242\215C\371Ke\\K\216\255\372\236\70\337~-{z\0\327\212\312\202" - "\4\362\252\24q\255\265\320\200}Qt\323\n\\[\336F\3W{\r\320\v\256=\327\242\341\332\266R\35\327\206\246\20\360\305tr\ra\\O-j\36\301\365\242\201Mqq>\256/*\t\340\372\372\202 \256?\263@\304\365\355\v\375\377\251\61_\302WS\252\300v\372\204\301u+\370\252\60\203e\4\361\225\273[\307W\336\225!|\265\240!z\213\276\352\354^9\202\257\236\353\312%rU!\223\332dN\232\225S\262#\222\243f\316\233\366*\202\221\363\236N\221\375\301\351\300\327\251\7\310\251~m?j\247Z\246\66\235\212\231{\246S5\363\304t*g\236\232n\370\225|\352y\352\210\300\276\263\270\215\206\372#\34b\265\215l\350mQ\271)+V\234\270Dgn\344\361u\276I'f0\312\257\213j\242\333x\37\v\356\342\361\67\310\316\b\340\353j\201\16\353\240\303\322\211\64I\224\372\350%\v\263k\351<\226\272\24|\375X\275\206\257\67F\30\33\252\60\203\233}\301\327\257\304\245_\254\203|=\344\b\340\233\314b\"\16\25\211\370\206\16cj\253\342\233\372B9d\317\244Uj\1\255R\v\343V\251tcY\375\246\305]=\202o\272]\36+S\217o\236M\f\340[[R\20\337" - "\346\330\"\b\36z\307Jd|\353,S\360\355\254\n\343\225)\27I\21\r\337.bh\276o_NH\311\344^j\276\262\27\204\270v:\370N\240q\337\71i\340w\325\r\"\276k\256\217^\356\357\26\272e|\327\301\220\335\335t\"+\357N\233\220\227\371ncM\255y\"\374N\264\370n\273obU/\362l\226\273L\343/\274\364\332\246\331\230\\0\315\365O9\1|\237]\340\307\367UY\204\343\60\333\275}\277\300\241\340\373\216\62\25\337?Y\250Q,\240\323\223M\5\213\70\20\306\367\257\270\2\364\341\t\322\207[\244\17J\16\261m\36\206zi\350\16\37\275\63\306mj!h\217/\322o\23?\244\325$\214\320gm\34\202\0?\24\60\311\234R\222\314q\220d\16\243\200\2?\224zd\374\320\350V\360\303\242\352{\30\240\r\314\201s)\216\370a\225W\302\17\33\227\222\221\347\332e\374\230\350#\304r\226\212\37\35\246(d\26yP\243\234~\37\373\20?V\27\5\361\243o\223\210\37\27\r\370\361c\207C\302\217\353\v,\254\354\217\257ZX\331\237\246&\205\360Sa,\220\376\251\"\231\316\355\247\266\24\36\226\323\33\337\351\202O\31\64[\323\323\t\257\326\7\327\304\270\2" - "\\\370\273:\323\33\375n\364\31\340;\200\237V\376=\37\350\363\357\370d\266H\377\264\376\216O\305O\317\376m\237v\240\367\37\371\364\3\275\377\304\27\345\254\222p\n\337\f\211\260\343\347\204RcS\363\363\264$\225\34\232\206\237\v\23u\374\354\261\31\325\355\61z1)\266\374\271\256\264\314z\301\331\242\32\300\317\vJ\202\241'\32E\374\334U\346\247\350\241I\302\317\233\n\20x\315!\343\347\35c\314\344\237\36R\311Q\373\64\374\222\235\241\343\27gU\210\262\257&\30\300\36\306/u$\344\207_\346._6\221i\374\262\232l\377\322\27\265\375\313\256\305\246\355_\23*\25\374\232\33\65\375k#\231\376\265\327\33\302\257OM\217\263\275p\1\263\335\271\362^\333\277\276\64V\30\304o\211\347\233D\374&\214U\370\361\233\313.\341\267\346\361\254\70\373\277uD\355\267T\350\201\205\231!\374\266\326\324\371\32\313\213X\17\226/_\306/q\376\266yP\305o[\267\231A\17O\34T\372\236J\344\327\222Z\314\273\305M\344\223\326\350\335\222J\306}\203\377[\377\261\b^z\326v\306\2\300E$\b\374\0BC[\7\371g\301\200o\373w\245Q\251+\377\237|0\224R\371}|\1s\7\317\245~r\353M\251\26\305\246R=\332!C\305m_\372\372\62\276\206j\337Q(\356\255=\344\311\335\376\61\270bJ4KWbz\313\201\225W\235\f\250\b\230VC)\365\202m\210\266\33\303\250\314\257\16^\305@>\223\65x3\272\32\313\220\tn\215v.\34\316\363\262\333wXnR|\25o\36u+\223\315V\250a!\t\36\314\303P\204\370\216\325\222\240\220\61H\207\71\60\230\213\270\242S\241yt>\321\242\64\252\62\17\2\331" - "\250\350\221\0_\16\225\224+}\231:V\274\371>\356r!\207\341 \201\346\t-\202l|=\346\277\364\262\327?\?!3\363\220\312_j\334Q*\177\276Nq\375\27\63\266.m\330\376EB\34\205\"\221\316\344q\201\7g\366q\210\343\30\6-\350v\346\61\301\vm\373\2\326.\4Hb~\313d] \224\22.\342\36qp(\302S\250\252n\6\327B\273W\375\205[\233E\223\0\202\"\223h\323\206\20\203A+\250\236\20\276S\206J\267\214\2o\321\312\301\214-\365\245[\323\211\314Z\373bC\3\365\325\67\\\346Cj!!P\343\362\0{\215\374W\33\62#z_\320\5^yozF\352\16\213\216T\241\v\274L\261\327\26\231\3\21\301\65\261/\220D\240]\21\340\361\0\367R\322\253\276\26\321\314\226\24c\277_\t\371\245\r\5\35b\304\233\372\263}qkr]\27D\333\213WW6\372\352\233H\t\4{\355\35n[\343\246h\353\306\243N\21\66O\203\210\231\374\216\237\312\241N\344A\\\0V1\233\333ct\241\344\352\207\200\230\212\276PJ\354\70g\211\b\177\336\366\264\254k\333\200t 1\265J?\302J\334\7\371\321\220\v\255\225f\334oDwxH\210.\276A\333Y\217\334'f\304\342O$b\371x\356\356\267\61:\311\322\252Y)dQG\331\247\370\17\236#\247^\232\63\324\314h\336\220l\310\64\200\335\16\7\224\342\21\25\331v\345\210\325\244\204SCC\203N\350\25l\317\343\213ea\377\334 {\270\213a\375?\211e\232y\262\257^\322\r!E\274\327\231A\203=p2\327\236\225\316\234\255\v\360)\266\b\200\337\242}\354\357V\365x\276x\250\254\63\352\344\243-\334!E\237q\332\\\322\320\b\256\336\333u\200\342\32=\361E!\203\31\262k8@6\33\63\246\256\346\330\273\360\257,\221\bY\34\245wY\256[\210\372\35\5z\305\4\277\267!}\326jH\262\\B\21%\37\234Wr\177\231\207&\201\315\200j\31\62\345/'\254\204iq\277\373\301\273,@(bq\305#9W\305\31\320\204\372\322\253\371M\36\315\364Q_=\267\276\244\330g\345\271^o\252\177\276\355K\363\235\375\r\16\60\6\266Sz\t\251s\301\226\230\362\357v\225\245b!\365\253\333\35\205\240\336\66 5d]\323\350S\202*\217\311\341\bI\276\221\211\337\\\347\212\224\263)\f&\361\274\v\33\266\24\341\377\374\17\266\207\253\277`\202\375\2\262e!q\317\370\302\66Y\261\312\30\310\217S\24?V\231\32\26\246&\236\323t*\317\214{\216\301&Q\205\f\271\204\276l\f*<\255\241\232\205\342\20A\232d\237\371\\3\315\224V\234=\374S[\305\35f\317E\b-\273\215\265o*\300\24e\16\323p>1\343\337\213\352a\225!\275\360:\f\332\311\266\226l\216[\227\65\375>\355\253]\325\fwo\327\264\227\36p\346\205K\20\252\311\243\334\323\247" - "\362D\276VR\357\64\f\306Rn\234\365=\325\277\22\330\262\221H4\367\256[\241N\205\20=\253\254>\310\370\306\237\354Q5t\274\211p\251\224\315W(\266X.,\230\345\320I\303\236;|\3\222:2-jXo\216>\f8q\372B\205\312\22\271A\301X\216\357\316\346\62z%\363jjhF\266\310\276?\17\35%n\354\366\352\20\33K\213\207T\223\v\37\367\250\217h\302\375\316\256]CL6\223\337\361\347'\274\231\22\304\330\201\274\255\203d\21\354\266`\36(g=\254E\n\311\374\335\355G\304\302\372\332\223\6j\204\325NJ\330\222\213i\345V@+\203\242\302\274\255drDp\24e\250G\366\255d<\332zn\264\341\235\64\214\25\3I\367DEd\311\16'M\331\374\221\374o\5YA\356\237\32\262\b\320\300\223\r\305|2w\356\205\\\276$\267\345+o;\326\256\300\63\224\225hx\217\b\356\r\235\265&_d\20WAY\316T\31\24\370rF\243\350\211*h\b\220/c\0\251S\"\307\301\271>\271\224I\300\23\345\342\4\376\331p\326#\342K\227@\363\375\24\275\247)>\333\216\366\30c\217\234$O\220\64\377\341\2 \336hlo\342\63\206\f/\345\70\315\37k\315-*\251\332\313\7\202#\314" - "\373\256\301I\360\246D\352\245K~\334\2[\353\334\16\276M1\250n/\254\367\373\273\217\334\265\30\353\71\201a\177\20r\351|\321{\254f\200GS\210\377\255\255\267\r\335K\31q\333\344\264Bs\311\344\321\27B\1+\rA_\202M\335Q\1\\\236\202\311\320b\6\374\317\323\n\200\326\7d>$\336G\331\376\22\r\327\203\30\61\245\1`\273\203#\327$\26C9m\30?\216\304Tl\22z\261\1\257\201S\252C\232\345\276\31)\371R!x\"\244\200\211d(z\267h!\242Q\222\256\331B\nnO4\207\333tt\232\344i\34\251\344\202m4\35\30?\372\321C\354\340r\260\336\214e\262\275-|\215\276\300\31W\244\261\343^\215\272\302\24\311\316\321*J\1\312\307\321\270\225\321\17\364\372>\371\344r9\260\255\323\204t\331\275\243J\302xo'\213D\355\273\220\213\324m\255/\20\332\343J\223\334\231\344\22;O\270\226\263y\212\71\213\200\60~k_\355N\330\33<\323?\205?\255\243\260\362\345\233H\5P\231\314\214\226Z\213T\356f\332\224\35+\366\6\212\334\366\345\202\177\21\277!luQ\360N\223\35\271Lk\262\243,9\254\206Iq\36\226\320\241\60+\25\324Z\252" - "\vt\345\321*\306W\27=\204bF{\223G}\27W\325\2\215=A\212\344E\315\226\257\314xW\306d\26\65K\205\247W\311\22\221\20\37\226\352\257\220\232\213\n\274?N~/\230\252u\311\315[Lu\31#%\204=X\364W?@u\32\237d\301\332+7\3\341eRX\22o8\201\65a\204\336\347Xm\353a\357\2JL\225\70W\342\255\236\336%\24\353\374Qi\344t&,cIA\357\350\266_\237\334\366\21+\5\277df\311\322\310\21\25\20\365\343np\375\340q\234$\24\"\305\234Y\b\2g\27\200sr\275\200\340\22\224$\250\222\343\220z\367d|N\307\347\271|\17T\226j[[Mh\330t?h\204\364\353\4\360\33\350\252Th3\251\67\17\326\243\350\325\205\226\277Y!\34q\250\71iQ\216\306(\16iq\37\317-:FU\313\337\226\27Xy\257\307\66\314\21W\224\37\305 \247\257c.\240\274\22\64\226\215\214\37\334a\374c\314\216\275\232\277\272\253Xo\331j\200\327.s8\240\4\v}\317{\306\66`T\235\265\374i\271\222\357\311\365\f!+&t\21\373\377\205\235i{\333\306\222\205\361S\370e\366q`\221\222\263|\273\266\254\254\362\350\261\222;\373\2\211\240\210'$\300\20\240c\345\327O\235~Q\205\6\263\335\233\b\335\215\225\275\324r\352T'Lc\215B\336\20\370y?\310n\243\207\24\252Y\20\316\254\25\27\37\335mk\265~\375\351d\275ozn\260I\347\201\16\350\67r\250\36\23\363't\326w\325A\361\232=\361\366hf\22\225\67\247z\307T\370\272\345(\352\302\333g\t\177,\274\61\34Q\6\257\341\336\26\\\335\311\300I1\364yU\37\23\0X\351!\230\315G\17\316O6_\231\263L\234\24qW\265\366=\352\241\27\262\62\251cqe\r\213\2U\330\265\341\321\31" - "\330\270\251\315\63-\307@\276\rY7\310n\27I\250\224\201\317Jw\200\262:\332\255\32[\211\34\33\315\203WY\371cEa\267\5\20\274\24\"\316\227\7v\313\64c\211R\37+\267s\26%\225\71\v\3czqqV_\235\325\227\"\210\265\n7\5\241K]\5l\360\256>\r\26\373\242r\301a\311a\305\341\222\205\32\30\273$\277)\350\343\337MfG\325\3\342$\317\256a\21\\\313\67V\214\337\246u\275\246\252\273\245\334\245D\344pExA5&\212\315^[\bGMB\373Ja<\n\314\231\276<\355\333\322\257\300\363\373\365\5\205\246\227\70I\1a 6\222\375_\\|\266\370\366\260-\256.\323a\365*\35>]\352\20\352\366\263\345\247Y\371\363\251\274z\351\345\373\275\31\370\316\277\261\1\243\304\220e\f\33\332=\216%\23\363MB\365\315\274\266%x4\317J\260\360\207\321\355\346oI\3X\tJ\250\351\216\370qS\365F\246\262)\215\313\244\220O\301\335\v\353\203\371\235)$Z\240\212\225\23\345l\225\312\nD\f\304(\351\257\344v|h\36G{\271\35\303d\204OL\267=\214\361\211\23\356\200\372 \253\322\21Y\3\275\221\67\320%\230A2E(q\343\333\376\321H\30\230\32ayX" - "\357X\35\36\b7\247\"\24\212\272\257\\\207\311V\310T\32\26\3\241\305\60n\221\23v\333n0=or\264\270\225'\33P\273\351\306\316\354\64\v2h\315}\350\nE\7\345\\\330YW\235`\372\235\340\31\314BM\312\325uVYf\25\201vC\223\330\246\337I\\\0o\356\253\364\223\207\21\255\362\22&\360S\222_!d\232\35s\212\22=\300\247h\25\330W\340\36\312\356>\355\360\3\313\350<\377\220\0>\24\245\67\320VQ\223z#?C&\256\333\203\323\0\225y\v\301\314n\215i\357\361\202\210)d \232\334\362\303Ibwt\34\243\301\64\333\306>\370tP\274l$J8\357S\346\315\332\241\207\304\221\64\27\253\257\274\256\317Z\340\206\230m\264^\23\0\226\25\203\314\352\223\206\322\352\226\307\221\314\27\233\267\254\366T_0l\347W\331\17\370\331\65\210\354W\315\347>y\270\b\327\234\322\241.\237\250\320\235\254\354Z\336R\177\316\262\305\66!\2(L\5rYt\252\0\200\334\246\313\33\346\4\61\341\227\66\264\23\343R\21\322\323\343X\231\230b\337\64\255\273@x\\\224#PR\265\351\62E:\336u#D<\376==\f\315p\202\327<\263\264\227\327\345\352zbL\256k|\376\200(KG#\275e\31peaA9SJ\203\216\63\316\204\352\360.\255h\203\66HTX'\203\365\363\374\367\365F\246\345\215\372\201\26IK\217\235b\244%|} \271A\345d\273P\263\205\232\320\377\364\304\7\211}<\270`\312Pu\256\214p\332\"c\35\7\25\31\271\207\21\207L6\203f\fg\324\265\364\243(7_b\273\246YduAF\2b\177\210\222\24\36K\5wT\363O\226o\265" - "\v\312F\267gv\353\353\344\262\64\66\217\246\6\5\325 1\273\235\"7\312\5\17\243-{\22\370M\340a\200\232\372X\205hL\306\311{\257\217\t\357\"\330\355\352\304k\21\202\317\340>\275u\212\0\251F\354(\4:7H\257#oTJ\367\273U\236\20\252\255\70\32\327\335\351a\7\346\20\215\343\224\276~n+\v\16\325\204>\200\231\276d\1e-\377b\203\71d\r\nn\34\273\312\246w\242t-\304\60gr0\340eZ\303\67\"\3\316\274a\27_\200g\270\215\356\256\61\216\f\274k\32\363\333\231\205\21\67\317\302\346cG\360C\270L\231\30\306)\220\370\221\217\327\35\223\303\375h\266 q\214\220\237z\312C6\\\6\307k\300L\200TkG\362;\177\70\341(P\257\372\210\222\233\65\264\270y\211\247a\326\241\222)\372\214\264^NE.\234(\367Q\345'\371\274\347\227\375f[\310,'\227\337t\270\326\223e\354en\307IQPA<5\331e\365\200(\255\204q\316M\352\374\306\213bU,\213K\327\241\210\63\\8\312\211\336\70\321u^EI\272\207(\205\250\257\364'\274V\312\nRQbrd&\31\363\244\244]\270A\235\267\243x8\231a\334\320\371\230\366\61+\342,\245Ly4\232`" - "\342\213L\221X\233\60\353\251\246\331\273k\322u\234\b\225\60{\23\25u\234\267\37\321\37\277\266\325|:\375ku<\24w\333\256\25\210\321\212fE\315\236\"8\272i\235\\]\246\350\354H\231KD`\346\225\27eU\361\31\216\37\263\376\222ng\326\332)\t@\346\335u\325\7\b\33\21\377\270S\214\377\377\350\332\364}\355d\207\313`\252\66\302\37\315\320\37\ng\34kX\366\366\260\266\353\253\323\221\232\370 \224\362\204\257SF\34!\231\312:}qkr\314\354\223V\213\304L\230>\244k\22\227G\307Ei\314U\330\374\214t\217Y\213)\212>?C*\26\312\316o\222\37c}i?\336\226})\263\222\237\237\233\17\32wA\304\32;\24G\26\365\17`j\343X\231\237a\312\336vF\234\67Q\277\217\237\223\221\222^k\211[0\317DT\202A\227\0gSZ k&\253\v\310\313\210\331Q\325tsR\372\250uG\t\367F\22P\203\235\203\336%\0\324\321V\337\320g\324\66\344%\254\267\250\7\301\241\f\317\334\360<3\203l!\254j\246\ne\23+\33K\226\62Q\232\202\205\357\211\326\2\n\277\333\354J\23zO\247\332\333\277\253\6\261\267K\351gy\217\215\60A_\272\tQ\221\231\257\320G[\35\244T\261\266\\<\t\33+\325\221\346H\227\t\360H\331\71\270-7\346emO\222j\353\346a'\237\302\326\214he;\233\64<\207\371#M`\201U\303\374\354\345\260`\26\277\272i\364\253'\213\217\6[\311?\326\211\b\300\263\246j0\254\207\62[z\376\221\245\202\204\375\70'\372\220\236\31\344\325c\262Z@\321\305\357\335\321:\b\252\214\6_\223O\240 %b\257\213\277\326\366m\"\344<<[\260\243]\37\211\336\375\331\65\340\232Ir\375\253\271\313?w\233\35\22\327\330\220\24|Va\230\342\253\32\201\177H\264\3\271\255\355A9\316" - "\302\200\252C\255\37d\251\35\202\67@Y\241\362\275\261\341\360\325(\222\316\223\374\252\352\224,\221J~c[W)#1\315G\231\235^A\345\253\273\206\304\6\352\304\340\355\207$P\274\264\fQa([0\264X\224\254\37\312\230\355p\203G\327h\231|\352\245W/T%?S\4M\221\254\267U\275\346n\306,\2\3\22\332\262~-<\330\327}\360\24\337\233\31\225G\302/\362\212\275)\257\255f\265\313Y\355jV{5\253}\352VQ\374\360\374\354g\312\63\262\212\61\37\6\67\225E\301~\266\1}<\365\31\306\245\306\261\n\276\65T\346\24\377\322xfg\20h-\7\366\305\245qO\233\203z\322\360\71\304\234\361?\32\211\363\241F\207Pb\1\314\71d\302Z\16[Cp\nq\301\377\262\227\67.H\326?\17\351\221\222r\213\273g\313\212\306\67u\233\375>C\326\276\360\256\300\372\277\253\314\366\34\274\313!\212'k\240\370u\f\274X]gd\210\333\316\346\255\363\250\177h\355#/8,9\254\70\\\246i\363\305\"\245\327 \2\211\235\336U\22\30\374\332\254E=\201:J~\270\276l\210I#\335\237\327q'\363\26n\237\265L\331\373a\227\301\24q\351\61b\24[\261\321_\327\33!" - "\276I\376\274WP\371ugcXK\241\237\fJ|\306\330\223\337(\327R|3\31d\311G\274S\320{yW\276U\215\323\253\273\342\362n\366\65vy\212,\335\34\33La\0\333\324\61\210\302\274\201O?\353\1.;o\344\322\234\324K8\31\264@\262z[\245\340\240@nQ\7\360!\30PY:\224\356lzY\264\247\245vqo/\251\355{\332\70+\25r\254\247\333j\0\356\62%\5X\257)\347\256\355\5p\215g\212\263\63\\\375\201sD\274#A\375*l\234O\243\364*J\237E\351b,\225\t\231\267\211\27\306\21-6\7Wq\361e\224\4[\304\275\323=\205?\205\343\252\360gp\274\234R\346\22\215\32\244a\336h\232\367P\30Q\254:\350\203u@&\22\345Y\245\226rv>KK\370\320\264\217\315C\263\63\335R\314\1j\31\350\213D\273\"K&n\"[\306]\231/\212Q\1^\4\250\26-z\20\314\313,e\231\325\36?e\312q\225y\262\257\22\351}b\301\252k\262\312\62\257\254xl\352\b\234H\225h\304'\245\225\242\210\v\311<\264\336\243\220\232n\32)wz\324\313&\327\376yq\227,\311N\200\r\30\270\356\323lI\254\222\305\222\303\305\302\205\25\200[9\253)v\247\250\267\2{\17\335\307\260\31\262\245\262" - "\350\210\337\311#\243\257B\t\252\331\fS\273\335\364m\355\201>%\32\v\216\375\263k\212__CN\n\351\217f{\375\321\351\314Q;\231c'\350er\246%\337\307\304\346\"\261\235&\316\36J\1\224\364\272\206\345\324\341D89\26o\5\271\216\0\235<\243)\262m\344\\S\320\325\376\341d\266\310\221\272\211F}\32e\223b\265\64\"\354\61\35\63\200OU\317?\252\216\16\201\221\345\377\321\374\23\223\256\2\206&\341K\21AfE\314LJ\257k\373\"@\356\371\254\305L\302%\351\27s\22?\227\247\20\65\r\304\265\26\262Klr\210\343{\336\242\257\27\220Y\202\216\217|j\210\62H\256\373\32\357<:\325\347\223\70\62\6\304\333X\355\17\312\rJ\311\372\364\366\352\232O\231V`V\327W\344Y\23\307\344\60\6w\213N\210\32\275\203\347 \22&\32\25Y\24WG5t\337n\234L\22\61\354\215\342\270\63~\371H\365\v\203\305\310\5C\257h\204\270\225;\224\210YD& \254\376 \251\30*\32]\243\1P\307\254sx\355\353^K\327\64\35\243N\243v\205\311/\372>4\205\253$\266\325xR\274X\274\20\252\303v\247\234Dj\327$\4\200\207c=\200\3\233\272\356\366\307J" - "\204W\323w\n\r\37Y)\304\36|fG\16z\362\35\255%r\367\234:\357R3\221A6\301V\270\340\260,\226\345e\261*\257\212[\353\243ZO\260\245\330\230\273!\b\372\330\375\222\26_\217\377\246\305\255\307l;\17\62\227\36\177\202\314\336\324*\307\307\61\26\213\v/,a|\362[S\\\225]\210\314\246\257|b\233-?d\230\235\22?\344.\344-\312a\234\22\354A\re8\274\31\256^\276\264\247=o\353\275U.TK \25\316\212\65}z\365r$\37Ye\371\322\316\303yQ\315NAl\326\222\267\206\225\65\200\247X\331.5)\271\61\340\316\276\225\27\275L\344\301\235U.u\366?*\335t\361R'\276\336,\376\325\27\255o\244\241\17\241\313\335\307C\177\345-9\303u~F\16\374\270C\202\236\30\302\230\246\214h\177[EN\210-\25E0\310;C\240\277\253v\235\71\337%\265k\33\346\241\332\201\26\201E\353=\366:*\367?\235\252!6D\372\333UD{\3\350)Q\265SV\37Wd,n\271Q\362(\340I\20\67\17\250)\257k}G\204\223\2M\271T\272W&Ue\217\227\237~[?\232zP\330Y\356\271\207=F\362\356\363\216.\377us\344C\223\271\247\224\346T\362\24b\360%W=\364\204\326\364\314" - "\177x\347tjN9\351\3\261\227Q\5\63\r\204\253\222\263\260d\305jQ*i\311\373\226=\24\320\235\277\227\346CtQt\344Y\224\2\307 \371\361\26\276\354\7\237\177e\314\277)\322A\33\35\234\272\177\350\210\60\360j\v\n\333~O\b\242\224H\273@G\245m>\314\337e\246\352\35\266~\211\325\376\nl'\372\363\34Z<\200\341\31\277I \235\27\21X\372\276(\363\205\351\257\201\272D\263\254\300\367\317\223\375\71']\301\365\24\331i\303_\21n\362l\207\264\367\342:\271\315!\33\230\354c\375\360\30,gZ\375\253(\331\20\376>\252\235K5wz\353F\340\264\330\351\211\355\330\350z\344\225@\201\322\323w\ty\251\311_C\210\250\341\323\4\244R\367\1|\330\271\266J\246\237o/\203P\321+\255\v\rmN\f\223V}m_\256TG\331+\372\\\323\361\332`\245O\333\312h3B9-\7S5\306\207\254\23\217d\220\6q\203\61L\vI\370\360\327\350i\201\347\4\273<\240\300b\273\226\231\21\261\332\327)\250\245XU2\335\223\317&Yt\361=d\34\315j\205\267\321K\311\374\213Y/\220-\266a\272\25\243\314\254\f^\373\257\315v\220\275b\336\237\306\321f\6\333@y4X\b\16\227\377\265r\6Rr\25\365\60(^zN\236S\6\377\316\214ES\232S&II\20\177\212/\20}6\260|4u\256\253\247\247\24\236?\352g\21\374\366\310\273\267\352\340M_\252[\310\335\34M\366|\365\200\331\214\273\371\205\335z\276=B\231\66\233\34\331\36\v\217\332xd\257\204\65\r\221\232\b\216\272\252\333\344\247\203T\315\316\65\21" - "\347\212\340r\262^v\317\23\301\"Z\4\70%\341\207\16A \223_\6\224\204)IP\1\344\211!\\\336\375a\330\326\333\35\347C>9\211\61\257\"\5\271|N\377w\355\366\353h[HOh\312!C\251\242\321\311;H\262\264]\333Y\21Z\321:\234\240\33(\313FR,)\260\3\64W\327q\31E\36\233oa\244\237\273\25\34\311Uy\303\275l\276!\275t\361\266\262\345\32b*;\3\63\71o\370W\33e\244WR\265w\260\351\31\326\314\33D\246\272.E\226\204O\32\311\274\337\36\376\367\323\264:\254\360\371?`\23\304\206\212>G~\325\220o\vh\223\326\60\337\66\315y\322\20s\253\346V\252\232Xj\"\262\252\17\372\234\64\235\23\r\303\353\367\317%\272\21\265\257>y\373\311_>\371\376\223 \272\210\244$7\352N\300\214u\\\234`vD\32\0F\264zE\321\254\352c\36%\316\276\226\210\262Lp\211\250xk\267\237=\232\275\361\364s\r\204]\27\366\307z\\\333\212\202\327\b[\261\251.\262q\t\322\70\235\353\66\371\351\320\341(\334H'.\211<\206iCVq\244b\177\30I\\\20\275\30\v\201\4r\30O;a.\371\371R\247\204`\314\67.,!U\205m\3\61\317\64\305\203M81_\2c\257\314" - "\254\260n\220\246\305\344\342\202\342~a\16R\361\235-\215\210\242\210\202IQ}\264\331\65\365\332\247\nG \214Y\"\270\201\357]\373\342ub\fX\276\266I\220\323Q\2\35$\240H\22LS\215\202\36\60\31vt\fR\332\235\nAi\341!\v\222\303UDxd~\f,\371\67\335\341Y\236\304@\343h\323U\266J\273=)\250.NF\357\70\324\223Q\37\304\376f\237\230QT]\314j\313\302:\310>0\333n\223\21'q\177~\353\325\254\266*\363\332\345\224\352\264\226\340\65\213R\33\353$F\222\366\66\301\6)\346\223w\234\341/l\206s\276\374\335\363\345\255\324e\266\334\231\367\202p|\32|\342\206\307\233*\363M\331\343\302\267\17\b)\1\363\356\355\16{Or87=\217Z\212\346O\233\305\241\311%\242\305cM\204\312\"NL\"\f\v9>\352\377G\352\216Z\347\345\304<\364\212\r\361\300\206+d&$\23\250\234\352\30CS]fQv:\31H\304e\205\267\345\371#L\352i$\20^\376\333e\232Ox\177g#\211(:\333\17`\202\255\370\r\221V\212\344\220\362$\336l" - "\343(<\365o\27\2kmN\231)\211\2\325K\364\253\330\265\202\31\374\215\302\273\272\274\230\64gl\374\361X\275\270k\322\16\240|fk\25Nf\373\3\6\347\230\230\30\nG\326l\250 \1\361\242\34\270@\370T{[t\373\352@\316&7N\t\336\324\35e\223\21\233\267\310D\225\365\332mD\365\213\320\211[\310\232m\341I\6\371\27\63\234\vF\363<\213\222]\362:\303-m\16\264\17\307\356\307\34\26\71=\324m\240(\37\225%\252)\tkI\374\223\310\252\62\224\255\216\331\255]\276\4%\331\301\34\312\316\326qyiS!M\347j\361\357\232\25f\217\234\236\252\336\264\343\17\355\323\256\222F%\275\317\")\213\267FM}\264\31\343\367\333\314\320\356#r'9\322\377r\345SB\177\201f\351\342\347" - "FWx\212\254\317\6z\242\213\236\312\374\267\333.\255\274/;9\255M\213\33a\317T\213\336\227\267\261\305\r@\247\f&(\255\326\261\33\251\215\7\33\224\256e\343ZvS\312\317\63\245\362\206/\33\33s\306\222h/\306+\315.\350\204\71>\n\"\237>\331\23\206\262\226d\316\345\r\312\226\204\25)\3\\\34Z\275E\345\211\60\224L\323'\207\377&*\335\224\361\310.\34\272h\330\262\5Gc\337{Z\307^\224\241f\245\177`\212Q\374\252Y\207\224\341\205\370\251\200X\346\316\240N\270B\22C/\267\21Scl\37\205o\"\313\226\234\23\30\70\203?8\272\350}uh\326\347\215\32m6>\206(\315V\20a\224P\203\220\305\302P\21\f]\31\60\215z@\7\17Ij#\316\4\201}\354\246K\313\354~\371h8\376\t\36,f\212\223\\\324\350b\315\21\326r\32\265\315f\324\305r\23LihN\323r\276cM)O?z=\b\b\277\231r\262@\367i<~\353c\312\240\301\337n\326\23\0\35<\371\311\3\354a\372\332\307\211\n\264?\r\347\247\321\342\244\32\215\237\17\1\234I\357\24\341g\217\22\246}\364\314ma\223\26\337\322(\276\266Ll[\234U\277\22;\27\307\1V\33\235\26Ly BG^" - "\242;S\376}\327z;[\17u\35\261\21\212X\264\205B\33$L'Nx\257\224i\n\253W\24\224\66M\341us\\\367\v=z\266I\247\t\354\272\34u\371\270AFHt ]S\245\261\71\251e\334\255c3\323\362\356\250\253\224\240\66H\4\v\344\325\0\325#\327X<\213v\275{f\217\234\v\16K\16+\16\227\34\256\312t\370\224\332+j\237\221\310\63l\301\22M\220\35\314\37\271\61.\324\225\376\256^\352\357e*\277R\231\313\221\4o$P?\325\271\362\336\354\264\336\34w\\\2\373T\314\t\314\35\307\310\324b\342Zr#oR\240\227*\236\262\302\27\222\311Q{\332\252)\246\62\245 \247\37<\303\205\62\340\337\344}i\177\37\351\tK\212z\21\34\6\"\334\362xp\226\323>\264L\215\353Z@\203[\275\220d\324\355U\"\260_\275\324\26\202\243\4\222\270\336x\222\300z1\221'\272\366l]\261\177Qw:\210\246\256I\274\266\340\247\356qb\374\233\315R\24\344\264\363\366\320\205\267\23\357\347\262X\326\363\346\31A\241\221\265Rz\313{\362p\363\264\2\376\363)J7\tg'\243\230GX\306\205\66\210\240\222\221\330t{\326\22d\36\365p\4\373q\301|ee\311\0\266>\352" - "\336+N6\321Z\f\327\261/\376\37", - 28292, - 64394, - 37276, + (const Bit8u*)",\230\5@\323\t\377\377?A\307\66F\215\5\61\66`\5\33\60\226\214\62\300\2[i9\363@O)\353\20\273\20%\355$\274\356\60\357N\37\237\307\356\256k\343\361\342\177\247^x\365\370\327\361[\307\67?\361~\277>_\b\261z\315\203r\235\352\1\314^\241?\f;\342\234\275\250\236\33\370\210\322\216\205|\216\232/\205{8d\236\327\33\34\311\376\323a\202I]\n\23~T7\363\226$\273\25\275W\322\23p\212\302\216B\321\356\330\1\\{Yg\202\350C\1\345\60\274-\232X4\316\63\232[\363\322:0\375@\370/X\35\247}\203Z\347Z\312q-\230\27\303\372\26\353\35(LQ\336\345\354\365\21\213\250\373D\206\n&V\304\205A\360U\257\24\210\352U\265\321\316\377\271\342\240\347\353\214\2\354y5c4:\35\341I\324\243\310\230\4\317o\330\377\250\354\70\252\336\17l\201\272*]+\216\37\247<\315\t;\214#)\357=\205\216\\\265\22\r\204^\360\316e\343\350 \3\64\\K\274\r\36&\354\6\271\227o;\351\24\"@\330\34\70\224r\3\344\247\61\360=\217\245\250\177l\330\203a\336\336\177\361\216\67\235\355\224\274(\270\204\27I\223\306a\227\217k N" + "j\217\333\334\267\337\254\1\21\373\250\221\223\32\320\65O\362\n$t\t\206\240#2\354k\20\250<\346\300\346\253\366\n\224lO\217\243\362/\325\237\200\373f_\22\365'em\210\270\215\232~\302b\350\27.\335\3\63$\232\225(\373\315\357]\367\37\220\273]^\t\225_%\264\260\177\245\207'\333/\205NB\277\71\374\3\252\v\3\37`\311\35U=i\336\23V\243Q(.\200\61\237\305\\g\237\32v@\316-\351*^p1q\36\71?\nw\271\243\206\342\r^r\232\264\70\336\27\260\5F\241\302\333\177/L\271\31/\4\337P\36\4\345\243\324\fk\262S?\342\21\311Q\327\241\34\327\202[\213\35\323H\324\343\71\215\347\264\351\37\262\245\71$\255O\353\26\31\214\"\250\276\242=\352\316\33\255(O\316&\321X\317!\230=A\272\203s\307\312\65h\352\b6P\225L3\4\223\363\202;\321V\26V\333'(\266\213\241\233\60\377\365\250\265\64\356\261\362\v4\376 \336CC\347G\276\f\372\3\302\237Qf\366=\215~\314\207\240\70\71v!\275\224\245\215\341e\377\66\351y\364\234\350\377\271K\217l\205\241O\241\321\222T\301\36\223\361?\234\177\67\362m\356\247\222\346\320\262\327L[1\327*\277\b\233\316\333=1s^D;S&\314q\257\v\351\267\302\345\330\360a\342\"\230\234\22\267\0\202\276\361\354`W\377\260\177xh\257\242\23=&\342\207\20~\330\247?i3\204\237\221ee\250\67\225\371\252G\300\256S.\17^=2" + "\371%\366\313\340\333\224\361\201\344\22\5\277\353u\203\247\357Mx\302\213:\223\16A\233\331r\35u\245\242\22\32wE\371)\306\217\25,!\221\321\323\4\365!\372P\b\257\360I m\204\260\27\346\261\241\3m\ta\205\70E\24\237N\5\24\365\36\352\16\210\26Pc]\322\207<\267\323\240\343\221\333\242\267\220W\32\225\261\331\30<\t\233\234)\277C\334\306\64\23\255\63\246-\302\326\32\213\211\33s\22_\343\374\324\310\62\314\276\"=\7\253\215).\360\361\242\363\324\256\265\256\300\256\317]\357\263\377\327\36\21\234k\223G\360\310\334\350\61\254\375J\360\35U\215\322\224rj\260\270\33\214\30\64\211&\267\305O\246U\342\24\t\315\33o\270\7\323\7k\204\374\342\7\361\17\331Z\37\262\343\231A\352\336\344\266\317-\216g;\17\\\312>9\34\210\63~\323\\\343\336\311\256_86=0\2F,\210\236\303\316\211a\223a\342\207q\32\216\216\t0\300x\177\345\30\62\266\213\365\364\322\6m:v\314\264\356\0\343\327A\237a\327RW\vH?\365\315&\335]Q\n\214oP.\307\201\233\345\365,Y\342S\206Ss\342\67r\332\344\340\267\271" + "\364\221j\f\324O\321\253\200c\240\v\33d\211\265\f\337*\374(uwH$K\277\366\35\357\226\177H^ ~\t;\216X\337\"\341/\236A,\371\302\247\231|\337\346\255\230\377G\324+XrDU\205\261S\2G\367\365\271O\26\33xi\265q+'\351E\357\221\307Q\274\215\71!29V.KT\300\26\263}++:\25\341\344\332&\31\211\223?\215\227\241g\25\311\61A \270\206\371UQKyB\256\332\214\331\231\322\31\220\337\26\345\315\216\61\241_\322\334fC7\257\356L^\211\342C^\t\344\22\207\237\347\1\37\313\326\340\304\263q\343\251\244H\265\17KL\252t\22\344z4\341\350\254\230\375C\233\367:\0}\277\341u\240R\226\220\213[\275\35\331\260}\200S\207\202-\36\257R\322C\261\27\71\264ag\237W\273\v\6\374$" + "\333\343\346?\367\f\321\307\324\221\3\374;9\246-`*W\266$\244qx\231\367\35Zr\305\370\7t\324Z[8\362-\377\243\70\342\\\364/\\\373\202N\2\71G\244\323@+\25\\\340\271\217\r\375 e\215\370\v7g\273\317\27\354\34\372\26\231\276\17\366cnB#\212~\362\374\27\25\335W)\373\334t\213\304\336\304|\16W\203\342\251\337\227\270i\240\355\21\247}\24|\303\315\312\260\264\327\344\315\322\17}\r4\361D\334~Xq\316\364\224d\275~\273\270 1\362*\344\230#\36\302\204\305\352Y\364\214\225\373\312\21\313\346\252\5\\\367\216\356Y\353>\r\263\201\256\277\320\200\313\36\232\226\360\252\257\223\307Bi\205j\n\25\336\212=\304\205\247\224\257aH\217`\4k,\202\n\267,\321zo\233\bg\217\326w`\342\373A;\251\360\325\330\16.\272\240|\n#\6GO\350\313\307\246L\373\30\34\374\203\342(\205\205z_C\256\65\37\241\371\235\316\237\271;\327e\340\36\255\253\212\272\232\\\307\321xD\334\16~1\\\323\347=\215\203\222\322!\343\264D\16\241\333\274\215\270`z\222\67\30N\213\246A\334\306\304\22^\\\227t\37\25w\374\357" + "\365AQ\236\227|$o\273\354\230\315\375_\222\t8$\310+\227k\263tB\\\\b\264C\331e\325y\232\275\324 \245\65\r\346\"X\327\234\346\204\376kd\371\324]\227\201\234\354\b\372\n\271\26n\242\370\272\227\213{\217d\b\321\243\33\317COKF(\26\66\307F\302\306\265\266\345\234\371\266\244\24\302}\275\277\207\221\362\350\203\374\362\0\303#l\222\244|\203\36\177\342\237\70^\240\374\270/\234\33\303l%(;\346\267\31\375\364|\222\274\315\264\227m\203BN\272GP\b\315\363f4U\213\377\306\65[\314\376\317\361m\2M\213O\320\243\341|\320\0\n\235\351\275\23|W\360(Xt\334\230B\303\325\321&\36\273\317\321C\336\265t\213\266\26\70\336\303\302/bu\264\243\67\275\30v>IoG/\21\215r\373\233{\347<\361i\\\24\67\326'\36\201\365\7\255\177\221\204}\266\364\365~\323\366\324\341\260\372\303\224\32\354\261g(x\324\7\321\27\260\347\305\214L\346L\270O\202'\36\357\343\270\255\312N\36\370\272\354Uv|\30\372\0\353\252u\v\335\232\315\341\340\375\31\306(\3\272\335\332\356\356\0J\26\5\233\271\354S\325\26" + "\264d\205\352\70e\246x2Au\234\267;B\244\177_\264\35\307v+\23)\333W\252!Y\206\337\20JX'\370\205gui\373A\315\227:;\246\65\204\334\205\344\213\342\271\344UE3\250\370\252j\245{\22vw\24\325\367\352o\301\224\tq\177\270e\330\355\222\244\230\357\177\36\207\374\21i\201\270;\201{\260\251\"5\t\372\333dV\354\367\242\254\370yy?`m\256`7-.2N\304\254\1\346\217)\342\244o\31\214\351\27\363\n\26\325\306\276\0\206n\321\310>\5\316\376V\372\6\267\276\226\266\31K^R\365\207\352M\332\203\224~7|\37\16\377Wt3h\377\20\372\223\275&\254\211\247\257M\270\351^\204q>\24\223rp\240/\351v\211\2\270\376#\335-\362/\342?\335\321\305\250\302\200A\317^\204\213\372\70q^\233a\4\266_\267\366\7\237.\255\4\213U\261\27\241Cl\35C\375\26\313&b\360 \257\323\264>\325f\300\r\263l\3iI\240\361\25\336\364\324v\26:\36Y?\301\1\26y,L-\215\357\207\233\346\332\243\373\364`\313l{7\347U\311+\335l\6[o;\ny\373-\307M\212x\340;\313-\245\317,K\335\r\n\17\277B\260\6\206\\\345\200\5\36\26\210\16\r\310$:\5" + "\235Pp(j+\327\305\352\206c\332\7!O\330SH\2\30]\25\263\220\204\347<~\1o=\265\301\224\310\270\207\377\347\366\63\226i\376\37\331\326\205\351(\343F\204\204" + "\223\226\210\316\300*{\362\16\\\375~\312\32J:\21\364+\250\63\2\313 L\351\275\220\307\214\213\251\241\226\222\264?\270p\240r\2\245g\205\357\340\224\237\305+\320;\214v#l\226\344\365\221~e|\2\301\266\277\234\236nh\343\261\35\61\317\274\226\25\205<\342\353\350\30\354z\305\325\355\66\fXw\"\255\206d\v\374V\321*KJ,o\270c}L\301+\215\215\64\355\373\204\305}#J\303\273\211\357s\366\213\21\325 \272\346\231\16\360\66(\311e\t\377\233C\356x}G\371\205Q\265\330\366\225\345Ch\337kM\1\361C\317\307\64\362ZL\2\257\31\222r\352Yy\263\7A\265\347*2\377\30\262\233\313\203T'\334\3\233\333\33i\364\210\230oa\373F\347@\336Zj\377\0s\222\245\177\240\247,\"\221\307\336L\337\315Kv\32\63I\372\273\357\21\226\67\371\351H\276\317\357\21U\37\320i\203\215F\213\375\377\363]]\r\216\333\70X\357\351\333\353\35\323\253\67\275\371M\266\354\255Sn\274\251o\260\4\333\214)Ra\231\31\315\257\277\17\224\307\351\331b6\20\365\3@\251g\272f[\263\212N=\325\306\24\257}\372I\334\250\271\247\226\213" + "\333\237\251\71\205\250\276P?\271T\334\371\274R\217\250\r\221\375\273A\225\315)\333\230<\27\67\260\177\254\355\222p\373\356\347\325#\366\256\270\376\305\250R\23w\256\355\272\270S.[\35T\334\60\204\71[\334+\227}\b\312\255\324\61\331\206[guj\213\327J(\361\331\60\340\bC\300M\374\252Gz\275\31\253\347\270\376\334'V\245\366\252Jl\324B\267\311Pt\276\270Z\326\21\234\325\34\224\320\256\370p\267\376\301\371\266\270\213E\"\265pu\315~\254\246&-\325\254\321BP\334*\33j\263f\207|\246\312\65\253\37\310{\355\274\322V=\327-\244\255\300\60O\301\250\71%\270\252\1q\4](\256\355\235\220\315\231\60G\303\277$xt\254\26[6\34\235\r`%\22 \330\5\216\320u\345uMV\235\220n\330\207\321'\237\202\317\260\7\3I\377\321\260,~\222\274\305\360\370qq\5\326/\35V\270n\327\60\365\66\66B\364z\213\70\224O\20\227\377%\16\"\305\64\16\6\221\266p)\346\177\210\330\375\322\360yV\252\64\206\327Y\324\315\322h\266\252\214\221\352-\34\223WG\246o;]\207\342\343a}\242OY\264\222E\200@\343,_\332W\221" + "\337\312V\267!u@\26F\31\350\316\r\334\2\f!\226-]\0\16\352\31\223\267\62yH-\374\366\203\216\33\30\323\267\270r[h\20\267\205\245-\313\r\267-\256\227\66n\0L\365\275\63\251\25\210\274\210\35=\232\0n:D]\217\16t\b\332\60,\350\250\336\310?\\\355\\M\246\357\2\374\356\316p\245\353\f\v\336t\r\35\177M\324m\334RS\361J\351\353\r\373\276xY&\316\16\70{&8R\0\347o\206\335\306\71\204\251\3w\n`\336\302\252W\237\201\225\327\247\204\250\370-Y\247\33\30\355\255\63\r$\231Vp\343\20\71\230i\243z\350\314\n\236\223\354\321\347cu\324\261\247\f\322\207\34i\245\317\241#\342\350F\225k\326\202\65Y|^\301\22\231\324.Y\\\24\220M\1\266\32\f\3\342*GQ\307\342\245!j\n\334\340t\322\36\367S\334\22\6\204|-!\303\4\232\25W'D\246\270\62\241\6\71\324\60\230\310t\21=sT\23Og\6\304\267\304\267\16\320\35f@W(nO\200\267\37\234\63\305\235\t\371%yMV\246\261%\344\235\363\f\376j\224\275\7\337P\303\71\274r-F#\31\235]9\363\24.\367<\325\\\274\234\301\1\265\230\263\230\227&\354\367\236\37p\0%\370B" + "\35\363Z\324\201\324\332\251C\212\204\200_\233\350Z\7\f\2\217\31\340\340b\4\316\17\313\305\264*\17\216\325\345!\334\62l<\204y\347\232\240\347\206\300\337\r|\177N&\31*^\335ont\227kD\6\304\233\330\366`\200_\243y\350!I\222j\272ag\337]K:\355\246\32\66lp\6\262\331z\215\205\366u\n\322\205\305S\302\31" + "|\fQ\30\253\212=\352\247\215\34:\276\320$\315\257\270>5L\236=|b\320\232\241\202\337\262\227\32(\35l\351\231\233\313\242\234\271\345\242\374/\304\3\32\37C\210\210\27\242\3ImX/\336;\323\201\375xx\27i$g\262\271\217K\335\272\r\2\v\367>8~0{ \344i\271O\220\201) A\322\211nLM\337\360\37\236#\267\207\255}\272\3Dn\351\321\275\362\240\36\246\354_\250\355\220\324\354\35.H\217\255e\266\352s5\32&\7H\1Ui~\35\36\375#\311\27 Yp\355\71^\326\325#\270\306\360_\b\277\2\341\256\356\227\21\346\366R|Pku\314\225\377\255?\221\177\235\275\202y\37v(o\250\326\4\323\366t?\202\256\270\267[;5\263\233\374\372\204\7\221\331\t\\\345\r\n<;\373\253\274\371\304:\200\327\246\324\212\355.\27\252(\324\241up\256\214\272\376\315\355\222\216\316/u\323@\235cC\226\205\205\247\v(\235\30\t\341\21\347\375\223\32'.\210\252@G +\251{5o\241\266\301\27\276\17R\32%\365$\227\323\22W\256`\320\61@\231\36K" + "\215xV\17\216\36<\24\271\302T\244\313w\205\307sk\305\70\4\342z\223PB*D\313\253/\316\277(\256Vd\270\207\247`q@\276\204\313\27\351\357\272\373\265\212\60x\207\264\251 ^\345\212\323\365^d@\331\225\327\70\226'\230P\372mNq)\347wde9\204\342:fgZ\270\227\236-\25\67\63\237\207\216\221\32)^\24\267*\246\270Q\210\246\\A\365\245\306\235\5\220\345\355\347\356\f\306\276ZqC\6\217\360\212W,\341\223[&\222\372\276\270]\r/\266<\211>\r\231\210t^\342\331Y\241\250\205\70\274\300+M\255\263Mnr`\244Y=\222\262\373\31\204f\236\326\270\360\314\371\6\324y\201\323g\244=Rxt\2\236\327\377\260\v\273BM\35p\351]\253\26\22Z\234\f\335\1zz\332\2H'\263\362`\241\242\333" + "\67\31\360\320,\215\17\212x\327\215\344\7\233i\313\352\20?-|\272\237+<\272\257T\t\214\235\25\270CS\344\6x\17[\273l\345\326h+,\320\260\317e\f\333\375\273\313\65\1rz\334R\350\224c\24\27\211\33{\364\376\31\371\270\71s\276UO4\276Lg\265\33=\325\315\30\246\241\310\300\257\252a%]pfxE6J?\235Iz\312\v/\200\276\261p\375Lzt\314\343\31\222 \24#\220w\33\320\253G\354\33\370\244\270\201\235S\222\340\253\25\34\205}cds\365\f\321\3Ox\5\25,\17H\375\204n>CVy~\35\\m-\254\270\331\177\323\277\214\255\341\373\243\270?\263\334\242>D\362\240\224\255\316\353\200\376\200\71\34\r\21\277\246\301\345\67/g\352\63\234\346\230\r\252\34 \205\310\22|\201\333\226\214:\6\7gq\1\211\220A\227\363\3\227\206\65.XN\247,\245nv\352L\222S\b:\357\214\23[Qm]\213\34\6\336)\240\32`d\337j\233S\352.V\210\25\230\6@\333DH\351\371\62P\vP\264\305\313\363\321\247_)\4\306 \275\31L{\251\25j\377Y-e\252\346\342\352\234j\324\376\325\352u\231J\351Q%\0a\212\353s\262\220\334\313\373V\232\222\276\270\200" + "\37\346$\211\240\267B\34\"x\270\246\270;'\251\221\363\324\"\226\377\235ss\371\5xd\1&\300w\376x^\356\236\305\352\333\257\212;\177X\177\215\373R\322\336=|\367\211\333r\330-sC\246\255\274\301\340V\265\220q\324\365,\36\234k\v\23\220\345s\204\26/\302\307\377\257\333\274\372\333F\222-\316\347]Gi\224=s\251\233\66R?\307\r~\363\70\310\262\342\212\262\354\361\33DB$\206 \232\27\301\22\375\351\357\377T\1\204\344\335}!:\241\321]]]\341TQN\217\225\341\2\355k$\221o\r\373P\222\265\32\v\334\177\7\331{Q\257\17>Q\177\236)R\204\322\5\256\201\333\23\16\63t/\3\250\304\60\266\303\207\222\251V\204\61\210\64\247<\303\60\330\326\233\311\365ar\255B\210\264\36\66\226\316\63\326:\313Y \237\v\341\2N\371\66A\322\64\66Cw7E`\261\5\4C\213\207t_\354\203\210y@\206k\17Z\bFY\374&\216g\333|\370\363B\31\257\357\366\ny\232\205\355\364\7\331\250\6N\330%\346\214\353\6\4SS\362\351\304\364q\4\320\241\203s@.\260\214\343\374\202C1Kw\276\370\306\306n\4\375\346)\27\60\36&\361W\335Ty\206\17v\177~\325\375\336\356\235\304\215\245w\25z!\353\361\350\254\356\306a\32\227r\255\236\356\356\204i2\246q5C%\\`\r\351\231\16Mou\237\354<\351,\357\206\f\27%\215\277}\353<\334\345\256!\177vC\211 \243+\27\263\237h\31\207\356\374\250\t\271\362\v\207\20a?t\255:t\r\272\246JRF\213R\310\304`\367v]\342#g\232\222t\354\231\3\207P\200oi\220\301\204\273g\360\222\334O.-\343+\276\303\326\vVV\305y\216/\27\311+g\\\225\340\354%\203\64\301@\353\376\216\301j\232\6\275\223\16'\240|]\244\\\216\205\";\20+\30jF){\257\346\334\235\371\2%\251\215\257\302`\323|\312\236\206\303\200\306z\277\363q\347t\347`\247\363\323\373" + "h6\233K\364\267\326\37V\201\31\27h\306\257\230>\266I5\300\233%\204\22\4\250\252\360\237\356\363\316\352\242,\206{\330\324\266m\222\64\236\352\272^\350\bK\35.\257\302e\245\244\1j\212\362W\31\303y\36\247M\355\320v\362g\324R\"\223\221\27(\r\302L\30\227\301yR\bj\303\252\263\316\24\324&\337\341\30\343\"\221\274Qc\36\303\363V\b1\7\363>\276\216\330t\200c\23\311Td\266*\275\275\254G\205i\361\35\265sG\342\36\275\227\27v\302\17\233\343\22\200\267H\216\306\341\253$\202\332Jst(/\275W#\37\320\243\344\326\67\223_\211\317\1g\345\227G\335SAE\333,\33w.\215/8j.:zs\310r(\340\253_\t\300\301+v\22U\243\240\337|\230\306\5\353\236\317$|z-\224\376\243\67\235\361\301\355\272\177\60\37h\360\362\336D\16\367^s\247O\261/+\210\270\227\376\232L\243\270\367\253L\227\236\204\312L\27nB\275\321\t\233{S@R\310\307\23c\27\350\222B\200\340 \27\r\345\305\vk{Y\327ug\302Z\251\270\334\20\213\275\341\34N\223Y\231\f\271\217{\331\0\242\357a\360\232\205\273B\251\211\nP\264\33\377\301\4" + "\225\230OkE\7:\276_b\37\225I\361\362{\357T\237\36\316A\3\352K\304\222o\325\265:\346\66\343A/E)s\215S\361\2\232\356v\7 kf\307}K`}?\352\264\32a\332\267\16\305\372\355\356F\3\336n=\213q~u\24j\235\71\252\345\345@\361!\305\340\210g4Jc\371\330\362\320\36\71\b\4\67\314f\262\246\366\n\227\220\203\256\303mL\307\275\230#\v\36\67\237\275\373\241\367s\202q\274.X\256kZ\270\263\366A\310\271\230\327\235\203\327\1\242\323DQLHU\303\247S\320\232{\37\344\253\205\234S\210\325\370\355\233\341{ytqA\357\177|\210KN\266\24\264\304g\5\321\370!%\332\"\232\210\23\222\272a\230\33C\24\223Q\21]uO\200\204\4\271c\306\262\216\253\5\366{\20\314\221\306\204\62NJ2\231\323\217\364\361\25~\260A\20-\fmp\33\1^\0:\352:\344c\260K\v\253\255\251\265\237\205+\256`[~\316\226\302\70\23~\222\311\242\203\264\206\22okL\226\315\335\60!\314S\345Ec\351\361\321y\224\65Xm\301z*0v\341\7\303\326\312]\375P\t\325\324\257\221\275\312\70\70S1\314\f\210V\24B\206-\306\261\37\351*\335\331\217\246\311\204" + "\230\206\273\375\235\365}D!\237G\326\302\0T\262\360\265\263\311\263l8ym?v?\346b.\313gL/N`\b\323m^\216\5\306\60\67\270d\35\70\253a\371\316\206\214\63\336;\27\203\316;\277\271U\205\70\326?K\262\227\r\362\356\0%\263\\\31\254\273\244\376\5,\f\340>\30\363\235\243W\237\371\315\26\26\333\203\375,\\_\b\346aY\260\345E5\275\240t|\322\357\374\260\17\276\257\350\224c\364+\373\271\255\252\272\300\302X=\330\61 \310\303S\217\16^\234\276\356\374p \20\23\356Q h\224 !\36\336\330\363A4\214\374\326\177L\313d*y\320\336\275Uz\205}\b@\\>\210&rfe\373\343\334\203\342\351\216/\324\336\21v\b\260\305<\\^\2\372\35D\263\244\263aV\233\24\202\241\0\343$\263O_\1\360\230\223\276v\20s+D\214\247M@1\271\220\364m\332\341V\r\222\v\301^\222\377\253\222\241\fJ\6\0\343\244-\32B\375\253\343\313i\312v\3\242|\353\0\271?\357\36T\23hyPe\b,\363Qp\374\70\30\316D\376\203[\310\67\2|\353\7\363\301X\202\344!\27c\334%\356{H\1c\372\67\24\334<\201\251\346\"\200\314\350\306\v\336\70\342\306V\21K\240\210\b=\20\306\362\367\27\235{G\300&\236\305\60\225\250\254s\34(\274;\350\376\375yg\223\247\264[\316|\206\3\b\343\227\207\263~\364\376\0\213f0\211\347\314\303\244\30\362iT\25I\347\221\5\26:K\366h\230\254Q\270\335\337\177}\266\363\370\17\235\273\336\333ggR\200>XjW\240\252]v\276\200\340\221\222\222x\336\242\222\7\200\372#\216a\204\371\255_V\207\327L\260'\323:\4\200\262n\224\365\266J\347D!\3\305\212\356YV\235\345\3v\356\237B\255\26\347\305\235\227\21.\325\302T\16\61AI)\271r1j\311\353\r\264\275\342\325\70\316\377,~\204:\324u\202AN\257*\260\250\3\256\36\343\327\33\251,3:\361\240\65\62\30PJ\275\204\360\rN\366\3\325p\315\243\337{\n\25p\377\6|[\217Pg.v\36\366w\336\354\354\355t\356\366\251\361\342\316\316N\27v\210\26\266q\222\325Nh>\255\206\221\350\302\242\5$\364y\206\66\332\334\217\4\206\377O\377\365\236I\240\315>\202\5?d\330\4\252\67\372\3I4\321\250\217\31\30\301t\213\334\307\25Z@:Kb\201K\375\67\262\323JI=\204\241\237W" + "\241;\232p\rm\363k\fy\372\370\71\212\t\210\353\312\222\364\372q<\361d\273OI\201\246\345\33,?04\16\273s\224\336o\221\263\266\17!\207\360Ia:\231U\273O\342^uauiQ\36h\361\316\3\236W)\323c=\207\213\244\263\325\37\23\257\264\333\240\33\256\367\23|\277\30\310Ev\202\241\215M4l\211\256\370S\"^\203\310\214\310#\306\b.l\221\323\326\255\204+\235u\356\367\303\354*)\211\34\71~\360J\36\337\242\250," + "\227\65\257yJ%\16\204W\27I$E3\\\331\236\315`\300\311\274\262\316Mo\0,\344\350T\224\3lH\344\206W\373\245\261O\263\374\373\326z%\t\6\311\243\274\321a\tbc\213\226xHu\312yk\301\211qU|\1\221\254\214\354\342\203'{GZ\207\4\312C\7\252\354\364J\313\f\310\265\334y\23\250\271K\331\62\36\344o\347\61!D/|\343#iu-\5V\273\r\335'/\345\277\215\215\252\211\324\64\35\215=\277n\345:\243\354\344u\347?U7\342+\266\302*TEx6\270\233\316w\303\32\345\0\271\324\366(0.\246\332\7\210\204\37U\360<\226s\30P\250\214\62\35ae\226M\327H\245\7V\22S\241r\333\262>\340U\4m\233C\272\252\246Cy\326\216\304\272\250k\356\232uh]q\234r;\245\7(\217\324\7\373V#\275\256\253)\233c\315\341\6\207\247\226\274\322\2\253\17\353\6\247~k`\351-9\243m\6\322\357=\7\243\271V\177\340\262\342\270\\#\321\312\271N\243\272\300\373\217\262\346\215\300\206\253)B\331}!v\1\275\252\31\365\66\35\273Ea\37x\327\315\314N\346\267\266\327\234\237\25\366\303e\323\6\6\223\224M;.\261\322\266=z\320bF\335:\3*.P<\260\215" + "\215\325n[mi\201.\357\370\22]_\207\254\36\66\20\330t\v\342\207\326\352p\374j\325\312\b'\275\277\276\250`PBN\325$\376t\203kOX\263\346\227\21\365\63\267\323h\370\264wn\16\354\31\272\221\320\244\371\371\204\234\f\365\202\253\315\367\306m6 \340\321\331\253c2a\343\f\377@y$\21\306\372\70\221T\16\231\32~\21\325i\370\214\335|\347\fN\222\307\252\347X\36\311\331\"\3\302\254R\301\335\302f\230\206\205\321i)\263kV\310\33\376j\222*\vu\24,.B!Q*-D\30\267\301\201\327\30\vn;\361\241\267g\257\217\17\216O5\22\346\241\3\247\335\212\220\314\237\340\4\206\235\63x\274\315\35\263\244\61\326\252\250\17~\23\222g\213rk\"\270\71\n\230\273\244\346\333\177\260\270\225Q\312{\337\17\340E\235?\vm\\\211\205y\334\257\62\26IA\210\17?Yfa\370\270G\322;$o#\243\334\36\37\226\317\310\322\240\330H\16\17}\301\207\351\327\bV\277KWK4\365\36I\362\371\262=%\261s\237\62D\237\62\233G\275m\352\233\231D\n\31\247R\330\377\246\303\330M}\236e\2\0\376\335\216=\337d\323\206\204JP\7I\314\256\364" + "\353\r7\306#\273\235jQ\253M#\267\247\276\256\255\327\272\364O\235\255N\265.\364\347\25\246\254\217i\210\353\232\216\223W9\300\241J\\:kr\320\33\345\261\321\266\364\243\21\16\215b\301\26\21\261\\!\337\347{ \257\330\213\304\26\201\231e\251\64\220\243`\235E\202\352 \236\301\340\276\35\5\250D\270\206C=?\322\26\351\vQ``\1s\336oZ\332\364}o\271\312\246\341\252\216>x\223\334\310\363Dw\324\17O\222\307\216\322i\213\313\230\200\177+-\215FeE\32\334\343[=\325\356\272\265\327\352\353\64[\347\"(\316N\336\227\267\231\315\320\0h\356\364z\207k\340\363\230\273\35A\4\266\5K\372Q\237\71\262\341;1\240\344AS\362M\353n\340\370\271{\35%\266\235$\323>\254\337\34\24\317]q\263\16\355\207\263\64\22\215\377\27c6\211e\301|\177\335y#G\243\"\351\231\337\21\36eD\25c\274\275\266\305\264H[g\255x\324\65f\262\\7\2\255\332)'\344\25\312%&f\306~\322\204\215'i\251\216i\\;\200\5\202#)\375\217;\24*_0\t;:l\201\321\71Ft<\30{L$\32\210\370\370P\320\211\300\20\211\245\61\343\232\24-\271" + "\245E\t-\302\224m~P\210\236sl+/%W'17\21\307,\265\314\302Wg=\30Ep\203\70\t\202a\303\223\4Ci:W\177T\332\207\205\333\62\240i&M\256l\7\355\6\317\372\260\4\212\223\71\20\220\262A\376e\357Y4\372w=\222Sm\337\207j&t\222u\267\37R\"m\331\316lX7$\257kB5\333\241'J\f\272\261bs\22\333n\274\200p\243V\6EEo\364Kw\360\376\315\226*\207\201\v}/\203\205[\27\241\234\352\66\321\nwG\34*@\312\302\346\220x\343\205p\1F\326\341\70gH)\217F\3\217Rm\5\23\265\262\250F\361$\331Vx\f\246P\346\360\337\237\300\24a\36J\2\216\362\203HO=\253Ym\313\275\vn\312h\233Ur\v\25d\341I\306\244:\245\222\365\v_m\300\242\243\21\17\305\23\326\364\213\321\310C\6i\r\233\363=qc*\235\355%d\204\373\327\17\331\271\234t{(\31^\214\313\256\316k\3\353\345\302\362\242\361*\361\b\340\31b\260\260\64\234\37\225\244\363\363\316\253\235#\315V#\271\v\251\261\365\361\355\273\33\351V\265|0p\271\7\364r\347\343\273\343\316*\377~\300\24^DS\5\324\277\16\221\302v\6\322\267\337\337 \204\247hj\224\66\222\217\327\330\f" + "\7YD\371\34&\250F\343\214J\367w \371+\37\63V\231v~:\327\327\205Uz\252\363\306y\224\311\342\344b}n\263u\316w_!\323\360\353(\310N\311'\360\302y\22\375\252\334-K\272\316\3v\273x\340\314\374\327\316\366\71`\216\300r\344\335y\22\70\347\26\323xt\236\300pj\377\346B\335\305\332\312\71\16z\2\232t\347\34LT\230\225\205a\360,\250\64,g(\tKH\b\347\237\237b\34Kz\313`\336P\315\323)\177\7\70\277\376)\32\b\204\31cQ\223\220\6E\366\201\205\370\210y\302\246Ahu\376]\376\24\315\63\323^\312Sl\214\274\325\177\325\332}\306\314\61\20V\\\363\16/\307I\276\370\277\302\346\247x\212\70\237{\336I#\361\67>\305y,\370\241\373\265\330\351\66\377c\320\253h\240\23\267\26\227t1\244\307\277\306\272q_\b?8\362z\337\363\67\312F\31<\274]W\332B\271\310\0T\256\"wc&\360\34vgh\21LM\365K\342^>\341\262\271\260X\260~\27\275~\345\21\232\37(\217Z'\1\"\334\252\333w\334?[\230\16\233\337\17\71\367\245\234\300T\361\215\260\36\204kR\25jE\341\257\32\266\260\5\30Sp{\353\370\62{@(\317\65\200\340\256" + "T\255\276\354\0f\367\\2\3\n\306\254\226\375x\346\342\252\212\261\324\267\247\245l@\233a\343\323\353\320\250\342e\350\25\216\215\f\222Y\367\357\217\325\334\324^\361qi&7b8W\357\302C\200an\247\30mz\227D\21j\247\376s\344\317J\351\vY\315\244\21h\237\217\222(s\272\257\265\rM\b\357Go\202;\r\324\335c\33y\f\237)\217\305J\262\207a\35\332?\275k\376|7\265\0\343\306\215\226C\265\274\374\247\377gn}\356\21\337\245\335\355\25n\221\250\337\372k\b\336\317\330\270\327\f|\355\31\r1\206\251\64v\332d\265,}\216\63\201@<8\20fh\376\b\343gaB\220\336\4\367\215\311\260\70\332(\224\325\232\334\213\316\235\317\307\275\346\376\337\373\34\b\203\63\276\206\364>+P\307c>\33\303\23\277\204\321\70lw\375\321Y\376\245\66U\220KI!\220\360\230\25r<_\204\342\22\301\211\230\373K4\373]\214\333\256\220G9\366\377\tn\350\327\240!\263\315\277\4\205\201\364\253\244?\236\323m\r!\24\66\345\266\325TC\0qwM\232\336\375\242\377\326\265\30\360\312\227/g\235U~\332\177\62\221\225T\265\251/\377" + "\17", + 13089, + 21541, + (const Bit8u*)"tU\207_\342\350\26%`\307F\263\343$\222\344K\25\322X\26\247\217\65\372\34,\270\363\354}z/\333\v\250`Bo\316\277\265}\367\317y_\310\324\337\vv\341\336\363\335sr\316\375\332\204\336\325x\310\266\262\206\213\253D4N\372W\0XCcJ`Rno\370\226\62\266#\270\204\204\317\246\340\t\200\20\t\336A&$;H|\331\204&\256)Tb>\200%\26{\351\304\62\301$\326G\331\304!\316%\236^\342\23?\4\202\311\216n\b\r\373\245\244\313\246\270?\34\221\244\0\221\24h2\31\245@\362\26\3\217\241\36\313tr\241\217I\356\16\260\311g^\356\304A\360'\235d`\322\v\273\367\324\360\202t\342cy\361\4p\343\r&\375\2\236D\251\v\236\17\357\236D\17\211\223\377\34\220'\373>p\362\312g\34r\332\32\305N\373e\372\24G\231Sa\213=]\334\341N\37}\305\237\265\357\4\317\200P\237\65(\235\361=\203\342\331\324\0\6\261\266\357\204l\353\233\370\331\356m\342\354\325\62\231\352\230\5\251\216\31\64E*T\212\335\240\327\t&%F\37\245&\243a>5\37\256\3\310X*\326\317\246\66\17\202\352U)\365\303j\\L7\255\254u\b\275\277\375\36\262" + "\375\361'\236\356Y%\322\356\70\231\356_\1\351\21\70\371_Tz\354o\330\272\247F\274NKriZ\241\322\343\62\254y\247\206\63d\33EI\377(\0(\32\273D?\226\271\264\30\66\37\25\256z?\236\352\374\300@\334&\242wH\377:\0\233hl\202N\264\5M4L\365vZ\237yC\246\322\352\64\235^Q\336W\2\217\220\336\64Jgg\360\364\223V\342\274\255\235<\37nC\343\nu\36\235\203\230\2\33\213p\347\263Q\376|\241%x\376\24\61\33\301\371K;v\376}\23\243\71\34\222\346\272\275,j\201\225\65\227\320\353\364\205l\36/\256E\20B\213\70H-b\7Z\244\t\325.\273\60\355\6NkS\3\214\66/\263\61\205\323\226g\371\257gL\202\224\266\325\25T\361\326\220\rq\222~\4\0'\344o\276u\b\245\351n`d\370\254X\355\200\346\264\347\f\257}\315\326G\33\277\7\33\254\351k?\310\224\216L\320z\213Q\272\277\63\16\371s\36\313R\35\71\246t\327\356\236\336\177\274K\353\230\310\350\200`u\206\344t\36\360z\210z\327\37\324\245fI\277\202\70D=for\33R\232X\372:J\350\7\36R\177\70\b\326\207\f\237\352\257dL\377A\244\63v\37\3\177\233\nD\371\257#\246" + "\240A\225\224\62\275\204\355\243\204\242\223\210\372H\277\7\0\257\321\237\31\267c\231+\16:\243\66\61\231M\204\315\34\65s\t\273\217\377\332\31\230l\206\0OM\235\246\347B6_\37.N\23\321\71\322\357\3\240\17\315<\220\351\314\363\20\223\265\21l\326I>:\3\221\356\372\374\221~J\25\234\326\332\312Tvp\342\243\71;\254\253\24*K\31\26\306\324\5w\303\212\240Lg'\20&\273`g\263w\34\34\\2|\366~s`\22\61\255*e\237\266\330\304\354\217\303\1\353C\342\n\277>\f\275@\251\215\246\220\251\\\223ahcPO\243\61r\35\203\320\367\275L\2 ,\334u\34\334y<\34\305\30>7\324\36\314\241\35\373\260]\312\221\315\255bNli\353\265\36&L\305\"\230\216u\323\271\253\377\260\271\305\177\371u\"0\31\201L\30\310$\267r{\271\323\272/B\305\302X\356\252h$\n\222aT\351\223\340\345\16V\211\334\63X;\v\300\f\232\373\356\62\225w(X\336%\322\371!\211\311s-f\6'\370|d\343\275]\26`\354\26\227\352\261\353\261v\373\274B\345\257\257b\371y\231\206qd i6\277\352\250\353.r\352\202\313\262+\377_\330u\4\273\236\310\367" + "\363\337(\361\7\205\216\25\345aapMyT\240\225\370\343BX\211\277\37\301\333e\5\361\377\n#\260z\27\212\373\321\"\205\251\1\242\60?D\26\226\6A\341+7\n/\233\372\245S\330\32\205\301g\n\367\307\330\302s\224+|\323\317\27\221\256\300\244ol\307iP.\266\r\177\222\220b\37A\24\375\200,\342d\253\200~\355\244`\36\260\"\253\320\305/\204\7\305\31\237\362\260\270\354T>\244\4\16-\5\325+]\37SZ\334\200\0\367 \300\313\353\240\370\303\rc\243\224\232H\246\344\305\215x\226\306\342|\211]\25K\322\354Z\347\207U/\376FD\177'\375\177\0\360'ZZ\373\213\322~\370\233/m\n\246&b\351x\361\366G\347@\5\bhu\22\252\0J\337\267\240eD\241\312-{\f\244\313B\272\34T\212/{\354f\200\244\362Pk\273X&\333lm\226\33\276,\33\27\267\365 \261\277\356\305\377\372\r+_\375\233.\337\362@<\246\321\25\0)B\201\341=\305\302{\n\342\31\333\262\313\ns7\246@r\363\62S^$\331\362\66\301\227\237\200w\31\263|\354\306\275Y~\211\260\345\37\354\\\245\331a\352\261k]m1\7,\276\367\231E*\335=de\324\7*B\37Z\231\24\251\312" + "\35\32\253\34\241t\345\365\70Su(l\265\67\302U\207q^\177\205\7\253\fo\236GT\347\200T\335\34\275\324\326`\215\302\62\247u@W1x\311\231\351\224)\370\253\343\235M\226\226?\306s\t\200e\b\302\306\214eT\217^\203\264cTl\f\342\241&1Z\365\66\20\201\240\252OHC\210\352\327\b[k\206N@0Uh4\241\261zj\336\260\t\352i\264\vk\376.\254\66\26\240k\364\20S\33\207\260\21;_\273\71\22\204\337\246H\234\252H\265\371\256!\261\26\17\330\272\33\300`\265\303\t\272\366\274\7\246'\316\177\275Z\277/\204\36\252\241\255&\250\332\17\33\220\311\207\213\325\240<2\34\262\r\371qq\204\210\16\223\376!\0\374F\4\230\vg/{1\342\342.\306\307\370\213\33\70l\271\367\331\346\276\210#\304\305\241\203\274xe\7o\35Mh,B\275u]\306\336\366G\r\223\351\257\302\354\333\377\321a\rZ\216,ax\254x\316n\264H:3\325\351\252\356\336\234\364\244\263\266\263\32\33k\333\266\217\256ol\276\315\365\363\334\277+Z\244\26\303\342\217\17\345R\245\337Q\267\374\273\257\267\211\207\277\37\352\33P~?\333\337\323\214_\270\257" + "\35\205Ww\362aO\227\67\354\353\320x \274\315\310\205\17k\231\71\275\"\253\214\274l\22\302gT.|;(\205\37Y\265\35h\22\215\214\274\\\374\364ta\361\324\217\323\v\313\227\303\317\27f\257Dz\27\226\351\244v\34:jn4sDoB\21\247\221\217x\335\27\"\33\67\255rG\366\257\26\"'\354\\dq\1G\256\36#\221g61\332o\275\252\375R\216Z\265J\364\205\374\255\217\30]\343\20\242>#\27\335\355\301\321I\263\30\275\244\207\341\227\231\332gt\1G\237\356 \363\250&\270(a\353] \26l\303\212\36mqQ\261`\203\374X\205X\257\312\305\354~\34\23\20\344J\7\271\62@\256\326C\256 l\274\26\352\230:\320\256\304v\267\5\6X,\31\233\240\66#\266\340\67\267>O\360b\354\374d\360T\354\326\364\24\376\264\33]\216=\232\234\270\22\357\234\234\226@j\311\237\t\370\4\215bt\214\331\302O;65\324\256\211\1\212\232\3\1\254%qc\273\30\37\356\220\340k\31pwh\337\277\32\214Y\230\362=\276\351_!\276\367?.~\334\216\343\263\16\22?\r\363\257\352\244\370\203.9\376\302\320(9\246*J\364\6\253\203Z\227L\302\62&$\234\307\271\304" + "\260\1'|:\222\330vBL\354\31\257Ni\366A\342\360\nJL\315\361\211\25\253;\361|\235\220\324\331\271\244\305\203\223v\7I\372j\"\372\214\374\340\254/\271c\307\231}\201\265\300\222\336dh\315HrnyVI\336\\\\ll\217\200\220\371TO\273\27(I+\357\224N\345R\366 N!?I\5\2bj\357\26\272\273w8\344\37l\31\315T\350_a\352O.5\361\37ty\v\216\277\1N\247\251\236tU\374u\271\353\370\353\242\266f\23I-\361b\352\32\60\t\22B\250)\\\322\235gPz\360,\5\71\225KsA\234\16l\241\273\244\17\327\362\314C\335\245\247:\272\224\364\251\316\356\326\342%}M\21>\36\nj\266\0>I\351\207C\300Z\266Z\231d\272\t\311\230\361\rv\213l\225\62kx\31\304C\275G\220\216UX\31\342\240\313\352\230^\vz \23P5\35\325\300\217F\301}g\272?[`\311=\1j\221\62\213v\222\271\246\212\360\275\224\65\234\221\263k\317R X5\222\25\273\375]\356\7\252\374@\353\255\341\320QFs\250$\33\334\"eC\376\32\262\232X \227\235\br\331\363\32\23\313\341\333\223\325[\223\220\fb\334\314\20\343\37\17\251B\366\341\24m;\306\272\340\241\205\367\374" + "\61.\373b\22\377\264c\264\321t4\n\227\231n\16\fg\316`\203x\31p\316i%9\317^1\247\356\253aHU+\337l\v\6aVn_\0\301\177>7\256\363\346\316\32\340\"T.\347\36`\215\276I\276S\321\344r~`P\316\257[\327\320\252#y\376\314Y\312\331,A\"\344wNq\20\7L\241\27b\301\223\20b\17>\314C\235I\371\371\r\r\227\304\b\b\270\16\16\200(\177e\220\344\37:\305\202\321$\25\274\253\344\302Vk\355y\243i\4>\355VP\341P\200/L\357\365\26\316\355sO\255\206h\257\347\340z\270po\204\24\333\27\352N\240\250w5\231\257\350\250\71\201/\343\324\365g\367_=\177\367\322r-b'DV\301\20\66\2\65&\216\376+A\364d\210\336\27\213lp\33\351\"\255\1\373\247\35*\334\2\"\214H\361\304\240X\\\260K\305S\274\\\274$\r\355\263zV\220\300r\24\243[\1\206\271y\244%\247\241|?\317{\345\374\25\1`\240\232\35\226\303\347\212\367\67\341R\17\"\360Y\244/Wt\253\r:\306V\\\311B\373\215\236\207\331\275\364m\206\202\2\363\320\352\305\222\244N\300\215\301\64Z[[\32_\b\265<6.)C\20#\233\f\17\0\276\342)\23\215\217\311\r!.mw\264\261,\224\367\36\344\312\323[\277\r\306\215\362\325\240\273\16\360\376\221\362\vL\224\312\32\"\2ltt\302kV\327\260\322\201\266t\322\67\255.wec\273P\331\325\301U\16w\342\312x\227\370\252o\20^C5\257\306\260+\32\325\346\257P\317N\371\250un\343\307\71\241\262\340\6\71\261\36W.xH\345\356\220Xy\341\252\253}\304\276\373\377\204[\5[\33\333\26\215@\r\b\226\4)\204\fd\344\214\4\222\314\204\64\\\253\267PI[R\343\243\6\325\353\267B\355\271\273\373\373\344\311g4\270\267\270\273K\177\316\333c\231J\16\357\336J\200d\346\314\71{\257\275\366Z\273'\25\306~\22\2\0Ge\210" + "\306\335\32\1N\307!ac^\20)'\356\23\32\213\325\224\366*\362n#G\233\60\351%\242\306\217\5\266\261\212\344\32k)\276\361\63Nxa\345\365\304\265\7^d\321\310\377\"\314\260\230ey\231\27\67\4\bD\b.\34\367\223\227\364\342\33\233L\0\214\366\322PQSqY\362\342\211\374\64\252\246C`\33\67%1b\26\63\27\333mQ\226m#*\35\361\350I\362'\247\357\70\266\363\250;\226!1\261\275\"\21+\265\241X\271\235\215\355wq\261*\207\321Ti\302]vZN\226\63WNj\227*\337AR\273\224\244\226\67_\356\242q}?\363\353\320&\v\277\1\322\353\16\221{\211J\334\71m0\261s\33\237\305.\205\30\255^\311/\201\224d\257\254f\255\255cH\272\224 5A7T\366\322 {\270\276\210\211\325I\240y\235\202b~\26\212\371\351x\236\300\303\270\34J\301\363\273 \334\65\335\253\301%\v8\252\\\343*9T\"\307P\206\236\30I\346d\353\16\313\316$]\346\211}&\241\330#\v\333\224\232\244\v\207\205\226\21\253\300J\312\233>\223\363\332\206G\\\276\345;\311Bk\346\16\b(\375\240Z\vI\314^\250\237h\25mjYd*\363\61\324$\314\267\36`\204\313H\301GL\241i\250f\0\31\210\326\250\204Zk\4\220\60\245(H\230R\265\201\27\32Wk\275E\222\376\66\63\315dlw\235\66\273x/\266\37\256\21\253z\347\32\bWr\242)\260K\240#:\342:u~*~\377\265\312)3t\271z\246\343$\251\266<\v\321\306\230Q[\205\304\302\337\34|\255\27';\256\360(AlOa\260\334\260\346}b\"\352\312\6f\35 \211+\201\337v\330\367^!o\253\16\207\240\207v\303%\356\267]7\205M!co\333\36\231\311\266\357X\251\366]It{\246Eq\1$" + "\"V'\2\262\325\1\262\325\363\355\371\311\340\4\350\233\213}(#\367\265\0\70\31\361\264\227\34#\333CG\251\366\23)t{\215\303\335\376),\364\360\21\242\375\311a\324\376\35\17\333\221u\210\213\324\360\35\236\34\241\3\245\225v\224\336\320\374\327\216\212\234\64\205\260\333\360\1Ot\34\t\242\377ZE\16\216G] \v\257l\211\212\211\356H\242\216*\237\321\322\30\30\225xW;.JL\307m\7\321q\277Z&+\35\267Oq\360\322h\372\30\271\365\352\64\v&\177\247\335k\332%K\2\232\30\320\31\f\262\235a\37\7\277\341v\236J23!\7\215\326\63\221k:\\u\36\256\345:\317\\\345;\257\\\20:?\203\23\367A:\v \222\275\321Cu>\263\220])IT\227\335Jw\261\311r\17\325U\341\272\336\365\211\224+\307+\364?J\177\370\253\247a\241+\262\247\264\353\232\206\310\340\247\234\215(\373\211e:]wE\4\70\306v=%\271n+\305wg\321jA\264)\6.\356c\335\356\220\202\16^\340Y\270\67!]\236\365\62\330\360\251\251;T\340W\211`\342\244\354\346\202L\267\24\272\336\275?\24\324cQv\fXTf\22\274\36?K\206\21U(\320\264\27\212\212\334\275" + "vW\321\302\367\367\60\240\352]\303\266\257\220\351\335g%\342w\347O\241\237=?\303v\327\236\341\272okZ\225\277\373\233\63g\261\333\5\367\200\26(N\316\177Y\352\24\376]Y\f\305\f\332.\333\66\256@\317N\v\327\343\264\302\312\300%\264\26_\315\206-1xd\17\311\222=\2O\365H\34\335\363\241\340\356\71,2=Ua\242\347\274\204z\352H\266\347S\212\353\271O\363=\317\30\241\327\212J[\352#\312b\263\61u!H\364\246HqU4\363\r\365-D\365f\321to!%?\314\237\352S\t\b\35%\204z\313h\256\367\200\241\215+\341\323{\242\330\346\357\255\63ec\367\243\367\21I\364\331(\324\347\246\371\276\200\327(\211P\264\22\3y\337a\325\70\356\253\362\310\346e\2\304\203\364\62\22\263/\222G\366\335\311\241\372\32\n\350\227\273p@\261\231\7NHw\377q.$\261\3\65fn\340\16<\352}\315W\23\224@u@\263p\370\210\307\357P\232\205\303\64}\304\35\71\230\200\261\63`p\23\320g\337}\213\265'\16\323A\253\b\267\226\203\r\246\f\354\234^\323\210J60\350\220\234\251\230i\211\20LK\4\321`\31\t=\227\240\34\205\27\213&\0\347?{~\t\r~x\201\375\307\223Z\356\237\326\253\260\307\62\207\0\367\264\366\252v\356G\217\353\37;J\323\307\335\203G\217\61\203g=\357\312H\203\327>\21\6\257\355W\326\b\6\61\217\325>\6?u\21\203\17\203\b*9\v\1\311A5\347!(\5\250\333PD\260C\3C;Db\210\360\241!\212d\207\2\262\2\305\17}\350\27\340\333\n`\330\345\354\31:\b\323/C\321\203\207\22C\332\320-\221\1sq\250AB\303f;;\274" + "\343\23n\330)\257\230\307\202`H\6\301aJ\261\356\370\341R\253\60|\4\216\61$3\33H+\371\324/\\R\244B\230\246\241\207kh\367\360\275\20\214kH\304pC1\32I\261\261#\216\24\16\276\307\217\320\365\302\210\277.\256\237C\211\253\216nW\342\334\314HE\21\300\34\211F\366S\354H\224\346F\352]\302\310\347*Na\216\364\215\301\251\337\233O\362#\ru\302\350\316z\203B`Z\203S\314h\316i4J\212\354\350\341\63\334\350E()\22\326\61\31\375,\207\31m\260\21c\326B4f\313d\307r\354\334Xq.\334\344\63\271KL\330n)\332\235\304\216\371\314\334\330A\v\17\252%\210-:\243W\f\320\261\250\247\bW\210\230\261z1\1\336\22xc\235\35\273\7w\372F\245\266\37\62\330\343%u\332\303\217=\25\204\266jN\257\373\222\66\332\220\225\255sr(?\331\32'\37\337i\327\215\227q\233\205\37\267[\205\361\"U\211\314S=\r\374\60\232\216\tq\334\373\177\"\244\35\233\21\343\\!1\36\b\243\361\260\231\35\257\262p\343w\254\374\304\216$a\242 9^P\356OP\341\334j\223\177b\237\323\264\7\243[\274\307\204\341V\23\21'9q5LM\334\215\320" + "\23\217O\272'\223Df2\335ML:\263\321d\236\217\235,!\271I/\315O\6)a\362#F\313zx\266\300\344q@\375\311/\355\376m\232\25b*-\210\246r5\16\236\370\215S\204\304LI\22\61u\350\370\335\313\371a\331Q\305\22;\230\253a@p\216\312\205\24|^\f2f\236\204\221\263\b\234\34\364\26\21%!B\366\324\62S0D\25\6i:\4\23\20A\356'\5!~\352\316Ya\352\33M\"\361TJ\6\357N\367L=-&\177r\316MM'\331\350\326h\36\70@\314t\252HLg;\20|\233\203\327\340\biL\2\354\4\263\65\313\222\364\306\224\313t~@)S!b\232s\241\351}\"\v\177C\375\326F&*\355\n\"`F0O*\36\205\335\30\233\234>M\222#)45]\303\320\323\67)\367\364Wff\372;\26b\306v\\\341\306\63\256[\334\f}\215\237)s\n3\345\216\322\231\217\64\325:0S\225Q\342\237\271\232\267\67m\33\265s\346Q27k\261(q\235\177\7\267\371r\317\r~\nH\26\62d\270\61N,j\251\67\33s(\311\352\35\24\343?\344\221\307\n\267\251\376j\345\317\322\212\37NS\230-\220\64g\7\64~-\226\265h\237-\v\222\263\373\322\251\331\217\352\351\331\63u\262\376\366\213{\233\304\354\255L4\373M!;\373" + "\234\344\346vP\374\\\6-\314\345\61_\316y\202nU\266q\4\346D\230'\234;`I\302\372)s\21\212\230\253\315As\267iv\256A\344\346w\26\2\177\312\25\376\222#\305\223\20\377p\"1\237\36F\363v\177\234|&\276Q4\314\314\23\345\304|@Q\310\357\315\37\n\5\271\337\235\17\361\363\65\242\60\177\63h\250\227x\205F\361?\321\374\275|^'\22\367\266\231\b\322\313:H\311\352\273)\31D\361:\5\\<\v-\230\315\354B\226\205[\360\0\67\332\303W\346'\f\5\270\244\23?\222d,\270\202X\bJh\341Tn|o\322\266y\270\1\227\210\6PX7N\311\364\304\256\267\22\330\v\227\255\334\302\315$~\341\253da\341\331\16X+\4\70\3\362\212\62\206M\206%y\362\232\220\21\376r\n\f\\\333\371\305]\331\302\342.IEx9\\\3\213v\223\224\201\311\35v\21t\225E\340\v\213\307\255\302\342%U\250\r\247\337\251\f\347\33\224\317\200\332\305\273\34\271\370\304K-\245!z\311{\323\275\24\312e\226*\323\211\245KN\264t\233e\377T\257\214\27\\>%4\350\7\275\364\224\f\7\226\vH\312\277\374\t\315\350\rw\221;nZ\16\4\17\322\3\301CZ\303M,\327Kh\371N\5" + "\\*\242\217\20/?\330S\332_\250\345\244\341ZnC\365k\bp\233QTb\227\277]\313\255\354\276\312\257\70.\b+E\252\326c\307\206\71\370\v+,\303\256\4I~\345\240W\257j\234\f<\300\236\n\n\225\315\3\316\\\0#I\332\371\254\234(\346V\242Y\274\62o(1 R\343T\244\225\33>9!\f\202c4``I\221\340kQ\340q\321@\272\65\357s\345v\0}\217V'0\277'\30\23\260\212\307\f.b`\345\353=\246\67\24\214U\323)ru\347\31j5#B\257\26X\334p\30\fl2t\31\22Ze\2\354j\300\241\357\350jyR\351\352\21C\301\0*\212\267\270WOJ\314jm\310\350j@Io\354\240\335\33N\27\263Q\356 6.8\321\306\327\356{\33\337q:\271\315\214\"~\263$G\330\244\343#\331\276\300f\210a\375\233_ \223\226w9\271z\336\345\320t\256l*l" + "%QJz?\263r[\331\26~\313\345\21\266\4\225\227y\345\t\22\f-\220\230\255\260\250\227\27_&f^}\37\363\273\363\25\327\377q\256B\204Fp\237\230X\361,\305y>['%h=\320\326u\221\335\272{\216\333\272\177>>\263\242\34\222!\270m}\333C\276\336c\243^\273\235\364\353r7P\372\213\62\245'^\237\276\200^\327\\ea\376\223\373\37#W\25\330\66\232u\355`S\307N\306\61\4\352XJ,\226\222Z\266\\\257\335\16O\232\311L\332\220S\206l\240\70P\314\360<\355\277\314\314\374\264\314\373\63\303\333\60\64\314\314\214\315\177?I\266\v\376<\373\340\240I\326\205s\317\71W\37^\243\245[igc\304\255\357\226\355\324\61<\321\231\vl<\"Tr\23+\325\ny\353@)\300\27\61\212\232\305[\225\222\306\222\235\207H\222o54\267\340e\16x\364E\244\266 ge\302H\273\365\222\252\362\253\36\323z\33\30\276@X\204\303\266\342am\220\354\60\226@\25\60\n\35\0\257;\354\251\340?L\374\325Z\310v\327\330\311\356\346\34\256\373&\317\203\263\71\276'S\336\223A\225\302\255\344\337M4\226\223\217\363\35=\17\30\311?\6\24\25\221\367\270S\204\236\262T\261g\177\232\324S\245\217i\276\236#\31\273\344\236\347\63\263\222e\331W2\"\220\220\220e\211\255\64\340}g\301\3\37\323\365p\223\61\331\233U\r" + "\35G\203\336\26\64\177\306CF\35M\362\311\336\2?\327\313{\371\336\207\353\205\336\243P\250\34\330'\3-\200\357\275\302H}i\264j#\264\231\222A\304\340\243\260\356\300ae9?\260\20\212\356n\326\5\347<\27\4\343\23\36\71\217\n\271\324`|\202\350\313\315f\373\354&\262\257\310\314\303\355\16\31\375\302\337\342*\250\346\373HN\350\363\n\342W2$=Iql\364\371\276P\240!\216-p\237\202\272\321\323\367xH<~P\177B\254\t\266O\227\361\277\222\27\247\r4\325\2\222\317\22\353\1\237/\334M\3IH\300]Y@*$ \25\16\220\n\17HE\0\\#\2\246\221\0\333h\0\301\204\v\274\257<\30\2\242MQgbL!\352kR\330\276K\325\\\177\212\227\357\317e\204\376|V\354\247\30\t\276k\250_\356/\267\20\331\230\271\217\357\177\302(\364Wk\23\242\211\300\276\225\0TN\265\221'\227]t\220\341c\253\16$\t#\365>\340\66\71`I\306J\303\266\304]%\225T'+3t?G\376}\254L\273\31\36\343n\372\345#A\367\205_>\25\64_\354\217\70\202\227\372\333\362\21\25\356\226\332\315\332\71\362@w\217\227\254\343\24\325\377\2C\17d\322\314@>\253\275" + "\256B~&\303\303\r\220\\\334]\242R\351\361\232\65 ;\f\362@\215\33\371\6\366\5!\365\2\36y\37\25\n\252\t\30@\256\271\201s\301\230zjV\321\240v\214J\364\203j\0\367\231\37\314\221\n?p\255F\370\202X\253\223\7\270Z\377Mg\220\35LU\4\370.\301-\371\34\r\347\1\262\320\37\5'^\f\250\210\276E\214X\242\253\262\377\341\fr\203Y\16~0\327,\f\26\311\342 \243\27\177\t\317\334\201B's\203\7=\361\264\263\304\351\223\301Z#5\330\224J\17^IAQ\5 \234\204\233JC\17\31aJ\322\347#\6k\4>\301\352q\226\3\201\b\275\303Qj\302I\tC\273\367\221C9\37\323\262\7{\257\277\243\265C:\200vEpp\0\262L\317r(\16Q\265\240\324\23U\vJ\31\306\203\216|\310\236\17|\257\3\234\272)\374P\211\21\65\234!.M\32\n\247\226\303\257\332\63\200\226\202\67\37!\27\26\326BS\4\200\300\256\327'\354\252\305\217H\205\4T\241\321(:v\207b\26\256\337kh\214x\344\60\25\252\247]\215\f\23Aa8T\341$\207\352]\334\320\31\340K\32 \271\371*\316\67\364\354\236\"y8\255\240\20\203\266\1G\177\305\30\326\203\360.\303\355\260\213\240" + "\206]\316\230\341v\230z\22\34\267\n9\354{\24\240\203\314\377\223+%:j\201\\P\16\362Al\324\262\27\337#\276\17\37\60R\303O\244\320\303\r\251\314p\3\254\255T\202v\347\206\245\317{\201\226-\31@\343\376\263\305\301\17\67\345\b5\361\207)Z\362X\222\362U^\376\373\221:a\370\362am\266\273+\331\206\257{\20\203\310\374\246\305BD\316\"\nh\304\30\365=\322\360-\27wn\6\263\32\311\21\213\5%G\\\323G\315\322\303\303t4\2\235\22\317\270\302\213\210\n?RY)\214\34CM\nS;\221\324\305\215\\\202{^\367\v\360]c\34\340\355gB!\262\33 `\211\221\327\355\354h\272\203\33\65\241\230\306\26\235Qg\210\35\5Nut\357)a\264\362Ll\272J\314\67~\271Q\201i\324\246\64}\372\225<\5\326OLy\260~b\202YAA=}\227\226\60\20\"z\302\250\26\265\210\35\376\35?\216\317\220\276(\254\206\31\235\33mR\370\321\347\203P\22\342'\\cX\261n\303\277\177\2\16\66\b9\6\206Z\345\332\350\213a\257\335\200\35R\306\62l\344\230=\33\374\34\216\204J\360\323\276\261R\312\240\242SS\322\214\245H8yc{=\16lN\"G\317\377\t\212\60V" + "\31\320\206\62\16k#Eq\244\33\253(\30d\262\360\322\2\336DZ\315\216\65\":/\302\215\265>\"\216\335d\242\205@\220\307M\24m\215\355\342\265\214\227\5\n\240\256\260\343\373\34\344x\205U\215{\20\364P\266\374\223+S\32\217\354*\377\364+z\222j\236\235\302t\6RW\315\325\70\366\36?m\244\276\360l*=~5\205\231H\201\\U\300\254H\223\23N\216\233\220\313\370\211C\242\60qA\20'^\252\226&3k\242~\357\3\276\311\274tF\236\fdP\211\203\31\340\311d+%L>C\213\223\67\30i\362U\26$'Uo\232Jw\32p\350\20X?-\27\253\265\366\206\63\20\220S\326\62\204\200\246J(a\312O\213S\25\214\64u\224\325\267\70\261\315m\352b\230\234z\325\253w\3h,\31{\r\301\0\355\nj\315_5\337\0\201\216W\302?\25R\270\351,?6X\246\363\24r\32\366\305t\216\267\f\277|Z\315N\227\324\304\210\35\62\t\216\374T(\0\212\211v/\274\32\65\315Q\344q/7]\226\236@\366\6\60\201\330i\337\264\217(\221\247\253\34yp\0\66\227\326\4m\200\355\243M0\17\251\t\323\315\310\356v\267+\23\7V\340d\225iGz\267~5\375\274\221\232~9\225\236IOa\376\225" + "T\320p\1\343\247\272\324\63c\275/e\313\341.\350Y mg\b\220\257f\36\253\251\306\246\330\314!\235\331\307\313\212~v\346\4C\252T\24/\314\234\7U\221\346\252d\337\314\353>\\\215\16j^\277@\324\353\207\265\360\315f+\347g\201\205m\232}\244\1A\231\213\263G\353m\227f/6\332\304v\304~K\0\0\22\203g%n\242\304\315\231\34\364\27\365\330\314,\20a\230\275\206\204\247\327\253\32\33\252\356\360\64`\335\332s)22iJ\377\371\222.\3\220\370\64\213N\30\342\\.'}\220\306\253\17`\331\377|\t\312&\263\v?$`R\b>\2\207\226\327\361\302>\307\236\240\346\274g\231\271\220\27^\20\60\245\237\204\245\36\356\377\4+?WyJ\230\3\213\333\334\361#\322\\\363\261\250vo\363\315]>\354\221\347\323\353\16a\302\262\fP\254\204\b\30\70!\330\275\226y\267\233\235g\35\344\274\277\230\233\177\320\316\317?e\22\276w4[\234oT\244\371\63%z\215(W\317ga\t\242\367\63j3#D{!4\271\22\21nR;\310yu-\32\244\304\263L\323e&\244M\362\363\315fa\376\362\236{\r\357\370\245p\270Z\304e\330$\200\v>\224\0\312@\237\232zi\b+" + "\206F\5\210e<\310\315_\365&\270@\207:\261)\276\5\3'\310\v\231\274\b\211j\335\263\327P\4\354\277\225\n\355\241]E\300\376'\\f,\202\17\201 \270\330\5\263\r9g\340\3\371\250+C\324\204Q\31_pP\374\2M\v\v\1F\204\237\245\205\nx'\341d\242{D\321\323\17\310\342\370\63/4f\323\v\27s\240\323\1\301RH~\367\n\301-\274\354\340\341\206:\335b\232SZ|\240$\n/\214j\313\67cZ>\277X\364~\"\317y\26&\37\65\301\67;)\205\267Hp\302W2\312U\234\206a\324\26\331\20\220\1\305\344\242\354\346\26\203\16~\261\302.,\36!\304\305SAi\361\371@\334}\266\370:\310\235h\261\63k\257\301SI\273<\fS\tq\352\200\3\267\223K&\264\201\353T\327\35m\273\360FC\213\7\316V\272\237Y*p\177\64\201\201\272J[U\300\226LZ\\\362\224pK\241t~\351\311Ra\351\230G\223\26\23\237\371\245V\345\374\322\225@A\323\322+\1\17\342*a\220\201\5\253\26X\260jV\35'&\30h\222\311\210\313\351f\300t:\371\1\315\23\257\247\326\65\375\237P\337\310-\333$\255\250 \255\337\220\202\31\207e\26.xC\2\314\275\360\277\371\r\312\305eB\251\277" + "\364/\7\344\350X\321\374\270R\n\354@,l\350e\272\231Y\246[ d\0\27\277\367v\23\60{o\201EO\341\341\37\2\374\3J9p\372&8\21q\242XL\227\62Ne\236&\376j\nA\257\243\310e\37\315-?\316\360\303>VX>\304\211\313u\274\264|T\320\66\331\255G\216%\256]\313\347\374\354\362K-\361\1-~\355\205\25S\32\5\371A\257\70\17\61+\354ab%tV\307~~\230YK\370\267+T\354\7w\203\213\243\244\306\261\237o\245\241\330\255\202\276\335\330H^\271r\342\336\b^yE\241V\263\\\364\252\225`V\t\33\261*8\331\345Cfr\325[\312\255\356s\360\253\341Ba\365\341\"q\265\332*\255\326Z\364(^md|\253\247\37)\226W/\330i,\326_K\r\220k6\231\3&%n,\211\71\314)@\253\f8\314Yp\230\323z`\374\374\206\316Na\270=\205\375\235-B\16f5\\X+\r\262\27\327\244`\221J\314\333>\212\221\\{\210\202\211X!\327*i}\n\344qJ\373Z\235\221];\231\306\255\265Q\232\321\223L\376\364z\250\306\251\65\323\235\223k\333\237O\5\352\317\375\371\\@\315\333\377\3\325e\355J \276\373\177\31\375\373\31\364\357\250\21\306\226\233\360\320\327n\276\307\256" + "\275\364~SW\333{o_\350v\276\367\326\245u\303{z\231\343\357|\203\370\246L\250U\271\60abr\353Y\17\210\353E\271\322zy\216\366\244\4\64\242\365\307\f\226\34\f\356\347\326\217\7\370\365\27)a#-[\334\60\347I\33\16\255\335\371T\354\203w\274\300\202\32\332\357cq\213\26\33\356\352\30\260f\177RE\223\232\331]\367\273!\355}\355%\202\336\240Hf\303/!\317\306\306A\23\371\331\213\n\367\37N3\277Q\23\24\66\216\7\304\215V\213\4\36\342\362\215\366\70\177Q]s\217S\227\332x=Lo\346\204\231M*@l\356\317\203+7Q\344\346\323>\270<\203\237\337<\372\201\0\242\232\24[\235\365DW\307v\343\267\va\242\301r\257\233\315\252\354\376\225\fF\353}\331\70\32w\363\252B\306\4\60NEQ\26'\\+\315\355\221-T\310\251^1\315M\324\344\0\316\26P\365\335|Y\22\267v1\322V\1\253\n\16e\1\26\376\304W\335!\233\344j\303}\305A\317\26GQ[\34M\264\333\1\266\24\303\236^\0.O&\v@\360\211\360\273\324n\327^\266\ru\316\255\375\f+o\325q\374n\374\312\241z&\275\210B\r\30\264\367\30\320\337`$p/\324\330\272\2\35\\i\205" + "\247\336\235\320\277\30\311fkL\332\353[c,\375\326\313v\n\370uz;\323\315l\347\25\23\333\356S\354v\231\237\334\16\35\343\266+\217\360]mNa\273\316!n7\347K\333W\317\350\274\300\366\353-g\345\333\304\211\217\357N\312\203\343\225\366\bP\366!u\303\343\266l\26n\357\367\210\267+\241+\357A\214\346\355:AL\370\274\227\177X/\207@\342DF#\242\252\60q[\333I\261\260h\267\34\66\335\270\235\254Bq'\207(\207-\1\255B\306+3L\354\245\324\16\221M\357\210$\263\23r\21\355\217\260\277,\177\230\334y\262\204\203J\306\303\240%\354\234\266\203\345\265\26,\257\207\364\302\334\363\377\214]u@\33\331\267N\202K\240X\240\264@\2\231\231\214A\243M\241\356F\227R\302\326~\264,\324\333\267]\255\313\251\273\273\273w\267n\333>ww\375\363\271\273\353wg2I\330\346\322\367\7\61f\256\314\314\71\367\310w\276\233-\7\377wY\271+@[\363\234:\307p\36\26w&nu#S\240\27\366\23[\246\255n\240'\266\n~\366\220\340z\225\244/\363+0\356\364\326p\271\312^\214\242d\3|\351\212{\214A\332:\243\324\206\61}Ra\33" + "\220\f4\323\326\325\36\201\266n\361\"{\335\216\354\305\f\317\17\17iU\210\234\355*\276hD\25\63u\242!\300\311\312\250\62dp^\242iR(@\324%\333x\25\304\nm\3\355\33mc\274\213\202\241\361B\305\250\326\30\203\30\240\355\262\252qb\265_z}\264}J\265\351\310\204<\274`\351\311\232j\34\327\341\365\200\346H\236[\255\320\366yn\225\266wW\243\263%ns\245Z\325\217\327\211\223\177\b\263\335\276\66\24\67\277yI\7xU,D\307JV8b\377\36\272\66\251h\222>\22\355\250\232,\320\16i\262\301\35\221\241xhG\310/\323\216\261\252B;\246\213*\355\230)i\264\243\253]\247\35+?2\325=\363\372h\307Z\237\36\240\235\325\262\306\237\312\316h\304C;\307Z\365x\274b^\34\70\335\345A\265\226\202?\225}\351K\316!O\25\71\322\357\307\251s\302\n\355\\b\307yk\241\277v\345\301W\332U\rg\311of\22y\361\247\210\347\17\324f\334" + "\315\220\272K\215\32\276E\310\311S1\204Cd\332\65\64\242\262\27~\322(\311\63\242\266&\216\342\255CKi\327\270(c\367\212\340\70+\222\b\315l\261z\231\352\231vM\213\302\343hFiB\30C\210\rW\330\213\212_t\374b\312\201\66\325\202X\361\361\262\202\221\222\16\347s\360O>\3\371\354A:\232\301\376\272$\2\264\213z[<4\267\16\275.(B\257+[1\373Mm:\376e\206\346\30\356\257\v\17\237\253\16\343\6\264\320\205\300\210\311\23\n7\311\353\273\60\273\24\356|\203\374\367\323J\324\213\303\7\231\365\367\320\235\20\34\256{\263\214v\27\27\204\227\377\352\346p\331\212_\313\v\227[X\214\21\37\262\354h\367 \335G\273\325F\215}\322\331'\23\212\307\253\366\300\301-\37yh\367\324\31\n{Q\331W\23\233\350\17\322\356\331\215B\200v\177.J\205\\J\271\31\16\260\317\331\23FX\t\217\353\320\320\271{\220Nf/\332/m\220u\332\323\240\231\n\207\311$\355\31n\303:\260g\246\336\310\213\224\232M,7\314\326\277nd)a\314\312\351\66\322\267\1\247\320\214\312E\27P_\270\352\21\\\365\250\7\357\62\336\337c\270)O" + "O\321\32\233\tg\254\315\322\22\\\306\5\253\24\255\274\17/\214Wx\320\363}^\230n\332\363%+j\334\233\27D\225\350D+QE{]\331M\264\267a\324\367Q\201I\20\367O\346\204\204\237-\v\213\264\267q\262D{G\241\370\276\213\241-a\0\315F{\37\65\"\227<\7\271\344\5\32~\324\327t%\275u\332;OR\2\264w\225\254\362\214Z\344r\231\277lHeuz\317\205\366\331\177\333G\373\312~K\246}\265\1\215\366\65\351\350\2\27\235\245k>\30\200\215\242\220\267\71\341,\226\246V\256\301\36\26i\337\230\321\22\355\233\71\332\0M\322\276\36\63Y\vO\321\272B\207\242\3\233h\337R+M\260\347\213\f\367\363\205Y}S\4\231\35Y\261\354Y9\235\26\341\0\355[\35\306h7\212\n\373\244\342%\205Y\22*\320\250\313\246\375\345\212\32\240\375~A*\344\27!\367j\264\277\243\321\234\260\301\224\301\343\240\215\370h\177O\270\233\366\177\21\216\310\340\370Z\316>\265\62Z\213&:\220\37\210_2\225\16\324e\351t@\315\t\322\201 \202)t\240\325\221\331O\300\241\33\366Vl\31\35X\34\356\370\20\314\271\31\61\204\b\36[ci1K\362\221\370" + "\343\6(\350\300\352y\36:\260\16W\352 \210\202~\255b\246\372kuf\255(\227e\1\60\255:\23\3W\222z'\351`\255.\321A\251\321\375\7b\263\217\16\6Sn%\35\34\343\260\210\220~}bF\23\35\234nO\0\22\372r\30\tX]c\"\35\374\370\7h\254w\1\302tK\1\251\234\325M\7?o\351\224o\214\352X~a\366\214\226\25tp\343G-+\377\276nf\313*:\224\323n&E\312\3t\250\344\343\71\234\360J\30\200\376f\17B\267\362\203\36\230i\207\206\324\252th\\\235\206\264\261U\244\347\347\205\352\345\271\n\263X\4\234\361\261\250\321\241\36)\231O(bU\341bM\253$\265\201t\255\321G\207V\351,\264x\262\306\216^\326;\324\223r\206\306~\324\361_\370\33l\205\240\303\216\260\215k\333c\361\205R1#\220|\204\213\275\17-\1\35.s\bt\270&S\244\303\rY\22\35V2\314)G=\267\265Z\371\217\212#\313\351pSK\335\n:<\274\5\222pxJ\276N\207?\262\243#\23\222\212\61\305\200\60\243\303\313l9\230Rf\236X\223)Iyn:\374\65\226\274\303\233\355\36\366\242\260\27\225\275h\354E\247#\271\361\22GL+@G\20\340\342)\1X\310\226\211\300U\246!\20Mi\306" + "\303\245\244\227\61\26+\n\31k\361\321\221h$\375\70^\25\264\230\330\67g\256\237C<\21bNP7\35\31WS!C\333+td\262\250\236\354\25\214BA?7\365\366\263j\304\302\70\225c\214\263D_\200\216\346H\234\364\344\257\7C>\320Z)t\224Y\254G'\300\216;\332\3;\356\350\352L\323\326F}~A\241XS I\205\270\333\250\365.C\255\67\254\203r/\277b\33y\342\220LG7)\17\350XE\244\271\2Tr\251`\242\264I\202\60K\22\230q\310\360\7\314<:V\213\32\350\215\305\346S\34\362\360\253\343A6`t\32Lk\213\30I\326c \211\247c\201R\225\216\r-\327\330\213N\307\246\62 \272i]p\315\20:6[\304I\253$\220\203\310\314\235M\5\267\321\261-~\341F\206.\"\2!Q\273f\230\332\307KC\36\374&\323qo\243B\307\207\b*\35\37\nY?>R\322\351\370\4\237\351\231\247\237\63\34Zf\213`\244S\372K\356\62\246\6\355of\224\241\275\351\211\60\225\277\70-\202\21C:f\17Y8\300\24\"3\203\344\201\216/\310*\340\242R\332\346y\366\266\307\60\"L\341\363L\0R\315\\N\226\261rD\362R\260\234t\302\26\66\251\5" + ",\342\372\244\25\232Jz\30_Tq\201\6\242\331\4\36\331ZO\363\231y(M\365\347B.\322WN\204\220\201\342\360|\320\211\222\250\217NT\266\200\246[\220\351D\275\252\320\t\24\354\323\211\26\237F'&\312:\235\350T\342k\247\221 \246\23\237\330\2\351A\"\346\70\255\201\245r\365[sFW\33\34l\316\200\20+\200\20\253t27N\330\305\25\232]\342\60\270.1\231N\26\325\263u\300\316 \t'\b\322\205\nDT\331\366" + "\0\3\70\26\230\333\327\6,\246\275\26M5\270\320\224\332\246\322\205@\253U\316\24B\23\315\202\310\203\374`\24\235\201\244gn\6c\352\33\222N\242\213\241\271q\324\"\31\35|\251\302\177\16\203v\313\25\66\301\334\256&\272\260%\20\277\222t\321\213KI\27W\366\364\366+{~\216\6\35\306\312T\177\62\30\220\351\222\342\262\34\270!%<\177\223.\r)\206\215V\210\303G\272\25\272\324Z\242\322\245\16\254i\227\272\5\235.}a\251\3N~\335\224\2&g\305\236!\266\252jo\240Xh\366\210\65U\222T\355\336]Z\17r/\314\373rv\255a\341\66\67\312<\257\207.W\263L\226F\227\353\64}\247dv\253\63\222N\272\254\311\66L\266\204\5\270J\275\201\22+\300Uj\356\330qy\f\206|yJ)s\21j\231\213P\207\276\26\366\361\233\351r\273*\320\345.Y\374\307\200&\375Q=\333\177\b\16\202\v#[.\310t\305&*t\245LR\351\312 \237FW\274\365LR\363\214!\314\64\302\32W\232\n\235\1\272\62\267\310[\302e+E\t\224\207\256|\345\225\351\252\315\235\206\23\26OF\222\263\64\337B\233\364\322\325lg\307\"\272ZT\31[\374\37m\256YK\376cnU\247" + "\207\256V\211hH\214\353\305>\230\344\22\201\256\6\334n\272:\34\272\345\352\304\0\16n\233ix\276?^9%!\240W\347\247l\310#bC\36\t\33\362X,V\334\0%\342\217\277\25'\35\356\232m\345\20\201\205L\251\337\r\243~7\332MWW9\253\344\223\275\23\25\272\272\t\300\360af\257\327\n\262\233P\n\323\267\206\227\33.\274V\n\27\254G\302i\225q\262_\276S\320\221t\nR\n`\234\231\371Y\216l{N\206{\215\27\213N\203'\316\351\316\352\304\327xu\374\322\60\336\313\n\273\362\370\66\20\303Tr\v1\376>\344\366\321\65\261\222\25\367\310tmH\255B\327\206\27\252tmR\221\25\366e#\346o\352\62\203\355C\224@\256\227\230{\360\324\326%u\303DLl\212\207\256u\370\320\376'n\350\206I\210\255M\320\360\253\276f\242%~\274\60\267\210krm\211\323\4\64\372\370XbLbU\30\35|\35\351?$.3\7H\247\353Y\356\370\2W\304)>e\361pD\246\257\227\206,\236\36s\f,\35\304\317\222E5\272^\355O\24\336pB[%\303\0\334b\215\327O\201Y9I\241\353\332d\225\256\207\274\70{\244\200\321Moj\332\347\221,\215y}.0\\t}\263\242\365\215\21\335" + "\250\223\5\272!\253\"\335\b*\22\335\30\241\261\320(\335\230\2\65\177c\266\244\320\215^!!/7V\373\314\366\222;\347\244\230R7\326\v\2\335\314\226D\272Y!Jt\263\301\347F\26})B\344\263\272\21\"\357\\\206\64@\7\322\214\260\245n\372#\32\335\234\30\305\366`rJd\364f\247\337\306cU4j\21\351f\17\324D\276Ym\304\270^\f\262\327\367\36H\272\271\246\322G77Wy\350\26\220At\313Y\244\320\255\212b\225n\r\36\250\261\70\334\336iX!\234\270\300\350\327\4\265\342y\263@\255F:\343l\16\63\254R\263b\267\352-\200+7\240B\267\264\344\263\343\374\377\63\302B\244?`\24pK\36\"\20\215(\304\7\62\21\203Lth\370\252\257I\216\202\273\35\26\335\n\213\270>#%\\\237I\2\256O\273\17\327g\276\214\211.\263\353tk\275\3\375\66MU\203t\273PK\311\210\321\355A\331\2\335V\262D\272\35\315\220\350\366\324Ls\230\360EE6\20\272=\33\363\273\275\310aR4\341\374\257A!Mw\312s\363\271\34\311tGW\315\32\343\302DF\30Z\277L\200\322\237$\376G\333`\251m\202JwBv\215\356Lt\350tg\241\31\344*rs\351zC\6\245\22\376\24\272" + "\363\71\6t\327\206+~\227%\335\356\226\306\271\316\70$\263\205(\325r\251k\242ZJ\325\260\237\7\16\64\264\351\335\301Eh\333\327\203\266\207\365\2\375\310\247se\232\216\341hq\344\224zs\n>\24\360\246\312d\2\311T\"J@3\31\346\361\335\216)&H\237I\342p\35\377n\302a\306,\2|\276\2lWW\201\355\352\20\25\273;\267\"\245\206\206\225\243r(\352\5Lf\21\343URM\357e\0\257\f\242\355\267\1\233\252\305\321\233\246(t/\273N\243{exl\356\r\316\60\356\243_\345\325\212\323=1\306\250t\350\236\316.\6N\216\346\253to\272}%\335\233\35\221\320D\217\303T~\206N\270\367\205j\353\227\353\225\61C\303\256\300\363_\203\347\277Z\303wc\226\216x\355\36\335\37\300\"\372\367\335\216P1\227\246\70\354\241\373C\273\356\321\375\t\261Y\265\367\351~,\326Y\273\222\356/\236\325\265\212\356\177\332\331eT\312\373\371i\341\373\353\\2=\260{\25zPU\244\322\3\275\22n\335h}\315\30\63\340\26\240\7\60\215\323\"\237Y(\214'\375?[\26\322\f\366\355\201}\213\322\261A\221\200\254\275H\17Z\275\326\206E\354\263" + "\214\37\323h\227%8\31#\350p\325\70y\24WV!r\352:e\355\310\300\215x\3qR\215Y/\213\60\36oLz\223\303d\220\326\246\226\362\201\377\17\263\314\243\370\64\263\230\265B\17\313\320\342C\17\246\361\260\t\363x8\325\2\254\247e\342K.\246\310\312b^\25\"=\234_&\321\303%\345h\352\213\250J\337\344E\222\354\65\1\372\306\335\334\302\255\22\372\217\271\303<\377\301*\302\276\231\322\254\320\67\261z\234\336-i\330aE\307\16+\206V\324\203\364\315\247\225\236\0}\233\357\362q)\326\217\331\231\264q\367\371\240o\205J#\326'+\4\36f\225\276\235\354\300\236\16\22\356\267I}Q\334O\232\25),\215\276\235_\255\323#[c\23=*\327\343\320\tz$\330\\\375r\2\373C\374j\27z4J\365\335l\221\344\237Xo\256\314\202YC\215\\\273qp\37\333\355U\1\334\321G3;dz\364Ix\305\37\7cQsW\25'\337\266\351\246G+c\321e\364hs4^\27\245\0\337\226\66\65O\217\235^\37=\36P\352\241\307e\r2=v\225(H\317s|\254\260\333\350\67\327\201LI\266\67\220+4;\214|I6f\35\317\24=\36(j\364X\226\222\244(\260x\7\307\1\355\203\23\200vw[)" + "\323}\334\362\321\26\230\"&\346\305\332v\213\247\25\36\207*<\b\301\325c\354C\253\24z<\274\16\203\230T\204A\264\27\352\364x\266\273\311d\323\62\374\357\307=\245\320\23\217\277rz\271i(\24P\0s\334\301:\345\202m\350I\201Y\375\327\230\2\235y2\270X\240'Z\225\370\7\242K\242'\376RF\225\224\66V69\211\301adIF\270\254\230k\273\17\5\31'\344\344\311\260\200BO&\264\252\364\304\212\215i\375T\337\256I\220\371\226;y\26;\26\357\20\32\356\16\203\241\62Q\f\316+z\0?\344<\254n\35\372\232X\"\227S\226\62\373\325\r\230\375Z\277HO\355\222DOs\245x\370\315CO\213\303\362\370A\250\26\255R\221\352\242\247\203B\306\332\321`\254>b\220\236\212\245\215\1z:\254\310\226\26\v\262\220\236N\257\b/\245\247\363\v\302\314@\275GO\227\227\25\204\357\323\323u\345\5\341\7\364,\257\254\"\374\220\236U\227W\204M\360\267\0\210P>7\256\33\341\63\70ZrO\317\64Q\245gC%\215\236Mk4C\6\6\30\202c\347\341\260\366\n\235\236\365\24\340X\216\36z\366\5\333\326\65\354\241g[ g\317\63\275\330_\25\316\304" + "\363\302\226\4W\215\231\325\357\343\224\25\0>X\301\370D\201\35Q\350yi\17\316\250\355\305\372\233\214\364\33\212\362\271\4\6 z>Zn\344\71^\36z\316*>\237w\211&\377?\366p)6\1\246un\253z\224\21\201\245\337\67\v\202\217NVf\331\2l\37T$SdE\254\221%I\361\321\363\365\212\207^d\311\n{Q\331W\226\226\346\306W^\24\327\371\350Em%\316\31R!\323\213\61\205\n\373\244\262\337\fc6< mb\341h\347\307>\370\275?\0\364i6\360,]8k\306\2\234\25\233\243\321\213y\363tz\361\t\23\213O\373\241\270\326vJAK\364\252S\234\252\27\253\335\2\275\330\330 \322\313\f\210\356\313\374b\0\302P\25\35\5\211\7#'\21\24zY\206\21\276\34\350\324\350\245\340\325\351ec\241\345\364\275\214\60\313\347\345x\307\24\316\215\37\5\31{\331\226\fpC#\350\370\63\324\237h\304\313\271\220\71\254\322\354f\321\313\236x\372a\362\24\323\207\232\214}s-Hq\330\207\n\3\17\275\\5\t\375\254\201m\362*\313\255\322+W\246F\257$\350\233Wa\4\242\\M\251\226\300\357\27\331\5z5\306!\262\27\67\275\352\204\36}\265\320\310\337\323" + "\253\317\61\335\327\331\222J\257\313e\215^7\370tz\355\227-\372\200\351_\320\353\321j\263M5\264Vn\272b%#\213\237\32\365z\335Q!\320\353\336r\221^\257-\222\350MQ\245\241\271\337\324\266z\350MC\261Lo\"v%\276A\202Fo\306e\352?\253&x:G\4\351\315\254\200;\360g\r\325\66\376\376\37oV\343\211\375\216y\37\337U\341\231\375\316\227\231\260\373\203\364]3\363\313\277\353R\264\">[Kk\232beL#\5\371jB\361\254\223X\354\313Go\35a\323m\177[\"\306\65(\275\255\24dz[+1\204?\275U*\335\311K\361\317\355E\2\275\35^%b)h\220\260\24x\335\7\232J\321\314\330J\234\67\331\215\363f\227\200\71\r\233w\346k\364vA\35\32\376\274.\236\337\247wYc\20\24(\257\t\320;WEm1\340\333.\233\351\305\275\33*\t\364n\232,\322;\20^\322\273\325\n\360\275>\372?\306\256*\260m\244[\207\v\1\7\32nZ\311\261X\212\67\216\345\272\314\224R\266\215K)\374\305m6).\363\236\313\273/\227\341\277\314\314\360x\313\314\24(3\206.\323\323\375F\262\34\247\361\270?5$\235\31\215\65g\16~\337\341L\330\254\207\213&kt\270\246@" + "\177\62N0\350\260\200\20\250\f\223\303l6\222\243\24haA\316\363pC\256\23i\37Y\212\64\335\372\247\37 \312~8\342\225\257\340Z\205]\v\255\360\6\64\36\35\236!Itx\261\2Y\253e\\\264CM\202tb|\21\361\230\363h\272\b\236\363\227\204\260\26eE\253\371\345\250\272*\343\5\230\30\232n#\330\210$\27EW\345U|\322\341\16\33\v\364q\205#\276\342-86\270\362\v\354\215#y\376\304\331W\304\"#.B\37\62\341\345*\310LE:R[\204\253\374\345\372\35\331o\374\262_0a\20TZt\304b\201\61\247<\237\216\204ge\24\271\212\267n\241\4\34?o}\360\255\243{\217\200\201\232\216l\314L\254\17\16J\211\247OQT\f\4l\301\0\202\275IG\336+\304X\37\272\321\366z^\31\342\17b\221\326=\377\327\202\200\321\377m\264\327j\277q0\374>\35\315\262\67w\320Q\237\275\265\223\216\326\331\353\366\322Q\323\366\360\244x\345\214-\271\360\341\63\1\267\222\243\321\321\31\r(\327\315b\345\272\330\302G\221\302\203\356\362C\243.L\7\355f\272\64\304o\257\312\215\7Q\351\304\247\61\310^\32\345\fN'\263\60\325\223\371\242\267\241\302i2\t\f\337w\30e\315\227*\334\t\201\325\2\4\n\242H'\225*\215N\6\253u:9\245\306\240\223\263q\244\204\34\373?\304\231\362b\265e\251\267\376J)\17m\31]I\316\361qrQ&\244n\300\273\4\320s\213N~\222\343\236\204N\351\335\251\254\262\214\20\235\252*\315H\371\31\261\262\61\v\211\27\327\224)\27\232m\334be\224\343\226\231\252U\220\232\200\275\313N\321R\202kK\352A\253=\321\311\223\326;\264\332\23\205\226Z\347\65id\374y\177\263S\203\377\\\26\247\n\300<\236\226O\226\350TL\220\351Tg\241B\247\276\251\27\276\233[\251\322\351B\r\244\332!\215N\313\21\35\264\346\260\313M:\35\336i\321\351\351;\202tz~\334\201r\7\247\323\353W\264$\331\236\247;4\211N\177l\312t&SW\350L\201\311te\254\25\330I\21\215\316T\"\370tF\224\f:c\312&\235\231\242Xtf\236\232\224.9\263\302j\t\321\231\235\r\31\274\67\37`5\36D\252[\r?w\216s\25\253\206G\36R" + "\220\361O\241\2\233\310\0\304SH\245\63\237VB\257\67i\177\337\341\323\351l\336f\7B\351\354\244\2\353\177\262\303A\274\310\256\341\332Dg\303q\26\204\244\247\71;\327'\321\331\65\360T\316\356\65\24:\373\251)\320\271\n8T\347\2\202H\347f\212\32\235[\253\352t\356\300$G\354\371L\277E\347\231:9\337\230H\354\237\237\203\274\22\235\377\242eu\352G\372\257\374\250\352E\261\212Y`\215\277\345=XT\213.L\230\354\332\375Mt\241\336\217\67\346BSF\241\317\215\71A\253\320\205ys$\272\260\262T\376\303\354\"eo\330\71\221/\254\257\22Y-\251\26\253\325\351\302nxX\27>\t\230t1\247\306qX\32\71U\371\27+\272\366\320E\177\230E\3\272\31\312\211N\27\303\222A\27\27\66\356\245\213\353\242\314\376\351\204\312\340\222:\322\305\367\330=_\5\f\366\235I\227\262|\226\33\2v^\343P\23]\312oRBti\252$\363<\206=ti\335\6\33\335\347\310\271\1\256\177\253N\227vm0\350\322~\204um\370\362I\315\341t\351\263\261\334\316p\272(X\f\363\305$\223\256g\205,\272^\b\365\226\347\70\240\327kr\233\350\272\232\355\342T\361\301t\\\363\261\321\227\22&\7\250\322\b\204Uh\17\33\33M\0\260\244\"q\343w\255A\303\330\374\322\202\353\v\"\354m}\230\323" + "\230\266\231\243\325K\216p\354\344[\237\63@\343&\357=\341\363\253\323\365w\355\4\354\261\224\206`@g\255\35\6k\355\300\242n\211aQ\17\206\\\203%?\365\241jC\370\215\214\260\27\303\345\206\264\206!\336\371\340\205\61\1o!\300Y0\213\33\71\242A7|\314\213m\37\301\306B7j\355?\372\215\203]\327\31\300\206\204B\264$t\215?s~\217\233\r\266\357\225$\34p\334\66]\222\350\306~\361I\367\366J\f\335Q\205\241?,\304\320_\27\351\324\63\326gPOYu\375\202J\340)\260\200:\177\327\364\324\271\333f$K!\33\346\347\375m\303\234DSQ\r:O\244\236)m\256\71\324\240q\271\366#*\353m\26\177c\r\vl\255@{I\233;@\302`G\205]\313$\230\270=\vg\310\324\263v\222B=\357Mv\226\276\347\263\n\300B,gM\30!\35\f~,\254\360\17\201r\20i\346\7\275\340\327!\352\35\303t8\257\206\36\60t\r\256\21\316\217\200\364VFE\352\255\vk\324\333P\252\263\357:\20\275h\35f\310\265\230\335\302'h\202\204\331\66$\254\f\273\375m(~5X\361\253\311\212_-\24\277\26&\31\316\275k\v\221j\353\335^\317\203?\27!\356\200\363\232\267\323\255\"A4\350VU\330}\f>\325 \24\3\335\262Plqk&\212\262\1I\244\3\222\bw\256\217\231tk\257k9\311x\214t\fKt;+\346.\252\306\271\20\65U+\324XX\373\261\361v\242\66el\252-\350\246D9\6\315\355B\33\341\71f\205\300v\222M\272]\246Zt[\322\22mGMt;dB\17\336\336me" + "\224\276\223\61\17!\375y\b\376\340N\230Bt'\vo\336\235\202\245@\234\325\336\314\310\300\200\220]1\fQj\327\210\bXYJ]\1R[\21\202\234\n\362_(\33YA\356\316\7\"\203\315Iu\344\251\345\260%|\213$6\271a1\251U\27{D\366`<\36\300_\330'\355\37\361T\211fe\211\335*\304\342w\337)\r\33\254\222\317\244;\365\212Ewf\252nv\334\227\30uoXF\314PA\314P\240;\353$\254\353\36\31\353\372\221\242\321\335q\252Nw\353\64\203\356\276\243\243\364\300@\351\201\211\373\321\236\71v\344p-\316p\316H\256\374\222Qe\267\270\4\270\371\243>(\374.^B\f\1x,y\270\366\226\23{\270\273\260U\373\205\274\235\t\247\232g}x\f\270\336\246\337\n$\342\315[\2\241\255\16\22\361fE\331\342\342\306\267\350\370?2\257(\226\331a}\302\344\216\64\266\322\26\376\320\335f\t\v\265^\206\207\21\61\20\266\37E\313Iw\337\227\224\20\335\33/'\245ghl\251t\342s\237@\367\2\266J\367\354\32\221\356\315+\327\330\231\254\323\275UUNz\343\336\246\n\v}\257E\36x`\251\223\334\200z-B\twe\265\3\234#:\24&\325\20\264\247@\375\263\17" + "\363!\347\303\n\355\317\276\1\342M\271\243'8\235\212t\357\33{\317of\257\265\267\375\306gk\34\60H\366\265\203\375\206\371g#\22\367\367\307I\22\335/Ve\370\350N\312B\361\236\236\65\364\261?\353\354/\6\273&\371\361\3AN\345\37\"\333\371*\352\265l\361\317\375YNP\346~M\246\1'$\313\374e\177\266uG\316q\217\70'W\351\345|]\1^R/\344\30:.\215\256<*O\203tL\312\64\r\335\17\344\6\377XKN\323\340R/KS\300\314q\307\24\307\0\60\372\357\207\263\266\241\356\277\0\217\70\255\242\223}\7\1\vC\t\36\306\2\216\231\207\63\v7/c r\326\237\373\335\36:\315\5\26\347G\334\356o\362t.\17j\211\356\277gC\356\207I\210\32oe\345s!\5\71\342\276\216\242U\205\71\4\6\373\336\223\252\245>A\343\334\350\200\236N\246\327\315Y\227\273!o\375\230\215\311\71,zPf\352?gX#v\2\243\31i\313Hw\352\300+M\230s\334j\312\177\27\26\351\360\213\320;\337\340E\272\245&zP\307\32f\37,P\264q,Y0\372dNb\354\346\33j\17\266\271\264\320\364`o\324\240\7_D\222!F\253Yi\220\30\240\207\343\25\211\36NP\345\237Z&)?\265@v" + "\332\373\277/\251q\332E0-\313\372^\204\212\274\350\271\343\17\5MO\275\240\364p\326T\257\226\36\333$%\225\367\334.TNvo{\330\30\361\261\1\244\367\351\341\362HM\7=l\213\210\235\364poD\330\373\27\207\"\245\314\366\32h\210\60\234\334\21\234\34\214\21gLH\243\207_\310:\350M\300PX\316z.\223\215\365\321)\244\235*\"?+4zT,\215\302\272\375\213C\212\7\360\200C(\t\260\225mP\17\202\345Q\35;\f`?=\nV\33@\205\65\221{\263\\,\250@r\b\324\227dV\26H\364hZ\5>\260r|`\f)\26\60{1\0'\351\332w\233%HZf\232\364\250-^\217n4[Ei\302\315\310\16k\254\300\33_\23\224n\343\270\231\34\201\233\1E\314\230\36\35`:$\340\206\34\21\346~\33v\373\263\316V\343\267b\261\304\233S\304\355D~\234\t\215\367\270\0\7\341\343J\303\242\307\206\356>\34k_\36\316\263y)u\27\267\334\245\70`H\304\356\0\216\326\312O\311\t\20+\367\302/\22\266\64\267\312\20\237\276\210O^\303\33\200)\315dSZ\232ey65<\4\60\254\242|\343\227cY\31\251\213p\351\361\332:\225\36\177\350\23\351\311\370rf\241#5\337\205\255\177\335" + "\372\344\232\333h\240\67\267\244\\\340\70\347bR{\234\300\255\332\233\216=6\25\344\251S\360\62\311\tN\246b\356[LOj\303*=\221\27aZ\241\351\32=YfCo\370\fz\262u\251s\273\17\317\346\26\354$\7\200\334\274\346\223C52=\371f\247BO\vv\b\364\264\262\\\245\247\365\225\303'\n=\235\65\334`\367t\r\202\222O\267{\rv\364\264\63\7\1\270g9\271\274\0\334\n\347\304{V-\31\364\254\61\223\251\62\350\f\370\243\317f\212N\374\6\5\35\317V\371M\310\330\233!b\243\372\252\330\356\32\315<\342C\365\30\374\273\347cl\246\33T\30 \225\60@*M\374\326\372\304\7G!\1z\360\274\202E\23\236\317\326\315\64\300q\272\363Y<\337]\364F\232\27L\304\62\62\70\n=\377t\254\227\344\365\230\63\350Efb!p\266\216\t\322\213\342\37\265\323\320\351d\307\265\374&\205i\220/ *\364\"\350j z1\323-:I\2\270@\222@\242\27+\353dfz*\364b\213 \320\213\316\220J/\220E`\257d\373\367;\"e:\275,\250\66zW\331&\275\254\300)\376\62\20\b\"\305\340B\276\24\272l\343\364\262q\311b.\vM\342t\22\223\\\300\235\337\315\215\6v\321\313" + "E\21q7\275\\3m\251B/\267-\25~\353\353j\225^\356\367\213\364\362\v\277F\257r\253@\325\332\204 v\220^\25\27\262\200\201s\213E\257*E\377\331\66\31\343\317\235\203\245Z\262\270\224s\240\247\250\71\203\254\200\354E\22\337\236\326\303V\177eF\265\177\216\304\253\373\270%\365g\215\344\274\205k\207\211\251\325\66\210n%\20\336\n\364jJX\305\67\"~\321N\257fF\252R\342|\313\273y\21\70\207\230\364\316\364h}'\275Z\30\255\333K\257\332\242\5^\245ttBj>\345\26{x\37\275\332\347O\265\217\22s\216w\351\314_\340\61F\316W\224\5\230\367\67xQ^\347\205\265\337h\263uz]Ra\320k\277\317\244\327\241J\213^/\226``\216t\5\70\370\325\231a\250'&\241-\23\22\266gAB{6$\34\310\t\272<\352^z\361\365'80\251/7ol)\267\317\263\17\60\374\324'\372\64\352\223\306\353\324\247Cf\37\353\177\356\213@f\337\f|\362}\363*\313Nw\326\321\277Le#,\215\200\324\71\252!\272\336j\320\277\254\207\35\211\267\311\3\70\27\304\377\247\343\311\332\333\306u\345O\341\323\335\373i\354t\275o\331\223\351\346\23\247\235\357\334\67FBl\36K\244\16I%u\177\375\5@\300r:g^,\0\\Db\7\224V\375\37\375\247\36\325\377\341\377\261:\377{\366\331O}\216O`?\301ci\356\374f[\f\343\337\306\346\">\7\243\203B~1\243>y\332\272\270T\314\312M\31\314\225O`~\237\206\321\334@?\232\277M\276\330\22\355\275/=\230\313P \331\217\260\67\247m\v=$W\300\234%\267\3s\33^]\273\1\354g\b\223\371\22\313\326\207M3\277\2\327\330\5\377\236\360\357\222\177_\233On\n\355\326\236\271\276\307U\346\357\220\315\311\205\375\356\341\331\320\271\355U\357GC\347\26\360\324'\373;\24\276\224\"r\257;\310\323\0f=\215\tr\266'\27\315\361\346\367\b\343\36'\n\274Q\340\265\2o\315\32zh\213}e\327\275\33\266\261\335\301^iW1\347\7" + "\332G\360U|\206dob\34\263\256_(\260T\340]#\300\7\245\274W\312\342\267\312\377\357\220\212oq\343\275\212\344\230\304\254\273\213\305\25\260\177\304\324w|\357\27\24\271\374\71\362>9\273\36\1:\332\351\312e:tzv\251\63\347\373\266\7[\247\360;\4\326\t\326\5\331\371/\6\345%k\337\201]\27\30uJ\211\266lY\303\376zP\205S\322\336\254\242g\rB\375T\220\257\250\b\353\261 \372\316\66\305\276\307\25\226\364\221\325Kh\274\364\210z\276ua\3\366:\305)\324S\257w{{\36\373\230\314E\212\243\260\315\220rY\37\354\205O(I\37\203\371\26~\306\70\230\377\243\237\v\7C\f\366s\354\300\234N%\272\356\37\23\262\322\331{(\311g{\345\1\231~\32\66=\30\65\263\331\374\220d\16$\303$\266(\324\367\365\66\26\363)>\30:,\275\377\262\363%&s6\225\202/\\(\260\64\347\61\24\37&`i\250\30\232\63\327\356\314\35)e\261U\261!\331\306\336\16\243\353!\231\323\64\304\204\3\31\251\353}.0\230O\364\372\200vh\257\247\200SW)\226X\366#\nl\363\n\17\364\354\vZ\307\37\340\306\210Z6\5s\235 \270\16\216\267\377\342p" + "\373A(\364\232\37\300\67\331\340\364/\316\367\364\274\210\323C\17hf)A\217W\214;\22\60?\231\27\367S\nU\264\4\211\\\311\211\\\203K\346\263Cm\355]\2\61-s\1\7\327r\371\17\"\254\222C9\265\300BA1\203+,\32\363\321#KV.\243\t\306\r\n\304\322^x\272Xp\226\37-\263\374\316u\370\26\264N\264K4\177\264\367\353\350z\373\311\7@+I\354k\232\333\34\7\222ok\376\360\t\232U\357\2\213!\305>\233\257#iIF\366\270q\353\333l>\373\234}\17t\261\207\250\357>\357#Ih\335\272\20 \331\313\37\5Rp}\335_\34\"\36+\306L\347l\21\5E/\3\f\373\3\362\317\311\217\60@\230/\216w\300\237\323\252\254\347q\30c\366E\330\301\276\333\222\353\65\247\335\223\v-t\25c\265[C\33\3\336\177/\232\203n\372\61\246\301\361N\247\273\342\341\25z\307\246n2\23\354\362\b>i\310\306\330_\277\341\337\267z\35r\327\b\33\364:n'|`]\343\223\321\324\17\374\373[]\334\320\357\273\272\5\303\357\305\63\335\206'\b%\246=+\317A\203\344\371\302\f*RmA^\304\214yr\5\367)0\220>Y\272%\205\256vgY\345N\331'\230/\360\243\250\276\213\256" + "s\250kV\244\335\346\273\353}\347\n\237\374D\264\21\207\362\226yI\27\63\207\223\262\356\65dQ4\211\203&o\322\234\372\201u}FE\341\217\27`lu\335\303TJ\263~\216\251c\226\\\361\357\r\377^\363\357\255\371<\365\305\343vO\320\233S\224\32L\211\236?\1\37\71\373\342B1\227?FH\205\27\374\256\202Au\347(}uR\37K~\210\203d\253\273\216\314D\362C\354<\211\230\331\\\5D\276\v\313k4>}@\306\63\310~\322~\235J\5n\331\300\23\24\226>:\243)\2\347D\232\222|b\275`UeP\351\352\255dGd\305C\244\200\362{\304\60AJ\371\271^]_\230\0\202]\373\237\224\323!\342\62\64\27\300\0N\362\3\240\fG" + "\263x\301\226\245`\231Q>\3'K\227.\357\315\27r8\275\271!\321\353\262\242\23\375J\201\241@\v#Z\33\344\354\66\240\36\351fB\203\215\276S\234\205X\203bSk\"\255\225\346\332J\324\232/aq\343\24Ym\310\302" + "\207\321\254|\313Q\361\340\22\315\221KE\327\t\310\316\341\234\262\321^S\f\361\66(-U\341\6=I|VWp\1\271\370\300\231\251\215\201Sy\fL\201J\257/\360\314\371\272\356\370\347\251\215=\337N\203\260P\371!\250\362C\222P\262*i_\264\\e\330\363)\345H.;gV\204\203\67J\310\341s" + "\344H<\4\307\342\312\224\251\322\61\347)N\355\26\7\"\17\210\17\232\2\327i\217\244[7\261\317\34\36\22<\371\70\345\71\315\345DtF\205g\213\367\277\341\321\67\202}`\204\r\374\5env\370\237\222\217\325S\231\323R(\243;\316\360\331m \307\71)\326\264\255aDS\267\344B\246\5\262\313|*\312\370\246ZY\274B\337\307Z\234K\232\270\n\311*5\366o\371\20\313\327LD\253z \25\215\217:\240\323W\310\352\311\27\16@\312T\325Zy\257\375\226a\306\230\1\63*\267?N\352)\303\256\t\247:N6m\246\243\216\321\203m\351\206\22'-\255\33y\367],\314)N\245\242+\307w4kf\303\32\231\357\361\264\234.\227\310\fA~n\2\24\337\252\340\71\62\261-hY\255\265\264\224z\\=T}'m^M?\177\366 ,^\307\307\202^\6\64\337\321t\362\333\250\20_\200\255\346\302\273!\6\63WR\357k\235\245k%\264(&\231\70.-S\302<2\371\\\270,nVq\7h4 \25tS\355Y\344\205rtc\235\207\61\277\333\313\304s\327\373\7\66\31\315\35\r\231\245\225\265\213\346\30;y1\266|1\366\32\275\264\357h\211\2K\5N\30\340\71\237\241\363\323\300!Da\216\33\234J\36" + "\201<\203td\352\311f\37|\357\vZ\361>\270\301\27\340\353Q\225%u<;#e\20W\323\23\261\350\366\237\63\274\206BV\243\211\371A\211g\275f- m\300\314\\t\233\253x\17YQi\37\340\342\264h\376L;\371\27\363\226\377b\336k\325Y\362 \254\330w@\311\231\271'\247FB]m]\206E},\253A?pK\366\23F6\\\223p}\266\22\26\357\340\tR\6\63\307\71\n\235s\341GJ\307\271\353\241\244\352\314\267,\245\65\231\20o\255gb\201\16#9\204\255\37\245=|\340\367\331\244M\r^N[\37\243\374\316\263\330S^\227\334#\240\337\365\1\363\204\310\306\367e\332U\321!3\306\275\225\302\231F\356\241\207\61\246\202\231\323\223o\241\321\266G\255\204=\20\254\362=*\340\216\203\247\26\323\65\35k8\301\315\305\tn\360e\217\220\63\373\205J\322\375\264\365:7f\331L9b\\\277\342\364\370\66\260r\250;^(\260\264F.\241\222\227\342p\361\v\276\374\5?1\222\372\350\323\306d\325+i\360\364\217\217\276\235\372\262\327\210\304}\v5j\327C)\263\177\321}\370j\272\305\231+\245\207Grg\254\t\7\355\277\231:\356\231\316\1d\306n9\231\310\65\20" + "\65\367O\374\304\310\227\244\353wN\331\325\263\317 .;\24\337\36H\353\321\265\\\217*\317\232\32\337\345\305\342O5?~A<\260Ny\244\300k\5\226\n\274\61|\322\70\21\227\66\276\270\236s\v&\372pL\223:\223\363\335{\327\n\312\21\207qa\24\347Hl\37\217\217\222]\271\376)\332\332a\313\262\354\270\327t\341)\33\352\375\360\300}K\372l\200V\310\344\246\222Wq\23\225\v\354\240\252J]i$\27];n\377\377\257\304\302\71L\253|I\317\66\220\63\371'\16\211\250\32\277\250\361U\277\67\213U\263\\q$\326X\311\273\v,\233K\364\224!\305d0g\207*g\245\37L\34\361!\273\347\227\ra\35\326\256\351\334K\276\230\332\335\241y\327\\E\252\267\350\354?\374\200\16\234\63\260\\7\245\345\322\67\361\334\5yp\245v_i\344\336\365\34\231O\373\236\374\357\351S\364\235\250\63z\343\201\64\235,\223\363j\204\236{\351/0\314_J*\264FW\326\203\271b\201Ks\25\244\306b\210\257=\23\233\231\70'y\353\66&0g\260\361\201\363V\366\5\330\fN\316\276\225\347{y\276\223\347\7s>\345\230jks]\250a\300\273\64<\234e\326B\236Ky" + "\236\310\363\265<\337\210\243\231\315\366A\303\377g\227\250Hm\260\214:\214\202\353z:y\226z\36R\256\265\r9c.o\356\200\272\343\360|\260@V\354j\341+H\224\64f\312\66\223{E\5\65\65\276g\372\347\344+\205~\262E\242=\363\21\23\311\234\71Y\312\270OF\"\273\222\332\225\60$p=\37\331\t\251~\213\207\17\223\353\325\255}\36\261*\35\266\207\246\221\206J#}+\356l\360\\m\215_\6\24\5H7B\r\200;j\350\222/\340\21Bg\371\33\1\252L\206:\260\260\225\227\177\36\370\253\25\313\277\\!\3/\247\351\230\24\64_S\7)\353\224\227D\276QM*e\2\177\342\32\251;\3\205\354\350\33\302\333\24I\337\271\310=`\342\2k\203\363;l=\312\357E3-\23\317=\347\246\354\310\230\312p.\26e\231\243d\5\277\325\307\242\341\216\36\303\313\246ZQ\305N\270qW\341\327j\324\370\62\351\370\350\207\323\227\b\347\1\\ws\325$&\216j\357\6\22\231\256\340d\202\21\66\324\31\214C\302\370V\345\334\220V\251\260\317\234\357\71R\375\271n\23\n\213\211_]\263\307u\234z\352;\265[\255\"\352'^\251!\211\255bM>h\361{\364\5\361\353\b\1'" + "\305\324\34\374\231\270;f\276\271O\244\33\370\273\201\372\245\364\325\272\200\4\34\263B*\271\\~\362\233$\266\66\32qY:\315\232\212gq\20\327P\4Z\245\343\26\300\r\260;\272\r/q\355\273*\357\324\310)\243\304M\225L\307\204\244D\375\260\205qm\364\365\fv\225\374\340\222\324\310\263\257f\377\312\16\203\335\303\231\v;\252\314\377\343o\334\253\273\374OsC\21\217/\307 \347\231\67\373.9#\255\34\366$Q\242\235\322\244\262\275\201\276\247\222\232y)\341Q/\\+$\275\260\342\"!Qh\226\\\2\373\37\27\360J\345\363\237\334\v\343\217\16\32Q\217\277I\274$iw\255w\271\360%\4\234\311\274J@\272\33\261\333\236n\234\227\306\312\325\324S\216\361\23L\255\340:K\35\323\7@\233\372\23e)\325\16\373\177\30\0\25&A0\v\t\326\32\264E<\334!\223\373\222[\\Zi\331\20\263\30|\335\324\71\332V\25g\242L^4\347\221\5\254\204e#v\4\351\337)\240\245\26f\221\234\320\67\341'\277q%\312(\314\243\370\252{\347{r(\1\322\201\372F\213\342O\34X\270\24\61\322d\26\31\213cVM\344\314g\352\35\271\204\307R\273\62" + "\70P\300^\366\365\333\350i\327\35\340C\353\324\32\311 \277\356j\275\316\272r\17\355\66\370\326S|\312\373\26\335 \262\v\6\237i\27j,L\t\322\374\207\6\372\356F($o\245\325\30]\242\325x\337\b\201\363\275Z\340\323\215\322\341\v\37iB\v\30L\7\232\350\354U\357\66\346[h\331\b\326\377\234\\\2E)\201\21\222\64\67XGkrpp\16\fq\231\226\300\355:.D\240\215\251\313\230bN\310enn\215\305\\G=\27\235h#\376tNJ\241\20&\336N\262Z\315\214\346?\300a\210\365\234A\272\27\273\241\217\201h\7\364\"\271\rw\26\201\372\341>\24\226\f\237\261l\355R\201\5'a\220\70\353\252\336\325%m\337|B\331\261#d\200/+4\316\266\30\24\223S\177\345\311:\340\257\232N\332gdg\365\365\201\377\230\340\223\353\253>\335s\35\273\245:\230k\376-\0[\356\257$>\306\267@U\v{x\363I\241\32\335\276v>T\350~\253\264\373\275\0W\t\366\216\344\303\67Tk\271m\331\354\370qR\261e\305^\33\16L\232\342\336\270\376\221\277`\vy\16\70\254\233\314\371/n\0N\335F\316k\250\16\227\312\247F\227\365\263\33\231)\223\350\362\201-\352\n" + "I\210O\373\332Pi\216\362e>\21i\33\67\323\321}Ps0\356\240j\245\233\372.\305p\304\257\373\64A\210G\204\363\204\66\356\217\247\\\307\336\243\36\210\305\336\322/\16x~O\200\336\240\231\241\214\257\270\b]\374F%\300T \233\345\f\236\314 \v^\253\330{\217r\375\377\302\316t\277m\\\311\342|\24}\271\373M\323\222\354N\367\354N\342t\322\253\177\235m\366\31F\242mN\264]\222J\342~\372\251S\177\240\4\311w\371b\1 E\221 P\313\251Se\26R\30\254%\377\353\232\200\226\315e\243\225I\237\70\37\66\372u/s\323\203&\266DD\374\32\265\313o\332^\210\302PI\202\3\246\260\21\364G\320\261\35\16\237\60H\37z2{=\267:\6\35\312\277\4ye-\351\235\345\234\2pf\355o\205I\33\363\243o\323\265\20\357\201,\307\225\17J\366\315\70\230!Q\334\322D\366\273\226D3\352k\n\340\353\347\267\37\26\273\216\63\260\351\223B\217M\256sb\0\337\356\370\234\67C(T\365\303\373>#N_\360\35\n\256\3\243\336b\20\35\220'o\331n' Y\276\312\307n\215\327\344\212\303\27\306\332\224`3\2\274\372\237Ax\1\0\347$\364\5\356\252" + "\177DH0\213\70B$&\347\267+!\251c\373\350\271\256`\347\206\63\232\316\344$9\237\22\22\266\30GMw\365N\326K\352\4\263\62\375\62\354\204g\373^3\256\353nonJ\310\263\322\206\263\t7\227\330-\t\261\216Fs\35\312\210\0\362\200\265\250\315\62<\262\260\302\60\60\340\362\275\371\324\334\323\375\306\320\202\337l~s\273\245\v\1Q\315\223\310}\322\253\65\243\30\36\371\320\320\351\220\355\276\346}X\16\212\27L\334>\205\244\210\264\224e\236\341\30\205[\372\255E\314\4\256-\207\350_n6\333\275\235\321\307P\306@!\273$&\36\36O}\331\366\322\63\364\22;\206\331\7h>:\256x\262B\356\65\1\346\366v\20\350%\235\232#\210\234\227e\331\344\247\235]\310\367\65\3v\357}\177\217\203q\355\30\255\333\272R\325\f\346;\376\331wx;\324y\200\375d\357\341\323r\362\353\311O\343\235x\211\373\317{{\370\374\234\\7l\226c\230\r6\4\61v\321\36\205{\215\333\222\242\210\310\6v\177m\17a\217\311\201\b\252h\331m\315\16\27\223-\321!\331\250\32A\33\323dO\311Gn\362\305=\250\32\201\215|\306\253N\330\6\7\207" + "\66\276\370t\253\341\317\61\216\221o\357}\343\333g\267\352\26Z\273I\314qZ\t\244\362\224\262p\335\320\340\4v\n\27\261W\241\0\352P\227c\332\250\32D\r\370t\b\325v\272\226y\16n#\20\26\252e'\320\64\250x\263\37\304\30\320\34\345\300\346\64\203M\234\3$\34L8\271\306B\200\265-q\215s/tD\206k\257;S\322x\326\205\357s\245H\204\37\32@09\355\345\32\33L\2\230\270\362\201\245\60I\20{y\252?Q\225\231\17\215\315S\273\32c\332<\352t\24\263\375nc\323h\260^\302\372\17\363\277\375\254\225`qV\246\233~0\2cA\246I\222\340N6\v\274\222\364\71K\237\363\364y\16\0\245mC,4\331^v{l35y\267\71\fF|\266[.\363\242J\35\276\0}\200\3\64\31\6,\316L\344#\212$\203\261\212\261w~.v\205\236\70\24\355\333\246\357$\303\362\267B\t\206rz;>\232\236\5,\374Cw\373\350\207\263\200\213_\215\217\336}\270\210\336\372\321\305\331m\356=y\364zx\237;/\36\375\60\274\257S\347\371M\323\307\5\313\3/t X\210hl\357\313\5~I\304\351w9x\235\306;\206\331+\227\275\211\33V\317\303q\324g\34\320\n\266\67Tl\302\62\260U%" + "\261\260\25\30c\236D\320pd*;\224\220\33\274\27! \374\226\226\250\241\302\351]\364\23.:\200\322\v:\t\312\241\271}f\321BE\323\276,x\204\"\303\213\262:\260H_\355\327B\v\350H\1\332\335h\251\352\312u4\345\332\262\tg|\332\262l6%\271\274\34`:\264et/\331\206\320\35_\212\252\215\343\61\304s\330/\376i\337\n\316\352\34\61\331\201$\226\b\243@\253\330:\337\67;=\336\332\245\5ve\202\330\302]\203/\326q\200\351E:\211v\246\270\314'#\25\330\234\361\b2Ed\340\247d\237\5u&P&!\264\333\233l\24\276\60\343<\317<(\275k\335\32R#A\t\v\207\17-\330\240Ac\253:M\344\223\355h\32\210q\17\36\247\3<\264\267\241\323r\"J\35\236fV\205\212$\260\60\177n\326\372\235\340\366i\316n\361\277\202\24\277\63%|\221\33g\331j\300\67\314\303\217s\343\353\334\230\346\306\34\371\233\r\372\214\337J\273\5_\223CP9\357\364\30\366v\b\260`\36\322\326 \364\35F\351`\220\320\364=\t\27E\361\307\344\252\362WkH\273\"\331;\27\223\372\371\343\352\371\227\365\363\257\252 \356\244\267\225\227\376I\177v\322\237\37\367E\"\350\305\363\225\65\270\262\211\204\236\376Z\231SG\202\250\3\35L\242\241\67y\321\254\350\b?\223Y%l\367\303F\347\310\24\227t\33=\314\231\205\345\322c\263C\25^\215x:\332\f\227\362~\v\336[\266\71\212!\251#\362*k\362*Q~m\342C\375\253\322B\220x\22B\177\234\70\20=iB\310&\341\177\265\353\6\235\224\177\201" + "\303h\273\334&\332\323\266fq;\225\360\233\225lY6\210\365\35\313\67)\226\222\32\252ri\\}l\226\71\350\310\325\24\335h\27\16\224\64\357\355c\364\373C\321\\5\243\23\271Q\240&\2\25\211\70`\327\60fY\270Y\216k\210\307,\251v\221s\226\355\332H=\313#\342g.\23\351\337.\336\f\302\6d\17\7\67\4'\244\316\364\21\272\216\205\262\373\253\224\216a\16\345 `9\345k\342B\205y\322K_\350\f\370MFH \0\352\260+!H\375\360\367\356\254w\n<)z\260\337h!#*\375\16\234\71\242Y\265\215\247\251v\203\262\33!\234eN3z3\0!\240\375\320\336K\254\320\314\337\263\301\17\366\252\260?\324\bl\235\320\"\353\6\326\263\342\207=6\225\7.\277\65\266?P\325\233\235\255\263\305^i{7\rD\224\354\305F\214.\306\202\234\\\216\205+N\204\307d\373\240\247>b\314\327\240\373%\270\317\247\34\372\320g\241\306B{9-\340\223\355DD\35\271y\254[\346*kw3N#w\5\237\203\26SR2U9\315~`\20\367\304\303\331\254A\355\344J\177\354\34\37\36\62}\374d4\22\242\310\25\b6;,R\263*w\355X\\\230\33\251m\36:\317_\375\367\6\371\242\r\34w" + "\205yok\323\70H=\26\311\321\300\306\35\"\340\254\301\226\357j\33L%\35\250\17MN<\344lF\227\271\200&\255\71\340\325\343\344\243\305\24\24\272i\213(\330`HF\353\234o\344z\362\323\257V\357\267\237\\\vH\201!\256\242%\235\60\20\345\340\332nO\304\244\rt\323\314\262}\342\273\265\234!\317\256\201\205=@\25\266\1\16\33\375p\347iF,e\302\254\264E_\240\365\27\64h\315\270~\271-\307M^\335k%\310\22\220 \27\356\324\326\231 \231_\322;%M]\233\31e\223\334l\364\336\351\331\34\v0\356\66\71#\257V\354\320~\345Hh+2\315\7\347\205J\277\33K@F\371\330F\242!\27\311=]#T\211''`Z\277\222\300\217\0\363\313a%\345\250\354\f\4\34\226\207\276\327\16\301\262\231Fk\206M\224en\374\200\371w\343\201\267\202\63\70=\35\230\235\16\314O\7\316E\332\357\26\36\r\234\26\355\231\355\\\324>\262D\b\205B\274\254\202d\32\20C\304\20\237Da\n\33\330j\240\250OA\24\314\305\34\60\366\241P\6\366m\364I6-r\267\242\253\353gO\204\264\60\377\226S\241\227-\362\271\310S\250\201\272z\23fcl\355i\35\t\226a(m7*8P\7\\|J\255\305\274\306\37@\366\323\316v\301\376\275}k?\372\336\302[\205\263\311\206\223\321\37\71,\212`\344\24\210\234\22\64\66F\177\r\204\316\243\270C9p\275R\277_\330W\230{\201m\265\254\f!mLQ\327\347\360\232\211\372mg\23I\30\5\23\247&!_)\221$\ng\374\240\r\367\61\211c[\351\306\23\202Yk\233m\321Bg\226\301\32\26J\214\350Q\315\t\275\267\35>\302p\343\26\362\304\302P<\0\212" + "\302r$\262\215\213$~zF\\:\3s;\210!\373]\16\323A\206\231$hua\322\363\371<\275\373\b\17\22\36\213uCt\324(\36\236R1p3A\355\217\362\35\224\250\270jr\177&98\f\332:\37\356\363\340\264.:\363\362\310\254>|\325\266K{K\366\247\313\35{\242\25\261\33o*\f\221\234\345~\273dQ\302^tgA\0\226\67\"A\242\261Ud +,~v\242\"\255nT\255\33\227\226\261\21\62|\310\"TO\t\206@\333\332P4%kia\36\370\67\241*\253\313w\325\17\375\325}\b\350\355h\210sa]r\240z\272\333c\205fvL\262\270\4\357\336\36r!B\215\344]\321V\366\16\204~7{\200\365\277\317\374\357\25\325c\262>\222}+\241\340iY\223\31\37\323\t?\232wy}\324;\252r\266\337UX8\36(}\277\375\\\340\6!\\\16\262 \342k\362<\21\340\331\244\322\60\214\267oL%J\220\370\210\70\37\202\345\377\326\71\325\303s\0\207Hn\254\371\231\277t\230\230\25\6`\250\276\330\262\303(\326\370\233G\202\v2}\204\350@\bX\321!\205\316\34\217\300\303\211\354\266G\221\361\346\370\242\234\347~$\335\327-\205\260\332\343\355d#'\354\33\330\230\244\304P\367\201\66\61\332\27\333\265}+\307p\207\312\23p\274\242E\f\345D\264d\177\17\70\"\26\357\272\211\310\32\222-\251\233#\326b\20\62\262\67\66n3\243\205o\221\230o\4\25Cy\326-\216)\20\325\233\35\237er$:1\226\211\222\222\264\23\70'6\6\70\247\223\f\300\66\270\203\323zd\247\216Gd\240\375\334\335\254\62\324\356\310\61\352(RQe3\202@\225\\W\266?\0'\315\347[\7\225\230\30,\366\276\362[\271\352\355\35\270\31\374~\273\316\201\257\320\271t\3\366\274i" + "\205\216_\r\v\267\264\236\20\323i\25\32\350\336\vB\227rfK\22\221\316$\6yXc7\202\277\244]v\265Y\226\b]\24*\363A\316\1\377*Nz\35\32\315nF<\\Y\340\312\266\243%\211E\313\226\255\325\70\244\215`\232\344\362\"xTXQF\356\316x)\224\"\3\234s]\237\224@x+\337\302dZ\352\216w+\245\307G\254W\253`\244\7:\210\325\37)\35/\316\316\354j\367\226u`\235\251z\332\0\211\25eC\217/\316\f\33m\333_Z\353\314\316\354\70p\231zv\310\23\224\335M\260\201\271\r0\27\326\266Sk[p\242UoF~\350L$\233ve\235s\35\65\270X\277y\246\3/o\254h\344\206\305\236A\265\320\212\61r\304\276-\217\240)%^\304\4o\224\236F\317&\212\206\361\212h\274\356\273\1\352\21P\277-\304p`\31\270<\351\27\363\250\34\210\61\352!\376z\36\226Tp\236j\314\315\b\305\211\277j\252" + "\227RJ\331\220\317\re=\336\355\373aL\30[\263[\244\62\202\0\367\201\325*\247d>\371^\370Tq\\\303z\36\v\310\261z\270\33\354\351\360\343\323b\215\232}5`\344\21\225\271X\33*^'\214\204\364\337Wk\221<\302\347-\372\330>:\235#j0\224\203\31\t\16\62>\26\212\201\230\202\326@\323\365\211\337\340dt\217\301/\344\343\262\316\231\235\253\233\33U\260\303\265\310f\221%2\244\224b\27UjE\240\nF,\363\317\62\234\71\177\61J\203\20\274=T%\334\64\267}\343<\212\325\275\313\350O\333\265\275?\221\252\7\325\60]\306\241aa'\312\30l|\\\26\377\222`\f\315\262\372\7S\4\331Ug<\34-N~\322\335\26\247\326'cE\231N\264O^zJ\235\310\341\274\204\5\200\326&\246T\355\0\17\235<\237\351\310\353\336N\v\356H\"\327\374\274\207\336>\267\226\32\203<\26\237\245\241\272x8\226\331\237\362f5\340\254\7\222v'\257\304j\223\226\201\250\354\340A\374\\\4\206:[5\312,\217\b\233\363\277\355\333\231i\221\r YL\274\222R>G&\323J\217\177\203\336\22'3h\236I\1\6M\324\330\236\366\327l\230\35\270\265n\314\"\333\366" + "\215\324\177\255\rz\271\22M\321\v6\254\266\322\32\22#;\21\250\305\330x\347\276\225\30\262\f\310|\\\t\351R\365D\r\r\25\245\323\4Es\212\0\346\5\31\32\b]<_\b\201\220\333\265\67]|\275\34\66\"\16\242\263\301\320i\3\323\3V2-\32@\305\16A\207\374\261\335\217\206k\330]\336c9<\357>\353\332\354\67\67\361\366k?\227JTX:l|\225\361\f\302\61)\342\32\n\331An\261\177\343^v\b\375\304\270\310\206\"\4R\0\237\262\37\250Oy\302\321\b\202\v\272\27\315\372\250\212\323\253\275\334\25\25\253Kv4\231\341\232\377\262_\340\253\23'n\331\224nW\256+F[*9QODJ\211N\32IL\16\356\232\211\271\226\231\17O\354\62\362\2\257$\f\367;\364M\304\277\322'\331A\200!1[Jub\357\322\214\240\355\201\211B\267\344\215\36\215\304\67\62\251%\315\70%\4\340S\260\0\2\364\360\230\377~\343\264\370*\1J\257:\337\211\261\314(\31\225S(#\260\244\325\223\3p\322S\303\264\366\217\71\275\31@\231\266\\\322Ko6;\225\344\326\222D\226\302=\20\71\212\320\374o\274\4\265\215GYE\325x3\270\262\372Q\t\265\357\327\223\300\320" + "RJ8s\223{z\356\262j\312\304\67dO\25I\310K\325I\30t\337\247zm\223\222v\227\306\60\321\342\fO\206\215\234c\16F/\16\246\252gu\221hm\2o\273\300\227\374\246\353\227aHy\236\303\255\242\5 \240]\373\261\261Pr\1\271x\304\37\f\242\3\275\304s \272\37\224|\n\206A+\312\2\354H\232\225\302.J\235\26\335\243,Z\n\354\275m\207\241\215u\360\275V" + "\33\307\245\71\362\374BcX69`5\22>c\346be\320S\240\213\222\225/\266\303J[\210w\341\240\335\260\215\324\255m_0\227\63\311B\367\247\374\266i\322T\261u\251\70g\7\260R\241\214\220\23F\233a\34\374\323\253\315\352\277x\265\327\375\235\355f\325\1\305F\261\347\242\301\65\36r%\364\243\266\16o\217\335\366\352P\262'\370\254\241\375\362W\225.\30\371\253\342by\20\4\217C\324\365-\n\212\"B\230\332\271T\234\226\234\227\326\215\212\23\342\314\61w\254\307\37\22V\362}b\323\360\361}&\\f\30$\177r\370\355\205bw\37\275\224f\17\35\367\355\227f;\362O\4D\vx\373X\1d\t\34\5F\253\177\377e\314p\247G\372\364Ma\200\261\226M\30F00\6\vdt)\207\\n>\364\337\372\250\270 \366\262\70\306\372\301\214l\345\341\253\365.\17I\316m\275f\255X\225\61\317:Zr\306\t\350\333\0\225\326/\7\313\307\226y\305'$\223\232D\262\254\246\376\255\201\262^\253\301v\t\312\305\305\241\371\370\320\374\62\232F\\\267lM\332\207\301\351\241\71;4\347\207\346\371\241\371u\375\332\363\273\366\346\235\365\305%\242" + "\262_\326t\220\341\17\5\67\276\333\375\317cw,\255\361\365\357 q>\340\7\226\5\326+\345\350\330\67\225\f\362\212\n\256\341\23\60\253\223\224\364\250\304jw>J\331qB\260Gb\16G\24\231\350\275\370\342\352\213\313/^\177\21H\245\377\323\202}/6e\277(Q\315\b'\266\343'\257\352\323t`\226\"X5\237\377\f\33\7\314w%\345\350\16L\250\365\7\200)\6\226\36W\251*PvTI\342#\6\207\200\346T\271\252&2\24\307\264\371\213\303\325I\t\363\250\23\22\211m0*\"\255\271\206\334\20\273\0\204@\270t0\23\3\315\265Q\267\374\365L=\254D\307\227\327<\6\3%_^~t|\213\201\30q\305Q\244\243\305C\200\71\220\251r\312\214\343\275\23\211\216`\272s\274\266=\242\227\7M'F\n\365\220T^h\253\353\224\246\27\333\222\371\71\244\254\311L\356O\177^\337\306k\311(\374\344\267\376_\204~W\f\340\f\333P\252\345\230+\246\311\320\350;\221+eD\244B,\323\243\336LDX{\255\305\377y`\343\255U\32\370\344\253\27G\275y]\366\316\213\332W!\272\210\355\344\7\246\34G\231>\364E\266\305\236\66\224}A[\320<1\257Nh\331\231\365\300\177}\230\362\61\347c\306\207\335R\344=3rQ\373\307cz\361\37\70\242\356\270\265\331\210\223\227&\244\266\212RS\30\334d\b\21\313\4&\215@\250\225\377y\272/\354Mudn\262J,\243m\351wq\23Cej]- R\373\374\355\242\367\224\324\347\275\215\306\305\352\30\212K\342\270\264\61-\221\241n\276}\267\250\363|\306\236-Js\307\323\346\344\376\254\20\363\224\222#O\360\0\364\213\240\210r\210<\231\310L+l\350\343S/\253'\325S\313\244{Z=9M\346\17&%\"\307T\1\r\213$\21,\320\20\255bL,b\316S\213M\226\337\367" + "\204\362\271=\267\231\332\334\232\b\330L\376M\16\206\37`\351\227\31JEu\350\241\254j\222\365>~\307\265\303\30\244\b\373\312\v\236\36\262w\362\66efG\345R\350\277\t'\327[\27gON\231\267\203\215\350N\314m\200\227\307D=\347~QDH'\215wT\20\352\354-\355\227\71\312\67\304\2\24Q\31,\206\246!r\355\311\277{\320%\0\61\245hPC\234!\271\242\37\267G\327`\252\23\70\201\216\v{DoR!\333\275\343\242|\355\220\203\321\354\272\345\311`9\35y\3\374l\24\204\240\221\27\1\211\331\63eCP9r\325e\302\303+\250\345\5A\"<\247\207\337C\261\5J\377\316\32\5\242\300\265~M\274\257\ff\227\272\377\17", + 31756, + 73397, + 42574, }, }; diff --git a/keyb2joypad.h b/keyb2joypad.h index 59b4033f4..6ba7dcb69 100644 --- a/keyb2joypad.h +++ b/keyb2joypad.h @@ -13,6 +13,6 @@ struct MAPBucket Bit32u mappings_action_offset; }; -enum { MAP_TABLE_SIZE = 4096, MAP_BUCKETS = 4 }; +enum { MAP_TABLE_SIZE = 4240, MAP_BUCKETS = 4 }; extern const Bit32u map_keys[MAP_TABLE_SIZE]; extern const MAPBucket map_buckets[MAP_BUCKETS]; diff --git a/libretro-common/include/libretro.h b/libretro-common/include/libretro.h index 8a5da8648..3873e6a80 100644 --- a/libretro-common/include/libretro.h +++ b/libretro-common/include/libretro.h @@ -1131,6 +1131,13 @@ enum retro_mod * retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. * This allows the core to additionally set option sublabel information * and/or provide localisation support. + * + * If version is >= 2, core options may instead be set by passing + * a retro_core_options_v2 struct to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + * or an array of retro_core_options_v2 structs to + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL. This allows the core + * to additionally set optional core option category information + * for frontends with core option category support. */ #define RETRO_ENVIRONMENT_SET_CORE_OPTIONS 53 @@ -1172,7 +1179,7 @@ enum retro_mod * default value is NULL, the first entry in the * retro_core_option_definition::values array is treated as the default. * - * The number of possible options should be very limited, + * The number of possible option values should be very limited, * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. * i.e. it should be feasible to cycle through options * without a keyboard. @@ -1205,6 +1212,7 @@ enum retro_mod * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION * returns an API version of >= 1. * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. * This should be called the first time as early as * possible (ideally in retro_set_environment). * Afterwards it may be called again for the core to communicate @@ -1378,6 +1386,373 @@ enum retro_mod * call will target the newly initialized driver. */ +#define RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 + /* const struct retro_fastforwarding_override * -- + * Used by a libretro core to override the current + * fastforwarding mode of the frontend. + * If NULL is passed to this function, the frontend + * will return true if fastforwarding override + * functionality is supported (no change in + * fastforwarding state will occur in this case). + */ + +#define RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE 65 + /* const struct retro_system_content_info_override * -- + * Allows an implementation to override 'global' content + * info parameters reported by retro_get_system_info(). + * Overrides also affect subsystem content info parameters + * set via RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO. + * This function must be called inside retro_set_environment(). + * If callback returns false, content info overrides + * are unsupported by the frontend, and will be ignored. + * If callback returns true, extended game info may be + * retrieved by calling RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * in retro_load_game() or retro_load_game_special(). + * + * 'data' points to an array of retro_system_content_info_override + * structs terminated by a { NULL, false, false } element. + * If 'data' is NULL, no changes will be made to the frontend; + * a core may therefore pass NULL in order to test whether + * the RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE and + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callbacks are supported + * by the frontend. + * + * For struct member descriptions, see the definition of + * struct retro_system_content_info_override. + * + * Example: + * + * - struct retro_system_info: + * { + * "My Core", // library_name + * "v1.0", // library_version + * "m3u|md|cue|iso|chd|sms|gg|sg", // valid_extensions + * true, // need_fullpath + * false // block_extract + * } + * + * - Array of struct retro_system_content_info_override: + * { + * { + * "md|sms|gg", // extensions + * false, // need_fullpath + * true // persistent_data + * }, + * { + * "sg", // extensions + * false, // need_fullpath + * false // persistent_data + * }, + * { NULL, false, false } + * } + * + * Result: + * - Files of type m3u, cue, iso, chd will not be + * loaded by the frontend. Frontend will pass a + * valid path to the core, and core will handle + * loading internally + * - Files of type md, sms, gg will be loaded by + * the frontend. A valid memory buffer will be + * passed to the core. This memory buffer will + * remain valid until retro_deinit() returns + * - Files of type sg will be loaded by the frontend. + * A valid memory buffer will be passed to the core. + * This memory buffer will remain valid until + * retro_load_game() (or retro_load_game_special()) + * returns + * + * NOTE: If an extension is listed multiple times in + * an array of retro_system_content_info_override + * structs, only the first instance will be registered + */ + +#define RETRO_ENVIRONMENT_GET_GAME_INFO_EXT 66 + /* const struct retro_game_info_ext ** -- + * Allows an implementation to fetch extended game + * information, providing additional content path + * and memory buffer status details. + * This function may only be called inside + * retro_load_game() or retro_load_game_special(). + * If callback returns false, extended game information + * is unsupported by the frontend. In this case, only + * regular retro_game_info will be available. + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT is guaranteed + * to return true if RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * returns true. + * + * 'data' points to an array of retro_game_info_ext structs. + * + * For struct member descriptions, see the definition of + * struct retro_game_info_ext. + * + * - If function is called inside retro_load_game(), + * the retro_game_info_ext array is guaranteed to + * have a size of 1 - i.e. the returned pointer may + * be used to access directly the members of the + * first retro_game_info_ext struct, for example: + * + * struct retro_game_info_ext *game_info_ext; + * if (environ_cb(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &game_info_ext)) + * printf("Content Directory: %s\n", game_info_ext->dir); + * + * - If the function is called inside retro_load_game_special(), + * the retro_game_info_ext array is guaranteed to have a + * size equal to the num_info argument passed to + * retro_load_game_special() + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 67 + /* const struct retro_core_options_v2 * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * 'data' points to a retro_core_options_v2 struct, containing + * of two pointers: + * - retro_core_options_v2::categories is an array of + * retro_core_option_v2_category structs terminated by a + * { NULL, NULL, NULL } element. If retro_core_options_v2::categories + * is NULL, all core options will have no category and will be shown + * at the top level of the frontend core option interface. If frontend + * does not have core option category support, categories array will + * be ignored. + * - retro_core_options_v2::definitions is an array of + * retro_core_option_v2_definition structs terminated by a + * { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL } + * element. + * + * >> retro_core_option_v2_category notes: + * + * - retro_core_option_v2_category::key should contain string + * that uniquely identifies the core option category. Valid + * key characters are [a-z, A-Z, 0-9, _, -] + * Namespace collisions with other implementations' category + * keys are permitted. + * - retro_core_option_v2_category::desc should contain a human + * readable description of the category key. + * - retro_core_option_v2_category::info should contain any + * additional human readable information text that a typical + * user may need to understand the nature of the core option + * category. + * + * Example entry: + * { + * "advanced_settings", + * "Advanced", + * "Options affecting low-level emulation performance and accuracy." + * } + * + * >> retro_core_option_v2_definition notes: + * + * - retro_core_option_v2_definition::key should be namespaced to not + * collide with other implementations' keys. e.g. A core called + * 'foo' should use keys named as 'foo_option'. Valid key characters + * are [a-z, A-Z, 0-9, _, -]. + * - retro_core_option_v2_definition::desc should contain a human readable + * description of the key. Will be used when the frontend does not + * have core option category support. Examples: "Aspect Ratio" or + * "Video > Aspect Ratio". + * - retro_core_option_v2_definition::desc_categorized should contain a + * human readable description of the key, which will be used when + * frontend has core option category support. Example: "Aspect Ratio", + * where associated retro_core_option_v2_category::desc is "Video". + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::desc will be used instead. + * retro_core_option_v2_definition::desc_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::info should contain any additional + * human readable information text that a typical user may need to + * understand the functionality of the option. + * - retro_core_option_v2_definition::info_categorized should contain + * any additional human readable information text that a typical user + * may need to understand the functionality of the option, and will be + * used when frontend has core option category support. This is provided + * to accommodate the case where info text references an option by + * name/desc, and the desc/desc_categorized text for that option differ. + * If empty or NULL, the string specified by + * retro_core_option_v2_definition::info will be used instead. + * retro_core_option_v2_definition::info_categorized will be ignored + * if retro_core_option_v2_definition::category_key is empty or NULL. + * - retro_core_option_v2_definition::category_key should contain a + * category identifier (e.g. "video" or "audio") that will be + * assigned to the core option if frontend has core option category + * support. A categorized option will be shown in a subsection/ + * submenu of the frontend core option interface. If key is empty + * or NULL, or if key does not match one of the + * retro_core_option_v2_category::key values in the associated + * retro_core_option_v2_category array, option will have no category + * and will be shown at the top level of the frontend core option + * interface. + * - retro_core_option_v2_definition::values is an array of + * retro_core_option_value structs terminated by a { NULL, NULL } + * element. + * --> retro_core_option_v2_definition::values[index].value is an + * expected option value. + * --> retro_core_option_v2_definition::values[index].label is a + * human readable label used when displaying the value on screen. + * If NULL, the value itself is used. + * - retro_core_option_v2_definition::default_value is the default + * core option setting. It must match one of the expected option + * values in the retro_core_option_v2_definition::values array. If + * it does not, or the default value is NULL, the first entry in the + * retro_core_option_v2_definition::values array is treated as the + * default. + * + * The number of possible option values should be very limited, + * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * Example entries: + * + * - Uncategorized: + * + * { + * "foo_option", + * "Speed hack coprocessor X", + * NULL, + * "Provides increased performance at the expense of reduced accuracy.", + * NULL, + * NULL, + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * - Categorized: + * + * { + * "foo_option", + * "Advanced > Speed hack coprocessor X", + * "Speed hack coprocessor X", + * "Setting 'Advanced > Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "Setting 'Speed hack coprocessor X' to 'true' or 'Turbo' provides increased performance at the expense of reduced accuracy", + * "advanced_settings", + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL 68 + /* const struct retro_core_options_v2_intl * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 2. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. + * This should be called instead of RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * If RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION returns an API + * version of >= 2, this callback is guaranteed to succeed + * (i.e. callback return value does not indicate success) + * If callback returns true, frontend has core option category + * support. + * If callback returns false, frontend does not have core option + * category support. + * + * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2, + * with the addition of localisation support. The description of the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 callback should be consulted + * for further details. + * + * 'data' points to a retro_core_options_v2_intl struct. + * + * - retro_core_options_v2_intl::us is a pointer to a + * retro_core_options_v2 struct defining the US English + * core options implementation. It must point to a valid struct. + * + * - retro_core_options_v2_intl::local is a pointer to a + * retro_core_options_v2 struct defining core options for + * the current frontend language. It may be NULL (in which case + * retro_core_options_v2_intl::us is used by the frontend). Any items + * missing from this struct will be read from + * retro_core_options_v2_intl::us instead. + * + * NOTE: Default core option values are always taken from the + * retro_core_options_v2_intl::us struct. Any default values in + * the retro_core_options_v2_intl::local struct will be ignored. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK 69 + /* const struct retro_core_options_update_display_callback * -- + * Allows a frontend to signal that a core must update + * the visibility of any dynamically hidden core options, + * and enables the frontend to detect visibility changes. + * Used by the frontend to update the menu display status + * of core options without requiring a call of retro_run(). + * Must be called in retro_set_environment(). + */ + +#define RETRO_ENVIRONMENT_SET_VARIABLE 70 + /* const struct retro_variable * -- + * Allows an implementation to notify the frontend + * that a core option value has changed. + * + * retro_variable::key and retro_variable::value + * must match strings that have been set previously + * via one of the following: + * + * - RETRO_ENVIRONMENT_SET_VARIABLES + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 + * - RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL + * + * After changing a core option value via this + * callback, RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE + * will return true. + * + * If data is NULL, no changes will be registered + * and the callback will return true; an + * implementation may therefore pass NULL in order + * to test whether the callback is supported. + */ + +#define RETRO_ENVIRONMENT_GET_THROTTLE_STATE (71 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_throttle_state * -- + * Allows an implementation to get details on the actual rate + * the frontend is attempting to call retro_run(). + */ + /* VFS functionality */ /* File paths: @@ -2781,6 +3156,213 @@ struct retro_system_info bool block_extract; }; +/* Defines overrides which modify frontend handling of + * specific content file types. + * An array of retro_system_content_info_override is + * passed to RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * NOTE: In the following descriptions, references to + * retro_load_game() may be replaced with + * retro_load_game_special() */ +struct retro_system_content_info_override +{ + /* A list of file extensions for which the override + * should apply, delimited by a 'pipe' character + * (e.g. "md|sms|gg") + * Permitted file extensions are limited to those + * included in retro_system_info::valid_extensions + * and/or retro_subsystem_rom_info::valid_extensions */ + const char *extensions; + + /* Overrides the need_fullpath value set in + * retro_system_info and/or retro_subsystem_rom_info. + * To reiterate: + * + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info::path is guaranteed to contain a valid + * path to an existent file + * - retro_game_info::data and retro_game_info::size are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - retro_game_info::path may be NULL + * - retro_game_info::data and retro_game_info::size are guaranteed + * to be valid + * + * In addition: + * + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info_ext::full_path is guaranteed to contain a valid + * path to an existent file + * - retro_game_info_ext::archive_path may be NULL + * - retro_game_info_ext::archive_file may be NULL + * - retro_game_info_ext::dir is guaranteed to contain a valid path + * to the directory in which the content file exists + * - retro_game_info_ext::name is guaranteed to contain the + * basename of the content file, without extension + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file in lower case format + * - retro_game_info_ext::data and retro_game_info_ext::size + * are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - If retro_game_info_ext::file_in_archive is false: + * - retro_game_info_ext::full_path is guaranteed to contain + * a valid path to an existent file + * - retro_game_info_ext::archive_path may be NULL + * - retro_game_info_ext::archive_file may be NULL + * - retro_game_info_ext::dir is guaranteed to contain a + * valid path to the directory in which the content file exists + * - retro_game_info_ext::name is guaranteed to contain the + * basename of the content file, without extension + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file in lower case format + * - If retro_game_info_ext::file_in_archive is true: + * - retro_game_info_ext::full_path may be NULL + * - retro_game_info_ext::archive_path is guaranteed to + * contain a valid path to an existent compressed file + * inside which the content file is located + * - retro_game_info_ext::archive_file is guaranteed to + * contain a valid path to an existent content file + * inside the compressed file referred to by + * retro_game_info_ext::archive_path + * e.g. for a compressed file '/path/to/foo.zip' + * containing 'bar.sfc' + * > retro_game_info_ext::archive_path will be '/path/to/foo.zip' + * > retro_game_info_ext::archive_file will be 'bar.sfc' + * - retro_game_info_ext::dir is guaranteed to contain a + * valid path to the directory in which the compressed file + * (containing the content file) exists + * - retro_game_info_ext::name is guaranteed to contain + * EITHER + * 1) the basename of the compressed file (containing + * the content file), without extension + * OR + * 2) the basename of the content file inside the + * compressed file, without extension + * In either case, a core should consider 'name' to + * be the canonical name/ID of the the content file + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file inside the compressed file, + * in lower case format + * - retro_game_info_ext::data and retro_game_info_ext::size are + * guaranteed to be valid */ + bool need_fullpath; + + /* If need_fullpath is false, specifies whether the content + * data buffer available in retro_load_game() is 'persistent' + * + * If persistent_data is false and retro_load_game() is called: + * - retro_game_info::data and retro_game_info::size + * are valid only until retro_load_game() returns + * - retro_game_info_ext::data and retro_game_info_ext::size + * are valid only until retro_load_game() returns + * + * If persistent_data is true and retro_load_game() is called: + * - retro_game_info::data and retro_game_info::size + * are valid until retro_deinit() returns + * - retro_game_info_ext::data and retro_game_info_ext::size + * are valid until retro_deinit() returns */ + bool persistent_data; +}; + +/* Similar to retro_game_info, but provides extended + * information about the source content file and + * game memory buffer status. + * And array of retro_game_info_ext is returned by + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * NOTE: In the following descriptions, references to + * retro_load_game() may be replaced with + * retro_load_game_special() */ +struct retro_game_info_ext +{ + /* - If file_in_archive is false, contains a valid + * path to an existent content file (UTF-8 encoded) + * - If file_in_archive is true, may be NULL */ + const char *full_path; + + /* - If file_in_archive is false, may be NULL + * - If file_in_archive is true, contains a valid path + * to an existent compressed file inside which the + * content file is located (UTF-8 encoded) */ + const char *archive_path; + + /* - If file_in_archive is false, may be NULL + * - If file_in_archive is true, contain a valid path + * to an existent content file inside the compressed + * file referred to by archive_path (UTF-8 encoded) + * e.g. for a compressed file '/path/to/foo.zip' + * containing 'bar.sfc' + * > archive_path will be '/path/to/foo.zip' + * > archive_file will be 'bar.sfc' */ + const char *archive_file; + + /* - If file_in_archive is false, contains a valid path + * to the directory in which the content file exists + * (UTF-8 encoded) + * - If file_in_archive is true, contains a valid path + * to the directory in which the compressed file + * (containing the content file) exists (UTF-8 encoded) */ + const char *dir; + + /* Contains the canonical name/ID of the content file + * (UTF-8 encoded). Intended for use when identifying + * 'complementary' content named after the loaded file - + * i.e. companion data of a different format (a CD image + * required by a ROM), texture packs, internally handled + * save files, etc. + * - If file_in_archive is false, contains the basename + * of the content file, without extension + * - If file_in_archive is true, then string is + * implementation specific. A frontend may choose to + * set a name value of: + * EITHER + * 1) the basename of the compressed file (containing + * the content file), without extension + * OR + * 2) the basename of the content file inside the + * compressed file, without extension + * RetroArch sets the 'name' value according to (1). + * A frontend that supports routine loading of + * content from archives containing multiple unrelated + * content files may set the 'name' value according + * to (2). */ + const char *name; + + /* - If file_in_archive is false, contains the extension + * of the content file in lower case format + * - If file_in_archive is true, contains the extension + * of the content file inside the compressed file, + * in lower case format */ + const char *ext; + + /* String of implementation specific meta-data. */ + const char *meta; + + /* Memory buffer of loaded game content. Will be NULL: + * IF + * - retro_system_info::need_fullpath is true and + * retro_system_content_info_override::need_fullpath + * is unset + * OR + * - retro_system_content_info_override::need_fullpath + * is true */ + const void *data; + + /* Size of game content memory buffer, in bytes */ + size_t size; + + /* True if loaded content file is inside a compressed + * archive */ + bool file_in_archive; + + /* - If data is NULL, value is unset/ignored + * - If data is non-NULL: + * - If persistent_data is false, data and size are + * valid only until retro_load_game() returns + * - If persistent_data is true, data and size are + * are valid until retro_deinit() returns */ + bool persistent_data; +}; + struct retro_game_geometry { unsigned base_width; /* Nominal video width of game. */ @@ -2892,6 +3474,143 @@ struct retro_core_options_intl struct retro_core_option_definition *local; }; +struct retro_core_option_v2_category +{ + /* Variable uniquely identifying the + * option category. Valid key characters + * are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable category description + * > Used as category menu label when + * frontend has core option category + * support */ + const char *desc; + + /* Human-readable category information + * > Used as category menu sublabel when + * frontend has core option category + * support + * > Optional (may be NULL or an empty + * string) */ + const char *info; +}; + +struct retro_core_option_v2_definition +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. + * Valid key characters are [a-z, A-Z, 0-9, _, -] */ + const char *key; + + /* Human-readable core option description + * > Used as menu label when frontend does + * not have core option category support + * e.g. "Video > Aspect Ratio" */ + const char *desc; + + /* Human-readable core option description + * > Used as menu label when frontend has + * core option category support + * e.g. "Aspect Ratio", where associated + * retro_core_option_v2_category::desc + * is "Video" + * > If empty or NULL, the string specified by + * desc will be used as the menu label + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *desc_categorized; + + /* Human-readable core option information + * > Used as menu sublabel */ + const char *info; + + /* Human-readable core option information + * > Used as menu sublabel when frontend + * has core option category support + * (e.g. may be required when info text + * references an option by name/desc, + * and the desc/desc_categorized text + * for that option differ) + * > If empty or NULL, the string specified by + * info will be used as the menu sublabel + * > Will be ignored (and may be set to NULL) + * if category_key is empty or NULL */ + const char *info_categorized; + + /* Variable specifying category (e.g. "video", + * "audio") that will be assigned to the option + * if frontend has core option category support. + * > Categorized options will be displayed in a + * subsection/submenu of the frontend core + * option interface + * > Specified string must match one of the + * retro_core_option_v2_category::key values + * in the associated retro_core_option_v2_category + * array; If no match is not found, specified + * string will be considered as NULL + * > If specified string is empty or NULL, option will + * have no category and will be shown at the top + * level of the frontend core option interface */ + const char *category_key; + + /* Array of retro_core_option_value structs, terminated by NULL */ + struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; + + /* Default core option value. Must match one of the values + * in the retro_core_option_value array, otherwise will be + * ignored */ + const char *default_value; +}; + +struct retro_core_options_v2 +{ + /* Array of retro_core_option_v2_category structs, + * terminated by NULL + * > If NULL, all entries in definitions array + * will have no category and will be shown at + * the top level of the frontend core option + * interface + * > Will be ignored if frontend does not have + * core option category support */ + struct retro_core_option_v2_category *categories; + + /* Array of retro_core_option_v2_definition structs, + * terminated by NULL */ + struct retro_core_option_v2_definition *definitions; +}; + +struct retro_core_options_v2_intl +{ + /* Pointer to a retro_core_options_v2 struct + * > US English implementation + * > Must point to a valid struct */ + struct retro_core_options_v2 *us; + + /* Pointer to a retro_core_options_v2 struct + * - Implementation for current frontend language + * - May be NULL */ + struct retro_core_options_v2 *local; +}; + +/* Used by the frontend to monitor changes in core option + * visibility. May be called each time any core option + * value is set via the frontend. + * - On each invocation, the core must update the visibility + * of any dynamically hidden options using the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY environment + * callback. + * - On the first invocation, returns 'true' if the visibility + * of any core option has changed since the last call of + * retro_load_game() or retro_load_game_special(). + * - On each subsequent invocation, returns 'true' if the + * visibility of any core option has changed since the last + * time the function was called. */ +typedef bool (RETRO_CALLCONV *retro_core_options_update_display_callback_t)(void); +struct retro_core_options_update_display_callback +{ + retro_core_options_update_display_callback_t callback; +}; + struct retro_game_info { const char *path; /* Path to game, UTF-8 encoded. @@ -2938,6 +3657,84 @@ struct retro_framebuffer Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ }; +/* Used by a libretro core to override the current + * fastforwarding mode of the frontend */ +struct retro_fastforwarding_override +{ + /* Specifies the runtime speed multiplier that + * will be applied when 'fastforward' is true. + * For example, a value of 5.0 when running 60 FPS + * content will cap the fast-forward rate at 300 FPS. + * Note that the target multiplier may not be achieved + * if the host hardware has insufficient processing + * power. + * Setting a value of 0.0 (or greater than 0.0 but + * less than 1.0) will result in an uncapped + * fast-forward rate (limited only by hardware + * capacity). + * If the value is negative, it will be ignored + * (i.e. the frontend will use a runtime speed + * multiplier of its own choosing) */ + float ratio; + + /* If true, fastforwarding mode will be enabled. + * If false, fastforwarding mode will be disabled. */ + bool fastforward; + + /* If true, and if supported by the frontend, an + * on-screen notification will be displayed while + * 'fastforward' is true. + * If false, and if supported by the frontend, any + * on-screen fast-forward notifications will be + * suppressed */ + bool notification; + + /* If true, the core will have sole control over + * when fastforwarding mode is enabled/disabled; + * the frontend will not be able to change the + * state set by 'fastforward' until either + * 'inhibit_toggle' is set to false, or the core + * is unloaded */ + bool inhibit_toggle; +}; + +/* During normal operation. Rate will be equal to the core's internal FPS. */ +#define RETRO_THROTTLE_NONE 0 + +/* While paused or stepping single frames. Rate will be 0. */ +#define RETRO_THROTTLE_FRAME_STEPPING 1 + +/* During fast forwarding. + * Rate will be 0 if not specifically limited to a maximum speed. */ +#define RETRO_THROTTLE_FAST_FORWARD 2 + +/* During slow motion. Rate will be less than the core's internal FPS. */ +#define RETRO_THROTTLE_SLOW_MOTION 3 + +/* While rewinding recorded save states. Rate can vary depending on the rewind + * speed or be 0 if the frontend is not aiming for a specific rate. */ +#define RETRO_THROTTLE_REWINDING 4 + +/* While vsync is active in the video driver and the target refresh rate is + * lower than the core's internal FPS. Rate is the target refresh rate. */ +#define RETRO_THROTTLE_VSYNC 5 + +/* When the frontend does not throttle in any way. Rate will be 0. + * An example could be if no vsync or audio output is active. */ +#define RETRO_THROTTLE_UNBLOCKED 6 + +struct retro_throttle_state +{ + /* The current throttling mode. Should be one of the values above. */ + unsigned mode; + + /* How many times per second the frontend aims to call retro_run. + * Depending on the mode, it can be 0 if there is no known fixed rate. + * This won't be accurate if the total processing time of the core and + * the frontend is longer than what is available for one frame. */ + float rate; +}; + /* Callbacks */ /* Environment callback. Gives implementations a way of performing diff --git a/libretro-common/include/retro_timers.h b/libretro-common/include/retro_timers.h new file mode 100644 index 000000000..6fd098035 --- /dev/null +++ b/libretro-common/include/retro_timers.h @@ -0,0 +1,103 @@ +/* Copyright (C) 2010-2020 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (retro_timers.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __LIBRETRO_COMMON_TIMERS_H +#define __LIBRETRO_COMMON_TIMERS_H + +#if defined(XENON) +#include